diff --git a/README.md b/README.md index 755eaceb30..146784e36b 100644 --- a/README.md +++ b/README.md @@ -3,10 +3,10 @@

- ACE3 Version + ACE3 Version - - ACE3 Download + + ACE3 Download ACE3 Issues @@ -17,6 +17,9 @@ ACE3 License + + ACE3 Slack +

Requires the latest version of CBA A3. Visit us on Facebook | YouTube | Twitter | Reddit

diff --git a/addons/advanced_ballistics/functions/fnc_handleFirePFH.sqf b/addons/advanced_ballistics/functions/fnc_handleFirePFH.sqf index 2ae2bf2f9c..7a432831ad 100644 --- a/addons/advanced_ballistics/functions/fnc_handleFirePFH.sqf +++ b/addons/advanced_ballistics/functions/fnc_handleFirePFH.sqf @@ -14,10 +14,10 @@ private "_deleted"; - - _deleted = 0; +_aceTimeSecond = floor ACE_time; + { private ["_bulletVelocity", "_bulletPosition", "_bulletSpeed"]; _x params["_bullet","_caliber","_bulletTraceVisible","_index"]; @@ -37,7 +37,6 @@ _deleted = 0; drop ["\A3\data_f\ParticleEffects\Universal\Refract","","Billboard",1,0.1,getPos _bullet,[0,0,0],0,1.275,1,0,[0.02*_caliber,0.01*_caliber],[[0,0,0,0.65],[0,0,0,0.2]],[1,0],0,0,"","",""]; }; - _aceTimeSecond = floor ACE_time; call compile ("ace_advanced_ballistics" callExtension format["simulate:%1:%2:%3:%4:%5:%6:%7", _index, _bulletVelocity, _bulletPosition, ACE_wind, ASLToATL(_bulletPosition) select 2, _aceTimeSecond, ACE_time - _aceTimeSecond]); } forEach GVAR(allBullets); diff --git a/addons/advanced_ballistics/functions/fnc_handleFired.sqf b/addons/advanced_ballistics/functions/fnc_handleFired.sqf index 74c16bdd47..d97c9b952a 100644 --- a/addons/advanced_ballistics/functions/fnc_handleFired.sqf +++ b/addons/advanced_ballistics/functions/fnc_handleFired.sqf @@ -53,7 +53,9 @@ if (!GVAR(simulateForEveryone) && !(local _unit)) then { if (GVAR(disabledInFullAutoMode) && getNumber(configFile >> "CfgWeapons" >> _weapon >> _mode >> "autoFire") == 1) then { _abort = true; }; if (_abort || !(GVAR(extensionAvailable))) exitWith { - [_bullet, getNumber(configFile >> "CfgAmmo" >> _ammo >> "airFriction")] call EFUNC(winddeflection,updateTrajectoryPFH); + if (missionNamespace getVariable [QEGVAR(windDeflection,enabled), false]) then { + EGVAR(windDeflection,trackedBullets) pushBack [_bullet, getNumber(configFile >> "cfgAmmo" >> _ammo >> "airFriction")]; + }; }; // Get Weapon and Ammo Configurations diff --git a/addons/advanced_ballistics/stringtable.xml b/addons/advanced_ballistics/stringtable.xml index 250e9a014f..502e86ebe8 100644 --- a/addons/advanced_ballistics/stringtable.xml +++ b/addons/advanced_ballistics/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -32,6 +32,7 @@ Erweiterte Ballistik Pokročilá balistika Balística avançada + Balistique avancée Fejlett ballisztika Продвинутая баллистика @@ -42,6 +43,7 @@ Erweiterte Ballistik Pokročilá balistika Balística avançada + Balistique avancée Fejlett ballisztika Продвинутая баллистика @@ -52,6 +54,7 @@ Aktiviert die erweiterte Ballistik Aktivuje pokročilou balistiku Ativa balística avançada + Activer la balistique avancée Engedélyezi a fejlett ballisztikát Включает продвинутую баллистику @@ -62,6 +65,7 @@ Für Scharfschützen aktiviert Povoleno pro odstřelovače Ativar para caçadores + Activer pour les snipers Mesterlövészeknek engedélyezve Включена для снайперов @@ -72,6 +76,7 @@ Aktiviert die erweiterte Ballistik für nicht lokale Scharfschützen (bei Benutzung von Optiken mit starker Vergrößerung) Aktivuje pokročilou balistiku pro nelokální odstřelovače (když používá výkonnou optiku) Ativa balística avançada para caçadores não locais (quando usando miras telescópicas) + Active la balistique avancée pour les snipers non locaux (en utilisant les optiques avancées) Engedélyezi a fejlett ballisztikát nem-helyi mesterlövészeknek (nagy-teljesítményű optika használatakor) Включает продвинутую баллистику для нелокальных снайперов (при использовании мощной оптики) @@ -82,6 +87,7 @@ Für Gruppenmitglieder aktiviert Povoleno pro členy skupiny Ativada para membros do grupo + Activer pour les membres groupés Csoporttagoknak engedélyezve Включена для группы @@ -92,6 +98,7 @@ Aktiviert die erweiterte Ballistik für nicht lokale Gruppenmitglieder Aktivuje pokročilou balistiku pro nelokální členy skupiny Ativa balística avançada para membros de grupo não locais + Active la balistique avancée pour les membres groupés non locaux Engedélyezi a fejlett ballisztikát nem-helyi csoporttagoknak Включает продвинутую баллистику для нелокальных членов группы @@ -102,6 +109,7 @@ Für jeden aktiviert Povoleno pro všechny Ativada para todos + Activer pour tout le monde Mindenkinek engedélyezve Включена для всех @@ -112,6 +120,7 @@ Aktiviert die erweiterte Ballistik für alle nicht lokalen Spieler (das Aktivieren dieser Funktion kann zur Beeinträchtigung des Spielerlebnisses im Multiplayer führen) Aktivovat pokročilou balistiku pro všechny nelokální hráče (aktivace této možnosti způsobuje pokles snímu za sekundu během těžké přestřelky v multiplayeru) Ativa balística avançada para todos os jogadores não locais (ativando isso pode degradar a performance durante troca de tiros intensas no multiplayer) + Active la balistique avancé pour tous les joueurs non locaux (activer cette option peut avoir un impact sur les performance en multi durant les grands échanges de tirs) Engedélyezi a fejlett ballisztikát az összes nem-helyi játékosnak (ez a funkció leronthatja a teljesítményt intenzív többjátékos tűzharcok alatt) Включает продвинутую баллистику для всех нелокальных игроков (включение этой опции может снизить производительность при массовых перестрелках в мультиплеере) @@ -122,6 +131,7 @@ Für Gruppenmitglieder immer aktiviert Vždy povoleno pro členy skupiny Sempre ativada para membros do grupo + Toujours activer pour les membres groupés Mindig engedélyezve csoporttagoknak Всегда включена для членов группы @@ -132,6 +142,7 @@ Aktiviert die erweiterte Ballistik immer, wenn ein Gruppenmitglied schießt Aktivuje pokročilou balistiku pro členy skupiny Sempre ative balística avançada quando um membro do grupo disparar + Active tout le temps la balistique avancée quand un membre du groupe ouvre le feu Mindig engedélyezi a fejlett ballisztikát, ha egy csoporttag tüzel Всегда включает продвинутую баллистику когда стреляет член группы @@ -142,6 +153,7 @@ Beim vollautomatischen Feuern deaktiviert Zakázáno v automatickém režimu střelby Desabilitar no modo automático + Désactiver en mode rafale libre Automata módban letiltva Выкл. для автомат. режима @@ -152,6 +164,7 @@ Deaktiviert die erweiterte Ballistik beim vollautomatischen Feuern Zákáže pokročilou balistiku během střelby v režimu automat Desabilitar a balística avançada durante fogo automático + Désactive la balistique avancée pour les tirs en rafale libre Letiltja a fejlett ballisztikát automata tüzelés folyamán Выключает продвинутую баллистику при стрельбе в полностью автоматическом режиме @@ -162,6 +175,7 @@ Simulation der Munitionstemperatur aktivieren Povolit simulaci teploty munice Ativar simulação de temperatura de munição + Activer la simulation de la température Lőszer-hő szimuláció engedélyezése Симуляция температуры для боеприпасов @@ -172,6 +186,7 @@ Munitionstemperatur hat Einfluss auf die Mündungsgeschwindigkeit Úsťová rychlost je závislá na teplotě munice A velocidade de saída varia com a temperatura da munição + La température de la munition influe sur la vélocité intiale A kezdősebesség a lőszer hőmérsékletétől függően változó Начальная скорость пули зависит от температуры @@ -182,6 +197,7 @@ Simulation der Lauflänge aktivieren Povolit simulaci délky hlavně Ativar a simulação de comprimento do cano + Activer la simulation de la longueur de canon Csőhossz-szimuláció engedélyezése Симуляция длины ствола @@ -192,6 +208,7 @@ Lauflänge beeinflusst Mündungsgeschwindigkeit Úsťová rychlost je závislá na délce hlavně A velocidade de saída caria com o comprimento do cano + La longueur du canon influe sur la vélocité initale A kezdősebesség a cső hosszától függően változó Начальная скорость пули зависит от длины ствола @@ -202,6 +219,7 @@ Geschossspureffekt aktivieren Povolit efekt trasírek Ativa efeito traçante de projétil + Activer l'effet traçante Nyomkövető-effekt engedélyezése Следы пуль @@ -212,6 +230,7 @@ Aktiviere Geschossspureffekt für hohe Kaliber (bei Benutzung von Optiken mit starker Vergrößerung) Aktivuje efekt trasírek z vysokokaliberních zbraní (viditelné pouze skrze výkonnou optiku) Ativa o efeito traçante de projétil para projéteis de alto calibre (somente visível quando observado por miras telescópicas) + Active une tracante pour les munitions de gros calibre (seulement visible en utilisant des optiques avancées) Engedélyezi a nagy kaliberű lövedékek nyomának vizuális követését (csak nagy teljesítményű optikán keresztül látható) Включает эффект следов пуль для больших калибров (видны только через мощную оптику) @@ -222,6 +241,7 @@ Simulationsintervall Interval simulace Intervalo da simulação + Intervalle de simulation Szimuláció intervalluma Интервал симуляции @@ -232,6 +252,7 @@ Legt das Intervall zwischen den Berechnungsschritten fest Určuje interval mezi každým výpočtem Define o intervalo entre cada cálculo + Défini un intervalle de calcul entre deux simulations Meghatározza a számítási lépések közötti időintervallumot Определяет временной интервал между вычислениями @@ -242,6 +263,7 @@ Simulationsradius Rozsah simulace Raio de simulação + Rayon de simulation Szimuláció hatóköre Радиус симуляции @@ -252,6 +274,7 @@ Gibt den Radius (in Metern) um den Spieler an, bei dem die erweiterte Ballistik auf Geschosse angewendet wird Určuje oblast kolem hráče (v metrech), kde je pokročilá balistika použita na projektil Define o raio ao redor do jogador (em metros) onde a balística avançada será aplicada aos projéteis + Défini le rayon autour du joueur (en mètres) d'application de la balistique avancée Meghatározza a játékos körüli hatókört (méterben), ahol a lövedékek fejlett ballisztikát használnak Определяет радиус вокруг игрока (в метрах), в котором продвинутая баллистика применяется к снарядам @@ -260,8 +283,9 @@ Moduł ten pozwala aktywować zaawansowaną balistykę biorącą przy obliczeniach trajektorii lotu pocisku pod uwagę takie rzeczy jak temperatura powietrza, ciśnienie atmosferyczne, wilgotność powietrza, siły Coriolisa i Eotvosa, grawitację a także broń z jakiej wykonywany jest strzał oraz rodzaj amunicji. Wszystko to sprowadza się na bardzo dokładne odwzorowanie balistyki. Tento modul umožňuje aktivovat pokročilou balistiku, která vypočítává trajektorii kulky a bere do úvahy věci jako je teplota vzduchu, atmosférický tlak, vlhkost vzduchu, gravitaci, typ munice a zbraň, ze které je náboj vystřelen. To vše přispívá k velmi přesné balistice. Este módulo permite que você ative cálculos de balística avançada, fazendo a trajetória do projétil levar em consideração coisas como temperatura do ar, pressão atmosférica, umidade, força de Coriolis, a gravidade, o modelo da arma no qual o disparo é realizado e o tipo de munição. Tudo isso acrescenta-se a um balística muito precisa. + Ce module active la simulation de balistique avancée - ie les projectiles sont influencé par des varibles comme le vent, la température, la pression atmosphérique, l'humidité, la gravité, le type de munition et l'arme avec laquelles ils sont tirés Ez a modul engedélyezi a fejlett ballisztikai szimulációt - a lövedékek röppályáját befolyásolni fogja a levegő hőmérséklete, légnyomás, páratartalom, gravitáció, a lövedék fajtája, valamint a fegyver, amiből kilőtték a lövedéket. Этот модуль включает симуляцию продвинутой баллистики - при этом на траекторию полета снаряда влияют различные параметры, такие как температура воздуха, атмосферное давление, влажность, гравитация, тип боеприпаса и оружия, из которого произвели выстрел. - \ No newline at end of file + diff --git a/addons/aircraft/stringtable.xml b/addons/aircraft/stringtable.xml index e917ca7e9d..d91af73a1c 100644 --- a/addons/aircraft/stringtable.xml +++ b/addons/aircraft/stringtable.xml @@ -1,4 +1,4 @@ - + diff --git a/addons/atragmx/stringtable.xml b/addons/atragmx/stringtable.xml index fce50a4e1d..a8e23ffbda 100644 --- a/addons/atragmx/stringtable.xml +++ b/addons/atragmx/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -50,4 +50,4 @@ Abrir ATragMX - \ No newline at end of file + diff --git a/addons/attach/functions/fnc_canDetach.sqf b/addons/attach/functions/fnc_canDetach.sqf index 915295e6c9..d9796a5a5c 100644 --- a/addons/attach/functions/fnc_canDetach.sqf +++ b/addons/attach/functions/fnc_canDetach.sqf @@ -19,6 +19,8 @@ params ["_attachToVehicle", "_unit"]; TRACE_2("params",_attachToVehicle,_unit); +if ((vehicle _unit) != _unit) exitWith {false}; + _attachedList = _attachToVehicle getVariable [QGVAR(attached), []]; if ((count _attachedList) == 0) exitWith {false}; diff --git a/addons/attach/stringtable.xml b/addons/attach/stringtable.xml index cfbebd33ab..cc09e8f45d 100644 --- a/addons/attach/stringtable.xml +++ b/addons/attach/stringtable.xml @@ -1,4 +1,4 @@ - + diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index 5ffe94ac45..eeb64fec47 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -6,23 +6,11 @@ class CfgAmmo { timeToLive=6; }; - class B_20mm : BulletBase { - timeToLive=30; - }; - class B_25mm : BulletBase { - timeToLive=30; - }; - class B_35mm_AA : BulletBase { - timeToLive=30; - }; - class B_30mm_AP : BulletBase { - timeToLive=30; - }; - class B_556x45_Ball : BulletBase { airFriction=-0.00126466; hit=8; typicalSpeed=750; + tracerScale = 1; tracerStartTime=0.073; // M856 tracer burns out to 800m tracerEndTime=1.57123; // Time in seconds calculated with ballistics calculator ACE_caliber=5.69; @@ -128,9 +116,13 @@ class CfgAmmo { ACE_muzzleVelocities[]={785, 883, 925}; ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; + class B_56x15_dual: BulletBase { + tracerScale = 0.5; + }; class B_65x39_Caseless : BulletBase { airFriction=-0.00075308; typicalSpeed=800; + tracerScale = 1.1; //1.0; ACE_caliber=6.706; ACE_bulletLength=32.893; ACE_bulletMass=7.9704; @@ -180,10 +172,15 @@ class CfgAmmo { ACE_muzzleVelocities[]={750, 820, 840, 852, 860}; ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; + class SubmunitionBullet; + class B_65x39_Minigun_Caseless: SubmunitionBullet { + tracerScale = 1.1; //1.0; + }; class B_762x51_Ball : BulletBase { airFriction=-0.00100957; typicalSpeed=833; hit=9; + tracerScale = 1.2; //0.6; tracerStartTime=0.073; // Based on the British L5A1 which burns out to 1000m tracerEndTime=2.15957; // Time in seconds calculated with ballistics calculator ACE_caliber=7.823; @@ -479,6 +476,7 @@ class CfgAmmo { class B_9x21_Ball : BulletBase { airFriction=-0.00226847; typicalSpeed=390; + tracerScale = 0.5; hit=6; ACE_caliber=9.042; ACE_bulletLength=15.494; @@ -491,6 +489,9 @@ class CfgAmmo { ACE_muzzleVelocities[]={440, 460, 480}; ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; + class B_9x21_Ball_Tracer_Green: B_9x21_Ball { + tracerScale = 0.5; + }; class ACE_9x18_Ball_57N181S : B_9x21_Ball { hit=5; airFriction=-0.00190333; @@ -584,6 +585,7 @@ class CfgAmmo { timeToLive=10; airFriction=-0.00038944; typicalSpeed=910; + tracerScale = 1.3; //1.2; ACE_caliber=10.363; ACE_bulletLength=54.0; ACE_bulletMass=26.568; @@ -670,9 +672,13 @@ class CfgAmmo { ACE_muzzleVelocities[]={880, 915, 925}; ACE_barrelLengths[]={508.0, 660.4, 711.2}; }; + class B_127x33_Ball: BulletBase { + tracerScale = 1.3; //1.2; + }; class B_127x54_Ball : BulletBase { airFriction=-0.00019268; typicalSpeed=300; + tracerScale = 1.3;// ACE_caliber=12.954; ACE_bulletLength=64.516; ACE_bulletMass=48.6; @@ -688,6 +694,7 @@ class CfgAmmo { timeToLive=10; airFriction=-0.00057503; typicalSpeed=900; + tracerScale = 1.3; //1.2; ACE_caliber=12.954; ACE_bulletLength=58.674; ACE_bulletMass=41.9256; @@ -703,6 +710,7 @@ class CfgAmmo { timeToLive=10; airFriction=-0.00057503; typicalSpeed=900; + tracerScale = 1.3;// hit=25; caliber=4.0; ACE_caliber=12.954; @@ -736,6 +744,7 @@ class CfgAmmo { timeToLive=10; airFriction=-0.00063800; typicalSpeed=820; + tracerScale = 1.3; //1.5; ACE_caliber=12.979; ACE_bulletLength=64.008; ACE_bulletMass=48.276; @@ -750,6 +759,7 @@ class CfgAmmo { class B_45ACP_Ball : BulletBase { airFriction=-0.00081221; typicalSpeed=250; + tracerScale = 0.6; ACE_caliber=11.481; ACE_bulletLength=17.272; ACE_bulletMass=14.904; @@ -761,4 +771,36 @@ class CfgAmmo { ACE_muzzleVelocities[]={230, 250, 285}; ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; + class B_19mm_HE: BulletBase { + tracerScale = 1; + }; + class B_30mm_HE: B_19mm_HE { + tracerScale = 2.5; + }; + class B_20mm: BulletBase { + timeToLive=30; + tracerScale = 1.5; //1; + }; + class B_25mm: BulletBase { + timeToLive=30; + tracerScale = 2.0; //1; + }; + class B_30mm_AP: BulletBase { + timeToLive=30; + tracerScale = 2.5; + }; + class B_35mm_AA: BulletBase { + timeToLive=30; + tracerScale = 2.75; //1.85; + }; + class ShellBase; + class Sh_120mm_HE: ShellBase { + tracerScale = 3; + }; + class Sh_120mm_APFSDS: ShellBase { + tracerScale = 3; + }; + class Gatling_30mm_HE_Plane_CAS_01_F: BulletBase { + tracerScale = 2.5; + }; }; diff --git a/addons/ballistics/stringtable.xml b/addons/ballistics/stringtable.xml index 59e7af97dc..0cc8c0be6b 100644 --- a/addons/ballistics/stringtable.xml +++ b/addons/ballistics/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -1599,8 +1599,9 @@ [ACE] Munitionskiste [ACE] Bedna s municí [ACE] Caixa com suprimentos de munição + [ACE] Caisse de munitions [ACE] Lőszeres láda [ACE] Ящик с боеприпасами - \ No newline at end of file + diff --git a/addons/captives/CfgEventHandlers.hpp b/addons/captives/CfgEventHandlers.hpp index 9d1a69f4fd..4d12dc10c4 100644 --- a/addons/captives/CfgEventHandlers.hpp +++ b/addons/captives/CfgEventHandlers.hpp @@ -25,14 +25,6 @@ class Extended_GetOut_EventHandlers { }; }; }; -//reset captivity and escorting status when getting killed -class Extended_Killed_EventHandlers { - class CAManBase { - class GVAR(AutoDetachCaptive) { - killed = QUOTE(_this call FUNC(handleKilled)); - }; - }; -}; //mission start class Extended_InitPost_EventHandlers { class CAManBase { diff --git a/addons/captives/CfgMoves.hpp b/addons/captives/CfgMoves.hpp index 161fcce9a4..8fa3440706 100644 --- a/addons/captives/CfgMoves.hpp +++ b/addons/captives/CfgMoves.hpp @@ -35,6 +35,12 @@ class CfgMovesMaleSdr: CfgMovesBasic { class CutSceneAnimationBase; + #define MACRO_ANIMATION \ + head = "headDefault"; \ + aimingBody = "aimingNo"; \ + forceAim = 1; \ + static = 1; + //Handcuffed Anims: class ACE_AmovPercMstpSnonWnonDnon_AmovPercMstpScapWnonDnon: CutSceneAnimationBase { actions = "ACE_CivilStandHandcuffedActions"; @@ -45,6 +51,7 @@ class CfgMovesMaleSdr: CfgMovesBasic { ConnectTo[] = {"ACE_AmovPercMstpScapWnonDnon",0.1}; InterpolateTo[] = {"Unconscious",0.01,"ACE_AmovPercMstpScapWnonDnon_AmovPercMstpSnonWnonDnon",0.1}; canReload = 0; + MACRO_ANIMATION }; class ACE_AmovPercMstpScapWnonDnon: ACE_AmovPercMstpSnonWnonDnon_AmovPercMstpScapWnonDnon { file = "\A3\anims_f\Data\Anim\Sdr\mov\erc\stp\non\non\AmovPercMstpSnonWnonDnon_Ease"; @@ -52,12 +59,14 @@ class CfgMovesMaleSdr: CfgMovesBasic { ConnectTo[] = {"ACE_AmovPercMstpScapWnonDnon_AmovPercMstpSnonWnonDnon",0.1}; InterpolateTo[] = {"Unconscious",0.01}; looped = 1; + MACRO_ANIMATION }; class ACE_AmovPercMstpScapWnonDnon_AmovPercMstpSnonWnonDnon: ACE_AmovPercMstpSnonWnonDnon_AmovPercMstpScapWnonDnon { actions = "CivilStandActions"; file = "\A3\anims_f\Data\Anim\Sdr\mov\erc\stp\non\non\amovpercmstpsnonwnondnon_easeout"; ConnectTo[] = {"AmovPercMstpSnonWnonDnon",0.1}; InterpolateTo[] = {"Unconscious",0.01,"ACE_AmovPercMstpSnonWnonDnon_AmovPercMstpScapWnonDnon",0.1}; + MACRO_ANIMATION }; //Handcuffed-FFV: @@ -65,6 +74,7 @@ class CfgMovesMaleSdr: CfgMovesBasic { file = "\A3\cargoposes_F_heli\anim\passenger_flatground_3idleunarmed.rtm"; actions = "ACE_CivilHandCuffedFFVActions"; ConnectTo[] = {}; + MACRO_ANIMATION }; @@ -78,6 +88,7 @@ class CfgMovesMaleSdr: CfgMovesBasic { ConnectTo[] = {"ACE_AmovPercMstpSsurWnonDnon",0.1}; InterpolateTo[] = {"Unconscious",0.01,"ACE_AmovPercMstpSsurWnonDnon_AmovPercMstpSnonWnonDnon",0.1}; canReload = 0; + MACRO_ANIMATION }; class ACE_AmovPercMstpSsurWnonDnon: ACE_AmovPercMstpSnonWnonDnon_AmovPercMstpSsurWnonDnon { file = "\A3\anims_f\Data\Anim\Sdr\mov\erc\stp\sur\non\AmovPercMstpSsurWnonDnon"; @@ -85,6 +96,7 @@ class CfgMovesMaleSdr: CfgMovesBasic { looped = 1; ConnectTo[] = {"ACE_AmovPercMstpSsurWnonDnon_AmovPercMstpSnonWnonDnon",0.1}; InterpolateTo[] = {"Unconscious",0.01}; + MACRO_ANIMATION }; class ACE_AmovPercMstpSsurWnonDnon_AmovPercMstpSnonWnonDnon: ACE_AmovPercMstpSnonWnonDnon_AmovPercMstpSsurWnonDnon { speed = 0.5; //for gameplay reasons, slow this down @@ -92,6 +104,7 @@ class CfgMovesMaleSdr: CfgMovesBasic { file = "\A3\anims_f\Data\Anim\Sdr\mov\erc\stp\sur\non\AmovPercMstpSsurWnonDnon_AmovPercMstpSnonWnonDnon"; ConnectTo[] = {"AmovPercMstpSnonWnonDnon",0.1}; InterpolateTo[] = {"Unconscious",0.01,"ACE_AmovPercMstpSnonWnonDnon_AmovPercMstpSsurWnonDnon",0.1}; + MACRO_ANIMATION }; }; }; diff --git a/addons/captives/XEH_preInit.sqf b/addons/captives/XEH_preInit.sqf index d2b5b615bb..b59249b937 100644 --- a/addons/captives/XEH_preInit.sqf +++ b/addons/captives/XEH_preInit.sqf @@ -19,7 +19,6 @@ PREP(doUnloadCaptive); PREP(findEmptyNonFFVCargoSeat); PREP(handleGetIn); PREP(handleGetOut); -PREP(handleKilled); PREP(handleOnUnconscious); PREP(handlePlayerChanged); PREP(handleRespawn); diff --git a/addons/captives/functions/fnc_handleKilled.sqf b/addons/captives/functions/fnc_handleKilled.sqf deleted file mode 100644 index f7b15ec117..0000000000 --- a/addons/captives/functions/fnc_handleKilled.sqf +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Author: PabstMirror - * Handles when a unit is kill. Reset captivity and escorting status - * - * Arguments: - * 0: _oldUnit - * - * Return Value: - * None - * - * Example: - * [bob1] call ACE_captives_fnc_handleKilled - * - * Public: No - */ -#include "script_component.hpp" - -params ["_oldUnit"]; - -if (!local _oldUnit) exitWith {}; - -if (_oldUnit getVariable [QGVAR(isHandcuffed), false]) then { - [_oldUnit, false] call FUNC(setHandcuffed); -}; - -if (_oldUnit getVariable [QGVAR(isEscorting), false]) then { - _oldUnit setVariable [QGVAR(isEscorting), false, true]; -}; - -if (_oldUnit getVariable [QGVAR(isSurrendering), false]) then { - [_oldUnit, false] call FUNC(setSurrendered); -}; diff --git a/addons/captives/functions/fnc_handleRespawn.sqf b/addons/captives/functions/fnc_handleRespawn.sqf index 6f68aea2fe..7e97501576 100644 --- a/addons/captives/functions/fnc_handleRespawn.sqf +++ b/addons/captives/functions/fnc_handleRespawn.sqf @@ -20,20 +20,34 @@ params ["_unit","_dead"]; if (!local _unit) exitWith {}; -//With respawn="group", we could be respawning into a unit that is handcuffed/captive -//If they are, reset and rerun the SET function -//if not, make sure to explicity disable the setCaptivityStatus, because captiveNum does not work correctly on respawn +// Group and side respawn can potentially respawn you as a captive unit +// Base and instant respawn cannot, so captive should be entirely reset +// So we explicity account for the respawn type +private ["_respawn"]; +_respawn = [0] call BIS_fnc_missionRespawnType; -if (_unit getVariable [QGVAR(isHandcuffed), false]) then { - _unit setVariable [QGVAR(isHandcuffed), false]; - [_unit, true] call FUNC(setHandcuffed); +if (_respawn > 3) then { + if (_unit getVariable [QGVAR(isHandcuffed), false]) then { + _unit setVariable [QGVAR(isHandcuffed), false]; + [_unit, true] call FUNC(setHandcuffed); + }; + + if (_unit getVariable [QGVAR(isSurrendering), false]) then { + _unit setVariable [QGVAR(isSurrendering), false]; + [_unit, true] call FUNC(setSurrendered); + }; } else { + if (_unit getVariable [QGVAR(isHandcuffed), false]) then { + [_unit, false] call FUNC(setHandcuffed); + }; [_unit, QGVAR(Handcuffed), false] call EFUNC(common,setCaptivityStatus); -}; -if (_unit getVariable [QGVAR(isSurrendering), false]) then { - _unit setVariable [QGVAR(isSurrendering), false]; - [_unit, true] call FUNC(setSurrendered); -} else { + if (_unit getVariable [QGVAR(isSurrendering), false]) then { + [_unit, false] call FUNC(setSurrendered); + }; [_unit, QGVAR(Surrendered), false] call EFUNC(common,setCaptivityStatus); + + if (_oldUnit getVariable [QGVAR(isEscorting), false]) then { + _oldUnit setVariable [QGVAR(isEscorting), false, true]; + }; }; diff --git a/addons/captives/stringtable.xml b/addons/captives/stringtable.xml index d1b2da15bb..fd7adedd74 100644 --- a/addons/captives/stringtable.xml +++ b/addons/captives/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -164,6 +164,7 @@ Einheit kapitulieren lassen Vzdávající se jednotka Fazer unidade se render + Faire capituler l'unité Egység kapitulálása Сделать юнита пленным @@ -174,6 +175,7 @@ Einheit synchronisieren, um sie kapitulieren zu lassen.<br />Quelle: ace_captives Synchronizuj s jednotkou, která se má vzdát.<br />Zdroj: ace_captives Sincroniza uma unidade para fazer com que ela se renda. <br/>Fonte: ace_captives + Synchronise une unité pour la rendre captive. <br/>Source: ace_captives Egység szinkronizálása, hogy kapituláljon.<br />Forrás: ace_captives Синхронизируйте с юнитами, чтобы сделать их пленными.<br />Источник: ace_captives @@ -184,6 +186,7 @@ Nastavení zajatce Gefangenen-Einstellungen Ajustes de prisioneiros + Options de capitulation Fogoly-beállítások Настройки пленения @@ -194,6 +197,7 @@ Toto kontroluje nastavení kapitulace a pout Einstellungen zur Kapitulation und Kabelbindern Controla as configurações de rendição e abraçadeiras + Contrôle les paramètres de la rédition et des Serflex Szabályozza a kapituláció és bilincselés beállításait Управляет настройками сдачи в плен и связывания @@ -204,6 +208,7 @@ Může spoutat spolubojovníky Kann Teamkollegen fesseln Pode algemar o próprio lado + Peut libérer sa propre faction Saját oldal megbilincselhető Связать союзника @@ -214,6 +219,7 @@ Mohou hráči spoutat jednotky na své straně Können Spieler eigene Einheiten fesseln Os jogadores podem algemar unidades do seu lado + Les joueurs peuvent utiliser les Serflex sur leur propre camp A játékosok megkötözhetik-e a saját oldalukon lévő egységeket Разрешить игрокам связывать юнитов своей стороны @@ -224,6 +230,7 @@ Povolit vzdávání Kapitulation erlauben Permite rendição + Permettre la capitulation Kapituláció engedélyezése Сдаться в плен @@ -234,28 +241,33 @@ Hráč se může vzdát poté, co si skryje zbraň Spieler können kapitulieren, nachdem sie ihre Waffe geholstert haben Jogadores podem se render depois de guardar sua arma + Les joueurs peuvent se rendre après avoir rangé leur arme A játékosok megadhatják magukat a fegyverük elrakása után Игроки могут сдаться в плен после того, как уберут оружие Require surrendering Wymagaj kapitulacji + Requer rendição Требовать пленения Require Players to surrender before they can be arrested Wymagaj od graczy kapitulacji zanim będzie można ich zaaresztować + Requer que jogadores se rendam antes de poderem ser presos Требуется, чтобы игрок сдался в плен прежде, чем его можно будет связать Surrendering only Tylko kapitulacja + Somente rendição Только сдавшийся в плен Surrendering or No weapon Kapitulacja lub brak broni + Rendição ou desarmado Сдавшийся или безоружный - \ No newline at end of file + diff --git a/addons/cargo/CfgVehicles.hpp b/addons/cargo/CfgVehicles.hpp index 25bd441b90..ccc23a99aa 100644 --- a/addons/cargo/CfgVehicles.hpp +++ b/addons/cargo/CfgVehicles.hpp @@ -10,6 +10,7 @@ class CfgVehicles { isGlobal = 1; isTriggerActivated = 0; author = ECSTRING(common,ACETeam); + class Arguments { class enable { displayName = CSTRING(ModuleSettings_enable); @@ -18,13 +19,13 @@ class CfgVehicles { defaultValue = 1; }; }; + class ModuleDescription { description = CSTRING(SettingsModule_Description); sync[] = {}; }; }; - class LandVehicle; class Car: LandVehicle { GVAR(space) = 4; @@ -39,6 +40,7 @@ class CfgVehicles { };*/ }; }; + class Tank: LandVehicle { GVAR(space) = 4; GVAR(hasCargo) = 1; @@ -50,27 +52,154 @@ class CfgVehicles { GVAR(hasCargo) = 1; }; + // hemets + class Truck_01_base_F: Truck_F { + GVAR(space) = 8; + }; + class B_Truck_01_transport_F: Truck_01_base_F { + GVAR(space) = 20; + }; + class B_Truck_01_covered_F: B_Truck_01_transport_F { + GVAR(space) = 20; + }; + class B_Truck_01_mover_F: B_Truck_01_transport_F { + GVAR(space) = 4; + }; + class B_Truck_01_box_F: B_Truck_01_mover_F { + GVAR(space) = 40; + }; + class B_Truck_01_Repair_F: B_Truck_01_mover_F { + GVAR(space) = 20; + }; + class B_Truck_01_ammo_F: B_Truck_01_mover_F { + GVAR(space) = 8; + }; + class B_Truck_01_fuel_F: B_Truck_01_mover_F { + GVAR(space) = 4; + }; + class B_Truck_01_medical_F: B_Truck_01_transport_F { + GVAR(space) = 8; + }; + + // kamaz' + class Truck_02_base_F: Truck_F { //covers "covered" variants + GVAR(space) = 20; + }; + class Truck_02_transport_base_F: Truck_02_base_F { + GVAR(space) = 20; + }; + class Truck_02_box_base_F: Truck_02_base_F { // repair variant, not actually cargo box like hemet + GVAR(space) = 12; + }; + class Truck_02_medical_base_F: Truck_02_box_base_F { + GVAR(space) = 8; + }; + class Truck_02_Ammo_base_F: Truck_02_base_F { + GVAR(space) = 12; + }; + class Truck_02_fuel_base_F: Truck_02_base_F { + GVAR(space) = 4; + }; + + // typhoon + class Truck_03_base_F: Truck_F { + GVAR(space) = 8; + }; + class O_Truck_03_transport_F: Truck_03_base_F { + GVAR(space) = 20; + }; + class O_Truck_03_covered_F: Truck_03_base_F { + GVAR(space) = 20; + }; + class O_Truck_03_repair_F: Truck_03_base_F { + GVAR(space) = 12; + }; + class O_Truck_03_ammo_F: Truck_03_base_F { + GVAR(space) = 8; + }; + class O_Truck_03_fuel_F: Truck_03_base_F { + GVAR(space) = 4; + }; + class O_Truck_03_medical_F: Truck_03_base_F { + GVAR(space) = 8; + }; + class O_Truck_03_device_F: Truck_03_base_F { + GVAR(space) = 4; + }; + + // civ trucks + class Van_01_base_F: Truck_F { + GVAR(space) = 8; + }; + class Van_01_transport_base_F: Van_01_base_F { + GVAR(space) = 8; + }; + class Van_01_box_base_F: Van_01_base_F { // repair variant, not actually cargo box like hemet + GVAR(space) = 12; + }; + class Van_01_fuel_base_F: Van_01_base_F { + GVAR(space) = 4; + }; + + // misc. vehicles + class Quadbike_01_base_F: Car_F { + GVAR(space) = 0; + GVAR(hasCargo) = 0; + }; + + class Kart_01_Base_F: Car_F { + GVAR(space) = 0; + GVAR(hasCargo) = 0; + }; + + // helicopters class Air; class Helicopter: Air { GVAR(space) = 8; GVAR(hasCargo) = 1; }; + class Heli_Transport_02_base_F; class I_Heli_Transport_02_F : Heli_Transport_02_base_F { GVAR(space) = 20; GVAR(hasCargo) = 1; }; + + // jets class Plane: Air { - GVAR(space) = 4; - GVAR(hasCargo) = 1; + GVAR(space) = 0; + GVAR(hasCargo) = 0; }; + // boats class Ship; class Ship_F: Ship { GVAR(space) = 4; GVAR(hasCargo) = 1; }; + class Boat_Civil_01_base_F: Ship_F { + GVAR(space) = 4; + GVAR(hasCargo) = 1; + }; + + class Boat_F: Ship_F {}; + class Rubber_duck_base_F: Boat_F { + GVAR(space) = 0; + GVAR(hasCargo) = 0; + }; + + class Boat_Armed_01_base_F: Boat_F { + GVAR(space) = 8; + GVAR(hasCargo) = 1; + }; + + // submarines + class SDV_01_base_F: Boat_F { + GVAR(space) = 0; + GVAR(hasCargo) = 0; + }; + // Static weapons class StaticWeapon: LandVehicle { GVAR(size) = 2; // 1 = small, 2 = large @@ -97,6 +226,7 @@ class CfgVehicles { GVAR(size) = 11; GVAR(canLoad) = 1; XEH_ENABLED; + class ACE_Actions { class ACE_MainActions { displayName = ECSTRING(interaction,MainAction); @@ -114,6 +244,7 @@ class CfgVehicles { GVAR(hasCargo) = 1; GVAR(size) = 4; GVAR(canLoad) = 1; + class ACE_Actions { class ACE_MainActions { displayName = ECSTRING(interaction,MainAction); @@ -165,12 +296,14 @@ class CfgVehicles { GVAR(size) = 50; XEH_ENABLED; }; + class Ruins_F; class Land_Cargo20_military_ruins_F: Ruins_F { GVAR(space) = 49; GVAR(size) = 50; XEH_ENABLED; }; + class Land_Cargo20_orange_F: Cargo_base_F { GVAR(space) = 49; GVAR(size) = 50; @@ -202,7 +335,6 @@ class CfgVehicles { XEH_ENABLED; }; - class Land_Cargo40_blue_F: Cargo_base_F { GVAR(space) = 99; GVAR(size) = 100; @@ -238,11 +370,13 @@ class CfgVehicles { GVAR(size) = 100; XEH_ENABLED; }; + class Land_Cargo40_military_ruins_F: Ruins_F { GVAR(space) = 99; GVAR(size) = 100; XEH_ENABLED; }; + class Land_Cargo40_orange_F: Cargo_base_F { GVAR(space) = 99; GVAR(size) = 100; @@ -273,12 +407,14 @@ class CfgVehicles { GVAR(size) = 100; XEH_ENABLED; }; + // small class Land_CargoBox_V1_F: ThingX { GVAR(space) = 7; GVAR(hasCargo) = 1; GVAR(size) = 7; XEH_ENABLED; + class ACE_Actions { class ACE_MainActions { displayName = ECSTRING(interaction,MainAction); @@ -290,5 +426,4 @@ class CfgVehicles { }; }; }; - }; diff --git a/addons/cargo/functions/fnc_initVehicle.sqf b/addons/cargo/functions/fnc_initVehicle.sqf index b817688336..efb3b9a5cf 100644 --- a/addons/cargo/functions/fnc_initVehicle.sqf +++ b/addons/cargo/functions/fnc_initVehicle.sqf @@ -41,7 +41,7 @@ if (getNumber (configFile >> "CfgVehicles" >> _type >> QGVAR(hasCargo)) != 1) ex private ["_text", "_condition", "_statement", "_icon", "_action"]; _condition = { params ["_target", "_player"]; - GVAR(enable) && {[_player, _target, []] call EFUNC(common,canInteractWith)} + GVAR(enable) && {locked _target < 2} && {[_player, _target, []] call EFUNC(common,canInteractWith)} }; _text = localize LSTRING(openMenu); _statement = {GVAR(interactionVehicle) = _target; createDialog QGVAR(menu);}; diff --git a/addons/cargo/functions/fnc_moduleSettings.sqf b/addons/cargo/functions/fnc_moduleSettings.sqf index 35e6aede7a..2027fb4bbb 100644 --- a/addons/cargo/functions/fnc_moduleSettings.sqf +++ b/addons/cargo/functions/fnc_moduleSettings.sqf @@ -25,4 +25,4 @@ if (!_activated) exitWith {}; [_logic, QGVAR(enable), "enable"] call EFUNC(common,readSettingFromModule); -diag_log text "[ACE]: Cargo Module Initialized."; +ACE_LOGINFO("Cargo Module Initialized."); diff --git a/addons/cargo/stringtable.xml b/addons/cargo/stringtable.xml index 9681f7173d..4b1ef90606 100644 --- a/addons/cargo/stringtable.xml +++ b/addons/cargo/stringtable.xml @@ -4,47 +4,63 @@ Load Załaduj + Carregar Загрузить + Naložit Unload Wyładuj + Descarregar Выгрузить + Vyložit Cargo Ładunek + Carga Грузовой отсек + Náklad Cargo Menu Menu ładunku + Menu de carga Грузовой отсек + Menu nákladu Cargo space left: %1 Pozostałe miejsce: %1 + Espaço de carga restante: %1 Осталось мест: %1 + Volný prostor: %1 Enable Cargo Aktywuj cargo + Ativar carga Включить модуль перевозки грузов + Povolit náklad Enable the load in cargo module Aktywuj możliwość załadunku skrzyń i przedmiotów do pojazdów. + Ativar o módulo de carregamento de carga Включает модуль погрузки и перевозки грузов Cargo Settings Ustawienia cargo + Preferências de carregamento Перевозка грузов + Nastavení nákladu Configure the cargo module settings Skonfiguruj ustawienia modułu cargo. + Configura as preferências do módulo de carga Конфигурирует настройки модуля перевозки грузов - \ No newline at end of file + diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index ba014ff182..a9db9bb92e 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -42,7 +42,7 @@ ["HeadbugFixUsed", { PARAMS_2(_profileName,_animation); - diag_log text format ["[ACE] Headbug Used: Name: %1, Animation: %2", _profileName, _animation]; + ACE_LOGINFO_2("Headbug Used: Name: %1, Animation: %2",_profileName,_animation); }] call FUNC(addEventHandler); @@ -102,7 +102,7 @@ if (_currentVersion != _previousVersion) then { // Handle JIP scenario if(!isServer) then { ["PlayerJip", { - diag_log text format["[ACE] * JIP event synchronization initialized"]; + ACE_LOGINFO("JIP event synchronization initialized"); ["SEH_all", [player]] call FUNC(serverEvent); }] call FUNC(addEventHandler); } else { @@ -128,13 +128,13 @@ call FUNC(checkFiles); if (isNil QGVAR(settings) || {(!isServer) && (isNil QEGVAR(modules,serverModulesRead))}) exitWith { if (!_waitingMsgSent) then { _args set [0, true]; - diag_log text format["[ACE] Waiting on settings from server"]; + ACE_LOGINFO("Waiting on settings from server..."); }; }; [(_this select 1)] call cba_fnc_removePerFrameHandler; - diag_log text format["[ACE] Settings received from server"]; + ACE_LOGINFO("Settings received from server."); // Event so that ACE_Modules have their settings loaded: ["InitSettingsFromModules", []] call FUNC(localEvent); @@ -145,11 +145,20 @@ call FUNC(checkFiles); call FUNC(loadSettingsLocalizedText); }; - diag_log text format["[ACE] Settings initialized"]; + ACE_LOGINFO("Settings initialized."); //Event that settings are safe to use: ["SettingsInitialized", []] call FUNC(localEvent); + //Set init finished and run all delayed functions: + GVAR(settingsInitFinished) = true; + diag_log text format ["[ACE] %1 delayed functions running", (count GVAR(runAtSettingsInitialized))]; + { + _x params ["_func", "_params"]; + _params call _func; + } forEach GVAR(runAtSettingsInitialized); + GVAR(runAtSettingsInitialized) = nil; //cleanup + }, 0, [false]] call CBA_fnc_addPerFrameHandler; @@ -275,7 +284,7 @@ GVAR(OldVisibleMap) = false; GVAR(OldPlayerWeapon) = _newPlayerWeapon; ["playerWeaponChanged", [ACE_player, _newPlayerWeapon]] call FUNC(localEvent); }; - + // "visibleMapChanged" event _newVisibleMap = visibleMap; if (!_newVisibleMap isEqualTo GVAR(OldVisibleMap)) then { @@ -283,9 +292,9 @@ GVAR(OldVisibleMap) = false; GVAR(OldVisibleMap) = _newVisibleMap; ["visibleMapChanged", [ACE_player, _newVisibleMap]] call FUNC(localEvent); }; - + END_COUNTER(stateChecker); - + }, 0, []] call CBA_fnc_addPerFrameHandler; @@ -326,7 +335,7 @@ GVAR(OldIsCamera) = false; if (didJip) then { // We are jipping! Get ready and wait, and throw the event [{ - if(!(isNull player)) then { + if((!(isNull player)) && GVAR(settingsInitFinished)) then { ["PlayerJip", [player] ] call FUNC(localEvent); [(_this select 1)] call cba_fnc_removePerFrameHandler; }; diff --git a/addons/common/XEH_preInit.sqf b/addons/common/XEH_preInit.sqf index 6fdf99113c..56e3062cd2 100644 --- a/addons/common/XEH_preInit.sqf +++ b/addons/common/XEH_preInit.sqf @@ -157,6 +157,7 @@ PREP(requestCallback); PREP(resetAllDefaults); PREP(restoreVariablesJIP); PREP(revertKeyCodeLocalized); +PREP(runAfterSettingsInit); PREP(sanitizeString); PREP(sendRequest); PREP(serverLog); @@ -303,6 +304,9 @@ GVAR(nextFrameNo) = diag_frameno; GVAR(nextFrameBufferA) = []; GVAR(nextFrameBufferB) = []; +GVAR(settingsInitFinished) = false; +GVAR(runAtSettingsInitialized) = []; + // @TODO: Generic local-managed global-synced objects (createVehicleLocal) //Debug diff --git a/addons/common/functions/fnc__handleNetEvent.sqf b/addons/common/functions/fnc__handleNetEvent.sqf index 7ee1f9c502..3f5f0d0fb4 100644 --- a/addons/common/functions/fnc__handleNetEvent.sqf +++ b/addons/common/functions/fnc__handleNetEvent.sqf @@ -11,22 +11,22 @@ PARAMS_2(_eventType,_event); if (_eventType == "ACEg") then { _eventName = _event select 0; _eventArgs = _event select 1; - + _eventNames = GVAR(events) select 0; _eventIndex = _eventNames find _eventName; if (_eventIndex != -1) then { _events = (GVAR(events) select 1) select _eventIndex; - + #ifdef DEBUG_EVENTS - diag_log text format[ARR_2("* Net Event %1",_eventName)]; - diag_log text format[ARR_2(" args=%1",_eventArgs)]; + ACE_LOGINFO_1("* Net Event %1",_eventName); + ACE_LOGINFO_1(" args=%1",_eventArgs); #endif - + { if (!isNil "_x") then { - _eventArgs call CALLSTACK_NAMED(_x, format[ARR_3("Net Event %1 ID: %2",_eventName,_forEachIndex)]); + _eventArgs call CALLSTACK_NAMED(_x, FORMAT_2("Net Event %1 ID: %2",_eventName,_forEachIndex)); #ifdef DEBUG_EVENTS_CALLSTACK - diag_log text format[ARR_2(" ID: %1",_forEachIndex)]; + ACE_LOGINFO_1(" ID: %1",_forEachIndex); #endif }; } forEach _events; @@ -38,7 +38,7 @@ if (_eventType == "ACEc") then { _eventName = _event select 0; _eventTargets = _event select 1; _eventArgs = _event select 2; - + _sentEvents = []; if (!IS_ARRAY(_eventTargets)) then { _eventTargets = [_eventTargets]; @@ -72,4 +72,4 @@ if (_eventType == "ACEc") then { }; } forEach _eventTargets; }; -}; \ No newline at end of file +}; diff --git a/addons/common/functions/fnc__handleRequestSyncedEvent.sqf b/addons/common/functions/fnc__handleRequestSyncedEvent.sqf index fe05bc498b..b93347b8d8 100644 --- a/addons/common/functions/fnc__handleRequestSyncedEvent.sqf +++ b/addons/common/functions/fnc__handleRequestSyncedEvent.sqf @@ -1,16 +1,16 @@ /* * Author: jaynus - * + * * Receives either requests for synchronization from clients, or the synchronization data from the server. * * Arguments [Client] : * 0: eventName (String) * 1: eventLog (Array) - * + * * Arguments [Server] : * 0: eventName (String) * 1: client (Object) - * + * * Return value: * Boolean of success */ @@ -24,14 +24,14 @@ if(isServer) then { // Find the event name, and shovel out the events to the client PARAMS_2(_eventName,_client); private["_eventEntry", "_eventLog"]; - + if(!HASH_HASKEY(GVAR(syncedEvents),_eventName)) exitWith { - diag_log text format["[ACE] Error, request for synced event - key not found."]; + ACE_LOGERROR("Request for synced event - key not found."); false }; _eventEntry = HASH_GET(GVAR(syncedEvents),_eventName); _eventLog = _eventEntry select 1; - + ["SEH_s", _client, [_eventName, _eventLog] ] call FUNC(targetEvent); } else { PARAMS_2(_eventName,_eventLog); @@ -42,7 +42,7 @@ if(isServer) then { _eventArgs = _x select 1; [_eventName, _eventArgs, (_x select 2)] call FUNC(_handleSyncedEvent); } forEach _eventLog; - diag_log text format["[ACE] + [%1] synchronized", _eventName]; + ACE_LOGINFO_1("[%1] synchronized",_eventName); }; -true \ No newline at end of file +true diff --git a/addons/common/functions/fnc__handleSyncedEvent.sqf b/addons/common/functions/fnc__handleSyncedEvent.sqf index 053ecb60b7..aaa6fbdaff 100644 --- a/addons/common/functions/fnc__handleSyncedEvent.sqf +++ b/addons/common/functions/fnc__handleSyncedEvent.sqf @@ -1,13 +1,13 @@ /* * Author: jaynus - * + * * Handles synced events being received. Server will log them, and server/client will execute them. * * Arguments [Client] : * 0: eventName (String) * 1: arguments (Array) * 2: ttl (Scalar) - * + * * Return value: * Boolean of success */ @@ -17,7 +17,7 @@ PARAMS_3(_name,_args,_ttl); private["_internalData", "_eventLog", "_eventCode"]; if(!HASH_HASKEY(GVAR(syncedEvents),_name)) exitWith { - diag_log text format["[ACE] Error, synced event key not found."]; + ACE_LOGERROR("Synced event key not found."); false }; @@ -33,4 +33,4 @@ if(isServer) then { }; _eventCode = _internalData select 0; -_args call _eventCode; \ No newline at end of file +_args call _eventCode; diff --git a/addons/common/functions/fnc_addSyncedEventHandler.sqf b/addons/common/functions/fnc_addSyncedEventHandler.sqf index 60c90672ef..7225a45e59 100644 --- a/addons/common/functions/fnc_addSyncedEventHandler.sqf +++ b/addons/common/functions/fnc_addSyncedEventHandler.sqf @@ -5,9 +5,9 @@ * * Argument: * 0: Name (String) - * 1: Handler (Code) + * 1: Handler (Code) * 2: TTL (Number or Code) [Optional] - * + * * Return value: * Boolean of success */ @@ -25,10 +25,10 @@ if( (count _this) > 2) then { }; if(HASH_HASKEY(GVAR(syncedEvents),_name)) exitWith { - diag_log text format["[ACE] Error, duplicate synced event creation."]; + ACE_LOGERROR("Duplicate synced event creation."); false }; _eventId = [_name, FUNC(_handleSyncedEvent)] call FUNC(addEventHandler); _data = [_handler,[],_ttl,_eventId]; -HASH_SET(GVAR(syncedEvents),_name,_data); \ No newline at end of file +HASH_SET(GVAR(syncedEvents),_name,_data); diff --git a/addons/common/functions/fnc_addToInventory.sqf b/addons/common/functions/fnc_addToInventory.sqf index ba76831ba4..05fc2ca48f 100644 --- a/addons/common/functions/fnc_addToInventory.sqf +++ b/addons/common/functions/fnc_addToInventory.sqf @@ -87,7 +87,9 @@ switch ((_type select 0)) do { _unit setPosATL _pos; }; }; - default {diag_log format ["ACE: Incorrect item type passed to %1, passed: %2",QFUNC(AddToInventory),_type];}; + default { + ACE_LOGWARNING_2("Incorrect item type passed to %1, passed: %2",QFUNC(AddToInventory),_type); + }; }; [_addedToPlayer,_unit] diff --git a/addons/common/functions/fnc_blurScreen.sqf b/addons/common/functions/fnc_blurScreen.sqf index 57714b63cd..e62cebc173 100644 --- a/addons/common/functions/fnc_blurScreen.sqf +++ b/addons/common/functions/fnc_blurScreen.sqf @@ -10,6 +10,8 @@ #include "script_component.hpp" +if (!hasInterface) exitWith {}; + private ["_show"]; PARAMS_1(_id); _show = if (count _this > 1) then {_this select 1} else {false}; diff --git a/addons/common/functions/fnc_cachedCall.sqf b/addons/common/functions/fnc_cachedCall.sqf index f9d9c74dd3..e093f44393 100644 --- a/addons/common/functions/fnc_cachedCall.sqf +++ b/addons/common/functions/fnc_cachedCall.sqf @@ -40,7 +40,7 @@ if (((_namespace getVariable [_uid, [-99999]]) select 0) < ACE_diagTime) then { private ["_varName","_cacheList"]; // _eventName is defined on the function that calls the event #ifdef DEBUG_MODE_FULL - diag_log text format ["ACE: Clear cached variables on event: %1", _eventName]; + ACE_LOGINFO_1("Clear cached variables on event: %1",_eventName); #endif // Get the list of caches to clear _varName = format [QGVAR(clearCache_%1),_eventName]; @@ -58,9 +58,9 @@ if (((_namespace getVariable [_uid, [-99999]]) select 0) < ACE_diagTime) then { _cacheList pushBack [_namespace, _uid]; }; #ifdef DEBUG_MODE_FULL - diag_log format ["Calculated result: %1 %2", _namespace, _uid]; + ACE_LOGINFO_2("Calculated result: %1 %2",_namespace,_uid); } else { - diag_log format ["Cached result : %1 %2", _namespace, _uid]; + ACE_LOGINFO_2("Cached result: %1 %2",_namespace,_uid); #endif }; diff --git a/addons/common/functions/fnc_checkFiles.sqf b/addons/common/functions/fnc_checkFiles.sqf index c1a0b1cb89..ecbcb910e8 100644 --- a/addons/common/functions/fnc_checkFiles.sqf +++ b/addons/common/functions/fnc_checkFiles.sqf @@ -17,7 +17,7 @@ private "_version"; _version = getText (configFile >> "CfgPatches" >> "ace_main" >> "versionStr"); -diag_log text format ["[ACE]: ACE is version %1.", _version]; +ACE_LOGINFO_1("ACE is version %1.",_version); private "_addons"; //_addons = activatedAddons; // broken with High-Command module, see #2134 @@ -30,7 +30,7 @@ _addons = [_addons, {_this find "ace_" == 0}] call FUNC(filter); private "_errorMsg"; _errorMsg = format ["File %1.pbo is outdated.", _x]; - diag_log text format ["[ACE] ERROR: %1", _errorMsg]; + ACE_LOGERROR(_errorMsg); if (hasInterface) then { ["[ACE] ERROR", _errorMsg, {findDisplay 46 closeDisplay 0}] call FUNC(errorMessage); @@ -46,14 +46,14 @@ _addons = [_addons, {_this find "ace_" == 0}] call FUNC(filter); private "_errorMsg"; _errorMsg = format ["Extension %1.dll not installed.", _x]; - diag_log text format ["[ACE] ERROR: %1", _errorMsg]; + ACE_LOGERROR(_errorMsg); if (hasInterface) then { ["[ACE] ERROR", _errorMsg, {findDisplay 46 closeDisplay 0}] call FUNC(errorMessage); }; } else { // Print the current extension version - diag_log text format ["[ACE] Extension version: %1: %2", _x, (_x callExtension "version")]; + ACE_LOGINFO_2("Extension version: %1: %2",_x,(_x callExtension "version")); }; } forEach getArray (configFile >> "ACE_Extensions" >> "extensions"); @@ -80,7 +80,7 @@ if (isMultiplayer) then { private "_errorMsg"; _errorMsg = format ["Client/Server Version Mismatch. Server: %1, Client: %2.", GVAR(ServerVersion), _version]; - diag_log text format ["[ACE] ERROR: %1", _errorMsg]; + ACE_LOGERROR(_errorMsg); if (hasInterface) then { ["[ACE] ERROR", _errorMsg, {findDisplay 46 closeDisplay 0}] call FUNC(errorMessage); @@ -91,7 +91,7 @@ if (isMultiplayer) then { if !(_addons isEqualTo []) then { _errorMsg = format ["Client/Server Addon Mismatch. Client has extra addons: %1.",_addons]; - diag_log text format ["[ACE] ERROR: %1", _errorMsg]; + ACE_LOGERROR(_errorMsg); if (hasInterface) then { ["[ACE] ERROR", _errorMsg, {findDisplay 46 closeDisplay 0}] call FUNC(errorMessage); diff --git a/addons/common/functions/fnc_checkPBOs.sqf b/addons/common/functions/fnc_checkPBOs.sqf index 5665ee632c..d1441ffd83 100644 --- a/addons/common/functions/fnc_checkPBOs.sqf +++ b/addons/common/functions/fnc_checkPBOs.sqf @@ -67,7 +67,7 @@ if (!isServer) then { }; //[_error, "{systemChat _this}"] call FUNC(execRemoteFnc); - diag_log text _error; + ACE_LOGERROR(_error); if (_mode < 2) then { _text = composeText [lineBreak, parseText format ["%1", _text]]; diff --git a/addons/common/functions/fnc_claim.sqf b/addons/common/functions/fnc_claim.sqf index f97b69e194..5c8014ee5f 100644 --- a/addons/common/functions/fnc_claim.sqf +++ b/addons/common/functions/fnc_claim.sqf @@ -13,7 +13,7 @@ * */ #include "script_component.hpp" - + PARAMS_3(_unit,_target,_lockTarget); if (isNil "_lockTarget") then {_lockTarget = false}; @@ -22,7 +22,7 @@ private "_owner"; _owner = _target getVariable [QGVAR(owner), objNull]; if (!isNull _owner && {!isNull _unit} && {_unit != _owner}) then { - diag_log text "[ACE] ERROR: Claiming already owned object."; + ACE_LOGERROR("Claiming already owned object."); }; // transfer this immediately diff --git a/addons/common/functions/fnc_debug.sqf b/addons/common/functions/fnc_debug.sqf index fd1d3d59fa..df770c6e25 100644 --- a/addons/common/functions/fnc_debug.sqf +++ b/addons/common/functions/fnc_debug.sqf @@ -55,4 +55,4 @@ if (_level <= _defaultLoglevel) then { // pass it onwards to the log function: // [0, [], compile format["%1",_msg], true] call FUNC(log); }; -true \ No newline at end of file +true diff --git a/addons/common/functions/fnc_doAnimation.sqf b/addons/common/functions/fnc_doAnimation.sqf index 07d9ec9e35..81301ce1dc 100644 --- a/addons/common/functions/fnc_doAnimation.sqf +++ b/addons/common/functions/fnc_doAnimation.sqf @@ -23,7 +23,7 @@ _force = False; // no animation given if (isNil "_animation") exitWith { - diag_log format ["[ACE] ERROR: No animation specified in %1", _fnc_scriptNameParent]; + ACE_LOGERROR_1("No animation specified in %1.",_fnc_scriptNameParent); }; if (isNil "_priority") then { diff --git a/addons/common/functions/fnc_executePersistent.sqf b/addons/common/functions/fnc_executePersistent.sqf index a11fbb07aa..bbc4e91ea7 100644 --- a/addons/common/functions/fnc_executePersistent.sqf +++ b/addons/common/functions/fnc_executePersistent.sqf @@ -5,7 +5,7 @@ PARAMS_1(_target); { if (isNil "_x") then { - diag_log text format ["[ACE] ERROR: No argument and function for remote function. ID: %1", _forEachIndex]; + ACE_LOGERROR_1("No argument and function for remote function. ID: %1",_forEachIndex); } else { if (typeName _x == "ARRAY") then { [_x select 0, _target] call (_x select 1); diff --git a/addons/common/functions/fnc_filter.sqf b/addons/common/functions/fnc_filter.sqf index 8d4146faa5..3d84d9d3a2 100644 --- a/addons/common/functions/fnc_filter.sqf +++ b/addons/common/functions/fnc_filter.sqf @@ -20,7 +20,7 @@ private ["_newArray", "_index"]; PARAMS_2(_array,_code); if (isNil "_array") exitWith { - diag_log text format ["[ACE] ERROR: No array for function filter in %1", _fnc_scriptNameParent]; + ACE_LOGERROR_1("No array for function filter in %1.",_fnc_scriptNameParent); [] }; diff --git a/addons/common/functions/fnc_getMapGridData.sqf b/addons/common/functions/fnc_getMapGridData.sqf index 308772bfff..838b753e91 100644 --- a/addons/common/functions/fnc_getMapGridData.sqf +++ b/addons/common/functions/fnc_getMapGridData.sqf @@ -44,7 +44,7 @@ _letterGrid = false; if (((toLower _formatX) find "a") != -1) then {_letterGrid = true}; if (((toLower _formatY) find "a") != -1) then {_letterGrid = true}; if (_letterGrid) exitWith { - diag_log text format ["[ACE] Map Grid Warning (%1) - Map uses letter grids [%2,%3]", worldName, _formatX, _formatY]; + ACE_LOGWARNING_3("Map Grid Warning (%1) - Map uses letter grids [%2, %3]",worldName,_formatX,_formatY); }; //Start at [0, 500] and move north until we get a change in grid @@ -64,13 +64,13 @@ _stepXat5 = _stepX * 10 ^ ((count _formatX) - 5); _stepYat5 = -1 * _stepY * 10 ^ ((count _formatY) - 5); if (_stepYat5 < 0) then { - diag_log text format ["[ACE] Map Grid Warning (%1) - Northing is reversed", worldName]; + ACE_LOGWARNING_1("Map Grid Warning (%1) - Northing is reversed.",worldName); }; if (_stepXat5 != 1) then { - diag_log text format ["[ACE] Map Grid Warning (%1) - MGRS 10 digit grid does not equal 1 meter: (%2) for x", worldName, _stepXat5]; + ACE_LOGWARNING_2("Map Grid Warning (%1) - MGRS 10 digit grid does not equal 1 meter: (%2) for x.",worldName,_stepXat5); }; if ((_stepYat5 != 1) && {_stepYat5 != -1}) then { - diag_log text format ["[ACE] Map Grid Warning (%1) - MGRS 10 digit grid does not equal 1 meter: (%2) for y", worldName, _stepXat5]; + ACE_LOGWARNING_2("Map Grid Warning (%1) - MGRS 10 digit grid does not equal 1 meter: (%2) for y.",worldName,_stepXat5); }; GVAR(mapGridData) = [_offsetX, _realOffsetY, _stepXat5, _stepYat5]; diff --git a/addons/common/functions/fnc_loadSettingsLocalizedText.sqf b/addons/common/functions/fnc_loadSettingsLocalizedText.sqf index 4479ba04fa..25a67b6079 100644 --- a/addons/common/functions/fnc_loadSettingsLocalizedText.sqf +++ b/addons/common/functions/fnc_loadSettingsLocalizedText.sqf @@ -42,7 +42,7 @@ _parseConfigForDisplayNames = { if !([configFile >> "ACE_Settings" >> _name] call _parseConfigForDisplayNames) then { if !([configFile >> "ACE_ServerSettings" >> _name] call _parseConfigForDisplayNames) then { if !([missionConfigFile >> "ACE_Settings" >> _name] call _parseConfigForDisplayNames) then { - diag_log text format ["[ACE] - Setting found, but couldn't localize [%1] (server has but we don't?)", _name]; + ACE_LOGWARNING_1("Setting found, but couldn't localize [%1] (server has but we don't?)",_name); }; }; }; diff --git a/addons/common/functions/fnc_localEvent.sqf b/addons/common/functions/fnc_localEvent.sqf index 256282f97f..fb0cbaf40f 100644 --- a/addons/common/functions/fnc_localEvent.sqf +++ b/addons/common/functions/fnc_localEvent.sqf @@ -21,16 +21,16 @@ _eventIndex = _eventNames find _eventName; if(_eventIndex != -1) then { _events = (GVAR(events) select 1) select _eventIndex; #ifdef DEBUG_EVENTS - diag_log text format[ARR_2("* Local Event: %1",_eventName)]; - diag_log text format[ARR_2(" args=%1",_eventArgs)]; + ACE_LOGINFO_1("* Local Event: %1",_eventName); + ACE_LOGINFO_1(" args=%1",_eventArgs); #endif - + { if(!isNil "_x") then { - _eventArgs call CALLSTACK_NAMED(_x, format[ARR_3("Local Event %1 ID: %2",_eventName,_forEachIndex)]); + _eventArgs call CALLSTACK_NAMED(_x, FORMAT_2("Local Event %1 ID: %2",_eventName,_forEachIndex)); #ifdef DEBUG_EVENTS_CALLSTACK - diag_log text format[ARR_2(" ID: %1",_forEachIndex)]; + ACE_LOGINFO_1(" ID: %1",_forEachIndex); #endif }; } forEach _events; -}; \ No newline at end of file +}; diff --git a/addons/common/functions/fnc_map.sqf b/addons/common/functions/fnc_map.sqf index 16ed168218..bca205e34a 100644 --- a/addons/common/functions/fnc_map.sqf +++ b/addons/common/functions/fnc_map.sqf @@ -21,7 +21,7 @@ _array = + _this select 0; _code = _this select 1; if (isNil "_array") exitWith { - diag_log text format ["[ACE] ERROR: No array for function map in %1", _fnc_scriptNameParent]; + ACE_LOGERROR_1("No array for function map in %1.",_fnc_scriptNameParent); [] }; diff --git a/addons/common/functions/fnc_moduleCheckPBOs.sqf b/addons/common/functions/fnc_moduleCheckPBOs.sqf index c75324c9a3..0288badf2d 100644 --- a/addons/common/functions/fnc_moduleCheckPBOs.sqf +++ b/addons/common/functions/fnc_moduleCheckPBOs.sqf @@ -22,4 +22,4 @@ if !(_activated) exitWith {}; [_logic, QGVAR(checkPBOsCheckAll), "CheckAll" ] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(checkPBOsWhitelist), "Whitelist" ] call EFUNC(common,readSettingFromModule); -diag_log text format ["[ACE]: Check-PBOs Module Initialized. Mode: %1.", GVAR(checkPBOsAction)]; +ACE_LOGINFO_1("Check-PBOs Module Initialized. Mode: %1.",GVAR(checkPBOsAction)); diff --git a/addons/common/functions/fnc_moduleLSDVehicles.sqf b/addons/common/functions/fnc_moduleLSDVehicles.sqf index 59744016ce..0814451f79 100644 --- a/addons/common/functions/fnc_moduleLSDVehicles.sqf +++ b/addons/common/functions/fnc_moduleLSDVehicles.sqf @@ -44,4 +44,4 @@ if !(_activated) exitWith {}; }; } count _units; -diag_log text "[ACE]: WEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE."; +ACE_LOGINFO("WEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE."); diff --git a/addons/common/functions/fnc_readSettingFromModule.sqf b/addons/common/functions/fnc_readSettingFromModule.sqf index 0bf2693eba..545a93deba 100644 --- a/addons/common/functions/fnc_readSettingFromModule.sqf +++ b/addons/common/functions/fnc_readSettingFromModule.sqf @@ -20,7 +20,7 @@ PARAMS_3(_logic,_settingName,_moduleVariable); // Check if the parameter is defined in the module if (isNil {_logic getVariable _moduleVariable}) exitWith { - diag_log text format["[ACE]: Warning in %1 module: %2 setting is missing. Probably an obsolete version of the module is used in the mission.", typeOf _logic, _moduleVariable]; + ACE_LOGWARNING_2("Warning in %1 module: %2 setting is missing. Probably an obsolete version of the module is used in the mission.",typeOf _logic,_moduleVariable); }; // Set the setting globally and force it diff --git a/addons/common/functions/fnc_removeSyncedEventHandler.sqf b/addons/common/functions/fnc_removeSyncedEventHandler.sqf index 84aa98c0ea..924bb0aa25 100644 --- a/addons/common/functions/fnc_removeSyncedEventHandler.sqf +++ b/addons/common/functions/fnc_removeSyncedEventHandler.sqf @@ -5,7 +5,7 @@ * * Argument: * 0: Name (String) - * + * * Return value: * Boolean of success */ @@ -16,7 +16,7 @@ PARAMS_1(_name); private ["_data", "_eventId"]; if (!HASH_HASKEY(GVAR(syncedEvents),_name)) exitWith { - diag_log text format["[ACE] Error, synced event key not found."]; + ACE_LOGERROR("Synced event key not found."); false }; @@ -24,4 +24,4 @@ _data = HASH_GET(GVAR(syncedEvents),_name); _eventId = _data select 3; [_eventId] call ace_common_fnc_removeEventHandler; -HASH_REM(GVAR(syncedEvents),_name); \ No newline at end of file +HASH_REM(GVAR(syncedEvents),_name); diff --git a/addons/common/functions/fnc_runAfterSettingsInit.sqf b/addons/common/functions/fnc_runAfterSettingsInit.sqf new file mode 100644 index 0000000000..cf3faa1d7e --- /dev/null +++ b/addons/common/functions/fnc_runAfterSettingsInit.sqf @@ -0,0 +1,27 @@ +/* + * Author: PabstMirror + * Executes code after setting are initilized. + * + * Argument: + * 0: Code to execute + * 1: Parameters to run the code with + * + * Return value: + * None + * + * Example: + * [{if (GVAR(setting) then {x} else {y};}, []] call ace_common_fnc_runAfterSettingsInit + * + * Public: No + */ +#include "script_component.hpp" + +params ["_func", "_params"]; + +if (GVAR(settingsInitFinished)) then { + //Setting Already Finished, Direct Run the code + _params call _func; +} else { + //Waiting on settings, throw it on the delayed run array + GVAR(runAtSettingsInitialized) pushBack [_func, _params]; +}; diff --git a/addons/common/functions/fnc_serverEvent.sqf b/addons/common/functions/fnc_serverEvent.sqf index 9227b1a783..4a9960c197 100644 --- a/addons/common/functions/fnc_serverEvent.sqf +++ b/addons/common/functions/fnc_serverEvent.sqf @@ -16,8 +16,8 @@ PARAMS_2(_eventName,_eventArgs); #ifdef DEBUG_EVENTS - diag_log text format[ARR_2("* Server Event: %1",_eventName)]; - diag_log text format[ARR_2(" args=%1",_eventArgs)]; + ACE_LOGINFO_1("* Server Event: %1",_eventName); + ACE_LOGINFO_1(" args=%1",_eventArgs); #endif ACEg = [_eventName, _eventArgs]; diff --git a/addons/common/functions/fnc_syncedEvent.sqf b/addons/common/functions/fnc_syncedEvent.sqf index 9100e5a19a..42b2147f10 100644 --- a/addons/common/functions/fnc_syncedEvent.sqf +++ b/addons/common/functions/fnc_syncedEvent.sqf @@ -7,7 +7,7 @@ * 0: Name (String) * 1: Arguments (Array) * 2: TTL (Number or Code) [Optional] for this specific event call - * + * * Return value: * Boolean of success */ @@ -25,9 +25,9 @@ if( (count _this) > 2) then { }; if(!HASH_HASKEY(GVAR(syncedEvents),_name)) exitWith { - diag_log text format["[ACE] Error, synced event key not found."]; + ACE_LOGERROR("Synced event key not found."); false }; _eventData = [_name, _args,_ttl]; -["SEH", _eventData] call FUNC(globalEvent); \ No newline at end of file +["SEH", _eventData] call FUNC(globalEvent); diff --git a/addons/common/functions/fnc_targetEvent.sqf b/addons/common/functions/fnc_targetEvent.sqf index 22bd7431f5..75023a38b5 100644 --- a/addons/common/functions/fnc_targetEvent.sqf +++ b/addons/common/functions/fnc_targetEvent.sqf @@ -21,8 +21,8 @@ PARAMS_3(_eventName,_eventTargets,_eventArgs); #ifdef DEBUG_EVENTS - diag_log text format[ARR_3("* Target Event: %1 - %2",_eventName,_eventTargets)]; - diag_log text format[ARR_2(" args=%1",_eventArgs)]; + ACE_LOGINFO_2("* Target Event: %1 - %2",_eventName,_eventTargets); + ACE_LOGINFO_1(" args=%1",_eventArgs); #endif ACEc = [_eventName, _eventTargets, _eventArgs]; @@ -30,4 +30,4 @@ if(!isServer) then { publicVariableServer "ACEc"; } else { ["ACEc", ACEc] call FUNC(_handleNetEvent); -}; \ No newline at end of file +}; diff --git a/addons/common/functions/fnc_unloadPersonLocal.sqf b/addons/common/functions/fnc_unloadPersonLocal.sqf index da2d9ea77e..150ea8c500 100644 --- a/addons/common/functions/fnc_unloadPersonLocal.sqf +++ b/addons/common/functions/fnc_unloadPersonLocal.sqf @@ -37,11 +37,15 @@ if (_vehicle isKindOf "Ship" ) then { }; TRACE_1("getPosASL Vehicle Check", getPosASL _vehicle); -if (!_validVehiclestate) exitwith { diag_log format["Unable to unload patient because invalid (%1) vehicle state. Either moving or Not close enough on the ground. position: %2 isTouchingGround: %3 Speed: %4", _vehicle, getPos _vehicle, isTouchingGround _vehicle, speed _vehicle]; false }; +if (!_validVehiclestate) exitwith { + ACE_LOGWARNING_4("Unable to unload patient because invalid (%1) vehicle state. Either moving or Not close enough on the ground. position: %2 isTouchingGround: %3 Speed: %4",_vehicle,getPos _vehicle,isTouchingGround _vehicle,speed _vehicle); + false +}; -diag_log str _emptyPos; - -if (count _emptyPos == 0) exitwith {diag_log format["No safe empty spots to unload patient. %1", _emptyPos]; false}; //consider displaying text saying there are no safe places to exit the vehicle +if (count _emptyPos == 0) exitwith { + ACE_LOGWARNING_1("No safe empty spots to unload patient. %1",_emptyPos); + false +}; //consider displaying text saying there are no safe places to exit the vehicle unassignVehicle _unit; @@ -75,4 +79,4 @@ _loaded = _vehicle getvariable [QGVAR(loaded_persons),[]]; _loaded = _loaded - [_unit]; _vehicle setvariable [QGVAR(loaded_persons),_loaded,true]; -true \ No newline at end of file +true diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index 8aa895a35d..e7f5933864 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -477,6 +477,7 @@ Überprüfe PBOs Zkontrolovat PBO Verificar PBOs + Vérifier les PBOs PBO-k ellenőrzése Проверка аддонов @@ -487,6 +488,7 @@ Zjistit addon který je v souladu se serverem Este módulo verifica a integridade dos addons quando iniciamos a simulação Выполняет проверку версий аддонов ACE у подключаемых игроков + Ce module contrôle si les PBOs de chaque joueur sont corrects Action @@ -495,6 +497,7 @@ Aktion Akce Ação + Action Cselekvés Действие @@ -505,6 +508,7 @@ Was soll mit Leuten passieren, die nicht die richtigen PBOs haben? Co udělat s lidmi, co nemají správné addony? O que fazer com pessoas que não tem os PBOs corretos? + Que faire avec les personnes n'ayant pas les bon PBOs Mi legyen azokkal a személyekkel, akiknek nincsenek meg a helyes PBO-k? Что делать с игроками с неправильными аддонами? @@ -515,6 +519,7 @@ Einmal verwarnen Upozornit jednou Avisar uma vez + Avertir une fois Egyszeri figyelmeztetés Предупредить один раз @@ -525,6 +530,7 @@ Immer verwarnen Upozornit (permanentně) Avisar (permanente) + Avertir (permanent) Figyelmeztetés (tartós) Предупреждать (постоянно) @@ -535,6 +541,7 @@ Kicken Vyhodit Chutar + Ejecter Kirúgás Кикнуть @@ -545,6 +552,7 @@ Alle Addons überprüfen Zkontrolovat všechny addony Verificar todos addons + Vérifier tous les addons Összes bővítmény ellenőrzése Проверять все аддоны @@ -555,6 +563,7 @@ Alle Addons anstatt nur ACE überprüfen? Zkontrolovat všechny addony namísto jen těch od ACE? Verificar todos addons invés de só os do ACE? + Vérifie tous les addons, même ceux qui ne sont pas liés à ACE Az összes bővítmény ellenőrzése, csak az ACE helyett? Проверять все аддоны, а не только ACE? @@ -565,6 +574,7 @@ Whitelist Seznam povolených Lista branca + Liste blanche Fehérlista Вайтлист доп. аддонов @@ -575,6 +585,7 @@ Welche Addons werden dennoch erlaubt? Jaké addony jsou povoleny? Quais addons são permitidos de qualquer maneira? + Quels addons sont tolérés Milyen bővítmények vannak feltétlenül engedélyezve? Какие аддоны дополнительно разрешены? @@ -585,6 +596,7 @@ LSD-Fahrzeuge LSD vozidla Veículos LSD + LSD - Véhicules LSD járművek Транспорт под LSD @@ -595,6 +607,7 @@ Fügt einen LSD-Effekt zum synchronisierten Fahrzeug hinzu Přidá LSD efekt pro synchronizované vozidla Adiciona efeito LSD ao veículo sincronizado + Ajoute l'effet LSD aux véhicules synchronisés LSD-effekt hozzáadása a szinkronizált járművekhez Добавляет эффект LSD (мигание всеми цветами радуги) синхронизированным транспортным средствам @@ -605,6 +618,7 @@ Ativa dispositivo de mão Przełącz urządzenie podręczne Přepnout ruční zařízení + Allumer l'ordinateur de poche Kézi eszköz kapcsolása Включить портативное устройство @@ -615,6 +629,7 @@ Fecha dispositivo de mão Zamknij urządzenie podręczne Zavřít ruční zařízení + Fermer l'ordinateur de poche Kézi eszköz bezárása Закрыть портативное устройство @@ -625,6 +640,7 @@ Troca dispositivos de mão Następne urządzenie podręczne Procházet ruční zařízení + Changer (cycle) d'ordinateur de poche Kézi eszköz váltása Следующее портативное устройство @@ -677,7 +693,9 @@ Vehicles only Tylko pojazdy + Somente veículos Только в транспорте + Pouze vozidla Do Not Force @@ -691,32 +709,42 @@ ACE3 Equipment ACE3 Wyposażenie + Equipamentos ACE3 ACE3 Снаряжение + ACE3 Vybavení ACE3 Common ACE3 Ogólne + Comum ACE3 ACE3 Общие ACE3 Weapons ACE3 Broń + Armamento ACE3 ACE3 Оружие + ACE3 Zbraně ACE3 Movement ACE3 Ruch + Movimento ACE3 ACE3 Перемещение ACE3 Scope Adjustment ACE3 Regulacja optyki + Ajuste de luneta ACE3 ACE3 Прицелы + ACE3 Nastavení optiky ACE3 Vehicles ACE3 Pojazdy + Veículos ACE3 ACE3 Транспорт + ACE3 Vozidla diff --git a/addons/concertina_wire/stringtable.xml b/addons/concertina_wire/stringtable.xml index 1e6be8cf98..26216b7c0e 100644 --- a/addons/concertina_wire/stringtable.xml +++ b/addons/concertina_wire/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -7,7 +7,7 @@ Колючая проволока Koncentrina Alambre de espino - Concertina wire + Fill barbelé Ostnatý drát Concertina wire Concertina wire @@ -19,7 +19,7 @@ Колючая проволока (моток) Zwój koncentriny Bobina de alambre de espino - Concertina wire coil + Bobine de fil barbelé Smyčka ostnatého drátu Concertina wire coil Concertina wire coil @@ -31,7 +31,7 @@ Демонтировать колючую проволоку Zwiń koncentrinę Desmontar alambre de espino - Dismount Concertina wire + Descendre le fil barbelé Svinout ostnatý drát Dismount Concertina wire Dismount Concertina wire @@ -43,7 +43,7 @@ Монтировать колючую проволоку Rozwiń koncentrinę Desplegar alambre de espino - Deploy Concertina wire + Mettre en place le fil barbelé Rozvinout ostnatý drát Deploy Concertina wire Deploy Concertina wire diff --git a/addons/dagr/CfgVehicles.hpp b/addons/dagr/CfgVehicles.hpp index a9948ca8aa..7f0a7f6cff 100644 --- a/addons/dagr/CfgVehicles.hpp +++ b/addons/dagr/CfgVehicles.hpp @@ -4,7 +4,7 @@ class CfgVehicles { class ACE_SelfActions { class ACE_Equipment { class GVAR(menu) { - displayName = "Configure DAGR"; + displayName = CSTRING(ConfigureDAGR); condition = QUOTE([ARR_2(_player,'ACE_DAGR')] call EFUNC(common,hasItem)); statement = QUOTE(call FUNC(menuInit)); showDisabled = 0; @@ -12,7 +12,7 @@ class CfgVehicles { icon = QUOTE(PATHTOF(UI\DAGR_Icon.paa)); exceptions[] = {"isNotInside", "isNotSitting"}; class GVAR(toggle) { - displayName = "Toggle DAGR"; + displayName = CSTRING(ToggleDAGR); condition = QUOTE([ARR_2(_player,'ACE_DAGR')] call EFUNC(common,hasItem)); statement = QUOTE(call FUNC(toggleOverlay)); showDisabled = 0; @@ -30,7 +30,7 @@ class CfgVehicles { author[] = {"Rosuto", "Ruthberg"}; scope = 2; scopeCurator = 2; - displayName = "DAGR"; + displayName = CSTRING(Name); vehicleClass = "Items"; class TransportItems { MACRO_ADDITEM(ACE_DAGR,1); diff --git a/addons/dagr/CfgWeapons.hpp b/addons/dagr/CfgWeapons.hpp index 830e9cf115..9fcd903cdd 100644 --- a/addons/dagr/CfgWeapons.hpp +++ b/addons/dagr/CfgWeapons.hpp @@ -6,9 +6,9 @@ class CfgWeapons { class ACE_DAGR: ACE_ItemCore { author[] = {$STR_ACE_Common_ACETeam, "Ruthberg"}; scope = 2; - displayName = "DAGR"; + displayName = CSTRING(Name); model = QUOTE(PATHTOF(data\DAGR.p3d)); - descriptionShort = ""; + descriptionShort = CSTRING(Description); picture = PATHTOF(UI\DAGR_Icon.paa); icon = "iconObject_circle"; mapSize = 0.034; diff --git a/addons/dagr/stringtable.xml b/addons/dagr/stringtable.xml index 7da844d614..77502f271b 100644 --- a/addons/dagr/stringtable.xml +++ b/addons/dagr/stringtable.xml @@ -1,5 +1,21 @@  + + DAGR + DAGR + + + Configure DAGR + Konfiguruj DAGR + + + Toggle DAGR + Przełącz DAGR + + + Defense Advanced GPS Receiver + Defense Advanced GPS Receiver + \ No newline at end of file diff --git a/addons/disarming/functions/fnc_eventCallerFinish.sqf b/addons/disarming/functions/fnc_eventCallerFinish.sqf index bc48a26b70..e1376f4052 100644 --- a/addons/disarming/functions/fnc_eventCallerFinish.sqf +++ b/addons/disarming/functions/fnc_eventCallerFinish.sqf @@ -23,4 +23,4 @@ params ["_caller", "_target", "_errorMsg"]; if (_caller != ACE_player) exitWith {}; systemChat format ["Debug-Caller: Disarm finished from [%1] with code [%2]", _target, _errorMsg]; -diag_log text format ["[ACE_Disarming] %1 - eventCallerFinish: %2", ACE_time, _this]; +ACE_LOGINFO_2("%1 - eventCallerFinish: %2",ACE_time,_this); diff --git a/addons/disarming/functions/fnc_eventTargetFinish.sqf b/addons/disarming/functions/fnc_eventTargetFinish.sqf index b9fb461356..b7364a8f40 100644 --- a/addons/disarming/functions/fnc_eventTargetFinish.sqf +++ b/addons/disarming/functions/fnc_eventTargetFinish.sqf @@ -22,6 +22,6 @@ params ["_caller", "_target", "_errorMsg"]; if (_errorMsg != "") then { - diag_log text format ["[ACE_Disarming] %1 - eventTargetFinish: %2", ACE_time, _this]; + ACE_LOGINFO_2("%1 - eventTargetFinish: %2",ACE_time,_this); ["DisarmDebugCallback", [_caller], [_caller, _target, _errorMsg]] call EFUNC(common,targetEvent); }; diff --git a/addons/disarming/stringtable.xml b/addons/disarming/stringtable.xml index e43624f96d..61eaf9af59 100644 --- a/addons/disarming/stringtable.xml +++ b/addons/disarming/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -14,4 +14,4 @@ Abrir inventário - \ No newline at end of file + diff --git a/addons/disposable/stringtable.xml b/addons/disposable/stringtable.xml index 2cbd8b0012..2c6f0b0afd 100644 --- a/addons/disposable/stringtable.xml +++ b/addons/disposable/stringtable.xml @@ -1,4 +1,4 @@ - + diff --git a/addons/dragging/stringtable.xml b/addons/dragging/stringtable.xml index d1eb18d6b4..35f9d6038d 100644 --- a/addons/dragging/stringtable.xml +++ b/addons/dragging/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -50,4 +50,4 @@ Нести - \ No newline at end of file + diff --git a/addons/explosives/XEH_postInit.sqf b/addons/explosives/XEH_postInit.sqf index 5216db8215..b6dc5049d9 100644 --- a/addons/explosives/XEH_postInit.sqf +++ b/addons/explosives/XEH_postInit.sqf @@ -29,7 +29,7 @@ if (isServer) then { }] call EFUNC(common,addEventHandler); }; -if !(hasInterface) exitWith {}; +if (!hasInterface) exitWith {}; GVAR(PlacedCount) = 0; GVAR(Setup) = objNull; diff --git a/addons/explosives/functions/fnc_module.sqf b/addons/explosives/functions/fnc_module.sqf index c74c73e679..6764e9bea4 100644 --- a/addons/explosives/functions/fnc_module.sqf +++ b/addons/explosives/functions/fnc_module.sqf @@ -23,4 +23,4 @@ params ["_logic"]; [_logic, QGVAR(PunishNonSpecialists),"PunishNonSpecialists"] call EFUNC(Common,readSettingFromModule); [_logic, QGVAR(ExplodeOnDefuse),"ExplodeOnDefuse"] call EFUNC(Common,readSettingFromModule); -diag_log text "[ACE]: Explosive Module Initialized."; +ACE_LOGINFO("Explosive Module Initialized."); diff --git a/addons/explosives/functions/fnc_placeExplosive.sqf b/addons/explosives/functions/fnc_placeExplosive.sqf index 544566b4c6..5e4999b1f4 100644 --- a/addons/explosives/functions/fnc_placeExplosive.sqf +++ b/addons/explosives/functions/fnc_placeExplosive.sqf @@ -36,7 +36,7 @@ if (!isNull _setupPlaceholderObject) then { }; if (isNil "_triggerConfig") exitWith { - diag_log format ["ACE_Explosives: Error config not passed to PlaceExplosive: %1", _this]; + ACE_LOGERROR_1("Config not passed to PlaceExplosive: %1",_this); objNull }; @@ -44,7 +44,7 @@ _magazineTrigger = ConfigFile >> "CfgMagazines" >> _magazineClass >> "ACE_Trigge _triggerConfig = ConfigFile >> "ACE_Triggers" >> _triggerConfig; if (isNil "_triggerConfig") exitWith { - diag_log format ["ACE_Explosives: Error config not found in PlaceExplosive: %1", _this]; + ACE_LOGERROR_1("Config not found in PlaceExplosive: %1",_this); objNull }; diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml index 0d85415ec3..094e1bf34f 100644 --- a/addons/explosives/stringtable.xml +++ b/addons/explosives/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -76,7 +76,10 @@ Blocked Obstruido + Bloqueado Заблокировано + Blokováno + Zablokowany Cancel @@ -529,6 +532,7 @@ Sprengstoffsystem Systém výbušnin Sistema de explosivos + Module explosifs Robbanóanyag-rendszer Взрывные устройства @@ -539,6 +543,7 @@ Benötigt Sprengstoffexperten? Vyžadovat specialistu? Requer especialista? + Requiert un spécialiste? Specialisták igénylése? Требуется специалист? @@ -549,6 +554,7 @@ Benötige Sprengstoffexperte um Sprengladungen zu entschärfen? Standard: Nein Vyžadovat specialistu na zneškodnění výbušniny? Výchozí: Ne Requer especialista em explosivos para desativar explosivos? Padrão: Não + Le désarmoçage d'explosif requiert un spécialiste? Défaut: non Szükséges-e egy specialista a robbanóanyagok hatástalanításához? Alapértelmezett: Nem Требуется ли специалист по минному делу для обезвреживания взрывчатки? По-умолчанию: Нет @@ -559,6 +565,7 @@ Bestrafe Nicht-Sprengstoffexperten? Potrestat, pokud není specialista? Punir não especialistas? + Punir les non-spécialistes? Nem-specialisták büntetése? Штраф не-специалистам? @@ -569,6 +576,7 @@ Entschärfungszeit für Nicht-Sprengstoffexperten erhöhen? Standard: Ja Zvýšit čas potřebný k dokončení akce pokud není specialista? Výchozí: Ano Aumentar o tempo necessário para completar ações por não especialistas? Padrão: Sim + Augmenter le temps nécessaire au désarmoçage pour les non-spécialistes? Défaut: oui Nem-specialisták esetén több ideig tartson a cselekvés befejezése? Alapértelmezett: Igen Увеличивать время завершения действий для не-специалистов? По-умолчанию: Нет @@ -578,6 +586,7 @@ Eksplozja przy rozbrajaniu? Explodovat při zneškodňování? Explotar al desactivar? + Explosion si désamorçage? Robbanás hatástalanításkor? Взрыв при разминир.? @@ -587,6 +596,7 @@ Spraw, aby niektóre ładunki wybuchowe eksplodowały przy próbie ich rozbrojenia? Domyślnie:Tak Umožnit u některých výbušnin explozi při pokusu je zneškodnit? Výchozí: Ano ¿Habilitar ciertos explosivos para estallar al desactivar? Por defecto: Sí + Permet à certains explosifs d'exploser au désamorçage? Défaut: oui Meghatározott robbanóanyagok felrobbanjanak-e hatástalanításkor? Alapértelmezett: Igen Разрешить определенным взрывным устройствам взрываться при разминировании? По-умолчанию: Да @@ -596,8 +606,9 @@ Dieses Modul erlaubt die Einstellungen für Sprengstoffe zu verändern. Tento modul umoňuje přizpůsobit nastavení týkajících se výbušnin. Este módulo permite personalizar as definições relacionadas a explosivos. + Ce module ajuste les options relative aux explosifs Ez a modul a robbanóanyagokhoz kötött beállításokat szabályozza. Этот модуль управляет настройками, связанными со взрывными устройствами - \ No newline at end of file + diff --git a/addons/fcs/stringtable.xml b/addons/fcs/stringtable.xml index 77d683fc98..4970f9b10e 100644 --- a/addons/fcs/stringtable.xml +++ b/addons/fcs/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -74,4 +74,4 @@ СУО обнулен. - \ No newline at end of file + diff --git a/addons/finger/stringtable.xml b/addons/finger/stringtable.xml index d8fb2994e3..5beed84fd9 100644 --- a/addons/finger/stringtable.xml +++ b/addons/finger/stringtable.xml @@ -4,62 +4,82 @@ Show pointing indicator to self Индикатор пальца для показывающего + Afficher un indicateur de pointage pour soit même Pokaż indykator wskazywania palcem dla siebie Saját mutatási indikátor megjelenítése + Mostrar indicador para si mesmo Render the indicator for the pointing player. This option doesn't affect whether the other players would see the indicator Отображать индикатор указания пальцем для показывающего игрока. Эта настройка не влияет на то, будут ли другие игроки видеть индикатор + Affiche l'indicateur pour le joueur qui pointe. Cette option n'affecte pas les autres joueurs Wyświetl indykator kiedy wskazujesz coś palcem. Ta opcja nie wpływa na to, czy inni gracze zobaczą ten indykator czy też nie. Az indikátor megjelenítése a mutató játékosnak. Ez a beállítás nem változtat azon, hogy más játékosok látják-e az indikátort. + Renderizar o indicador para o jogador que está apontando. Esta opção não afeta se os outros jogadores verão ou não o indicador Pointing indicator Индикатор указания пальцем + Indicateur de pointage Indykator palca Ujj-indikátor + Indicador de apontamento Color of the pointing indicator circle Цвет индикатора указания пальцем + Couleur de l'indicateur Kolor okręgu wyświetlanego przy wskazywaniu palcem Mutatási indikátor körének színe + Cor do círculo de indicação Action "point a finger at" Действие "показать пальцем на" + Action 'Pointer le doigt à" Akcja "wskaż palcem" Cselekvés "ujj rámutatása" + Ação "Apontar um dedo para" Points, and shows a virtual marker of where you are looking to nearby units. Can be held down. + Montre du doigt et affiche un marqueur virtuel de la direction pointée aux uinités proches. Peut être maintenu Wskazuje a także wyświetla wirtualny marker-okrąg w miejscu, w które patrzysz, dla wszystkich pobliskich jednostek. Może być przytrzymywany. Mutat, és elhelyez egy virtuális jelölőt a nézett területhez közeli egységekhez. Lenyomva tartható. + Aponta e mostra um marcador virtual para onde você está olhando para unidades próximas. Pode ser utilizado para baixo. Показывает пальцем и рисует виртуальный маркер в направлении взгляда ближайшим игрокам. Можно удерживать. Pointing Settings + Option "Montrer du doigt" Ustawienia wskazywania palcem Ujj beállításai + Preferências de apontamento Настройки указания пальцем Pointing Enabled + Activer "Montrer du doigt" Aktywuj wskazywanie Mutatás engedélyezése + Apontamento ativado Указание пальцем включено Pointing Max Range + Distance maximale du pointage Maks. zasięg wskazywania Ujj maximum hatótávja + Distância máxima do apontamento Макс. дальность Max range between players to show the pointing indicator [default: 4 meters] + Distance maximale entre joueurs pour afficher l'indicateur (défaut: 4 mètres) Określ dystans na jakim można wskazywać coś palcem innym graczom. [domyślnie: 4m] A maximális távolság, amelyben a közeli játékosoknak megjelenik az indikátor. [alapértelmezett: 4 méter] + Distância máxima entre jogadores para mostrar o apontamento [padrão: 4 metros] Максимальная дальность между игроками для отображения индикатора указания пальцем [по-умолчанию: 4 метра] - \ No newline at end of file + diff --git a/addons/flashlights/XEH_postInitClient.sqf b/addons/flashlights/XEH_postInitClient.sqf index 09cdcdd1f2..53e7d041a8 100644 --- a/addons/flashlights/XEH_postInitClient.sqf +++ b/addons/flashlights/XEH_postInitClient.sqf @@ -1,7 +1,7 @@ #include "script_component.hpp" // Exit on Headless as well -if !(hasInterface) exitWith {}; +if (!hasInterface) exitWith {}; LOG(MSG_INIT); diff --git a/addons/flashlights/stringtable.xml b/addons/flashlights/stringtable.xml index acffa4ad4a..1fc2ca76b0 100644 --- a/addons/flashlights/stringtable.xml +++ b/addons/flashlights/stringtable.xml @@ -4,32 +4,44 @@ Fulton MX-991 Fulton MX-991 + Fulton MX-991 Fulton MX-991 + Fulton MX-991 Flashlight with red filter. For use on map. Latarka z czerwonym filtrem. Używana do podświetlania mapy. + Lanterna com filtro vermelho. Para uso no mapa. Фонарь с красным светофильтром. Для использования на карте. + Svítilna s červeným filtrem. Pro nahlédnutí do mapy. Maglite XL50 Maglite XL50 + Maglite XL50 Maglite XL50 + Maglite XL50 White mini flashlight. For use on map. Mini latarka. Światło białe. Używana do podświetlania mapy. + Mini lanterna branca. Para uso no mapa. Небольшой фонарик белого света. Для использования на карте. + Bílá mini svítilna. Pro nahlédnutí do mapy. KSF-1 KSF-1 + KSF-1 KSF-1 + KSF-1 Flashlight with red filter. For use on map. Latarka z czerwonym filtrem. Używana do podświetlania mapy. + Lanterna com filtro vermelho. Para uso no mapa. Фонарь с красным светофильтром. Для использования на карте. + Svítilna s červeným filtrem. Pro nahlédnutí do mapy. - \ No newline at end of file + diff --git a/addons/frag/functions/fnc_doSpall.sqf b/addons/frag/functions/fnc_doSpall.sqf index a5a5472e1b..57b5d330c7 100644 --- a/addons/frag/functions/fnc_doSpall.sqf +++ b/addons/frag/functions/fnc_doSpall.sqf @@ -1,6 +1,6 @@ //fnc_doSpall.sqf #include "script_component.hpp" -// ACE_player sideChat "WAAAAAAAAAAAAAAAAAAAAA"; +// ACE_player sideChat "WAAAAAAAAAAAAAAAAAAAAA"; private ["_hitData", "_initialData", "_hpData", "_object", "_foundObjects", "_index", "_foundObjecsts", "_roundType", "_round", "_caliber", "_explosive", "_idh", "_alive", "_exit", "_vm", "_velocity", "_oldVelocity", "_curVelocity", "_diff", "_polar", "_unitDir", "_spallPos", "_pos1", "_i", "_pos2", "_blah", "_data", "_spallPolar", "_warn", "_c", "_m", "_k", "_gC", "_fragPower", "_fragTypes", "_spread", "_spallCount", "_elev", "_dir", "_vel", "_spallFragVect", "_fragType", "_fragment", "_pos"]; @@ -86,7 +86,7 @@ if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then { if(_gC == 0) then { _gC = 2440; _warn = true;}; if(_warn) then { - diag_log text format["Ammo class %1 lacks proper explosive properties definitions for frag!", _roundType]; //TODO: turn this off when we get closer to release + ACE_LOGWARNING_1("Ammo class %1 lacks proper explosive properties definitions for frag!",_roundType); //TODO: turn this off when we get closer to release }; _fragPower = (((_m/_c)+_k)^-(1/2))*_gC; diff --git a/addons/frag/functions/fnc_frago.sqf b/addons/frag/functions/fnc_frago.sqf index e8d0f0ffa6..3507a7ab6e 100644 --- a/addons/frag/functions/fnc_frago.sqf +++ b/addons/frag/functions/fnc_frago.sqf @@ -67,7 +67,7 @@ _gC = getNumber(configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_GURNEY_C"); if(_gC == 0) then { _gC = 2440; _warn = true;}; if(_warn) then { - diag_log text format["Ammo class %1 lacks proper explosive properties definitions for frag!", _shellType]; //TODO: turn this off when we get closer to release + ACE_LOGWARNING_1("Ammo class %1 lacks proper explosive properties definitions for frag!",_shellType); //TODO: turn this off when we get closer to release }; _fragPower = (((_m/_c)+_k)^-(1/2))*_gC; @@ -187,9 +187,9 @@ if(_isArmed && (count _objects) > 0) then { _sectorOffset = 360 * (_i - 1) / (_randomCount max 1); _randomDir = random(_sectorSize); _vec = [cos(_sectorOffset + _randomDir), sin(_sectorOffset + _randomDir), sin(30 - (random 45))]; - + _fp = (_fragPower-(random (_fragPowerRandom))); - + _vel = _vec vectorMultiply _fp; _fragType = round (random ((count _fragTypes)-1)); @@ -197,7 +197,7 @@ if(_isArmed && (count _objects) > 0) then { _fragObj setPosASL _lastPos; _fragObj setVectorDir _vec; _fragObj setVelocity _vel; - + if(GVAR(traceFrags)) then { GVAR(TOTALFRAGS) = GVAR(TOTALFRAGS) + 1; [ACE_player, _fragObj, [1,0.5,0,1]] call FUNC(addTrack); @@ -205,7 +205,7 @@ if(_isArmed && (count _objects) > 0) then { _fragCount = _fragCount + 1; }; }; - + }; // #ifdef DEBUG_MODE_FULL // ACE_player sideChat format["total frags: %1", GVAR(TOTALFRAGS)]; diff --git a/addons/frag/stringtable.xml b/addons/frag/stringtable.xml index 51d0071030..bba8f1dae9 100644 --- a/addons/frag/stringtable.xml +++ b/addons/frag/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -8,6 +8,7 @@ Splittersimulation Simulace fragmentace Simulação de fragmentação + Simulation de la fragmentation Repesz-szimuláció Симуляция осколков @@ -18,6 +19,7 @@ Aktiviere die ACE-Splittersimulation Povolit ACE simulaci fragmentace Ativa a simulação de fragmentação do ACE + Active la simulation ACE de la fragmentation Az ACE repesz-szimuláció engedélyezése Включить симуляцию осколков ACE @@ -28,6 +30,7 @@ Explosionssimulation Simulace úlomků Simulação de estilhaços + Simulation d'éclat Pattogzás-szimuláció Симуляция обломков @@ -38,6 +41,7 @@ Aktiviere ACE-Explosionssimulation Povolit ACE simulaci úlomků Ativa a simulação de estilhaços do ACE + Active la simulation d'éclat ACE Az ACE pattogzás-szimuláció engedélyezése Включить симуляцию обломков ACE @@ -48,6 +52,7 @@ Maximalzahl der verfolgten Projektile Maximální počet sledovaných projektilů Máximo de projéteis rastreados + Nombre maximum de projectile suivis Maximum követett repeszek Макс. количество отслеживаемых снарядов @@ -58,6 +63,7 @@ Diese Einstellung steuert die maximale Anzahl an Projektilen, die das Splitter- und Explosionssystem gleichzeitig verfolgen wird. Wenn mehr Projektile abgefeuert werden, werden sie nicht verfolgt werden. Diese Einstellung zu verringern, kann FPS-Einbrüche bei Szenarien mit vielen Projektilen verhindern (>200 Objekte gleichzeitig in der Luft) Toto nastavení kontroluje maximální množství projektilů z fragmentace a úlomků, která jsou sledována v dané době. Pokud je vystřeleno více projektilů, tak nebudou sledovány. Snižte toto nastavení pokud si nepřejete propady FPS v situacích, kde je velké množství projektilů ( >200 nábojů najednou ve vzduchu) Esta definição controla a quantidade máxima de projéteis que o sistema de fragmentação e estilhaçamento irá acompanhar em qualquer momento. Se mais projéteis são disparados, eles não serão rastreados. Diminua essa configuração se você não quiser que o FPS caia em cenários com alta contagem de projéteis (> 200 projéteis no ar ao mesmo tempo) + Cette option controle le nombre maximum de projectile et d'éclat résultant de la fragmentation que le système suivra à un moment T. Si plus de projectiles sont générés, ils ne seront pas pris en compte. Baisser cette option si vous ne voulez pas de baisse de FPS en cas d'un nombre important de projectiles (>200 éclats en même temps) Ez a beállítás szabályozza a repeszeződés és pattogzás által kilőtt objektumok követett számát. Ha több ez a szám, ezek az objektumok nem lesznek követve. Csökkentsd ezt a beállítást, ha nem akarsz lassulásokat magas-törmelékmennyiségű helyzetekben (200+ repesz a levegőben egyszerre) Эта настройка контролирует максимальное количество снарядов, которок отслеживает система осколков и обломков в каждый момент времени. Снаряды, выстреленные сверх этого числа, отслеживаться не будут. Уменьшите это значение, если вы не хотите падения FPS при большом количестве снарядов в одной перестрелке (> 200 одновременно летящих снарядов) @@ -68,6 +74,7 @@ Maks. liczba pocisków na klatkę Maximální počet projektilů ze jeden snímek Projéteis máximos por quadro + Nombre maximal de projectile par image Maximum repesz/képkocka Макс. количество снарядов за кадр @@ -78,6 +85,7 @@ El número de cálculos de esquirlas que se hará en cualquier cuadro. Esto ayuda a dispersar el impacto en FPS del seguimiento de esquirlas de balas a través de múltiples cuadros, lo que limita aún más su impacto. Počet úlomků v daném snímku. Toto pomáhá rozšířit FPS dopad sledovaného úlomku napříč více snímky, omezuje jeho vliv ještě více. O número de cálculos por estilhaço rastreado para executar em qualquer quadro. Isso ajuda a distribuir o impacto no FPS do rastreamento de estilhaço em vários quadros, o que limita o seu impacto ainda mais. + Le nombre d'éclat à calculer dans chaque images. Ceci permet de diffuser l'impact sur les FPS dans de multiples images, le limitant d'autant plus. A lepattogzási útvonalak számításának darabjai képkockánként. Ez eloszlatja az FPS-megszakadást több képkockára, ezzel csökkentve a súlyosságát. Число обрабатываемых осколков за кадр. Это позволяет распределить нагрузку по отслеживанию осколков между несколькими кадрами, чтобы предотвратить падение FPS. @@ -88,6 +96,7 @@ (Pouze SP) Debug sledování Frag/Úlomků (nur SP) Splitter-/Explosions-Debug-Verfolgung (Somente SP) Depuração de fragmentação e estilhaços traçantes + (SP uniquement) Fragmentation/éclat debug (Csak SP) Repesz/Pattogzás debug követés (Только для одиночной игры) Отслеживаение/отладка осколков @@ -98,6 +107,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 (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. (Только для одиночной игры) Требует перезапуска миссии/редактора. Включает визуальные следы от осколков и обломков в режиме одиночной игры. diff --git a/addons/gforces/XEH_postInit.sqf b/addons/gforces/XEH_postInit.sqf index 7a0d4a559c..a97822be8c 100644 --- a/addons/gforces/XEH_postInit.sqf +++ b/addons/gforces/XEH_postInit.sqf @@ -1,6 +1,6 @@ #include "script_component.hpp" -if !(hasInterface) exitWith {}; +if (!hasInterface) exitWith {}; // Setup ppEffect GVAR(GForces_CC) = ppEffectCreate ["ColorCorrections", 4215]; diff --git a/addons/gforces/functions/fnc_pfhUpdateGForces.sqf b/addons/gforces/functions/fnc_pfhUpdateGForces.sqf index a4cb047629..55a41043b9 100644 --- a/addons/gforces/functions/fnc_pfhUpdateGForces.sqf +++ b/addons/gforces/functions/fnc_pfhUpdateGForces.sqf @@ -14,7 +14,7 @@ #include "script_component.hpp" private ["_interval", "_player", "_newVel", "_accel", "_currentGForce", "_average", "_sum", "_classCoef", "_suitCoef", "_gBlackOut", "_gRedOut", "_g", "_gBO", "_coef", "_strength"]; - + EXPLODE_2_PVT(_this,_params,_pfhId); _interval = ACE_time - GVAR(lastUpdateTime); diff --git a/addons/goggles/functions/fnc_applyDust.sqf b/addons/goggles/functions/fnc_applyDust.sqf index 35677657a7..a1ac88c78d 100644 --- a/addons/goggles/functions/fnc_applyDust.sqf +++ b/addons/goggles/functions/fnc_applyDust.sqf @@ -14,6 +14,7 @@ * Public: Yes */ #include "script_component.hpp" + if (call FUNC(ExternalCamera)) exitWith {}; if ([ace_player] call FUNC(isGogglesVisible)) exitWith { 100 cutRsc["RscACE_GogglesEffects", "PLAIN",2,false]; diff --git a/addons/goggles/functions/fnc_applyGlassesEffect.sqf b/addons/goggles/functions/fnc_applyGlassesEffect.sqf index 8c2edb531e..7abb10d448 100644 --- a/addons/goggles/functions/fnc_applyGlassesEffect.sqf +++ b/addons/goggles/functions/fnc_applyGlassesEffect.sqf @@ -16,6 +16,7 @@ * Public: No */ #include "script_component.hpp" + private["_postProcessColour", "_postProcessTintAmount", "_glassesClassname", "_glassImagePath"]; _glassesClassname = _this select 0; diff --git a/addons/goggles/functions/fnc_checkGoggles.sqf b/addons/goggles/functions/fnc_checkGoggles.sqf index f222ea9881..84b86c3da4 100644 --- a/addons/goggles/functions/fnc_checkGoggles.sqf +++ b/addons/goggles/functions/fnc_checkGoggles.sqf @@ -18,7 +18,7 @@ if (!alive ace_player) exitWith {}; if (true) then { // Detect if curator interface is open and disable effects - if (!isNull(findDisplay 312)) exitWith { + if !(isNull curatorCamera) exitWith { if (GVAR(EffectsActive)) then { call FUNC(removeGlassesEffect); }; diff --git a/addons/goggles/functions/fnc_isGogglesVisible.sqf b/addons/goggles/functions/fnc_isGogglesVisible.sqf index 253a82f0a3..80f9de4830 100644 --- a/addons/goggles/functions/fnc_isGogglesVisible.sqf +++ b/addons/goggles/functions/fnc_isGogglesVisible.sqf @@ -15,17 +15,14 @@ */ #include "script_component.hpp" -PARAMS_1(_unit); - +params ["_unit"]; private ["_currentGlasses", "_result", "_position", "_visible"]; _currentGlasses = goggles _unit; _result = false; -if ((vehicle _unit) != _unit) exitWith {(cameraView != "GUNNER")}; - if (_currentGlasses != "") then { - _position =(getPosASLW _unit); + _position = getPosASLW _unit; if (surfaceIsWater _position && {((_position select 2) < 0.25)}) exitWith { _result = ([_currentGlasses] call FUNC(isDivingGoggles)); }; diff --git a/addons/grenades/CfgAmmo.hpp b/addons/grenades/CfgAmmo.hpp index 120d3ab5ea..6cb16b0328 100644 --- a/addons/grenades/CfgAmmo.hpp +++ b/addons/grenades/CfgAmmo.hpp @@ -28,66 +28,67 @@ class CfgAmmo { }; class ACE_F_Hand_White: F_20mm_White { - grenadeBurningSound[] = {"SmokeShellSoundLoop1",0.5,"SmokeShellSoundLoop2",0.5}; - grenadeFireSound[] = {"SmokeShellSoundHit1",0.25,"SmokeShellSoundHit2",0.25,"SmokeShellSoundHit3",0.5}; - soundTrigger[] = {"SmokeShellSoundLoop1",0.5,"SmokeShellSoundLoop2",0.5}; - SmokeShellSoundHit1[] = {"A3\Sounds_F\weapons\smokeshell\smoke_1",1.25893,1,100}; - SmokeShellSoundHit2[] = {"A3\Sounds_F\weapons\smokeshell\smoke_2",1.25893,1,100}; - SmokeShellSoundHit3[] = {"A3\Sounds_F\weapons\smokeshell\smoke_3",1.25893,1,100}; - SmokeShellSoundLoop1[] = {"A3\Sounds_F\weapons\smokeshell\smoke_loop1",0.125893,1,70}; - SmokeShellSoundLoop2[] = {"A3\Sounds_F\weapons\smokeshell\smoke_loop2",0.125893,1,70}; timeToLive = 60; }; class F_20mm_Red; class ACE_F_Hand_Red: F_20mm_Red { - grenadeBurningSound[] = {"SmokeShellSoundLoop1",0.5,"SmokeShellSoundLoop2",0.5}; - grenadeFireSound[] = {"SmokeShellSoundHit1",0.25,"SmokeShellSoundHit2",0.25,"SmokeShellSoundHit3",0.5}; - soundTrigger[] = {"SmokeShellSoundLoop1",0.5,"SmokeShellSoundLoop2",0.5}; - SmokeShellSoundHit1[] = {"A3\Sounds_F\weapons\smokeshell\smoke_1",1.25893,1,100}; - SmokeShellSoundHit2[] = {"A3\Sounds_F\weapons\smokeshell\smoke_2",1.25893,1,100}; - SmokeShellSoundHit3[] = {"A3\Sounds_F\weapons\smokeshell\smoke_3",1.25893,1,100}; - SmokeShellSoundLoop1[] = {"A3\Sounds_F\weapons\smokeshell\smoke_loop1",0.125893,1,70}; - SmokeShellSoundLoop2[] = {"A3\Sounds_F\weapons\smokeshell\smoke_loop2",0.125893,1,70}; timeToLive = 60; }; class F_20mm_Green; class ACE_F_Hand_Green: F_20mm_Green { - grenadeBurningSound[] = {"SmokeShellSoundLoop1",0.5,"SmokeShellSoundLoop2",0.5}; - grenadeFireSound[] = {"SmokeShellSoundHit1",0.25,"SmokeShellSoundHit2",0.25,"SmokeShellSoundHit3",0.5}; - soundTrigger[] = {"SmokeShellSoundLoop1",0.5,"SmokeShellSoundLoop2",0.5}; - SmokeShellSoundHit1[] = {"A3\Sounds_F\weapons\smokeshell\smoke_1",1.25893,1,100}; - SmokeShellSoundHit2[] = {"A3\Sounds_F\weapons\smokeshell\smoke_2",1.25893,1,100}; - SmokeShellSoundHit3[] = {"A3\Sounds_F\weapons\smokeshell\smoke_3",1.25893,1,100}; - SmokeShellSoundLoop1[] = {"A3\Sounds_F\weapons\smokeshell\smoke_loop1",0.125893,1,70}; - SmokeShellSoundLoop2[] = {"A3\Sounds_F\weapons\smokeshell\smoke_loop2",0.125893,1,70}; timeToLive = 60; }; class F_20mm_Yellow; class ACE_F_Hand_Yellow: F_20mm_Yellow { - grenadeBurningSound[] = {"SmokeShellSoundLoop1",0.5,"SmokeShellSoundLoop2",0.5}; - grenadeFireSound[] = {"SmokeShellSoundHit1",0.25,"SmokeShellSoundHit2",0.25,"SmokeShellSoundHit3",0.5}; - soundTrigger[] = {"SmokeShellSoundLoop1",0.5,"SmokeShellSoundLoop2",0.5}; - SmokeShellSoundHit1[] = {"A3\Sounds_F\weapons\smokeshell\smoke_1",1.25893,1,100}; - SmokeShellSoundHit2[] = {"A3\Sounds_F\weapons\smokeshell\smoke_2",1.25893,1,100}; - SmokeShellSoundHit3[] = {"A3\Sounds_F\weapons\smokeshell\smoke_3",1.25893,1,100}; - SmokeShellSoundLoop1[] = {"A3\Sounds_F\weapons\smokeshell\smoke_loop1",0.125893,1,70}; - SmokeShellSoundLoop2[] = {"A3\Sounds_F\weapons\smokeshell\smoke_loop2",0.125893,1,70}; timeToLive = 60; }; class SmokeShell; + class ACE_G_Handflare_White: SmokeShell { + GVAR(flare) = 1; + GVAR(color)[] = {0.5,0.5,0.5,0.5}; + model = "\A3\weapons_f\ammo\flare_white"; + dangerRadiusHit = -1; + suppressionRadiusHit = -1; + typicalSpeed = 22; + cost = 100; + deflecting = 30; + explosionTime = 3; + timeToLive = 60; + grenadeFireSound[] = {}; + grenadeBurningSound[] = {}; + aiAmmoUsageFlags = "4 + 2"; + smokeColor[] = {0,0,0,0}; + effectsSmoke = "ACE_HandFlareEffect"; + whistleDist = 0; + }; + class ACE_G_Handflare_Red: ACE_G_Handflare_White { + GVAR(color)[] = {0.5,0.25,0.25,0.5}; + model = "\A3\weapons_f\ammo\flare_red"; + }; + class ACE_G_Handflare_Green: ACE_G_Handflare_White { + GVAR(color)[] = {0.25,0.5,0.25,0.5}; + model = "\A3\weapons_f\ammo\flare_green"; + }; + class ACE_G_Handflare_Yellow: ACE_G_Handflare_White { + GVAR(color)[] = {0.5,0.5,0.25,0.5}; + model = "\A3\weapons_f\ammo\flare_yellow"; + }; + class ACE_G_M84: SmokeShell { + GVAR(flashbang) = 1; model = PATHTOF(models\ACE_m84_thrown.p3d); dangerRadiusHit = -1; suppressionRadiusHit = 20; typicalSpeed = 22; cost = 40; + explosive = 1E-7; deflecting = 15; + explosionTime = 2.3; timeToLive = 6; - fuseDistance = 2.3; grenadeFireSound[] = {}; grenadeBurningSound[] = {}; aiAmmoUsageFlags = "0"; diff --git a/addons/grenades/CfgMagazines.hpp b/addons/grenades/CfgMagazines.hpp index 31e80dc545..16dd9929ff 100644 --- a/addons/grenades/CfgMagazines.hpp +++ b/addons/grenades/CfgMagazines.hpp @@ -1,3 +1,4 @@ + class CfgMagazines { class HandGrenade; class ACE_HandFlare_Base: HandGrenade { @@ -8,55 +9,60 @@ class CfgMagazines { mass = 4; initSpeed = 22; }; + class ACE_HandFlare_White: ACE_HandFlare_Base { author = ECSTRING(common,ACETeam); scope = 2; - ammo = "ACE_F_Hand_White"; displayname = CSTRING(M127A1_White_Name); descriptionshort = CSTRING(M127A1_White_Description); displayNameShort = CSTRING(M127A1_White_NameShort); model = "\A3\weapons_f\ammo\flare_white"; picture = "\A3\Weapons_F\Data\UI\gear_flare_white_ca.paa"; + ammo = "ACE_G_Handflare_White"; }; + class ACE_HandFlare_Red: ACE_HandFlare_Base { author = ECSTRING(common,ACETeam); scope = 2; - ammo = "ACE_F_Hand_Red"; displayname = CSTRING(M127A1_Red_Name); descriptionshort = CSTRING(M127A1_Red_Description); displayNameShort = CSTRING(M127A1_Red_NameShort); model = "\A3\weapons_f\ammo\flare_red"; picture = "\A3\Weapons_F\Data\UI\gear_flare_red_ca.paa"; + ammo = "ACE_G_Handflare_Red"; }; + class ACE_HandFlare_Green: ACE_HandFlare_Base { author = ECSTRING(common,ACETeam); scope = 2; - ammo = "ACE_F_Hand_Green"; displayname = CSTRING(M127A1_Green_Name); descriptionshort = CSTRING(M127A1_Green_Description); displayNameShort = CSTRING(M127A1_Green_NameShort); model = "\A3\weapons_f\ammo\flare_green"; picture = "\A3\Weapons_F\Data\UI\gear_flare_green_ca.paa"; + ammo = "ACE_G_Handflare_Green"; }; + class ACE_HandFlare_Yellow: ACE_HandFlare_Base { author = ECSTRING(common,ACETeam); scope = 2; - ammo = "ACE_F_Hand_Yellow"; displayname = CSTRING(M127A1_Yellow_Name); descriptionshort = CSTRING(M127A1_Yellow_Description); displayNameShort = CSTRING(M127A1_Yellow_NameShort); model = "\A3\weapons_f\ammo\flare_yellow"; picture = "\A3\Weapons_F\Data\UI\gear_flare_yellow_ca.paa"; + ammo = "ACE_G_Handflare_Yellow"; }; + class ACE_M84: HandGrenade { author = ECSTRING(common,ACETeam); - ammo = "ACE_G_M84"; displayname = CSTRING(M84_Name); descriptionshort = CSTRING(M84_Description); displayNameShort = "M84"; - mass = 4; model = PATHTOF(models\ACE_m84.p3d); picture = PATHTOF(UI\ACE_m84_x_ca.paa); + ammo = "ACE_G_M84"; + mass = 4; }; class 3Rnd_UGL_FlareGreen_F; @@ -65,6 +71,7 @@ class CfgMagazines { ammo = "F_40mm_Green"; initSpeed = 120; }; + class 6Rnd_RedSignal_F: 6Rnd_GreenSignal_F { author = ECSTRING(common,ACETeam); ammo = "F_40mm_Red"; diff --git a/addons/grenades/Effects.hpp b/addons/grenades/Effects.hpp index c9e214de5c..3cbcef9a38 100644 --- a/addons/grenades/Effects.hpp +++ b/addons/grenades/Effects.hpp @@ -2,3 +2,7 @@ class ACE_M84FlashbangEffect { // empty }; + +class ACE_HandFlareEffect { + // empty +}; diff --git a/addons/grenades/XEH_postInit.sqf b/addons/grenades/XEH_postInit.sqf index e78f1d52de..260bf63f6e 100644 --- a/addons/grenades/XEH_postInit.sqf +++ b/addons/grenades/XEH_postInit.sqf @@ -4,7 +4,7 @@ ["flashbangExplosion", DFUNC(flashbangExplosionEH)] call EFUNC(common,addEventHandler); -if !(hasInterface) exitWith {}; +if (!hasInterface) exitWith {}; GVAR(flashbangPPEffectCC) = ppEffectCreate ["ColorCorrections", 4265]; GVAR(flashbangPPEffectCC) ppEffectForceInNVG true; diff --git a/addons/grenades/XEH_preInit.sqf b/addons/grenades/XEH_preInit.sqf index 0df2e235fd..631cecca85 100644 --- a/addons/grenades/XEH_preInit.sqf +++ b/addons/grenades/XEH_preInit.sqf @@ -2,6 +2,7 @@ ADDON = false; +PREP(flare); PREP(flashbangExplosionEH); PREP(flashbangThrownFuze); PREP(nextMode); diff --git a/addons/grenades/functions/fnc_flare.sqf b/addons/grenades/functions/fnc_flare.sqf new file mode 100644 index 0000000000..bf1d571640 --- /dev/null +++ b/addons/grenades/functions/fnc_flare.sqf @@ -0,0 +1,40 @@ +/* + * Author: commy2 + * Makes flare shine. + * + * Arguments: + * 0: The flare + * 1: Color of flare + * 2: Intensity of flare + * 3: Flare lifetime + * + * Return Value: + * None + * + * Example: + * [_nade, [0.5,0.5,0.5], 0.5, 60] call ace_grenades_fnc_flare + * + * Public: No + */ +#include "script_component.hpp" + +params ["_projectile", "_color", "_intensity", "_timeToLive"]; + +private "_light"; +_light = "#lightpoint" createVehicleLocal position _projectile; + +_light setLightColor _color; +_light setLightAmbient _color; +_light setLightIntensity _intensity; +_light setLightBrightness 0.8; + +_light setLightUseFlare true; +_light setLightFlareSize 3.0; +_light setLightFlareMaxDistance 1000; + +_light setLightDayLight true; + +_light lightAttachObject [_projectile, [0,0,0]]; +//_light attachTo [_projectile, [0,0,0]]; + +[{deleteVehicle _this}, _light, _timeToLive, 1] call EFUNC(common,waitAndExecute); diff --git a/addons/grenades/functions/fnc_flashbangExplosionEH.sqf b/addons/grenades/functions/fnc_flashbangExplosionEH.sqf index cd85c3fe36..1f7e97c47a 100644 --- a/addons/grenades/functions/fnc_flashbangExplosionEH.sqf +++ b/addons/grenades/functions/fnc_flashbangExplosionEH.sqf @@ -94,7 +94,7 @@ _affected = _grenade nearEntities ["CAManBase", 20]; }, [_light], 0.1] call EFUNC(common,waitAndExecute); // blind player - if (_strength > 0.1) then { + if (_strength > 0.1 && hasInterface) then { GVAR(flashbangPPEffectCC) ppEffectEnable true; GVAR(flashbangPPEffectCC) ppEffectAdjust [1,1,(0.8 + _strength) min 1,[1,1,1,0],[0,0,0,1],[0,0,0,0]]; GVAR(flashbangPPEffectCC) ppEffectCommit 0.01; diff --git a/addons/grenades/functions/fnc_throwGrenade.sqf b/addons/grenades/functions/fnc_throwGrenade.sqf index 03e67a152a..9439aef4bd 100644 --- a/addons/grenades/functions/fnc_throwGrenade.sqf +++ b/addons/grenades/functions/fnc_throwGrenade.sqf @@ -21,22 +21,50 @@ */ #include "script_component.hpp" -private ["_mode", "_fuzeTime"]; -params ["_unit", "_weapon", "", "", "", "", "_projectile"]; +params ["_unit", "_weapon", "", "", "_ammo", "", "_projectile"]; -if (_unit != ACE_player) exitWith {}; if (_weapon != "Throw") exitWith {}; +// http://feedback.arma3.com/view.php?id=12340 +if (isNull _projectile) then { + _projectile = nearestObject [_unit, _ammo]; +}; + +// handle special grenades +if (local _unit) then { + if (getNumber (configFile >> "CfgAmmo" >> _ammo >> QGVAR(flashbang)) == 1) then { + private "_fuzeTime"; + _fuzeTime = getNumber (configFile >> "CfgAmmo" >> _ammo >> "explosionTime"); + + [FUNC(flashbangThrownFuze), [_projectile], _fuzeTime, 0] call EFUNC(common,waitAndExecute); + }; +}; + +if (getNumber (configFile >> "CfgAmmo" >> _ammo >> QGVAR(flare)) == 1) then { + private ["_fuzeTime", "_timeToLive", "_color", "_intensity"]; + + _fuzeTime = getNumber (configFile >> "CfgAmmo" >> _ammo >> "explosionTime"); + _timeToLive = getNumber (configFile >> "CfgAmmo" >> _ammo >> "timeToLive"); + _color = getArray (configFile >> "CfgAmmo" >> _ammo >> QGVAR(color)); + _intensity = _color select 3; + _color resize 3; + + [FUNC(flare), [_projectile, _color, _intensity, _timeToLive], _fuzeTime, 0] call EFUNC(common,waitAndExecute); +}; + +// handle throw modes +if (_unit != ACE_player) exitWith {}; + +private "_mode"; _mode = missionNamespace getVariable [QGVAR(currentThrowMode), 0]; if (_mode != 0) then { private "_velocity"; - _velocity = velocity _projectile; switch (_mode) do { //high throw - case 1 : { + case 1 : { _velocity = [ 0.5 * (_velocity select 0), 0.5 * (_velocity select 1), @@ -44,24 +72,18 @@ if (_mode != 0) then { ]; }; //precise throw - case 2 : { + case 2 : { _velocity = (_unit weaponDirection _weapon) vectorMultiply (vectorMagnitude _velocity); }; //roll grande - case 3 : { + case 3 : { //@todo }; //drop grenade - case 4 : { + case 4 : { _velocity = [0, 0, 0]; }; }; _projectile setVelocity _velocity; }; - -if (typeOf _projectile == "ACE_G_M84") then { - _fuzeTime = getNumber (configFile >> "CfgAmmo" >> typeOf _projectile >> "fuseDistance"); - // _fuzeTime = getNumber (configFile >> "CfgAmmo" >> typeOf _projectile >> "explosionTime"); //@toDo pretty sure this should be explosionTime not fuseDistance - [FUNC(flashbangThrownFuze), [_projectile], _fuzeTime, 0] call EFUNC(common,waitAndExecute); -}; diff --git a/addons/grenades/stringtable.xml b/addons/grenades/stringtable.xml index 522c370777..31282500e8 100644 --- a/addons/grenades/stringtable.xml +++ b/addons/grenades/stringtable.xml @@ -1,4 +1,4 @@ - + diff --git a/addons/hearing/functions/fnc_moduleHearing.sqf b/addons/hearing/functions/fnc_moduleHearing.sqf index 2b4daecc72..0aa8843485 100644 --- a/addons/hearing/functions/fnc_moduleHearing.sqf +++ b/addons/hearing/functions/fnc_moduleHearing.sqf @@ -20,5 +20,4 @@ if ((_logic getVariable "DisableEarRinging") != -1) then { }; [_logic, QGVAR(enabledForZeusUnits), "enabledForZeusUnits"] call EFUNC(common,readSettingFromModule); - -diag_log text "[ACE]: Hearing Module Initialized."; +ACE_LOGINFO("Hearing Module Initialized."); diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index b2cd45f66e..e1cb820665 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -116,6 +116,7 @@ Gehör Sluch Audição + Audition Hallás Слух @@ -126,6 +127,7 @@ Aktiviere Taubheit im Gefecht? Povolit ztrátu sluchu? Ativar surdez em combate? + Activer la surdité au combat? Harci süketség engedélyezése? Оглушение @@ -136,24 +138,28 @@ Aktiviere Taubheit im Gefecht? Povolit ztrátu sluchu? Ativar surdez em combate? - Harci süketség engedélyezése? - Уменьшает способность игроков слышать при повреждении слуха Controls combat deafness and ear ringing. When activated, players can be deafened when a gun is fired in their vicinity or an explosion takes place without hearing protection + Harci süketség engedélyezése? + Уменьшает способность игроков слышать при повреждении слуха Głuchota bojowa pojawia się w momentach, kiedy stoimy w pobliżu broni wielkokalibrowej bez ochrony słuchu, lub np. podczas ostrzału artyleryjskiego. Moduł ten pozwala na włączenie lub wyłączenie tego efektu. Dieses Modul aktiviert/deaktiviert die Taubheit im Gefecht. Wenn aktiviert, können Spieler ohne Gehörschutz taub werden, wenn eine Waffe in ihrer Nähe abgefeuert wird oder eine Explosion stattfindet. Ztráta sluchu je možná ve chvíly, kdy se v bezprostřední blízkosti střílí z velkorážní zbraně nebo při bombardování a osoba je bez ochrany sluchu (např. špunty). Tento modul umožňuje tuto věc povolit nebo zakázat. Este módulo ativa / desativa surdez em combate. Quando ativado, os jogadores podem ficar surdos quando uma arma é disparada ao seu redor ou uma explosão ocorre sem proteção auditiva. - Контролирует оглушение в бою и звон в ушах. При активации играки могут быть оглушены близкими выстрелами и взрывами при отсутствии защиты для ушей. + Ce module active / désactivé la surdité au combat. Si active, des joueurs peuvent devenir sourds sans protection d'oreille, si une arme est utilisée ou une explosion a lieu à proximité - Affects Zeus RC + Effect Zeus RC + Wpływ na Zeus RC Влияет на юнита Зевса + Afeta Zeus CR Allow zeus remote controlled units to be able to take hearing damage. - Позволить юнитам, контролируемым Зевсом, получать повреждение слуха. + Aktywuj efekty utraty słuchu dla jednostek kontrolowanych zdalnie przez Zeusa. + Контролирует оглушение в бою и звон в ушах. При активации играки могут быть оглушены близкими выстрелами и взрывами при отсутствии защиты для ушей. + Permite que unidades remotamente controladas pelo Zeus sejam atingidas por danos auditivos. diff --git a/addons/huntir/functions/fnc_cam.sqf b/addons/huntir/functions/fnc_cam.sqf index 9eb22b9fb5..9426de13fd 100644 --- a/addons/huntir/functions/fnc_cam.sqf +++ b/addons/huntir/functions/fnc_cam.sqf @@ -13,6 +13,7 @@ */ #include "script_component.hpp" +if (!hasInterface) exitWith {}; params ["_huntIR"]; GVAR(huntIR) = _huntIR; diff --git a/addons/huntir/stringtable.xml b/addons/huntir/stringtable.xml index 7e7767f349..3af7f8157b 100644 --- a/addons/huntir/stringtable.xml +++ b/addons/huntir/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -194,4 +194,4 @@ Esc - Sai do Ajuda - \ No newline at end of file + diff --git a/addons/interact_menu/XEH_clientInit.sqf b/addons/interact_menu/XEH_clientInit.sqf index 31dedfbe22..c1a5e63e71 100644 --- a/addons/interact_menu/XEH_clientInit.sqf +++ b/addons/interact_menu/XEH_clientInit.sqf @@ -104,3 +104,25 @@ addMissionEventHandler ["Draw3D", DFUNC(render)]; }]; }; }] call EFUNC(common,addEventHandler); + + +//Debug to help end users identify mods that break CBA's XEH +["SettingsInitialized", { + private ["_badClassnames"]; + _badClassnames = []; + { + if ((isNil (format [QGVAR(Act_%1), typeOf _x])) || {isNil (format [QGVAR(SelfAct_%1), typeOf _x])}) then { + if (!((typeOf _x) in _badClassnames)) then { + _badClassnames pushBack (typeOf _x); + ACE_LOGERROR_3("Compile checks bad for (classname: %1)(addon: %2) %3", (typeOf _x), (unitAddons (typeOf _x)), _x); + }; + }; + } forEach (allUnits + allDeadMen + vehicles); + if ((count _badClassnames) == 0) then { + ACE_LOGINFO("All compile checks passed"); + } else { + ACE_LOGERROR_1("%1 Classnames failed compile check!!! (bad XEH / missing cba_enable_auto_xeh.pbo)", (count _badClassnames)); + ["ACE Interaction failed to compile for some units (try adding cba_enable_auto_xeh.pbo)"] call BIS_fnc_error; + }; +}] call EFUNC(common,addEventHandler); + diff --git a/addons/interact_menu/functions/fnc_addActionToClass.sqf b/addons/interact_menu/functions/fnc_addActionToClass.sqf index 4d300d35a2..f720903a6d 100644 --- a/addons/interact_menu/functions/fnc_addActionToClass.sqf +++ b/addons/interact_menu/functions/fnc_addActionToClass.sqf @@ -44,7 +44,7 @@ if (_parentPath isEqualTo ["ACE_MainActions"]) then { _parentNode = [_actionTrees, _parentPath] call FUNC(findActionNode); if (isNil {_parentNode}) exitWith { ERROR("Failed to add action"); - diag_log text format ["action (%1) to parent %2 on object %3 [%4]", (_action select 0), _parentPath, _objectType, _typeNum]; + ACE_LOGERROR_4("action (%1) to parent %2 on object %3 [%4]",(_action select 0),_parentPath,_objectType,_typeNum); }; // Add action node as children of the correct node of action tree diff --git a/addons/interact_menu/stringtable.xml b/addons/interact_menu/stringtable.xml index 735e888245..d4f7f32e4c 100644 --- a/addons/interact_menu/stringtable.xml +++ b/addons/interact_menu/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -90,6 +90,7 @@ Akcje Zeusa Akce Zeuse Acciones Zeus + Actions Zeus Zeus cselekvések Ações do Zeus Действия Зевса @@ -233,6 +234,7 @@ Pozadí menu interakce Interaktionsmenü-Hintergrund Fundo do menu de interação + Arrière plan du menu d'interaction Cselekvő menü háttere Фон меню взаимодействия @@ -240,9 +242,10 @@ Blur the background while the interaction menu is open. Rozmywa lub przyciemnia tło na czas otwarcia menu interakcji Desenfocar el fondo mientras el menú de interacción está abierto. - Rozmazat obraz pokud je interakční menu otevřené. + Rozmazat obraz při otevřeném interakčním menu. Den Hintergrund verschwimmen lassen, während das Interaktionsmenü geöffnet ist. Desfocar o fundo enquanto o menu de interação está aberto. + Flouter l'arrière plan durant l'ouverture du menu d'interaction A háttér elmosása a cselekvő menü használata alatt. Размыть фон, пока открыто меню взаимодействия. @@ -253,6 +256,7 @@ Rozmazaný obraz Verschwommenes Bild Desfoque de tela + Flouter l'écran Kép elmosása Размытый @@ -260,9 +264,10 @@ Black Przyciemnienie ekranu Negro - Černý obraz + Tmavý Preto Schwarz + Noir Fekete Черный @@ -271,6 +276,7 @@ Pokazuj akcje dla budynków Zobrazit akci pro budovy Mostrar acciones para edificios + Affiche les actions pour les batiments Cselekvések mutatása épületeknél Mostrar ações para edifícios Показывать действия для зданий @@ -280,6 +286,7 @@ Dodaje opcje interakcji dla otwierania drzwi oraz wchodzenia po drabinach do budynków. Uwaga: Użycie tej opcji może spowodować spadek wydajności menu interakcji, szczególnie w dużych miastach. Přidá možnost interakce pro otevření dvěří a umistňovat žebříky na budovy. (Poznámka: Použití této možnosti snižuje výkon při otevírání pomocí interakčního menu, zejména ve velkých městech.) Añade las acciones de interacción para la apertura de puertas y montaje de escaleras en los edificios. (Nota: Hay un coste de rendimiento al abrir el menú de interacción, especialmente en las ciudades) + Ajoute des interactions pour ouvrir les portes et les échelles des batiments. (Note: l'ouverture du menu en ville dégrade les performances) Cselekvéseket engedélyez ajtók kinyitására és létrák mászására. (Figyelem: ez teljesítményvesztéssel járhat a menü megnyitásakor, főleg városokban) Adiciona ações de interações para abrir portas e montar escadas em edifícios. (Nota: Existe um custo de performance quando aberto o menu de interação, especialmente em cidades) Добавляет действия открывания дверей и залезания на лестницы для зданий. (Примечание: возможно падение производительности при открытии меню взаимодействия, особенно в городах) @@ -287,7 +294,9 @@ Interaction Menu Menu interakcji + Menu de interação Меню взаимодействия + Menu interakce - \ No newline at end of file + diff --git a/addons/interaction/functions/fnc_moduleInteraction.sqf b/addons/interaction/functions/fnc_moduleInteraction.sqf index bd02093aa0..4d6ef3f1c0 100644 --- a/addons/interaction/functions/fnc_moduleInteraction.sqf +++ b/addons/interaction/functions/fnc_moduleInteraction.sqf @@ -26,4 +26,4 @@ if !(_activated) exitWith {}; [_logic, QGVAR(EnableTeamManagement), "EnableTeamManagement"] call EFUNC(common,readSettingFromModule); -diag_log text "[ACE]: Interaction Module Initialized."; +ACE_LOGINFO("Interaction Module Initialized."); diff --git a/addons/interaction/stringtable.xml b/addons/interaction/stringtable.xml index bfa2df6560..7d2b91f6c8 100644 --- a/addons/interaction/stringtable.xml +++ b/addons/interaction/stringtable.xml @@ -774,6 +774,7 @@ Otwórz Otevřít Abrir + Ouvrir Nyitás Abrir Открыть @@ -785,6 +786,7 @@ Interaktionssystem Systém interakce Взаимодействие + Système d'interaction Interakciós rendszer Sistema de interação @@ -795,6 +797,7 @@ Aktiviere Gruppenverwaltung Povolit správu týmu Управление группами + Active la gestion d'équipe Csapatkezelés engedélyezése Habilitar gestão de equipes @@ -805,6 +808,7 @@ Sollen Spieler das Gruppenverwaltungsmenü verwenden dürfen? Standard: Ja Mohou hráči použít menu správy týmu? Výchozí: Ano Разрешить ли игрокам использовать меню управления группами? По-умолчани: Да + Permettre aux joueurs d'utiliser la gestion de groupe? Défaut: oui A játékosoknak engedélyezve legyen a csapatkezelő menü? Alapértelmezett: Igen Devem os jogadores ter permissão de usar o menu de gestão de equipes? Padrão: Sim @@ -814,9 +818,10 @@ Die Gruppenverwaltung erlaubt die Zuweisung von Farben für Einheiten, die Kommandierung und das Beitreten/Verlassen einer Gruppe. Správa týmu se skládá z: přidělení barev pro členy týmu, převzetí velení, připojení/odpojení. La gestión del equipo permite la asignación de colores para los miembros del equipo, tomando el mando del equipo y uniendo/dejando equipos. + La gestion d'équipe permet l'allocation de couleur aux membres d'équipe, de prendre le commandement, de rejoindre ou quitter une équipe. A csapatkezelés engedélyezi a tagok színének meghatározását, a vezetés átvételét, és csapatoknál be-és kilépést. O módulo de gestão de equipe é composto por: a atribuição de cores para os membros da equipe, comando das equipes, juntando-se / deixando equipes. Управление группами позволяет назначать цвета членам групп, брать командование, вступать в группы или покидать их. - \ No newline at end of file + diff --git a/addons/inventory/stringtable.xml b/addons/inventory/stringtable.xml index 8272594df5..04cac46b87 100644 --- a/addons/inventory/stringtable.xml +++ b/addons/inventory/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -26,4 +26,4 @@ Normalmente o tamanho da tela do inventário é ditada pelo tamanho da UI. Isso permite aumentar o tamanho da tela de inventário, mas não aumenta o tamanho da fonte, permitindo que mais linhas sejam visualizadas. - \ No newline at end of file + diff --git a/addons/javelin/stringtable.xml b/addons/javelin/stringtable.xml index e826263100..385abf586e 100644 --- a/addons/javelin/stringtable.xml +++ b/addons/javelin/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -26,4 +26,4 @@ Alterar Modo de Disparo - \ No newline at end of file + diff --git a/addons/laser/functions/fnc_drawVisibleLaserTargets.sqf b/addons/laser/functions/fnc_drawVisibleLaserTargets.sqf index 10d5f1e1b6..8cdb497267 100644 --- a/addons/laser/functions/fnc_drawVisibleLaserTargets.sqf +++ b/addons/laser/functions/fnc_drawVisibleLaserTargets.sqf @@ -1,9 +1,9 @@ // This is a debug function for displaying visible lasers for ourselves #include "script_component.hpp" -diag_log text format["[ACE]: Laser Emitter Dump"]; +ACE_LOGINFO("Laser Emitter Dump"); -{ - diag_log text format[" %1", _x]; - diag_log text format[" %2", HASH_GET(GVAR(laserEmitters), _x)]; -} forEach GVAR(laserEmitters) select 0; \ No newline at end of file +{ + ACE_LOGINFO_1(" %1", _x); + ACE_LOGINFO_1(" %1",HASH_GET(GVAR(laserEmitters),_x)); +} forEach GVAR(laserEmitters) select 0; diff --git a/addons/laserpointer/XEH_postInit.sqf b/addons/laserpointer/XEH_postInit.sqf index 6e9d402529..c478fe33fd 100644 --- a/addons/laserpointer/XEH_postInit.sqf +++ b/addons/laserpointer/XEH_postInit.sqf @@ -4,7 +4,7 @@ // fixes laser when being captured. Needed, because the selectionPosition of the right hand is used ["SetHandcuffed", {if (_this select 1) then {(_this select 0) action ["GunLightOff", _this select 0]};}] call EFUNC(common,addEventHandler); -if !(hasInterface) exitWith {}; +if (!hasInterface) exitWith {}; GVAR(nearUnits) = []; diff --git a/addons/laserpointer/functions/fnc_switchLaserLightMode.sqf b/addons/laserpointer/functions/fnc_switchLaserLightMode.sqf index 99549ec18f..3332631c49 100644 --- a/addons/laserpointer/functions/fnc_switchLaserLightMode.sqf +++ b/addons/laserpointer/functions/fnc_switchLaserLightMode.sqf @@ -84,6 +84,6 @@ switch (_currentWeaponType) do { if (!_error) then { [_description, _picture] call EFUNC(common,displayTextPicture); } else { - diag_log text format ["Failed to add %1 to %2 - reverting to %3", _nextPointer, _weapon, _pointer]; + ACE_LOGERROR_3("Failed to add %1 to %2 - reverting to %3",_nextPointer,_weapon,_pointer); }; playSound "ACE_Sound_Click"; diff --git a/addons/main/script_mod.hpp b/addons/main/script_mod.hpp index e38e71ac4b..e7b0479d24 100644 --- a/addons/main/script_mod.hpp +++ b/addons/main/script_mod.hpp @@ -4,9 +4,9 @@ #define PREFIX ace #define MAJOR 3 -#define MINOR 2 -#define PATCHLVL 2 -#define BUILD 0 +#define MINOR 3 +#define PATCHLVL 1 +#define BUILD 2 #define VERSION MAJOR.MINOR.PATCHLVL.BUILD #define VERSION_AR MAJOR,MINOR,PATCHLVL,BUILD diff --git a/addons/main/stringtable.xml b/addons/main/stringtable.xml index 610fd00195..94ee52b5af 100644 --- a/addons/main/stringtable.xml +++ b/addons/main/stringtable.xml @@ -4,7 +4,9 @@ ACE Logistics ACE Logistyka + Logísticas ACE ACE: логистика + ACE Logistika - \ No newline at end of file + diff --git a/addons/map/XEH_postInitClient.sqf b/addons/map/XEH_postInitClient.sqf index ef528d5233..02800c2540 100644 --- a/addons/map/XEH_postInitClient.sqf +++ b/addons/map/XEH_postInitClient.sqf @@ -98,4 +98,14 @@ call FUNC(determineZoom); }] call EFUNC(common,addEventHandler); }; }; -}] call EFUNC(common,addEventHandler); \ No newline at end of file +}] call EFUNC(common,addEventHandler); + +// hide clock on map if player has no watch +GVAR(hasWatch) = true; + +["playerInventoryChanged", { + if (isNull (_this select 0)) exitWith { + GVAR(hasWatch) = true; + }; + GVAR(hasWatch) = "ItemWatch" in (_this select 1 select 17); +}] call EFUNC(common,addEventHandler); diff --git a/addons/map/functions/fnc_blueForceTrackingModule.sqf b/addons/map/functions/fnc_blueForceTrackingModule.sqf index bab776c9ab..5de07bb457 100644 --- a/addons/map/functions/fnc_blueForceTrackingModule.sqf +++ b/addons/map/functions/fnc_blueForceTrackingModule.sqf @@ -12,7 +12,7 @@ #include "script_component.hpp" -if !(hasInterface) exitWith {}; +if (!hasInterface) exitWith {}; PARAMS_3(_logic,_units,_activated); @@ -22,5 +22,5 @@ if !(_activated) exitWith {}; [_logic, QGVAR(BFT_Interval), "Interval"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(BFT_HideAiGroups), "HideAiGroups"] call EFUNC(common,readSettingFromModule); -diag_log text "[ACE]: Blue Force Tracking Module initialized."; +ACE_LOGINFO("Blue Force Tracking Module Initialized."); TRACE_2("[ACE]: Blue Force Tracking Module initialized.", GVAR(BFT_Interval), GVAR(BFT_HideAiGroups)); diff --git a/addons/map/functions/fnc_moduleMap.sqf b/addons/map/functions/fnc_moduleMap.sqf index b763db7eea..b7db6996d6 100644 --- a/addons/map/functions/fnc_moduleMap.sqf +++ b/addons/map/functions/fnc_moduleMap.sqf @@ -23,4 +23,4 @@ if !(_activated) exitWith {}; [_logic, QGVAR(mapLimitZoom), "MapLimitZoom" ] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(mapShowCursorCoordinates), "MapShowCursorCoordinates"] call EFUNC(common,readSettingFromModule); -diag_log text "[ACE]: Map Module Initialized."; +ACE_LOGINFO("Map Module Initialized."); diff --git a/addons/map/functions/fnc_onDrawMap.sqf b/addons/map/functions/fnc_onDrawMap.sqf index bc147884e4..37ec5a7000 100644 --- a/addons/map/functions/fnc_onDrawMap.sqf +++ b/addons/map/functions/fnc_onDrawMap.sqf @@ -2,3 +2,6 @@ #include "script_component.hpp" ((_this select 0) displayCtrl 1016) ctrlShow GVAR(mapShowCursorCoordinates); + +// hide clock when no watch in inventory, or whatever never ever +((_this select 0) displayCtrl 101) ctrlShow GVAR(hasWatch); diff --git a/addons/map/stringtable.xml b/addons/map/stringtable.xml index 433c369ef5..4fb8c93a3a 100644 --- a/addons/map/stringtable.xml +++ b/addons/map/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -8,6 +8,7 @@ Karte Mapa Mapa + Carte Térkép Карта @@ -18,20 +19,28 @@ Kartenausleuchtung Osvětlení mapy Iluminação do mapa? + Luminosité Térkép megvilágítása? Освещение карты? Simulate map lighting based on ambient lighting and player's items? + Symuluj oświetlenie mapy bazujące na oświetleniu otoczenia oraz przedmiotach gracza? + Calcul la luminosité de la carte en fonction des conditions de lumière Симулировать освещение карты на основе окружающего света и приборов игрока? + Simular a luz do mapa baseado em luz ambiente e itens do jogador? Map flashlight glow? + Poświata latarki Свет фонаря на карте? + Brilho de lanterna no mapa? Add external glow to players who use flashlight on map? + Pokaż poświatę światła latarki na graczu, który używa latarki na widoku mapy? Добавить свет при использовании фонаря на карте? + Adicionar brilho externo para jogadores que usam lanterna no mapa? Map shake? @@ -40,6 +49,7 @@ Kamerawackeln Třesení mapy? Tremor de mapa? + Tremblement de la carte? Térkép-rázkódás? Тряска карты? @@ -50,6 +60,7 @@ Kamerawackeln beim Gehen? Umožnit třesení mapy za pochodu? Tremer o mapa enquanto caminha? + La carte tremble lors d'un déplacement? Rázkódjon-e a térkép mozgáskor? Заставлять карту трястись при ходьбе? @@ -60,6 +71,7 @@ Kartenzoom einschränken Omezit přiblížení mapy? Limitar zoom do mapa? + Limiter le zoom de la carte? Térkép-nagyítás korlátozása? Ограничить приближение карты? @@ -70,6 +82,7 @@ Zoomstufe der Karte einschränken? Omezit stupeň přiblížení pro mapu? Limitar a quantidade de zoom disponível para o mapa? + Limite le zoom maximum pour la carte? Korlátozva legyen-e a nagyítás mennyisége a térképnél? Ограничить максимальное приближение, доступное на карте? @@ -80,6 +93,7 @@ Zeige Cursor-Koordinaten? Zobrazit souřadnice u kurzoru? Mostrar coordenadas no cursor? + Afficher les coordonnées sur le curseur? Kurzor-koordináták mutatása? Показывать координаты курсора? @@ -90,6 +104,7 @@ Gitter-Koordinaten auf dem Mauszeiger anzeigen? Zobrazit souřadnice u kurzoru v mapě? Mostrar as coordenadas de grade no ponteiro do mouse? + Affiche les coordonnées à coté du curseur? Mutatva legyen-e a kurzornál található rész rácskoordinátája? Показывать координаты около курсора мыши? @@ -99,6 +114,7 @@ Dieses Modul erweitert die Kartenfunktionen. Tento modul umožňuje přizpůsobit mapu s obrazem. Este módulo permite que você personalize a tela de mapa. + Ce module permet de personnaliser l'écran de la carte Ez a modul lehetővé teszi a térképnézet testreszabását. Этот модуль позволяет настроить отображение карты. @@ -109,6 +125,7 @@ Blue Force Tracking Blue Force Tracking Rastreio de forças azuis + Blue Force Tracking Blue Force követés Система слежения Blue Force Tracking @@ -118,6 +135,7 @@ Aktywuj BFT Povolit BFT Activar BFT + Activer le Suivi des Forces Alliées BFT engedélyezése Включить BFT @@ -127,6 +145,7 @@ Aktywuj Blue Force Tracking. Domyślnie: Nie Povolit Blue Force Tracking. Výchozí: Ne Activar Blue Force Tracking. Por defecto: No + Activer le SFA. Défaut: non Blue Force követés engedélyezése. Alapértelmezett: Nem Включает систему служения BFT. По-умолчанию: Нет @@ -137,6 +156,7 @@ Intervall Interval Intervalo + Intervalle Intervallum Интервал @@ -147,6 +167,7 @@ Wie oft sollen die Markierungen aktualisiert werden (in Sekunden) Jak často budou značky aktualizovány (v sekundách) Frequência em que os marcadores devem ser atualizados (em segundos) + Tout les combien de temps les marqueurs doivent être rafraichit? Milyen gyakran frissüljenek a jelölők (másodpercben) Как часто должны обновляться маркеры (в секундах) @@ -157,6 +178,7 @@ KI-Gruppen verstecken? Skrýt AI skupiny? Esconder grupos de IA? + Cacher les groupes IA? AI csoportok elrejtése? Скрыть группы ботов? @@ -167,6 +189,7 @@ Verstecke Marker für "nur KI"-Gruppen? Skrýt značky pouze pro AI skupiny? Esconder marcadores que pertencem ao grupo de IA? + Cacher les marqueurs pour les groupes d'IA seulement? Jelölők elrejtése "csak AI" csoportoknál? Скрыть маркеры групп, которые состоят полностью из ботов? @@ -176,38 +199,51 @@ Dieses Modul ermöglicht es verbündete Einheiten mit dem BFT auf der Karte zu verfolgen. Umožňuje sledovat přátelské jednokty na mapě v rámci BFT. Permite que você acompanhe as posições no mapa das unidades aliadas com marcadores RFA. + Ce module permet de suivre les unités alliées avec des marqueurs sur la carte. Ez a modul lehetővé teszi a szövetséges egységek követését BFT térképjelzőjkkel. Этот модуль позволяет отслеживать перемещение союзных войск по карте при помощи маркеров BFT. Flashlights Latarki + Lanternas Фонари + Svítilny NVG Noktowizja + Óculos de Visão Noturna ПНВ + NVG On Włącz + Ligado Вкл. + Zapnout Off Wyłącz + Desligado Выкл. + Vypnout Increase Brightness Zwiększ czułość + Aumentar brilho Увеличить яркость + Zvýšit jas Decrease Brightness Zmniejsz czułość + Diminuir brilho Уменьшить яркость + Snížit jas - \ No newline at end of file + diff --git a/addons/maptools/functions/fnc_handleMouseZChanged.sqf b/addons/maptools/functions/fnc_handleMouseZChanged.sqf index 35626238e5..0af86a81c5 100644 --- a/addons/maptools/functions/fnc_handleMouseZChanged.sqf +++ b/addons/maptools/functions/fnc_handleMouseZChanged.sqf @@ -17,8 +17,6 @@ private ["_dir", "_params", "_control", "_button", "_screenPos", "_shiftKey", "_ _control = _this select 0; _dir = _this select 1; -diag_log "Scroll"; -diag_log _this; _handled = false; _handled = true; diff --git a/addons/maptools/functions/fnc_updateMapToolMarkers.sqf b/addons/maptools/functions/fnc_updateMapToolMarkers.sqf index 5c88d907b8..5d11c6a6e9 100644 --- a/addons/maptools/functions/fnc_updateMapToolMarkers.sqf +++ b/addons/maptools/functions/fnc_updateMapToolMarkers.sqf @@ -18,7 +18,7 @@ params ["_theMap"]; -private ["_rotatingTexture", "_textureWidth", "_scale", "_xPos", "_yPos"]; +private ["_rotatingTexture", "_textureWidth", "_scaleX", "_scaleY", "_xPos", "_yPos"]; // Show/Hide draw buttons if ([] call FUNC(canDraw)) then { @@ -43,16 +43,18 @@ if (GVAR(mapTool_Shown) == 1) then { }; // Update scale of both parts -_scale = _textureWidth * CONSTANT_SCALE * (call FUNC(calculateMapScale)); +getResolution params ["_resWidth", "_resHeight", "", "", "_aspectRatio"]; +_scaleX = 32 * _textureWidth * CONSTANT_SCALE * (call FUNC(calculateMapScale)); +_scaleY = _scaleX * ((_resWidth / _resHeight) / _aspectRatio); //handle bad aspect ratios // Position of the fixed part _xPos = GVAR(mapTool_pos) select 0; _yPos = (GVAR(mapTool_pos) select 1) + _textureWidth * CENTER_OFFSET_Y_PERC; -_theMap drawIcon [QUOTE(PATHTOF(data\mapToolFixed.paa)), [1,1,1,1], [_xPos,_yPos], (32 * _scale), (32 * _scale), 0, "", 0]; +_theMap drawIcon [QUOTE(PATHTOF(data\mapToolFixed.paa)), [1,1,1,1], [_xPos,_yPos], _scaleX, _scaleY, 0, "", 0]; // Position and rotation of the rotating part _xPos = (GVAR(mapTool_pos) select 0) + sin(GVAR(mapTool_angle)) * _textureWidth * CENTER_OFFSET_Y_PERC; _yPos = (GVAR(mapTool_pos) select 1) + cos(GVAR(mapTool_angle)) * _textureWidth * CENTER_OFFSET_Y_PERC; -_theMap drawIcon [_rotatingTexture, [1,1,1,1], [_xPos,_yPos], (32 * _scale), (32 * _scale), GVAR(mapTool_angle), "", 0]; +_theMap drawIcon [_rotatingTexture, [1,1,1,1], [_xPos,_yPos], _scaleX, _scaleY, GVAR(mapTool_angle), "", 0]; diff --git a/addons/medical/ACE_Medical_Treatments.hpp b/addons/medical/ACE_Medical_Treatments.hpp index 96f5493aec..ea9e03974a 100644 --- a/addons/medical/ACE_Medical_Treatments.hpp +++ b/addons/medical/ACE_Medical_Treatments.hpp @@ -7,6 +7,7 @@ class ACE_Medical_Actions { category = "bandage"; treatmentLocations[] = {"All"}; allowedSelections[] = {"All"}; + allowSelfTreatment = 1; requiredMedic = 0; treatmentTime = 5; treatmentTimeSelfCoef = 1; @@ -32,6 +33,7 @@ class ACE_Medical_Actions { displayName = CSTRING(Inject_Morphine); displayNameProgress = CSTRING(Injecting_Morphine); allowedSelections[] = {"hand_l", "hand_r", "leg_l", "leg_r"}; + allowSelfTreatment = 1; category = "medication"; treatmentTime = 2; items[] = {"ACE_morphine"}; @@ -43,6 +45,7 @@ class ACE_Medical_Actions { displayName = CSTRING(Inject_Epinephrine); displayNameProgress = CSTRING(Injecting_Epinephrine); allowedSelections[] = {"hand_l", "hand_r", "leg_l", "leg_r"}; + allowSelfTreatment = 1; category = "medication"; requiredMedic = 1; treatmentTime = 3; @@ -55,6 +58,7 @@ class ACE_Medical_Actions { displayName = CSTRING(Transfuse_Blood); displayNameProgress = CSTRING(Transfusing_Blood); allowedSelections[] = {"hand_l", "hand_r", "leg_l", "leg_r"}; + allowSelfTreatment = 0; category = "advanced"; requiredMedic = 1; treatmentTime = 20; @@ -93,7 +97,7 @@ class ACE_Medical_Actions { displayNameProgress = CSTRING(Actions_Diagnosing); category = "examine"; treatmentLocations[] = {"All"}; - allowedSelections[] = {"head"}; + allowedSelections[] = {"head", "body"}; requiredMedic = 0; treatmentTime = 1; items[] = {}; @@ -105,6 +109,29 @@ class ACE_Medical_Actions { itemConsumed = 0; litter[] = {}; }; + class CPR: Bandage { + displayName = CSTRING(Actions_CPR); + displayNameProgress = CSTRING(Actions_PerformingCPR); + category = "advanced"; + treatmentLocations[] = {"All"}; + allowedSelections[] = {"body"}; + allowSelfTreatment = 0; + requiredMedic = 0; + treatmentTime = 15; + items[] = {}; + condition = QUOTE(!([(_this select 1)] call ace_common_fnc_isAwake) && GVAR(enableRevive)>0); + callbackSuccess = QUOTE(DFUNC(treatmentAdvanced_CPR)); + callbackFailure = ""; + callbackProgress = "!([((_this select 0) select 1)] call ace_common_fnc_isAwake)"; + animationPatient = ""; + animationPatientUnconscious = "AinjPpneMstpSnonWrflDnon_rolltoback"; + animationCaller = "AinvPknlMstpSlayWnonDnon_medic"; + animationCallerProne = "AinvPpneMstpSlayW[wpn]Dnon_medic"; + animationCallerSelf = ""; + animationCallerSelfProne = ""; + itemConsumed = 0; + litter[] = {}; + }; }; class Advanced { @@ -115,6 +142,7 @@ class ACE_Medical_Actions { // Which locations can this treatment action be used? Available: Field, MedicalFacility, MedicalVehicle, All. treatmentLocations[] = {"All"}; allowedSelections[] = {"All"}; + allowSelfTreatment = 1; // What is the level of medical skill required for this treatment action? 0 = all soldiers, 1 = medic, 2 = doctor requiredMedic = 0; // The time it takes for a treatment action to complete. Time is in seconds. @@ -188,6 +216,7 @@ class ACE_Medical_Actions { displayName = CSTRING(Actions_Blood4_1000); displayNameProgress = CSTRING(Transfusing_Blood); allowedSelections[] = {"hand_l", "hand_r", "leg_l", "leg_r"}; + allowSelfTreatment = 0; category = "advanced"; items[] = {"ACE_bloodIV"}; requiredMedic = 1; @@ -238,6 +267,7 @@ class ACE_Medical_Actions { category = "advanced"; items[] = {"ACE_surgicalKit"}; treatmentLocations[] = {QGVAR(useLocation_SurgicalKit)}; + allowSelfTreatment = 0; requiredMedic = QGVAR(medicSetting_SurgicalKit); patientStateCondition = QGVAR(useCondition_SurgicalKit); treatmentTime = "(count ((_this select 1) getVariable ['ACE_Medical_bandagedWounds', []]) * 5)"; @@ -253,6 +283,7 @@ class ACE_Medical_Actions { category = "advanced"; items[] = {"ACE_personalAidKit"}; treatmentLocations[] = {QGVAR(useLocation_PAK)}; + allowSelfTreatment = 0; requiredMedic = QGVAR(medicSetting_PAK); patientStateCondition = QGVAR(useCondition_PAK); treatmentTime = QUOTE((_this select 1) call FUNC(treatmentAdvanced_fullHealTreatmentTime)); @@ -297,6 +328,7 @@ class ACE_Medical_Actions { displayName = CSTRING(Check_Response); callbackSuccess = QUOTE(DFUNC(actionCheckResponse)); displayNameProgress = CSTRING(Check_Response_Content); + allowSelfTreatment = 0; }; class RemoveTourniquet: Tourniquet { displayName = CSTRING(Actions_RemoveTourniquet); @@ -313,6 +345,7 @@ class ACE_Medical_Actions { category = "advanced"; treatmentLocations[] = {"All"}; allowedSelections[] = {"body"}; + allowSelfTreatment = 0; requiredMedic = 0; treatmentTime = 15; items[] = {}; @@ -334,6 +367,7 @@ class ACE_Medical_Actions { displayNameProgress = CSTRING(PlacingInBodyBag); category = "advanced"; treatmentLocations[] = {"All"}; + allowSelfTreatment = 0; requiredMedic = 0; treatmentTime = 15; items[] = {"ACE_bodyBag"}; @@ -605,6 +639,7 @@ class ACE_Medical_Advanced { class vehiclecrash { thresholds[] = {{0.25, 5}}; selectionSpecific = 0; + lethalDamage = 0.2; }; class backblast { thresholds[] = {{0, 2},{0.55, 5}, {1, 6}}; @@ -622,6 +657,7 @@ class ACE_Medical_Advanced { class falling { thresholds[] = {{0.1, 1}}; selectionSpecific = 1; + lethalDamage = 0.4; }; class ropeburn { thresholds[] = {{0.1, 1}}; diff --git a/addons/medical/ACE_Settings.hpp b/addons/medical/ACE_Settings.hpp index 910f152292..b17610b0e3 100644 --- a/addons/medical/ACE_Settings.hpp +++ b/addons/medical/ACE_Settings.hpp @@ -220,7 +220,7 @@ class ACE_Settings { description = CSTRING(menuTypeDescription); typeName = "SCALAR"; value = 0; - values[] = {CSTRING(useSelection)/*, CSTRING(useRadial)*/}; - // isClientSettable = 1; + values[] = {CSTRING(useSelection), CSTRING(useRadial), "Disabled"}; + isClientSettable = 1; }; }; diff --git a/addons/medical/CfgVehicles.hpp b/addons/medical/CfgVehicles.hpp index 350f83b3f7..4e73e77ee1 100644 --- a/addons/medical/CfgVehicles.hpp +++ b/addons/medical/CfgVehicles.hpp @@ -2,12 +2,12 @@ #define MEDICAL_ACTION_DISTANCE 1.75 class CfgVehicles { - class Logic; class Module_F: Logic { class ArgumentsBaseUnits { }; }; + class ACE_Module; class ACE_moduleMedicalSettings: ACE_Module { scope = 2; @@ -19,6 +19,7 @@ class CfgVehicles { isGlobal = 1; isTriggerActivated = 0; author = ECSTRING(common,ACETeam); + class Arguments { class level { displayName = CSTRING(MedicalSettings_level_DisplayName); @@ -137,6 +138,7 @@ class CfgVehicles { defaultValue = 1; }; }; + class ModuleDescription { description = CSTRING(MedicalSettings_Module_Description); sync[] = {}; @@ -154,6 +156,7 @@ class CfgVehicles { isTriggerActivated = 0; isDisposable = 0; author = ECSTRING(common,ACETeam); + class Arguments { class enableFor { displayName = CSTRING(AdvancedMedicalSettings_enableFor_DisplayName); @@ -256,13 +259,13 @@ class CfgVehicles { defaultValue = 1; }; }; + class ModuleDescription { description = CSTRING(AdvancedMedicalSettings_Module_Description); sync[] = {}; }; }; - class ACE_moduleReviveSettings: ACE_Module { scope = 2; displayName = CSTRING(ReviveSettings_Module_DisplayName); @@ -273,6 +276,7 @@ class CfgVehicles { isGlobal = 1; isTriggerActivated = 0; author = ECSTRING(common,ACETeam); + class Arguments { class enableRevive { displayName = CSTRING(ReviveSettings_enableRevive_DisplayName); @@ -298,11 +302,13 @@ class CfgVehicles { defaultValue = -1; }; }; + class ModuleDescription { description = CSTRING(ReviveSettings_Module_Description); sync[] = {}; }; }; + class ACE_moduleAssignMedicRoles: Module_F { scope = 2; displayName = CSTRING(AssignMedicRoles_Module_DisplayName); @@ -314,6 +320,7 @@ class CfgVehicles { isTriggerActivated = 0; isDisposable = 0; author = ECSTRING(common,ACETeam); + class Arguments { class EnableList { displayName = CSTRING(AssignMedicRoles_EnableList_DisplayName); @@ -342,6 +349,7 @@ class CfgVehicles { }; }; }; + class ModuleDescription { description = CSTRING(AssignMedicRoles_Module_Description); sync[] = {}; @@ -359,6 +367,7 @@ class CfgVehicles { isTriggerActivated = 0; isDisposable = 0; author = ECSTRING(common,ACETeam); + class Arguments { class EnableList { displayName = CSTRING(AssignMedicVehicle_EnableList_DisplayName); @@ -384,11 +393,13 @@ class CfgVehicles { }; }; }; + class ModuleDescription { description = CSTRING(AssignMedicVehicle_Module_Description); sync[] = {}; }; }; + class ACE_moduleAssignMedicalFacility: Module_F { scope = 2; displayName = CSTRING(AssignMedicalFacility_Module_DisplayName); @@ -400,6 +411,7 @@ class CfgVehicles { isTriggerActivated = 0; isDisposable = 0; author = ECSTRING(common,ACETeam); + class Arguments { class enabled { displayName = CSTRING(AssignMedicalFacility_enabled_DisplayName); @@ -407,70 +419,52 @@ class CfgVehicles { typeName = "BOOL"; }; }; + class ModuleDescription { description = CSTRING(AssignMedicalFacility_Module_Description); sync[] = {}; }; }; - #define ARM_LEG_ARMOR_DEFAULT 2 - #define ARM_LEG_ARMOR_BETTER 3 + #define ARM_LEG_ARMOR_DEFAULT 3 + #define ARM_LEG_ARMOR_BETTER 5 #define ARM_LEG_ARMOR_CSAT 4 - class Man; - class CAManBase: Man { - class HitPoints { - class HitHead; - class HitBody; - // "DEACTIVE" DEFAULT HITPOINTS - class HitHands { - armor = 999; //armor = 2; - explosionShielding = 0; //explosionShielding = 1; - material = -1; - minimalHit = 0; - name = ""; - passThrough = 1; - radius = 0; //radius = 0.06; - visual = "injury_hands"; - }; - class HitLegs { - armor = 999; //armor = 2; - explosionShielding = 0; //explosionShielding = 1; - material = -1; - minimalHit = 0; - name = ""; - passThrough = 1; - radius = 0; //radius = 0.08; - visual = "injury_legs"; - }; + class Land; + class Man: Land { + class HitPoints; + }; + class CAManBase: Man { + class HitPoints: HitPoints { // custom hitpoints. addons might want to adjust these accordingly class HitLeftArm { - armor = ARM_LEG_ARMOR_DEFAULT; //2; - explosionShielding = 1; + armor = ARM_LEG_ARMOR_DEFAULT; material = -1; - minimalHit = 0; - name = "hand_l"; - passThrough = 1; - radius = 0.06; - visual = "injury_hands"; - }; - class HitRightArm: HitLeftArm { - name = "hand_r"; - }; - class HitLeftLeg { - armor = ARM_LEG_ARMOR_DEFAULT; //2; - explosionShielding = 1; - material = -1; - minimalHit = 0; - name = "leg_l"; + name = "hand_l"; // @todo hopefully these still include the whole arm + hands passThrough = 1; radius = 0.08; + explosionShielding = 1; + visual = "injury_hands"; + minimalHit = 0.01; + }; + class HitRightArm: HitLeftArm { + name = "hand_r"; // @todo hopefully these still include the whole arm + hands + }; + class HitLeftLeg { + armor = ARM_LEG_ARMOR_DEFAULT; + material = -1; + name = "leg_l"; + passThrough = 1; + radius = 0.1; + explosionShielding = 1; visual = "injury_legs"; + minimalHit = 0.01; }; class HitRightLeg: HitLeftLeg { name = "leg_r"; }; }; + class ACE_SelfActions { #include "ACE_Medical_SelfActions.hpp" }; @@ -529,23 +523,19 @@ class CfgVehicles { class B_Soldier_04_f: B_Soldier_base_F { class HitPoints: HitPoints { - class HitHead: HitHead {}; - class HitBody: HitBody {}; - class HitHands: HitHands {}; - class HitLegs: HitLegs {}; - + class HitHead; + class HitBody; + class HitHands; + class HitLegs; class HitLeftArm: HitLeftArm { armor = ARM_LEG_ARMOR_BETTER; }; - class HitRightArm: HitRightArm { armor = ARM_LEG_ARMOR_BETTER; }; - class HitLeftLeg: HitLeftLeg { armor = ARM_LEG_ARMOR_BETTER; }; - class HitRightLeg: HitRightLeg { armor = ARM_LEG_ARMOR_BETTER; }; @@ -554,23 +544,19 @@ class CfgVehicles { class B_Soldier_05_f: B_Soldier_base_F { class HitPoints: HitPoints { - class HitHead: HitHead {}; - class HitBody: HitBody {}; - class HitHands: HitHands {}; - class HitLegs: HitLegs {}; - + class HitHead; + class HitBody; + class HitHands; + class HitLegs; class HitLeftArm: HitLeftArm { armor = ARM_LEG_ARMOR_BETTER; }; - class HitRightArm: HitRightArm { armor = ARM_LEG_ARMOR_BETTER; }; - class HitLeftLeg: HitLeftLeg { armor = ARM_LEG_ARMOR_BETTER; }; - class HitRightLeg: HitRightLeg { armor = ARM_LEG_ARMOR_BETTER; }; @@ -581,23 +567,19 @@ class CfgVehicles { class I_Soldier_03_F: I_Soldier_base_F { class HitPoints: HitPoints { - class HitHead: HitHead {}; - class HitBody: HitBody {}; - class HitHands: HitHands {}; - class HitLegs: HitLegs {}; - + class HitHead; + class HitBody; + class HitHands; + class HitLegs; class HitLeftArm: HitLeftArm { armor = ARM_LEG_ARMOR_BETTER; }; - class HitRightArm: HitRightArm { armor = ARM_LEG_ARMOR_BETTER; }; - class HitLeftLeg: HitLeftLeg { armor = ARM_LEG_ARMOR_BETTER; }; - class HitRightLeg: HitRightLeg { armor = ARM_LEG_ARMOR_BETTER; }; @@ -606,23 +588,19 @@ class CfgVehicles { class I_Soldier_04_F: I_Soldier_base_F { class HitPoints: HitPoints { - class HitHead: HitHead {}; - class HitBody: HitBody {}; - class HitHands: HitHands {}; - class HitLegs: HitLegs {}; - + class HitHead; + class HitBody; + class HitHands; + class HitLegs; class HitLeftArm: HitLeftArm { armor = ARM_LEG_ARMOR_BETTER; }; - class HitRightArm: HitRightArm { armor = ARM_LEG_ARMOR_BETTER; }; - class HitLeftLeg: HitLeftLeg { armor = ARM_LEG_ARMOR_BETTER; }; - class HitRightLeg: HitRightLeg { armor = ARM_LEG_ARMOR_BETTER; }; @@ -631,61 +609,88 @@ class CfgVehicles { class O_Soldier_base_F: SoldierEB { class HitPoints: HitPoints { - class HitHead: HitHead {}; - class HitBody: HitBody {}; - class HitHands: HitHands {}; - class HitLegs: HitLegs {}; - + class HitHead; + class HitBody; + class HitHands; + class HitLegs; class HitLeftArm: HitLeftArm { armor = ARM_LEG_ARMOR_CSAT; - passThrough = 0.85; }; - class HitRightArm: HitRightArm { armor = ARM_LEG_ARMOR_CSAT; - passThrough = 0.85; }; - class HitLeftLeg: HitLeftLeg { armor = ARM_LEG_ARMOR_CSAT; - passThrough = 0.85; }; - class HitRightLeg: HitRightLeg { armor = ARM_LEG_ARMOR_CSAT; - passThrough = 0.85; }; }; }; class O_Soldier_02_F: O_Soldier_base_F { class HitPoints: HitPoints { - class HitHead: HitHead {}; - class HitBody: HitBody {}; - class HitHands: HitHands {}; - class HitLegs: HitLegs {}; - + class HitHead; + class HitBody; + class HitHands; + class HitLegs; class HitLeftArm: HitLeftArm { armor = ARM_LEG_ARMOR_CSAT; - passThrough = 0.85; }; - class HitRightArm: HitRightArm { armor = ARM_LEG_ARMOR_CSAT; - passThrough = 0.85; }; - class HitLeftLeg: HitLeftLeg { armor = ARM_LEG_ARMOR_CSAT; - passThrough = 0.85; }; - class HitRightLeg: HitRightLeg { armor = ARM_LEG_ARMOR_CSAT; - passThrough = 0.85; }; }; }; + + class O_officer_F: O_Soldier_base_F { + class HitPoints: HitPoints { + class HitHead; + class HitBody; + class HitHands; + class HitLegs; + class HitLeftArm: HitLeftArm { + armor = ARM_LEG_ARMOR_CSAT; // @todo is that suppossed to be the case? + }; + class HitRightArm: HitRightArm { + armor = ARM_LEG_ARMOR_CSAT; + }; + class HitLeftLeg: HitLeftLeg { + armor = ARM_LEG_ARMOR_CSAT; + }; + class HitRightLeg: HitRightLeg { + armor = ARM_LEG_ARMOR_CSAT; + }; + }; + }; + + class O_Protagonist_VR_F: O_Soldier_base_F { + class HitPoints: HitPoints { + class HitHead; + class HitBody; + class HitHands; + class HitLegs; + class HitLeftArm: HitLeftArm { + armor = 2; + }; + class HitRightArm: HitRightArm { + armor = 2; + }; + class HitLeftLeg: HitLeftLeg { + armor = 2; + }; + class HitRightLeg: HitRightLeg { + armor = 2; + }; + }; + }; + class MapBoard_altis_F; class ACE_bodyBagObject: MapBoard_altis_F { XEH_ENABLED; diff --git a/addons/medical/XEH_init.sqf b/addons/medical/XEH_init.sqf index 0ded7d471f..acdd50ce82 100644 --- a/addons/medical/XEH_init.sqf +++ b/addons/medical/XEH_init.sqf @@ -1,10 +1,12 @@ #include "script_component.hpp" -private ["_unit"]; -_unit = _this select 0; +params ["_unit"]; _unit addEventHandler ["HandleDamage", {_this call FUNC(handleDamage)}]; if (local _unit) then { - [_unit] call FUNC(init); + if (!EGVAR(common,settingsInitFinished)) exitWith { + EGVAR(common,runAtSettingsInitialized) pushBack [FUNC(init), [_unit]]; + }; + [_unit] call FUNC(init); }; diff --git a/addons/medical/XEH_postInit.sqf b/addons/medical/XEH_postInit.sqf index f9f821eeb3..064f78682f 100644 --- a/addons/medical/XEH_postInit.sqf +++ b/addons/medical/XEH_postInit.sqf @@ -11,10 +11,9 @@ GVAR(heartBeatSounds_Slow) = ["ACE_heartbeat_slow_1", "ACE_heartbeat_slow_2"]; ["interactMenuClosed", {[objNull, false] call FUNC(displayPatientInformation); }] call EFUNC(common,addEventHandler); ["medical_onUnconscious", { - if (local (_this select 0)) then { - private ["_unit"]; - _unit = _this select 0; - if (_this select 1) then { + params ["_unit", "_status"]; + if (local _unit) then { + if (_status) then { _unit setVariable ["tf_globalVolume", 0.4]; _unit setVariable ["tf_voiceVolume", 0, true]; _unit setVariable ["tf_unable_to_use_radio", true, true]; @@ -34,11 +33,11 @@ GVAR(heartBeatSounds_Slow) = ["ACE_heartbeat_slow_1", "ACE_heartbeat_slow_2"]; // Initialize all effects +if (hasInterface) then { + _fnc_createEffect = { - private ["_type", "_layer", "_default", "_effect"]; - _type = _this select 0; - _layer = _this select 1; - _default = _this select 2; + private "_effect"; + params ["_type", "_layer", "_default"]; _effect = ppEffectCreate [_type, _layer]; _effect ppEffectForceInNVG true; @@ -162,7 +161,7 @@ GVAR(lastHeartBeatSound) = ACE_time; _heartRate = 60 + 40 * _pain; }; if (_heartRate <= 0) exitwith {}; - _interval = 60 / (_heartRate min 50); + _interval = 60 / (_heartRate min 40); if ((ACE_player getVariable ["ACE_isUnconscious", false])) then { if (GVAR(painEffectType) == 1) then { @@ -176,7 +175,7 @@ GVAR(lastHeartBeatSound) = ACE_time; // Pain effect, no pain effect in zeus camera if (isNull curatorCamera) then { - _strength = (_pain - (ACE_player getvariable [QGVAR(painSuppress), 0])) max 0; + _strength = ((_pain - (ACE_player getvariable [QGVAR(painSuppress), 0])) max 0) min 1; _strength = _strength * (ACE_player getVariable [QGVAR(painCoefficient), GVAR(painCoefficient)]); if (GVAR(painEffectType) == 1) then { GVAR(effectPainCC) ppEffectEnable false; @@ -244,31 +243,29 @@ GVAR(lastHeartBeatSound) = ACE_time; }; }, 0, []] call CBA_fnc_addPerFrameHandler; - -if (USE_WOUND_EVENT_SYNC) then { - // broadcast injuries to JIP clients in a MP session - if (isMultiplayer && hasInterface) then { - ["playerChanged", { - EXPLODE_2_PVT(_this,_newPlayer,_oldPlayer); - if (alive _newPlayer) then { - // We are only pulling the wounds for the units in the player group. Anything else will come when the unit interacts with them. - { - [_x, _newPlayer] call FUNC(requestWoundSync); - }foreach units group _newPlayer; - }; - }] call EFUNC(common,addEventhandler); - }; }; -[ - {(((_this select 0) getvariable [QGVAR(bloodVolume), 100]) < 65)}, - {(((_this select 0) getvariable [QGVAR(pain), 0]) - ((_this select 0) getvariable [QGVAR(painSuppress), 0])) > 0.9}, - {(([_this select 0] call FUNC(getBloodLoss)) > 0.25)}, - {((_this select 0) getvariable [QGVAR(inReviveState), false])}, - {((_this select 0) getvariable [QGVAR(inCardiacArrest), false])}, - {((_this select 0) getvariable ["ACE_isDead", false])}, - {(((_this select 0) getvariable [QGVAR(airwayStatus), 100]) < 80)} -] call FUNC(addUnconsciousCondition); +["SettingsInitialized", { + if (GVAR(level) == 2) exitwith { + [ + {(((_this select 0) getvariable [QGVAR(bloodVolume), 100]) < 65)}, + {(((_this select 0) getvariable [QGVAR(pain), 0]) - ((_this select 0) getvariable [QGVAR(painSuppress), 0])) > 0.9}, + {(([_this select 0] call FUNC(getBloodLoss)) > 0.25)}, + {((_this select 0) getvariable [QGVAR(inReviveState), false])}, + {((_this select 0) getvariable [QGVAR(inCardiacArrest), false])}, + {((_this select 0) getvariable ["ACE_isDead", false])}, + {(((_this select 0) getvariable [QGVAR(airwayStatus), 100]) < 80)} + ] call FUNC(addUnconsciousCondition); + }; + + [ + {(((_this select 0) getvariable [QGVAR(bloodVolume), 100]) < 40)}, + {(((_this select 0) getvariable [QGVAR(pain), 0]) - ((_this select 0) getvariable [QGVAR(painSuppress), 0])) > 0.6}, + {(([_this select 0] call FUNC(getBloodLoss)) > 0.1)}, + {((_this select 0) getvariable [QGVAR(inReviveState), false])}, + {((_this select 0) getvariable ["ACE_isDead", false])} + ] call FUNC(addUnconsciousCondition); +}] call EFUNC(common,addEventHandler); // Prevent all types of interaction while unconscious // @todo: probably remove this when CBA keybind hold key works properly @@ -284,7 +281,7 @@ if (USE_WOUND_EVENT_SYNC) then { if (hasInterface) then { ["PlayerJip", { - diag_log format["[ACE] JIP Medical init for player"]; + ACE_LOGINFO("JIP Medical init for player."); [player] call FUNC(init); }] call EFUNC(common,addEventHandler); }; diff --git a/addons/medical/XEH_preInit.sqf b/addons/medical/XEH_preInit.sqf index b479383468..2625bf4b8a 100644 --- a/addons/medical/XEH_preInit.sqf +++ b/addons/medical/XEH_preInit.sqf @@ -68,6 +68,7 @@ PREP(selectionNameToNumber); PREP(setCardiacArrest); PREP(setDead); PREP(setHitPointDamage); +PREP(setStructuralDamage); PREP(setUnconscious); PREP(treatment); PREP(treatment_failure); @@ -83,6 +84,7 @@ PREP(treatmentAdvanced_medication); PREP(treatmentAdvanced_medicationLocal); PREP(treatmentAdvanced_surgicalKit_onProgress); PREP(treatmentBasic_bandage); +PREP(treatmentBasic_bandageLocal); PREP(treatmentBasic_bloodbag); PREP(treatmentBasic_bloodbagLocal); PREP(treatmentBasic_epipen); diff --git a/addons/medical/XEH_respawn.sqf b/addons/medical/XEH_respawn.sqf index 44060fa15c..b5b07bf141 100644 --- a/addons/medical/XEH_respawn.sqf +++ b/addons/medical/XEH_respawn.sqf @@ -1,11 +1,8 @@ #include "script_component.hpp" -private ["_unit"]; - -_unit = _this select 0; - -if !(local _unit) exitWith {}; +params ["_unit"]; +// reset all variables. @todo GROUP respawn? [_unit] call FUNC(init); // Reset captive status for respawning unit diff --git a/addons/medical/data/bandage.p3d b/addons/medical/data/bandage.p3d index 28c727e842..23540f10d9 100644 Binary files a/addons/medical/data/bandage.p3d and b/addons/medical/data/bandage.p3d differ diff --git a/addons/medical/functions/fnc_actionCheckBloodPressure.sqf b/addons/medical/functions/fnc_actionCheckBloodPressure.sqf index 646e472f70..889cc90de9 100644 --- a/addons/medical/functions/fnc_actionCheckBloodPressure.sqf +++ b/addons/medical/functions/fnc_actionCheckBloodPressure.sqf @@ -7,15 +7,12 @@ * 1: The patient * * Return Value: -* NONE +* None * * Public: No */ #include "script_component.hpp" -private ["_caller","_target","_selectionName"]; -_caller = _this select 0; -_target = _this select 1; -_selectionName = _this select 2; +params ["_caller", "_target", "_selectionName"]; [[_caller, _target, _selectionName], QUOTE(DFUNC(actionCheckBloodPressureLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ diff --git a/addons/medical/functions/fnc_actionCheckBloodPressureLocal.sqf b/addons/medical/functions/fnc_actionCheckBloodPressureLocal.sqf index 92120a280c..24b5bf4c6e 100644 --- a/addons/medical/functions/fnc_actionCheckBloodPressureLocal.sqf +++ b/addons/medical/functions/fnc_actionCheckBloodPressureLocal.sqf @@ -7,25 +7,22 @@ * 1: The patient * * Return Value: - * NONE + * None * * Public: No */ #include "script_component.hpp" -private ["_caller","_target","_selectionName","_bloodPressure","_bloodPressureHigh","_bloodPressureLow", "_logOutPut", "_output"]; -_caller = _this select 0; -_target = _this select 1; -_selectionName = _this select 2; +private ["_bloodPressure", "_logOutPut", "_output"]; +params ["_caller", "_target", "_selectionName"]; -_bloodPressure = [_target] call FUNC(getBloodPressure); -if (!alive _target) then { - _bloodPressure = [0,0]; +_bloodPressure = if (!alive _target) then { + [0,0] +} else { + [_target] call FUNC(getBloodPressure) }; - -_bloodPressureHigh = _bloodPressure select 1; -_bloodPressureLow = _bloodPressure select 0; +_bloodPressure params [ "_bloodPressureLow", "_bloodPressureHigh"]; _output = ""; _logOutPut = ""; if ([_caller] call FUNC(isMedic)) then { diff --git a/addons/medical/functions/fnc_actionCheckPulse.sqf b/addons/medical/functions/fnc_actionCheckPulse.sqf index f615c69983..8c2c6cf109 100644 --- a/addons/medical/functions/fnc_actionCheckPulse.sqf +++ b/addons/medical/functions/fnc_actionCheckPulse.sqf @@ -7,15 +7,13 @@ * 1: The patient * * Return Value: -* NONE +* None * * Public: No */ #include "script_component.hpp" -private ["_caller","_target","_selectionName"]; -_caller = _this select 0; -_target = _this select 1; -_selectionName = _this select 2; +params ["_caller","_target", "_selectionName"]; [[_caller, _target, _selectionName], QUOTE(DFUNC(actionCheckPulseLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ + diff --git a/addons/medical/functions/fnc_actionCheckPulseLocal.sqf b/addons/medical/functions/fnc_actionCheckPulseLocal.sqf index f719aad2d8..94f3e6ad34 100644 --- a/addons/medical/functions/fnc_actionCheckPulseLocal.sqf +++ b/addons/medical/functions/fnc_actionCheckPulseLocal.sqf @@ -7,17 +7,15 @@ * 1: The patient * * Return Value: - * NONE + * None * * Public: No */ #include "script_component.hpp" -private ["_caller", "_unit", "_selectionName", "_heartRateOutput", "_heartRate", "_logOutPut"]; -_caller = _this select 0; -_unit = _this select 1; -_selectionName = _this select 2; +private ["_heartRateOutput", "_heartRate", "_logOutPut"]; +params ["_caller", "_unit", "_selectionName"]; _heartRate = _unit getvariable [QGVAR(heartRate), 80]; if (!alive _unit) then { diff --git a/addons/medical/functions/fnc_actionCheckResponse.sqf b/addons/medical/functions/fnc_actionCheckResponse.sqf index b5df63047e..6910545a9d 100644 --- a/addons/medical/functions/fnc_actionCheckResponse.sqf +++ b/addons/medical/functions/fnc_actionCheckResponse.sqf @@ -7,23 +7,17 @@ * 1: The patient * * Return Value: - * NONE + * None * * Public: No */ #include "script_component.hpp" -private ["_caller","_target", "_output"]; -_caller = _this select 0; -_target = _this select 1; +private ["_output"]; +params ["_caller", "_target"]; -_output = ""; -if ([_target] call EFUNC(common,isAwake)) then { - _output = LSTRING(Check_Response_Responsive); -} else { - _output = LSTRING(Check_Response_Unresponsive); -}; +_output = [LSTRING(Check_Response_Unresponsive), LSTRING(Check_Response_Responsive)] select ([_target] call EFUNC(common,isAwake)); ["displayTextStructured", [_caller], [[_output, [_target] call EFUNC(common,getName)], 2, _caller]] call EFUNC(common,targetEvent); diff --git a/addons/medical/functions/fnc_actionDiagnose.sqf b/addons/medical/functions/fnc_actionDiagnose.sqf index 243edbdef8..5cc0d307da 100644 --- a/addons/medical/functions/fnc_actionDiagnose.sqf +++ b/addons/medical/functions/fnc_actionDiagnose.sqf @@ -7,16 +7,15 @@ * 1: The patient * * Return Value: -* NONE +* None * * Public: No */ #include "script_component.hpp" -private ["_caller", "_target", "_genericMessages"]; -_caller = _this select 0; -_target = _this select 1; +private "_genericMessages"; +params ["_caller", "_target"]; _genericMessages = [LSTRING(diagnoseMessage)]; diff --git a/addons/medical/functions/fnc_actionLoadUnit.sqf b/addons/medical/functions/fnc_actionLoadUnit.sqf index 03d9a3ef54..42a94997d8 100644 --- a/addons/medical/functions/fnc_actionLoadUnit.sqf +++ b/addons/medical/functions/fnc_actionLoadUnit.sqf @@ -7,20 +7,18 @@ * 1: The patient * * Return Value: - * NONE + * None * * Public: No */ #include "script_component.hpp" -private ["_caller", "_target","_vehicle"]; -_caller = _this select 0; -_target = _this select 1; +private "_vehicle"; +params ["_caller", "_target"]; if ([_target] call EFUNC(common,isAwake)) exitwith { - // TODO localization - ["displayTextStructured", [_caller], [["This person (%1) is awake and cannot be loaded", [_target] call EFUNC(common,getName)], 1.5, _caller]] call EFUNC(common,targetEvent); + ["displayTextStructured", [_caller], [[LSTRING(CanNotLoaded), [_target] call EFUNC(common,getName)], 1.5, _caller]] call EFUNC(common,targetEvent); }; if ([_target] call FUNC(isBeingCarried)) then { [_caller, _target] call EFUNC(dragging,dropObject_carry); diff --git a/addons/medical/functions/fnc_actionPlaceInBodyBag.sqf b/addons/medical/functions/fnc_actionPlaceInBodyBag.sqf index 73f9eeca4d..f416535701 100644 --- a/addons/medical/functions/fnc_actionPlaceInBodyBag.sqf +++ b/addons/medical/functions/fnc_actionPlaceInBodyBag.sqf @@ -14,9 +14,8 @@ #include "script_component.hpp" -PARAMS_2(_caller,_target); - private ["_position", "_headPos", "_spinePos", "_dirVect", "_direction", "_bodyBag"]; +params ["_caller", "_target"]; if (alive _target) then { [_target, true] call FUNC(setDead); diff --git a/addons/medical/functions/fnc_actionRemoveTourniquet.sqf b/addons/medical/functions/fnc_actionRemoveTourniquet.sqf index a14dbc3bcd..b920f276f0 100644 --- a/addons/medical/functions/fnc_actionRemoveTourniquet.sqf +++ b/addons/medical/functions/fnc_actionRemoveTourniquet.sqf @@ -8,17 +8,15 @@ * 2: SelectionName * * Return Value: - * NONE + * None * * Public: Yes */ #include "script_component.hpp" -private ["_caller", "_target", "_part", "_selectionName", "_tourniquets", "_output"]; -_caller = _this select 0; -_target = _this select 1; -_selectionName = _this select 2; +private ["_part", "_tourniquets", "_output"]; +params ["_caller", "_target", "_selectionName"]; // grab the required data _part = [_selectionName] call FUNC(selectionNameToNumber); @@ -26,7 +24,7 @@ _tourniquets = _target getvariable [QGVAR(tourniquets), [0,0,0,0,0,0]]; // Check if there is a tourniquet on this bodypart if ((_tourniquets select _part) == 0) exitwith { - _output = "There is no tourniquet on this body part!"; + _output = LSTRING(noTourniquetOnBodyPart); ["displayTextStructured", [_caller], [_output, 1.5, _caller]] call EFUNC(common,targetEvent); }; diff --git a/addons/medical/functions/fnc_actionUnloadUnit.sqf b/addons/medical/functions/fnc_actionUnloadUnit.sqf index a73f32265a..6bb4f5beed 100644 --- a/addons/medical/functions/fnc_actionUnloadUnit.sqf +++ b/addons/medical/functions/fnc_actionUnloadUnit.sqf @@ -5,23 +5,20 @@ * Arguments: * 0: The medic * 1: The patient - * 2: Drag after unload + * 2: Drag after unload (default: false) * * Return Value: - * NONE + * None * * Public: No */ #include "script_component.hpp" -private ["_caller", "_target", "_drag"]; -_caller = _this select 0; -_target = _this select 1; -_drag = if (count _this > 2) then {_this select 2} else {false}; +params ["_caller", "_target", ["_drag", false]]; // cannot unload a unit not in a vehicle. if (vehicle _target == _target) exitwith {}; if (([_target] call EFUNC(common,isAwake))) exitwith {}; -["unloadPersonEvent", _target, [_target, vehicle _target]] call EFUNC(common,targetEvent) \ No newline at end of file +["unloadPersonEvent", _target, [_target, vehicle _target]] call EFUNC(common,targetEvent) diff --git a/addons/medical/functions/fnc_addHeartRateAdjustment.sqf b/addons/medical/functions/fnc_addHeartRateAdjustment.sqf index f4516a100c..7171eee275 100644 --- a/addons/medical/functions/fnc_addHeartRateAdjustment.sqf +++ b/addons/medical/functions/fnc_addHeartRateAdjustment.sqf @@ -9,18 +9,15 @@ * 3: callback * * Return Value: - * nil + * None * * Public: Yes */ #include "script_component.hpp" -private ["_unit", "_value", "_time", "_adjustment", "_callBack"]; -_unit = [_this, 0, objNull, [objNull]] call BIS_fnc_Param; -_value = [_this, 1, 0, [0]] call BIS_fnc_Param; -_time = [_this, 2, 1, [0]] call BIS_fnc_Param; -_callBack = [_this, 3, {}, [{}]] call BIS_fnc_Param; + +params [["_unit", objNull, [objNull]], ["_value", 0, [0]], ["_time", 1, [0]], ["_callBack", {}, [{}]]]; _adjustment = _unit getvariable [QGVAR(heartRateAdjustments), []]; _adjustment pushback [_value, _time, _callBack]; diff --git a/addons/medical/functions/fnc_addToInjuredCollection.sqf b/addons/medical/functions/fnc_addToInjuredCollection.sqf index 083f949d9d..0ed9b9747f 100644 --- a/addons/medical/functions/fnc_addToInjuredCollection.sqf +++ b/addons/medical/functions/fnc_addToInjuredCollection.sqf @@ -6,16 +6,14 @@ * 0: The Unit * * ReturnValue: - * + * None * * Public: Yes */ #include "script_component.hpp" -private ["_unit", "_force"]; -_unit = _this select 0; -_force = if (count _this > 1) then {_this select 1} else {false}; +params ["_unit", ["_force", false]]; if ([_unit] call FUNC(hasMedicalEnabled) || _force) then { @@ -27,13 +25,13 @@ if ([_unit] call FUNC(hasMedicalEnabled) || _force) then { _unit setvariable [QGVAR(addedToUnitLoop), true, true]; [{ - private ["_unit", "_interval"]; - _unit = (_this select 0) select 0; - _interval = ACE_time - ((_this select 0) select 1); + params ["_args", "_idPFH"]; + _args params ["_unit", "_interval"]; + _interval = ACE_time - _interval; (_this select 0) set [1, ACE_time]; - + if (!alive _unit || !local _unit) then { - [_this select 1] call CBA_fnc_removePerFrameHandler; + [_idPFH] call CBA_fnc_removePerFrameHandler; if (!local _unit) then { if (GVAR(level) >= 2) then { _unit setvariable [QGVAR(heartRate), _unit getvariable [QGVAR(heartRate), 80], true]; @@ -47,9 +45,12 @@ if ([_unit] call FUNC(hasMedicalEnabled) || _force) then { private "_pain"; _pain = _unit getvariable [QGVAR(pain), 0]; if (_pain > (_unit getvariable [QGVAR(painSuppress), 0])) then { - if (_pain > 0.7 && {random(1) > 0.6}) then { + // This introduces wierd unconscious behaviour for basic medical and possibly also advanced. + // TODO This is disabled as it's considered non critical code. + // We will need to decide if we want unconscious triggered on high pain levels or if we can get rid of this entirely. + /*if (_pain > 0.7 && {random(1) > 0.6}) then { [_unit] call FUNC(setUnconscious); - }; + };*/ [_unit, _pain] call FUNC(playInjuredSound); }; diff --git a/addons/medical/functions/fnc_addToLog.sqf b/addons/medical/functions/fnc_addToLog.sqf index af7d9f3170..3b071948f3 100644 --- a/addons/medical/functions/fnc_addToLog.sqf +++ b/addons/medical/functions/fnc_addToLog.sqf @@ -9,28 +9,24 @@ * 3: The arguments for localization * * Return Value: - * nil + * None * * Public: Yes */ #include "script_component.hpp" -private ["_unit", "_type", "_message", "_arguments", "_lastNumber", "_moment", "_logVarName", "_log","_newLog", "_logs"]; -_unit = _this select 0; -_type = _this select 1; -_message = _this select 2; -_arguments = _this select 3; +private ["_moment", "_logVarName", "_log","_newLog", "_logs"]; +params ["_unit", "_type", "_message", "_arguments"]; if (!local _unit) exitwith { - [_this, QUOTE(DFUNC(addToLog)), _unit] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ + [_this, QFUNC(addToLog), _unit] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ }; -_lastNumber = date select 4; -_moment = format["%1:%2",date select 3, _lastNumber]; -if (_lastNumber < 10) then { - _moment = format["%1:0%2",date select 3, _lastNumber]; -}; +date params ["", "", "", "_minute", "_hour"]; + +_moment = format [ (["%1:%2", "%1:0%2"] select (_minute < 10)), _hour, _minute]; + _logVarName = format[QGVAR(logFile_%1), _type]; _log = _unit getvariable [_logVarName, []]; @@ -41,10 +37,10 @@ if (count _log >= 8) then { if (_foreachIndex > 0) then { _newLog pushback _x; }; - }foreach _log; + } foreach _log; _log = _newLog; }; -_log pushback [_message,_moment,_type, _arguments]; +_log pushback [_message, _moment, _type, _arguments]; _unit setvariable [_logVarName, _log, true]; ["medical_onLogEntryAdded", [_unit, _type, _message, _arguments]] call EFUNC(common,localEvent); diff --git a/addons/medical/functions/fnc_addToTriageCard.sqf b/addons/medical/functions/fnc_addToTriageCard.sqf index 7495c04a8a..56b2042bc9 100644 --- a/addons/medical/functions/fnc_addToTriageCard.sqf +++ b/addons/medical/functions/fnc_addToTriageCard.sqf @@ -7,16 +7,15 @@ * 1: The new item classname * * Return Value: - * nil + * None * * Public: Yes */ #include "script_component.hpp" -private ["_unit", "_newItem", "_log", "_inList", "_amount"]; -_unit = _this select 0; -_newItem = _this select 1; +private ["_log", "_inList", "_amount"]; +params ["_unit", "_newItem"]; if (!local _unit) exitwith { [_this, QUOTE(DFUNC(addToTriageList)), _unit] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ @@ -36,7 +35,7 @@ _amount = 1; _amount = (_info select 1); _inList = true; }; -}foreach _log; +} foreach _log; if (!_inList) then { _log pushback [_newItem, 1, ACE_time]; diff --git a/addons/medical/functions/fnc_addUnconsciousCondition.sqf b/addons/medical/functions/fnc_addUnconsciousCondition.sqf index 579a55ca1f..6a867088da 100644 --- a/addons/medical/functions/fnc_addUnconsciousCondition.sqf +++ b/addons/medical/functions/fnc_addUnconsciousCondition.sqf @@ -3,14 +3,13 @@ * Adds new condition for the unconscious state. Conditions are not actively checked for units unless unit is in unconscious state. * * Arguments: - * 0: Code, should return a boolean + * 0-N: Code, should return a boolean * * ReturnValue: - * + * None * * Public: Yes */ - #include "script_component.hpp" if (isnil QGVAR(unconsciousConditions)) then { @@ -21,5 +20,5 @@ if (typeName _this == typeName []) then { if (typeName _x == typeName {}) then { GVAR(unconsciousConditions) pushback _x; }; - }foreach _this; + } foreach _this; }; diff --git a/addons/medical/functions/fnc_addUnloadPatientActions.sqf b/addons/medical/functions/fnc_addUnloadPatientActions.sqf index 13a4177859..f29b3923f1 100644 --- a/addons/medical/functions/fnc_addUnloadPatientActions.sqf +++ b/addons/medical/functions/fnc_addUnloadPatientActions.sqf @@ -13,8 +13,7 @@ * Public: No */ #include "script_component.hpp" - -EXPLODE_3_PVT(_this,_vehicle,_player,_parameters); +params ["_vehicle", "_player", "_parameters"]; private ["_actions", "_unit"]; _actions = []; diff --git a/addons/medical/functions/fnc_adjustPainLevel.sqf b/addons/medical/functions/fnc_adjustPainLevel.sqf index 7e6ce2d5f1..df82e06823 100644 --- a/addons/medical/functions/fnc_adjustPainLevel.sqf +++ b/addons/medical/functions/fnc_adjustPainLevel.sqf @@ -18,10 +18,10 @@ private ["_pain"]; -PARAMS_2(_unit,_addedPain); - +params ["_unit", "_addedPain"]; //Only run on local units: if (!local _unit) exitWith {ERROR("unit is not local");}; +TRACE_3("ACE_DEBUG: adjustPainLevel Called",_unit, _pain, _addedPain); //Ignore if medical system disabled: if (GVAR(level) == 0) exitWith {}; diff --git a/addons/medical/functions/fnc_canAccessMedicalEquipment.sqf b/addons/medical/functions/fnc_canAccessMedicalEquipment.sqf index 4b1940b7e3..2aecfb9a12 100644 --- a/addons/medical/functions/fnc_canAccessMedicalEquipment.sqf +++ b/addons/medical/functions/fnc_canAccessMedicalEquipment.sqf @@ -14,9 +14,8 @@ #include "script_component.hpp" -private ["_target", "_caller", "_accessLevel", "_return"]; -_caller = _this select 0; -_target = _this select 1; +private ["_accessLevel", "_return"]; +params ["_caller", "_target"]; _accessLevel = _target getvariable [QGVAR(allowSharedEquipmentAccess), -1]; @@ -28,4 +27,4 @@ if (_accessLevel >= 0) then { if (_accessLevel == 2) exitwith { _return = (group _target == group _caller); }; }; -_return; \ No newline at end of file +_return; diff --git a/addons/medical/functions/fnc_canTreat.sqf b/addons/medical/functions/fnc_canTreat.sqf index e0cab95420..ba6ced0486 100644 --- a/addons/medical/functions/fnc_canTreat.sqf +++ b/addons/medical/functions/fnc_canTreat.sqf @@ -16,36 +16,35 @@ #include "script_component.hpp" -private ["_caller", "_target", "_selectionName", "_className", "_config", "_medicRequired", "_items", "_locations", "_return", "_condition", "_patientStateCondition", "_allowedSelections"]; -_caller = _this select 0; -_target = _this select 1; -_selectionName = _this select 2; -_className = _this select 3; +private ["_config", "_medicRequired", "_items", "_locations", "_return", "_condition", "_patientStateCondition", "_allowedSelections"]; +params ["_caller", "_target", "_selectionName", "_className"]; -if !(_target isKindOf "CAManBase") exitWith {false}; +if !(_target isKindOf "CAManBase") exitWith { false }; + + +_config = (ConfigFile >> "ACE_Medical_Actions" >> (["Basic", "Advanced"] select (GVAR(level)>=2)) >> _className); -_config = (ConfigFile >> "ACE_Medical_Actions" >> "Basic" >> _className); -if (GVAR(level)>=2) then { - _config = (ConfigFile >> "ACE_Medical_Actions" >> "Advanced" >> _className); -}; if !(isClass _config) exitwith {false}; +// Allow self treatment check +if (_caller == _target && {getNumber (_config >> "allowSelfTreatment") == 0}) exitwith {false}; + _medicRequired = if (isNumber (_config >> "requiredMedic")) then { getNumber (_config >> "requiredMedic"); } else { // Check for required class if (isText (_config >> "requiredMedic")) exitwith { - missionNamespace getvariable [(getText (_config >> "requiredMedic")), 0]; + missionNamespace getvariable [(getText (_config >> "requiredMedic")), 0] }; 0; }; -if !([_caller, _medicRequired] call FUNC(isMedic)) exitwith {false}; +if !([_caller, _medicRequired] call FUNC(isMedic)) exitwith { false }; _items = getArray (_config >> "items"); -if (count _items > 0 && {!([_caller, _target, _items] call FUNC(hasItems))}) exitwith {false}; +if (count _items > 0 && {!([_caller, _target, _items] call FUNC(hasItems))}) exitwith { false }; _allowedSelections = getArray (_config >> "allowedSelections"); -if !("All" in _allowedSelections || {(_selectionName in _allowedSelections)}) exitwith {false}; +if !("All" in _allowedSelections || {(_selectionName in _allowedSelections)}) exitwith { false }; _return = true; if (getText (_config >> "condition") != "") then { @@ -61,7 +60,7 @@ if (getText (_config >> "condition") != "") then { _return = [_caller, _target, _selectionName, _className] call _condition; }; }; -if (!_return) exitwith {false}; +if (!_return) exitwith { false }; _patientStateCondition = if (isText(_config >> "patientStateCondition")) then { missionNamespace getvariable [getText(_config >> "patientStateCondition"), 0] @@ -71,7 +70,7 @@ _patientStateCondition = if (isText(_config >> "patientStateCondition")) then { if (_patientStateCondition == 1 && {!([_target] call FUNC(isInStableCondition))}) exitwith {false}; _locations = getArray (_config >> "treatmentLocations"); -if ("All" in _locations) exitwith {true}; +if ("All" in _locations) exitwith { true }; private [ "_medFacility", "_medVeh"]; _medFacility = {([_caller] call FUNC(isInMedicalFacility)) || ([_target] call FUNC(isInMedicalFacility))}; @@ -93,6 +92,6 @@ _medVeh = {([_caller] call FUNC(isInMedicalVehicle)) || ([_target] call FUNC(isI }; }; }; -}foreach _locations; +} foreach _locations; _return; diff --git a/addons/medical/functions/fnc_canTreatCached.sqf b/addons/medical/functions/fnc_canTreatCached.sqf index b1dfaf7d12..273da7dc4b 100644 --- a/addons/medical/functions/fnc_canTreatCached.sqf +++ b/addons/medical/functions/fnc_canTreatCached.sqf @@ -17,6 +17,7 @@ #include "script_component.hpp" #define MAX_DURATION_CACHE 2 +params ["", "_target", "_selection", "_classname"]; // parameters, function, namespace, uid -[_this, DFUNC(canTreat), _this select 1, format[QGVAR(canTreat_%1_%2), _this select 2, _this select 3], MAX_DURATION_CACHE, "clearConditionCaches"] call EFUNC(common,cachedCall); +[_this, DFUNC(canTreat), _target, format [QGVAR(canTreat_%1_%2), _selection, _classname], MAX_DURATION_CACHE, "clearConditionCaches"] call EFUNC(common,cachedCall); diff --git a/addons/medical/functions/fnc_copyDeadBody.sqf b/addons/medical/functions/fnc_copyDeadBody.sqf index 36bcd91487..9cd43dada6 100644 --- a/addons/medical/functions/fnc_copyDeadBody.sqf +++ b/addons/medical/functions/fnc_copyDeadBody.sqf @@ -7,16 +7,15 @@ * 1: The caller * * Return Value: - * OBJECT Returns the copy of the unit. If no copy could be made, returns the oldBody + * Returns the copy of the unit. If no copy could be made, returns the oldBody * * Public: No */ #include "script_component.hpp" -private ["_oldBody","_newUnit","_class","_group","_position","_side", "_caller", "_name"]; -_oldBody = _this select 0; -_caller = _this select 1; +private ["_newUnit", "_class", "_group", "_position", "_side", "_name"]; +params ["_oldBody", "_caller"]; if (alive _oldBody) exitwith {_oldBody}; // we only want to do this for dead bodies @@ -79,5 +78,5 @@ _newUnit setvariable ["ACE_isUnconscious", true, true]; _newUnit setvariable [QGVAR(disableInteraction), true, true]; _oldBody setvariable [QGVAR(disableInteraction), true, true]; -_newUnit setDamage 0.89; +[_newUnit, 0.89] call FUNC(setStructuralDamage); _newUnit; diff --git a/addons/medical/functions/fnc_createLitter.sqf b/addons/medical/functions/fnc_createLitter.sqf index a3b71b7f9c..c234574abc 100644 --- a/addons/medical/functions/fnc_createLitter.sqf +++ b/addons/medical/functions/fnc_createLitter.sqf @@ -3,11 +3,16 @@ * Spawns litter for the treatment action on the ground around the target * * Arguments: - * 0: The target - * 1: The treatment classname + * 0: The Caller + * 1: The target + * 2: The treatment Selection Name + * 3: The treatment classname + * 4: ? + * 5: Users of Items + * 6: Previous Damage * * Return Value: - * + * None * * Public: No */ @@ -16,13 +21,8 @@ #define MIN_ENTRIES_LITTER_CONFIG 3 -private ["_target", "_className", "_config", "_litter", "_createLitter", "_position", "_createdLitter", "_caller", "_selectionName", "_usersOfItems", "_previousDamage"]; -_caller = _this select 0; -_target = _this select 1; -_selectionName = _this select 2; -_className = _this select 3; -_usersOfItems = _this select 5; -_previousDamage = _this select 6; +private ["_config", "_litter", "_createLitter", "_position", "_createdLitter"]; +params ["_caller", "_target", "_selectionName", "_className", "", "_usersOfItems", "_previousDamage"]; if !(GVAR(allowLitterCreation)) exitwith {}; if (vehicle _caller != _caller || vehicle _target != _target) exitwith {}; @@ -38,25 +38,24 @@ if !(isArray (_config >> "litter")) exitwith {}; _litter = getArray (_config >> "litter"); _createLitter = { - private["_position", "_litterClass", "_direction"]; - + private["_position", "_direction"]; + params ["_unit", "_litterClass"]; // @TODO: handle carriers over water // For now, don't spawn litter if we are over water to avoid floating litter - if(surfaceIsWater (getPos (_this select 0))) exitWith { false }; - - _position = getPosATL (_this select 0); - _position = [_position select 0, _position select 1, 0]; - _litterClass = _this select 1; - if (random(1) >= 0.5) then { - _position = [(_position select 0) + random 1, (_position select 1) + random 1, _position select 2]; + if(surfaceIsWater (getPos _unit)) exitWith { false }; + + _position = getPosATL _unit; + _position params ["_posX", "_posY"]; + _position = if (random(1) >= 0.5) then { + [_posX + random 1, _posY + random 1, 0] } else { - _position = [(_position select 0) - random 1, (_position select 1) - random 1, _position select 2]; + [_posX - random 1, _posY - random 1, 0]; }; _direction = (random 360); // Create the litter, and timeout the event based on the cleanup delay // The cleanup delay for events in MP is handled by the server side - [QGVAR(createLitter), [_litterClass,_position,_direction], 0] call EFUNC(common,syncedEvent); + [QGVAR(createLitter), [_litterClass, _position, _direction], 0] call EFUNC(common,syncedEvent); true }; @@ -65,11 +64,10 @@ _createdLitter = []; { if (typeName _x == "ARRAY") then { if (count _x < MIN_ENTRIES_LITTER_CONFIG) exitwith {}; - private ["_selection", "_litterCondition", "_litterOptions"]; - _selection = _x select 0; + + _x params ["_selection", "_litterCondition", "_litterOptions"]; + if (toLower _selection in [toLower _selectionName, "all"]) then { // in is case sensitve. We can be forgiving here, so lets use toLower. - _litterCondition = _x select 1; - _litterOptions = _x select 2; if (isnil _litterCondition) then { _litterCondition = if (_litterCondition != "") then {compile _litterCondition} else {{true}}; @@ -88,8 +86,8 @@ _createdLitter = []; if (typeName _x == "STRING") then { [_target, _x] call _createLitter; }; - }foreach _litterOptions; + } foreach _litterOptions; }; }; }; -}foreach _litter; \ No newline at end of file +} foreach _litter; diff --git a/addons/medical/functions/fnc_determineIfFatal.sqf b/addons/medical/functions/fnc_determineIfFatal.sqf index bad15dbcad..7fc4823202 100644 --- a/addons/medical/functions/fnc_determineIfFatal.sqf +++ b/addons/medical/functions/fnc_determineIfFatal.sqf @@ -1,19 +1,29 @@ -/** - * fn_determineIfFatal.sqf - * @Descr: N/A - * @Author: Glowbal +/* + * Author: Glowbal + * Determine If Fatal * - * @Arguments: [] - * @Return: - * @PublicAPI: false + * Arguments: + * 0: Unit + * 1: Part + * 2: with Damage (default: 0) + * + * Return Value: + * None + * + * Public: No */ - #include "script_component.hpp" -private ["_unit","_part","_damageThreshold", "_withDamage", "_damageBodyPart"]; -_unit = _this select 0; -_part = _this select 1; -_withDamage = if (count _this > 2) then { _this select 2} else {0}; +#define INCREASE_CHANCE_HEAD 0.05 +#define INCREASE_CHANCE_TORSO 0.03 +#define INCREASE_CHANGE_LIMB 0.01 + +#define CHANGE_FATAL_HEAD 0.7 +#define CHANGE_FATAL_TORSO 0.6 +#define CHANGE_FATAL_LIMB 0.1 + +private ["_damageThreshold", "_damageBodyPart", "_chanceFatal"]; +params ["_unit", "_part", ["_withDamage", 0]]; if (!alive _unit) exitwith {true}; if (_part < 0 || _part > 5) exitwith {false}; @@ -26,17 +36,22 @@ if ([_unit] call EFUNC(common,IsPlayer)) then { } else { _damageThreshold =_unit getvariable[QGVAR(unitDamageThreshold), [GVAR(AIDamageThreshold), GVAR(AIDamageThreshold), GVAR(AIDamageThreshold) * 1.7]]; }; +_damageThreshold params ["_thresholdHead", "_thresholdTorso", "_thresholdLimbs"]; _damageBodyPart = ((_unit getvariable [QGVAR(bodyPartStatus),[0, 0, 0, 0, 0, 0]]) select _part) + _withDamage; // Check if damage to body part is higher as damage head if (_part == 0) exitwith { - (_damageBodyPart >= (_damageThreshold select 0) && {(random(1) > 0.2)}); + _chanceFatal = CHANGE_FATAL_HEAD + ((INCREASE_CHANCE_HEAD * (_damageBodyPart - _thresholdHead)) * 10); + (_damageBodyPart >= _thresholdHead && {(_chanceFatal >= random(1))}); }; // Check if damage to body part is higher as damage torso if (_part == 1) exitwith { - (_damageBodyPart >= (_damageThreshold select 1) && {(random(1) > 0.2)}); + _chanceFatal = CHANGE_FATAL_TORSO + ((INCREASE_CHANCE_TORSO * (_damageBodyPart - _thresholdTorso)) * 10); + (_damageBodyPart >= _thresholdTorso && {(_chanceFatal >= random(1))}); }; // Check if damage to body part is higher as damage limbs -(_damageBodyPart >= (_damageThreshold select 2) && {(random(1) > 0.95)}); +// We use a slightly lower decrease for limbs, as we want any injuries done to those to be less likely to be fatal compared to head shots or torso. +_chanceFatal = CHANGE_FATAL_LIMB + ((INCREASE_CHANGE_LIMB * (_damageBodyPart - _thresholdLimbs)) * 10); +(_damageBodyPart >= _thresholdLimbs && {(_chanceFatal >= random(1))}); diff --git a/addons/medical/functions/fnc_displayPatientInformation.sqf b/addons/medical/functions/fnc_displayPatientInformation.sqf index e181328318..f73376cb29 100644 --- a/addons/medical/functions/fnc_displayPatientInformation.sqf +++ b/addons/medical/functions/fnc_displayPatientInformation.sqf @@ -4,10 +4,11 @@ * * Arguments: * 0: The Unit - * 1: Show + * 1: Show (default: true) + * 2: Selection (default: 0) * * ReturnValue: - * nil + * None * * Public: No */ @@ -17,13 +18,11 @@ // Exit for basic medical if (GVAR(level) < 2) exitWith {}; -private ["_target", "_show", "_selectionN", "_amountOfGeneric", "_bandagedwounds", "_logCtrl", "_part", "_partText", "_pointDamage", "_severity", "_total", "_totalIvVolume", "_triageStatus", "_type"]; -_target = _this select 0; -_show = if (count _this > 1) then {_this select 1} else {true}; -_selectionN = if (count _this > 2) then {_this select 2} else {0}; +private ["_amountOfGeneric", "_bandagedwounds", "_logCtrl", "_part", "_partText", "_pointDamage", "_severity", "_total", "_totalIvVolume", "_triageStatus", "_type"]; +params ["_target", ["_show", true], ["_selectionN", 0]]; -GVAR(currentSelectedSelectionN) = if (typeName _selectionN == "SCALAR") then {_selectionN} else {0}; -GVAR(displayPatientInformationTarget) = if (_show) then {_target} else {ObjNull}; +GVAR(currentSelectedSelectionN) = [0, _selectionN] select (IS_SCALAR(_selectionN)); +GVAR(displayPatientInformationTarget) = [ObjNull, _target] select _show; if (USE_WOUND_EVENT_SYNC) then { [_target, ACE_player] call FUNC(requestWoundSync); @@ -34,22 +33,22 @@ if (_show) then { [{ private ["_target", "_display", "_alphaLevel", "_damaged", "_availableSelections", "_openWounds", "_selectionBloodLoss", "_red", "_green", "_blue", "_alphaLevel", "_allInjuryTexts", "_lbCtrl", "_genericMessages"]; - _target = (_this select 0) select 0; - _selectionN = (_this select 0) select 1; + params ["_args", "_idPFH"]; + _args params ["_target", "_selectionN"]; if (GVAR(displayPatientInformationTarget) != _target || GVAR(currentSelectedSelectionN) != _selectionN) exitwith { - [_this select 1] call CBA_fnc_removePerFrameHandler; + [_idPFH] call CBA_fnc_removePerFrameHandler; }; if (ACE_player distance _target > MAX_DISTANCE) exitwith { ("ACE_MedicalRscDisplayInformation" call BIS_fnc_rscLayer) cutText ["","PLAIN"]; - [_this select 1] call CBA_fnc_removePerFrameHandler; + [_idPFH] call CBA_fnc_removePerFrameHandler; ["displayTextStructured", [ACE_player], [[LSTRING(DistanceToFar), [_target] call EFUNC(common,getName)], 1.75, ACE_player]] call EFUNC(common,targetEvent); }; disableSerialization; _display = uiNamespace getvariable QGVAR(DisplayInformation); if (isnil "_display") exitwith { - [_this select 1] call CBA_fnc_removePerFrameHandler; + [_idPFH] call CBA_fnc_removePerFrameHandler; }; _allInjuryTexts = []; @@ -81,7 +80,7 @@ if (_show) then { if !(isnil "_value") then { _totalIvVolume = _totalIvVolume + (_target getvariable [_x, 0]); }; - }foreach GVAR(IVBags); + } foreach GVAR(IVBags); if (_totalIvVolume >= 1) then { _genericMessages pushback [format[localize LSTRING(receivingIvVolume), floor _totalIvVolume], [1, 1, 1, 1]]; }; @@ -92,33 +91,33 @@ if (_show) then { _openWounds = _target getvariable [QGVAR(openWounds), []]; private "_amountOf"; { - _amountOf = _x select 3; + _x params ["", "_x1", "_selectionX", "_amountOf", "_x4"]; // Find how much this bodypart is bleeding if (_amountOf > 0) then { - _damaged set[_x select 2, true]; - _selectionBloodLoss set [(_x select 2), (_selectionBloodLoss select (_x select 2)) + (20 * ((_x select 4) * _amountOf))]; + _damaged set[_selectionX, true]; + _selectionBloodLoss set [_selectionX, (_selectionBloodLoss select _selectionX) + (20 * (_x4 * _amountOf))]; - if (_selectionN == (_x select 2)) then { + if (_selectionN == _selectionX) then { // Collect the text to be displayed for this injury [ Select injury class type definition - select the classname DisplayName (6th), amount of injuries for this] if (_amountOf >= 1) then { // TODO localization - _allInjuryTexts pushback [format["%2x %1", (GVAR(AllWoundInjuryTypes) select (_x select 1)) select 6, _amountOf], [1,1,1,1]]; + _allInjuryTexts pushback [format["%2x %1", (GVAR(AllWoundInjuryTypes) select _x1) select 6, _amountOf], [1,1,1,1]]; } else { // TODO localization - _allInjuryTexts pushback [format["Partial %1", (GVAR(AllWoundInjuryTypes) select (_x select 1)) select 6], [1,1,1,1]]; + _allInjuryTexts pushback [format["Partial %1", (GVAR(AllWoundInjuryTypes) select _x1) select 6], [1,1,1,1]]; }; }; }; - }foreach _openWounds; + } foreach _openWounds; _bandagedwounds = _target getvariable [QGVAR(bandagedWounds), []]; { - _amountOf = _x select 3; + _x params ["", "", "_selectionX", "_amountOf", "_x4"]; // Find how much this bodypart is bleeding - if !(_damaged select (_x select 2)) then { - _selectionBloodLoss set [(_x select 2), (_selectionBloodLoss select (_x select 2)) + (20 * ((_x select 4) * _amountOf))]; + if !(_damaged select _selectionX) then { + _selectionBloodLoss set [_selectionX, (_selectionBloodLoss select _selectionX) + (20 * (_x4 * _amountOf))]; }; - if (_selectionN == (_x select 2)) then { + if (_selectionN == _selectionX) then { // Collect the text to be displayed for this injury [ Select injury class type definition - select the classname DisplayName (6th), amount of injuries for this] if (_amountOf > 0) then { if (_amountOf >= 1) then { @@ -130,7 +129,7 @@ if (_show) then { }; }; }; - }foreach _bandagedwounds; + } foreach _bandagedwounds; } else { _damaged = [true, true, true, true, true, true]; { @@ -160,7 +159,7 @@ if (_show) then { _availableSelections = [50,51,52,53,54,55]; { - private ["_red", "_green", "_blue"]; + private ["_red", "_green", "_blue", "_total"]; _total = _x; _red = 1; @@ -177,20 +176,22 @@ if (_show) then { }; }; (_display displayCtrl (_availableSelections select _foreachIndex)) ctrlSetTextColor [_red, _green, _blue, 1.0]; - }foreach _selectionBloodLoss; + } foreach _selectionBloodLoss; _lbCtrl = (_display displayCtrl 200); lbClear _lbCtrl; { - _lbCtrl lbAdd (_x select 0); - _lbCtrl lbSetColor [_foreachIndex, _x select 1]; - }foreach _genericMessages; + _x params ["_add", "_color"]; + _lbCtrl lbAdd _add; + _lbCtrl lbSetColor [_foreachIndex, _color]; + } foreach _genericMessages; _amountOfGeneric = count _genericMessages; { - _lbCtrl lbAdd (_x select 0); - _lbCtrl lbSetColor [_foreachIndex + _amountOfGeneric, _x select 1]; - }foreach _allInjuryTexts; + _x params ["_add", "_color"]; + _lbCtrl lbAdd _add; + _lbCtrl lbSetColor [_foreachIndex + _amountOfGeneric, _color]; + } foreach _allInjuryTexts; if (count _allInjuryTexts == 0) then { _lbCtrl lbAdd (localize LSTRING(NoInjuriesBodypart)); }; @@ -202,9 +203,7 @@ if (_show) then { _logs = _target getvariable [QGVAR(logFile_Activity), []]; { // [_message,_moment,_type, _arguments] - _message = _x select 0; - _moment = _x select 1; - _arguments = _x select 3; + _x params ["_message", "_moment", "_type", "_arguments"]; if (isLocalized _message) then { _message = localize _message; }; @@ -213,10 +212,10 @@ if (_show) then { if (typeName _x == "STRING" && {isLocalized _x}) then { _arguments set [_foreachIndex, localize _x]; }; - }foreach _arguments; + } foreach _arguments; _message = format([_message] + _arguments); _logCtrl lbAdd format["%1 %2", _moment, _message]; - }foreach _logs; + } foreach _logs; _triageStatus = [_target] call FUNC(getTriageStatus); (_display displayCtrl 303) ctrlSetText (_triageStatus select 0); diff --git a/addons/medical/functions/fnc_displayTriageCard.sqf b/addons/medical/functions/fnc_displayTriageCard.sqf index c4ed4ad829..9849242de1 100644 --- a/addons/medical/functions/fnc_displayTriageCard.sqf +++ b/addons/medical/functions/fnc_displayTriageCard.sqf @@ -4,18 +4,18 @@ * * Arguments: * 0: The unit + * 1: Show (default: true) * * Return Value: - * nil + * None * * Public: Yes */ #include "script_component.hpp" -private ["_target", "_show", "_amount", "_item", "_log", "_message", "_triageCardTexts", "_triageStatus"]; -_target = _this select 0; -_show = if (count _this > 1) then {_this select 1} else {true}; +private ["_amount", "_item", "_log", "_message", "_triageCardTexts", "_triageStatus"]; +params ["_target", ["_show", true]]; GVAR(TriageCardTarget) = if (_show) then {_target} else {ObjNull}; @@ -25,15 +25,16 @@ if (_show) then { [{ private ["_target", "_display", "_alphaLevel", "_alphaLevel", "_lbCtrl"]; - _target = (_this select 0) select 0; + params ["_args", "_idPFH"]; + _args params ["_target"]; if (GVAR(TriageCardTarget) != _target) exitwith { - [_this select 1] call CBA_fnc_removePerFrameHandler; + [_idPFH] call CBA_fnc_removePerFrameHandler; }; disableSerialization; _display = uiNamespace getvariable QGVAR(triageCard); if (isnil "_display") exitwith { - [_this select 1] call CBA_fnc_removePerFrameHandler; + [_idPFH] call CBA_fnc_removePerFrameHandler; }; _triageCardTexts = []; @@ -44,8 +45,7 @@ if (_show) then { _log = _target getvariable [QGVAR(triageCard), []]; { - _item = _x select 0; - _amount = _x select 1; + _x params ["_item", "_amount"]; _message = _item; if (isClass(configFile >> "CfgWeapons" >> _item)) then { _message = getText(configFile >> "CfgWeapons" >> _item >> "DisplayName"); @@ -55,18 +55,21 @@ if (_show) then { }; }; _triageCardTexts pushback format["%1x - %2", _amount, _message]; - }foreach _log; + } foreach _log; if (count _triageCardTexts == 0) then { _lbCtrl lbAdd (localize LSTRING(TriageCard_NoEntry)); }; { _lbCtrl lbAdd _x; - }foreach _triageCardTexts; + } foreach _triageCardTexts; _triageStatus = [_target] call FUNC(getTriageStatus); - (_display displayCtrl 2000) ctrlSetText (_triageStatus select 0); - (_display displayCtrl 2000) ctrlSetBackgroundColor (_triageStatus select 2); + + _triageStatus params ["_text", "", "_color"]; + + (_display displayCtrl 2000) ctrlSetText _text; + (_display displayCtrl 2000) ctrlSetBackgroundColor _color; }, 0, [_target]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/medical/functions/fnc_dropDownTriageCard.sqf b/addons/medical/functions/fnc_dropDownTriageCard.sqf index 6f30152c5f..d207c7f9a4 100644 --- a/addons/medical/functions/fnc_dropDownTriageCard.sqf +++ b/addons/medical/functions/fnc_dropDownTriageCard.sqf @@ -3,18 +3,18 @@ * Display triage card for a unit * * Arguments: - * 0: The unit + * 0: Show * * Return Value: - * nil + * None * * Public: Yes */ #include "script_component.hpp" -private ["_show", "_ctrl", "_display", "_idc", "_pos"]; -_show = _this select 0; +private ["_ctrl", "_display", "_idc", "_pos"]; +params ["_show"]; disableSerialization; _display = uiNamespace getvariable QGVAR(triageCard); diff --git a/addons/medical/functions/fnc_getBloodLoss.sqf b/addons/medical/functions/fnc_getBloodLoss.sqf index 1881643d97..a3fdbd5b94 100644 --- a/addons/medical/functions/fnc_getBloodLoss.sqf +++ b/addons/medical/functions/fnc_getBloodLoss.sqf @@ -15,10 +15,9 @@ #define BLOODLOSSRATE_BASIC 0.2 -private ["_unit", "_totalBloodLoss","_tourniquets","_openWounds", "_cardiacOutput", "_internalWounds"]; +private ["_totalBloodLoss","_tourniquets","_openWounds", "_cardiacOutput", "_internalWounds"]; // TODO Only use this calculation if medium or higher, otherwise use vanilla calculations (for basic medical). - -_unit = _this select 0; +params ["_unit"]; _totalBloodLoss = 0; // Advanced medical bloodloss handling @@ -34,16 +33,17 @@ if (GVAR(level) >= 2) then { // (((BLOODLOSS_SMALL_WOUNDS * (_x select 0))) + ((BLOODLOSS_MEDIUM_WOUNDS * (_x select 1))) + ((BLOODLOSS_LARGE_WOUNDS * (_x select 2))) * (_cardiacOutput / DEFAULT_CARDIAC_OUTPUT)); }; - }foreach _openWounds; + } foreach _openWounds; _internalWounds = _unit getvariable [QGVAR(internalWounds), []]; { _totalBloodLoss = _totalBloodLoss + ((_x select 4) * (_x select 3)); - }foreach _internalWounds; + } foreach _internalWounds; // cap the blood loss to be no greater as the current cardiac output //(_totalBloodLoss min _cardiacOutput); } else { - _totalBloodLoss = BLOODLOSSRATE_BASIC * (damage _unit); + { _totalBloodLoss = _totalBloodLoss + _x } forEach (_unit getvariable [QGVAR(bodyPartStatus), []]); + _totalBloodLoss = (_totalBloodLoss / 6) * BLOODLOSSRATE_BASIC; }; _totalBloodLoss * ((_unit getVariable [QGVAR(bleedingCoefficient), GVAR(bleedingCoefficient)]) max 0); diff --git a/addons/medical/functions/fnc_getBloodPressure.sqf b/addons/medical/functions/fnc_getBloodPressure.sqf index f5012c8735..659949d716 100644 --- a/addons/medical/functions/fnc_getBloodPressure.sqf +++ b/addons/medical/functions/fnc_getBloodPressure.sqf @@ -6,29 +6,28 @@ * 0: The Unit * * ReturnValue: - * Blood Pressuret ,> + * 0: BloodPressure Low + * 1: BloodPressure High * * Public: No */ #include "script_component.hpp" -/* - Value is taken because with cardic output and resistance at default values, it will put blood pressure High at 120. -*/ +// Value is taken because with cardic output and resistance at default values, it will put blood pressure High at 120. #define MODIFIER_BP_HIGH 0.229 -/* - Value is taken because with cardic output and resistance at default values, it will put blood pressure Low at 80. -*/ +// Value is taken because with cardic output and resistance at default values, it will put blood pressure Low at 80. #define MODIFIER_BP_LOW 0.1524 -private ["_unit", "_bloodPressureLow", "_bloodPressureHigh", "_cardiacOutput", "_resistance"]; -_unit = _this select 0; +private ["_bloodPressureLow", "_bloodPressureHigh", "_cardiacOutput", "_resistance"]; + +params ["_unit"]; + _cardiacOutput = [_unit] call FUNC(getCardiacOutput); _resistance = _unit getvariable [QGVAR(peripheralResistance), 100]; _bloodPressureHigh = (_cardiacOutput * MODIFIER_BP_HIGH) * _resistance; _bloodPressureLow = (_cardiacOutput * MODIFIER_BP_LOW) * _resistance; -[_bloodPressureLow, _bloodPressureHigh]; +[_bloodPressureLow max 0, _bloodPressureHigh max 0] diff --git a/addons/medical/functions/fnc_getBloodVolumeChange.sqf b/addons/medical/functions/fnc_getBloodVolumeChange.sqf index 23eba4a0c7..3524e15cb5 100644 --- a/addons/medical/functions/fnc_getBloodVolumeChange.sqf +++ b/addons/medical/functions/fnc_getBloodVolumeChange.sqf @@ -28,10 +28,8 @@ */ #define BLOOD_CHANGE_PER_SECOND 0.0595 - - -private ["_unit","_bloodVolume","_bloodVolumeChange", "_ivVolume"]; -_unit = _this select 0; +private ["_bloodVolume", "_bloodVolumeChange", "_ivVolume"]; +params ["_unit"]; _bloodVolume = _unit getvariable [QGVAR(bloodVolume), 100]; _bloodVolumeChange = -([_unit] call FUNC(getBloodLoss)); @@ -43,13 +41,13 @@ if (_bloodVolume < 100.0) then { _ivVolume = (_unit getvariable [_x, 0]) + IV_CHANGE_PER_SECOND; _unit setvariable [_x,_ivVolume]; }; - }foreach GVAR(IVBags); + } foreach GVAR(IVBags); } else { { if ((_unit getvariable [_x, 0]) > 0) then { _unit setvariable [_x, 0]; // lets get rid of exessive IV volume }; - }foreach GVAR(IVBags); + } foreach GVAR(IVBags); }; _bloodVolumeChange; diff --git a/addons/medical/functions/fnc_getCardiacOutput.sqf b/addons/medical/functions/fnc_getCardiacOutput.sqf index 34d7be33af..f24aa438ca 100644 --- a/addons/medical/functions/fnc_getCardiacOutput.sqf +++ b/addons/medical/functions/fnc_getCardiacOutput.sqf @@ -22,7 +22,6 @@ // to limit the amount of complex calculations necessary, we take a set modifier to calculate Stroke Volume. #define MODIFIER_CARDIAC_OUTPUT 19.04761 -private "_unit"; -_unit = _this select 0; +params ["_unit"]; ((_unit getvariable [QGVAR(bloodVolume), 100])/MODIFIER_CARDIAC_OUTPUT) + ((_unit getvariable [QGVAR(heartRate), 80])/80-1); diff --git a/addons/medical/functions/fnc_getHeartRateChange.sqf b/addons/medical/functions/fnc_getHeartRateChange.sqf index 92a2053737..d46733452a 100644 --- a/addons/medical/functions/fnc_getHeartRateChange.sqf +++ b/addons/medical/functions/fnc_getHeartRateChange.sqf @@ -15,8 +15,9 @@ #define HEART_RATE_MODIFIER 0.02 -private ["_unit", "_heartRate", "_hrIncrease", "_bloodLoss", "_time", "_values", "_adjustment", "_change", "_callBack", "_bloodVolume"]; -_unit = _this select 0; +private ["_heartRate", "_hrIncrease", "_bloodLoss", "_time", "_values", "_adjustment", "_change", "_callBack", "_bloodVolume"]; +params ["_unit"]; + _hrIncrease = 0; if (!(_unit getvariable [QGVAR(inCardiacArrest),false])) then { _heartRate = _unit getvariable [QGVAR(heartRate), 80]; @@ -24,10 +25,8 @@ if (!(_unit getvariable [QGVAR(inCardiacArrest),false])) then { _adjustment = _unit getvariable [QGVAR(heartRateAdjustments), []]; { - _values = (_x select 0); + _x params ["_values", "_time", "_callBack"]; if (abs _values > 0) then { - _time = (_x select 1); - _callBack = _x select 2; if (_time <= 0) then { _time = 1; }; @@ -47,7 +46,7 @@ if (!(_unit getvariable [QGVAR(inCardiacArrest),false])) then { [_unit] call _callBack; }; - }foreach _adjustment; + } foreach _adjustment; _adjustment = _adjustment - [ObjNull]; _unit setvariable [QGVAR(heartRateAdjustments), _adjustment]; diff --git a/addons/medical/functions/fnc_getTriageStatus.sqf b/addons/medical/functions/fnc_getTriageStatus.sqf index 812c20ed2a..4dcef530a3 100644 --- a/addons/medical/functions/fnc_getTriageStatus.sqf +++ b/addons/medical/functions/fnc_getTriageStatus.sqf @@ -6,7 +6,9 @@ * 0: The unit * * Return Value: - * Triage status from the unit. Name, statusID, color > + * 0: Name + * 1: Status ID + * 2: Color > * * Public: Yes */ @@ -14,7 +16,7 @@ #include "script_component.hpp" private ["_unit","_return","_status"]; -_unit = _this select 0; +params ["_unit"]; _status = _unit getvariable [QGVAR(triageLevel), -1]; _return = switch (_status) do { case 1: {[localize LSTRING(Triage_Status_Minor), 1, [0, 0.5, 0, 0.9]]}; @@ -23,4 +25,4 @@ _return = switch (_status) do { case 4: {[localize LSTRING(Triage_Status_Deceased), 4, [0, 0, 0, 0.9]]}; default {[localize LSTRING(Triage_Status_None), 0, [0, 0, 0, 0.9]]}; }; -_return; +_return diff --git a/addons/medical/functions/fnc_getTypeOfDamage.sqf b/addons/medical/functions/fnc_getTypeOfDamage.sqf index d51131ce0c..7a351e0b77 100644 --- a/addons/medical/functions/fnc_getTypeOfDamage.sqf +++ b/addons/medical/functions/fnc_getTypeOfDamage.sqf @@ -13,23 +13,19 @@ #include "script_component.hpp" -PARAMS_1(_typeOfProjectile); +params ["_typeOfProjectile"]; -private ["_typeOfDamage"]; -_typeOfDamage = switch (true) do { - case (_typeOfProjectile isKindOf "BulletBase"): {"bullet"}; - case (_typeOfProjectile isKindOf "GrenadeCore"): {"grenade"}; - case (_typeOfProjectile isKindOf "TimeBombCore"): {"explosive"}; - case (_typeOfProjectile isKindOf "MineCore"): {"explosive"}; - case (_typeOfProjectile isKindOf "FuelExplosion"): {"explosive"}; - case (_typeOfProjectile isKindOf "ShellBase"): {"shell"}; - case (_typeOfProjectile isKindOf "RocketBase"): {"explosive"}; - case (_typeOfProjectile isKindOf "MissileBase"): {"explosive"}; - case (_typeOfProjectile isKindOf "LaserBombCore"): {"explosive"}; - case (_typeOfProjectile isKindOf "BombCore"): {"explosive"}; - case (_typeOfProjectile isKindOf "Grenade"): {"grenade"}; - default {toLower _typeOfProjectile}; -}; - -_typeOfDamage +if (_typeOfProjectile isKindOf "BulletBase") exitWith {"bullet"}; +if (_typeOfProjectile isKindOf "ShotgunBase") exitwith {"bullet"}; +if (_typeOfProjectile isKindOf "GrenadeCore") exitWith {"grenade"}; +if (_typeOfProjectile isKindOf "TimeBombCore") exitWith {"explosive"}; +if (_typeOfProjectile isKindOf "MineCore") exitWith {"explosive"}; +if (_typeOfProjectile isKindOf "FuelExplosion") exitWith {"explosive"}; +if (_typeOfProjectile isKindOf "ShellBase") exitWith {"shell"}; +if (_typeOfProjectile isKindOf "RocketBase") exitWith {"explosive"}; +if (_typeOfProjectile isKindOf "MissileBase") exitWith {"explosive"}; +if (_typeOfProjectile isKindOf "LaserBombCore") exitWith {"explosive"}; +if (_typeOfProjectile isKindOf "BombCore") exitWith {"explosive"}; +if (_typeOfProjectile isKindOf "Grenade") exitWith {"grenade"}; +toLower _typeOfProjectile diff --git a/addons/medical/functions/fnc_getUnconsciousCondition.sqf b/addons/medical/functions/fnc_getUnconsciousCondition.sqf index 19d3bdec1d..c354dd6ebd 100644 --- a/addons/medical/functions/fnc_getUnconsciousCondition.sqf +++ b/addons/medical/functions/fnc_getUnconsciousCondition.sqf @@ -14,7 +14,7 @@ #include "script_component.hpp" private ["_unit","_return"]; -_unit = _this select 0; +params ["_unit"]; if (isnil QGVAR(unconsciousConditions)) then { GVAR(unconsciousConditions) = []; @@ -25,6 +25,6 @@ _return = false; if (typeName _x == typeName {} && {([_unit] call _x)}) exitwith { _return = true; }; -}foreach GVAR(unconsciousConditions); +} foreach GVAR(unconsciousConditions); -_return; +_return diff --git a/addons/medical/functions/fnc_handleBandageOpening.sqf b/addons/medical/functions/fnc_handleBandageOpening.sqf index a86077cb3b..4a32adb9e5 100644 --- a/addons/medical/functions/fnc_handleBandageOpening.sqf +++ b/addons/medical/functions/fnc_handleBandageOpening.sqf @@ -18,13 +18,8 @@ #include "script_component.hpp" -private ["_target", "_impact", "_part", "_injuryIndex", "_injury", "_bandage", "_classID", "_className", "_reopeningChance", "_reopeningMinDelay", "_reopeningMaxDelay", "_config", "_woundTreatmentConfig", "_bandagedWounds", "_exist", "_injuryId", "_existingInjury", "_delay", "_openWounds", "_selectedInjury", "_bandagedInjury"]; -_target = _this select 0; -_impact = _this select 1; -_part = _this select 2; -_injuryIndex = _this select 3; -_injury = _this select 4; -_bandage = _this select 5; +private ["_className", "_reopeningChance", "_reopeningMinDelay", "_reopeningMaxDelay", "_config", "_woundTreatmentConfig", "_bandagedWounds", "_exist", "_injuryId", "_existingInjury", "_delay", "_openWounds", "_selectedInjury", "_bandagedInjury"]; +params ["_target", "_impact", "_part", "_injuryIndex", "_injury", "_bandage"]; _classID = _injury select 1; _className = GVAR(woundClassNames) select _classID; @@ -57,8 +52,8 @@ if (isClass (_config >> _className)) then { }; _bandagedWounds = _target getvariable [QGVAR(bandagedWounds), []]; -_exist = false; _injuryType = _injury select 1; +_exist = false; _bandagedInjury = []; { if ((_x select 1) == _injuryType && (_x select 2) == (_injury select 2)) exitwith { @@ -69,7 +64,7 @@ _bandagedInjury = []; _bandagedInjury = _existingInjury; }; -}foreach _bandagedWounds; +} foreach _bandagedWounds; if !(_exist) then { // [ID, classID, bodypart, percentage treated, bloodloss rate] @@ -83,12 +78,8 @@ _target setvariable [QGVAR(bandagedWounds), _bandagedWounds, true]; if (random(1) <= _reopeningChance) then { _delay = _reopeningMinDelay + random(_reopeningMaxDelay - _reopeningMinDelay); [{ - private ["_target", "_impact", "_part", "_injuryIndex", "_bandage", "_injury", "_openWounds", "_selectedInjury","_bandagedWounds","_exist"]; - _target = _this select 0; - _impact = _this select 1; - _part = _this select 2; - _injuryIndex = _this select 3; - _injury = _this select 4; + private ["_bandage", "_openWounds", "_selectedInjury","_bandagedWounds","_exist"]; + params ["_target", "_impact", "_part", "_injuryIndex", "_injury"]; //if (alive _target) then { _openWounds = _target getvariable [QGVAR(openWounds), []]; @@ -108,7 +99,7 @@ if (random(1) <= _reopeningChance) then { _existingInjury set [3, ((_existingInjury select 3) - _impact) max 0]; _bandagedWounds set [_foreachIndex, _existingInjury]; }; - }foreach _bandagedWounds; + } foreach _bandagedWounds; if (_exist) then { _target setvariable [QGVAR(bandagedWounds), _bandagedWounds, true]; diff --git a/addons/medical/functions/fnc_handleCreateLitter.sqf b/addons/medical/functions/fnc_handleCreateLitter.sqf index d7595ec439..31e65218c2 100644 --- a/addons/medical/functions/fnc_handleCreateLitter.sqf +++ b/addons/medical/functions/fnc_handleCreateLitter.sqf @@ -1,9 +1,22 @@ -//#define DEBUG_MODE_FULL +/* + * Author: Glowbal + * handle Litter Create + * + * Arguments: + * 0: Litter Class + * 1: Position + * 2: Unit + * + * Return Value: + * None + * + * Public: No + */ #include "script_component.hpp" if(!hasInterface) exitWith { false }; -PARAMS_3(_litterClass,_position,_direction); +params ["_litterClass", "_position", "_unit"]; private["_litterObject", "_maxLitterCount"]; //IGNORE_PRIVATE_WARNING(_values); @@ -16,9 +29,9 @@ _litterObject = _litterClass createVehicleLocal _position; _litterObject setDir _direction; _litterObject setPosATL _position; // Move the litter next frame to get rid of HORRIBLE spacing, fixes #1112 -[{ (_this select 0) setPosATL (_this select 1); }, [_litterObject, _position]] call EFUNC(common,execNextFrame); - -_maxLitterCount = getArray (configFile >> "ACE_Settings" >> QGVAR(litterSimulationDetail) >> "_values") select GVAR(litterSimulationDetail); +[{ params ["_object", "_pos"]; _object setPosATL _pos; }, [_litterObject, _position]] call EFUNC(common,execNextFrame); + +_maxLitterCount = getArray (configFile >> "ACE_Settings" >> QGVAR(litterSimulationDetail) >> "_values") select GVAR(litterSimulationDetail); if((count GVAR(allCreatedLitter)) > _maxLitterCount ) then { // gank the first litter object, and spawn ours. private["_oldLitter"]; @@ -34,10 +47,11 @@ if(!GVAR(litterPFHRunning) && {GVAR(litterCleanUpDelay) > 0}) then { GVAR(litterPFHRunning) = true; [{ { - if (ACE_time - (_x select 0) >= GVAR(litterCleanUpDelay)) then { + _x params ["_time", "_objects"]; + if (ACE_time - _time >= GVAR(litterCleanUpDelay)) then { { deleteVehicle _x; - } forEach (_x select 1); + } forEach _objects; GVAR(allCreatedLitter) set[_foreachIndex, objNull]; }; } forEach GVAR(allCreatedLitter); @@ -46,8 +60,6 @@ if(!GVAR(litterPFHRunning) && {GVAR(litterCleanUpDelay) > 0}) then { if ( (count GVAR(allCreatedLitter)) == 0) exitwith { [(_this select 1)] call CBA_fnc_removePerFrameHandler; GVAR(litterPFHRunning) = false; - }; + }; }, 30, []] call CBA_fnc_addPerFrameHandler; }; - -true \ No newline at end of file diff --git a/addons/medical/functions/fnc_handleDamage.sqf b/addons/medical/functions/fnc_handleDamage.sqf index a4e5525276..1a58e2ed01 100644 --- a/addons/medical/functions/fnc_handleDamage.sqf +++ b/addons/medical/functions/fnc_handleDamage.sqf @@ -1,5 +1,5 @@ -/* - * Author: KoffeinFlummi, Glowbal + /* + * Author: KoffeinFlummi, Glowbal, commy2 * Main HandleDamage EH function. * * Arguments: @@ -14,74 +14,79 @@ * * Public: No */ - #include "script_component.hpp" -private ["_unit", "_selection", "_damage", "_shooter", "_projectile", "_damageReturn", "_typeOfDamage", "_minLethalDamage", "_newDamage", "_typeIndex", "_preventDeath"]; -_unit = _this select 0; -_selection = _this select 1; -_damage = _this select 2; -_shooter = _this select 3; -_projectile = _this select 4; +params ["_unit", "_selection", "_damage", "_shooter", "_projectile"]; +TRACE_5("ACE_DEBUG: HandleDamage Called",_unit, _selection, _damage, _shooter, _projectile); -if !(local _unit) exitWith {nil}; +// bug, apparently can fire for remote units in special cases +if !(local _unit) exitWith { + TRACE_2("ACE_DEBUG: HandleDamage on remote unit!",_unit, isServer); + nil +}; +private ["_damageReturn", "_typeOfDamage", "_minLethalDamage", "_newDamage", "_typeIndex", "_preventDeath"]; + +// bug, assumed fixed, @todo excessive testing, if nothing happens remove if (typeName _projectile == "OBJECT") then { _projectile = typeOf _projectile; _this set [4, _projectile]; }; -// If the damage is being weird, we just tell it to fuck off. -if !(_selection in (GVAR(SELECTIONS) + [""])) exitWith {0}; +TRACE_3("ACE_DEBUG: HandleDamage",_selection,_damage,_unit); + +// If damage is in dummy hitpoints, "hands" and "legs", don't change anything +if (_selection == "hands") exitWith {_unit getHit "hands"}; +if (_selection == "legs") exitWith {_unit getHit "legs"}; + +// If the damage is being weird, we just tell it to fuck off. Ignore: "hands", "legs", "?" +if (_selection != "" && {!(_selection in GVAR(SELECTIONS))}) exitWith {0}; //@todo "neck", "pelvis", "spine1", "spine2", "spine3" // Exit if we disable damage temporarily -_damageOld = damage _unit; -if (_selection in GVAR(SELECTIONS)) then { - _damageOld = _unit getHit _selection; +if !(_unit getVariable [QGVAR(allowDamage), true]) exitWith { + TRACE_3("ACE_DEBUG: HandleDamage damage disabled.",_selection,damage _unit,_unit); + if (_selection == "") then { + damage _unit + } else { + _unit getHit _selection + }; }; -if !(_unit getVariable [QGVAR(allowDamage), true]) exitWith {_damageOld}; // Get return damage _damageReturn = _damage; -if (GVAR(level) < 2) then { - _damageReturn = _this call FUNC(handleDamage_basic); + +_newDamage = _this call FUNC(handleDamage_caching); +// handleDamage_caching may have modified the projectile string +_typeOfDamage = [_projectile] call FUNC(getTypeOfDamage); + +TRACE_3("ACE_DEBUG: HandleDamage caching new damage",_selection,_newDamage,_unit); + +_typeIndex = (GVAR(allAvailableDamageTypes) find _typeOfDamage); +_minLethalDamage = if (_typeIndex >= 0) then { + GVAR(minLethalDamages) select _typeIndex } else { - if !([_unit] call FUNC(hasMedicalEnabled)) exitwith { - // Because of the config changes, we cannot properly disable the medical system for a unit. - // lets use basic for the ACE_time being.. - _damageReturn = _this call FUNC(handleDamage_basic); - }; - _newDamage = _this call FUNC(handleDamage_caching); - // handleDamage_caching may have modified the projectile string - _projectile = _this select 4; - _typeOfDamage = [_projectile] call FUNC(getTypeOfDamage); + 0.01 +}; - _typeIndex = (GVAR(allAvailableDamageTypes) find _typeOfDamage); - _minLethalDamage = 0.01; - if (_typeIndex >= 0) then { - _minLethalDamage = GVAR(minLethalDamages) select _typeIndex; +if (vehicle _unit != _unit && {!(vehicle _unit isKindOf "StaticWeapon")} && {isNull _shooter} && {_projectile == ""} && {_selection == ""}) then { + if (GVAR(enableVehicleCrashes)) then { + _selection = GVAR(SELECTIONS) select (floor(random(count GVAR(SELECTIONS)))); }; +}; - if (vehicle _unit != _unit && {!(vehicle _unit isKindOf "StaticWeapon")} && {isNull _shooter} && {_projectile == ""} && {_selection == ""}) then { - if (GVAR(enableVehicleCrashes)) then { - _selection = GVAR(SELECTIONS) select (floor(random(count GVAR(SELECTIONS)))); - }; +if ((_minLethalDamage <= _newDamage) && {[_unit, [_selection] call FUNC(selectionNameToNumber), _newDamage] call FUNC(determineIfFatal)}) then { + if ((_unit getVariable [QGVAR(preventInstaDeath), GVAR(preventInstaDeath)])) exitwith { + _damageReturn = 0.9; }; - - if ((_minLethalDamage <= _newDamage) && {[_unit, [_selection] call FUNC(selectionNameToNumber), _newDamage] call FUNC(determineIfFatal)}) then { - if ((_unit getVariable [QGVAR(preventInstaDeath), GVAR(preventInstaDeath)])) exitwith { - _damageReturn = 0.9; - }; - if ([_unit] call FUNC(setDead)) then { - _damageReturn = 1; - } else { - _damageReturn = _damageReturn min 0.89; - }; + if ([_unit] call FUNC(setDead)) then { + _damageReturn = 1; } else { _damageReturn = _damageReturn min 0.89; }; - +} else { + _damageReturn = _damageReturn min 0.89; }; + [_unit] call FUNC(addToInjuredCollection); if (_unit getVariable [QGVAR(preventInstaDeath), GVAR(preventInstaDeath)]) exitWith { @@ -123,4 +128,6 @@ if (((_unit getVariable [QGVAR(enableRevive), GVAR(enableRevive)]) > 0) && {_dam 0.89; }; -_damageReturn; +TRACE_3("ACE_DEBUG: HandleDamage damage return",_selection,_damageReturn,_unit); + +_damageReturn diff --git a/addons/medical/functions/fnc_handleDamage_advanced.sqf b/addons/medical/functions/fnc_handleDamage_advanced.sqf index e617738a90..5035fbe282 100644 --- a/addons/medical/functions/fnc_handleDamage_advanced.sqf +++ b/addons/medical/functions/fnc_handleDamage_advanced.sqf @@ -12,23 +12,16 @@ * 6: Type of Damage * * Return Value: - * Nothing + * None * * Public: No */ #include "script_component.hpp" -private ["_unit","_selectionName","_amountOfDamage","_sourceOfDamage","_typeOfProjectile","_typeOfDamage", "_part", "_damageBodyParts", "_newDamage", "_hitPoints"]; -_unit = _this select 0; -_selectionName = _this select 1; -_amountOfDamage = _this select 2; -_sourceOfDamage = _this select 3; -_typeOfProjectile = _this select 4; -_newDamage = _this select 5; +private ["_typeOfProjectile", "_part", "_damageBodyParts", "_hitPoints"]; +params ["_unit", "_selectionName", "_amountOfDamage", "_sourceOfDamage", "_typeOfProjectile", "_hitPointNumber", "_newDamage"]; -// Most likely taking exessive fire damage. Lets exit. -if (isNull _sourceOfDamage && {_typeOfProjectile == ""} && {vehicle _unit == _unit} && {(_selectionName == "head" || isBurning _unit)}) exitwith {}; _part = [_selectionName] call FUNC(selectionNameToNumber); if (_part < 0) exitwith {}; @@ -40,6 +33,7 @@ _damageBodyParts set [_part, (_damageBodyParts select _part) + _newDamage]; _unit setvariable [QGVAR(bodyPartStatus), _damageBodyParts, true]; _typeOfDamage = [_typeOfProjectile] call FUNC(getTypeOfDamage); + [_unit, _selectionName, _newDamage, _typeOfProjectile, _typeOfDamage] call FUNC(handleDamage_assignWounds); // TODO Disabled until implemented fully diff --git a/addons/medical/functions/fnc_handleDamage_advancedSetDamage.sqf b/addons/medical/functions/fnc_handleDamage_advancedSetDamage.sqf index 3df8a5ce0c..bac5a32976 100644 --- a/addons/medical/functions/fnc_handleDamage_advancedSetDamage.sqf +++ b/addons/medical/functions/fnc_handleDamage_advancedSetDamage.sqf @@ -6,23 +6,23 @@ * 0: Unit for which the hitpoint damage will be sorted out * * Return Value: - * nil + * None * * Public: No */ #include "script_component.hpp" -PARAMS_1(_unit); +params ["_unit"]; if (!local _unit) exitwith {}; -private ["_bodyStatus", "_headDamage", "_torsoDamage", "_handsDamage", "_legsDamage"]; +private "_bodyStatus"; // ["head", "body", "hand_l", "hand_r", "leg_l", "leg_r"] _bodyStatus = _unit getVariable [QGVAR(bodyPartStatus), [0,0,0,0,0,0]]; -EXPLODE_6_PVT(_bodyStatus,_headDamage,_torsoDamage,_handsDamageR,_handsDamageL,_legsDamageR,_legsDamageL); +_bodyStatus params ["_headDamage", "_torsoDamage", "_handsDamageR", "_handsDamageL", "_legsDamageR", "_legsDamageL"]; _unit setHitPointDamage ["hitHead", _headDamage min 0.95]; _unit setHitPointDamage ["hitBody", _torsoDamage min 0.95]; diff --git a/addons/medical/functions/fnc_handleDamage_airway.sqf b/addons/medical/functions/fnc_handleDamage_airway.sqf index bc220eaad9..8b627faae1 100644 --- a/addons/medical/functions/fnc_handleDamage_airway.sqf +++ b/addons/medical/functions/fnc_handleDamage_airway.sqf @@ -10,19 +10,15 @@ * 4: Type of the damage done * * Return Value: - * None + * None * * Public: No */ #include "script_component.hpp" -private ["_unit", "_selectionName", "_amountOfDamage", "_sourceOfDamage", "_typeOfDamage", "_bodyPartn"]; -_unit = _this select 0; -_selectionName = _this select 1; -_amountOfDamage = _this select 2; -_sourceOfDamage = _this select 3; -_typeOfDamage = _this select 4; +private "_bodyPartn"; +params ["_unit", "_selectionName", "_amountOfDamage", "_sourceOfDamage", "_typeOfDamage"]; _bodyPartn = [_selectionName] call FUNC(selectionNameToNumber); if (_bodyPartn > 1) exitwith {}; diff --git a/addons/medical/functions/fnc_handleDamage_basic.sqf b/addons/medical/functions/fnc_handleDamage_basic.sqf index 04049cfa7c..92fc97c717 100644 --- a/addons/medical/functions/fnc_handleDamage_basic.sqf +++ b/addons/medical/functions/fnc_handleDamage_basic.sqf @@ -1,192 +1,60 @@ /* - * Author: KoffeinFlummi - * Basic HandleDamage EH function. + * Author: KoffeinFlummi, Glowbal + * Handle damage basic medical * * Arguments: - * 0: Unit That Was Hit - * 1: Name Of Hit Selection - * 2: Amount Of Damage - * 3: Shooter - * 4: Projectile - * 5: Current damage to be returned * * Return Value: - * Damage To Be Inflicted + * * * Public: No */ #include "script_component.hpp" -#define LEGDAMAGETRESHOLD1 1 -#define LEGDAMAGETRESHOLD2 1.7 -#define ARMDAMAGETRESHOLD1 1 -#define ARMDAMAGETRESHOLD2 1.7 -#define UNCONSCIOUSNESSTRESHOLD 0.7 +private ["_damageBodyParts", "_cache_params", "_cache_damages"]; +params ["_target"]; +TRACE_1("ACE_DEBUG: HandleDamage_BASIC Called",_target); -private ["_unit", "_selectionName", "_damage", "_shooter", "_projectile", "_damage", "_armdamage", "_hitPoint", "_index", "_legdamage", "_newDamage", "_otherDamage", "_pain", "_restore"]; +_damageBodyParts = _target getvariable [QGVAR(bodyPartStatus), [0,0,0,0,0,0]]; +_cache_params = _target getVariable [QGVAR(cachedHandleDamageParams), []]; +_cache_damages = _target getVariable QGVAR(cachedDamages); -_unit = _this select 0; -_selectionName = _this select 1; -_damage = _this select 2; -_shooter = _this select 3; -_projectile = _this select 4; +TRACE_4("ACE_DEBUG: HandleDamage BASIC",_unit, _damageBodyParts,_cache_params,_cache_damages); -// Apply damage treshold / coefficient -_threshold = [ - _unit getVariable [QGVAR(damageThreshold), GVAR(AIDamageThreshold)], - _unit getVariable [QGVAR(damageThreshold), GVAR(playerDamageThreshold)] -] select ([_unit] call EFUNC(common,isPlayer)); -_damage = _damage * (1 / _threshold); +{ + _x params ["_unit","_selectionName","_amountOfDamage","_sourceOfDamage","_typeOfProjectile","_typeOfDamage"]; + if !(isNull _sourceOfDamage && {_typeOfProjectile == ""} && {vehicle _unit == _unit} && {(_selectionName == "head" || isBurning _unit)}) then { + _part = [_selectionName] call FUNC(selectionNameToNumber); + if (_part < 0) exitwith {}; -// This is a new hit, reset variables. -// Note: sometimes handleDamage spans over 2 or even 3 frames. -if (diag_frameno > (_unit getVariable [QGVAR(basic_frameNo), -3]) + 2) then { - _unit setVariable [QGVAR(basic_frameNo), diag_frameno]; - _unit setVariable [QGVAR(isFalling), false]; - _unit setVariable [QGVAR(projectiles), []]; - _unit setVariable [QGVAR(hitPoints), []]; - _unit setVariable [QGVAR(damages), []]; - _unit setVariable [QGVAR(structDamage), 0]; + private ["_newDamage", "_pain"]; + _newDamage = (_cache_damages select _foreachIndex); + _damageBodyParts set [_part, (_damageBodyParts select _part) + _newDamage]; + _unit setvariable [QGVAR(bodyPartStatus), _damageBodyParts]; - if (isnil {_unit getvariable QGVAR(structDamagePFH)}) then { - // Assign orphan structural damage to torso - [{ - private ["_unit", "_damagesum"]; - _unit = (_this select 0) select 0; - if (ACE_diagTime - (_unit getvariable [QGVAR(structDamagePFH),-2]) >= 2) then { - _unit setVariable [QGVAR(structDamagePFH), nil]; - _damagesum = (_unit getHitPointDamage "HitHead") + - (_unit getHitPointDamage "HitBody") + - (_unit getHitPointDamage "HitLeftArm") + - (_unit getHitPointDamage "HitRightArm") + - (_unit getHitPointDamage "HitLeftLeg") + - (_unit getHitPointDamage "HitRightLeg"); - if (_damagesum < 0.06 and damage _unit > 0.06 and alive _unit) then { - _unit setHitPointDamage ["HitBody", damage _unit]; - }; - [(_this select 1)] call cba_fnc_removePerFrameHandler; + if (alive _unit && {!(_unit getvariable ["ACE_isUnconscious", false])}) then { + // If it reaches this, we can assume that the hit did not kill this unit, as this function is called 3 frames after the damage has been passed. + if ([_unit, _part, if (_part > 1) then {_newDamage * 1.3} else {_newDamage * 2}] call FUNC(determineIfFatal)) then { + [_unit, true, 0.5+random(10)] call FUNC(setUnconscious); }; - }, 0, [_unit]] call CBA_fnc_addPerFrameHandler; - }; - _unit setVariable [QGVAR(structDamagePFH), ACE_diagTime]; // Assign starting ACE_time or reset it -}; - -_newDamage = _damage - (damage _unit); -if (_selectionName in GVAR(SELECTIONS)) then { - _newDamage = _damage - (_unit getHitPointDamage (GVAR(HITPOINTS) select (GVAR(SELECTIONS) find _selectionName))); -}; - -_damage = _damage - _newDamage; - - -// Exclude falling damage to everything other than legs and reduce it overall. -if (((velocity _unit) select 2 < -5) and (vehicle _unit == _unit)) then { - _unit setVariable [QGVAR(isFalling), true]; -}; -if (_unit getVariable [QGVAR(isFalling), false] and !(_selectionName in ["", "leg_l", "leg_r"])) exitWith { - (_unit getHitPointDamage (GVAR(HITPOINTS) select (GVAR(SELECTIONS) find _selectionName))) max 0.01; -}; -if (_unit getVariable [QGVAR(isFalling), false]) then { - _newDamage = _newDamage * 0.7; -}; - - -// Make sure there's only one damaged selection per projectile per frame. -if (_selectionName != "" and !(_unit getVariable QGVAR(isFalling))) then { - _cache_projectiles = _unit getVariable QGVAR(projectiles); - _cache_hitpoints = _unit getVariable QGVAR(hitPoints); - _cache_damages = _unit getVariable QGVAR(damages); - if (_projectile in _cache_projectiles) then { - _index = _cache_projectiles find _projectile; - _otherDamage = (_cache_damages select _index); - if (_otherDamage > _newDamage) then { - _newDamage = 0; - } else { - _hitPoint = _cache_hitpoints select _index; - _restore = ((_unit getHitPointDamage _hitPoint) - _otherDamage) max 0; - _unit setHitPointDamage [_hitPoint, _restore]; - // Make entry unfindable - _cache_projectiles set [_index, objNull]; - _cache_projectiles pushBack _projectile; - _cache_hitpoints pushBack (GVAR(HITPOINTS) select (GVAR(SELECTIONS) find _selectionName)); - _cache_damages pushBack _newDamage; }; - } else { - _cache_projectiles pushBack _projectile; - _cache_hitpoints pushBack (GVAR(HITPOINTS) select (GVAR(SELECTIONS) find _selectionName)); - _cache_damages pushBack _newDamage; + _pain = _unit getVariable [QGVAR(pain), 0]; + _pain = _pain + (_newDamage / 4) * (1 - (_unit getVariable [QGVAR(morphine), 0])); + _unit setVariable [QGVAR(pain), _pain min 1, true]; }; - _unit setVariable [QGVAR(projectiles), _cache_projectiles]; - _unit setVariable [QGVAR(hitPoints), _cache_hitpoints]; - _unit setVariable [QGVAR(damages), _cache_damages]; -}; +}foreach _cache_params; -// Get rid of double structural damage (seriously arma, what the fuck?) -if (_selectionName == "") then { - _cache_structDamage = _unit getVariable QGVAR(structDamage); - if (_newDamage > _cache_structDamage) then { - _unit setVariable [QGVAR(structDamage), _newDamage]; - _newDamage = _newDamage - _cache_structDamage; - } else { - _newDamage = 0; - }; -}; +// We broadcast the value across the net here, in order to avoid broadcasting it multiple times earlier in the above code block +_target setvariable [QGVAR(bodyPartStatus), _damageBodyParts, true]; +TRACE_2("ACE_DEBUG: HandleDamage BASIC Broadcast value here",_unit, _target getvariable QGVAR(bodyPartStatus)); -if (_selectionName == "") then { - _damage = _damage + (_unit getVariable QGVAR(structDamage)); -} else { - _damage = _damage + _newDamage; -}; +EXPLODE_6_PVT(_damageBodyParts,_headDamage,_torsoDamage,_handsDamageR,_handsDamageL,_legsDamageR,_legsDamageL); +_target setHitPointDamage ["hitHead", _headDamage min 0.95]; +_target setHitPointDamage ["hitBody", _torsoDamage min 0.95]; +_target setHitPointDamage ["hitHands", (_handsDamageR + _handsDamageL) min 0.95]; +_target setHitPointDamage ["hitLegs", (_legsDamageR + _legsDamageL) min 0.95]; -// Leg Damage -_legdamage = (_unit getHitPointDamage "HitLeftLeg") + (_unit getHitPointDamage "HitRightLeg"); -if (_selectionName == "leg_l") then { - _legdamage = _damage + (_unit getHitPointDamage "HitRightLeg"); -}; -if (_selectionName == "leg_r") then { - _legdamage = (_unit getHitPointDamage "HitLeftLeg") + _damage; -}; - -if (_legdamage >= LEGDAMAGETRESHOLD1) then { - _unit setHitPointDamage ["HitLegs", 1]; -} else { - _unit setHitPointDamage ["HitLegs", 0]; -}; -// @todo: force prone for completely fucked up legs. - - -// Arm Damage -_armdamage = (_unit getHitPointDamage "HitLeftArm") + (_unit getHitPointDamage "HitRightArm"); -if (_selectionName == "hand_l") then { - _armdamage = _damage + (_unit getHitPointDamage "HitRightArm"); -}; -if (_selectionName == "hand_r") then { - _armdamage = (_unit getHitPointDamage "HitLeftArm") + _damage; -}; - -if (_armdamage >= ARMDAMAGETRESHOLD1) then { - _unit setHitPointDamage ["HitHands", 1]; -} else { - _unit setHitPointDamage ["HitHands", 0]; -}; -// @todo: Drop weapon for full damage. - - -// Set Pain -if (_selectionName == "") then { - _pain = _unit getVariable [QGVAR(pain), 0]; - _pain = _pain + _newDamage * (1 - (_unit getVariable [QGVAR(morphine), 0])); - _unit setVariable [QGVAR(pain), _pain min 1, true]; -}; - -// Unconsciousness -if (_selectionName == "" and - _damage >= UNCONSCIOUSNESSTRESHOLD and - _damage < 1 and - !(_unit getVariable ["ACE_isUnconscious", False] -)) then { - [_unit, true] call FUNC(setUnconscious); -}; - -_damage +{ + _target setHitPointDamage [_x, (_damageBodyParts select _foreachIndex) min 0.95]; +}foreach GVAR(HITPOINTS); diff --git a/addons/medical/functions/fnc_handleDamage_caching.sqf b/addons/medical/functions/fnc_handleDamage_caching.sqf index 99816ee274..910221a850 100644 --- a/addons/medical/functions/fnc_handleDamage_caching.sqf +++ b/addons/medical/functions/fnc_handleDamage_caching.sqf @@ -18,13 +18,9 @@ #include "script_component.hpp" -private ["_unit", "_selectionName", "_damage", "_source", "_projectile", "_hitSelections", "_hitPoints", "_impactVelocity", "_newDamage", "_cache_hitpoints", "_cache_projectiles", "_cache_params", "_cache_damages"]; -_unit = _this select 0; -_selectionName = _this select 1; -_damage = _this select 2; -_source = _this select 3; -_projectile = _this select 4; - +private ["_hitSelections", "_hitPoints", "_impactVelocity", "_newDamage", "_cache_hitpoints", "_cache_projectiles", "_cache_params", "_cache_damages"]; +params ["_unit", "_selectionName", "_damage", "_source", "_projectile"]; +TRACE_8("ACE_DEBUG: HandleDamage_Caching Called",_unit, _selectionName, _damage, _source, _projectile,GVAR(SELECTIONS),GVAR(HITPOINTS),damage _unit); _hitSelections = GVAR(SELECTIONS); _hitPoints = GVAR(HITPOINTS); @@ -78,21 +74,23 @@ if (diag_frameno > (_unit getVariable [QGVAR(frameNo_damageCaching), -3]) + 2) t // handle the cached damages 3 frames later [{ private ["_args", "_params"]; - _args = _this select 0; + params ["_args", "_idPFH"]; + _args params ["_unit", "_frameno"]; + if (diag_frameno >= _frameno + 2) then { + _unit setDamage 0; - if (diag_frameno > (_args select 1) + 2) then { - (_args select 0) setDamage 0; - - _cache_params = (_args select 0) getVariable [QGVAR(cachedHandleDamageParams), []]; - _cache_damages = (_args select 0) getVariable QGVAR(cachedDamages); - { - _params = _x + [_cache_damages select _foreachIndex]; - _params call FUNC(handleDamage_advanced); - }foreach _cache_params; - - [(_args select 0)] call FUNC(handleDamage_advancedSetDamage); - - [(_this select 1)] call cba_fnc_removePerFrameHandler; + if (GVAR(level) < 2 || {!([_unit] call FUNC(hasMedicalEnabled))}) then { + [_unit] call FUNC(handleDamage_basic); + } else { + _cache_params = _unit getVariable [QGVAR(cachedHandleDamageParams), []]; + _cache_damages = _unit getVariable QGVAR(cachedDamages); + { + _params = _x + [_cache_damages select _foreachIndex]; + _params call FUNC(handleDamage_advanced); + } foreach _cache_params; + [_unit] call FUNC(handleDamage_advancedSetDamage); + }; + [_idPFH] call CBA_fnc_removePerFrameHandler; }; }, 0, [_unit, diag_frameno] ] call CBA_fnc_addPerFrameHandler; @@ -152,4 +150,6 @@ if (_selectionName != "") then { _unit setVariable [QGVAR(cachedHandleDamageParams), _cache_params]; }; -_newDamage; +TRACE_8("ACE_DEBUG: HandleDamage_Caching",_unit, _newDamage, _cache_params, _cache_damages, _unit getVariable QGVAR(cachedProjectiles), _unit getVariable QGVAR(cachedHitPoints), _unit getVariable QGVAR(cachedDamages), _unit getVariable QGVAR(cachedHandleDamageParams)); + +_newDamage diff --git a/addons/medical/functions/fnc_handleDamage_fractures.sqf b/addons/medical/functions/fnc_handleDamage_fractures.sqf index 31fa1c8873..46000dbbdf 100644 --- a/addons/medical/functions/fnc_handleDamage_fractures.sqf +++ b/addons/medical/functions/fnc_handleDamage_fractures.sqf @@ -17,12 +17,8 @@ #include "script_component.hpp" -private ["_unit", "_selectionName", "_amountOfDamage", "_sourceOfDamage", "_typeOfDamage", "_bodyPartn", "_fractures", "_fractureType"]; -_unit = _this select 0; -_selectionName = _this select 1; -_amountOfDamage = _this select 2; -_sourceOfDamage = _this select 3; -_typeOfDamage = _this select 4; +private ["_bodyPartn", "_fractures", "_fractureType"]; +params ["_unit", "_selectionName", "_amountOfDamage", "_sourceOfDamage", "_typeOfDamage"]; _bodyPartn = [_selectionName] call FUNC(selectionNameToNumber); _fractureType = 1; diff --git a/addons/medical/functions/fnc_handleDamage_internalInjuries.sqf b/addons/medical/functions/fnc_handleDamage_internalInjuries.sqf index 6ee256a977..d8d9be1506 100644 --- a/addons/medical/functions/fnc_handleDamage_internalInjuries.sqf +++ b/addons/medical/functions/fnc_handleDamage_internalInjuries.sqf @@ -10,19 +10,15 @@ * 4: Type of the damage done * * Return Value: - * None + * None * * Public: No */ #include "script_component.hpp" -private ["_unit", "_selectionName", "_amountOfDamage", "_sourceOfDamage", "_typeOfDamage", "_bodyPartn"]; -_unit = _this select 0; -_selectionName = _this select 1; -_amountOfDamage = _this select 2; -_sourceOfDamage = _this select 3; -_typeOfDamage = _this select 4; +private "_bodyPartn"; +params ["_unit", "_selectionName", "_amountOfDamage", "_sourceOfDamage", "_typeOfDamage"]; _bodyPartn = [_selectionName] call FUNC(selectionNameToNumber); // TODO implement internal injuries diff --git a/addons/medical/functions/fnc_handleDamage_wounds.sqf b/addons/medical/functions/fnc_handleDamage_wounds.sqf index 70eeb74f9d..ae032e6d64 100644 --- a/addons/medical/functions/fnc_handleDamage_wounds.sqf +++ b/addons/medical/functions/fnc_handleDamage_wounds.sqf @@ -10,19 +10,16 @@ * 4: Type of the damage done * * Return Value: - * None + * None * * Public: No */ #include "script_component.hpp" -private ["_unit", "_selectionName", "_damage", "_typeOfProjectile", "_typeOfDamage", "_bodyPartn", "_injuryTypeInfo", "_allInjuriesForDamageType", "_allPossibleInjuries", "_highestPossibleDamage", "_highestPossibleSpot", "_minDamage", "_openWounds", "_woundID", "_toAddInjury", "_painToAdd", "_bloodLoss", "_bodyPartNToAdd", "_classType", "_damageLevels", "_foundIndex", "_i", "_injury", "_maxDamage", "_pain", "_painLevel", "_selections", "_toAddClassID", "_woundsCreated"]; -_unit = _this select 0; -_selectionName = _this select 1; -_damage = _this select 2; -_typeOfProjectile = _this select 3; -_typeOfDamage = _this select 4; +private ["_bodyPartn", "_injuryTypeInfo", "_allInjuriesForDamageType", "_allPossibleInjuries", "_highestPossibleDamage", "_highestPossibleSpot", "_minDamage", "_openWounds", "_woundID", "_toAddInjury", "_painToAdd", "_bloodLoss", "_bodyPartNToAdd", "_classType", "_damageLevels", "_foundIndex", "_i", "_injury", "_maxDamage", "_pain", "_painLevel", "_selections", "_toAddClassID", "_woundsCreated"]; +params ["_unit", "_selectionName", "_damage", "_typeOfProjectile", "_typeOfDamage"]; +TRACE_6("ACE_DEBUG: HandleDamage Called",_unit, _selectionName, _damage, _shooter, _typeOfProjectile,_typeOfDamage); // Administration for open wounds and ids _openWounds = _unit getvariable[QGVAR(openWounds), []]; @@ -43,7 +40,7 @@ _foundIndex = -1; if (_x select 1 == _toAddClassID && {_x select 2 == _bodyPartNToAdd}) exitwith { _foundIndex = _foreachIndex; }; - }foreach _openWounds; + } foreach _openWounds; if (_foundIndex < 0) then { // Since it is a new injury, we will have to add it to the open wounds array to store it @@ -53,7 +50,7 @@ _foundIndex = -1; _injury = _openWounds select _foundIndex; _injury set [3, (_injury select 3) + 1]; }; -}foreach _woundsCreated; +} foreach _woundsCreated; _unit setvariable [QGVAR(openWounds), _openWounds, true]; @@ -64,3 +61,4 @@ if (count _woundsCreated > 0) then { _painLevel = _unit getvariable [QGVAR(pain), 0]; _unit setvariable [QGVAR(pain), _painLevel + _painToAdd]; +TRACE_6("ACE_DEBUG: HandleDamage_WoundsOLD",_unit, _painLevel, _painToAdd, _unit getvariable QGVAR(pain), _unit getvariable QGVAR(openWounds),_woundsCreated); diff --git a/addons/medical/functions/fnc_handleDamage_woundsOld.sqf b/addons/medical/functions/fnc_handleDamage_woundsOld.sqf index 1034ba9cae..dc21012dd6 100644 --- a/addons/medical/functions/fnc_handleDamage_woundsOld.sqf +++ b/addons/medical/functions/fnc_handleDamage_woundsOld.sqf @@ -17,12 +17,9 @@ #include "script_component.hpp" -private ["_unit", "_selectionName", "_damage", "_typeOfProjectile", "_typeOfDamage", "_bodyPartn", "_injuryTypeInfo", "_allInjuriesForDamageType", "_allPossibleInjuries", "_highestPossibleDamage", "_highestPossibleSpot", "_minDamage", "_openWounds", "_woundID", "_toAddInjury", "_painToAdd", "_bloodLoss", "_bodyPartNToAdd", "_classType", "_damageLevels", "_foundIndex", "_i", "_injury", "_maxDamage", "_pain", "_painLevel", "_selections", "_toAddClassID", "_woundsCreated"]; -_unit = _this select 0; -_selectionName = _this select 1; -_damage = _this select 2; -_typeOfProjectile = _this select 3; -_typeOfDamage = _this select 4; +private ["_bodyPartn", "_injuryTypeInfo", "_allInjuriesForDamageType", "_allPossibleInjuries", "_highestPossibleDamage", "_highestPossibleSpot", "_minDamage", "_openWounds", "_woundID", "_toAddInjury", "_painToAdd", "_bloodLoss", "_bodyPartNToAdd", "_classType", "_damageLevels", "_foundIndex", "_i", "_injury", "_maxDamage", "_pain", "_painLevel", "_selections", "_toAddClassID", "_woundsCreated"]; +params ["_unit", "_selectionName", "_damage", "_typeOfProjectile", "_typeOfDamage"]; +TRACE_6("ACE_DEBUG: HandleDamage_WoundsOLD Called",_unit, _selectionName, _damage, _shooter, _typeOfProjectile,_typeOfDamage); // Convert the selectionName to a number and ensure it is a valid selection. _bodyPartn = [_selectionName] call FUNC(selectionNameToNumber); @@ -70,7 +67,7 @@ _allPossibleInjuries = []; _allPossibleInjuries pushback _x; }; }; -}foreach _allInjuriesForDamageType; +} foreach _allInjuriesForDamageType; // No possible wounds available for this damage type or damage amount. if (_highestPossibleSpot < 0) exitwith {}; @@ -98,7 +95,7 @@ _woundsCreated = []; if (_x select 1 == _toAddClassID && {_x select 2 == _bodyPartNToAdd}) exitwith { _foundIndex = _foreachIndex; }; - }foreach _openWounds; + } foreach _openWounds; }; _injury = []; @@ -123,21 +120,15 @@ _woundsCreated = []; _painToAdd = _painToAdd + (_toAddInjury select 3); }; }; -}foreach (_injuryTypeInfo select 0); // foreach damage thresholds +} foreach (_injuryTypeInfo select 0); // foreach damage thresholds -_unit setvariable [QGVAR(openWounds), _openWounds, !USE_WOUND_EVENT_SYNC]; +_unit setvariable [QGVAR(openWounds), _openWounds, true]; // Only update if new wounds have been created if (count _woundsCreated > 0) then { -// _unit setvariable [QGVAR(lastUniqueWoundID), _woundID, true]; -}; - -if (USE_WOUND_EVENT_SYNC) then { - // Broadcast the new injuries across the net in parts. One broadcast per injury. Prevents having to broadcast one massive array of injuries. - { - // ["medical_propagateWound", [_unit, _x]] call EFUNC(common,globalEvent); - }foreach _woundsCreated; + _unit setvariable [QGVAR(lastUniqueWoundID), _woundID, true]; }; _painLevel = _unit getvariable [QGVAR(pain), 0]; _unit setvariable [QGVAR(pain), _painLevel + _painToAdd]; +TRACE_6("ACE_DEBUG: HandleDamage_WoundsOLD",_unit, _painLevel, _painToAdd, _unit getvariable QGVAR(pain), _unit getvariable QGVAR(openWounds),_woundsCreated); diff --git a/addons/medical/functions/fnc_handleKilled.sqf b/addons/medical/functions/fnc_handleKilled.sqf index 5003ec189c..d6a4440d76 100644 --- a/addons/medical/functions/fnc_handleKilled.sqf +++ b/addons/medical/functions/fnc_handleKilled.sqf @@ -13,8 +13,8 @@ #include "script_component.hpp" -private["_unit", "_openWounds"]; -_unit = _this select 0; +private "_openWounds"; +params ["_unit"]; if (!local _unit) exitwith {}; _unit setvariable [QGVAR(pain), 0]; @@ -22,11 +22,4 @@ if (GVAR(level) >= 2) then { _unit setvariable [QGVAR(heartRate), 0]; _unit setvariable [QGVAR(bloodPressure), [0, 0]]; _unit setvariable [QGVAR(airwayStatus), 0]; - - if (USE_WOUND_EVENT_SYNC) then { - _openWounds = _unit getvariable [QGVAR(openWounds), []]; - { - ["medical_propagateWound", [_unit, _x]] call EFUNC(common,globalEvent); - }foreach _openWounds; - }; }; diff --git a/addons/medical/functions/fnc_handleLocal.sqf b/addons/medical/functions/fnc_handleLocal.sqf index c0f9c15292..50a30e90e8 100644 --- a/addons/medical/functions/fnc_handleLocal.sqf +++ b/addons/medical/functions/fnc_handleLocal.sqf @@ -15,9 +15,7 @@ #include "script_component.hpp" -private["_unit", "_local"]; -_unit = _this select 0; -_local = _this select 1; +params ["_unit", "_local"]; if (_local) then { if (_unit getvariable[QGVAR(addedToUnitLoop),false]) then { [_unit, true] call FUNC(addToInjuredCollection); diff --git a/addons/medical/functions/fnc_handleUnitVitals.sqf b/addons/medical/functions/fnc_handleUnitVitals.sqf index 0c7113f69a..fddf5489da 100644 --- a/addons/medical/functions/fnc_handleUnitVitals.sqf +++ b/addons/medical/functions/fnc_handleUnitVitals.sqf @@ -13,10 +13,9 @@ #include "script_component.hpp" -private ["_unit", "_heartRate","_bloodPressure","_bloodVolume","_painStatus", "_lastTimeValuesSynced", "_syncValues", "_airwayStatus", "_blood", "_bloodPressureH", "_bloodPressureL", "_interval"]; -_unit = _this select 0; -_interval = _this select 1; - +private ["_heartRate","_bloodPressure","_bloodVolume","_painStatus", "_lastTimeValuesSynced", "_syncValues", "_airwayStatus", "_blood"]; +params ["_unit", "_interval"]; +TRACE_3("ACE_DEBUG",_unit,_interval,_unit); if (_interval == 0) exitWith {}; _lastTimeValuesSynced = _unit getvariable [QGVAR(lastMomentValuesSynced), 0]; @@ -30,23 +29,28 @@ _bloodVolume = _bloodVolume max 0; _unit setvariable [QGVAR(bloodVolume), _bloodVolume, _syncValues]; +TRACE_3("ACE_DEBUG",_bloodVolume,_syncValues,_unit); // Set variables for synchronizing information across the net if (_bloodVolume < 100) then { if ((_bloodVolume < 90 && (GVAR(level) == 2)) || _bloodVolume <= 45) then { + TRACE_4("ACE_DEBUG_ADVANCED",_bloodVolume,_unit getVariable QGVAR(hasLostBlood),_syncValues,_unit); if (_unit getvariable [QGVAR(hasLostBlood), 0] != 2) then { _unit setvariable [QGVAR(hasLostBlood), 2, true]; }; } else { + TRACE_4("ACE_DEBUG", _bloodVolume,_unit getVariable QGVAR(hasLostBlood),_syncValues,_unit); if (_unit getvariable [QGVAR(hasLostBlood), 0] != 1) then { _unit setvariable [QGVAR(hasLostBlood), 1, true]; }; } } else { + TRACE_4("ACE_DEBUG",_bloodVolume,_unit getVariable QGVAR(hasLostBlood),_syncValues,_unit); if (_unit getvariable [QGVAR(hasLostBlood), 0] != 0) then { _unit setvariable [QGVAR(hasLostBlood), 0, true]; }; }; +TRACE_3("ACE_DEBUG",[_unit] call FUNC(getBloodLoss),_unit getVariable QGVAR(isBleeding),_unit); if (([_unit] call FUNC(getBloodLoss)) > 0) then { if !(_unit getvariable [QGVAR(isBleeding), false]) then { _unit setvariable [QGVAR(isBleeding), true, true]; @@ -58,6 +62,7 @@ if (([_unit] call FUNC(getBloodLoss)) > 0) then { }; _painStatus = _unit getvariable [QGVAR(pain), 0]; +TRACE_4("ACE_DEBUG",_painStatus,_unit getVariable QGVAR(hasPain),_unit getVariable QGVAR(painSuppress),_unit); if (_painStatus > (_unit getvariable [QGVAR(painSuppress), 0])) then { if !(_unit getvariable [QGVAR(hasPain), false]) then { _unit setvariable [QGVAR(hasPain), true, true]; @@ -69,6 +74,7 @@ if (_painStatus > (_unit getvariable [QGVAR(painSuppress), 0])) then { }; if (GVAR(level) == 1) then { + TRACE_5("ACE_DEBUG_BASIC_VITALS",_painStatus,_unit getVariable QGVAR(hasPain),_unit getVariable QGVAR(morphine),_syncValues,_unit); // reduce pain if (_painStatus > 0) then { _unit setVariable [QGVAR(pain), (_painStatus - 0.001 * _interval) max 0, _syncValues]; @@ -91,6 +97,7 @@ if (GVAR(level) == 1) then { // handle advanced medical, with vitals if (GVAR(level) >= 2) then { + TRACE_6("ACE_DEBUG_ADVANCED_VITALS",_painStatus,_bloodVolume, _unit getVariable QGVAR(hasPain),_unit getVariable QGVAR(morphine),_syncValues,_unit); if (_bloodVolume < 30) exitwith { [_unit] call FUNC(setDead); }; @@ -105,7 +112,7 @@ if (GVAR(level) >= 2) then { // Set the vitals _heartRate = (_unit getvariable [QGVAR(heartRate), 80]) + (([_unit] call FUNC(getHeartRateChange)) * _interval); - _unit setvariable [QGVAR(heartRate), _heartRate, _syncValues]; + _unit setvariable [QGVAR(heartRate), _heartRate max 0, _syncValues]; _bloodPressure = [_unit] call FUNC(getBloodPressure); _unit setvariable [QGVAR(bloodPressure), _bloodPressure, _syncValues]; @@ -114,7 +121,7 @@ if (GVAR(level) >= 2) then { _painReduce = if (_painStatus > 5) then {0.002} else {0.001}; _unit setVariable [QGVAR(pain), (_painStatus - _painReduce * _interval) max 0, _syncValues]; }; - + TRACE_8("ACE_DEBUG_ADVANCED_VITALS",_painStatus,_painReduce,_heartRate,_bloodVolume,_bloodPressure,_interval,_syncValues,_unit); // TODO Disabled until implemented fully // Handle airway /*if (GVAR(setting_allowAirwayInjuries)) then { @@ -140,8 +147,7 @@ if (GVAR(level) >= 2) then { // Check vitals for medical status // TODO check for in revive state instead of variable - _bloodPressureL = _bloodPressure select 0; - _bloodPressureH = _bloodPressure select 1; + _bloodPressure params ["_bloodPressureL", "_bloodPressureH"]; if (!(_unit getvariable [QGVAR(inCardiacArrest),false])) then { if (_heartRate < 10 || _bloodPressureH < 30 || _bloodVolume < 20) then { @@ -174,12 +180,13 @@ if (GVAR(level) >= 2) then { // syncing any remaining values if (_syncValues) then { + TRACE_3("ACE_DEBUG_IVBAGS_SYNC",GVAR(IVBags),_syncValues,_unit); { private "_value"; _value = _unit getvariable _x; if !(isnil "_value") then { _unit setvariable [_x,(_unit getvariable [_x, 0]), true]; }; - }foreach GVAR(IVBags); + } foreach GVAR(IVBags); }; }; diff --git a/addons/medical/functions/fnc_hasItem.sqf b/addons/medical/functions/fnc_hasItem.sqf index cfec633b55..df1a3828f5 100644 --- a/addons/medical/functions/fnc_hasItem.sqf +++ b/addons/medical/functions/fnc_hasItem.sqf @@ -16,19 +16,17 @@ #include "script_component.hpp" private ["_medic", "_patient", "_item", "_return", "_crew"]; -_medic = _this select 0; -_patient = _this select 1; -_item = _this select 2; +params ["_medic", "_patient", "_item"]; if (isnil QGVAR(setting_allowSharedEquipment)) then { GVAR(setting_allowSharedEquipment) = true; }; if (GVAR(setting_allowSharedEquipment) && {[_patient, _item] call EFUNC(common,hasItem)}) exitwith { - true; + true }; if ([_medic, _item] call EFUNC(common,hasItem)) exitwith { - true; + true }; _return = false; @@ -38,7 +36,7 @@ if ((vehicle _medic != _medic) && {[vehicle _medic] call FUNC(isMedicalVehicle)} if ([_medic, _x] call FUNC(canAccessMedicalEquipment) && {([_x, _item] call EFUNC(common,hasItem))}) exitwith { _return = true; }; - }foreach _crew; + } foreach _crew; }; -_return; +_return diff --git a/addons/medical/functions/fnc_hasItems.sqf b/addons/medical/functions/fnc_hasItems.sqf index ea16edebc4..dd53cb3337 100644 --- a/addons/medical/functions/fnc_hasItems.sqf +++ b/addons/medical/functions/fnc_hasItems.sqf @@ -16,9 +16,7 @@ #include "script_component.hpp" private ["_medic", "_patient", "_items", "_return"]; -_medic = _this select 0; -_patient = _this select 1; -_items = _this select 2; +params ["_medic", "_patient", "_items"]; _return = true; { @@ -31,4 +29,4 @@ _return = true; }; }foreach _items; -_return; +_return diff --git a/addons/medical/functions/fnc_hasMedicalEnabled.sqf b/addons/medical/functions/fnc_hasMedicalEnabled.sqf index 63fddd16b4..cbf40078fd 100644 --- a/addons/medical/functions/fnc_hasMedicalEnabled.sqf +++ b/addons/medical/functions/fnc_hasMedicalEnabled.sqf @@ -1,21 +1,27 @@ -/** - * fn_hasMedicalEnabled.sqf - * @Descr: Check if unit has CMS enabled. - * @Author: Glowbal - * - * @Arguments: [unit OBJECT] - * @Return: BOOL - * @PublicAPI: true - */ +/* + * Author: Glowbal + * Check if unit has CMS enabled + * + * Arguments: + * 0: unit + * + * Return Value: + * enabled + * + * Example: + * [Unit] call ace_medical_fnc_hasMedicalEnabled + * + * Public: No + */ #include "script_component.hpp" -private ["_unit", "_medicalEnabled"]; -_unit = _this select 0; +private "_medicalEnabled"; +params ["_unit"]; _medicalEnabled = _unit getvariable QGVAR(enableMedical); if (isnil "_medicalEnabled") exitwith { - (((GVAR(enableFor) == 0 && (isPlayer _unit || (_unit getvariable [QEGVAR(common,isDeadPlayer), false])))) || (GVAR(enableFor) == 1) || GVAR(level) == 1); + (((GVAR(enableFor) == 0 && (isPlayer _unit || (_unit getvariable [QEGVAR(common,isDeadPlayer), false])))) || (GVAR(enableFor) == 1) || GVAR(level) == 1) }; -_medicalEnabled; +_medicalEnabled diff --git a/addons/medical/functions/fnc_hasTourniquetAppliedTo.sqf b/addons/medical/functions/fnc_hasTourniquetAppliedTo.sqf index 6183854e45..955665233a 100644 --- a/addons/medical/functions/fnc_hasTourniquetAppliedTo.sqf +++ b/addons/medical/functions/fnc_hasTourniquetAppliedTo.sqf @@ -14,8 +14,6 @@ #include "script_component.hpp" -private ["_target", "_selectionName"]; -_target = _this select 0; -_selectionName = _this select 1; +params ["_target", "_selectionName"]; (((_target getvariable [QGVAR(tourniquets), [0,0,0,0,0,0]]) select ([_selectionName] call FUNC(selectionNameToNumber))) > 0); diff --git a/addons/medical/functions/fnc_init.sqf b/addons/medical/functions/fnc_init.sqf index 27d80163a5..bd97203f33 100644 --- a/addons/medical/functions/fnc_init.sqf +++ b/addons/medical/functions/fnc_init.sqf @@ -1,5 +1,5 @@ /* - * Author: KoffeinFlummi + * Author: KoffeinFlummi, commy2 * Initializes unit variables. * * Arguments: @@ -10,17 +10,17 @@ * * Public: No */ - #include "script_component.hpp" -private ["_unit", "_allUsedMedication", "_logs"]; - -_unit = _this select 0; +params ["_unit"]; +// basic _unit setVariable [QGVAR(pain), 0, true]; _unit setVariable [QGVAR(morphine), 0, true]; _unit setVariable [QGVAR(bloodVolume), 100, true]; +_unit setVariable ["ACE_isUnconscious", false, true]; +// advanced // tourniquets _unit setvariable [QGVAR(tourniquets), [0,0,0,0,0,0], true]; @@ -59,13 +59,14 @@ _unit setvariable [QGVAR(airwayCollapsed), false]; // generic medical admin _unit setvariable [QGVAR(addedToUnitLoop), false, true]; _unit setvariable [QGVAR(inCardiacArrest), false, true]; -_unit setVariable ["ACE_isUnconscious", false, true]; _unit setvariable [QGVAR(hasLostBlood), 0, true]; _unit setvariable [QGVAR(isBleeding), false, true]; _unit setvariable [QGVAR(hasPain), false, true]; _unit setvariable [QGVAR(amountOfReviveLives), GVAR(amountOfReviveLives), true]; _unit setvariable [QGVAR(painSuppress), 0, true]; +private ["_allUsedMedication", "_logs"]; + // medication _allUsedMedication = _unit getVariable [QGVAR(allUsedMedication), []]; { diff --git a/addons/medical/functions/fnc_isBeingCarried.sqf b/addons/medical/functions/fnc_isBeingCarried.sqf index 6505f8b51a..b47c5e475f 100644 --- a/addons/medical/functions/fnc_isBeingCarried.sqf +++ b/addons/medical/functions/fnc_isBeingCarried.sqf @@ -15,7 +15,7 @@ */ #include "script_component.hpp" -PARAMS_1(_target); +params ["_target"]; private "_owner"; diff --git a/addons/medical/functions/fnc_isBeingDragged.sqf b/addons/medical/functions/fnc_isBeingDragged.sqf index 4d09ed9e29..929b48ccb7 100644 --- a/addons/medical/functions/fnc_isBeingDragged.sqf +++ b/addons/medical/functions/fnc_isBeingDragged.sqf @@ -15,7 +15,7 @@ */ #include "script_component.hpp" -PARAMS_1(_target); +params ["_target"]; private "_owner"; diff --git a/addons/medical/functions/fnc_isInMedicalFacility.sqf b/addons/medical/functions/fnc_isInMedicalFacility.sqf index bed660a46a..34f1cf4244 100644 --- a/addons/medical/functions/fnc_isInMedicalFacility.sqf +++ b/addons/medical/functions/fnc_isInMedicalFacility.sqf @@ -13,8 +13,8 @@ #include "script_component.hpp" -private ["_unit","_eyePos","_objects","_isInBuilding","_medicalFacility"]; -_unit = _this select 0; +private ["_eyePos", "_objects", "_isInBuilding", "_medicalFacility"]; +params ["_unit"]; _eyePos = eyePos _unit; _isInBuilding = false; @@ -42,13 +42,13 @@ _objects = (lineIntersectsWith [_unit modelToWorldVisual [0, 0, (_eyePos select if (((typeOf _x) in _medicalFacility) || (_x getVariable [QGVAR(isMedicalFacility),false])) exitwith { _isInBuilding = true; }; -}foreach _objects; +} foreach _objects; if (!_isInBuilding) then { _objects = position _unit nearObjects 7.5; { if (((typeOf _x) in _medicalFacility) || (_x getVariable [QGVAR(isMedicalFacility),false])) exitwith { _isInBuilding = true; }; - }foreach _objects; + } foreach _objects; }; _isInBuilding; diff --git a/addons/medical/functions/fnc_isInMedicalVehicle.sqf b/addons/medical/functions/fnc_isInMedicalVehicle.sqf index d376ce3824..1f1ff193fd 100644 --- a/addons/medical/functions/fnc_isInMedicalVehicle.sqf +++ b/addons/medical/functions/fnc_isInMedicalVehicle.sqf @@ -13,9 +13,8 @@ #include "script_component.hpp" -private ["_unit", "_vehicle"]; - -_unit = _this select 0; +private ["_vehicle"]; +params ["_unit"]; _vehicle = vehicle _unit; if (_unit == _vehicle) exitWith {false}; diff --git a/addons/medical/functions/fnc_isInStableCondition.sqf b/addons/medical/functions/fnc_isInStableCondition.sqf index f7c22ed085..763185640c 100644 --- a/addons/medical/functions/fnc_isInStableCondition.sqf +++ b/addons/medical/functions/fnc_isInStableCondition.sqf @@ -13,8 +13,8 @@ #include "script_component.hpp" -private ["_unit"]; -_unit = _this select 0; +private ["_openWounds", "_openWounds"]; +params ["_unit"]; if (GVAR(level) <= 1) exitwith { ([_unit] call FUNC(getBloodloss)) == 0; @@ -25,6 +25,6 @@ _openWounds = _unit getvariable [QGVAR(openWounds), []]; { // total bleeding ratio * percentage of injury left _totalBloodLoss = _totalBloodLoss + ((_x select 4) * (_x select 3)); -}foreach _openWounds; +} foreach _openWounds; (_totalBloodLoss == 0); diff --git a/addons/medical/functions/fnc_isMedic.sqf b/addons/medical/functions/fnc_isMedic.sqf index 122d261238..ca974fb751 100644 --- a/addons/medical/functions/fnc_isMedic.sqf +++ b/addons/medical/functions/fnc_isMedic.sqf @@ -4,7 +4,7 @@ * * Arguments: * 0: The Unit - * 1: Class + * 1: Class (default: 1) * * ReturnValue: * Is in of medic class @@ -15,8 +15,7 @@ #include "script_component.hpp" private ["_unit", "_class", "_medicN"]; -_unit = _this select 0; -_medicN = if (count _this > 1) then {_this select 1} else {1}; +params ["_unit", ["_medicN", 1]]; _class = _unit getVariable [QGVAR(medicClass), getNumber (configFile >> "CfgVehicles" >> typeOf _unit >> "attendant")]; diff --git a/addons/medical/functions/fnc_isMedicalVehicle.sqf b/addons/medical/functions/fnc_isMedicalVehicle.sqf index 5e9283852f..14499cb241 100644 --- a/addons/medical/functions/fnc_isMedicalVehicle.sqf +++ b/addons/medical/functions/fnc_isMedicalVehicle.sqf @@ -12,7 +12,6 @@ */ #include "script_component.hpp" -private ["_vehicle"]; -_vehicle = _this select 0; +params ["_vehicle"]; (_vehicle getVariable [QGVAR(medicClass), getNumber (configFile >> "CfgVehicles" >> typeOf _vehicle >> "attendant")]) > 0 diff --git a/addons/medical/functions/fnc_itemCheck.sqf b/addons/medical/functions/fnc_itemCheck.sqf index c903417dfc..d49e04e774 100644 --- a/addons/medical/functions/fnc_itemCheck.sqf +++ b/addons/medical/functions/fnc_itemCheck.sqf @@ -6,15 +6,14 @@ * 0: The unit * * ReturnValue: - * nil + * None * * Public: Yes */ #include "script_component.hpp" -private ["_unit"]; -_unit = _this select 0; +params ["_unit"]; while {({_x == "FirstAidKit"} count items _unit) > 0} do { _unit removeItem "FirstAidKit"; diff --git a/addons/medical/functions/fnc_modifyMedicalAction.sqf b/addons/medical/functions/fnc_modifyMedicalAction.sqf index 268ba8e253..8feaa7bfca 100644 --- a/addons/medical/functions/fnc_modifyMedicalAction.sqf +++ b/addons/medical/functions/fnc_modifyMedicalAction.sqf @@ -10,17 +10,18 @@ * 3: The action to modify * * ReturnValue: - * nil + * None * * Public: No */ #include "script_component.hpp" -EXPLODE_4_PVT(_this,_target,_player,_selectionN,_actionData); +params ["_target", "_player", "_selectionN", "_actionData"]; + if (GVAR(level) < 2) exitwith { private ["_pointDamage"]; - _pointDamage = _target getHitPointDamage (["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"] select _selectionN); + _pointDamage = (_target getvariable [QGVAR(bodyPartStatus), [0,0,0,0,0,0]]) select _selectionN; if (_pointDamage >= 0.8) exitWith { _actionData set [2, QUOTE(PATHTOF(UI\icons\medical_crossRed.paa))]; @@ -33,8 +34,8 @@ if (GVAR(level) < 2) exitwith { private ["_openWounds", "_amountOf"]; _openWounds = _target getvariable [QGVAR(openWounds), []]; { - _amountOf = _x select 3; - if (_amountOf > 0 && {(_selectionN == (_x select 2))} && {(_x select 4) > 0}) exitwith { + _x params ["", "", "_selectionX", "_amountOf", "_x4"]; + if (_amountOf > 0 && {(_selectionN == _selectionX)} && {_x4 > 0}) exitwith { _actionData set [2, QUOTE(PATHTOF(UI\icons\medical_crossRed.paa))]; }; } foreach _openWounds; diff --git a/addons/medical/functions/fnc_moduleAdvancedMedicalSettings.sqf b/addons/medical/functions/fnc_moduleAdvancedMedicalSettings.sqf index 2960c65b9d..b54196d75f 100644 --- a/addons/medical/functions/fnc_moduleAdvancedMedicalSettings.sqf +++ b/addons/medical/functions/fnc_moduleAdvancedMedicalSettings.sqf @@ -8,17 +8,14 @@ * 2: activated * * Return Value: - * None + * None * * Public: No */ #include "script_component.hpp" -private ["_logic", "_units", "_activated"]; -_logic = _this select 0; -_units = _this select 1; -_activated = _this select 2; +params ["_logic", "_units", "_activated"]; if !(_activated) exitWith {}; diff --git a/addons/medical/functions/fnc_moduleAssignMedicRoles.sqf b/addons/medical/functions/fnc_moduleAssignMedicRoles.sqf index 1c26eb53d4..e295c55a2e 100644 --- a/addons/medical/functions/fnc_moduleAssignMedicRoles.sqf +++ b/addons/medical/functions/fnc_moduleAssignMedicRoles.sqf @@ -8,15 +8,15 @@ * 2: activated * * Return Value: - * None + * None * * Public: No */ #include "script_component.hpp" -private ["_logic","_setting","_objects", "_list", "_splittedList", "_nilCheckPassedList", "_parsedList"]; -_logic = [_this,0,objNull,[objNull]] call BIS_fnc_param; +private ["_setting", "_objects", "_list", "_splittedList", "_nilCheckPassedList", "_parsedList"]; +params [["_logic", objNull, [objNull]]]; if (!isNull _logic) then { _list = _logic getvariable ["EnableList",""]; @@ -32,7 +32,7 @@ if (!isNull _logic) then { _nilCheckPassedList = _nilCheckPassedList + ","+ _x; }; }; - }foreach _splittedList; + } foreach _splittedList; _list = "[" + _nilCheckPassedList + "]"; _parsedList = [] call compile _list; @@ -47,7 +47,7 @@ if (!isNull _logic) then { }; }; }; - }foreach _objects; + } foreach _objects; }; { if (!isnil "_x") then { @@ -57,7 +57,5 @@ if (!isNull _logic) then { }; }; }; - }foreach _parsedList; + } foreach _parsedList; }; - -true \ No newline at end of file diff --git a/addons/medical/functions/fnc_moduleAssignMedicalFacility.sqf b/addons/medical/functions/fnc_moduleAssignMedicalFacility.sqf index c08d737f4b..7a219f2559 100644 --- a/addons/medical/functions/fnc_moduleAssignMedicalFacility.sqf +++ b/addons/medical/functions/fnc_moduleAssignMedicalFacility.sqf @@ -8,15 +8,15 @@ * 2: activated * * Return Value: - * None + * None * * Public: No */ #include "script_component.hpp" -private ["_logic","_setting","_objects"]; -_logic = [_this,0,objNull,[objNull]] call BIS_fnc_param; +private ["_setting", "_objects"]; +params [["_logic", objNull, [objNull]]]; if (!isNull _logic) then { _setting = _logic getvariable ["class",0]; _objects = synchronizedObjects _logic; @@ -24,7 +24,7 @@ if (!isNull _logic) then { if (local _x) then { _x setvariable[QGVAR(isMedicalFacility), true, true]; }; - }foreach _objects; + } foreach _objects; }; true; diff --git a/addons/medical/functions/fnc_moduleAssignMedicalVehicle.sqf b/addons/medical/functions/fnc_moduleAssignMedicalVehicle.sqf index af6de73ce1..9744ce5f7b 100644 --- a/addons/medical/functions/fnc_moduleAssignMedicalVehicle.sqf +++ b/addons/medical/functions/fnc_moduleAssignMedicalVehicle.sqf @@ -8,7 +8,7 @@ * 2: activated * * Return Value: - * None + * None * * Public: No */ @@ -16,8 +16,8 @@ #include "script_component.hpp" -private ["_logic","_setting","_objects", "_list", "_splittedList", "_nilCheckPassedList", "_parsedList"]; -_logic = [_this,0,objNull,[objNull]] call BIS_fnc_param; +private ["_setting", "_objects", "_list", "_splittedList", "_nilCheckPassedList", "_parsedList"]; +params [["_logic", objNull, [objNull]]]; if (!isNull _logic) then { _list = _logic getvariable ["EnableList",""]; @@ -33,7 +33,7 @@ if (!isNull _logic) then { _nilCheckPassedList = _nilCheckPassedList + ","+ _x; }; }; - }foreach _splittedList; + } foreach _splittedList; _list = "[" + _nilCheckPassedList + "]"; _parsedList = [] call compile _list; @@ -48,7 +48,7 @@ if (!isNull _logic) then { }; }; }; - }foreach _objects; + } foreach _objects; }; { if (!isnil "_x") then { @@ -58,7 +58,5 @@ if (!isNull _logic) then { }; }; }; - }foreach _parsedList; + } foreach _parsedList; }; - -true; diff --git a/addons/medical/functions/fnc_moduleMedicalSettings.sqf b/addons/medical/functions/fnc_moduleMedicalSettings.sqf index 00b7a15fcf..4e1af0e86c 100644 --- a/addons/medical/functions/fnc_moduleMedicalSettings.sqf +++ b/addons/medical/functions/fnc_moduleMedicalSettings.sqf @@ -8,17 +8,14 @@ * 2: activated * * Return Value: - * None + * None * * Public: No */ #include "script_component.hpp" -private ["_logic", "_units", "_activated"]; -_logic = _this select 0; -_units = _this select 1; -_activated = _this select 2; +params ["_logic", "_units", "_activated"]; if !(_activated) exitWith {}; diff --git a/addons/medical/functions/fnc_moduleReviveSettings.sqf b/addons/medical/functions/fnc_moduleReviveSettings.sqf index c96b1eb67c..19aa9579dd 100644 --- a/addons/medical/functions/fnc_moduleReviveSettings.sqf +++ b/addons/medical/functions/fnc_moduleReviveSettings.sqf @@ -8,17 +8,14 @@ * 2: activated * * Return Value: - * None + * None * * Public: No */ #include "script_component.hpp" -private ["_logic", "_units", "_activated"]; -_logic = _this select 0; -_units = _this select 1; -_activated = _this select 2; +params ["_logic", "_units", "_activated"]; if !(_activated) exitWith {}; diff --git a/addons/medical/functions/fnc_onMedicationUsage.sqf b/addons/medical/functions/fnc_onMedicationUsage.sqf index 904ad3ef88..db4ba737ea 100644 --- a/addons/medical/functions/fnc_onMedicationUsage.sqf +++ b/addons/medical/functions/fnc_onMedicationUsage.sqf @@ -11,28 +11,21 @@ * 5: Incompatable medication > * * Return Value: - * NONE + * None * * Public: No */ #include "script_component.hpp" -private ["_target", "_className", "_variable", "_maxDosage", "_timeInSystem", "_incompatabileMeds", "_foundEntry", "_allUsedMedication","_allMedsFromClassname", "_usedMeds", "_hasOverDosed", "_med", "_limit", "_classNamesUsed", "_decreaseAmount", "_viscosityChange", "_viscosityAdjustment", "_medicationConfig", "_onOverDose", "_painReduce"]; -_target = _this select 0; -_className = _this select 1; -_variable = _this select 2; -_maxDosage = _this select 3; -_timeInSystem = _this select 4; -_incompatabileMeds = _this select 5; -_viscosityChange = _this select 6; -_painReduce = _this select 7; +private ["_foundEntry", "_allUsedMedication","_allMedsFromClassname", "_usedMeds", "_hasOverDosed", "_med", "_limit", "_decreaseAmount", "_viscosityAdjustment", "_medicationConfig", "_onOverDose"]; +params ["_target", "_className", "_variable", "_maxDosage", "_timeInSystem", "_incompatabileMeds", "_viscosityChange", "_painReduce"]; _foundEntry = false; _allUsedMedication = _target getvariable [QGVAR(allUsedMedication), []]; { - if (_x select 0 == _variable) exitwith { - _allMedsFromClassname = _x select 1; + _x params ["_variableX", "_allMedsFromClassname"]; + if (_variableX== _variable) exitwith { if !(_className in _allMedsFromClassname) then { _allMedsFromClassname pushback _className; _x set [1, _allMedsFromClassname]; @@ -56,15 +49,14 @@ if (_usedMeds >= floor (_maxDosage + round(random(2))) && _maxDosage >= 1 && GVA _hasOverDosed = 0; { - _med = _x select 0; - _limit = _x select 1; + _x params ["_med", "_limit"]; { - _classNamesUsed = _x select 1; + _x params ["", "_classNamesUsed"]; if ({_x == _med} count _classNamesUsed > _limit) then { _hasOverDosed = _hasOverDosed + 1; }; - }foreach _allUsedMedication; -}foreach _incompatabileMeds; + } foreach _allUsedMedication; +} foreach _incompatabileMeds; if (_hasOverDosed > 0 && GVAR(enableOverdosing)) then { _medicationConfig = (configFile >> "ACE_Medical_Advanced" >> "Treatment" >> "Medication"); @@ -85,16 +77,9 @@ _decreaseAmount = 1 / _timeInSystem; _viscosityAdjustment = _viscosityChange / _timeInSystem; [{ - private ["_args", "_target", "_timeInSystem", "_variable", "_amountDecreased","_decreaseAmount", "_usedMeds", "_viscosityAdjustment", "_painReduce"]; - _args = _this select 0; - _target = _args select 0; - _timeInSystem = _args select 1; - _variable = _args select 2; - _amountDecreased = _args select 3; - _decreaseAmount = _args select 4; - _viscosityAdjustment = _args select 5; - _painReduce = _args select 6; - + params ["_args", "_idPFH"]; + _args params ["_target", "_timeInSystem", "_variable", "_amountDecreased","_decreaseAmount", "_viscosityAdjustment", "_painReduce"]; + private "_usedMeds"; _usedMeds = _target getvariable [_variable, 0]; _usedMeds = _usedMeds - _decreaseAmount; _target setvariable [_variable, _usedMeds]; @@ -106,7 +91,7 @@ _viscosityAdjustment = _viscosityChange / _timeInSystem; _target setvariable [QGVAR(painSuppress), ((_target getvariable [QGVAR(painSuppress), 0]) - _painReduce) max 0]; if (_amountDecreased >= 1 || (_usedMeds <= 0) || !alive _target) then { - [(_this select 1)] call cba_fnc_removePerFrameHandler; + [_idPFH] call CBA_fnc_removePerFrameHandler; }; _args set [3, _amountDecreased]; }, 1, [_target, _timeInSystem, _variable, 0, _decreaseAmount, _viscosityAdjustment, _painReduce / _timeInSystem] ] call CBA_fnc_addPerFrameHandler; diff --git a/addons/medical/functions/fnc_onPropagateWound.sqf b/addons/medical/functions/fnc_onPropagateWound.sqf index 934899eac4..f8b361ad17 100644 --- a/addons/medical/functions/fnc_onPropagateWound.sqf +++ b/addons/medical/functions/fnc_onPropagateWound.sqf @@ -7,7 +7,7 @@ * 1: injury * * Return Value: - * None + * None * * Public: No */ @@ -15,8 +15,7 @@ #include "script_component.hpp" private ["_unit", "_injury", "_openWounds", "_injuryID", "_exists"]; -_unit = _this select 0; -_injury = _this select 1; +params ["_unit", "_injury"]; if (!local _unit) then { _openWounds = _unit getvariable[QGVAR(openWounds), []]; @@ -28,7 +27,7 @@ if (!local _unit) then { _exists = true; _openWounds set [_foreachIndex, _injury]; }; - }foreach _openWounds; + } foreach _openWounds; if (!_exists) then { _openWounds pushback _injury; diff --git a/addons/medical/functions/fnc_onWoundUpdateRequest.sqf b/addons/medical/functions/fnc_onWoundUpdateRequest.sqf index 3c99496d7b..091bea7ef8 100644 --- a/addons/medical/functions/fnc_onWoundUpdateRequest.sqf +++ b/addons/medical/functions/fnc_onWoundUpdateRequest.sqf @@ -7,19 +7,18 @@ * 1: Origin object * * ReturnValue: - * + * None * * Public: Yes */ #include "script_component.hpp" private ["_unit", "_openWounds", "_originOfrequest"]; -_unit = _this select 0; -_originOfrequest = _this select 1; +params ["_unit", "_originOfrequest"]; if (local _unit && !(local _originOfrequest)) then { _openWounds = _unit getvariable [QGVAR(openWounds), []]; { ["medical_propagateWound", [_originOfrequest], [_unit, _x]] call EFUNC(common,targetEvent); - }foreach _openWounds; + } foreach _openWounds; }; diff --git a/addons/medical/functions/fnc_parseConfigForInjuries.sqf b/addons/medical/functions/fnc_parseConfigForInjuries.sqf index 1b2db7c278..764d0bf591 100644 --- a/addons/medical/functions/fnc_parseConfigForInjuries.sqf +++ b/addons/medical/functions/fnc_parseConfigForInjuries.sqf @@ -3,13 +3,12 @@ * Parse the ACE_Medical_Advanced config for all injury types. * * Arguments: - * + * None * ReturnValue: - * + * None * * Public: No */ - #include "script_component.hpp" private ["_injuriesRootConfig", "_woundsConfig", "_allWoundClasses", "_amountOf", "_entry","_classType", "_selections", "_bloodLoss", "_pain","_minDamage","_causes", "_damageTypesConfig", "_thresholds", "_typeThresholds", "_selectionSpecific", "_selectionSpecificType", "_classDisplayName", "_subClassDisplayName", "_maxDamage", "_subClassmaxDamage", "_defaultMinLethalDamage", "_minLethalDamage", "_allFoundDamageTypes", "_classID", "_configDamageTypes", "_i", "_parseForSubClassWounds", "_subClass", "_subClassConfig", "_subClassbloodLoss", "_subClasscauses", "_subClassminDamage", "_subClasspain", "_subClassselections", "_subClasstype", "_type", "_varName", "_woundTypes"]; @@ -110,7 +109,7 @@ _selectionSpecific = getNumber(_damageTypesConfig >> "selectionSpecific"); if (_type in (_x select 5)) then { _woundTypes pushback _x; }; - }foreach _allWoundClasses; + } foreach _allWoundClasses; _typeThresholds = _thresholds; _selectionSpecificType = _selectionSpecific; if (isClass(_damageTypesConfig >> _x)) then { @@ -130,11 +129,11 @@ _selectionSpecific = getNumber(_damageTypesConfig >> "selectionSpecific"); _minDamageThresholds = _minDamageThresholds + ":"; _amountThresholds = _amountThresholds + ":"; }; - }foreach _typeThresholds; + } foreach _typeThresholds; "ace_medical" callExtension format ["addDamageType,%1,%2,%3,%4,%5", _type, GVAR(minLethalDamages) select _foreachIndex, _minDamageThresholds, _amountThresholds, _selectionSpecificType]; -}foreach _allFoundDamageTypes; +} foreach _allFoundDamageTypes; // Extension loading @@ -142,34 +141,30 @@ _selectionSpecific = getNumber(_damageTypesConfig >> "selectionSpecific"); { private ["_classID", "_className", "_allowedSelections", "_bloodLoss", "_pain", "_minDamage", "_maxDamage", "_causes", "_classDisplayName", "_extensionInput", "_selections", "_causesArray"]; // add shit to addInjuryType - _classID = _x select 0; + _x params ["_classID", "_selections", "_bloodLoss", "_pain", "_damage", "_causesArray", "_classDisplayName"]; + _damage params ["_minDamage", "_maxDamage"]; _className = GVAR(woundClassNames) select _forEachIndex; _allowedSelections = ""; - _selections = _x select 1; { _allowedSelections = _allowedSelections + _x; if (_forEachIndex < (count _selections) - 1) then { _allowedSelections = _allowedSelections + ":"; }; - }foreach _selections; + } foreach _selections; - _bloodLoss = _x select 2; - _pain = _x select 3; - _minDamage = (_x select 4) select 0; - _maxDamage = (_x select 4) select 1; _causes = ""; - _causesArray = (_x select 5); + { _causes = _causes + _x; if (_forEachIndex < (count _causesArray) - 1) then { _causes = _causes + ":"; }; - }foreach _causesArray; + } foreach _causesArray; _classDisplayName = _x select 6; "ace_medical" callExtension format["addInjuryType,%1,%2,%3,%4,%5,%6,%7,%8,%9", _classID, _className, _allowedSelections, _bloodLoss, _pain, _minDamage, _maxDamage, _causes, _classDisplayName]; -}foreach _allWoundClasses; +} foreach _allWoundClasses; "ace_medical" callExtension "ConfigComplete"; diff --git a/addons/medical/functions/fnc_playInjuredSound.sqf b/addons/medical/functions/fnc_playInjuredSound.sqf index 3d41ec70db..ddf107c840 100644 --- a/addons/medical/functions/fnc_playInjuredSound.sqf +++ b/addons/medical/functions/fnc_playInjuredSound.sqf @@ -6,9 +6,10 @@ * * Arguments: * 0: The Unit + * 1: Amount of Pain * * ReturnValue: - * + * None * * Public: No */ @@ -16,8 +17,7 @@ #include "script_component.hpp" private ["_unit","_availableSounds_A","_availableSounds_B","_availableSounds_C","_sound", "_pain"]; -_unit = _this select 0; -_pain = _this select 1; +params ["_unit", "_pain"]; if (!local _unit || !GVAR(enableScreams)) exitwith{}; // Lock if the unit is already playing a sound. diff --git a/addons/medical/functions/fnc_requestWoundSync.sqf b/addons/medical/functions/fnc_requestWoundSync.sqf index 74fd3e230d..31cf726214 100644 --- a/addons/medical/functions/fnc_requestWoundSync.sqf +++ b/addons/medical/functions/fnc_requestWoundSync.sqf @@ -7,16 +7,14 @@ * 1: object belonging to the caller * * ReturnValue: - * + * None * * Public: Yes */ #include "script_component.hpp" -private [ "_target", "_caller"]; -_target = _this select 0; -_caller = _this select 1; +params [ "_target", "_caller"]; if (local _target || GVAR(level) < 2) exitwith {}; // if the target is local, we already got the most update to date information if (_target getvariable [QGVAR(isWoundSynced), false]) exitwith {}; diff --git a/addons/medical/functions/fnc_setCardiacArrest.sqf b/addons/medical/functions/fnc_setCardiacArrest.sqf index c33d83bb40..017befcaad 100644 --- a/addons/medical/functions/fnc_setCardiacArrest.sqf +++ b/addons/medical/functions/fnc_setCardiacArrest.sqf @@ -7,15 +7,15 @@ * 0: The unit that will be put in cardiac arrest state * * ReturnValue: - * + * None * * Public: yes */ #include "script_component.hpp" -private ["_unit", "_timeInCardiacArrest"]; -_unit = _this select 0; +private "_timeInCardiacArrest"; +params ["_unit"]; if (_unit getvariable [QGVAR(inCardiacArrest),false]) exitwith {}; _unit setvariable [QGVAR(inCardiacArrest), true,true]; @@ -28,20 +28,17 @@ _timeInCardiacArrest = 120 + round(random(600)); [{ private ["_args","_unit","_startTime","_timeInCardiacArrest","_heartRate"]; - _args = _this select 0; - _unit = _args select 0; - _startTime = _args select 1; - _timeInCardiacArrest = _args select 2; + params ["_args", "_idPFH"]; + _args params ["_unit", "_startTime", "_timeInCardiacArrest"]; _heartRate = _unit getvariable [QGVAR(heartRate), 80]; if (_heartRate > 0 || !alive _unit) exitwith { - [(_this select 1)] call cba_fnc_removePerFrameHandler; + [_idPFH] call CBA_fnc_removePerFrameHandler; _unit setvariable [QGVAR(inCardiacArrest), nil,true]; }; if (ACE_time - _startTime >= _timeInCardiacArrest) exitwith { - [(_this select 1)] call cba_fnc_removePerFrameHandler; + [_idPFH] call CBA_fnc_removePerFrameHandler; _unit setvariable [QGVAR(inCardiacArrest), nil,true]; [_unit] call FUNC(setDead); }; }, 1, [_unit, ACE_time, _timeInCardiacArrest] ] call CBA_fnc_addPerFrameHandler; - diff --git a/addons/medical/functions/fnc_setDead.sqf b/addons/medical/functions/fnc_setDead.sqf index c29edcd5e3..c8c81a699e 100644 --- a/addons/medical/functions/fnc_setDead.sqf +++ b/addons/medical/functions/fnc_setDead.sqf @@ -6,7 +6,7 @@ * 0: The unit that will be killed * * ReturnValue: - * + * None * * Public: yes */ @@ -14,11 +14,7 @@ #include "script_component.hpp" private ["_unit", "_force", "_reviveVal", "_lifesLeft"]; -_unit = _this select 0; -_force = false; -if (count _this >= 2) then { - _force = _this select 1; -}; +params ["_unit", ["_force", false]]; if (!alive _unit) exitwith{true}; if (!local _unit) exitwith { @@ -44,13 +40,13 @@ if (((_reviveVal == 1 && {[_unit] call EFUNC(common,isPlayer)} || _reviveVal == [_unit, true] call FUNC(setUnconscious); [{ - private ["_args","_unit","_startTime"]; - _args = _this select 0; - _unit = _args select 0; + private "_startTime"; + params ["_args", "_idPFH"]; + _args params ["_unit"]; _startTime = _unit getvariable [QGVAR(reviveStartTime), 0]; if (GVAR(maxReviveTime) > 0 && {ACE_time - _startTime > GVAR(maxReviveTime)}) exitwith { - [(_this select 1)] call cba_fnc_removePerFrameHandler; + [_idPFH] call CBA_fnc_removePerFrameHandler; _unit setvariable [QGVAR(inReviveState), nil, true]; _unit setvariable [QGVAR(reviveStartTime), nil]; [_unit, true] call FUNC(setDead); @@ -64,7 +60,7 @@ if (((_reviveVal == 1 && {[_unit] call EFUNC(common,isPlayer)} || _reviveVal == }; _unit setvariable [QGVAR(reviveStartTime), nil]; - [(_this select 1)] call cba_fnc_removePerFrameHandler; + [_idPFH] call CBA_fnc_removePerFrameHandler; }; if (GVAR(level) >= 2) then { if (_unit getvariable [QGVAR(heartRate), 60] > 0) then { @@ -82,5 +78,5 @@ if (isPLayer _unit) then { ["medical_onSetDead", [_unit]] call EFUNC(common,localEvent); -_unit setdamage 1; +[_unit, 1] call FUNC(setStructuralDamage); true; diff --git a/addons/medical/functions/fnc_setHitPointDamage.sqf b/addons/medical/functions/fnc_setHitPointDamage.sqf index 18d4fc616e..f8698a7fe0 100644 --- a/addons/medical/functions/fnc_setHitPointDamage.sqf +++ b/addons/medical/functions/fnc_setHitPointDamage.sqf @@ -7,10 +7,10 @@ * 0: Unit * 1: HitPoint * 2: Damage - * 3: Disable overall damage adjustment (optional) + * 3: Disable overall damage adjustment (default: false) * * Return Value: - * nil + * None * * Public: Yes */ @@ -22,10 +22,7 @@ #define ARMDAMAGETRESHOLD2 1.7 private ["_unit", "_selection", "_damage", "_selections", "_damages", "_damageOld", "_damageSumOld", "_damageNew", "_damageSumNew", "_damageFinal", "_armdamage", "_legdamage"]; - -_unit = _this select 0; -_selection = _this select 1; -_damage = _this select 2; +params ["_unit", "_selection", "_damage", ["_disabled", false]]; // Unit isn't local, give function to machine where it is. if !(local _unit) exitWith { @@ -33,7 +30,7 @@ if !(local _unit) exitWith { }; // Check if overall damage adjustment is disabled -if (count _this > 3 && {_this select 3}) exitWith { +if (_disabled) exitWith { _unit setHitPointDamage [_selection, _damage]; }; diff --git a/addons/medical/functions/fnc_setStructuralDamage.sqf b/addons/medical/functions/fnc_setStructuralDamage.sqf new file mode 100644 index 0000000000..b4dc74eac1 --- /dev/null +++ b/addons/medical/functions/fnc_setStructuralDamage.sqf @@ -0,0 +1,25 @@ +/* + * Author: commy2 + * Set the structural damage of a soldier without changing the individual hitpoints. Unit has to be local. Not safe to use with vehicles! + * + * Arguments: + * 0: The unit + * + * ReturnValue: + * + * + * Public: no? + */ + +params ["_unit", "_damage"]; + +if (!local _unit) exitWith {}; + +private "_allHitPoints"; +_allHitPoints = getAllHitPointsDamage _unit select 2; + +_unit setDamage _damage; + +{ + _unit setHitIndex [_forEachIndex, _x]; +} forEach _allHitPoints; diff --git a/addons/medical/functions/fnc_setUnconscious.sqf b/addons/medical/functions/fnc_setUnconscious.sqf index 7e5cd8c1b7..3de62db974 100644 --- a/addons/medical/functions/fnc_setUnconscious.sqf +++ b/addons/medical/functions/fnc_setUnconscious.sqf @@ -4,9 +4,9 @@ * * Arguments: * 0: The unit that will be put in an unconscious state - * 1: Set unconsciouns - * 2: Minimum unconscious ACE_time - * 3: Force AI Unconscious (skip random death chance) + * 1: Set unconsciouns (default: true) + * 2: Minimum unconscious ACE_time (default: (round(random(10)+5))) + * 3: Force AI Unconscious (skip random death chance) (default: false) * * ReturnValue: * nil @@ -19,13 +19,10 @@ #include "script_component.hpp" -#define DEFAULT_DELAY (round(random(10)+5)) +#define DEFAULT_DELAY (round(random(10)+5)) -private ["_unit", "_set", "_animState", "_originalPos", "_startingTime","_minWaitingTime", "_force", "_isDead"]; -_unit = _this select 0; -_set = if (count _this > 1) then {_this select 1} else {true}; -_minWaitingTime = if (count _this > 2) then {_this select 2} else {DEFAULT_DELAY}; -_force = if (count _this > 3) then {_this select 3} else {false}; +private ["_animState", "_originalPos", "_startingTime", "_isDead"]; +params ["_unit", ["_set", true], ["_minWaitingTime", DEFAULT_DELAY], ["_force", false]]; // No change, fuck off. (why is there no xor?) if (_set isEqualTo (_unit getVariable ["ACE_isUnconscious", false])) exitWith {}; @@ -97,8 +94,7 @@ if (GVAR(moveUnitsFromGroupOnUnconscious)) then { _anim = [_unit] call EFUNC(common,getDeathAnim); [_unit, _anim, 1, true] call EFUNC(common,doAnimation); [{ - _unit = _this select 0; - _anim = _this select 1; + params ["_unit", "_anim"]; if ((_unit getVariable "ACE_isUnconscious") and (animationState _unit != _anim)) then { [_unit, _anim, 2, true] call EFUNC(common,doAnimation); }; diff --git a/addons/medical/functions/fnc_treatment.sqf b/addons/medical/functions/fnc_treatment.sqf index a319d50440..5e97e31501 100644 --- a/addons/medical/functions/fnc_treatment.sqf +++ b/addons/medical/functions/fnc_treatment.sqf @@ -16,11 +16,8 @@ #include "script_component.hpp" -private ["_caller", "_target", "_selectionName", "_className", "_config", "_medicRequired", "_items", "_locations", "_return", "_callbackProgress", "_treatmentTime", "_callerAnim", "_patientAnim", "_iconDisplayed", "_return", "_usersOfItems", "_consumeItems", "_condition", "_displayText", "_wpn", "_treatmentTimeConfig", "_patientStateCondition", "_allowedSelections"]; -_caller = _this select 0; -_target = _this select 1; -_selectionName = _this select 2; -_className = _this select 3; +private ["_config", "_medicRequired", "_items", "_locations", "_return", "_callbackProgress", "_treatmentTime", "_callerAnim", "_patientAnim", "_iconDisplayed", "_return", "_usersOfItems", "_consumeItems", "_condition", "_displayText", "_wpn", "_treatmentTimeConfig", "_patientStateCondition", "_allowedSelections"]; +params ["_caller", "_target", "_selectionName", "_className"]; // If the cursorMenu is open, the loading bar will fail. If we execute the function one frame later, it will work fine if (uiNamespace getVariable [QEGVAR(interact_menu,cursorMenuOpened),false]) exitwith { @@ -37,6 +34,9 @@ if (GVAR(level) >= 2) then { }; if !(isClass _config) exitwith {false}; +// Allow self treatment check +if (_caller == _target && {getNumber (_config >> "allowSelfTreatment") == 0}) exitwith {false}; + _medicRequired = if (isNumber (_config >> "requiredMedic")) then { getNumber (_config >> "requiredMedic"); } else { @@ -107,7 +107,7 @@ if ("All" in _locations) then { }; }; }; - }foreach _locations; + } foreach _locations; }; if !(_return) exitwith {false}; @@ -180,7 +180,7 @@ if (vehicle _caller == _caller && {_callerAnim != ""}) then { TRACE_1("Weapon Deployed, breaking out first",(stance _caller)); [_caller, "", 0] call EFUNC(common,doAnimation); }; - + if ((stance _caller) == "STAND") then { switch (_wpn) do {//If standing, end in a crouched animation based on their current weapon case ("rfl"): {_caller setvariable [QGVAR(treatmentPrevAnimCaller), "AmovPknlMstpSrasWrflDnon"];}; diff --git a/addons/medical/functions/fnc_treatmentAdvanced_CPR.sqf b/addons/medical/functions/fnc_treatmentAdvanced_CPR.sqf index ade74a6ccb..f09de600ae 100644 --- a/addons/medical/functions/fnc_treatmentAdvanced_CPR.sqf +++ b/addons/medical/functions/fnc_treatmentAdvanced_CPR.sqf @@ -16,12 +16,7 @@ #include "script_component.hpp" -private ["_caller", "_target", "_selectionName", "_className", "_items"]; -_caller = _this select 0; -_target = _this select 1; -_selectionName = _this select 2; -_className = _this select 3; -_items = _this select 4; +params ["_caller", "_target", "_selectionName", "_className", "_items"]; if (alive _target && {(_target getvariable [QGVAR(inCardiacArrest), false] || _target getvariable [QGVAR(inReviveState), false])}) then { [[_caller, _target], QUOTE(DFUNC(treatmentAdvanced_CPRLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ diff --git a/addons/medical/functions/fnc_treatmentAdvanced_CPRLocal.sqf b/addons/medical/functions/fnc_treatmentAdvanced_CPRLocal.sqf index a7c8ea6744..818640ca07 100644 --- a/addons/medical/functions/fnc_treatmentAdvanced_CPRLocal.sqf +++ b/addons/medical/functions/fnc_treatmentAdvanced_CPRLocal.sqf @@ -14,9 +14,8 @@ #include "script_component.hpp" -private ["_caller","_target", "_reviveStartTime"]; -_caller = _this select 0; -_target = _this select 1; +private "_reviveStartTime"; +param ["_caller","_target"]; if (_target getvariable [QGVAR(inReviveState), false]) then { _reviveStartTime = _target getvariable [QGVAR(reviveStartTime),0]; @@ -25,7 +24,7 @@ if (_target getvariable [QGVAR(inReviveState), false]) then { }; }; -if ((random 1) >= 0.6) then { +if (GVAR(level) > 1 && {(random 1) >= 0.6}) then { _target setvariable [QGVAR(inCardiacArrest), nil,true]; _target setvariable [QGVAR(heartRate), 40]; _target setvariable [QGVAR(bloodPressure), [50,70]]; diff --git a/addons/medical/functions/fnc_treatmentAdvanced_bandage.sqf b/addons/medical/functions/fnc_treatmentAdvanced_bandage.sqf index 1278994a11..aa3669c227 100644 --- a/addons/medical/functions/fnc_treatmentAdvanced_bandage.sqf +++ b/addons/medical/functions/fnc_treatmentAdvanced_bandage.sqf @@ -7,7 +7,8 @@ * 1: The patient * 2: SelectionName * 3: Treatment classname - * + * 4: Item + * 5: specific Spot (default: -1) * * Return Value: * Succesful treatment started @@ -16,15 +17,7 @@ */ #include "script_component.hpp" - -private ["_caller", "_target", "_selectionName", "_className", "_items", "_specificSpot"]; -_caller = _this select 0; -_target = _this select 1; -_selectionName = _this select 2; -_className = _this select 3; -_items = _this select 4; - -_specificSpot = if (count _this > 6) then {_this select 6} else {-1}; +params ["_caller", "_target", "_selectionName", "_className", "_items", "", ["_specificSpot", -1]]; if !([_target] call FUNC(hasMedicalEnabled)) exitwith { _this call FUNC(treatmentBasic_bandage); diff --git a/addons/medical/functions/fnc_treatmentAdvanced_bandageLocal.sqf b/addons/medical/functions/fnc_treatmentAdvanced_bandageLocal.sqf index d6c490d3c6..abf09385b2 100644 --- a/addons/medical/functions/fnc_treatmentAdvanced_bandageLocal.sqf +++ b/addons/medical/functions/fnc_treatmentAdvanced_bandageLocal.sqf @@ -15,19 +15,16 @@ #include "script_component.hpp" -private ["_target", "_bandage", "_part", "_selectionName", "_openWounds", "_config", "_effectiveness","_mostEffectiveInjury", "_mostEffectiveSpot", "_woundEffectivenss", "_mostEffectiveInjury", "_impact", "_exit", "_specificClass", "_classID", "_effectivenessFound", "_className", "_hitPoints", "_hitSelections", "_point", "_woundTreatmentConfig"]; -_target = _this select 0; -_bandage = _this select 1; -_selectionName = _this select 2; -_specificClass = if (count _this > 3) then {_this select 3} else { -1 }; +private ["_openWounds", "_config", "_effectiveness","_mostEffectiveInjury", "_mostEffectiveSpot", "_woundEffectivenss", "_mostEffectiveInjury", "_impact", "_exit", "_classID", "_effectivenessFound", "_className", "_hitPoints", "_hitSelections", "_point", "_woundTreatmentConfig"]; +params ["_target", "_bandage", "_selectionName", ["_specificClass", -1]]; // Ensure it is a valid bodypart _part = [_selectionName] call FUNC(selectionNameToNumber); -if (_part < 0) exitwith {}; +if (_part < 0) exitwith {false}; // Get the open wounds for this unit _openWounds = _target getvariable [QGVAR(openWounds), []]; -if (count _openWounds == 0) exitwith {}; // nothing to do here! +if (count _openWounds == 0) exitwith {false}; // nothing to do here! // Get the default effectiveness for the used bandage _config = (ConfigFile >> "ACE_Medical_Advanced" >> "Treatment" >> "Bandaging"); @@ -43,10 +40,11 @@ _effectivenessFound = -1; _mostEffectiveInjury = _openWounds select 0; _exit = false; { + _x params ["", "_classID", "_partX"]; + TRACE_2("OPENWOUND: ", _target, _x); // Only parse injuries that are for the selected bodypart. - if (_x select 2 == _part) then { + if (_partX == _part) then { _woundEffectivenss = _effectiveness; - _classID = (_x select 1); // Select the classname from the wound classname storage _className = GVAR(woundClassNames) select _classID; @@ -59,6 +57,7 @@ _exit = false; }; }; + TRACE_2("Wound classes: ", _specificClass, _classID); if (_specificClass == _classID) exitwith { _effectivenessFound = _woundEffectivenss; _mostEffectiveSpot = _foreachIndex; @@ -74,7 +73,7 @@ _exit = false; }; }; if (_exit) exitwith {}; -}foreach _openWounds; +} foreach _openWounds; if (_effectivenessFound == -1) exitwith {}; // Seems everything is patched up on this body part already.. @@ -96,12 +95,11 @@ if (_impact > 0 && {GVAR(enableAdvancedWounds)}) then { }; // If all wounds have been bandaged, we will reset all damage to 0, so the unit is not showing any blood on the model anymore. -if (GVAR(healHitPointAfterAdvBandage) && {{(_x select 2) == _part && {_x select 3 > 0}}count _openWounds == 0}) then { +if (GVAR(healHitPointAfterAdvBandage) && {{(_x select 2) == _part && {((_x select 4) * (_x select 3)) > 0}}count _openWounds == 0}) then { _hitSelections = ["head", "body", "hand_l", "hand_r", "leg_l", "leg_r"]; _hitPoints = ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"]; _point = _hitPoints select (_hitSelections find _selectionName); - [_target, _point, 0] call FUNC(setHitPointDamage); - // _target setvariable [QGVAR(bodyPartStatus), [0,0,0,0,0,0], true]; + _target setHitPointDamage [_point, 0]; }; true; diff --git a/addons/medical/functions/fnc_treatmentAdvanced_fullHeal.sqf b/addons/medical/functions/fnc_treatmentAdvanced_fullHeal.sqf index 37627a8c5d..a26876568d 100644 --- a/addons/medical/functions/fnc_treatmentAdvanced_fullHeal.sqf +++ b/addons/medical/functions/fnc_treatmentAdvanced_fullHeal.sqf @@ -10,12 +10,7 @@ #include "script_component.hpp" -private ["_target", "_caller", "_selectionName", "_className", "_items"]; -_caller = _this select 0; -_target = _this select 1; -_selectionName = _this select 2; -_className = _this select 3; -_items = _this select 4; +params ["_caller", "_target", "_selectionName", "_className", "_items"]; // TODO replace by event system [[_caller, _target], QUOTE(DFUNC(treatmentAdvanced_fullHealLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ diff --git a/addons/medical/functions/fnc_treatmentAdvanced_fullHealLocal.sqf b/addons/medical/functions/fnc_treatmentAdvanced_fullHealLocal.sqf index df7594921d..ed5eb0858d 100644 --- a/addons/medical/functions/fnc_treatmentAdvanced_fullHealLocal.sqf +++ b/addons/medical/functions/fnc_treatmentAdvanced_fullHealLocal.sqf @@ -10,9 +10,8 @@ #include "script_component.hpp" -private ["_target", "_caller", "_allUsedMedication"]; -_caller = _this select 0; -_target = _this select 1; +private "_allUsedMedication"; +params ["_caller", "_target"]; if (alive _target) exitwith { @@ -64,7 +63,7 @@ if (alive _target) exitwith { _allUsedMedication = _target getVariable [QGVAR(allUsedMedication), []]; { _target setvariable [_x select 0, nil]; - }foreach _allUsedMedication; + } foreach _allUsedMedication; // Resetting damage _target setDamage 0; diff --git a/addons/medical/functions/fnc_treatmentAdvanced_fullHealTreatmentTime.sqf b/addons/medical/functions/fnc_treatmentAdvanced_fullHealTreatmentTime.sqf index 108bdd4a5d..a0539948ea 100644 --- a/addons/medical/functions/fnc_treatmentAdvanced_fullHealTreatmentTime.sqf +++ b/addons/medical/functions/fnc_treatmentAdvanced_fullHealTreatmentTime.sqf @@ -15,12 +15,12 @@ */ #include "script_component.hpp" -private ["_target", "_totalDamage"]; -_target = _this; +private "_totalDamage"; + _totalDamage = 0; { _totalDamage = _totalDamage + _x; -} forEach (_target getVariable [QGVAR(bodyPartStatus), []]); +} forEach (_this getVariable [QGVAR(bodyPartStatus), []]); (10 max (_totalDamage * 10) min 120) diff --git a/addons/medical/functions/fnc_treatmentAdvanced_medication.sqf b/addons/medical/functions/fnc_treatmentAdvanced_medication.sqf index 0b401a73cc..b5b0af1401 100644 --- a/addons/medical/functions/fnc_treatmentAdvanced_medication.sqf +++ b/addons/medical/functions/fnc_treatmentAdvanced_medication.sqf @@ -17,12 +17,7 @@ #include "script_component.hpp" -private ["_caller", "_target", "_selectionName", "_className", "_items"]; -_caller = _this select 0; -_target = _this select 1; -_selectionName = _this select 2; -_className = _this select 3; -_items = _this select 4; +params ["_caller", "_target", "_selectionName", "_className", "_items"]; [[_target, _className], QUOTE(DFUNC(treatmentAdvanced_medicationLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ @@ -32,7 +27,7 @@ _items = _this select 4; [_target, "activity", LSTRING(Activity_usedItem), [[_caller] call EFUNC(common,getName), getText (configFile >> "CfgWeapons" >> _x >> "displayName")]] call FUNC(addToLog); [_target, "activity_view", LSTRING(Activity_usedItem), [[_caller] call EFUNC(common,getName), getText (configFile >> "CfgWeapons" >> _x >> "displayName")]] call FUNC(addToLog); }; -}foreach _items; +} foreach _items; true; diff --git a/addons/medical/functions/fnc_treatmentAdvanced_medicationLocal.sqf b/addons/medical/functions/fnc_treatmentAdvanced_medicationLocal.sqf index c4ba840398..00a4fae8d9 100644 --- a/addons/medical/functions/fnc_treatmentAdvanced_medicationLocal.sqf +++ b/addons/medical/functions/fnc_treatmentAdvanced_medicationLocal.sqf @@ -15,9 +15,8 @@ #include "script_component.hpp" -private ["_target", "_className", "_currentInSystem", "_medicationConfig", "_painReduce", "_hrIncreaseLow", "_hrIncreaseNorm", "_hrIncreaseHigh", "_maxDose", "_inCompatableMedication", "_timeInSystem", "_heartRate", "_pain", "_resistance", "_hrCallback", "_varName", "_viscosityChange"]; -_target = _this select 0; -_className = _this select 1; +private ["_currentInSystem", "_medicationConfig", "_painReduce", "_hrIncreaseLow", "_hrIncreaseNorm", "_hrIncreaseHigh", "_maxDose", "_inCompatableMedication", "_timeInSystem", "_heartRate", "_pain", "_resistance", "_hrCallback", "_varName", "_viscosityChange"]; +params ["_target", "_className"]; // We have added a new dose of this medication to our system, so let's increase it _varName = format[QGVAR(%1_inSystem), _className]; diff --git a/addons/medical/functions/fnc_treatmentAdvanced_surgicalKit_onProgress.sqf b/addons/medical/functions/fnc_treatmentAdvanced_surgicalKit_onProgress.sqf index c0e1037027..aadcb40d45 100644 --- a/addons/medical/functions/fnc_treatmentAdvanced_surgicalKit_onProgress.sqf +++ b/addons/medical/functions/fnc_treatmentAdvanced_surgicalKit_onProgress.sqf @@ -1,23 +1,30 @@ /* * Author: BaerMitUmlaut - * Handles treatment via surgical kit per frame. + * Handles treatment via surgical kit per frame + * + * Arguments: + * 0: Arguments + * 0: Caller + * 1: Target + * 1: Elapsed Time + * 2: Total Time + * + * Return Value: + * Succesful treatment started * * Public: No */ - #include "script_component.hpp" -private ["_args", "_target", "_caller", "_elapsedTime", "_totalTime", "_bandagedWounds"]; -_args = _this select 0; -_caller = _args select 0; -_target = _args select 1; -_elapsedTime = _this select 1; -_totalTime = _this select 2; + +private "_bandagedWounds"; +params ["_args", "_elapsedTime", "_totalTime"]; +_args params ["_caller", "_target"]; _bandagedWounds = _target getVariable [QGVAR(bandagedWounds), []]; //In case two people stitch up one patient and the last wound has already been closed we can stop already -if (count _bandagedWounds == 0) exitWith {false}; +if (count _bandagedWounds == 0) exitWith { false }; //Has enough time elapsed that we can close another wound? if ((_totalTime - _elapsedTime) <= (((count _bandagedWounds) - 1) * 5)) then { @@ -25,4 +32,4 @@ if ((_totalTime - _elapsedTime) <= (((count _bandagedWounds) - 1) * 5)) then { _target setVariable [QGVAR(bandagedWounds), _bandagedWounds, true]; }; -true \ No newline at end of file +true diff --git a/addons/medical/functions/fnc_treatmentBasic_bandage.sqf b/addons/medical/functions/fnc_treatmentBasic_bandage.sqf index 75b0b6bfdd..04cace08af 100644 --- a/addons/medical/functions/fnc_treatmentBasic_bandage.sqf +++ b/addons/medical/functions/fnc_treatmentBasic_bandage.sqf @@ -9,7 +9,7 @@ * 3: Treatment classname * * Return Value: - * nil + * None * * Public: No */ @@ -17,19 +17,7 @@ #include "script_component.hpp" #define BANDAGEHEAL 0.8 -private ["_caller", "_target","_selection","_className","_target","_hitSelections","_hitPoints","_point", "_damage"]; -_caller = _this select 0; -_target = _this select 1; -_selection = _this select 2; -_className = _this select 3; +private ["_hitSelections", "_hitPoints", "_point", "_damage"]; +params ["_caller", "_target", "_selection", "_className"]; -if (_selection == "all") then { - _target setDamage ((damage _target - BANDAGEHEAL) max 0); -} else { - _hitSelections = ["head", "body", "hand_l", "hand_r", "leg_l", "leg_r"]; - _hitPoints = ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"]; - _point = _hitPoints select (_hitSelections find _selection); - - _damage = ((_target getHitPointDamage _point) - BANDAGEHEAL) max 0; - [_target, _point, _damage] call FUNC(setHitPointDamage); -}; +[[_target, _selection], QUOTE(DFUNC(treatmentBasic_bandageLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ diff --git a/addons/medical/functions/fnc_treatmentBasic_bandageLocal.sqf b/addons/medical/functions/fnc_treatmentBasic_bandageLocal.sqf new file mode 100644 index 0000000000..ee04decfbd --- /dev/null +++ b/addons/medical/functions/fnc_treatmentBasic_bandageLocal.sqf @@ -0,0 +1,50 @@ +/* + * Author: Glowbal + * Handles the bandage of a patient. + * + * Arguments: + * 0: The patient + * 1: Treatment classname + * + * + * Return Value: + * Succesful treatment started + * + * Public: No + */ + +#include "script_component.hpp" +#define BANDAGEHEAL 0.8 + +params ["_target", "_selectionName"]; + +_damageBodyParts = _target getvariable [QGVAR(bodyPartStatus), [0,0,0,0,0,0]]; + +// Ensure it is a valid bodypart +_part = [_selectionName] call FUNC(selectionNameToNumber); +if (_part < 0) exitwith {false}; + +if ((_damageBodyParts select _part) > 0) then { + _damageOnPart = (_damageBodyParts select _part); + // Temp quick fix to change in behaviour of basic medical bandaging + if (_damageOnPart - BANDAGEHEAL > 0) then { + _damageOnPart = _damageOnPart - (_damageOnPart * BANDAGEHEAL); + } else { + _damageOnPart = _damageOnPart - BANDAGEHEAL; + }; + _damageBodyParts set [_part, _damageOnPart max 0]; + _target setvariable [QGVAR(bodyPartStatus), _damageBodyParts, true]; + TRACE_2("ACE_DEBUG: Treatment BASIC Bandage Broadcast value here",_unit, _target getvariable QGVAR(bodyPartStatus)); +}; + +EXPLODE_6_PVT(_damageBodyParts,_headDamage,_torsoDamage,_handsDamageR,_handsDamageL,_legsDamageR,_legsDamageL); +_target setHitPointDamage ["hitHead", _headDamage min 0.95]; +_target setHitPointDamage ["hitBody", _torsoDamage min 0.95]; +_target setHitPointDamage ["hitHands", (_handsDamageR + _handsDamageL) min 0.95]; +_target setHitPointDamage ["hitLegs", (_legsDamageR + _legsDamageL) min 0.95]; + +{ + _target setHitPointDamage [_x, (_damageBodyParts select _foreachIndex) min 0.95]; +}foreach GVAR(HITPOINTS); + +true; diff --git a/addons/medical/functions/fnc_treatmentBasic_bloodbag.sqf b/addons/medical/functions/fnc_treatmentBasic_bloodbag.sqf index 7cfb65a909..5700d351cb 100644 --- a/addons/medical/functions/fnc_treatmentBasic_bloodbag.sqf +++ b/addons/medical/functions/fnc_treatmentBasic_bloodbag.sqf @@ -9,16 +9,13 @@ * 3: Treatment classname * * Return Value: - * nil + * None * * Public: No */ #include "script_component.hpp" -private ["_caller", "_target", "_treatmentClassname"]; -_caller = _this select 0; -_target = _this select 1; -_treatmentClassname = _this select 3; +params ["_caller", "_target", "_treatmentClassname"]; [[_target, _treatmentClassname], QUOTE(DFUNC(treatmentBasic_bloodbagLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ diff --git a/addons/medical/functions/fnc_treatmentBasic_bloodbagLocal.sqf b/addons/medical/functions/fnc_treatmentBasic_bloodbagLocal.sqf index 08057c9492..64ba6e031b 100644 --- a/addons/medical/functions/fnc_treatmentBasic_bloodbagLocal.sqf +++ b/addons/medical/functions/fnc_treatmentBasic_bloodbagLocal.sqf @@ -15,7 +15,7 @@ #include "script_component.hpp" #define BLOODBAGHEAL 70 -PARAMS_2(_target,_treatmentClassname); +params ["_target", "_treatmentClassname"]; private ["_blood", "_bloodAdded"]; diff --git a/addons/medical/functions/fnc_treatmentBasic_epipen.sqf b/addons/medical/functions/fnc_treatmentBasic_epipen.sqf index bdfb95fb2a..d387e91f89 100644 --- a/addons/medical/functions/fnc_treatmentBasic_epipen.sqf +++ b/addons/medical/functions/fnc_treatmentBasic_epipen.sqf @@ -9,17 +9,13 @@ * 3: Treatment classname * * Return Value: - * nil + * None * * Public: No */ - #include "script_component.hpp" -private ["_caller", "_target","_className"]; -_caller = _this select 0; -_target = _this select 1; -_className = _this select 3; +params ["_caller", "_target","_className"]; [_target, false] call FUNC(setUnconscious); diff --git a/addons/medical/functions/fnc_treatmentBasic_morphine.sqf b/addons/medical/functions/fnc_treatmentBasic_morphine.sqf index 048b314781..87559d0dd2 100644 --- a/addons/medical/functions/fnc_treatmentBasic_morphine.sqf +++ b/addons/medical/functions/fnc_treatmentBasic_morphine.sqf @@ -9,7 +9,7 @@ * 3: Treatment classname * * Return Value: - * nil + * None * * Public: No */ @@ -17,8 +17,6 @@ #include "script_component.hpp" #define MORPHINEHEAL 0.4 -private ["_caller", "_target"]; -_caller = _this select 0; -_target = _this select 1; +params ["_caller", "_target"]; [[_target], QUOTE(DFUNC(treatmentBasic_morphineLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ diff --git a/addons/medical/functions/fnc_treatmentBasic_morphineLocal.sqf b/addons/medical/functions/fnc_treatmentBasic_morphineLocal.sqf index 9dddf743e2..780196819b 100644 --- a/addons/medical/functions/fnc_treatmentBasic_morphineLocal.sqf +++ b/addons/medical/functions/fnc_treatmentBasic_morphineLocal.sqf @@ -7,7 +7,7 @@ * 1: The patient * * Return Value: - * nil + * None * * Public: No */ @@ -15,8 +15,8 @@ #include "script_component.hpp" #define MORPHINEHEAL 0.4 -private ["_target", "_morphine", "_pain"]; -_target = _this select 0; +private ["_morphine", "_pain"]; +params ["_target"]; // reduce pain, pain sensitivity _morphine = ((_target getVariable [QGVAR(morphine), 0]) + MORPHINEHEAL) min 1; diff --git a/addons/medical/functions/fnc_treatmentIV.sqf b/addons/medical/functions/fnc_treatmentIV.sqf index e0c4d20ed6..2a7bbc6adf 100644 --- a/addons/medical/functions/fnc_treatmentIV.sqf +++ b/addons/medical/functions/fnc_treatmentIV.sqf @@ -8,26 +8,23 @@ * 2: SelectionName * 3: Treatment classname * - * * Return Value: - * + * Succesful treatment started * * Public: Yes */ #include "script_component.hpp" -private ["_caller", "_target", "_selectionName", "_className", "_items", "_removeItem"]; -_caller = _this select 0; -_target = _this select 1; -_selectionName = _this select 2; -_className = _this select 3; -_items = _this select 4; +private "_removeItem"; +params ["_caller", "_target", "_selectionName", "_className", "_items"]; -if (count _items == 0) exitwith {}; +if (count _items == 0) exitwith {false}; _removeItem = _items select 0; [[_target, _className], QUOTE(DFUNC(treatmentIVLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ [_target, _removeItem] call FUNC(addToTriageCard); [_target, "activity", LSTRING(Activity_gaveIV), [[_caller] call EFUNC(common,getName)]] call FUNC(addToLog); [_target, "activity_view", LSTRING(Activity_gaveIV), [[_caller] call EFUNC(common,getName)]] call FUNC(addToLog); // TODO expand message + +true diff --git a/addons/medical/functions/fnc_treatmentIVLocal.sqf b/addons/medical/functions/fnc_treatmentIVLocal.sqf index 9abb5fda2f..37cba2ad1b 100644 --- a/addons/medical/functions/fnc_treatmentIVLocal.sqf +++ b/addons/medical/functions/fnc_treatmentIVLocal.sqf @@ -8,16 +8,15 @@ * * * Return Value: - * nil + * None * * Public: Yes */ #include "script_component.hpp" -private ["_target", "_treatmentClassname", "_config", "_volumeAdded", "_typeOf", "_varName", "_bloodVolume"]; -_target = _this select 0; -_treatmentClassname = _this select 1; +private ["_config", "_volumeAdded", "_typeOf", "_varName", "_bloodVolume"]; +params ["_target", "_treatmentClassname"]; _bloodVolume = _target getvariable [QGVAR(bloodVolume), 100]; if (_bloodVolume >= 100) exitwith {}; diff --git a/addons/medical/functions/fnc_treatmentTourniquet.sqf b/addons/medical/functions/fnc_treatmentTourniquet.sqf index 148ed06252..2a169a50d0 100644 --- a/addons/medical/functions/fnc_treatmentTourniquet.sqf +++ b/addons/medical/functions/fnc_treatmentTourniquet.sqf @@ -10,7 +10,7 @@ * * * Return Value: - * + * Succesful treatment started * * Public: No */ @@ -24,7 +24,7 @@ _selectionName = _this select 2; _className = _this select 3; _items = _this select 4; -if (count _items == 0) exitwith {}; +if (count _items == 0) exitwith {false}; _part = [_selectionName] call FUNC(selectionNameToNumber); if (_part == 0 || _part == 1) exitwith { @@ -47,4 +47,4 @@ _removeItem = _items select 0; [_target, "activity_view", LSTRING(Activity_appliedTourniquet), [[_caller] call EFUNC(common,getName)]] call FUNC(addToLog); // TODO expand message -true; +true diff --git a/addons/medical/functions/fnc_treatmentTourniquetLocal.sqf b/addons/medical/functions/fnc_treatmentTourniquetLocal.sqf index 5108bf8433..d1ffd34e4b 100644 --- a/addons/medical/functions/fnc_treatmentTourniquetLocal.sqf +++ b/addons/medical/functions/fnc_treatmentTourniquetLocal.sqf @@ -7,16 +7,14 @@ * 1: Item used classname * * Return Value: - * nil + * None * * Public: No */ #include "script_component.hpp" -private ["_target", "_tourniquetItem", "_part", "_tourniquets", "_applyingTo", "_selectionName"]; -_target = _this select 0; -_tourniquetItem = _this select 1; -_selectionName = _this select 2; +private ["_tourniquets", "_part", "_applyingTo"]; +params ["_target", "_tourniquetItem", "_selectionName"]; [_target] call FUNC(addToInjuredCollection); @@ -29,24 +27,21 @@ _tourniquets set[_part, _applyingTo]; _target setvariable [QGVAR(tourniquets), _tourniquets, true]; [{ - private ["_args","_target","_applyingTo","_part", "_tourniquets", "_time"]; - _args = _this select 0; - _target = _args select 0; - _applyingTo = _args select 1; - _part = _args select 2; - _time = _args select 3; + params ["_args", "_idPFH"]; + _args params ["_target", "_applyingTo", "_part", "_time"]; + if (!alive _target) exitwith { - [(_this select 1)] call cba_fnc_removePerFrameHandler; + [_idPFH] call CBA_fnc_removePerFrameHandler; }; _tourniquets = _target getvariable [QGVAR(tourniquets), [0,0,0,0,0,0]]; if !((_tourniquets select _part) == _applyingTo) exitwith { // Tourniquet has been removed - [(_this select 1)] call cba_fnc_removePerFrameHandler; + [_idPFH] call CBA_fnc_removePerFrameHandler; }; if (ACE_time - _time > 120) then { _target setvariable [QGVAR(pain), (_target getvariable [QGVAR(pain), 0]) + 0.005]; }; }, 5, [_target, _applyingTo, _part, ACE_time] ] call CBA_fnc_addPerFrameHandler; -true; +true diff --git a/addons/medical/functions/fnc_treatment_failure.sqf b/addons/medical/functions/fnc_treatment_failure.sqf index 8a5d784301..e943485e0e 100644 --- a/addons/medical/functions/fnc_treatment_failure.sqf +++ b/addons/medical/functions/fnc_treatment_failure.sqf @@ -10,21 +10,16 @@ * 4: Items available > * * Return Value: - * nil + * None * * Public: No */ #include "script_component.hpp" -private ["_args", "_caller", "_target","_selectionName","_className","_config","_callback", "_usersOfItems", "_weaponSelect", "_lastAnim"]; - -_args = _this select 0; -_caller = _args select 0; -_target = _args select 1; -_selectionName = _args select 2; -_className = _args select 3; -_usersOfItems = _args select 5; +private ["_config", "_callback", "_weaponSelect", "_lastAnim"]; +params ["_args"]; +_args params ["_caller", "_target", "_selectionName", "_className", "_items", "_usersOfItems"]; if (primaryWeapon _caller == "ACE_FakePrimaryWeapon") then { _caller removeWeapon "ACE_FakePrimaryWeapon"; @@ -33,14 +28,14 @@ if (vehicle _caller == _caller) then { _lastAnim = _caller getvariable [QGVAR(treatmentPrevAnimCaller), ""]; //Don't play another medic animation (when player is rapidily treating) TRACE_2("Reseting to old animation", animationState player, _lastAnim); - switch (true) do { - case (_lastAnim == "AinvPknlMstpSlayWrflDnon_medic"): {_lastAnim = "AmovPknlMstpSrasWrflDnon"}; - case (_lastAnim == "AinvPpneMstpSlayWrflDnon_medic"): {_lastAnim = "AmovPpneMstpSrasWrflDnon"}; - case (_lastAnim == "AinvPknlMstpSlayWnonDnon_medic"): {_lastAnim = "AmovPknlMstpSnonWnonDnon"}; - case (_lastAnim == "AinvPpneMstpSlayWpstDnon_medic"): {_lastAnim = "AinvPpneMstpSlayWpstDnon"}; - case (_lastAnim == "AinvPknlMstpSlayWpstDnon_medic"): {_lastAnim = "AmovPknlMstpSrasWpstDnon"}; + switch (toLower _lastAnim) do { + case "ainvpknlmstpslaywrfldnon_medic": {_lastAnim = "AmovPknlMstpSrasWrflDnon"}; + case "ainvppnemstpslaywrfldnon_medic": {_lastAnim = "AmovPpneMstpSrasWrflDnon"}; + case "ainvpknlmstpslaywnondnon_medic": {_lastAnim = "AmovPknlMstpSnonWnonDnon"}; + case "ainvppnemstpslaywpstdnon_medic": {_lastAnim = "AinvPpneMstpSlayWpstDnon"}; + case "ainvpknlmstpslaywpstdnon_medic": {_lastAnim = "AmovPknlMstpSrasWpstDnon"}; }; - [_caller, _lastAnim, 1] call EFUNC(common,doAnimation); + [_caller, _lastAnim, 2] call EFUNC(common,doAnimation); }; _caller setvariable [QGVAR(treatmentPrevAnimCaller), nil]; @@ -57,8 +52,9 @@ if ((_weaponSelect params [["_previousWeapon", ""]]) && {(_previousWeapon != "") }; { - (_x select 0) addItem (_x select 1); -}foreach _usersOfItems; + _x params ["_unit", "_item"]; + _unit addItem _item; +} foreach _usersOfItems; // Record specific callback _config = (configFile >> "ACE_Medical_Actions" >> "Basic" >> _className); @@ -67,10 +63,10 @@ if (GVAR(level) >= 2) then { }; _callback = getText (_config >> "callbackFailure"); -if (isNil _callback) then { - _callback = compile _callback; +_callback = if (isNil _callback) then { + compile _callback } else { - _callback = missionNamespace getvariable _callback; + missionNamespace getvariable _callback }; _args call _callback; diff --git a/addons/medical/functions/fnc_treatment_success.sqf b/addons/medical/functions/fnc_treatment_success.sqf index f5cb9baf71..bf183e24db 100644 --- a/addons/medical/functions/fnc_treatment_success.sqf +++ b/addons/medical/functions/fnc_treatment_success.sqf @@ -10,19 +10,16 @@ * 4: Items available > * * Return Value: - * nil + * None * * Public: No */ #include "script_component.hpp" -private ["_args", "_caller", "_target","_selectionName","_className","_config","_callback", "_weaponSelect", "_lastAnim"]; -_args = _this select 0; -_caller = _args select 0; -_target = _args select 1; -_selectionName = _args select 2; -_className = _args select 3; +private ["_config", "_callback", "_weaponSelect", "_lastAnim"]; +params ["_args"]; +_args params ["_caller", "_target","_selectionName","_className", "_items", "_usersOfItems"]; if (primaryWeapon _caller == "ACE_FakePrimaryWeapon") then { _caller removeWeapon "ACE_FakePrimaryWeapon"; @@ -31,14 +28,14 @@ if (vehicle _caller == _caller) then { _lastAnim = _caller getvariable [QGVAR(treatmentPrevAnimCaller), ""]; //Don't play another medic animation (when player is rapidily treating) TRACE_2("Reseting to old animation", animationState player, _lastAnim); - switch (true) do { - case (_lastAnim == "AinvPknlMstpSlayWrflDnon_medic"): {_lastAnim = "AmovPknlMstpSrasWrflDnon"}; - case (_lastAnim == "AinvPpneMstpSlayWrflDnon_medic"): {_lastAnim = "AmovPpneMstpSrasWrflDnon"}; - case (_lastAnim == "AinvPknlMstpSlayWnonDnon_medic"): {_lastAnim = "AmovPknlMstpSnonWnonDnon"}; - case (_lastAnim == "AinvPpneMstpSlayWpstDnon_medic"): {_lastAnim = "AinvPpneMstpSlayWpstDnon"}; - case (_lastAnim == "AinvPknlMstpSlayWpstDnon_medic"): {_lastAnim = "AmovPknlMstpSrasWpstDnon"}; + switch (tolower _lastAnim) do { + case "ainvpknlmstpslaywrfldnon_medic": {_lastAnim = "AmovPknlMstpSrasWrflDnon"}; + case "ainvppnemstpslaywrfldnon_medic": {_lastAnim = "AmovPpneMstpSrasWrflDnon"}; + case "ainvpknlmstpslaywnondnon_medic": {_lastAnim = "AmovPknlMstpSnonWnonDnon"}; + case "ainvppnemstpslaywpstdnon_medic": {_lastAnim = "AinvPpneMstpSlayWpstDnon"}; + case "ainvpknlmstpslaywpstdnon_medic": {_lastAnim = "AmovPknlMstpSrasWpstDnon"}; }; - [_caller, _lastAnim, 1] call EFUNC(common,doAnimation); + [_caller, _lastAnim, 2] call EFUNC(common,doAnimation); }; _caller setvariable [QGVAR(treatmentPrevAnimCaller), nil]; diff --git a/addons/medical/functions/fnc_unconsciousPFH.sqf b/addons/medical/functions/fnc_unconsciousPFH.sqf index 5b1ca04d2d..0e8c424ca3 100644 --- a/addons/medical/functions/fnc_unconsciousPFH.sqf +++ b/addons/medical/functions/fnc_unconsciousPFH.sqf @@ -13,21 +13,17 @@ * 1: PFEH ID * * ReturnValue: - * nil + * None * * Public: yes */ - #include "script_component.hpp" private ["_unit", "_minWaitingTime", "_slotInfo", "_hasMovedOut", "_parachuteCheck", "_args", "_originalPos", "_startingTime", "_awakeInVehicleAnimation", "_oldVehicleAnimation", "_vehicle"]; -_args = _this select 0; -_unit = _args select 0; -_originalPos = _args select 1; -_startingTime = _args select 2; -_minWaitingTime = _args select 3; -_hasMovedOut = _args select 4; -_parachuteCheck = _args select 5; +params ["_args", "_idPFH"]; +_args params ["_unit", "_originalPos", "_startingTime", "_minWaitingTime", "_hasMovedOut", "_parachuteCheck"]; + +TRACE_6("ACE_DEBUG_Unconscious_PFH",_unit, _originalPos, _startingTime, _minWaitingTime, _hasMovedOut, _parachuteCheck); if (!alive _unit) exitwith { if ("ACE_FakePrimaryWeapon" in (weapons _unit)) then { @@ -45,11 +41,14 @@ if (!alive _unit) exitwith { [_unit, "isUnconscious"] call EFUNC(common,unmuteUnit); ["medical_onUnconscious", [_unit, false]] call EFUNC(common,globalEvent); - [(_this select 1)] call cba_fnc_removePerFrameHandler; + TRACE_3("ACE_DEBUG_Unconscious_Exit",_unit, (!alive _unit) , QGVAR(unconscious)); + + [_idPFH] call CBA_fnc_removePerFrameHandler; }; // In case the unit is no longer in an unconscious state, we are going to check if we can already reset the animation if !(_unit getvariable ["ACE_isUnconscious",false]) exitwith { + TRACE_7("ACE_DEBUG_Unconscious_PFH",_unit, _args, [_unit] call FUNC(isBeingCarried), [_unit] call FUNC(isBeingDragged), _idPFH, _unit getvariable QGVAR(unconsciousArguments),animationState _unit); // TODO, handle this with carry instead, so we can remove the PFH here. // Wait until the unit isn't being carried anymore, so we won't end up with wierd animations if !(([_unit] call FUNC(isBeingCarried)) || ([_unit] call FUNC(isBeingDragged))) then { @@ -57,7 +56,7 @@ if !(_unit getvariable ["ACE_isUnconscious",false]) exitwith { TRACE_1("Removing fake weapon [on wakeup]",_unit); _unit removeWeapon "ACE_FakePrimaryWeapon"; }; - + if (vehicle _unit == _unit) then { if (animationState _unit == "AinjPpneMstpSnonWrflDnon") then { [_unit,"AinjPpneMstpSnonWrflDnon_rolltofront", 2] call EFUNC(common,doAnimation); @@ -99,7 +98,7 @@ if !(_unit getvariable ["ACE_isUnconscious",false]) exitwith { ["medical_onUnconscious", [_unit, false]] call EFUNC(common,globalEvent); // EXIT PFH - [(_this select 1)] call cba_fnc_removePerFrameHandler; + [_idPFH] call CBA_fnc_removePerFrameHandler; }; if (!_hasMovedOut) then { // Reset the unit back to the previous captive state. @@ -130,13 +129,15 @@ if (_parachuteCheck) then { }; if (!local _unit) exitwith { + TRACE_6("ACE_DEBUG_Unconscious_PFH",_unit, _args, _startingTime, _minWaitingTime, _idPFH, _unit getvariable QGVAR(unconsciousArguments)); _args set [3, _minWaitingTime - (ACE_time - _startingTime)]; _unit setvariable [QGVAR(unconsciousArguments), _args, true]; - [(_this select 1)] call cba_fnc_removePerFrameHandler; + [_idPFH] call CBA_fnc_removePerFrameHandler; }; // Ensure we are waiting at least a minimum period before checking if we can wake up the unit again, allows for temp knock outs if ((ACE_time - _startingTime) >= _minWaitingTime) exitwith { + TRACE_2("ACE_DEBUG_Unconscious_Temp knock outs",_unit, [_unit] call FUNC(getUnconsciousCondition)); if (!([_unit] call FUNC(getUnconsciousCondition))) then { _unit setvariable ["ACE_isUnconscious", false, true]; }; diff --git a/addons/medical/functions/fnc_useItem.sqf b/addons/medical/functions/fnc_useItem.sqf index 750ea0452f..770d8b6ea7 100644 --- a/addons/medical/functions/fnc_useItem.sqf +++ b/addons/medical/functions/fnc_useItem.sqf @@ -8,17 +8,16 @@ * 2: Item * * ReturnValue: - * + * 0: success + * 1: Unit * * Public: Yes */ #include "script_component.hpp" -private ["_medic", "_patient", "_item", "_return","_crew"]; -_medic = _this select 0; -_patient = _this select 1; -_item = _this select 2; +private ["_return","_crew"]; +params ["_medic", "_patient", "_item"]; if (isnil QGVAR(setting_allowSharedEquipment)) then { GVAR(setting_allowSharedEquipment) = true; @@ -42,7 +41,7 @@ if ([vehicle _medic] call FUNC(isMedicalVehicle) && {vehicle _medic != _medic}) _return = [true, _x]; [[_x, _item], QUOTE(EFUNC(common,useItem)), _x] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ }; - }foreach _crew; + } foreach _crew; }; -_return; +_return diff --git a/addons/medical/functions/fnc_useItems.sqf b/addons/medical/functions/fnc_useItems.sqf index fbaa324022..0d937c0938 100644 --- a/addons/medical/functions/fnc_useItems.sqf +++ b/addons/medical/functions/fnc_useItems.sqf @@ -8,7 +8,7 @@ * 2: Items > * * ReturnValue: - * + * None * * Public: Yes */ @@ -16,9 +16,7 @@ #include "script_component.hpp" private ["_medic", "_patient", "_items", "_itemUsedInfo", "_itemsUsedBy"]; -_medic = _this select 0; -_patient = _this select 1; -_items = _this select 2; +params ["_medic", "_patient", "_items"]; _itemsUsedBy = []; { @@ -27,7 +25,7 @@ _itemsUsedBy = []; { _itemUsedInfo = [_medic, _patient, _x] call FUNC(useItem); if (_itemUsedInfo select 0) exitwith { _itemsUsedBy pushback [(_itemUsedInfo select 1), _x]}; - }foreach _x; + } foreach _x; }; // handle required item @@ -35,6 +33,6 @@ _itemsUsedBy = []; _itemUsedInfo = [_medic, _patient, _x] call FUNC(useItem); if (_itemUsedInfo select 0) exitwith { _itemsUsedBy pushback [(_itemUsedInfo select 1), _x]}; }; -}foreach _items; +} foreach _items; [count _items == count _itemsUsedBy, _itemsUsedBy]; diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 8d0ec93113..ba34cffae2 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -1593,6 +1593,7 @@ Keine Žádný Nada + Aucun Nincs @@ -2213,14 +2214,7 @@ Perna Direita - Bandaging removes bloodstains - Bandagieren entfernt Blutflecken - Bandażowanie usuwa ślady krwi - Obvázání odstraňuje skvrny od krve - El vendaje elimina las manchas de sangre - Bandagem remove manchas de sangue - A kötözés eltávolítja a vérfoltokat - Перевязка убирает пятна крови + Heal fully bandaged hitpoints Pain is only temporarily suppressed @@ -2229,6 +2223,7 @@ Bolest je potlačena pouze dočasně El dolor se suprime solo temporalmente Dor é suprimida somente temporáriamente + La douleur est seulement supprimée temporairement A fájdalom csak ideiglenesen csökken Боль приглушается только временно @@ -2744,6 +2739,7 @@ ACE-Medicsystem ACE Zdravotnické ACE Médico + ACE Médical ACE Orvosi Rendszer @@ -2754,6 +2750,7 @@ Medizinische Einstellungen [ACE] Lékařské nastavení [ACE] Ajustes médicos [ACE] + Option médicale [ACE] Orvosi beállítások [ACE] @@ -2764,6 +2761,7 @@ Medizinisches Level Úroveň medického Nível médico + Niveau de simulation médicale Orvosi szint @@ -2774,6 +2772,7 @@ Wie hoch soll das medizinische Simulationslevel sein? Jaká je úroveň lékařské simulace? Qual o nível de simulação médica? + Quel niveau de simulation médicale choisissez vous? Milyen komplex legyen az orvosi szimuláció? @@ -2784,6 +2783,7 @@ Standard Základní Básica + Basique Alap @@ -2794,6 +2794,7 @@ Erweitert Pokročilé Avançada + Avancée Fejlett @@ -2804,6 +2805,7 @@ Medizinische Einstellungen Úroveň zdravotníků Configuração médica + Paramètre des infirmiers Orvosok beállítása @@ -2813,6 +2815,7 @@ ¿Cuál es el nivel de detalle preferido para los médicos? Jaká úroveň detailů je preferována pro zdravotníky? Qual o nível de detalhe preferido para os médicos? + Quel niveau de détail voullez vous pour les infirmier? Mi a javasolt részletesség orvosok számára? @@ -2823,6 +2826,7 @@ Sanitäter deaktivieren Zakázat zdravotníky Desativar médicos + Désactiver les infirmiers Orvosok letiltása @@ -2833,6 +2837,7 @@ Abfälle aktivieren Povolit odpadky Ativar lixo médico + Activer les détritus Szemét engedélyezése @@ -2843,6 +2848,7 @@ Aktiviere Abfälle, wenn eine Behandlung durchgeführt wurde Vytváří odpad zdravotnického materiálu pří léčení Ativar lixo ser criado após tratamento + Activer la création de détrimus au début des traitements Engedélyezi a szemét keletkezését ellátáskor @@ -2853,6 +2859,7 @@ Dauer des angezeigten Abfalls Životnost pro odpadky Tempo de vida dos objetos do lixo + Durée d'affichage des détritus Szemétobjektumok élettartama @@ -2863,6 +2870,7 @@ Wie lange sollen Abfälle am Boden liegen (in Sekunden)? -1 ist für immer. Za jak dlouho začnou odpadky mizet? V sekundách. -1 navždy. Quanto tempo os objetos do lixo devem ficar? Em segundos. -1 é para sempre. + Combien de temps doivent rester affiché les détritus? En secondes. -1 pour tout le temps Milyen sokáig legyenek jelen a szemétobjektumok (másodpercben)? A -1 végtelen időt jelent. @@ -2873,6 +2881,7 @@ Schreie aktivieren Povolit křik Ativar gritos + Activer les hurlements Kiáltások engedélyezése @@ -2883,6 +2892,7 @@ Aktiviere Schreie bei verletzten Einheiten Povolit křičení zraněných jednotek Ativa gritos para unidades feridas + Active les hurlements d'unités blessées Engedélyezi a sérült egységek kiáltásait @@ -2893,6 +2903,7 @@ Spielerschaden Poškození hráče Dano do jogador + Dégats des joueurs Játékos sérülés @@ -2903,6 +2914,7 @@ Wie viel Schaden kann ein Spieler erleiden, bevor er getötet wird? Jaké poškození může hráč dostat než bude zabit? Qal é o dano que um jogador pode sofrer antes de morrer? + Quels dégats peut subir un joueur avant d'être tué Mennyi sérülést szenvedhet el egy játékos, mielőtt meghal? @@ -2913,6 +2925,7 @@ KI-Schaden Poškození AI Dano da IA + Dégats des IA AI sérülés @@ -2923,6 +2936,7 @@ Wie viel Schaden kann eine KI erleiden, bis sie getötet wird? Jaké poškození může AI dostat než bude zabito? Qual é o dano que uma IA pode sofrer antes de morrer? + Quels dégats peut subir une IA avant d'être tuée Mennyi sérülést szenvedhet el egy AI, mielőtt meghal? @@ -2933,6 +2947,7 @@ KI-Bewusstlosigkeit Bezvědomí AI Inconsciência da IA + Inconscience des IA AI eszméletlenség @@ -2943,6 +2958,7 @@ KI kann bewusstlos werden Umožňuje AI upadnout do bezvědomí Permite IA ficar inconsciente + Autoriser les IA à tomber inconsciente Engedélyezi az AI eszméletének elvesztését @@ -2951,6 +2967,7 @@ IA controlada remotamente Zdalnie sterowane AI Vzdáleně ovládané AI + Contrôle à distance des IA Távvezérelt AI Зевса считать ботом @@ -2960,6 +2977,7 @@ Tratar unidades remotamente controladas como IA? Traktuj jednostki zdalnie sterowane (przez Zeusa) jako AI, nie jako graczy? Ošetřit vzdáleně ovládané jednotky jako AI, ne jako hráče? + Soigner les unitées controlées à distance comme des IA et non comme des joueurs? Távvezérelt egységek AI-ként, nem játékosként való kezelése? Обрабатывать дистанционно управляемых юнитов как ботов, а не как игроков? @@ -2971,6 +2989,7 @@ Verhindere direkten Tod Zabránit okamžité smrti Previnir morte instantânea + Empêcher la morte instantanée Azonnali halál kiiktatása @@ -2981,6 +3000,7 @@ Lässt eine Einheit bewusstlos werden anstatt zu sterben Jednotka upadne do bezvědomí namísto smrti Fazer a unidade ficar inconsciente invés de morrer + Forcer l'inconscience au lieu de la mort instantanée Egy egység kerüljön eszméletlen állapotba a halott helyett @@ -2991,6 +3011,7 @@ Verblutungsmultiplikator Koeficient krvácení Coeficiente de sangramento + Coefficient de saignement Vérzési koefficiens @@ -3001,6 +3022,7 @@ Multiplikator um die Verblutungsgeschwindigkeit zu verändern Koeficient rychlosti krvácení Coeficiente para modificar a velocidade do sangramento + Coefficient modifiant la vitesse de saignement Egy szorzó a vérzés sebességének szabályozására @@ -3011,6 +3033,7 @@ Schmerzmultiplikator Koeficient bolesti Coeficiente de dor + Coefficient de douleur Fájdalmi koefficiens @@ -3021,6 +3044,7 @@ Multiplikator um den Schmerzintensität zu verändern Koeficient intenzity bolesti Coeficiente para modificar a instensidade de dor + Coefficient modifiant l'intensité de la douleur Egy szorzó a fájdalom erősségének szabályozására @@ -3031,6 +3055,7 @@ Status synchronisieren Synchronizovat status Sincronizar estado + Status de la synchronisation Szinkronizációs állapot @@ -3041,6 +3066,7 @@ Status der Einheit synchron halten. Sollte aktiviert bleiben. Udržuje status jednotky synchronizovaný. Doporučeno zapnout. Mater o estado da unidade sincronizado. Recomendado ativado. + Garder l'unité synchronisée, Recommandé sur oui. Egységállapotok szinkronizálása. Javasolt a bekapcsolása. @@ -3051,6 +3077,7 @@ Aktiviert ein medizinisches System für Spieler und KI. Poskytuje zdravotní systém pro hráče a AI. Proporciona o sistema médico para os jogadores e a IA. + Fourni un système médical pour les joueurs tout comme pour les IA. Egy orvosi rendszert ad játékosok és AI-k számára. @@ -3061,6 +3088,7 @@ Erweiterte medizinische Einstellungen [ACE] Pokročilé zdravotnické nastavení [ACE] Ajustes médicos avançados [ACE] + Paramètres des soins avancés Fejlett orvosi beállítások [ACE] @@ -3071,6 +3099,7 @@ Aktiviert für Povoleno pro Habilitado para + Activer pour Engedélyezve... @@ -3081,6 +3110,7 @@ Wähle aus welche Einheiten das erweiterte medizinische System haben Vyberte, pro jaké jednotky bude pokročilý zdravotní systém povolen Selecione quais unidades o sistema médico avançado será habilitado + Sélectionne pour quelle unité le système de soin avancé est activé Kiválasztható, mely egységek számára legyen engedélyezve a fejlett orvosi rendszer @@ -3091,6 +3121,7 @@ Nur Spieler Pouze hráči Somente jogadores + Joueur uniquement Csak játékosok @@ -3101,6 +3132,7 @@ Spieler und KI Hráči a AI Jogadores e IA + Joueur et IA Játékosok és AI @@ -3111,6 +3143,7 @@ Aktiviere erweiterte Wunden Povolit pokročilé zranění Ativar ferimentos avançados + Activer les blessures avancées Komplex sebek engedélyezése @@ -3121,6 +3154,7 @@ Erlaube das Öffnen von bandagierten Wunden? Umožnit znovuotevření zavázané rány? Permitr reabertura de ferimentos enfaixados? + Permettre la réouverture des bandages Visszanyílhatnak a bekötözött sebek? @@ -3131,6 +3165,7 @@ Fahrzeugunfälle Poškození z kolize Batidas de veículos + Accident en véhicule Járműbalesetek @@ -3141,6 +3176,7 @@ Bekommen Einheiten von Fahrzeugunfällen Schaden? Dostane jednotka poškození při autonehodě? As unidades recebem dano de uma batida de veículo? + Les unités subissent des dégats lors d'accident Sérülnek-e az egységek autós ütközés során? @@ -3151,6 +3187,7 @@ Erlaube Erste-Hilfe-Set Povolit osobní lékárničky Permitir Kit de Primeiros Socorros + Permettre le kit de premier secours Elsősegélycsomag engedélyezése @@ -3161,6 +3198,7 @@ Wer kann das Erste-Hilfe-Set für eine Endheilung verwenden? Kdo může použít osobní lékárničku pro plné vyléčení? Quem pode usar o KPS para cura completa? + Qui peut utilier les kit de premier secours pour soigner Ki használhatja az elsősegélycsomagot teljes gyógyításra? @@ -3171,6 +3209,7 @@ Jeder Kdokoliv Qualquer um + Tout le monde Akárki @@ -3181,6 +3220,7 @@ Nur Sanitäter Pouze zdravotník Somente médicos + Infirmier uniquement Csak orvosok @@ -3191,6 +3231,7 @@ Nur Ärzte Pouze doktor Somente doutores + Médecin uniquement Csak doktorok @@ -3201,6 +3242,7 @@ Entferne Erste-Hilfe-Set bei Verwendung Odebrat osobní lékárničku po použití Remover o KPS depois do uso + Enlever le KPS à l'utilisation Elsősegélycsomag eltávolítása használatkor @@ -3211,6 +3253,7 @@ Sollen Erste-Hilfe-Sets bei Verwendung entfernt werden? Má se osobní lékárnička odstranit po použití? Deve o KPS ser removido depois do uso? + Le Kit de Premier Secours doit il être enlevé à l'utilisation? Eltávolítódjon az elsősegélycsomag használatkor? @@ -3221,6 +3264,7 @@ Orte für Erste-Hilfe-Set Lokace osobní lékárničky Localizações do KPS + Lieu d'utilisation du KPS Elsősegélycsomag helyek @@ -3231,12 +3275,14 @@ Wo kann das Erste-Hilfe-Set verwendet werden? Kde může být použita osobní lékárnička? Onde o kit de primeiros socorros pode ser utilizado? + Où le Kit de Premier Secour peut être utilisé Hol lehet az elsősegélycsomagot használni? Condition PAK Podmínka osobní lékárničky Condición EPA + Condition d'utilisation du KPS Warunek apteczek Elsősegélycsomag állapot Condição do KPS @@ -3246,6 +3292,7 @@ When can the Personal Aid Kit be used? Kde může být použita osobní lékárnička? ¿Cuando se puede utilizar el Equipo de primeros auxilios? + Quand peut être utilisé le Kit de Premier Secours Po spełnieniu jakich warunków apteczka osobista może zostać zastosowana na pacjencie? Mikor lehet az elsősegélycsomagot használni? Onde o kit de primeiros socorros pode ser utilizado? @@ -3259,6 +3306,7 @@ Überall Kdekoliv Qualquer lugar + PArtout Akárhol @@ -3269,6 +3317,7 @@ Medizinische Fahrzeuge Zdravotnická vozidla Veículos médcos + Dans les véhicules médicals Orvosi járművek @@ -3279,6 +3328,7 @@ Medizinische Einrichtungen Zdravotnické zařízení Instalação médica + Dans les installations médicales Orvosi létesítmény @@ -3289,6 +3339,7 @@ Fahrzeuge & Einrichtungen Vozidla a zařízení Veículos e instalações + Dans les véhicules et les installations médicals Járművek & létesítmény @@ -3299,6 +3350,7 @@ Erlaube Operationskasten Povolit chirurgickou soupravu (Pokr.) Permite kit cirúrgico (avançado) + Permettre les kit de chirurgie (Avancé) Sebészkészlet (Fejlett) engedélyezése @@ -3309,6 +3361,7 @@ Wer kann den Operationskasten verwenden? Kdo může použít chirurgickou soupravu? Quem pode usar o kit cirúrgico? + Qui peut utiliser les kit de chirurgie Ki használhatja a sebészkészletet? @@ -3319,6 +3372,7 @@ Enrtferne Operationskasten (erweitert) Odebrat chirurgickou soupravu (Pokr.) Remover kit cirúrgico (avançado) + Supprimer les kit de chirurgie (Avancé) Sebészkészlet (Fejlett) eltávolítása @@ -3329,6 +3383,7 @@ Entferne Operationskästen bei Verwendung? Odebrat chirurgickou soupravu po použití? Deve o kit cirúrgico ser removido após o uso? + Le kit de chirurgie doit il être supprimé à l'utilisation Eltávolítódjon a sebészkészlet használatkor? @@ -3339,6 +3394,7 @@ Orte für Operationskästen (erweitert) Lokace chirurgické soupravy (Pokr.) Localizações do kit cirúrgico (avançado) + Lieu d'utilisation du kit de chirurgie Sebészkészlet (Fejlett) helyei @@ -3349,12 +3405,14 @@ Wo kann der Operationskasten verwendet werden? Kde může být použita chirurgická souprava? Onde o kit cirúrgico pode ser utilizado? + Où peut être utilisé les kit de chirurgie Hol lehet a sebészkészletet használni? Condition Surgical kit (Adv) Podmínka chirurgické soupravy (Pokr.) Condición de equipo quirúrgico (Av) + Conditions d'utilisation du kit de chirurgie Warunek zestawu chir. Sebészkészlet állapot Condição do Kit Cirúrgico (Avançado) @@ -3364,30 +3422,17 @@ When can the Surgical kit be used? Kde může být použita chirurgická souprava? ¿Cuando se puede utilizar el equipo quirúrgico? + Quand peut être utilisé les kit de chirurgie Po spełnieniu jakich warunków zestaw chirurgiczny może zostać zastosowany na pacjencie? Mikor lehet a sebészkészletet használni? Onde o kit cirúrgico pode ser utilizado? Когда может использоваться хирургический набор? - Bloodstains - Blutflecken - Plamy krwi - Skvrny od krve - Manchas de sangre - Manchas de sangue - Vérfoltok - Удалять пятна крови + Heal hitpoints - Bandaging removes bloodstains - Bandagieren entfernt Blutflecken - Bandażowanie usuwa ślady krwi - Obvázání odstraňuje skvrny od krve - El vendaje elimina las manchas de sangre - Bandagem remove manchas de sangue - Kötözés eltávolítja a vérfoltokat - Перевязка удаляет пятна крови + Heal fully bandaged hitpoints Pain suppression @@ -3396,6 +3441,7 @@ Potlačení bolesti Supresión del dolor Supressão de dor + Suppression de la douleur Fájdalomcsillapítás Приглушение боли @@ -3406,6 +3452,7 @@ Bolest je potlačena, ale jen dočastně El dolor se suprime solo temporalmente, no se elimina. Dor é somente temporáriamente suprimida, não removida + La douleur est temporairement supprimée, pas enlevée A fájdalom csak ideiglenesen csökken, nem távolítódik el Боль приглушается только временно @@ -3417,6 +3464,7 @@ Behandlungseinstellungen vom ACE-Medical konfigurieren Konfigurace nastavení léčby ze zdravotnické systému ACE Configure as opções de tratamento do ACE Médico + Configure les paramètres de traitement du système de soin ACE Kezelési lehetőségek konfigurálása az ACE Orvosi rendszerből @@ -3427,6 +3475,7 @@ Wiederbelebungseinstellungen [ACE] Nastavení oživení [ACE] Sistema de reavivamento [ACE] + Paramètre du revive [ACE] Újraélesztés beállításai [ACE] @@ -3437,6 +3486,7 @@ Erlaube Wiederbelebung Povolit oživení Habilitar reavivamento + Activer le revive Újraélesztés engedélyezése @@ -3447,6 +3497,7 @@ Aktiviere Standard-Wiederbelebungssystem Povolit základní systém oživení Habilitar um sistema básico de reavivamento + Active un sytème de revive basique Egy alap újraélesztési rendszer engedélyezése @@ -3457,6 +3508,7 @@ Maximale Wiederbelebungszeit Maximální čas pro oživení Tempo máximo de reavivamento + Temps maximum pour le revive Maximum újraélesztési idő @@ -3467,6 +3519,7 @@ Maximale Zeitspanne in Sekunden die eine Einheit im Wiederbelebungszustand verbringen kann Maximální doba v agónii v sekundách Quantidade máxima de segundos que uma unidade pode gastar em um estado de reavivamento + Nombre de seconde maximum qu'une unité peut être en attente d'un revive Maximum másodperc, amit egy egység újraélesztési állapotban tölthet @@ -3477,6 +3530,7 @@ Maximale Leben bei Wiederbelebung Maximální počet oživení Vidas máximas do reavivado + Nombre maximum de revive Maximum újraélesztési lehetőségek @@ -3487,6 +3541,7 @@ Maximale Anzahl von Leben einer Einheit. 0 or -1 bedeutet deaktiviert. Maximální počet životu pro jednotku. 0 nebo -1 je zakázáno. Quantidade máxima de vidas por unidade. 0 ou -1 é desativado. + Nombre de vie maximale d'une unité. 0 ou -1 désactive Egy egység maximum "életei". 0 vagy -1 letiltja. @@ -3497,6 +3552,7 @@ Aktiviert das Medicsystem 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 Egy orvosi rendszert ad játékosok és AI-k számára. @@ -3507,6 +3563,7 @@ Setze Sanitäterklassen [ACE] Určit třídu medika [ACE] Definir classe médica [ACE] + Définir comme unité médicale [ACE] Orvos beállítása [ACE] @@ -3517,6 +3574,7 @@ Liste Seznam Lista + Liste Lista @@ -3527,6 +3585,7 @@ Liste von Namen, die als Sanitäter verwendet werden. Wird durch Kommas 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 Azon egységek nevei, melyek orvosként vannak meghatározva, vesszővel elválasztva. @@ -3537,6 +3596,7 @@ Ist Sanitäter Je zdravotník É médico + Est infirmier Orvos-e @@ -3545,6 +3605,7 @@ Dieses Modul legt fest welche Einheit ein Sanitäter ist. Tento modul určuje, která jednotka je zdravotník. Este módulo determina qual unidade é um paramédico. + Ce module permet d'assigner la classe médicale à une unité sélectionnée Ez a modul engedélyezi az orvosi jelző hozzárendelését kiválasztott egységekhez. Этот модуль позволяет назначить класс медика выбранным юнитам. @@ -3556,6 +3617,7 @@ Keine Žádný Nada + Aucun Nincs @@ -3566,6 +3628,7 @@ Normaler Sanitäter Řadový zdravotník Médico regular + Infirmier standard Hagyományos orvos @@ -3576,6 +3639,7 @@ Arzt (nur erweiterte Sanitäter) Doktor (Pouze pokročilý zdravotníci) Doutor (Somente médicos avançados) + Médecin (traitements avancés uniquement) Doktor (csak fejlett orvosok) @@ -3586,6 +3650,7 @@ Weise die ACE-Sanitäterklasse einer Einheit zu Přiřadí ACE třídu zdravotníka do jednotky Atribui a classe médica do ACE a uma unidade + Assigner la classe médicale à une unité Az ACE orvosi jelző hozzárendelése egy egységhez @@ -3596,6 +3661,7 @@ Setze medizinisches Fahrzeug [ACE] Určit zdravotnické vozidlo [ACE] Definir veículo médico [ACE] + Définir comme véhicule médical [ACE] Orvosi jármű beállítása [ACE] @@ -3606,6 +3672,7 @@ Liste Seznam Lista + Liste Lista @@ -3616,6 +3683,7 @@ Liste von Fahrzeugen, die als medizinische Fahrzeuge verwendet werden. Wird durch Kommas getrennt. Seznam vozidel které budou klasifikovány jako zdravotnická vozidla, oddělené čárkami. Lista de veículos que serão classificados como veículos médicos, separados por vírgulas. + Liste de véhicule classé comme véhicule médical, séparation par virgule. Orvosi járműveknek tekintett járművek listája, vesszővel elválasztva. @@ -3626,6 +3694,7 @@ Ist medizinisches Fahrzeug Je zdravotnické vozidlo É um veículo médico + Véhicule médical Orvosi jármű-e @@ -3636,6 +3705,7 @@ Leg fest ob das Objekt in der Liste ein medizinisches Fahrzeug ist. Ať už jsou nebo nejsou objekty v seznamu budou zdravotnická vozidla. Se serão ou não os objetos dessa lista veículos médicos. + Quoi qu'il arrive les objets de la liste seront des véhicules médical A listában lévő objektumok orvosi járművek-e, vagy sem. @@ -3646,6 +3716,7 @@ Weist die ACE-Sanitäterklasse einer Einheit zu Přiřadí ACE třídu zdravotníka do jednotky Atribui a classe médica ACE a uma unidade + Assigne la classe médicale à une unité Hozzárendeli az ACE orvosi jelzőt egy egységhez @@ -3656,6 +3727,7 @@ Setze medizinische Einrichtung [ACE] Určit zdravotnické zařízení [ACE] Definir instalação médica [ACE] + Définir comme équipement médical [ACE] Orvosi létesítmény beállítása [ACE] @@ -3666,6 +3738,7 @@ Ist eine medizinische Einrichtung Je zdravotnické zařízení É uma instalação médica + Est un équipement médical Orvosi létesítmény-e @@ -3676,6 +3749,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 Egy objektum orvosi létesítményként való regisztrálása @@ -3686,6 +3760,7 @@ Definiert ein Objekt als medizinische Einrichtung. Das ermöglicht weitere Behandlungen. Kann bei Gebäuden und Fahrzeugen verwendet 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 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. @@ -3696,6 +3771,7 @@ [ACE] Medizinische Kiste (standard) [ACE] Zdravotnické zásoby (základní) [ACE] Caixa com suprimentos médicos + [ACE] Caisse médicale (basique) [ACE] Orvosi láda (Alap) @@ -3706,12 +3782,14 @@ [ACE] Medizinische Kiste (erweitert) [ACE] Zdravotnické zásoby (pokročilé) [ACE] Caixa com suprimentos médicos (Avançados) + [ACE] Caisse médicale (avancée) [ACE] Orvosi láda (Fejlett) Anytime Kdykoli Siempre + Tout le temps Zawsze Akármikor Sempre @@ -3721,6 +3799,7 @@ Stable Stabilní Estable + Stable Po stabilizacji Stabil Estável @@ -3742,6 +3821,15 @@ Distance to %1 has become to far for treatment %1 odszedł zbyt daleko, nie można kontynuować leczenia Расстояние до %1 стало слишком большим для лечения + A distância de %1 está muito longe para tratamento + + + This person (%1) is awake and cannot be loaded + Ta osoba (%1) jest przytomna i nie może zostać załadowana + + + There is no tourniquet on this body part! + Na tej części ciała nie ma stazy! - \ No newline at end of file + diff --git a/addons/medical_menu/XEH_preInit.sqf b/addons/medical_menu/XEH_preInit.sqf index c231c7df6e..65ac88e245 100644 --- a/addons/medical_menu/XEH_preInit.sqf +++ b/addons/medical_menu/XEH_preInit.sqf @@ -3,6 +3,7 @@ ADDON = false; PREP(onMenuOpen); +PREP(onMenuClose); PREP(openMenu); PREP(canOpenMenu); diff --git a/addons/medical_menu/functions/fnc_onMenuClose.sqf b/addons/medical_menu/functions/fnc_onMenuClose.sqf new file mode 100644 index 0000000000..4300089a4a --- /dev/null +++ b/addons/medical_menu/functions/fnc_onMenuClose.sqf @@ -0,0 +1,21 @@ +/* + * Author: joko // Jonas + * Handle medical menu closed + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * call ace_medical_menu_onMenuClosed + * + * Public: No + */ +#include "script_component.hpp" + +if (EGVAR(interact_menu,menuBackground)==1) then {[QGVAR(id), false] call EFUNC(common,blurScreen);}; +if (EGVAR(interact_menu,menuBackground)==2) then {(uiNamespace getVariable [QEGVAR(interact_menu,menuBackground), displayNull]) closeDisplay 0;}; + +[GVAR(MenuPFHID)] call CBA_fnc_removePerFrameHandler; diff --git a/addons/medical_menu/functions/fnc_onMenuOpen.sqf b/addons/medical_menu/functions/fnc_onMenuOpen.sqf index 164353fe73..9f0acfbeb6 100644 --- a/addons/medical_menu/functions/fnc_onMenuOpen.sqf +++ b/addons/medical_menu/functions/fnc_onMenuOpen.sqf @@ -22,6 +22,9 @@ params ["_display"]; if (isNil "_display") exitwith {}; +if (EGVAR(interact_menu,menuBackground)==1) then {[QGVAR(id), true] call EFUNC(common,blurScreen);}; +if (EGVAR(interact_menu,menuBackground)==2) then {0 cutRsc[QEGVAR(interact_menu,menuBackground), "PLAIN", 1, false];}; + if (isNil QGVAR(LatestDisplayOptionMenu)) then { GVAR(LatestDisplayOptionMenu) = "triage"; } else { diff --git a/addons/medical_menu/functions/fnc_updateInformationLists.sqf b/addons/medical_menu/functions/fnc_updateInformationLists.sqf index 70903347b5..ecd700e43a 100644 --- a/addons/medical_menu/functions/fnc_updateInformationLists.sqf +++ b/addons/medical_menu/functions/fnc_updateInformationLists.sqf @@ -33,6 +33,6 @@ _amountOfGeneric = count _genericMessages; _lbCtrl lbSetColor [_forEachIndex + _amountOfGeneric, _color]; } forEach _allInjuryTexts; -if !(_allInjuryTexts isEqualTo []) then { +if (_allInjuryTexts isEqualTo []) then { _lbCtrl lbAdd localize ELSTRING(medical,NoInjuriesBodypart); }; diff --git a/addons/medical_menu/functions/fnc_updateUIInfo.sqf b/addons/medical_menu/functions/fnc_updateUIInfo.sqf index 7dee2d5123..b493b5026e 100644 --- a/addons/medical_menu/functions/fnc_updateUIInfo.sqf +++ b/addons/medical_menu/functions/fnc_updateUIInfo.sqf @@ -105,11 +105,12 @@ if (EGVAR(medical,level) >= 2) then { } forEach _bandagedwounds; } else { _damaged = [true, true, true, true, true, true]; - { - _selectionBloodLoss set [_forEachIndex, _target getHitPointDamage _x]; - if (_target getHitPointDamage _x > 0 && _forEachIndex == _selectionN) then { - _pointDamage = _target getHitPointDamage _x; + { + _selectionBloodLoss set [_forEachIndex, _x]; + + if (_x > 0 && _forEachIndex == _selectionN) then { + _pointDamage = _x; _severity = switch (true) do { case (_pointDamage > 0.5): {localize ELSTRING(medical,HeavilyWounded)}; case (_pointDamage > 0.1): {localize ELSTRING(medical,LightlyWounded)}; @@ -125,7 +126,7 @@ if (EGVAR(medical,level) >= 2) then { ] select _forEachIndex); _allInjuryTexts pushBack [format ["%1 %2", _severity, toLower _part], [1,1,1,1]]; }; - } forEach ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"]; + } forEach (_target getvariable [QEGVAR(medical,bodyPartStatus), [0,0,0,0,0,0]]); }; [_selectionBloodLoss, _display] call FUNC(updateBodyImage); diff --git a/addons/medical_menu/stringtable.xml b/addons/medical_menu/stringtable.xml index 2c8713de09..37b9c1f600 100644 --- a/addons/medical_menu/stringtable.xml +++ b/addons/medical_menu/stringtable.xml @@ -4,51 +4,61 @@ Medical Menu Menu medyczne + Menu médico Медицинское меню Allow Medical Menu Akt. menu medyczne + Permitir menu médico Разрешить мед. меню Allow clients to use the medical menu Zezwalaj graczom korzystać z menu medycznego + Permite que clientes utilizem o menu médico Разрешает клиентам использовать медицинское меню Use Medical menu Użyj menu medycznego + Usar o menu médico Использовать медицинское меню If allowed by server, enable the option to use the Medical Menu through keybinding and interaction menu Jeżeli zezwolone przez serwer, aktywuj menu medyczne poprzez skrót klawiszowy i menu interakcji. + Se permitido pelo servidor, ativa a opção de usar o menu médico por atalhos de teclas e menu de interação Если разрешено сервером, включает опцию использования медицинского меню с помощью горячих главиш или меню взаимодействия Re-open Medical menu Otwieraj ponownie menu medyczne + Reabrir menu médico Переоткрывать мед. меню Re-open the medical menu after succesful treatment Otwórz ponownie menu medyczne po udanym zakończeniu leczenia + Reabre o menu médico depois de um tratamento bem sucedido Переоткрывать медицинское меню после удачного лечения Open Medical Menu Otwórz menu medyczne + Abrir menu médico Открыть медицинское меню Medical Menu Settings Ustawienia menu medycznego + Preferências do menu médico Настройки медицинского меню Configure the usage of the Medical Menu Skonfiguruj opcje menu medycznego + Configura o uso do menu médico Настройки использования медицинского меню @@ -57,6 +67,8 @@ EXAMINAR & TRATAMIENTO EXAMINER & TRAITEMENTS BADANIE & LECZENIE + EXAMINAR & TRATAMENTO + VYŠETŘENÍ & LÉČBA STATUS @@ -64,6 +76,8 @@ ESTADO ÉTATS STATUS + ESTADO + STAV OVERVIEW @@ -71,6 +85,8 @@ DESCRIPCIÓN DESCRIPTION OPIS + VISÃO GERAL + PŘEHLED ACTIVITY LOG @@ -78,6 +94,8 @@ REGISTRO DE ACTIVIDAD REGISTRE DES SOINS LOGI AKTYWNOŚCI + REGISTRO DE ATIVIDADE + PROTOKOL QUICK VIEW @@ -85,6 +103,8 @@ VISTA RÁPIDA VUE RAPIDE SZYBKI PODGLĄD + VISÃO RÁPIDA + RYCHLÝ NÁHLED View triage Card @@ -92,6 +112,7 @@ Ver Triage Voir Carte de Triage Pokaż kartę segregacyjną + Ver cartão de triagem Examine Patient @@ -99,6 +120,7 @@ Examinar Paciente Examiner Patient Zbadaj pacjenta + Examinar paciente Bandage / Fractures @@ -106,6 +128,7 @@ Vendajes/Fracturas Bandages / Fractures Bandaże / Złamania + Bandagens / Fraturas Medication @@ -113,6 +136,7 @@ Medicación Médications Leki + Medicação Airway Management @@ -120,6 +144,7 @@ Vías Aéreas Gestion Des Voie REspiratoire Drogi oddechowe + Vias aéreas Advanced Treatments @@ -127,6 +152,7 @@ Tratamientos Avanzados Traitement Avancé Zaawansowane zabiegi + Tratamentos avançados Drag/Carry @@ -134,6 +160,8 @@ Arrastrar/Cargar Glisser/Porter Ciągnij/Nieś + Arrastar/Carregar + Táhnout/Nést Toggle (Self) @@ -141,6 +169,7 @@ Activer (sois) Przełącz (na siebie) Alternar + Alternar (Si mesmo) Select triage status @@ -148,6 +177,7 @@ Seleccionar estado de Triage Selectioner l'état de Triage Wybierz priorytet + Selecionar estado de triagem Select Head @@ -155,6 +185,8 @@ Seleccionar Cabeza Selectioner Tête Wybierz głowę + Selecionar Cabeça + Vybrat Hlavu Select Torso @@ -162,6 +194,8 @@ Seleccionar Torso Selectioner Torse Wybierz tors + Selecionar Torso + Vybrat Trup Select Left Arm @@ -169,6 +203,8 @@ Seleccionar Brazo Izquierdo Selectioner Bras Gauche Wybierz lewą rękę + Selecionar Braço Esquerdo + Vybrat Levou Ruku Select Right Arm @@ -176,6 +212,8 @@ Seleccionar Brazo Derecho Selectioner Bras Droit Wybierz prawą rękę + Selecionar Braço Direito + Vybrat Pravou Ruku Select Left Leg @@ -183,6 +221,8 @@ Seleccionar Pierna Izquierda Selectioner Jambe Gauche Wybierz lewą nogę + Selecionar Perna Esquerda + Vybrat Levou Nohu Select Right Leg @@ -190,6 +230,8 @@ Seleccionar Pierna Derecha Selectioner Jambe Droite Wybierz prawą nogę + Selecionar Perna Direita + Vybrat Pravou Nohu Head @@ -197,12 +239,16 @@ Cabeza Tête Głowa + Caebça + Hlava Torso Торс Torse Tors + Torso + Trup Left Arm @@ -210,6 +256,8 @@ Brazo Izquierdo Bras Gauche Lewa ręka + Braço Esquerdo + Levá Ruka Right Arm @@ -217,6 +265,8 @@ Brazo Derecho Bras Droit Prawa ręka + Braço Direito + Pravá Ruka Left Leg @@ -224,6 +274,8 @@ Pierna Izquierda Jambe Gauche Lewa noga + Perna Esquerda + Levá Noha Right Leg @@ -231,6 +283,8 @@ Pierna Derecha Jambe Droite Prawa noga + Perna Direita + Pravá Noha Body Part: %1 @@ -238,6 +292,7 @@ Parte del cuerpo: %1 Partie du corps: %1 Część ciała: %1 + Parte do corpo: %1 Small @@ -245,6 +300,7 @@ Pequeña Petite małym + Pequeno Medium @@ -252,6 +308,7 @@ Mediana moyenne średnim + Médio Large @@ -259,6 +316,7 @@ Grande Grande dużym + Grande There are %2 %1 Open Wounds @@ -266,6 +324,7 @@ Hay %2 Heridas Abiertas %1 Il y a %2 %1 Blessure Ouverte Widzisz otwarte rany w ilości %2 o %1 rozmiarze + Existem %2 ferimentos abertos %1 There is 1 %1 Open Wound @@ -273,6 +332,7 @@ Hay 1 Herida Abierta %1 Il y a 1 blessure ouverte %1 Widzisz 1 otwartą ranę o %1 rozmiarze + Existe 1 %1 ferimento aberto There is a partial %1 Open wound @@ -280,6 +340,7 @@ Hay una herida parcial abierta %1 Il y a une Blessure Patiellement Ouverte %1 Widzisz częściowo otwartą ranę o %1 rozmiarze + Existe um ferimento parcial aberto %1 There are %2 %1 Bandaged Wounds @@ -287,6 +348,7 @@ Hay %2 Heridas %1 Vendadas Il y a %2 %1 Blessure Bandée Widzisz %2 zabandażowanych ran o %1 rozmiarze + Existem %2 ferimentos %1 tratados There is 1 %1 Bandaged Wound @@ -294,6 +356,7 @@ Hay 1 Herida Vendada %1 Il y a 1 %1 Blessure Bandée Widzisz 1 zabandażowaną ranę o %1 rozmiarze + Existe 1 ferimento %1 tratado There is a partial %1 Bandaged wound @@ -301,6 +364,7 @@ Hay una Herida parcial %1 Vendada Il y a %1 Blessure Partielment Bandée Widzisz 1 częściowo zabandażowaną ranę o %1 rozmiarze + Existe um ferimento parcial tratado %1 Normal breathing @@ -308,6 +372,7 @@ Respiración normal Respiration Normale Normalny oddech + Respiração normal No breathing @@ -315,6 +380,8 @@ No respira Apnée Brak oddechu + Sem respiração + Nedýchá Difficult breathing @@ -322,6 +389,8 @@ Dificultad para respirar Difficultée Respiratoire Trudności z oddychaniem + Dificuldade para respirar + Potíže s dýcháním Almost no breathing @@ -329,6 +398,8 @@ Casi sin respirar Respiration Faible Prawie brak oddechu + Quase sem respiração + Téměř nedýchá Bleeding @@ -336,6 +407,8 @@ Sangrando Seignement Krwawienie zewnętrzne + Sangrando + Krvácí in Pain @@ -343,6 +416,8 @@ Con Dolor A De La Douleur W bólu + Com dor + v Bolestech Lost a lot of Blood @@ -350,6 +425,8 @@ Mucha Sangre perdida A Perdu Bcp de Sang Stracił dużo krwi + Perdeu muito sangue + Ztratil hodně Krve Tourniquet [CAT] @@ -357,6 +434,7 @@ Torniquete [CAT] Garot [CAT] Opaska uciskowa [CAT] + Torniquete [CAT] Nasopharyngeal Tube [NPA] @@ -364,6 +442,7 @@ Torniquete [CAT] Canule Naseaupharyngée [NPA] Rurka nosowo-gardłowa [NPA] + Tubo nasofaríngeo [NPA] - \ No newline at end of file + diff --git a/addons/medical_menu/ui/menu.hpp b/addons/medical_menu/ui/menu.hpp index ab078d4c72..342f0230a2 100644 --- a/addons/medical_menu/ui/menu.hpp +++ b/addons/medical_menu/ui/menu.hpp @@ -3,10 +3,10 @@ class GVAR(medicalMenu) { idd = 314412; movingEnable = true; - onLoad = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QGVAR(medicalMenu)), _this select 0)]; [ARR_2(QUOTE(QGVAR(id)), true)] call EFUNC(common,blurScreen); [_this select 0] call FUNC(onMenuOpen);); - onUnload = QUOTE([ARR_2(QUOTE(QGVAR(id)), false)] call EFUNC(common,blurScreen); [GVAR(MenuPFHID)] call CBA_fnc_removePerFrameHandler;); + onLoad = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QGVAR(medicalMenu)), _this select 0)]; [_this select 0] call FUNC(onMenuOpen);); + onUnload = QUOTE([] call FUNC(onMenuClose)); class controlsBackground { - class HeaderBackground: ACE_gui_backgroundBase{ + class HeaderBackground: ACE_gui_backgroundBase { idc = -1; SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; x = "1 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; diff --git a/addons/microdagr/CfgWeapons.hpp b/addons/microdagr/CfgWeapons.hpp index 9776f1c615..6fa84b6e7b 100644 --- a/addons/microdagr/CfgWeapons.hpp +++ b/addons/microdagr/CfgWeapons.hpp @@ -7,6 +7,7 @@ class CfgWeapons { scope = 2; displayName = CSTRING(itemName); descriptionShort = CSTRING(itemDescription); + model = QUOTE(PATHTOF(data\MicroDAGR.p3d)); picture = QUOTE(PATHTOF(images\microDAGR_item.paa)); class ItemInfo: InventoryItem_Base_F { mass = 2; diff --git a/addons/microdagr/XEH_clientInit.sqf b/addons/microdagr/XEH_clientInit.sqf index c918bcf454..518a648601 100644 --- a/addons/microdagr/XEH_clientInit.sqf +++ b/addons/microdagr/XEH_clientInit.sqf @@ -3,6 +3,9 @@ if (!hasInterface) exitWith {}; +//Functions that are called for each draw of the map: +GVAR(miniMapDrawHandlers) = []; + //Add deviceKey entry: private ["_conditonCode", "_toggleCode", "_closeCode"]; _conditonCode = { diff --git a/addons/microdagr/data/MicroDAGR.p3d b/addons/microdagr/data/MicroDAGR.p3d new file mode 100644 index 0000000000..bd4ea59090 Binary files /dev/null and b/addons/microdagr/data/MicroDAGR.p3d differ diff --git a/addons/microdagr/data/MicroDAGR.rvmat b/addons/microdagr/data/MicroDAGR.rvmat new file mode 100644 index 0000000000..6f3522304c --- /dev/null +++ b/addons/microdagr/data/MicroDAGR.rvmat @@ -0,0 +1,92 @@ +ambient[] = {0.6,0.6,0.6,0.6}; +diffuse[] = {0.6,0.6,0.6,0.6}; +forcedDiffuse[] = {0.0,0.0,0.0,0.0}; +emmisive[] = {0.0,0.0,0.0,0.6}; +specular[] = {0.1,0.1,0.1,0.2}; +specularPower = 90.0; +PixelShaderID = "Super"; +VertexShaderID = "Super"; +class Stage1 +{ + texture="z\ace\addons\microdagr\data\MicroDAGR_nohq.paa"; + uvSource="tex"; + class uvTransform + { + aside[]={1,0,0}; + up[]={0,1,0}; + dir[]={0,0,0}; + pos[]={0,0,0}; + }; +}; +class Stage2 +{ + texture="#(argb,8,8,3)color(0.5,0.5,0.5,1,DT)"; + uvSource="tex"; + class uvTransform + { + aside[]={0,9,0}; + up[]={4.5,0,0}; + dir[]={0,0,0}; + pos[]={0,0,0}; + }; +}; +class Stage3 +{ + texture="#(argb,8,8,3)color(0.5,0.5,0.5,0,MC)"; + uvSource="tex"; + class uvTransform + { + aside[]={1,0,0}; + up[]={0,1,0}; + dir[]={0,0,0}; + pos[]={0,0,0}; + }; +}; +class Stage4 +{ + texture="#(argb,8,8,3)color(1,1,1,1,AS)"; + uvSource="tex"; + class uvTransform + { + aside[]={1,0,0}; + up[]={0,1,0}; + dir[]={0,0,0}; + pos[]={0,0,0}; + }; +}; +class Stage5 +{ + texture="z\ace\addons\microdagr\data\MicroDAGR_smdi.paa"; + uvSource="tex"; + class uvTransform + { + aside[]={1,0,0}; + up[]={0,1,0}; + dir[]={0,0,0}; + pos[]={0,0,0}; + }; +}; +class Stage6 +{ + texture="#(ai,16,2,2)fresnel(10.4,8.3)"; + uvSource="tex"; + class uvTransform + { + aside[]={1,0,0}; + up[]={0,1,0}; + dir[]={0,0,1}; + pos[]={0,0,0}; + }; +}; +class Stage7 +{ + texture="a3\data_f\env_land_co.paa"; + uvSource="tex"; + class uvTransform + { + aside[]={1,0,0}; + up[]={0,1,0}; + dir[]={0,0,0}; + pos[]={0,0,0}; + }; +}; diff --git a/addons/microdagr/data/MicroDAGR_co.paa b/addons/microdagr/data/MicroDAGR_co.paa new file mode 100644 index 0000000000..6efd68bff5 Binary files /dev/null and b/addons/microdagr/data/MicroDAGR_co.paa differ diff --git a/addons/microdagr/data/MicroDAGR_nohq.paa b/addons/microdagr/data/MicroDAGR_nohq.paa new file mode 100644 index 0000000000..1b9c8a337c Binary files /dev/null and b/addons/microdagr/data/MicroDAGR_nohq.paa differ diff --git a/addons/microdagr/data/MicroDAGR_smdi.paa b/addons/microdagr/data/MicroDAGR_smdi.paa new file mode 100644 index 0000000000..66c69a63b3 Binary files /dev/null and b/addons/microdagr/data/MicroDAGR_smdi.paa differ diff --git a/addons/microdagr/functions/fnc_appWaypointsButtonDeleteWP.sqf b/addons/microdagr/functions/fnc_appWaypointsButtonDeleteWP.sqf index 956e24c5ba..d1fe1e8bdd 100644 --- a/addons/microdagr/functions/fnc_appWaypointsButtonDeleteWP.sqf +++ b/addons/microdagr/functions/fnc_appWaypointsButtonDeleteWP.sqf @@ -18,7 +18,7 @@ private ["_display", "_wpIndex"]; disableSerialization; -_display = uiNamespace getVariable [[QGVAR(RscTitleDisplay), QGVAR(DialogDisplay)] select GVAR(currentShowMode) == DISPLAY_MODE_DIALOG, displayNull]; +_display = uiNamespace getVariable [[QGVAR(RscTitleDisplay), QGVAR(DialogDisplay)] select (GVAR(currentShowMode) == DISPLAY_MODE_DIALOG), displayNull]; if (isNull _display) exitWith {ERROR("No Display");}; diff --git a/addons/microdagr/functions/fnc_mapOnDrawEH.sqf b/addons/microdagr/functions/fnc_mapOnDrawEH.sqf index a74255601c..25f5bc92fd 100644 --- a/addons/microdagr/functions/fnc_mapOnDrawEH.sqf +++ b/addons/microdagr/functions/fnc_mapOnDrawEH.sqf @@ -48,6 +48,9 @@ if (GVAR(currentApplicationPage) == 1) then { }; } else { //Map Mode: + //Call all added minimap draw event handlers: + {_this call _x;} forEach GVAR(miniMapDrawHandlers); + if (GVAR(mapAutoTrackPosition)) then { _theMap ctrlMapAnimAdd [0, (GVAR(mapZoom)/_mapSize), (getPosASL ACE_player)]; ctrlMapAnimCommit _theMap; diff --git a/addons/microdagr/stringtable.xml b/addons/microdagr/stringtable.xml index f6c44dfcb4..7e2261107f 100644 --- a/addons/microdagr/stringtable.xml +++ b/addons/microdagr/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -308,6 +308,7 @@ MicroDAGR - Vyplnění mapy MicroDAGR-Kartenfüllung Preenchimento de mapa do MicroDAGR + MicroDAGR - Remplissage de la carte MicroDAGR térképkitöltés Заполнение карты MicroDAGR @@ -318,6 +319,7 @@ MicroDAGR - Vyplnění mapy MicroDAGR-Kartenfüllung Preenchimento de mapa do MicroDAGR + MicroDAGR - Remplissage de la carte MicroDAGR térképkitöltés Заполнение карты MicroDAGR @@ -328,6 +330,7 @@ Wie viel Daten auf einem MicroDAGR zu sehen sind Kolik informací je načteno do MicroDAGR? Quanta informação é preenchida no mapa do MicroDAGR + Combien d'information apparaisse sur la carte du MicroDAGR Mennyi térképadatot tartalmaz a MicroDAGR Сколько данных должно отображаться на карте MicroDAGR @@ -338,6 +341,7 @@ Satellitenbild + Gebäude Satelit + Budovy Satélite completo + Edifícios + Satellite + Batiments Teljes műholdas + épületek Спутник + Здания @@ -348,6 +352,7 @@ Topografisch + Straßen Topografické + Cesty Topográfico + Estradas + Topographie + Routes Topográfia + utak Топография + Дороги @@ -358,6 +363,7 @@ Keine (kann keine Kartenansicht verwenden) Žádný (Nelze použít zobrazení mapy) Nada (Não pode usar a tela de mapa) + Rien (La vue carte n'est pas possible) Semmi (nem használható a térképnézet) Не показывать (запрещает использовать режим карты) @@ -368,8 +374,9 @@ Steuert wie viel Daten auf dem microDAGR zu sehen ist. Weniger Daten schränken die Kartenansicht ein, um mehr auf der Minimap zu sehen.<br />Quelle: microDAGR.pbo Tento modul umožňuje kontrolovat, kolik informací je obsaženo v MicroDAGR. Menší množství dat omezené zobrazením mapy ukazují méně věcí na minimapě.<br />Zdroj: microDAGR.pbo Controla quantos dados são preenchidos nos itens microDAGR. Menos dados restringe a visualização de mapa para mostrar menos informações no minimapa<br/>Fonte: MicroDAGR.pbo + Contrôle le nombre d'information disponible sur la carte du MicroDAGR. <br/>Source: microDAGR.pbo Meghatárroza a MicroDAGR objektumok térképének tartalmát. A kevesebb adat korlátozza a térképnézeti módot az eszközön. <br />Forrás: microDAGR.pbo Контролирует, сколько данных должно отображаться на карте устройств MicroDAGR. Ограничивает объем отображаемых данных на миникарте.<br />Источник: microDAGR.pbo - \ No newline at end of file + diff --git a/addons/missileguidance/stringtable.xml b/addons/missileguidance/stringtable.xml index 5e80e00e30..3a416007f4 100644 --- a/addons/missileguidance/stringtable.xml +++ b/addons/missileguidance/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -104,6 +104,7 @@ Aus Vypnout Desligado + Eteint Ki Выкл. @@ -114,6 +115,7 @@ Nur Spieler Pouze hráči Somente jogador + Seulement les joueurs Csak játékosok Только игрок @@ -124,8 +126,9 @@ Spieler und KI Hráči a AI Jogador e IA + Joueurs et IA Játékosok és AI Игрок и боты - \ No newline at end of file + diff --git a/addons/missionmodules/stringtable.xml b/addons/missionmodules/stringtable.xml index 13c97f7e59..fe06252a61 100644 --- a/addons/missionmodules/stringtable.xml +++ b/addons/missionmodules/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -8,6 +8,7 @@ ACE-Missionsmodule ACE Moduly mise Módulo de missões ACE + ACE module de mission ACE küldetési modulok Модули миссий ACE @@ -18,6 +19,7 @@ Umgebungsgeräusche [ACE] Zvuky prostředí [ACE] [ACE] Sons ambientes + Sons d'ambiance [ACE] Ambiens hangok [ACE] Звук окружения [ACE] @@ -28,6 +30,7 @@ Sounds Zvuky Sons + Sons Hangok Звуки @@ -39,6 +42,7 @@ Class names zvuků prostředí, které budou přehrány. Oddělené ',' Nomes de classe dos sons de ambiente para serem reproduzidos. Separados por "," Имена классов звуков окружения, которые должны проигрываться. Разделенные ',' + ClassNames des sons d'ambiances. Séparation par "," Minimal Distance @@ -47,6 +51,7 @@ Mindestabstand Minimální vzdálenost Distância mínima + Distance minimale Minimális távolság Минимальная дистанция @@ -57,6 +62,7 @@ Wird verwendet, um eine zufällige Position zu bestimmen und setzt den Mindestabstand zwischen Spielern und der/den abzuspielenden Sounddatei(en) fest Používá se pro výpočet náhodné pozice a určuje minimální vzdálenost mezi hráči a přehrávaným zvukem. Usada para calcular uma posição aleatória e definir a distância mínima entre os jogadores e os arquivos de sons que estão sendo reproduzidos. + Utilisé pour calculer une position aléatoire et pour définir la distance minimale entre le joueur les sons lus. Egy véletlenszerű pozíció számításához használt érték, amihez megadja a minimum távolságot a játékosok és a lejátszott hangfájl(ok) között Используется для расчета случайной позиции и указывает минимальное расстояние между игроками и источниками звука @@ -67,6 +73,7 @@ Maximalabstand Maximální vzdálenost Distância máxima + Distance maximale Maximális távolság Максимальная дистанция @@ -77,6 +84,7 @@ Wird verwendet, um eine zufällige Position zu bestimmen und setzt den Maximalabstand zwischen Spielern und der/den abzuspielenden Sounddatei(en) fest Používá se pro výpočet náhodné pozice a určuje maximální vzdálenost mezi hráči a přehrávaným zvukem. Usado para calcular uma posição aleatória e definir uma distância máxima entre os jogadores e os arquivos de sons que estão sendo reproduzidos. + Utilisé pour calculer une position aléatoire et pour définir la distance maximale entre le joueur les sons lus. Egy véletlenszerű pozíció számításához használt érték, amihez megadja a maximum távolságot a játékosok és a lejátszott hangfájl(ok) között Используется для расчета случайной позиции и указывает максимальное расстояние между игроками и источниками звука @@ -87,6 +95,7 @@ Minimale Verzögerung Minimální prodleva Atraso mínimo + Délais minimal Minimum késleltetés Минимальная задержка @@ -97,6 +106,7 @@ Minimale Verzögerung zwischen abzuspielenden Sounds Minimální prodleva mezi přehrávanými zvuky Atraso mínimo entre os sons reproduzidos + Délais minimal entre les sons lus. Minimum késleltetés a lejátszott hangok között Минимальная задержка между воспроизведением звуков @@ -107,6 +117,7 @@ Maximale Verzögerung Maximální prodleva Atraso máximo + Délais maximal Maximum késleltetés Максимальная задержка @@ -117,6 +128,7 @@ Maximale Verzögerung zwischen abzuspielenden Sounds Maximální prodleva mezi přehrávanými zvuky Atraso máximo entre os sons reproduzidos + Délais maximal entre les sons lus. Maximum késleltetés a lejátszott hangok között Максимальная задержка между воспроизведением звуков @@ -127,6 +139,7 @@ Spielern folgen Následovat hráče Seguir jogadores + Suivre les joueurs Játékosok követése Следовать за игроками @@ -137,6 +150,7 @@ Spielern folgen. Wenn auf falsch gesetzt, werden Sounds nur in der Nähe des Logikmoduls abgespielt. Následuj hráče. Pokud je FALSE, smyčka zvuku bude přehrávána na nejbližší pozici logiki. Segue os jogadores. Se esta desabilitado (falso), o loop reproduzirá os sons somente perto de sua posição lógica. + Suivre le joueur. Si défini sur false, les sons seront joués en boucle autour la position logique Játékosok követése. Ha le van tiltva, az ismétlés csak a legközelebbi logikai ponton játszik le hangokat. Следовать за игроками. Если установить в Ложь, звуки будут циклически проигрываться только около позиции Логики. @@ -147,6 +161,7 @@ Lautstärke Hlasitost Volume + Volume Hangerő Громкость @@ -157,6 +172,7 @@ Lautstärke der abzuspielenden Sounds Hlasitost přehrávaného zvuku O volume em que os sons serão reproduzidos + Volume des sons lus A lejátszott hangok hangereje Громкость воспроизводимых звуков @@ -167,6 +183,7 @@ Umgebungsgeräusch-Schleife (im MP synchronisiert) Smyčka okkolního zvuku (synchronizováno v MP) Loop de sons ambientes (sincronizados através do MP) + Sons d'ambiance lus en boucle (Synchronisation MP) Ambiens hangok folyamatossága (MP alatt szinkronizálva) Циклически воспроизводимые звуки окружения (синх. между игроками) diff --git a/addons/mk6mortar/functions/fnc_dev_buildTable.sqf b/addons/mk6mortar/functions/fnc_dev_buildTable.sqf index 7a60e91e68..84184fcb51 100644 --- a/addons/mk6mortar/functions/fnc_dev_buildTable.sqf +++ b/addons/mk6mortar/functions/fnc_dev_buildTable.sqf @@ -36,13 +36,13 @@ while {_stillInRange} do { _stillInRange = false; } else { if (_airFriction == 0) then { - _result set [4, 0]; _result set [5, 0]; _result set [6, 0]; _result set [7, 0]; _result set [8, 0]; _result set [9, 0]; _result set [10, 0]; + _result set [11, 0]; }; if ((_result select 1) < 88) then { _outputArray pushBack [ diff --git a/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf b/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf index 6904403b55..db87cb6000 100644 --- a/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf +++ b/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf @@ -133,135 +133,135 @@ case ((abs(_muzzleVelocity - 200) < 0.00001) && {(abs(_airFriction - -0.0001) < }; case ((abs(_muzzleVelocity - 70) < 0.00001) && {(abs(_airFriction - 0) < 0.00001)}): { [ - ["100","1497","9","1.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["150","1445","14","1.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["200","1390","19","1.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["250","1333","26","1.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["300","1272","34","1.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["350","1204","45","1.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["400","1127","61","1.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["450","1028","91","2.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"] + ["100","1497","9","1.3","14.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["150","1445","14","1.3","14.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["200","1390","19","1.4","14.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["250","1333","26","1.4","13.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["300","1272","34","1.5","13.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["350","1204","45","1.6","13.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["400","1127","61","1.8","12.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["450","1028","91","2.1","12.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0"] ] }; case ((abs(_muzzleVelocity - 140) < 0.00001) && {(abs(_airFriction - 0) < 0.00001)}): { [ - ["150","1562","1","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["200","1549","1","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["250","1536","2","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["300","1523","2","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["350","1510","2","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["400","1497","3","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["450","1484","3","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["500","1471","3","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["550","1458","4","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["600","1445","4","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["650","1431","4","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["700","1418","5","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["750","1404","5","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["800","1390","6","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["850","1376","6","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["900","1362","6","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["950","1348","7","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1000","1333","7","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1050","1318","8","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1100","1303","9","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1150","1288","9","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1200","1272","10","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1250","1256","11","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1300","1239","12","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1350","1222","13","0.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1400","1205","13","0.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1450","1187","15","0.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1500","1168","16","0.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1550","1148","18","1.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1600","1127","19","1.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1650","1105","21","1.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1700","1082","24","1.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1750","1057","27","1.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1800","1029","31","1.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1850","997","37","1.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1900","960","46","1.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1950","912","63","1.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"] + ["150","1562","1","0.7","28.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["200","1549","1","0.7","28.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["250","1536","2","0.7","28.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["300","1523","2","0.7","28.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["350","1510","2","0.7","28.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["400","1497","3","0.7","28.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["450","1484","3","0.7","28.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["500","1471","3","0.7","28.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["550","1458","4","0.7","28.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["600","1445","4","0.7","28.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["650","1431","4","0.7","28.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["700","1418","5","0.7","28.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["750","1404","5","0.7","28.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["800","1390","6","0.7","27.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["850","1376","6","0.7","27.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["900","1362","6","0.8","27.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["950","1348","7","0.8","27.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1000","1333","7","0.8","27.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1050","1318","8","0.8","27.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1100","1303","9","0.8","27.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1150","1288","9","0.8","27.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1200","1272","10","0.8","27.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1250","1256","11","0.8","26.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1300","1239","12","0.8","26.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1350","1222","13","0.9","26.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1400","1205","13","0.9","26.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1450","1187","15","0.9","26.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1500","1168","16","0.9","26.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1550","1148","18","1.0","25.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1600","1127","19","1.0","25.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1650","1105","21","1.1","25.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1700","1082","24","1.1","24.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1750","1057","27","1.2","24.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1800","1029","31","1.3","24.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1850","997","37","1.4","23.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1900","960","46","1.6","23.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1950","912","63","1.9","22.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0"] ] }; case ((abs(_muzzleVelocity - 200) < 0.00001) && {(abs(_airFriction - 0) < 0.00001)}): { [ - ["300","1563","0","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["350","1556","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["400","1550","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["450","1544","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["500","1537","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["550","1531","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["600","1525","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["650","1519","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["700","1512","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["750","1506","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["800","1499","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["850","1493","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["900","1487","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["950","1480","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1000","1474","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1050","1467","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1100","1461","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1150","1454","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1200","1448","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1250","1441","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1300","1435","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1350","1428","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1400","1422","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1450","1415","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1500","1408","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1550","1402","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1600","1395","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1650","1388","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1700","1381","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1750","1374","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1800","1367","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1850","1360","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1900","1353","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1950","1346","4","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2000","1339","4","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2050","1332","4","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2100","1325","4","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2150","1317","4","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2200","1310","4","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2250","1302","4","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2300","1295","5","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2350","1287","5","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2400","1280","5","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2450","1272","5","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2500","1264","5","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2550","1256","5","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2600","1248","6","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2650","1240","6","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2700","1232","6","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2750","1223","6","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2800","1215","7","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2850","1206","7","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2900","1197","7","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2950","1188","7","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3000","1179","8","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3050","1170","8","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3100","1160","8","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3150","1151","9","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3200","1141","9","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3250","1131","10","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3300","1120","10","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3350","1109","11","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3400","1098","11","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3450","1087","12","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3500","1075","13","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3550","1062","14","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3600","1049","15","0.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3650","1036","16","0.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3700","1021","17","0.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3750","1006","19","1.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3800","990","21","1.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3850","971","24","1.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3900","952","27","1.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3950","929","32","1.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["4000","900","40","1.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["4050","861","56","2.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"] + ["300","1563","0","0.5","40.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["350","1556","1","0.5","40.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["400","1550","1","0.5","40.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["450","1544","1","0.5","40.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["500","1537","1","0.5","40.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["550","1531","1","0.5","40.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["600","1525","1","0.5","40.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["650","1519","1","0.5","40.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["700","1512","1","0.5","40.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["750","1506","1","0.5","40.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["800","1499","1","0.5","40.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["850","1493","1","0.5","40.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["900","1487","1","0.5","40.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["950","1480","1","0.5","40.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1000","1474","2","0.5","40.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1050","1467","2","0.5","40.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1100","1461","2","0.5","40.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1150","1454","2","0.5","40.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1200","1448","2","0.5","40.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1250","1441","2","0.5","40.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1300","1435","2","0.5","40.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1350","1428","2","0.5","40.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1400","1422","2","0.5","40.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1450","1415","2","0.5","40.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1500","1408","2","0.5","40.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1550","1402","3","0.5","40.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1600","1395","3","0.5","40.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1650","1388","3","0.5","39.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1700","1381","3","0.5","39.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1750","1374","3","0.5","39.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1800","1367","3","0.5","39.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1850","1360","3","0.5","39.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1900","1353","3","0.5","39.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1950","1346","4","0.5","39.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2000","1339","4","0.5","39.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2050","1332","4","0.5","39.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2100","1325","4","0.6","39.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2150","1317","4","0.6","39.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2200","1310","4","0.6","39.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2250","1302","4","0.6","39.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2300","1295","5","0.6","39.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2350","1287","5","0.6","38.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2400","1280","5","0.6","38.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2450","1272","5","0.6","38.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2500","1264","5","0.6","38.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2550","1256","5","0.6","38.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2600","1248","6","0.6","38.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2650","1240","6","0.6","38.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2700","1232","6","0.6","38.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2750","1223","6","0.6","38.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2800","1215","7","0.6","37.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2850","1206","7","0.6","37.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2900","1197","7","0.6","37.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2950","1188","7","0.7","37.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3000","1179","8","0.7","37.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3050","1170","8","0.7","37.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3100","1160","8","0.7","37.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3150","1151","9","0.7","36.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3200","1141","9","0.7","36.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3250","1131","10","0.7","36.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3300","1120","10","0.7","36.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3350","1109","11","0.8","36.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3400","1098","11","0.8","35.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3450","1087","12","0.8","35.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3500","1075","13","0.8","35.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3550","1062","14","0.8","35.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3600","1049","15","0.9","35.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3650","1036","16","0.9","34.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3700","1021","17","0.9","34.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3750","1006","19","1.0","34.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3800","990","21","1.1","33.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3850","971","24","1.1","33.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3900","952","27","1.2","32.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3950","929","32","1.4","32.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["4000","900","40","1.6","31.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["4050","861","56","2.1","30.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"] ] }; default { diff --git a/addons/mk6mortar/stringtable.xml b/addons/mk6mortar/stringtable.xml index ff342c1847..bd8f99da0d 100644 --- a/addons/mk6mortar/stringtable.xml +++ b/addons/mk6mortar/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -56,6 +56,7 @@ MK6-Einstellungen MK6 - Nastavení Ajustes do MK6 + Option du MK6 MK6 beállítások Настройки MK6 @@ -66,6 +67,7 @@ Luftwiderstand Odpor vzduchu Resistência do Ar + Résistance de l'air Légellenállás Сопротивление воздуха @@ -76,6 +78,7 @@ Für Spielerschüsse, Luftwiderstand und Windeffekte Pro hráčovu střelbu, Model odporu vzduchu a povětrných podmínek Para disparos do jogador, modelo de resistência de ar e efeitos de vento + Pour les tirs de joueurs, modèle de résistance à l'air et d'effet du vent Játékos általi lövésekhez, legyen-e számított légellenállás és szélhatás Для выстрелов игрока. Моделирует сопротивление воздуха и эффект ветра @@ -86,6 +89,7 @@ Erlaube MK6-Computer MK6 - Povolit počítač Permitir computador do MK6 + Autoriser l'ordinateur de tir pour MK6 MK6 számítógép engedélyezése Разрешить компьютер MK6 @@ -96,6 +100,7 @@ Zeige den Computer und den Entfernungsmesser an (diese MÜSSEN entfernt werden, wenn der Luftwiderstand aktiviert ist) Zobrazit počítač a dálkoměr (toto MUSÍ být odstraněno pokud je zapnut odpor vzduchu) Mostra o computador e o medidor de distância (estes DEVEM ser removidos se você habilitar resistência do ar) + Affiche l'ordinateur de tir (cette option doit être DESACTIVEE si la résisance à l'air est activée) A távmérő és számítógép megjelenítése (ezeket el KELL távolítani ha a légellenállás engedélyezve van) Показывает компьютер и дальномер (это НУЖНО отключить, если вы включаете сопротивление воздуха) @@ -106,6 +111,7 @@ Erlaube MK6-Kompass MK6 - Povolit kompas Permitir bússula do MK6 + Autoriser la boussole pour MK6 MK6 iránytű engedélyezése Разрешить компас MK6 @@ -116,6 +122,7 @@ Zeige MK6-Digitaler-Kompass MK6 - Zobrazit digitální kompas Mostra a bússula digital do MK6 + Affiche la boussole digitale pour le MK6 Az MK6 digitális iránytű megjelenítése Показывает цифровой компас MK6 @@ -125,6 +132,7 @@ Tento modul umožňuje nastavení minometu MK6. Este módulo permite que você ajuste o morteiro MK6. Модуль настройки миномета MK6. + Ce module permet de régler les options du mortier MK6 diff --git a/addons/mx2a/stringtable.xml b/addons/mx2a/stringtable.xml index e9abbb8e8b..f45e10bcaa 100644 --- a/addons/mx2a/stringtable.xml +++ b/addons/mx2a/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -8,6 +8,7 @@ MX-2A MX-2A MX-2A + MX-2A MX-2A MX-2A @@ -18,8 +19,9 @@ Dispositivo de imagen térmica Termální dalekohled Dispositivo de imagem térmica + Appareil d'imagerie thermique Hőleképező készülék Тепловизионный прибор - \ No newline at end of file + diff --git a/addons/nametags/functions/fnc_initIsSpeaking.sqf b/addons/nametags/functions/fnc_initIsSpeaking.sqf index 9299611d3b..4d4d576c52 100644 --- a/addons/nametags/functions/fnc_initIsSpeaking.sqf +++ b/addons/nametags/functions/fnc_initIsSpeaking.sqf @@ -38,14 +38,14 @@ if (!hasInterface) exitWith {}; if (isClass (configFile >> "cfgPatches" >> "acre_api")) then { - diag_log text format ["[ACE_nametags] - ACRE Detected"]; + ACE_LOGINFO("ACRE Detected."); DFUNC(isSpeaking) = { params ["_unit"]; (([_unit] call acre_api_fnc_isSpeaking) || {[ACE_player] call acre_api_fnc_isBroadcasting}) && {!(_unit getVariable ["ACE_isUnconscious", false])} }; } else { if (isClass (configFile >> "cfgPatches" >> "task_force_radio")) then { - diag_log text format ["[ACE_nametags] - TFR Detected"]; + ACE_LOGINFO("TFR Detected."); DFUNC(isSpeaking) = { params ["_unit"]; (_unit getVariable ["tf_isSpeaking", false]) && {!(_unit getVariable ["ACE_isUnconscious", false])} diff --git a/addons/nametags/functions/fnc_moduleNameTags.sqf b/addons/nametags/functions/fnc_moduleNameTags.sqf index 1b209cb32a..079e4aa704 100644 --- a/addons/nametags/functions/fnc_moduleNameTags.sqf +++ b/addons/nametags/functions/fnc_moduleNameTags.sqf @@ -33,4 +33,4 @@ if ((_logic getVariable "showVehicleCrewInfo") != -1) then { [_logic, QGVAR(showVehicleCrewInfo), "showVehicleCrewInfo" ] call EFUNC(common,readSettingFromModule); }; -diag_log text "[ACE]: NameTags Module Initialized."; +ACE_LOGINFO("Nametags Module Initialized."); diff --git a/addons/nametags/stringtable.xml b/addons/nametags/stringtable.xml index ae03267035..d3616d18f4 100644 --- a/addons/nametags/stringtable.xml +++ b/addons/nametags/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -116,6 +116,7 @@ Namensanzeigen Jmenovky Etiquetas de nome + NameTags Névcímkék Имена игроков @@ -126,6 +127,7 @@ Spielernamen-Distanz Vzdálenost zobrazení jména hráčů Distância de visão dos nomes dos jogadores + Distance de vue des noms de joueurs Játékosok nevének látótávja Дистанция отображения имен @@ -136,6 +138,7 @@ Distanz in Metern bei der Spielernamen angezeigt werden. Standard: 5 Vzdálenost v metrech pro zobrazení jména. Výchozí: 5 Distância em metros que os nomes dos jogadores são mostrados. Padrão: 5 + Distance en mètres au delà de laquelle les noms de joueurs ne sont plus affichés. Défaut: 5 Méterben megadott érték a játékosok nevének mutatására. Alapértelmezett: 5 Дистанция в метрах, на которой отображаются имена игроков. По-умолчанию: 5 @@ -146,6 +149,7 @@ Zeige Namensanzeigen für KI? Zobrazit jmenovky pro AI? Mostrar nomes para IA? + Afficher les noms pour les IA? Névcímkék megjelenítése AI-nál? Показывать имена ботов? @@ -156,6 +160,7 @@ Zeige den Namen und Rang für freundliche KI-Einheiten? Standard: nicht erwzingen Zobrazit jména a hodnosti pro spřátelené AI jednotky? Výchozí: Nevynucovat Mostra o nome e patente para unidades IA aliadas? Padrão: Não forçar + Affiche le nom et le rang pour les IA alliées? Défaut : ne pas forcer Mutassa-e a szövetséges AI egységek nevét és rangját? Alapértelmezett: Nincs felülbírálás Показывать имена и звания дружественных ботов? По-умолчанию: Не обязывать @@ -166,6 +171,7 @@ Verstecken erzwingen Vynuceno skrýt Ocultar forçado + Forcer la désactivation Erőltetett rejtett Обязательно: Скрывать @@ -176,6 +182,7 @@ Anzeigen erzwingen Vynuceno zobrazit Mostrar forçado + Forcer l'affichage Erőltetett látható Обязательно: Показывать @@ -186,6 +193,7 @@ Zeige Besatzungsinfo? Zobrazit informace o posádce? Mostrar informação de tripulação? + Afficher les informations de l'équipage? Legénységi adatok megjelenítése? Показывать экипаж? @@ -196,6 +204,7 @@ Zeige Fahrzeugbesatzungsinfo oder erlaube Spielern es auszuwählen. Standard: nicht erzwingen. Zobrazit informace o posádce, nebo nechat aby si hráč vybral sám. Výchozí: Nevynucovat Mostrar informações de tripulação ou por padrão permitir a escolha dos jogadores. Padrão: Não forçar. + Afficher les informations sur l'équipage d'un véhicule. Défaut: ne pas forcer A legénységi adatok mutatása, alapértelmezett esetben a játékos által kiválasztható. Alapértelmezett: Nincs felülbírálás Показывать информацию об экипаже техники, или по-умолчанию, позволяет игрокам выбрать свою настройку. По-умолчанию: Не обязывать @@ -206,17 +215,19 @@ Zeige bei Fahrzeugen Zobrazit pro vozidla Mostrar para veículos + Montrer pour les véhicules Mutatás járműveknél Показывать для техники - Show cursor NameTag for vehicle commander (only if client has name tags enabled)Default: No + Show cursor NameTag for vehicle commander (only if client has name tags enabled) Default: No Pokazuj imię dowódcy pojazdu nad pojazdem (tylko jeżeli klient ma włączone imiona graczy). Domyślnie: Nie Muestra etiquetas de nombre en el cursor para el comandante del vehiculo (solo si el cliente tiene las etiquetas de nombre activadas) Por defecto: No Zeige Maus-Namensanzeigen für Fahrzeugkommandanten (nur wenn der Client Namensanzeigen aktiviert hat). Standard: Nein Zobrazit jmenovky pro velitele vozidla (pouze pokud má klient jmenovky povolené). Výchozí: Ne Mostrar o nome no cursor para o comandante do veículo (somente se o cliente tiver etiquetas de nomes ativada). Padrão: Não Показывать имя командира техники (только, если клиент включил отображение имен). По-умолчанию: Нет + Afficher les étiquettes de nom pour les commandants de véhicule (uniquement si l'affichage est activé pour le client). Défaut: non This module allows you to customize settings and range of Name Tags. @@ -225,6 +236,7 @@ Este módulo permite personalizar la configuración y la distancia de las Etiquetas de nombre. Tento modul umožňuje si přizpůsobit nastavení a vzdálenost jmenovky. Este módulo permite que você personalize as configurações e distâncias de etiquetas de nome. + Ce module permet le paramétrage de l'affichage des étiquettes des noms Ez a modul lehetővé teszi a névcímkék beállításainak testreszabását. Этот модуль позволяет настроить опции и дистанцию отображения имен игроков. @@ -235,6 +247,7 @@ Nur bei Maus Pouze na kurzor Somente no cursor + Seulement sous le curseur Csak kurzorra Только под курсором @@ -245,6 +258,7 @@ Nur bei Tastendruck Pouze na klávesu Somente em tecla ativada + Seulement par appui de touche Csak gombnyomásra Только по нажатию клавиши @@ -255,6 +269,7 @@ Nur Maus und Tastendruck Pouze na kurzor a klávesu Somente em cursor ou tecla ativada + Seulement sous le curseur et par appui de touche Csak kurzorra és gombnyomásra Под курсором или по нажатию клавиши @@ -265,6 +280,7 @@ Vynuceno zobrazit pouze na kurzor Erzwinge nur mit Mauszeiger anzuzeigen Forçar mostrar somente no cursor + Forcer l'affichage sous le curseur uniquement Erőltetett látható, csak kurzorra Обязательно: Только под курсором @@ -275,6 +291,7 @@ Vynuceno zobrazit pouze na klávesu Erzwinge nur mit Tastendruck anzuzeigen Forçar somente mostrar em tecla ativada + Forcer l'affichage par appui de touche uniquement Erőltetett látható, csak gombnyomásra Обязательно: Только по нажатию клавиши @@ -285,6 +302,7 @@ Vynuceno zobrazit pouze na kurzor a klávesu Erzwinge nur mit Mauszeiger und Tastendruck anzuzeigen Forçar mostrar somente em cursor e tecla ativada + Forcer l'affichage sous le curseur et par appui de touche uniquement Erőltetett látható, csak kurzorra és gombnyomásra Обязательно: Под курсором или по нажатию клавиши @@ -295,6 +313,7 @@ Verwende Namenanzeigen Použít nastavení jmenovky Usar ajustes de etiquetas de nome + Utiliser les paramètre des NamesTags Névcímkék beállításának használata Так же, как имена @@ -305,6 +324,7 @@ Immer alle zeigen Vždy zobrazit vše Sempre mostrar tudo + Toujours montrer tout Mindig minden mutatása Всегда показывать @@ -315,6 +335,7 @@ Zobrazit jména hráčů a nastavit jejich aktivaci. Výchozí: Povoleno Erlaubt das Anzeigen von Spielernamen und stellt ein, ob sie standardmäßig aktiviert oder deaktiviert sind. Standard: aktiviert Mostrar os nomes dos jogadores e definir sua ativação. Padrão: Ativado + Afficher les noms des joueurs et paramètre son activation. Défaut: activé Mutassa a játékosok nevét és kezelje az aktivációjukat. Alapértelmezett: Engedélyezve Показывать имена игроков и установить их активацию. По-умолчанию: Включено @@ -325,6 +346,7 @@ Efekt zvukových vln nad hlavami hráčů když mluví skrz PTT klávesu. Tato volba funguje s TFAR a ACRE2. Es wird ein Schallwellensymbol über den Köpfen von sprechenden Spielern angezeigt, die ihre Push-to-Talk-Taste drücken. Diese Option funktioniert mit TFAR und ACRE2. Efeito de ondas sonoras acima das cabeças dos jogadores que falam depois mantendo pressionada a tecla PTT. Esta opção funciona com TFAR e ACRE2. + Icone au dessus de la tête du joueur qui parle après avoir utilisé la touche de PTT. Option compatible avec ACRE2 et TFAR Hanghullám-effekt a beszélő játékosok feje felett a PTT-gomb lenyomásakor. Ez a beállítás TFAR és ACRE2 alatt működik. Эффект звуковой волны над головами говорящих игроков при удерживании кнопки push-to-talk. Эта опация работает также с рациями TFAR и ACRE2. @@ -335,6 +357,7 @@ Velikost jmenovky Namensschildgröße Tamanho das etiquetas de nome + Taille des noms Névcímkék mérete Размер имен игроков @@ -345,8 +368,9 @@ Velikost textu a ikon Text- und Symbolgrößen Escala de tamanho dos ícones e textos + Taille du texte et des icones Szöveg és ikon méretének skálázása Масштабирование размера текста и иконок - \ No newline at end of file + diff --git a/addons/nightvision/functions/fnc_blending.sqf b/addons/nightvision/functions/fnc_blending.sqf index 96e7f404a5..8c49711079 100644 --- a/addons/nightvision/functions/fnc_blending.sqf +++ b/addons/nightvision/functions/fnc_blending.sqf @@ -21,6 +21,8 @@ */ #include "script_component.hpp" +if (!hasInterface) exitWith {}; + private ["_vehicle", "_weapon", "_ammo", "_magazine", "_player"]; _vehicle = _this select 0; diff --git a/addons/nightvision/functions/fnc_changeNVGBrightness.sqf b/addons/nightvision/functions/fnc_changeNVGBrightness.sqf index 22f96ce9b1..a55535e40a 100644 --- a/addons/nightvision/functions/fnc_changeNVGBrightness.sqf +++ b/addons/nightvision/functions/fnc_changeNVGBrightness.sqf @@ -16,6 +16,7 @@ */ #include "script_component.hpp" +if (!hasInterface) exitWith {}; private ["_brightness"]; PARAMS_2(_player,_changeInBrightness); diff --git a/addons/nightvision/functions/fnc_updatePPEffects.sqf b/addons/nightvision/functions/fnc_updatePPEffects.sqf index 9906a440fc..72cd6cbd0d 100644 --- a/addons/nightvision/functions/fnc_updatePPEffects.sqf +++ b/addons/nightvision/functions/fnc_updatePPEffects.sqf @@ -15,6 +15,8 @@ */ #include "script_component.hpp" +if (!hasInterface) exitWith {}; + private ["_currentVehicle", "_grainSetting", "_blurSetting", "_radBlurSetting", "_config", "_hmd", "_cameraView", "_turret"]; _currentVehicle = vehicle ACE_player; diff --git a/addons/optionsmenu/config.cpp b/addons/optionsmenu/config.cpp index 17e4887db6..4acfef321f 100644 --- a/addons/optionsmenu/config.cpp +++ b/addons/optionsmenu/config.cpp @@ -32,3 +32,10 @@ class CfgAddons { class ACE_Extensions { extensions[] += {"ace_clipboard"}; }; + + +class CfgCommands { + allowedHTMLLoadURIs[] += { + "http://ace3mod.com/version.html" + }; +}; diff --git a/addons/optionsmenu/stringtable.xml b/addons/optionsmenu/stringtable.xml index 148dc06147..6ed27e0645 100644 --- a/addons/optionsmenu/stringtable.xml +++ b/addons/optionsmenu/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -224,6 +224,7 @@ Erlaube Config-Export [ACE] Povolit export natavení [ACE] [ACE] Permitir exportação de configurações + Autoriser l'exportation de la configuration [ACE] Konfiguráció-exportálás engedélyezése [ACE] Разрешить экспорт настроек [ACE] @@ -234,6 +235,7 @@ Erlaube Povolit Permitir + Autoriser Engedélyezés Разрешить @@ -244,6 +246,7 @@ Erlaube alle Einstellungen in einer Server-Config zu exportieren. Povolit exportovat všechna nastavení do formátu server configu. Permitir exportação de todas as configurações para uma configuração formatada de servidor. + Autorise l'exportation des toutes les options vers un fichier de configuration Az összes beállítás szerver-konfigurációba való exportálásának engedélyezése. Разрешить экспорт всех настроек в формате серверного конфига. @@ -254,6 +257,7 @@ Wenn erlaubt, können die Einstellungsmodifikationen angezeigt und im SP exportiert werden. Wenn auf "Exportieren" geklickt wird, wird eine formatierte Config-Datei in der Zwischenablage abgespeichert. Pokud je povoleno, budete mít přístup k modifikaci nastavení a exportování v SP. Kliknutím na export umístníte formátovaný config do vaší schránky. Quando permitido, você tem acesso à modificação de definições e exportação em SP. Clicando em exportação colocará a configuração formatada em sua área de transferência. + Quand autoriser, vous pouvez accéder au modification et à l'exporation en solo. Cliquer sur exporter placera la configuration dans le presse papier Engedélyezéskor hozzáférést kapsz a beállítások módosításához és exportálásához egyjátékos módban. Exportáláskor a formázott konfiguráció a vágólapra kerül. Когда разршен, у вас появляется доступ к модификации настроек и экспорту их в одинночном режиме. Нажатие на кнопку Экспорт поместит форматированные настройки в буфер обмена. @@ -264,6 +268,7 @@ Verstecken Skrýt Ocultar + Cacher Elrejtés Скрыть @@ -274,6 +279,7 @@ Open rechts, nach unten Vpravo nahoře, dolů Superior direito, para baixo + Haut droit, vers le bas Jobb felül, lefele Справа — сверху вниз @@ -284,6 +290,7 @@ Von rechts nach links Vpravo nahoře, do leva Superior direito, à esquerda + Haut droit, vers la gauche Jobb felül, balra Сверху — справа налево @@ -294,6 +301,7 @@ Von links, nach unten Vlevo nahoře, dolů Superior esquerdo, para baixo + Haut gauche, vers le bas Bal felül, lefele Слева - сверху вниз @@ -304,6 +312,7 @@ Oben links nach rechts Vlevo nahoře, do prava Superior esquerdo, para a direita + Haut gauche, vers la droite Bal felül, jobbra Сверху — слева направо @@ -314,6 +323,7 @@ Oben Nahoře Acima + Haut Fent Сверху @@ -324,6 +334,7 @@ Unten Dole Abaixo + Bas Alul Снизу @@ -334,6 +345,7 @@ Debug do schránky Debug in die Zwischenablage Depuração para área de transferência + Debug vers le presse papier Debug a vágólapra Отладка в буфер обмена @@ -344,20 +356,27 @@ Pošle debug informace do RPT a schránky. Protokolliert Debug-Informationen im RPT und speichert sie in der Zwischenablage. Envia informação de depuração para RPT e área de transferência. + Copie le Debug dans le RPT et le presse papier Debug információt küld az RPT-be és a vágólapra. Отправляет отладочную информацию в RPT и буфер обмена. Headbug Fix Fix Headbug + HeadBug "Fejhiba" fix + Corrigir Headbug Fix Headbug + Fix Headbug Resets your animation state. Resetuje aktualną animację. + Réinitialise l'état de l'animation Visszaállítja az animációs állapotodat. + Redefine seu estado de animação. Исправляет баг с зациклившейся анимацией. + Resetovat aktuální animaci. ACE News @@ -365,7 +384,8 @@ ACE-Neuigkeiten Notícias do ACE Wiadomości ACE - ACE Novinky + ACE Zprávy + Nouveautés ACE ACE hírek Новости ACE @@ -375,19 +395,23 @@ Zeige Neuigkeiten im Hauptmenü Mostrar notícias no menu principal Pokazuj wiadomości ACE w menu głównym - Zobrazit novinky v hlavním menu + Affiche les nouveautés sur l'écran principal Hírek mutatása a főmenüben Показывать новости в Главном Меню All Categories Wszystkie kategorie + Todas categorias Все категории + Všechny Kategorie Logistics Logistyka + Logística Логистика + Logistika diff --git a/addons/overheating/XEH_postInit.sqf b/addons/overheating/XEH_postInit.sqf index 0dad0dd32c..51f23bf0b6 100644 --- a/addons/overheating/XEH_postInit.sqf +++ b/addons/overheating/XEH_postInit.sqf @@ -1,7 +1,7 @@ // by esteldunedain #include "script_component.hpp" -if !(hasInterface) exitWith {}; +if (!hasInterface) exitWith {}; // Add keybinds ["ACE3 Weapons", QGVAR(unjamWeapon), localize LSTRING(UnjamWeapon), diff --git a/addons/overheating/functions/fnc_cooldown.sqf b/addons/overheating/functions/fnc_cooldown.sqf index 8fb0e0127b..9e54d35b56 100644 --- a/addons/overheating/functions/fnc_cooldown.sqf +++ b/addons/overheating/functions/fnc_cooldown.sqf @@ -39,7 +39,7 @@ while {true} do { if (_temperature < 1) exitWith {0}; if (isNil "_temperature") exitWith { - diag_log text format ["[ACE] ERROR: _totalTime = %1; _time = %2; _deltaTime = %3;", _totalTime, _time, _deltaTime]; + ACE_LOGERROR_3("_totalTime = %1; _time = %2; _deltaTime = %3;",_totalTime,_time,_deltaTime); 0 }; diff --git a/addons/overpressure/CfgEventHandlers.hpp b/addons/overpressure/CfgEventHandlers.hpp index 439270861b..6f8dba89bd 100644 --- a/addons/overpressure/CfgEventHandlers.hpp +++ b/addons/overpressure/CfgEventHandlers.hpp @@ -14,38 +14,38 @@ class Extended_PostInit_EventHandlers { class Extended_FiredBIS_EventHandlers { class CAManBase { class ADDON { - firedBIS = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> QUOTE(QGVAR(Damage))) > 0}) then {_this call DFUNC(fireLauncherBackblast)}); + firedBIS = QUOTE(if (local (_this select 0)) then {_this call FUNC(firedEHBB);};); }; }; class Tank { class ADDON { - firedBIS = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> QUOTE(QGVAR(Damage))) > 0}) then {_this call DFUNC(fireOverpressureZone)}); + firedBIS = QUOTE(if (local (_this select 0)) then {_this call FUNC(firedEHOP);};); }; }; class Car { class ADDON { - firedBIS = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> QUOTE(QGVAR(Damage))) > 0}) then {_this call DFUNC(fireOverpressureZone)}); + firedBIS = QUOTE(if (local (_this select 0)) then {_this call FUNC(firedEHOP);};); }; }; class Helicopter { class ADDON { - firedBIS = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> QUOTE(QGVAR(Damage))) > 0}) then {_this call DFUNC(fireOverpressureZone)}); + firedBIS = QUOTE(if (local (_this select 0)) then {_this call FUNC(firedEHOP);};); }; }; class Plane { class ADDON { - firedBIS = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> QUOTE(QGVAR(Damage))) > 0}) then {_this call DFUNC(fireOverpressureZone)}); + firedBIS = QUOTE(if (local (_this select 0)) then {_this call FUNC(firedEHOP);};); }; }; class Ship_F { class ADDON { - firedBIS = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> QUOTE(QGVAR(Damage))) > 0}) then {_this call DFUNC(fireOverpressureZone)}); + firedBIS = QUOTE(if (local (_this select 0)) then {_this call FUNC(firedEHOP);};); }; }; class StaticWeapon { class ADDON { - firedBIS = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> QUOTE(QGVAR(Damage))) > 0}) then {_this call DFUNC(fireOverpressureZone)}); + firedBIS = QUOTE(if (local (_this select 0)) then {_this call FUNC(firedEHOP);};); }; }; }; diff --git a/addons/overpressure/CfgWeapons.hpp b/addons/overpressure/CfgWeapons.hpp index e9170a4b2e..a88fa90894 100644 --- a/addons/overpressure/CfgWeapons.hpp +++ b/addons/overpressure/CfgWeapons.hpp @@ -3,6 +3,7 @@ class CfgWeapons { class LauncherCore; class Launcher: LauncherCore { + GVAR(priority) = 1; GVAR(angle) = 60; GVAR(range) = 10; GVAR(damage) = 0.7; @@ -11,6 +12,7 @@ class CfgWeapons { class Launcher_Base_F: Launcher {}; class launch_Titan_base: Launcher_Base_F { + GVAR(priority) = 1; GVAR(angle) = 40; GVAR(range) = 8; GVAR(damage) = 0.5; @@ -18,6 +20,7 @@ class CfgWeapons { class launch_Titan_short_base: launch_Titan_base { // Titan is a soft-launch launcher + GVAR(priority) = 1; GVAR(angle) = 30; GVAR(range) = 2; GVAR(damage) = 0.5; @@ -25,12 +28,14 @@ class CfgWeapons { class launch_NLAW_F: Launcher_Base_F { // NLAW is a soft-launch launcher + GVAR(priority) = 1; GVAR(angle) = 30; GVAR(range) = 2; GVAR(damage) = 0.6; }; class launch_RPG32_F: Launcher_Base_F { + GVAR(priority) = 1; GVAR(angle) = 60; GVAR(range) = 15; GVAR(damage) = 0.7; @@ -38,12 +43,14 @@ class CfgWeapons { class CannonCore; class cannon_120mm: CannonCore { + GVAR(priority) = 1; GVAR(angle) = 90; GVAR(range) = 50; GVAR(damage) = 0.85; }; class mortar_155mm_AMOS: CannonCore { + GVAR(priority) = 1; GVAR(angle) = 90; GVAR(range) = 60; GVAR(damage) = 1; diff --git a/addons/overpressure/XEH_preInit.sqf b/addons/overpressure/XEH_preInit.sqf index 5eefc5eae4..d0ce7cbcf1 100644 --- a/addons/overpressure/XEH_preInit.sqf +++ b/addons/overpressure/XEH_preInit.sqf @@ -6,5 +6,7 @@ PREP(fireLauncherBackblast); PREP(fireOverpressureZone); PREP(getDistance); PREP(overpressureDamage); - +PREP(cacheOverPressureValues); +PREP(firedEHOP); +PREP(firedEHBB); ADDON = true; diff --git a/addons/overpressure/functions/fnc_cacheOverPressureValues.sqf b/addons/overpressure/functions/fnc_cacheOverPressureValues.sqf new file mode 100644 index 0000000000..0717065c43 --- /dev/null +++ b/addons/overpressure/functions/fnc_cacheOverPressureValues.sqf @@ -0,0 +1,76 @@ +/* + * Author: joko // Jonas + * + * Handle fire of local launchers + * + * Argument: + * 0: Weapon + * 1: Magazine + * 2: Ammo + * + * Return value: + * Array: + * 0: Angle + * 1: Range + * 2: Damage + * + */ + #include "script_component.hpp" + +params ["_weapon", "_ammo", "_magazine"]; +TRACE_3("Parameter",_weapon,_magazine,_ammo); + +private ["_array", "_type", "_return", "_config" /*, "_priority"*/]; + +// get Priority Array from Config +_array = [ + getNumber (configFile >> "CfgWeapons" >> QGVAR(priority)), + getNumber (configFile >> "CfgMagazines" >> QGVAR(priority)), + getNumber (configFile >> "CfgAmmo" >> QGVAR(priority)) +]; + +TRACE_1("Proiroity Array",_array); + +/* for CBA Upadte 2.1 +_priority = _array call CBA_fnc_findMax; +_type = if (isNil "_priority") then { + 0 +} else { + _priority select 1 +}; +*/ + +// obsolete as CBA Update 2.1 start +_array params ["_max"]; + +// set Default type +_type = 0; +// get Highest Entry out the the Priority Array +{ + if (_max < _x) then { + _max = _x; + _type = _forEachIndex; + }; +} forEach _array; +// obsolete end + +TRACE_2("Highest Value",_max,_type); +// create the Config entry Point +_config = [ + (configFile >> "CfgWeapons" >> _weapon), + (configFile >> "CfgMagazines" >> _magazine), + (configFile >> "CfgAmmo" >> _ammo) +] select _type; +TRACE_1("ConfigPath",_config); + +// get the Variables out of the Configes and create a array with then +_return = [ + (getNumber (_config >> QGVAR(angle))), + (getNumber (_config >> QGVAR(range))), + (getNumber (_config >> QGVAR(damage))) +]; +TRACE_1("Return",_return); +_varName = format [QGVAR(values%1%2%3), _weapon, _ammo, _magazine]; +missionNameSpace setVariable [format [QGVAR(values%1%2%3), _weapon, _ammo, _magazine], _return]; + +_return diff --git a/addons/overpressure/functions/fnc_fireLauncherBackblast.sqf b/addons/overpressure/functions/fnc_fireLauncherBackblast.sqf index d5c28cca44..14ffdd2db7 100644 --- a/addons/overpressure/functions/fnc_fireLauncherBackblast.sqf +++ b/addons/overpressure/functions/fnc_fireLauncherBackblast.sqf @@ -3,22 +3,22 @@ * * Handle fire of local launchers * - * Argument: - * 0: Unit that fired (Object) - * 1: Weapon fired (String) - * 2: Muzzle (String) - * 3: Mode (String) - * 4: Ammo (String) - * 5: Magazine (String) - * 6: Projectile (Object) + * Arguments: + * 0: Unit that fired + * 1: Weapon fired + * 2: Muzzle + * 3: Mode + * 4: Ammo + * 5: Magazine + * 6: Projectile * * Return value: * None */ -//#define DEBUG_MODE_FULL + #include "script_component.hpp" -EXPLODE_7_PVT(_this,_firer,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); +params ["_firer", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile"]; // Prevent AI from causing backblast damage if !([_firer] call EFUNC(common,isPlayer)) exitWith {}; @@ -28,11 +28,16 @@ private ["_position", "_direction"]; _position = getPosASL _projectile; _direction = [0, 0, 0] vectorDiff (vectorDir _projectile); -private ["_backblastAngle", "_backblastRange", "_backblastDamage"]; +private ["_var","_varName","_backblastAngle", "_backblastRange", "_backblastDamage"]; +// Bake variable name and check if the variable exists, call the caching function otherwise +_varName = format [QGVAR(values%1%2%3), _weapon, _ammo, _magazine]; +_var = if (isNil _varName) then { + [_weapon, _ammo, _magazine] call FUNC(cacheOverPressureValues); +} else { + missionNameSpace getVariable _varName; +}; +_var params["_backblastAngle","_backblastRange","_backblastDamage"]; -_backblastAngle = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(angle)) / 2; -_backblastRange = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(range)); -_backblastDamage = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(damage)); // Damage to others private "_affected"; diff --git a/addons/overpressure/functions/fnc_fireOverpressureZone.sqf b/addons/overpressure/functions/fnc_fireOverpressureZone.sqf index 4438e4a859..3068928ba4 100644 --- a/addons/overpressure/functions/fnc_fireOverpressureZone.sqf +++ b/addons/overpressure/functions/fnc_fireOverpressureZone.sqf @@ -3,14 +3,14 @@ * * Handle fire of local vehicle weapons creating overpressure zones * - * Argument: - * 0: Unit that fired (Object) - * 1: Weapon fired (String) - * 2: Muzzle (String) - * 3: Mode (String) - * 4: Ammo (String) - * 5: Magazine (String) - * 6: Projectile (Object) + * Arguments: + * 0: Unit that fired + * 1: Weapon fired + * 2: Muzzle + * 3: Mode + * 4: Ammo + * 5: Magazine + * 6: Projectile * * Return value: * None @@ -18,8 +18,7 @@ //#define DEBUG_MODE_FULL #include "script_component.hpp" -EXPLODE_7_PVT(_this,_firer,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); - +params ["_firer", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile"]; // Prevent AI from causing overpressure damage if !([gunner _firer] call EFUNC(common,isPlayer)) exitWith {}; //@todo non-maingun turrets? @@ -28,18 +27,23 @@ private ["_position", "_direction"]; _position = getPosASL _projectile; _direction = vectorDir _projectile; -private ["_dangerZoneAngle", "_dangerZoneRange", "_dangerZoneDamage"]; +private ["_var", "_varName", "_dangerZoneAngle", "_dangerZoneRange", "_dangerZoneDamage"]; -_dangerZoneAngle = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(angle)) / 2; -_dangerZoneRange = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(range)); -_dangerZoneDamage = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(damage)); +// Bake variable name and check if the variable exists, call the caching function otherwise +_varName = format [QGVAR(values%1%2%3), _weapon, _ammo, _magazine]; +_var = if (isNil _varName) then { + [_weapon, _ammo, _magazine] call FUNC(cacheOverPressureValues); +} else { + missionNameSpace getVariable _varName; +}; +_var params["_dangerZoneAngle","_dangerZoneRange","_dangerZoneDamage"]; // Damage to others private "_affected"; _affected = getPos _projectile nearEntities ["CAManBase", _dangerZoneRange]; // Let each client handle their own affected units -["overpressure", _affected, [_firer, _position, _direction, _weapon]] call EFUNC(common,targetEvent); +["overpressure", _affected, [_firer, _position, _direction, _weapon, _magazine, _ammo]] call EFUNC(common,targetEvent); // Draw debug lines #ifdef DEBUG_MODE_FULL diff --git a/addons/overpressure/functions/fnc_firedEHBB.sqf b/addons/overpressure/functions/fnc_firedEHBB.sqf new file mode 100644 index 0000000000..cf2ac31561 --- /dev/null +++ b/addons/overpressure/functions/fnc_firedEHBB.sqf @@ -0,0 +1,32 @@ +/* + * Author: joko // Jonas + * + * Handle fire of local launchers + * + * Arguments: + * 0: Unit that fired + * 1: Weapon fired + * 2: Muzzle + * 3: Mode + * 4: Ammo + * 5: Magazine + * 6: Projectile + * + * Return value: + * None + */ +#include "script_component.hpp" +private ["_damage","_varName"]; +params ["", "_weapon", "", "", "_ammo", "_magazine", ""]; + +// Bake variable name and check if the variable exists, call the caching function otherwise +_varName = format [QGVAR(values%1%2%3), _weapon, _ammo, _magazine]; +_damage = if (isNil _varName) then { + ([_weapon, _ammo, _magazine] call FUNC(cacheOverPressureValues)) select 2; +} else { + (missionNameSpace getVariable _varName) select 2; +}; + +if (_damage > 0) then { + _this call DFUNC(fireLauncherBackblast) +}; diff --git a/addons/overpressure/functions/fnc_firedEHOP.sqf b/addons/overpressure/functions/fnc_firedEHOP.sqf new file mode 100644 index 0000000000..6cec770deb --- /dev/null +++ b/addons/overpressure/functions/fnc_firedEHOP.sqf @@ -0,0 +1,32 @@ +/* + * Author: joko // Jonas + * + * Handle fire of Other Weapons + * + * Arguments: + * 0: Unit that fired + * 1: Weapon fired + * 2: Muzzle + * 3: Mode + * 4: Ammo + * 5: Magazine + * 6: Projectile + * + * Return value: + * None + */ +#include "script_component.hpp" +private ["_damage","_varName"]; +params ["", "_weapon", "", "", "_ammo", "_magazine", ""]; + +// Bake variable name and check if the variable exists, call the caching function otherwise +_varName = format [QGVAR(values%1%2%3), _weapon, _ammo, _magazine]; +_damage = if (isNil _varName) then { + ([_weapon, _ammo, _magazine] call FUNC(cacheOverPressureValues)) select 2; +} else { + (missionNameSpace getVariable _varName) select 2; +}; + +if (_damage > 0) then { + _this call DFUNC(fireOverpressureZone) +}; diff --git a/addons/overpressure/functions/fnc_getDistance.sqf b/addons/overpressure/functions/fnc_getDistance.sqf index 905ecbd180..3b3103d951 100644 --- a/addons/overpressure/functions/fnc_getDistance.sqf +++ b/addons/overpressure/functions/fnc_getDistance.sqf @@ -3,13 +3,13 @@ * * Calculate the distance to the first intersection of a line * - * Argument: - * 0: Pos ASL of origin (Array) - * 1: Direction (Array) - * 2: Max distance to search (Number) + * Arguments: + * 0: Pos ASL of origin (ARRAY> + * 1: Direction + * 2: Max distance to search * * Return value: - * Distance to intersection (+- 0.1 m) + * Distance to intersection (+- 0.1 m) */ #include "script_component.hpp" diff --git a/addons/overpressure/functions/fnc_overpressureDamage.sqf b/addons/overpressure/functions/fnc_overpressureDamage.sqf index d1280b682f..a24367937b 100644 --- a/addons/overpressure/functions/fnc_overpressureDamage.sqf +++ b/addons/overpressure/functions/fnc_overpressureDamage.sqf @@ -4,23 +4,29 @@ * Calculate and apply backblast damage to potentially affected local units * * Argument: - * 0: Unit that fired (Object) - * 1: Pos ASL of the projectile (Array) - * 2: Direction of the projectile (Array) - * 3: Weapon fired (String) + * 0: Unit that fired + * 1: Pos ASL of the projectile + * 2: Direction of the projectile + * 3: Weapon fired + * 4: Magazine + * 5: Ammo * * Return value: * None */ #include "script_component.hpp" -EXPLODE_4_PVT(_this,_firer,_posASL,_direction,_weapon); +private ["_var","_overpressureAngle", "_overpressureRange", "_overpressureDamage"]; +params ["_firer", "_posASL", "_direction", "_weapon", "_magazine", "_ammo"]; -private ["_overpressureAngle", "_overpressureRange", "_overpressureDamage"]; - -_overpressureAngle = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(angle)) / 2; -_overpressureRange = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(range)); -_overpressureDamage = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(damage)); +// Bake variable name and check if the variable exists, call the caching function otherwise +_varName = format [QGVAR(values%1%2%3), _weapon, _ammo, _magazine]; +_var = if (isNil _varName) then { + [_weapon, _ammo, _magazine] call FUNC(cacheOverPressureValues); +} else { + missionNameSpace getVariable _varName; +}; +_var params["_overpressureAngle","_overpressureRange","_overpressureDamage"]; TRACE_4("Parameters:",_overpressureAngle,_overpressureRange,_overpressureDamage,_weapon); diff --git a/addons/overpressure/script_component.hpp b/addons/overpressure/script_component.hpp index 3a44df1f9b..fbe7cd1238 100644 --- a/addons/overpressure/script_component.hpp +++ b/addons/overpressure/script_component.hpp @@ -9,4 +9,4 @@ #define DEBUG_SETTINGS DEBUG_ENABLED_OVERPRESSURE #endif -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/parachute/stringtable.xml b/addons/parachute/stringtable.xml index d29499a2bb..ef77bd8ecd 100644 --- a/addons/parachute/stringtable.xml +++ b/addons/parachute/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -17,7 +17,7 @@ Altimeter Watch Montre altimètre Höhenmesser - Hodinky s výškoměrem + Hodinky s Výškoměrem Zegarek z wysokościomierzem Reloj altímetro Magasságmérős karóra @@ -43,7 +43,7 @@ Paracaídas no dirigible Parachute non manœuvrable Niesterowalny spadochron - Neříditelný padák + Neříditelný Padák Irányíthatatlan ejtőernyő Неуправляемый парашют Paracadute non manovrabile @@ -52,16 +52,22 @@ Cut Parachute Fallschirm abschneiden + Couper le parachute Odetnij spadochron Ejtőernyő elvágása + Cortar para-quedas Обрезать стропы + Odžíznout Padák Reserve Parachute Reserve Fallschirm + Mettre de coté le parachute (????) Spadochron awaryjny Tartalék ejtőernyő + Para-quedas de reserva Запасной парашют + Záložní Padák - \ No newline at end of file + diff --git a/addons/protection/$PBOPREFIX$ b/addons/protection/$PBOPREFIX$ deleted file mode 100644 index 7ba9736ebe..0000000000 --- a/addons/protection/$PBOPREFIX$ +++ /dev/null @@ -1 +0,0 @@ -z\ace\addons\protection \ No newline at end of file diff --git a/addons/protection/CfgVehicles.hpp b/addons/protection/CfgVehicles.hpp deleted file mode 100644 index bce583e2ec..0000000000 --- a/addons/protection/CfgVehicles.hpp +++ /dev/null @@ -1,5 +0,0 @@ - -class CfgVehicles { - #include - #include -}; diff --git a/addons/protection/CfgWeapons.hpp b/addons/protection/CfgWeapons.hpp deleted file mode 100644 index 3f706fed41..0000000000 --- a/addons/protection/CfgWeapons.hpp +++ /dev/null @@ -1,4 +0,0 @@ - -class CfgWeapons { - #include -}; diff --git a/addons/protection/FixHelmets.hpp b/addons/protection/FixHelmets.hpp deleted file mode 100644 index eb2c515e50..0000000000 --- a/addons/protection/FixHelmets.hpp +++ /dev/null @@ -1,230 +0,0 @@ - -// INTEGER -#define HELMET_ARMOR_NO_PROTECTION 0 - -// FLOAT, 0-1 -#define HELMET_PASSTHROUGH_NO_PROTECTION 1 - -/*class InventoryItem_Base_F; -class HeadgearItem: InventoryItem_Base_F { - armor = 0; - passThrough = 1; -}; - -class H_HelmetB: ItemCore { - class ItemInfo: HeadgearItem { - //mass = 40; - armor = 4; - passThrough = 0.5; - }; -}; - -class H_HelmetB_camo: H_HelmetB { - class ItemInfo: HeadgearItem { - //mass = 40; - armor = 4; - passThrough = 0.5; - }; -}; - -class H_HelmetB_light: H_HelmetB { - class ItemInfo: ItemInfo { - //mass = 30; - armor = 3; - passThrough = 0.5; - }; -}; - -class H_Booniehat_khk: H_HelmetB { - class ItemInfo: ItemInfo { - //mass = 10; - armor = 0; - passThrough = 1; - }; -}; - -class H_HelmetB_plain_mcamo: H_HelmetB {}; - -class H_HelmetSpecB: H_HelmetB_plain_mcamo { - class ItemInfo: ItemInfo { - //mass = 50; - armor = 5; - passThrough = 0.5; - }; -}; - -class H_HelmetIA: H_HelmetB { - class ItemInfo: ItemInfo { - //mass = 40; - armor = 4; - passThrough = 0.5; - }; -}; - -class H_Cap_red: H_HelmetB { - class ItemInfo: ItemInfo { - //mass = 4; - armor = 0; - passThrough = 1; - }; -}; - -class H_Cap_headphones: H_HelmetB { - class ItemInfo: ItemInfo { - //mass = 8; - armor = 0; - passThrough = 1; - }; -}; - -class H_HelmetCrew_B: H_HelmetB { - class ItemInfo: ItemInfo { - //mass = 40; - armor = 4; - passThrough = 0.5; - }; -}; - -class H_PilotHelmetFighter_B: H_HelmetB { - class ItemInfo: ItemInfo { - //mass = 50; - armor = 5; - passThrough = 0.5; - }; -}; - -class H_PilotHelmetHeli_B: H_HelmetB { - class ItemInfo: ItemInfo { - //mass = 30; - armor = 3; - passThrough = 0.5; - }; -}; - -class H_CrewHelmetHeli_B: H_HelmetB { - class ItemInfo: ItemInfo { - //mass = 30; - armor = 3; - passThrough = 0.5; - }; -}; - -class H_HelmetO_ocamo: H_HelmetB { - class ItemInfo: ItemInfo { - //mass = 50; - armor = 5; - passThrough = 0.5; - }; -}; - -class H_HelmetLeaderO_ocamo: H_HelmetO_ocamo { - class ItemInfo: ItemInfo { - //mass = 60; - armor = 6; - passThrough = 0.5; - }; -}; - -class H_MilCap_ocamo: H_HelmetB { - class ItemInfo: ItemInfo { - //mass = 6; - armor = 0; - passThrough = 1; - }; -}; - -class H_BandMask_blk: H_HelmetB { - class ItemInfo: ItemInfo { - //mass = 8; - armor = 0; - passThrough = 1; - }; -}; - -class H_HelmetSpecO_ocamo: H_HelmetO_ocamo { - class ItemInfo: ItemInfo { - //mass = 40; - armor = 4; - passThrough = 0.5; - }; -}; - -class H_Bandanna_surfer: H_HelmetB { - class ItemInfo: ItemInfo { - //mass = 8; - armor = 0; - passThrough = 1; - }; -}; - -class H_Shemag_khk: H_HelmetB { - class ItemInfo: ItemInfo { - //mass = 6; - armor = 0; - passThrough = 1; - }; -}; - -class H_ShemagOpen_khk: H_HelmetB { - class ItemInfo: ItemInfo { - //mass = 6; - armor = 0; - passThrough = 1; - }; -}; - -class H_Beret_blk: H_HelmetB { - class ItemInfo: ItemInfo { - //mass = 6; - armor = 0; - passThrough = 1; - }; -}; - -class H_Beret_02: H_Beret_blk { - class ItemInfo: ItemInfo { - //mass = 6; - armor = 0; - passThrough = 1; - }; -}; - -class H_Watchcap_blk: H_HelmetB { - class ItemInfo: ItemInfo { - //mass = 6; - armor = 0; - passThrough = 1; - }; -}; - -class H_TurbanO_blk: H_HelmetB { - class ItemInfo: ItemInfo { - //mass = 8; - armor = 0; - passThrough = 1; - }; -}; - -class H_StrawHat: H_HelmetB { - class ItemInfo: ItemInfo { - //mass = 6; - armor = 0; - passThrough = 1; - }; -}; - -class H_Hat_blue: H_HelmetB { - class ItemInfo: ItemInfo { - //mass = 6; - armor = 0; - passThrough = 1; - }; -}; - -class H_RacingHelmet_1_F: H_HelmetB_camo { - class ItemInfo: ItemInfo { - //mass = 50; - armor = 5; - passThrough = 0.5; - }; -};*/ diff --git a/addons/protection/FixUniforms.hpp b/addons/protection/FixUniforms.hpp deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/addons/protection/FixVests.hpp b/addons/protection/FixVests.hpp deleted file mode 100644 index f3d1ad2b3d..0000000000 --- a/addons/protection/FixVests.hpp +++ /dev/null @@ -1,303 +0,0 @@ - -class ItemCore; -class VestItem; - -class Vest_Camo_Base: ItemCore { - class ItemInfo: VestItem { - /*containerClass = "Supply0"; - mass = 0; - armor = 0; - passThrough = 1;*/ - }; -}; -class Vest_NoCamo_Base: ItemCore { - class ItemInfo: VestItem { - /*containerClass = "Supply0"; - mass = 0; - armor = 0; - passThrough = 1;*/ - }; -}; - -// belts -class V_Rangemaster_belt: Vest_NoCamo_Base { - class ItemInfo: ItemInfo { - /*containerClass = "Supply40"; - mass = 10; - armor = 0; - passThrough = 1;*/ - }; -}; - -// bandolliers -class V_BandollierB_khk: Vest_Camo_Base { - class ItemInfo: ItemInfo { - /*containerClass = "Supply80"; - mass = 15; - armor = 0;*/ - passThrough = 0.85; //1; - }; -}; -/*class V_BandollierB_cbr: V_BandollierB_khk { - class ItemInfo: ItemInfo {}; -}; -class V_BandollierB_rgr: V_BandollierB_khk { - class ItemInfo: ItemInfo {}; -}; -class V_BandollierB_blk: V_BandollierB_khk { - class ItemInfo: ItemInfo {}; -}; -class V_BandollierB_oli: V_BandollierB_khk { - class ItemInfo: ItemInfo {}; -};*/ - -// plate carriers -class V_PlateCarrier1_rgr: Vest_NoCamo_Base { // lite - class ItemInfo: ItemInfo { - /*containerClass = "Supply140"; - mass = 80;*/ - armor = 8; //20; - passThrough = 0.75; //0.5; - }; -}; -class V_PlateCarrier2_rgr: V_PlateCarrier1_rgr { // heavy - class ItemInfo: ItemInfo { - /*containerClass = "Supply140"; - mass = 100;*/ - armor = 12; //30; - passThrough = 0.75; //0.5; - }; -}; -class V_PlateCarrier3_rgr: Vest_NoCamo_Base { // heavy (us) - class ItemInfo: ItemInfo { - /*containerClass = "Supply140"; - mass = 100;*/ - armor = 12; //30; - passThrough = 0.75; //0.5; - }; -}; -class V_PlateCarrierGL_rgr: Vest_NoCamo_Base { // lite (gl) - class ItemInfo: ItemInfo { - containerClass = "Supply160"; //"Supply140"; - /*mass = 100;*/ - armor = 8; //100; - passThrough = 0.75; //0.7; - }; -}; -class V_PlateCarrier1_blk: Vest_Camo_Base { // heavy (black) - class ItemInfo: ItemInfo { - /*containerClass = "Supply140";*/ - mass = 100; //80; - armor = 12; //20; - passThrough = 0.75; //0.5; - }; -}; -class V_PlateCarrierSpec_rgr: Vest_NoCamo_Base { // lite (special) - class ItemInfo: ItemInfo { - /*containerClass = "Supply100"; - mass = 120;*/ - armor = 16; //40; - passThrough = 0.75; //0.1; - }; -}; - -// chestrigs -/*class V_Chestrig_khk: Vest_Camo_Base { - class ItemInfo: ItemInfo { - containerClass = "Supply140"; - mass = 20; - armor = 0; - passThrough = 1; - }; -}; -class V_Chestrig_rgr: V_Chestrig_khk {}; -class V_Chestrig_blk: V_Chestrig_khk {}; -class V_Chestrig_oli: Vest_Camo_Base { - class ItemInfo: ItemInfo { - containerClass = "Supply140"; - mass = 20; - armor = 0; - passThrough = 1; - }; -};*/ - -// tactical vests -class V_TacVest_khk: Vest_Camo_Base { - class ItemInfo: ItemInfo { - /*containerClass = "Supply100"; - mass = 40;*/ - armor = 8; //20; - /*passThrough = 1;*/ - }; -}; -class V_TacVest_brn: V_TacVest_khk {}; -class V_TacVest_oli: V_TacVest_khk {}; -class V_TacVest_blk: V_TacVest_khk {}; -class V_TacVest_camo: Vest_Camo_Base { - class ItemInfo: ItemInfo { - /*containerClass = "Supply100"; - mass = 40;*/ - armor = 8; //20; - /*passThrough = 1;*/ - }; -}; -class V_TacVest_blk_POLICE: Vest_Camo_Base { - class ItemInfo: ItemInfo { - /*containerClass = "Supply100";*/ - mass = 40; //60; - armor = 8; //100; - passThrough = 1; //0.7; - }; -}; -class V_TacVestIR_blk: Vest_NoCamo_Base { // raven vest - class ItemInfo: VestItem { - /*containerClass = "Supply100"; - mass = 50;*/ - armor = 8; //20; - passThrough = 0.85; //0.5; - }; -}; -class V_TacVestCamo_khk: Vest_Camo_Base { - class ItemInfo: VestItem { - /*containerClass = "Supply100"; - mass = 40;*/ - armor = 8; //20; - /*passThrough = 1;*/ - }; -}; - -// harnesses -class V_HarnessO_brn: Vest_NoCamo_Base { - class ItemInfo: ItemInfo { - /*containerClass = "Supply160"; - mass = 30; - armor = 0;*/ - passThrough = 0.85; //0.5; - }; -}; -class V_HarnessOGL_brn: Vest_NoCamo_Base { // gl - class ItemInfo: ItemInfo { - /*containerClass = "Supply120"; - mass = 20; - armor = 0;*/ - passThrough = 0.85; //0.5; - }; -}; -class V_HarnessO_gry: V_HarnessO_brn { - class ItemInfo: ItemInfo { - /*containerClass = "Supply160"; - mass = 30; - armor = 0;*/ - passThrough = 0.85; //0.5; - }; -}; -class V_HarnessOGL_gry: V_HarnessO_gry { // gl - class ItemInfo: ItemInfo { - /*containerClass = "Supply120"; - mass = 20; - armor = 0;*/ - passThrough = 0.85; //0.5; - }; -}; -class V_HarnessOSpec_brn: V_HarnessO_brn { - class ItemInfo: VestItem { - /*containerClass = "Supply160"; - mass = 30; - armor = 0;*/ - passThrough = 0.85; //0.5; - }; -}; -class V_HarnessOSpec_gry: V_HarnessO_gry { - class ItemInfo: ItemInfo { - /*containerClass = "Supply160"; - mass = 30; - armor = 0;*/ - passThrough = 0.85; //0.5; - }; -}; - -// indep plate carriers -class V_PlateCarrierIA1_dgtl: Vest_NoCamo_Base { // lite - class ItemInfo: VestItem { - /*containerClass = "Supply120"; - mass = 60;*/ - armor = 8; //20; - passThrough = 0.75; //0.5; - }; -}; -class V_PlateCarrierIA2_dgtl: V_PlateCarrierIA1_dgtl { // heavy - class ItemInfo: VestItem { - /*containerClass = "Supply120"; - mass = 80;*/ - armor = 12; //30; - passThrough = 0.75; //0.5; - }; -}; -class V_PlateCarrierIAGL_dgtl: V_PlateCarrierIA2_dgtl { // heavy (gl) - class ItemInfo: VestItem { - containerClass = "Supply140"; //"Supply120"; - mass = 100; //80; - armor = 12; //100; - passThrough = 0.75; //0.7; - }; -}; - -// rebreather -/*class V_RebreatherB: Vest_Camo_Base { - class ItemInfo: ItemInfo { - containerClass = "Supply0"; - mass = 80; - armor = 20; - passThrough = 1; - }; -}; -class V_RebreatherIR: V_RebreatherB {}; -class V_RebreatherIA: V_RebreatherB {};*/ - -// more plate carriers -class V_PlateCarrier_Kerry: V_PlateCarrier1_rgr { // lighter - class ItemInfo: ItemInfo { - /*containerClass = "Supply140"; - mass = 80;*/ - armor = 8; //30; - passThrough = 0.75; //0.5; - }; -}; -class V_PlateCarrierL_CTRG: V_PlateCarrier1_rgr { // lite - class ItemInfo: ItemInfo { - /*containerClass = "Supply140"; - mass = 80;*/ - armor = 8; //20; - passThrough = 0.75; //0.5; - }; -}; -class V_PlateCarrierH_CTRG: V_PlateCarrier2_rgr { // heavy - class ItemInfo: ItemInfo { - /*containerClass = "Supply140"; - mass = 100;*/ - armor = 12; //30; - passThrough = 0.75; //0.5; - }; -}; - -// another tactical vest -class V_I_G_resistanceLeader_F: V_TacVest_camo { - class ItemInfo: ItemInfo {}; -}; - -// press vest -class V_Press_F: Vest_Camo_Base { - class ItemInfo: ItemInfo { - /*containerClass = "Supply40"; - mass = 20;*/ - armor = 8; //0; ? - /*passThrough = 1;*/ - }; -}; - -// marksman dlc -/*class V_PlateCarrierGL_blk: V_PlateCarrierGL_rgr {}; -class V_PlateCarrierGL_mtp: V_PlateCarrierGL_rgr {}; -class V_PlateCarrierSpec_blk: V_PlateCarrierSpec_rgr {}; -class V_PlateCarrierSpec_mtp: V_PlateCarrierSpec_rgr {}; -class V_PlateCarrierIAGL_oli: V_PlateCarrierIAGL_dgtl {};*/ diff --git a/addons/protection/README.md b/addons/protection/README.md deleted file mode 100644 index a6def1a1bc..0000000000 --- a/addons/protection/README.md +++ /dev/null @@ -1,12 +0,0 @@ -ace_protection -============== - -Fixes and tweaks the protection values of body armour. - - -## Maintainers - -The people responsible for merging changes to this component or answering potential questions. - -- [KoffeinFlummi](https://github.com/KoffeinFlummi) -- [commy2](https://github.com/commy2) diff --git a/addons/protection/config.cpp b/addons/protection/config.cpp deleted file mode 100644 index bb4ef3f739..0000000000 --- a/addons/protection/config.cpp +++ /dev/null @@ -1,16 +0,0 @@ -#include "script_component.hpp" - -class CfgPatches { - class ADDON { - units[] = {}; - weapons[] = {}; - requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"ace_common"}; - author[] = {"commy2"}; - authorUrl = "https://github.com/commy2"; - VERSION_CONFIG; - }; -}; - -#include "CfgVehicles.hpp" -#include "CfgWeapons.hpp" diff --git a/addons/protection/script_component.hpp b/addons/protection/script_component.hpp deleted file mode 100644 index 1b2774a8ef..0000000000 --- a/addons/protection/script_component.hpp +++ /dev/null @@ -1,12 +0,0 @@ -#define COMPONENT protection -#include "\z\ace\addons\main\script_mod.hpp" - -#ifdef DEBUG_ENABLED_PROTECTION - #define DEBUG_MODE_FULL -#endif - -#ifdef DEBUG_ENABLED_PROTECTION - #define DEBUG_SETTINGS DEBUG_ENABLED_PROTECTION -#endif - -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file diff --git a/addons/rangecard/stringtable.xml b/addons/rangecard/stringtable.xml index 5faa244513..309241a565 100644 --- a/addons/rangecard/stringtable.xml +++ b/addons/rangecard/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -19,7 +19,7 @@ Přidat 50 METRŮ -- MRAD/MRAD (síťka/věže) 50-Meter-Schritte MRAD/MRAD (Fadenkreuz/Geschützturm) Incrementos de 50 METROS - MRAD/MRAD (retícula/torres) - Intervalle 50 mètres -- millième/millième (réticule/tambours) + Incrément de 50m -- MRAD/MRAD (réticule/tourelle) 50 MÉTERES lépések - MRAD/MRAD (célzó/lövegek) Шаг 50 МЕТРОВ - MRAD/MRAD (сетка/маховички) @@ -30,7 +30,7 @@ Otevřít vzdálenostní tabulku Öffne Entfernungsspinne Abrir tabela de distâncias - Afficher table de tir + Ouvrir la table de tir Távolsági kártya kinyitása Открыть таблицу поправок @@ -41,7 +41,7 @@ Otevřít kopii vzdálenostní tabulky Öffne Kopie der Entfernungsspinne Abrir cópia da tabela de distâncias - Afficher table de tir copiée + Ouvrir une copie de la table de tir Távolsági kártya-másolat kinyitása Открыть копию таблицы поправок @@ -52,7 +52,7 @@ Otevřít vzdálenostní tabulku Öffne Entfernungsspinne Abrir tabela de distäncias - Afficher table de tir + Ouvrir la table de tir Távolsági kártya kinyitása Открыть таблицу поправок @@ -63,7 +63,7 @@ Otevřít kopii vzdálenostní tabulky Öffne Kopie der Entfernungsspinne Abrir cópia da tabela de distâncias - Afficher table de tir copiée + Ouvrir une copie de la table de tir Távolsági kártya-másolat kinyitása Открыть копию таблицы поправок @@ -74,9 +74,9 @@ Kopírovat vzdálenostní tabulku Kopiere Entfernungsspinne Copiar tabela de distäncias - Copier table de tir + Recopier la table de tir Távolsági kártya másolása Скопировать таблицу поправок - \ No newline at end of file + diff --git a/addons/reload/XEH_postInit.sqf b/addons/reload/XEH_postInit.sqf index 9d5110d330..e1dc9e8d51 100644 --- a/addons/reload/XEH_postInit.sqf +++ b/addons/reload/XEH_postInit.sqf @@ -1,7 +1,7 @@ // by esteldunedain #include "script_component.hpp" -if !(hasInterface) exitWith {}; +if (!hasInterface) exitWith {}; // Add keybinds ["ACE3 Weapons", QGVAR(checkAmmo), localize LSTRING(checkAmmo), @@ -27,8 +27,6 @@ if !(hasInterface) exitWith {}; // Listen for attempts to link ammo ["linkedAmmo", { EXPLODE_3_PVT(_this,_receiver,_giver,_magazine); - diag_log "linkedAmmo"; - diag_log _this; private ["_magazineCfg","_magazineType"]; _magazineType = currentMagazine _receiver; @@ -62,8 +60,6 @@ if !(hasInterface) exitWith {}; // Listen for returned magazines ["returnedAmmo", { EXPLODE_3_PVT(_this,_receiver,_giver,_magazine); - diag_log "returnedAmmo"; - diag_log _this; _receiver addMagazine _magazine; }] call EFUNC(common,addEventhandler); diff --git a/addons/repair/ACE_Repair.hpp b/addons/repair/ACE_Repair.hpp index 219945003d..a8aac18690 100644 --- a/addons/repair/ACE_Repair.hpp +++ b/addons/repair/ACE_Repair.hpp @@ -8,7 +8,7 @@ class ACE_Repair { requiredEngineer = QGVAR(engineerSetting_Wheel); repairingTime = 10; repairingTimeSelfCoef = 1; - items[] = {"ToolKit"}; + items = QGVAR(wheelRepairRequiredItems); condition = QUOTE(call FUNC(canReplaceWheel)); itemConsumed = 0; @@ -35,6 +35,7 @@ class ACE_Repair { requiredEngineer = 0; repairingTime = 15; callbackSuccess = QUOTE(call FUNC(doRepair)); + items[] = {"ToolKit"}; }; class RepairTrack: MiscRepair { displayName = CSTRING(Repairing); diff --git a/addons/repair/ACE_Settings.hpp b/addons/repair/ACE_Settings.hpp index 48d3a9c0c6..22e68ce3e9 100644 --- a/addons/repair/ACE_Settings.hpp +++ b/addons/repair/ACE_Settings.hpp @@ -57,8 +57,24 @@ class ACE_Settings { displayName = CSTRING(engineerSetting_fullRepair_name); description = CSTRING(engineerSetting_fullRepair_description); typeName = "SCALAR"; - value = 3; + value = 2; values[] = {CSTRING(engineerSetting_anyone), CSTRING(engineerSetting_EngineerOnly), CSTRING(engineerSetting_RepairSpecialistOnly)}; category = ECSTRING(OptionsMenu,CategoryLogistics); }; + class GVAR(addSpareParts) { + displayName = CSTRING(addSpareParts_name); + description = CSTRING(addSpareParts_description); + typeName = "BOOL"; + value = 1; + category = ECSTRING(OptionsMenu,CategoryLogistics); + }; + class GVAR(wheelRepairRequiredItems) { + displayName = CSTRING(wheelRepairRequiredItems_name); + description = CSTRING(wheelRepairRequiredItems_description); + category = ECSTRING(OptionsMenu,CategoryLogistics); + typeName = "SCALAR"; + value = 0; + values[] = {"None", "ToolKit"}; + _values[] = {{}, {"ToolKit"}}; + }; }; diff --git a/addons/repair/CfgEventHandlers.hpp b/addons/repair/CfgEventHandlers.hpp index 08ec6bad15..2a4386f5b0 100644 --- a/addons/repair/CfgEventHandlers.hpp +++ b/addons/repair/CfgEventHandlers.hpp @@ -13,31 +13,31 @@ class Extended_PostInit_EventHandlers { class Extended_Init_EventHandlers { class Car { class ADDON { - init = QUOTE(_this call DFUNC(addRepairActions)); + init = QUOTE(_this call DFUNC(addRepairActions); _this call DFUNC(addSpareParts)); }; }; class Tank { class ADDON { - init = QUOTE(_this call DFUNC(addRepairActions)); + init = QUOTE(_this call DFUNC(addRepairActions); _this call DFUNC(addSpareParts)); }; }; class Helicopter { class ADDON { - init = QUOTE(_this call DFUNC(addRepairActions)); + init = QUOTE(_this call DFUNC(addRepairActions); _this call DFUNC(addSpareParts)); }; }; class Plane { class ADDON { - init = QUOTE(_this call DFUNC(addRepairActions)); + init = QUOTE(_this call DFUNC(addRepairActions); _this call DFUNC(addSpareParts)); }; }; class Ship_F { class ADDON { - init = QUOTE(_this call DFUNC(addRepairActions)); + init = QUOTE(_this call DFUNC(addRepairActions); _this call DFUNC(addSpareParts)); }; }; }; diff --git a/addons/repair/CfgVehicles.hpp b/addons/repair/CfgVehicles.hpp index 27e8890dbc..83d44592ce 100644 --- a/addons/repair/CfgVehicles.hpp +++ b/addons/repair/CfgVehicles.hpp @@ -91,6 +91,21 @@ class CfgVehicles { class Special { name = CSTRING(engineerSetting_RepairSpecialistOnly); value = 2; default = 1;}; }; }; + class addSpareParts { + displayName = CSTRING(addSpareParts_name); + description = CSTRING(addSpareParts_description); + typeName = "BOOL"; + defaultValue = 1; + }; + class wheelRepairRequiredItems { + displayName = CSTRING(wheelRepairRequiredItems_name); + description = CSTRING(wheelRepairRequiredItems_description); + typeName = "NUMBER"; + class values { + class None { name = "None"; value = 0; default = 1;}; + class ToolKit { name = "ToolKit"; value = 1; }; + }; + }; }; class ModuleDescription { description = CSTRING(moduleDescription); @@ -215,19 +230,57 @@ class CfgVehicles { sync[] = {}; }; }; + class ACE_moduleAddSpareParts: Module_F { + scope = 2; + displayName = CSTRING(AddSpareParts_Module_DisplayName); + icon = QUOTE(PATHTOF(ui\Icon_Module_Repair_ca.paa)); + category = "ACE_Logistics"; + function = QFUNC(moduleAddSpareParts); + functionPriority = 10; + isGlobal = 0; + isTriggerActivated = 0; + isDisposable = 0; + author = ECSTRING(common,ACETeam); + class Arguments { + class List { + displayName = CSTRING(AddSpareParts_List_DisplayName); + description = CSTRING(AddSpareParts_List_Description); + defaultValue = ""; + typeName = "STRING"; + }; + class Part { + displayName = CSTRING(AddSpareParts_Part_DisplayName); + description = CSTRING(AddSpareParts_Part_Description); + typeName = "STRING"; + class values { + class Wheel { + name = CSTRING(SpareWheel); + value = "ACE_Wheel"; + default = 1; + }; + class Track { + name = CSTRING(SpareTrack); + value = "ACE_Track"; + }; + }; + }; + class Amount { + displayName = CSTRING(AddSpareParts_Amount_DisplayName); + description = CSTRING(AddSpareParts_Amount_Description); + typeName = "NUMBER"; + defaultValue = 1; + }; + }; + class ModuleDescription { + description = CSTRING(AddSpareParts_Module_Description); + sync[] = {}; + }; + }; class LandVehicle; class Car: LandVehicle { MACRO_REPAIRVEHICLE - class ACE_Cargo { - class Cargo { - class ACE_Wheel { - type = "ACE_Wheel"; - amount = 1; - }; - }; - }; }; class Tank: LandVehicle { diff --git a/addons/repair/XEH_preInit.sqf b/addons/repair/XEH_preInit.sqf index 8d2f1d8497..f94c230f29 100644 --- a/addons/repair/XEH_preInit.sqf +++ b/addons/repair/XEH_preInit.sqf @@ -3,6 +3,7 @@ ADDON = false; PREP(addRepairActions); +PREP(addSpareParts); PREP(canMiscRepair); PREP(canRemove); PREP(canRepair); @@ -24,6 +25,7 @@ PREP(isEngineer); PREP(isInRepairFacility); PREP(isNearRepairVehicle); PREP(isRepairVehicle); +PREP(moduleAddSpareParts); PREP(moduleAssignEngineer); PREP(moduleAssignRepairVehicle); PREP(moduleAssignRepairFacility); diff --git a/addons/repair/functions/fnc_addRepairActions.sqf b/addons/repair/functions/fnc_addRepairActions.sqf index b76f027bb0..11f4942d74 100644 --- a/addons/repair/functions/fnc_addRepairActions.sqf +++ b/addons/repair/functions/fnc_addRepairActions.sqf @@ -131,7 +131,7 @@ _hitPointsAddedAmount = []; if (typeName _position == "STRING") exitWith { _selection = _vehicle selectionPosition _position; // Selection name }; - diag_log text format ["[ACE] ERROR: Invalid custom position %1 of hitpoint %2 in vehicle %3", _position, _hitpoint, _vehicle]; + ACE_LOGERROR_3("Invalid custom position %1 of hitpoint %2 in vehicle %3.",_position,_hitpoint,_vehicle); }; } forEach (getArray _customSelectionsConfig); }; diff --git a/addons/repair/functions/fnc_addSpareParts.sqf b/addons/repair/functions/fnc_addSpareParts.sqf new file mode 100644 index 0000000000..4d3197c8e8 --- /dev/null +++ b/addons/repair/functions/fnc_addSpareParts.sqf @@ -0,0 +1,45 @@ +/* + * Author: Jonpas + * Adds spare parts to the vehicle. Before SettingsInitialized only collect for later execution. + * + * Arguments: + * 0: Vehicle + * 1: Amount (default: 1) + * 2: Spare Part Classname (default: "") + * 3: Force (add even if setting is disabled) (default: false) + * + * Return Value: + * None + * + * Example: + * [vehicle] call ace_repair_fnc_addSpareParts + * + * Public: No + */ +#include "script_component.hpp" + +private ["_part"]; +params ["_vehicle", ["_amount", 1], ["_part", ""], ["_force", false]]; +TRACE_2("params",_vehicle,_amount); + +// Exit if ace_cargo is not loaded +if !(["ace_cargo"] call EFUNC(common,isModLoaded)) exitWith {}; + +// Collect until SettingsInitialized +if (!EGVAR(common,settingsInitFinished)) exitWith { + EGVAR(common,runAtSettingsInitialized) pushBack [FUNC(addSpareParts), _this]; +}; + +// Exit if not forced and add spare parts is disabled (after settings initted to make sure it really is) +if (!_force && !GVAR(addSpareParts)) exitWith {}; + +// Select appropriate part +if (_part == "") then { + if (_vehicle isKindOf "Car") then { _part = "ACE_Wheel" }; + if (_vehicle isKindOf "Tank") then { _part = "ACE_Track" }; +}; +// Exit if no appropriate part +if (_part == "") exitWith {}; + +// Load +["AddCargoByClass", [_part, _vehicle, _amount]] call EFUNC(common,localEvent); diff --git a/addons/repair/functions/fnc_canRepair.sqf b/addons/repair/functions/fnc_canRepair.sqf index bb44a3dcd4..8fb2a4938e 100644 --- a/addons/repair/functions/fnc_canRepair.sqf +++ b/addons/repair/functions/fnc_canRepair.sqf @@ -21,7 +21,7 @@ params ["_caller", "_target", "_hitPoint", "_className"]; TRACE_4("params",_caller,_target,_hitPoint,_className); -private ["_config", "_engineerRequired", "_items", "_locations", "_return", "_condition", "_vehicleStateCondition"]; +private ["_config", "_engineerRequired", "_items", "_locations", "_return", "_condition", "_vehicleStateCondition", "_settingName", "_settingItemsArray"]; _config = (ConfigFile >> "ACE_Repair" >> "Actions" >> _className); if !(isClass _config) exitwith {false}; // or go for a default? @@ -38,7 +38,17 @@ _engineerRequired = if (isNumber (_config >> "requiredEngineer")) then { }; if !([_caller, _engineerRequired] call FUNC(isEngineer)) exitwith {false}; -_items = getArray (_config >> "items"); +//Items can be an array of required items or a string to a ACE_Setting array +_items = if (isArray (_config >> "items")) then { + getArray (_config >> "items"); +} else { + _settingName = getText (_config >> "items"); + _settingItemsArray = getArray (configFile >> "ACE_Settings" >> _settingName >> "_values"); + if ((isNil _settingName) || {(missionNamespace getVariable _settingName) >= (count _settingItemsArray)}) exitWith { + ERROR("bad setting"); ["BAD"] + }; + _settingItemsArray select (missionNamespace getVariable _settingName); +}; if (count _items > 0 && {!([_caller, _items] call FUNC(hasItems))}) exitwith {false}; _return = true; diff --git a/addons/repair/functions/fnc_moduleAddSpareParts.sqf b/addons/repair/functions/fnc_moduleAddSpareParts.sqf new file mode 100644 index 0000000000..46689951a7 --- /dev/null +++ b/addons/repair/functions/fnc_moduleAddSpareParts.sqf @@ -0,0 +1,61 @@ +/* + * Author: Jonpas + * Adds spare parts to a vehicle. + * + * Arguments: + * 0: The module logic + * 1: Synchronized units + * 2: Activated + * + * Return Value: + * None + * + * Example: + * function = "ace_repair_fnc_moduleAssignRepairVehicle" + * + * Public: No + */ +#define DEBUG_MODE_FULL +#include "script_component.hpp" + +params ["_logic"]; + +if (!isNull _logic) then { + private ["_list", "_part", "_amount", "_nilCheckPassedList"]; + // Module settings + _list = _logic getVariable ["List", ""]; + _part = _logic getVariable ["Part", 0]; + _amount = _logic getVariable ["Amount", 1]; + + // Parse list + _nilCheckPassedList = ""; + { + _x = [_x] call EFUNC(common,stringRemoveWhiteSpace); + if !(isnil _x) then { + if (_nilCheckPassedList == "") then { + _nilCheckPassedList = _x; + } else { + _nilCheckPassedList = _nilCheckPassedList + "," + _x; + }; + }; + } forEach ([_list, ","] call BIS_fnc_splitString); + _list = "[" + _nilCheckPassedList + "]"; + _list = [] call compile _list; + + // Add synchronized objects to list + { + _list pushBack _x; + } forEach (synchronizedObjects _logic); + + if (_list isEqualTo []) exitWith {}; + + TRACE_3("module info parsed",_list,_part,_amount); + // Add spare parts + { + if (!isNil "_x" && {typeName _x == typeName objNull}) then { + [_x, _amount, _part, true] call FUNC(addSpareParts); + }; + } forEach _list; +}; + +true diff --git a/addons/repair/functions/fnc_moduleRepairSettings.sqf b/addons/repair/functions/fnc_moduleRepairSettings.sqf index 3b97d2f168..98ff354662 100644 --- a/addons/repair/functions/fnc_moduleRepairSettings.sqf +++ b/addons/repair/functions/fnc_moduleRepairSettings.sqf @@ -31,4 +31,8 @@ if (!isServer) exitWith {}; [_logic, QGVAR(fullRepairLocation), "fullRepairLocation"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(engineerSetting_fullRepair), "engineerSetting_fullRepair"] call EFUNC(common,readSettingFromModule); -diag_log text "[ACE]: Repair Module Initialized."; +[_logic, QGVAR(addSpareParts), "addSpareParts"] call EFUNC(common,readSettingFromModule); + +[_logic, QGVAR(wheelRepairRequiredItems), "wheelRepairRequiredItems"] call EFUNC(common,readSettingFromModule); + +ACE_LOGINFO("Repair Module Initialized."); diff --git a/addons/repair/functions/fnc_repair.sqf b/addons/repair/functions/fnc_repair.sqf index 4fa1c2d903..fd3b4f032b 100644 --- a/addons/repair/functions/fnc_repair.sqf +++ b/addons/repair/functions/fnc_repair.sqf @@ -21,7 +21,7 @@ params ["_caller", "_target", "_hitPoint", "_className"]; TRACE_4("params",_calller,_target,_hitPoint,_className); -private["_callbackProgress", "_callerAnim", "_calller", "_condition", "_config", "_consumeItems", "_displayText", "_engineerRequired", "_iconDisplayed", "_items", "_locations", "_repairTime", "_repairTimeConfig", "_return", "_usersOfItems", "_vehicleStateCondition", "_wpn"]; +private["_callbackProgress", "_callerAnim", "_calller", "_condition", "_config", "_consumeItems", "_displayText", "_engineerRequired", "_iconDisplayed", "_items", "_locations", "_repairTime", "_repairTimeConfig", "_return", "_usersOfItems", "_vehicleStateCondition", "_wpn", "_settingName", "_settingItemsArray"]; _config = (ConfigFile >> "ACE_Repair" >> "Actions" >> _className); if !(isClass _config) exitwith {false}; // or go for a default? @@ -37,7 +37,18 @@ _engineerRequired = if (isNumber (_config >> "requiredEngineer")) then { }; if !([_caller, _engineerRequired] call FUNC(isEngineer)) exitwith {false}; if (isEngineOn _target) exitwith {false}; -_items = getArray (_config >> "items"); + +//Items can be an array of required items or a string to a ACE_Setting array +_items = if (isArray (_config >> "items")) then { + getArray (_config >> "items"); +} else { + _settingName = getText (_config >> "items"); + _settingItemsArray = getArray (configFile >> "ACE_Settings" >> _settingName >> "_values"); + if ((isNil _settingName) || {(missionNamespace getVariable _settingName) >= (count _settingItemsArray)}) exitWith { + ERROR("bad setting"); ["BAD"] + }; + _settingItemsArray select (missionNamespace getVariable _settingName); +}; if (count _items > 0 && {!([_caller, _items] call FUNC(hasItems))}) exitwith {false}; _return = true; diff --git a/addons/repair/stringtable.xml b/addons/repair/stringtable.xml index de69421fae..8de9b07d90 100644 --- a/addons/repair/stringtable.xml +++ b/addons/repair/stringtable.xml @@ -1,5 +1,4 @@  - @@ -8,8 +7,8 @@ Cadena de repuesto Chenille de réserve Zapasowa gąsienica - Náhradní pásy - Lagarta Reserva + Esteira reserva + Náhradní Pásy Cingolo di scorta Pót lánctalp Запасная гусеница @@ -21,7 +20,7 @@ Roue de secours Zapasowe koło Náhradní Kolo - Roda Reserva + Estepe Ruota di scorta Pótkerék Запасное колесо @@ -32,8 +31,7 @@ Cambiar rueda Changer Roue Wymień koło - Vyměňit kolo - Trocar Roda + Trocar roda Sostituisci la ruota Kerék cseréje Поменять колесо @@ -42,13 +40,17 @@ Replacing Wheel ... Ersetze Reifen ... Wymienianie koła ... + Trocando roda... Замена колеса ... + Měním Kolo ... Wheel replaced Reifen ersetzt Koło zostało wymienione + Roda trocada Колесо заменено + Kolo vyměněno Remove Wheel @@ -57,7 +59,7 @@ Démonter Roue Zdejmij koło Odstranit Kolo - Remover Roda + Remover roda Rimuovi la ruota Kerék leszerelése Снять колесо @@ -66,73 +68,109 @@ Removing Wheel ... Entferne Reifen ... Zdejmowanie koła ... + Removendo roda... Снятие колеса ... + Odstraňuji Kolo ... Wheel removed Reifen entfernt Koło zostało zdjęte + Roda removida Колесо снято + Kolo odstraněno Change Track Wymień gąsienicę + Trocar esteira Заменить гусеницу + Vyměnit Pás Replacing Track ... Wymienianie gąsienicy ... + Trocando esteira... Замена гусеницы ... + Měním Pás ... Track replaced Gąsienica została wymieniona + Esteira trocada Гусеница заменена + Pás vyměněn Remove Track Zdejmij gąsienicę + Remover esteira Снять гусеницу + Odstranit Pás Removing Track ... Zdejmowanie gąsienicy ... + Removendo esteira... Снятие гусеницы ... + Odstraňuji Pás ... Track removed Gąsienica została zdjęta + Esteira trocada Гусеница снята + Pás odstraněn Full Repair Pełna naprawa + Reparo completo Полный ремонт + Kompletní Oprava Repairing Vehicle ... Naprawianie pojazdu ... + Reparando veículo... Ремонт транспорта ... + Opravuji Vozidlo ... Full Repair Locations Lokaliz. pełnej naprawy + Localizações de reparo completo Места полного ремонта + Lokace pro Kompletní Opravu At what locations can a vehicle be fully repaired? W jakich miejscach pojazd może zostać w pełni naprawiony? + Em quais locais um veículo pode ser reparado por completo? В каких местах транспорт может быть полностью отремеонтирован? Allow Full Repair Zezwól na pełną naprawę + Permitir reparo completo Полный ремонт выполняют + Povolit Kompletní Opravu Who can perform a full repair on a vehicle? Kto może przeprowadzić pełną naprawę pojazdu? Кто может выполнять полный ремонт? + Quem pode reparar o veículo por completo? + + + Add Spare Parts + Dodaj części zam. + Adicionar partes sobressalentes + + + Add spare parts to vehicles (requires Cargo component)? + Czy dodać do pojazdów części zamienne? Wymaga włączonego cargo. + Adicionar partes sobressalentes aos veículos (requer o componente de carga)? Repair >> @@ -149,11 +187,14 @@ Display text on repair Wyświetl tekst przy naprawie + Mostrar texto quando reparar Отображать текст при ремонте + Zobrazit text při opravě Display a notification whenever you repair a vehicle Pokaż informację, kiedy wykonujesz czynności związane z naprawą pojazdu. + Mostra uma notificação quando você repara um veículo Отображать оповещение каждый раз, когда вы ремонтируете транспорт @@ -163,7 +204,7 @@ Réparation ... Naprawianie... Opravuji ... - Reparando ... + Reparando... Sto riparando ... javítása ... Ремонтируем ... @@ -175,7 +216,7 @@ Réparation %1 ... Naprawianie %1... Opravuji %1 ... - Reparando %1 ... + Reparando %1... Sto riparando %1 ... %1 javítása ... Ремонтируем %1 ... @@ -196,24 +237,30 @@ Fully repaired part Bauteil vollständig repariert W pełni naprawiono część + Parte totalmente reparada Полностью отремонтированная часть + Kompletně opravená část Partially repaired %1 Bauteil teilweise repariert Częściowo naprawiono: %1 + %1 parcialmente reparado Частично отремонтировано: %1 Fully repaired %1 %1 vollständig repariert W pełni naprawiono: %1 + %1 totalmente reparado Полностью отремонтировано: %1 + Kompletně opraveno %1 Partially repaired %1 %1 teilweise repariert Częściowo naprawiono: %1 + %1 parcialmente reparado Частично отремонтировано: %1 @@ -254,15 +301,22 @@ Left Horizontal Stabilizer + Lewy statecznik poziomy Левый горизонтальный стабилизатор + Estabilizador Horizontal Esquerdo Right Horizontal Stabilizer + Prawy statecznik poziomy Правый горизонтальный стабилизатор + Estabilizador Horizontal Direito Vertical Stabilizer + Vertikální Stabilizátor + Statecznik pionowy Вертикальный стабилизатор + Estabilizador Vertical Fuel Tank @@ -278,31 +332,49 @@ Transmission + Převodovka + Skrzynia biegów Трансмиссия + Transmissão Gear + Podwozie Коробка передач + Engrenagem Starter + Zapłon + Startér Стартер + Arranque Tail + Ogon + Ocas Хвост - - Pilot Tube + + Pitot Tube + Rurka Pitota + Pilotova Trubice Кокпит + Tubo de Pitot Static Port + Port statyczny Статический иллюминатор + Porta Estática Ammo + Munice + Amunicja Боеприпасы + Munição Turret @@ -330,7 +402,10 @@ Missiles + Mísseis Ракеты + Rakety + Rakiety Left Track @@ -339,7 +414,7 @@ Chenille gauche Lewa gąsienica Levý Pás - Lagarta Esquerda + Esteira Esquerda Cingolo sinistro Bal lánctalp Левую гусеницу @@ -351,7 +426,7 @@ Chenille droite Prawa gąsienica Pravý Pás - Lagarta Direita + Esteira Direita Cingolo destro Jobb lánctalp Правую гусеницу @@ -482,7 +557,7 @@ Rotor de cola Rotor anticouple Tylni rotor - Zadní Rotor + Ocasní Rotor Rotor de Cauda Rotore di coda Farokrotor @@ -492,6 +567,7 @@ Winch Seilwinde Wyciągarka + Guincho Лебедка @@ -533,202 +609,303 @@ Repair Settings Ustawienia naprawy + Preferências de reparo Ремонт Provides a repair system for all types of vehicles. Dostarcza rozbudowany system naprawy dla wszystkich typów pojazdów. + Provém um sistema de reparo para todos os veículos Предоставляет систему ремонта для всех типов транспортных средств. Anyone Ktokolwiek + Qualquer um Кто угодно + Kdokoliv Engineer only Tylko mechanicy + Somente engenheiro Только инженеры + Pouze inženýr Repair Specialist only Tylko inżynierowie + Somente especialista em reparos Только ремонтные специалисты + Pouze specialista na opravování Allow Wheel Wymiana kół + Permite rodas Разрешить замену колес + Možnost Výměny Kol Who can remove and replace wheels? Kto może zdejmować i zmieniać koła? + Quem pode remover e trocar rodas? Кто может снимать и заменять колеса? + Kdo může odstranit a vyměnit kola? Allow Repair Możliwość naprawy + Permite reparo Разрешить ремонт + Možnost Opravování Who can perform repair actions? Kto może wykonywać czynności związane z naprawą pojazdów? + Quem pode executar ações de reparo? Кто может выполнять ремонт? + Kdo může provádět opravy? Repair Threshold Próg naprawy + Limite de reparo Лимит ремкомплекта What is the maximum damage that can be repaired with a toolkit? Jaki jest maksymalny poziom uszkodzeń jaki może zostać naprawiony przy pomocy narzędzi? + Qual é o dano máximo que pode ser reparado com um kit de ferramentas? Какой максимальный урон можно починить с помощью ремкомплекта? Repair Threshold (Engineer) Próg naprawy (mechanik) + Limite de reparo (Engenheiro) Лимит инженера What is the maximum damage that can be repaired by an engineer? Jaki jest maksymalny poziom uszkodzeń jaki może zostać naprawiony przez mechanika? + Qual é o dano máximo que pode ser reparado com um engenheiro? Какой максимальный урон может починить инженер? Remove toolkit on use Usuń narzędzia po użyciu + Remover kit de ferramentas Удалять ремкомплект после использования Should the toolkit be removed on usage? Czy zestaw naprawczy powinien zostać usunięty po jego użyciu? + O kit de ferramentas deve ser removido após uso? Следует ли удалять ремкомплект после использования? Anywhere Wszędzie + Qualquer lugar Где угодно + Kdekoliv Repair Vehicle only Przy pojazdach naprawczych + Somente veículos de reparo Только у ремонтного транспорта Repair Facility only Przy budynkach naprawczych + Somente instalação de reparo Только у ремонтных сооружений Repair Facility or Vehicle Przy budynkach i pojazdach naprawczych + Instalação e veículo de reparo Только у ремонтного транспорта или ремонтных сооружений Assign Engineer Przydziel inżyniera + Definir engenheiro Назначить инженером + Přiřadit Inženýra List Lista + Lista Список + Seznam List of unit names that will be classified as engineer, separated by commas. Lista nazw jednostek, które są sklasyfikowane jako inżynierowie, oddzielone przecinkami. + Lista de nomes de unidades que serão classificadas como engenheiros, separadas por vírgulas. Список имен юнитов, которые будут классифицированы как инженеры, разделенный запятыми. Is Engineer Poziom wyszkolenia + É engenheiro Это инженер Select the engineering skill level of the unit Wybierz biegłość w dziedzinie naprawy danej jednostki + Selecione o nível de habilidade da unidade em engenhraria Укажите уровень инженерного мастерства для юнита None Żadny + Nenhum Нет + Nikdo Engineer Mechanik + Engenheiro Инженер + Inženýr Specialist Inżynier + Especialista Специалист + Specialista Assign one or multiple units as an engineer Przydziel klasę inżyniera do jednej lub kilku jednostek + Defina um ou mais unidades como engenheiro Назначить одного или нескольких юнитов инженерами Assign Repair Vehicle Przydziel pojazd naprawczy + Defina veículo de reparo Назначить ремонтный транспорт List Lista + Lista Список + Seznam List of vehicles that will be classified as repair vehicle, separated by commas. Lista nazw pojazdów, które są sklasyfikowane jako pojazdy naprawcze, oddzielone przecinkami. + Lista de veículos que serão classificadas como veículo de reparo. Separado por vígulas. Список транспортных средств, которые будут классифицированы как ремонтные, разделенный запятыми. Is Repair Vehicle Jest poj. naprawczym + É veículo de reparo Это ремонтный транспорт Is the vehicle classified as a repair vehicle? Czy pojazd jest zklasyfikowany jako pojazd naprawczy? + O veículo é classificado como reparo? Классифицируется ли этот транспорт как ремонтный? Assign one or multiple vehicles as a repair vehicle Przydziel klasę pojazdu naprawczego do jednego lub kilku pojazdów. + Definir um ou mais veículos como reparo Назначить одно или несколько транспортных средств ремонтными Assign Repair Facility Przydziel budynek naprawczy + Definir instalação de reparo Назначить ремонтное сооружение List Lista + Lista Список + Seznam List of objects that will be classified as repair Facility, separated by commas. Lista nazw budynków, które są sklasyfikowane jako budynki naprawcze, oddzielone przecinkami. + Lista de objetos que serão classificados como instalações de reparo. separado por vírgulas. Список объектов, которые будут классифицированы как ремонтные, разделенный запятыми. Is Repair Facility Jest bud. naprawczym + É uma instalação de reparo Это ремонтное сооружение Is the object classified as a repair Facility? Czy budynek jest zklasyfikowany jako budynek naprawczy? + O objeto é classificado como instalação de reparo? Классифицируется ли этот объект как ремонтное сооружение? Assign one or multiple objects as a repair Facility Przydziel klasę budynku naprawczego do jednego lub kilku budynków. Назначить один или несколько объектов ремонтными сооружениями + Definir um ou mais objetos como instalação de reparos + + + Add Spare Parts + Dodaj części zam. + Adicionar partes sobressalentes + + + Add spare parts to one or multiple objects + Dodaj części zamienne do jednego lub wielu obiektów. + Adicionar partes sobressalentes para um ou mais objetos + + + List + Lista + Lista + + + List of objects that will get spare parts added, separated by commas. + Lista obiektów, które otrzymają części zamienne, oddzielone przecinkiem. + Lista de objetos que ganharão partes sobressalentes, dividos por vírgulas. + + + Part + Część + Parte + + + Spare part. + Część zamienna. + Parte sobressalente + + + Amount + Ilość + Quantidade + + + Number of selected spare parts. + Ilość wybranych części zamiennych. + Número de partes sobressalentes. + + + Wheel repair requirements + + + Items required to remove/replace wheels diff --git a/addons/respawn/functions/fnc_initRallypoint.sqf b/addons/respawn/functions/fnc_initRallypoint.sqf index 2ef158a419..bb295a1809 100644 --- a/addons/respawn/functions/fnc_initRallypoint.sqf +++ b/addons/respawn/functions/fnc_initRallypoint.sqf @@ -1,15 +1,15 @@ /* Name: ACE_Respawn_fnc_initRallypoint - + Author(s): commy2 - + Description: init code for rally points - + Parameters: 0: OBJECT - rally - + Returns: VOID */ @@ -26,9 +26,9 @@ if (hasInterface) then { // fix init having wrong position, vars etc. [_rallypoint, _respawnMarker, _side, _name] spawn { PARAMS_4(_rallypoint,_respawnMarker,_side,_name); - + private ["_marker", "_type"]; - + _marker = format ["ACE_Marker_%1", _name]; // exit if it already exist @@ -65,5 +65,5 @@ if (isNil _name) then { } else { deleteVehicle _rallypoint; - diag_log text "[ACE] Respawn: ERROR Multiple Rallypoints of same type."; + ACE_LOGERROR("Multiple Rallypoints of same type."); }; diff --git a/addons/respawn/functions/fnc_module.sqf b/addons/respawn/functions/fnc_module.sqf index 3f1ef89a1f..8921c75f54 100644 --- a/addons/respawn/functions/fnc_module.sqf +++ b/addons/respawn/functions/fnc_module.sqf @@ -18,7 +18,7 @@ #include "script_component.hpp" -PARAMS_3(_logic,_units,_activated); +PARAMS_3(_logic,_units,_activated); if !(isServer) exitWith {}; @@ -45,4 +45,4 @@ if (isServer) then { }; }; -diag_log text "[ACE]: Respawn Module Initialized."; +ACE_LOGINFO("Respawn Module Initialized."); diff --git a/addons/respawn/functions/fnc_moduleFriendlyFire.sqf b/addons/respawn/functions/fnc_moduleFriendlyFire.sqf index 7641db806d..2d81372e85 100644 --- a/addons/respawn/functions/fnc_moduleFriendlyFire.sqf +++ b/addons/respawn/functions/fnc_moduleFriendlyFire.sqf @@ -1,17 +1,17 @@ /* Name: ACE_Respawn_fnc_moduleFriendlyFire - + Author(s): commy2 - + Description: initializes the Friendly Fire Messages module - + Parameters: 0: OBJECT - logic 1: ARRAY - synced units 2: BOOLEAN - activated - + Returns: VOID */ @@ -19,7 +19,7 @@ #include "script_component.hpp" _this spawn { - PARAMS_3(_logic,_units,_activated); + PARAMS_3(_logic,_units,_activated); if !(_activated) exitWith {}; @@ -28,5 +28,5 @@ _this spawn { publicVariable QGVAR(showFriendlyFireMessage); }; - diag_log text "[ACE]: Friendly Fire Messages Module Initialized."; + ACE_LOGINFO("Friendly Fire Messages Module Initialized."); }; diff --git a/addons/respawn/functions/fnc_moduleRallypoint.sqf b/addons/respawn/functions/fnc_moduleRallypoint.sqf index 15c415027d..86a83bf061 100644 --- a/addons/respawn/functions/fnc_moduleRallypoint.sqf +++ b/addons/respawn/functions/fnc_moduleRallypoint.sqf @@ -1,17 +1,17 @@ /* Name: ACE_Respawn_fnc_moduleRallypoint - + Author(s): commy2 - + Description: initializes the Rallypoint module - + Parameters: 0: OBJECT - logic 1: ARRAY - synced units 2: BOOLEAN - activated - + Returns: VOID */ @@ -26,4 +26,4 @@ if !(_activated) exitWith {}; _x setVariable ["ACE_canMoveRallypoint", true]; } forEach _units; -diag_log text "[ACE]: Rallypoint Module Initialized."; +ACE_LOGINFO("Rallypoint Module Initialized."); diff --git a/addons/respawn/functions/fnc_restoreGear.sqf b/addons/respawn/functions/fnc_restoreGear.sqf index 7e55c1d8e2..fd3f03d7aa 100644 --- a/addons/respawn/functions/fnc_restoreGear.sqf +++ b/addons/respawn/functions/fnc_restoreGear.sqf @@ -182,15 +182,18 @@ _activeWeapon = _activeWeaponAndMuzzle select 0; _activeMuzzle = _activeWeaponAndMuzzle select 1; _activeWeaponMode = _activeWeaponAndMuzzle select 2; -if (_activeMuzzle != "" and _activeMuzzle != _activeWeapon) then { +if (!(_activeMuzzle isEqualTo "") and + !(_activeMuzzle isEqualTo _activeWeapon) and + (_activeMuzzle in getArray (configfile >> "CfgWeapons" >> _activeWeapon >> "muzzles"))) then { + _unit selectWeapon _activeMuzzle; } else { - if (_activeWeapon != "") then { + if (!(_activeWeapon isEqualTo "")) then { _unit selectWeapon _activeWeapon; }; }; -if (currentWeapon _unit != "") then { +if (!(currentWeapon _unit isEqualTo "")) then { private ["_index"]; _index = 0; while { diff --git a/addons/respawn/stringtable.xml b/addons/respawn/stringtable.xml index 0055860e28..0406b4caa6 100644 --- a/addons/respawn/stringtable.xml +++ b/addons/respawn/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -152,6 +152,7 @@ Respawn-System Systém znovuzrození Sistema de Renascimento + Système de Respawn Respawn-rendszer Возрождение @@ -162,6 +163,7 @@ Ausrüstung speichern? Uložit výbavu? Salvar equipamento? + Sauver l'équipement? Felszerelés elmentése? Сохранять снаряжение? @@ -172,6 +174,7 @@ Mit der Ausrüstung, die ein Soldat vor seinem Tod hatte, respawnen? Znovuubjevit s výbavou kterou měl voják před smrtí? Renascer com o equipamento que um soldado tinha antes de sua morte? + Conserve l'équipement au Respawn Az egység halála előtti felszerelésével való respawnolása? Возрождать солдата с тем же снаряжением, которое было на нем при смерти? @@ -182,6 +185,7 @@ Körper entfernen? Odstranit těla? Remover corpos? + Enlever les coprs? Holttestek eltávolítása? Удалять трупы? @@ -192,6 +196,7 @@ Entferne Spielerkörper nach dem Trennen einer Verbindung? Odstranit hráčova těla po odpojení? Remover corpos dos jogadores depois de desconectar? + Enlève les corps de joueurs après déconnection Játékosi testek eltávolítása távozás után? Удалять трупы игроков после дисконнекта? @@ -201,6 +206,7 @@ Tento modul umožňuje nastavení znovuzrození (spawn). Este módulo permite que você personalize as configurações do renascimento (Spawn). Этот модуль позволяет настроить систему возрождения. + Ce module permet de régler les options de Respawn Friendly Fire Messages @@ -209,6 +215,7 @@ Freundbeschuss-Nachrichten Upozornění na přátelskou střelbu Mensagens de fogo amigo + Message de tirs fraticides Baráti tűz üzenetek Сообщения об огне по своим @@ -217,6 +224,7 @@ Zobrazí zprávu v chatu v případě, když budete střílet na vlastní jednotky. Ve zprávě se zobrazí kdo na koho střílel, popř. kdo koho zabil. Usando este módulo em uma missão para exibir mensagens chat, no caso de quando você faz um fogo amigo - então a mensagem será exibida mostrando quem matou quem. Отображает сообщение в чате, в случае, когда убивают союзных игроков. В докладе указывается, кто стрелял, в кого. Кто кого убил. + Ce module permet l'affiche de message dans le chat lors d'un tir fraticide et indique qui a tué qui. Rallypoint System @@ -225,6 +233,7 @@ Rallypoint-System Systém shromáždění Sistema de ponto de encontro + Système de point de ralliement Gyülekezőpont-rendszer Система точек сбора @@ -241,6 +250,7 @@ Bewege Rallypoint Přesun na shromaždiště Mover para ponto de encontro + Bouger le point de ralliement Gyülekezőpont mozgatása Двигать точку сбора @@ -251,6 +261,7 @@ ACE-Respawn ACE Znovuzrození ACE Respawn + ACE Respawn ACE Respawn ACE Возрождение diff --git a/addons/scopes/XEH_postInit.sqf b/addons/scopes/XEH_postInit.sqf index e96ac43960..1f56aecefb 100644 --- a/addons/scopes/XEH_postInit.sqf +++ b/addons/scopes/XEH_postInit.sqf @@ -7,7 +7,7 @@ */ #include "script_component.hpp" -if !(hasInterface) exitWith {}; +if (!hasInterface) exitWith {}; // Check inventory when it changes ["playerInventoryChanged", { diff --git a/addons/sitting/CfgMoves.hpp b/addons/sitting/CfgMoves.hpp index fc902032e2..f203203ed0 100644 --- a/addons/sitting/CfgMoves.hpp +++ b/addons/sitting/CfgMoves.hpp @@ -1,6 +1,9 @@ -// Enable visual head movement while free-looking +// Force free-look, prevent body rotating and leaning #define MACRO_ANIMATION \ - head = "headDefault"; + head = "headDefault"; \ + aimingBody = "aimingNo"; \ + forceAim = 1; \ + static = 1; class CfgMovesBasic; class CfgMovesMaleSdr: CfgMovesBasic { diff --git a/addons/sitting/XEH_clientInit.sqf b/addons/sitting/XEH_clientInit.sqf index 1e477cd952..9cf8278877 100644 --- a/addons/sitting/XEH_clientInit.sqf +++ b/addons/sitting/XEH_clientInit.sqf @@ -1,7 +1,7 @@ #include "script_component.hpp" // Exit on Headless -if !(hasInterface) exitWith {}; +if (!hasInterface) exitWith {}; // Add interaction menu exception ["isNotSitting", {!((_this select 0) getVariable [QGVAR(isSitting), false])}] call EFUNC(common,addCanInteractWithCondition); diff --git a/addons/sitting/XEH_preInit.sqf b/addons/sitting/XEH_preInit.sqf index 1649aaba2b..86912ada6b 100644 --- a/addons/sitting/XEH_preInit.sqf +++ b/addons/sitting/XEH_preInit.sqf @@ -6,7 +6,6 @@ PREP(canSit); PREP(canStand); PREP(getRandomAnimation); PREP(handleInterrupt); -PREP(hasChairMoved); PREP(moduleInit); PREP(sit); PREP(stand); diff --git a/addons/sitting/functions/fnc_hasChairMoved.sqf b/addons/sitting/functions/fnc_hasChairMoved.sqf deleted file mode 100644 index de3a38e0ce..0000000000 --- a/addons/sitting/functions/fnc_hasChairMoved.sqf +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Author: Jonpas - * Checks if chair moved from original position. - * - * Arguments: - * 0: Seat - * 1: Seat Position - * - * Return Value: - * None - * - * Example: - * [seat, seatPos] call ace_sitting_fnc_hasChairMoved - * - * Public: No - */ -#include "script_component.hpp" - -params ["_seat", "_seatPosOrig"]; - -TRACE_2("Chair position",_seatPosOrig,getPosASL _seat); - -(getPosASL _seat) params ["_seatX", "_seatY", "_seatZ"]; -_seatPosOrig params ["_seatOrigX", "_seatOrigY", "_seatOrigZ"]; - -// Check each coordinate due to possibility of tiny movements in simulation -if (abs (_seatX - _seatOrigX) > 0.01) exitWith {true}; -if (abs (_seatY - _seatOrigY) > 0.01) exitWith {true}; -if (abs (_seatZ - _seatOrigZ) > 0.01) exitWith {true}; -false diff --git a/addons/sitting/functions/fnc_moduleInit.sqf b/addons/sitting/functions/fnc_moduleInit.sqf index ae476317db..c21d92afbb 100644 --- a/addons/sitting/functions/fnc_moduleInit.sqf +++ b/addons/sitting/functions/fnc_moduleInit.sqf @@ -22,4 +22,4 @@ if (!_activated) exitWith {}; [_logic, QGVAR(enable), "enable"] call EFUNC(common,readSettingFromModule); -diag_log text "[ACE]: Sitting Module Initialized."; +ACE_LOGINFO("Sitting Module Initialized."); diff --git a/addons/sitting/functions/fnc_sit.sqf b/addons/sitting/functions/fnc_sit.sqf index 0c6825ed58..5e9c36947e 100644 --- a/addons/sitting/functions/fnc_sit.sqf +++ b/addons/sitting/functions/fnc_sit.sqf @@ -16,7 +16,7 @@ */ #include "script_component.hpp" -private ["_configFile", "_sitDirection", "_sitPosition", "_sitRotation", "_sitDirectionVisual"]; +private ["_actionID", "_configFile", "_sitDirection", "_sitPosition", "_sitRotation", "_seatPosOrig"]; params ["_seat", "_player"]; @@ -26,6 +26,26 @@ GVAR(seat) = _seat; // Overwrite weird position, because Arma decides to set it differently based on current animation/stance... _player switchMove "amovpknlmstpsraswrfldnon"; +// Add scroll-wheel action to release object +_actionID = _player getVariable [QGVAR(StandUpActionID), -1]; + +if (_actionID != -1) then { + _player removeAction _actionID; +}; + +_actionID = _player addAction [ + format ["%1", localize LSTRING(Stand)], + QUOTE((_this select 0) call FUNC(stand)), + nil, + 20, + false, + true, + "GetOut", + QUOTE(_this call FUNC(canStand)) +]; + +_player setVariable [QGVAR(StandUpActionID), _actionID]; + // Read config _configFile = configFile >> "CfgVehicles" >> typeOf _seat; _sitDirection = (getDir _seat) + getNumber (_configFile >> QGVAR(sitDirection)); @@ -45,30 +65,22 @@ _player setPos (_seat modelToWorld _sitPosition); _player setVariable [QGVAR(isSitting), true]; _seat setVariable [QGVAR(seatOccupied), true, true]; // To prevent multiple people sitting on one seat -// Add rotation control PFH -_sitDirectionVisual = getDirVisual _player; // Needed for precision and issues with using above directly + +// Add automatical stand PFH in case of interruptions _seatPosOrig = getPosASL _seat; [{ params ["_args", "_pfhId"]; - _args params ["_player", "_sitDirectionVisual", "_sitRotation", "_seat", "_seatPosOrig"]; + _args params ["_player", "_seat", "_seatPosOrig"]; // Remove PFH if not sitting any more if !(_player getVariable [QGVAR(isSitting), false]) exitWith { - [_pfhId] call cba_fnc_removePerFrameHandler; + [_pfhId] call CBA_fnc_removePerFrameHandler; TRACE_1("Remove PFH",_player getVariable [ARR_2(QGVAR(isSitting), false)]); }; - // Stand up if chair moves - if ([_seat, _seatPosOrig] call FUNC(hasChairMoved)) exitWith { + // Stand up if chair gets deleted or moved + if (isNull _seat || !((getPosASL _seat) isEqualTo _seatPosOrig)) exitWith { _player call FUNC(stand); TRACE_2("Chair moved",getPosASL _seat,_seatPosOrig); }; - - // Set direction to boundary when passing it - if (getDir _player > _sitDirectionVisual + _sitRotation) exitWith { - _player setDir (_sitDirectionVisual + _sitRotation); - }; - if (getDir _player < _sitDirectionVisual - _sitRotation) exitWith { - _player setDir (_sitDirectionVisual - _sitRotation); - }; -}, 0, [_player, _sitDirectionVisual, _sitRotation, _seat, _seatPosOrig]] call CBA_fnc_addPerFrameHandler; +}, 0, [_player, _seat, _seatPosOrig]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/sitting/functions/fnc_stand.sqf b/addons/sitting/functions/fnc_stand.sqf index 978bcaf279..ef19d5f586 100644 --- a/addons/sitting/functions/fnc_stand.sqf +++ b/addons/sitting/functions/fnc_stand.sqf @@ -17,8 +17,19 @@ params ["_player"]; +// remove scroll wheel action +_player removeAction (_player getVariable [QGVAR(StandUpActionID), -1]); + // Restore animation -[_player, "", 2] call EFUNC(common,doAnimation); +private "_animation"; +_animation = switch (currentWeapon _player) do { + case "": {"amovpercmstpsnonwnondnon"}; + case (primaryWeapon _player): {"amovpercmstpslowwrfldnon"}; + case (handgunWeapon _player): {"amovpercmstpslowwpstdnon"}; + default {"amovpercmstpsnonwnondnon"}; +}; + +[_player, _animation, 2] call EFUNC(common,doAnimation); // Set variables to nil _player setVariable [QGVAR(isSitting), nil]; diff --git a/addons/sitting/stringtable.xml b/addons/sitting/stringtable.xml index 9cb2882320..b8716f49e5 100644 --- a/addons/sitting/stringtable.xml +++ b/addons/sitting/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -7,6 +7,7 @@ Sentar Sednout si Sentarse + S'assoir Leülés Сесть @@ -16,6 +17,7 @@ Levantar Vstát Levantarse + Se lever Felállás Встать @@ -25,6 +27,7 @@ Aktywuj siadanie Povolit sezení Acivar asiento + Permettre de s'assoir Ülés engedélyezése Разрешить сидение @@ -32,8 +35,9 @@ Sitting Sentado Siadanie - Sedící + Sezení Sentarse + S'assoir Ülés Сидение @@ -43,8 +47,9 @@ Moduł ten pozwala na włączenie lub wyłączenie możliwości siadania na krzesłach i toaletach. Tento modul dovoluje zakázat možnost sedět na židlých a toaletách. Este módulo te permite desactivar la capacidad de sentarte en sillas y aseos. + Ce module controle la capacité de s'assoir sur des chaises ou sur des toilettes Ez a modul lehetővé teszi a székekre és toalettekre való leülés letiltását. Этот модуль позволяет вам запретить возможность садиться на стулья и туалеты. - \ No newline at end of file + diff --git a/addons/slideshow/functions/fnc_addSlideActions.sqf b/addons/slideshow/functions/fnc_addSlideActions.sqf index 1ebba306b4..a18249a4f8 100644 --- a/addons/slideshow/functions/fnc_addSlideActions.sqf +++ b/addons/slideshow/functions/fnc_addSlideActions.sqf @@ -20,7 +20,6 @@ #include "script_component.hpp" private "_actions"; - params ["_objects", "_images", "_names", "_controller", "_currentSlideshow"]; _actions = []; diff --git a/addons/slideshow/functions/fnc_autoTransition.sqf b/addons/slideshow/functions/fnc_autoTransition.sqf index c8b03a707a..4c31c4ff6a 100644 --- a/addons/slideshow/functions/fnc_autoTransition.sqf +++ b/addons/slideshow/functions/fnc_autoTransition.sqf @@ -19,7 +19,6 @@ #include "script_component.hpp" private "_currentSlide"; - params ["_objects", "_images", "_varString", "_duration"]; // Get current slide number of this slideshow diff --git a/addons/slideshow/functions/fnc_createSlideshow.sqf b/addons/slideshow/functions/fnc_createSlideshow.sqf index 665b954496..bed2a2ae7f 100644 --- a/addons/slideshow/functions/fnc_createSlideshow.sqf +++ b/addons/slideshow/functions/fnc_createSlideshow.sqf @@ -19,13 +19,12 @@ */ #include "script_component.hpp" -private ["_currentSlideshow", "_actionsObject", "_actionsClass", "_mainAction", "_slidesAction", "_varString"]; - +private ["_currentSlideshow", "_slidesAction", "_varString"]; params ["_objects", "_controllers", "_images", "_names", "_duration"]; // Verify data if (count _images != count _names || {count _images == 0} || {count _names == 0}) exitWith { - diag_log "[ACE] ERROR: Slideshow Images or Names fields can NOT be empty and must have equal number of items!" + ACE_LOGERROR("Slideshow Images or Names fields can NOT be empty and must have equal number of items!"); }; // Objects synced to the module @@ -56,7 +55,7 @@ _currentSlideshow = GVAR(slideshows); // Local variable in case GVAR gets change // If interaction menu module is not present, set default duration value if !(["ace_interact_menu"] call EFUNC(common,isModLoaded)) then { _duration = 5; - diag_log text format ["[ACE]: Slideshow: Interaction Menu module not present, defaulting duration value to %1", _duration]; + ACE_LOGINFO_1("Interaction Menu module not present, defaulting duration value to %1",_duration); }; // Add interactions if automatic transitions are disabled, else setup automatic transitions diff --git a/addons/slideshow/functions/fnc_makeList.sqf b/addons/slideshow/functions/fnc_makeList.sqf index 6736fabbdb..e550e462a7 100644 --- a/addons/slideshow/functions/fnc_makeList.sqf +++ b/addons/slideshow/functions/fnc_makeList.sqf @@ -17,9 +17,8 @@ */ #include "script_component.hpp" -params ["_list", "_trimWhitespace", "_checkNil"]; - private ["_splittedList", "_listTrimmedWhitespace", "_nilCheckPassedList"]; +params ["_list", "_trimWhitespace", "_checkNil"]; // Split using comma delimiter _splittedList = [_list, ","] call BIS_fnc_splitString; diff --git a/addons/slideshow/functions/fnc_moduleInit.sqf b/addons/slideshow/functions/fnc_moduleInit.sqf index da1724dfcc..7da64cd3cc 100644 --- a/addons/slideshow/functions/fnc_moduleInit.sqf +++ b/addons/slideshow/functions/fnc_moduleInit.sqf @@ -18,7 +18,6 @@ if (!hasInterface && !isDedicated) exitWith {}; private ["_objects", "_controllers", "_images", "_names", "_duration"]; - params [["_logic", objNull, [objNull]], "_units", "_activated"]; if !(_activated) exitWith {}; @@ -34,4 +33,4 @@ _duration = _logic getVariable ["Duration", 0]; // Prepare with actions [_objects, _controllers, _images, _names, _duration] call FUNC(createSlideshow); -diag_log text format ["[ACE]: Slideshow Module Initialized for: %1 with Duration: %2", _objects, _duration]; +ACE_LOGINFO_2("Slideshow Module Initialized for: %1 with Duration: %2", _objects, _duration); diff --git a/addons/slideshow/stringtable.xml b/addons/slideshow/stringtable.xml index fe076ecc9a..63363d34e0 100644 --- a/addons/slideshow/stringtable.xml +++ b/addons/slideshow/stringtable.xml @@ -1,15 +1,18 @@ - + Slideshow + Diaporama Pokaz slajdów Vetítés Apresentação de Slides Слайд-шоу + Prezentace This module allows you to set up slide-shows on different objects. One module per image list. Only objects with hiddenSelection 0 are supported. + Ce module permet d'afficher des diaporamas sur différents objets. Un module par liste d'image. Seul les objets avec le paramètre "HiddenSelection 0" sont supportés Ten moduł pozwala skonfigurować pokaz slajdów na różnych obiektach. Jeden moduł na jedną liste slajdów. Tylko obiekty z hiddenSelection 0 są wspierane. Ez a modul lehetővé teszi a különböző objektumokon való vetítést. Egy modul/képlista. Csak "hiddenSelection 0"-t tartalmazó objektumok felelnek meg. Este módulo permite que você monte apresentações de slides em diferentes objetos. Um módulo por lista de imagem. Somente objetos com hiddenSelection 0 são suportados. @@ -17,13 +20,16 @@ Objects + Objets Obiekty Objektumok Objetos Объекты + Objekty Object names (can also be synchronized objects) slide-show will be displayed on, separated by commas if multiple. Reference INFO for object support. + 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. @@ -31,6 +37,7 @@ Controllers + Controleurs Kontroler Vezérlők Controles @@ -38,6 +45,7 @@ Controller object names, separated by commas if multiple. + Noms de controleur d'objets, séparation par virgule si plusieurs Nazwa obiektu - kontrolera, oddzielona przecinkami jeżeli jest ich więcej niż 1. Vezérlő objektum nevek, vesszővel elválasztva több darab esetén. Nome dos objetos de controle, separado por vírgula se mais de um. @@ -45,13 +53,16 @@ Images + Images Obrazy Képek Imagens Изображения + Obrázky List of images that will be used for the slide-show, separated by commas, with full path correctly formatted (eg. images\image.paa). + Liste d'images qui seront utilisées dans des diaporama, séparation par virgule, avec le chemin d'accès complet et formaté correctement (ie. images\image.paa) Lista obrazów, które zostaną użyte do pokazu slajdów, oddzielone przecinkiem, z poprawnym pełnym formatem ścieżki do obrazka (np. slajdy\obrazek.paa). A képek listája amit a vetítés használni fog, vesszővel elválasztva, megfelelően formázott teljes útvonallal (pl. képek\kép.paa) Lista das imagens que serão utilizadas na apresentação de slides, separadas por vírgula, com o caminho completo corretamente formatado (ex: imagens\imagem.paa). @@ -59,13 +70,16 @@ Interaction Names + Noms d'interaction Nazwy interakcji Interakciós nevek Nomes de Interação Интерактивные имена + Názvy Interakcí List of names that will be used for interaction entries, separated by commas, in order of images. + Liste de nom qui seront utilisés pour des interactions, séparation par virgule, dans l'ordre des images Lista nazw, które zostaną użyte do nazwania wpisów interakcji, oddzielone przecinkiem, w kolejności obrazów. Olyan nevek listája, melyek interakciós célra kellenek, vesszővel elválasztva, kép szerinti sorrendben. Lista dos nomes que serão usados para entradas de interação, separados por vírgulas, na ordem das imagens. @@ -73,6 +87,7 @@ Slide Duration + Durée d'une diapositive Czas trwania slajdów Dia időtartam Duração do Slide @@ -80,6 +95,7 @@ Duration of each slide. Default: 0 (Automatic Transitions Disabled) + Durée de chaque diapositive. Dafaut: 0 (transition automatique désactivée) Czas trwania poszczególnych slajdów. Domyślnie: 0 (Automatyczne przejścia wyłączone) A diák időtartama. Alapértelmezett: 0 (Automatikus váltás letiltva) Duração de cada slide. Padrão: 0 (Transição automática desabilitada) @@ -87,10 +103,11 @@ Slides + Diapositives Slajdy Diák Slides Слайды - \ No newline at end of file + diff --git a/addons/spectator/XEH_preInit.sqf b/addons/spectator/XEH_preInit.sqf index d1bf48d106..e26dc27d07 100644 --- a/addons/spectator/XEH_preInit.sqf +++ b/addons/spectator/XEH_preInit.sqf @@ -31,6 +31,7 @@ GVAR(availableSides) = [west,east,resistance,civilian]; GVAR(availableVisions) = [-2,-1,0,1]; GVAR(camAgent) = objNull; +GVAR(camDistance) = 10; GVAR(camMode) = 0; GVAR(camPan) = 0; GVAR(camPos) = ATLtoASL [worldSize * 0.5, worldSize * 0.5, 20]; diff --git a/addons/spectator/functions/fnc_handleCamera.sqf b/addons/spectator/functions/fnc_handleCamera.sqf index db196c8504..f07ac6da47 100644 --- a/addons/spectator/functions/fnc_handleCamera.sqf +++ b/addons/spectator/functions/fnc_handleCamera.sqf @@ -20,29 +20,56 @@ // Kill PFH when not in free cam (or display is closed) if (isNil QGVAR(camHandler)) exitWith { [_this select 1] call CBA_fnc_removePerFrameHandler; }; -private ["_camera","_oldPos","_altMod","_zoomMod","_mX","_mY","_mZ","_pan","_x","_y","_z"]; - -_camera = GVAR(camera); -_oldPos = getPosASL _camera; - -// Dolly/Boom amount should be influnced by zoom level (it should really be exponential) -// Dollying should also slow as the camera gets close to the ground -_zoomMod = (GVAR(camZoom) * 0.8) max 1; -_altMod = ((((getPos _camera) select 2) * 0.05) max 0.1) min 1; - -_mX = (GVAR(camDolly) select 0) * _altMod / _zoomMod; -_mY = (GVAR(camDolly) select 1) * _altMod / _zoomMod; -_mZ = GVAR(camBoom) / _zoomMod; +private ["_camera","_pan","_tilt"]; _pan = (GVAR(camPan) + 360) % 360; -_x = (_oldPos select 0) + (_mX * cos(_pan)) + (_mY * sin(_pan)); -_y = (_oldPos select 1) - (_mX * sin(_pan)) + (_mY * cos(_pan)); -_z = (_oldPos select 2) + _mZ; +_tilt = GVAR(camTilt); -// Prevent camera going under terrain -GVAR(camPos) = [_x,_y,_z max (getTerrainHeightASL [_x,_y])]; +if (GVAR(camMode) == 0) then { + private ["_oldPos","_altMod","_zoomMod","_mX","_mY","_mZ","_x","_y","_z"]; + _camera = GVAR(freeCamera); + _oldPos = GVAR(camPos); -// Update camera position and rotation -_camera setPosASL GVAR(camPos); -_camera setDir GVAR(camPan); -[_camera, GVAR(camTilt), 0] call BIS_fnc_setPitchBank; + // Dolly/Boom amount should be influnced by zoom level (it should really be exponential) + // Dollying should also slow as the camera gets close to the ground + _zoomMod = (GVAR(camZoom) * 0.8) max 1; + _altMod = ((((getPos _camera) select 2) * 0.05) max 0.1) min 1; + + _mX = (GVAR(camDolly) select 0) * _altMod / _zoomMod; + _mY = (GVAR(camDolly) select 1) * _altMod / _zoomMod; + _mZ = GVAR(camBoom) / _zoomMod; + + _x = (_oldPos select 0) + (_mX * cos(_pan)) + (_mY * sin(_pan)); + _y = (_oldPos select 1) - (_mX * sin(_pan)) + (_mY * cos(_pan)); + _z = (_oldPos select 2) + _mZ; + + // Prevent camera going under terrain + GVAR(camPos) = [_x,_y,_z max (getTerrainHeightASL [_x,_y])]; + + // Update camera position and rotation + _camera setPosASL GVAR(camPos); + _camera setDir _pan; + [_camera, _tilt, 0] call BIS_fnc_setPitchBank; +} else { + private ["_unit","_target","_distance","_vector"]; + _camera = GVAR(unitCamera); + + _unit = GVAR(camUnit); + _target = GVAR(targetCamera); + _distance = GVAR(camDistance); + + // Generate a position vector relative to the unit + _vector = [0,-_distance*cos(_tilt),0]; + _vector = [_vector,[-_pan] call CBA_fnc_simplifyAngle180] call BIS_fnc_rotateVector2D; + _vector = _vector vectorAdd [0,0,_distance*sin(-_tilt)]; + + // Update the position of the target camera (used for smooth unit tracking) + _target camSetPos ((_unit modelToWorldVisual [0,0,0]) vectorAdd [0,0,1.5]); + _target camCommit 0; + + // Update the relative position of the unit camera + _camera camSetRelPos _vector; + _camera camCommit 0; + + GVAR(camPos) = getPosASL _camera; +}; diff --git a/addons/spectator/functions/fnc_handleIcons.sqf b/addons/spectator/functions/fnc_handleIcons.sqf index 72c0d7dee6..d1f83690ff 100644 --- a/addons/spectator/functions/fnc_handleIcons.sqf +++ b/addons/spectator/functions/fnc_handleIcons.sqf @@ -21,7 +21,7 @@ if !(GVAR(showIcons)) exitWith {}; private ["_refPoint","_drawVehicles","_leader","_color","_txt","_unit"]; // Draw groups unless leader is within distance -_refPoint = [GVAR(camera),GVAR(camUnit)] select (GVAR(camMode) > 0); +_refPoint = [GVAR(freeCamera),GVAR(camUnit)] select (GVAR(camMode) > 0); _drawVehicles = []; { _leader = leader _x; diff --git a/addons/spectator/functions/fnc_handleInterface.sqf b/addons/spectator/functions/fnc_handleInterface.sqf index 93c6ca3ddd..7c961071c3 100644 --- a/addons/spectator/functions/fnc_handleInterface.sqf +++ b/addons/spectator/functions/fnc_handleInterface.sqf @@ -149,11 +149,16 @@ switch (toLower _mode) do { case "onmousezchanged": { _args params ["_ctrl","_zChange"]; - // Scroll to change speed, modifier for zoom - if (GVAR(ctrlKey)) then { - [nil,nil,nil,nil,nil,nil,nil, GVAR(camSpeed) + _zChange * 0.2] call FUNC(setCameraAttributes); + // Scroll to modify distance value in third person + if (GVAR(camMode) == 0) then { + // Scroll to change speed, modifier for zoom + if (GVAR(ctrlKey)) then { + [nil,nil,nil,nil,nil,nil,nil, GVAR(camSpeed) + _zChange * 0.2] call FUNC(setCameraAttributes); + } else { + [nil,nil,nil,nil,nil,nil, GVAR(camZoom) + _zChange * 0.1] call FUNC(setCameraAttributes); + }; } else { - [nil,nil,nil,nil,nil,nil, GVAR(camZoom) + _zChange * 0.1] call FUNC(setCameraAttributes); + GVAR(camDistance) = ((GVAR(camDistance) - _zChange * 2) max 5) min 50; }; }; case "onmousemoving": { diff --git a/addons/spectator/functions/fnc_handleMap.sqf b/addons/spectator/functions/fnc_handleMap.sqf index 4eeb5fd7e1..fd084f9967 100644 --- a/addons/spectator/functions/fnc_handleMap.sqf +++ b/addons/spectator/functions/fnc_handleMap.sqf @@ -21,7 +21,7 @@ params ["_map"]; private ["_cachedVehicles","_unit","_color","_icon","_txt"]; if (GVAR(camMode) == 0) then { - _map drawIcon ["\A3\UI_F\Data\GUI\Rsc\RscDisplayMissionEditor\iconcamera_ca.paa",[0,0,0,1],GVAR(camera),20,20,GVAR(camPan)]; + _map drawIcon ["\A3\UI_F\Data\GUI\Rsc\RscDisplayMissionEditor\iconcamera_ca.paa",[0,0,0,1],GVAR(freeCamera),20,20,GVAR(camPan)]; }; _cachedVehicles = []; diff --git a/addons/spectator/functions/fnc_respawnTemplate.sqf b/addons/spectator/functions/fnc_respawnTemplate.sqf index b808c43eab..d903e3ecc4 100644 --- a/addons/spectator/functions/fnc_respawnTemplate.sqf +++ b/addons/spectator/functions/fnc_respawnTemplate.sqf @@ -21,15 +21,17 @@ params [["_unit",objNull,[objNull]], ["_killer",objNull,[objNull]], ["_respawn",0,[0]], ["_respawnDelay",0,[0]]]; private ["_vision","_pos"]; -// End mission when all are dead with respawn type "None" +// When all are dead with respawn type "None" the mission should end if ((_respawn == 0) && {{alive _x} count allPlayers <= 0}) exitWith { [["endDeath",false],"BIS_fnc_endMission"] call EFUNC(common,execRemoteFnc); }; +// Some environment information can be used for the initial camera attributes if (isNull _killer) then {_killer = _unit}; _vision = [-2,-1] select (sunOrMoon < 1); _pos = (getPosATL _unit) vectorAdd [0,0,5]; +// Enter/exit spectator based on the respawn type and whether killed/respawned if (alive _unit) then { if (_respawn == 1) then { [_unit,QGVAR(isSeagull)] call EFUNC(common,hideUnit); @@ -39,6 +41,9 @@ if (alive _unit) then { [false] call FUNC(setSpectator); }; } else { + // Negligible respawn delay can result in entering spectator after respawn + if (playerRespawnTime <= 1) exitWith {}; + [2,_killer,_vision,_pos,getDir _unit] call FUNC(setCameraAttributes); [true] call FUNC(setSpectator); }; diff --git a/addons/spectator/functions/fnc_setCameraAttributes.sqf b/addons/spectator/functions/fnc_setCameraAttributes.sqf index 8eb6fe51ac..dd8dd3ef6a 100644 --- a/addons/spectator/functions/fnc_setCameraAttributes.sqf +++ b/addons/spectator/functions/fnc_setCameraAttributes.sqf @@ -58,10 +58,10 @@ GVAR(camVision) = _vision; GVAR(camZoom) = (_zoom min 2) max 0.01; // Apply if camera exists -if (isNil QGVAR(camera)) then { +if (GVAR(isSet)) then { + GVAR(freeCamera) setPosATL _position; + [_mode,_unit,_vision] call FUNC(transitionCamera); +} else { GVAR(camMode) = _mode; GVAR(camPos) = (ATLtoASL _position); -} else { - [_mode,_unit,_vision] call FUNC(transitionCamera); - GVAR(camera) setPosATL _position; }; diff --git a/addons/spectator/functions/fnc_setSpectator.sqf b/addons/spectator/functions/fnc_setSpectator.sqf index 621100a5ba..f94d9d9f68 100644 --- a/addons/spectator/functions/fnc_setSpectator.sqf +++ b/addons/spectator/functions/fnc_setSpectator.sqf @@ -23,7 +23,7 @@ params [["_set",true,[true]]]; // Only clients can be spectators -if !(hasInterface) exitWith {}; +if (!hasInterface) exitWith {}; // Exit if no change if (_set isEqualTo GVAR(isSet)) exitwith {}; @@ -50,8 +50,14 @@ if (_set) then { // Update units before opening to support pre-set camera unit [] call FUNC(updateUnits); - // Initalize the camera view - GVAR(camera) = "Camera" camCreate (ASLtoATL GVAR(camPos)); + // Initalize the camera objects + GVAR(freeCamera) = "Camera" camCreate (ASLtoATL GVAR(camPos)); + GVAR(unitCamera) = "Camera" camCreate [0,0,0]; + GVAR(targetCamera) = "Camera" camCreate [0,0,0]; + + // Initalize view + GVAR(unitCamera) camSetTarget GVAR(targetCamera); + GVAR(unitCamera) camCommit 0; [] call FUNC(transitionCamera); // Close map and clear radio @@ -85,8 +91,10 @@ if (_set) then { (findDisplay 12249) closeDisplay 0; // Terminate camera - GVAR(camera) cameraEffect ["terminate", "back"]; - camDestroy GVAR(camera); + GVAR(freeCamera) cameraEffect ["terminate", "back"]; + camDestroy GVAR(freeCamera); + camDestroy GVAR(unitCamera); + camDestroy GVAR(targetCamera); clearRadio; @@ -97,10 +105,12 @@ if (_set) then { BIS_fnc_feedback_allowPP = true; // Cleanup camera variables - GVAR(camera) = nil; GVAR(camBoom) = nil; GVAR(camDolly) = nil; GVAR(camGun) = nil; + GVAR(freeCamera) = nil; + GVAR(unitCamera) = nil; + GVAR(targetCamera) = nil; // Cleanup display variables GVAR(ctrlKey) = nil; diff --git a/addons/spectator/functions/fnc_toggleInterface.sqf b/addons/spectator/functions/fnc_toggleInterface.sqf index 4a03de4271..31472702fc 100644 --- a/addons/spectator/functions/fnc_toggleInterface.sqf +++ b/addons/spectator/functions/fnc_toggleInterface.sqf @@ -43,7 +43,7 @@ if (GVAR(showMap)) then { // Centre map on camera/unit upon opening if (_toggleMap) then { - _map ctrlMapAnimAdd [0, 0.5, [GVAR(camUnit),GVAR(camera)] select (GVAR(camMode) == 0)]; + _map ctrlMapAnimAdd [0, 0.5, [GVAR(camUnit),GVAR(freeCamera)] select (GVAR(camMode) == 0)]; ctrlMapAnimCommit _map; }; } else { diff --git a/addons/spectator/functions/fnc_transitionCamera.sqf b/addons/spectator/functions/fnc_transitionCamera.sqf index 72cb9f1a45..edc7fa23a2 100644 --- a/addons/spectator/functions/fnc_transitionCamera.sqf +++ b/addons/spectator/functions/fnc_transitionCamera.sqf @@ -43,15 +43,17 @@ if (_newMode != 1) then { GVAR(camGun) = false; }; +private ["_camera"]; if (_newMode == 0) then { // Free + _camera = GVAR(freeCamera); + // Preserve camUnit value for consistency when manually changing view - GVAR(camera) cameraEffect ["internal", "back"]; + _camera cameraEffect ["internal", "back"]; showCinemaBorder false; - cameraEffectEnableHUD true; // Apply the camera zoom - GVAR(camera) camSetFov -(linearConversion [0.01,2,GVAR(camZoom),-2,-0.01,true]); - GVAR(camera) camCommit 0; + _camera camSetFov -(linearConversion [0.01,2,GVAR(camZoom),-2,-0.01,true]); + _camera camCommit 0; // Agent is switched to in free cam to hide death table and prevent AI chat while allowing icons to draw (also prevents systemChat and unit HUD) // (Why is so much stuff tied into the current camera unit BI?!) @@ -79,20 +81,32 @@ if (_newMode == 0) then { // Free // Handle camera movement if (isNil QGVAR(camHandler)) then { GVAR(camHandler) = [FUNC(handleCamera), 0] call CBA_fnc_addPerFrameHandler; }; } else { + _camera = GVAR(unitCamera); + // When null unit is given choose random if (isNull _newUnit) then { _newUnit = GVAR(unitList) select floor(random(count GVAR(unitList))); }; - if (_newMode == 1) then { // Internal - // Handle gun cam - if (GVAR(camGun)) then { - _newUnit switchCamera "gunner"; - } else { - _newUnit switchCamera "internal"; - }; - } else { // External - _newUnit switchCamera "external"; + // Switch camera view to internal unit view (external uses the camera) + if (GVAR(camGun)) then { + _newUnit switchCamera "gunner"; + } else { + _newUnit switchCamera "internal"; + }; + + // Handle camera differently for internal/external view + if (_newMode == 1) then { + // Terminate camera view + _camera cameraEffect ["terminate", "back"]; + GVAR(camHandler) = nil; + } else { + // Switch to the camera + _camera cameraEffect ["internal", "back"]; + showCinemaBorder false; + + // Handle camera orbit movement + if (isNil QGVAR(camHandler)) then { GVAR(camHandler) = [FUNC(handleCamera), 0] call CBA_fnc_addPerFrameHandler; }; }; // Clear radio if group changed @@ -101,11 +115,6 @@ if (_newMode == 0) then { // Free }; GVAR(camUnit) = _newUnit; - - // Terminate camera view - GVAR(camera) cameraEffect ["terminate", "back"]; - GVAR(camHandler) = nil; - cameraEffectEnableHUD true; }; GVAR(camMode) = _newMode; diff --git a/addons/spectator/functions/fnc_updateCameraModes.sqf b/addons/spectator/functions/fnc_updateCameraModes.sqf index aef51b56c6..de1611823b 100644 --- a/addons/spectator/functions/fnc_updateCameraModes.sqf +++ b/addons/spectator/functions/fnc_updateCameraModes.sqf @@ -41,7 +41,7 @@ if (_newModes isEqualTo []) then { }; // Update camera in case of change -if !(isNil QGVAR(camera)) then { +if (GVAR(isSet)) then { [] call FUNC(transitionCamera); }; diff --git a/addons/spectator/functions/fnc_updateUnits.sqf b/addons/spectator/functions/fnc_updateUnits.sqf index 50494cf499..0297b31b8d 100644 --- a/addons/spectator/functions/fnc_updateUnits.sqf +++ b/addons/spectator/functions/fnc_updateUnits.sqf @@ -20,7 +20,7 @@ params [["_newUnits",[],[[]]],["_blacklist",false,[false]]]; // Function only matters on player clients -if !(hasInterface) exitWith {}; +if (!hasInterface) exitWith {}; // If adding to a list we can exit here, since it won't show up until the UI refreshes anyway if !(_newUnits isEqualTo []) exitWith { diff --git a/addons/spectator/functions/fnc_updateVisionModes.sqf b/addons/spectator/functions/fnc_updateVisionModes.sqf index 2a1e500f3f..c2bbb09167 100644 --- a/addons/spectator/functions/fnc_updateVisionModes.sqf +++ b/addons/spectator/functions/fnc_updateVisionModes.sqf @@ -49,7 +49,7 @@ if (_newModes isEqualTo []) then { }; // Update camera in case of change -if !(isNil QGVAR(camera)) then { +if (GVAR(isSet)) then { [] call FUNC(transitionCamera); }; diff --git a/addons/spectator/stringtable.xml b/addons/spectator/stringtable.xml index ca44a2ab27..5d84136da8 100644 --- a/addons/spectator/stringtable.xml +++ b/addons/spectator/stringtable.xml @@ -4,334 +4,449 @@ Spectator Settings Ustawienia obserwatora + Preferências de Espectador Настройки спектатора + Nastavení Pozorovatele Configure how the spectator system will operate by default. Skonfiguruj domyślne ustawienia obserwatora. + Configura como o sistema de espectador operará por padrão. Определяют, как система спектатора будет функционировать по-умолчанию. Unit filter Filtr jednostek + Filtro de unidades Фильтр юнитов + Filtr jednotek Method of filtering spectatable units. Wybierz jednostki, jakie będzie można obserwować po uruchomeniu obserwatora. + Método para filtrar unidades espectáveis Метод фильтрации наблюдаемых юнитов. No units Brak jednostek + Sem unidades Никто + Žádné jednotky Only players Tylko gracze + Somente jogadores Только игроки + Pouze hráči Playable Units Grywalne jednostki + Unidades jogáveis Играбельные юниты + Hratelné Jednotky All units Wszystkie jednostki + Todas unidades Все юниты + Všechny jednotky Side filter Filtr stron + Filtro de lados Фильтр стороны + Filtr stran Method of filtering spectatable sides. Wybierz strony, jakie będzie można obserwować po uruchomeniu obserwatora. + Método para filtrar lados espectáveis. Метод фильтрации наблюдаемых сторон. Player side Strona gracza + Lado do jogador Сторона игрока + Strana hráče Friendly sides Strony sojusznicze + Lados aliados Дружественные стороны + Strana spojenců Hostile sides Strony wrogie + Lados hostis Враждебные стороны + Strana nepřítele All sides Wszystkie strony + Todos os lados Все стороны + Všechny strany Camera modes Tryby kamery + Modos de camera Режимы камеры + Módy kamery Camera modes that can be used. Tryby kamery, jakie mogą być używane. + Modos de camera que podem ser utilizados Режимы камеры, которые могут быть использованы All Wszystkie + Todos Все + Všechny Free only Tylko wolna + Somente livre Только свободная + Pouze volná Internal only Tylko wewnętrzna + Somente interna Только внутренняя + Pouze vnitřní External only Tylko zewnętrzna + Somente externa Только внешняя + Pouze vnější Internal and external Wewnętrzna i zewnętrzna + Interna e externa Внутренняя и внешняя + Vnitřní a vnější Vision modes Tryby wizji + Modos de visão Режимы видения Vision modes that can be used. Tryby wizji, jakie mogą być używane. + Modos de visão que podem ser utilizados Режимы видения, которые могут быть использованы Night vision Noktowizja + Visão noturna Ночное видение + Noktovize Thermal imaging Termowizja + Visão térmica Тепловизионное + Termovize Spectator Units Jednostki obserwatora + Unidades espectadoras Юниты Spectator Controls Sterowanie obserwatorem + Controle do espectador Управление спектатором Free Wolna + Livre Свободная + Volná Internal Wewnętrzna + Interna Внутренняя + Vnitřní External Zewnętrzna + Externa Внешняя + Vnější Normal Normalna + Normal Нормальное + Normální Night Noc + Visão Norturna Ночное + Noc Thermal Termo + Térmica Тепловизор + Termál Free Camera Kamera swobodna + Câmera livre Свободная камера + Volná Kamera Camera Forward Kamera naprzód + Câmera para frente Камера вперед + Kamera Vpřed Camera Backward Kamera w tył + Câmera para trás Камера назад + Kamera Zpět Camera Left Kamera w lewo + Câmera para esquerda Камера влево + Kamera Doleva Camera Right Kamera w prawo + Câmera para direita Камера вправо + Kamera Doprava Camera Up Kamera w górę + Câmera para cima Камера вверх + Kamera Nahoru Camera Down Kamera w dół + Câmera para baixo Камера вниз + Kamera Dolů Pan Camera Panoramowanie + Câmera panorâmica Панорамирование Dolly Camera Płynna kamera + Câmera dolly Рельсовая камера Lock Camera to Target Zablokuj kamerę na celu + Travar câmera em alvo Зафиксировать камеру на цели + Zamknout Kameru na Cíl Speed Boost Przyśpieszenie kamery + Aumento de velocidade Ускорение камеры Focus on Unit Skup na jednostce + Focar na unidade Фокус на юните + Zaměřit se na Jednotku Interface Interfejs + Interface Интерфейс + Rozhraní Toggle Interface Przełącz interfejs + Alternar interface Переключить интерфейс + Přepnout Rozhraní Toggle Unit Icons Przełącz ikony jednostek + Alternar ícone de unidades Вкл./выкл. иконки юнитов + Přepnout Ikony Jednotek Toggle Unit List Przełącz listę jednostek + Alternar lista de unidades Вкл./выкл. список юнитов + Přepnout Seznam Jednotek Toggle Toolbar Przełącz pasek narzędzi + Alternar barra de ferramentas Вкл./выкл. тулбар Toggle Compass Przełącz kompas + Alternar bússola Вкл./выкл. компас + Přepnout Kompas Toggle Map Przełącz mapę + Alternar mapa Вкл./выкл. карту + Přepnout Mapu Toggle Help Przełącz pomoc + Alternar ajuda Вкл./выкл. помощь + Přepnout Nápovědu Camera Attributes Atrybuty kamery + Atributos de câmera Атрибуты камеры Next Camera Następna kamera + Próxima câmera Следующая камера + Následující Kamera Previous Camera Poprzednia kamera + Câmera anterior Предыдущая камера + Předchozí Kamera Next Unit Następna jednostka + Próxima unidade Следующий юнит + Následující Jednotka Previous Unit Poprzednia jednostka + Unidade anterior Предыдущий юнит + Předchozí Jednotka Next Vision Mode Następny tryb wizji + Próximo modo de visão Следующий режим видения Previous Vision Mode Poprzedni tryb wizji + Modo de visão anterior Предыдущий режим видения Adjust Zoom Reguluj zoom + Ajustar zoom Настроить зум + Regulovat Přiblížení Adjust Speed Reguluj prędkość + Ajuster velocidade Настроить скорость + Regulovat Rychlost Increment Zoom Reguluj zoom (krok) + Incrementar zoom Увеличить зум Increment Speed Reguluj prędkość (krok) + Incrementar velocidade Увеличить скорость Reset Zoom Resetuj zoom + Redefinir zoom Сбросить зум + Obnovit Přiblížení Reset Speed Resetuj prędkość + Redefinir velocidade Сбросить скорость + Obnovit Rychlost - \ No newline at end of file + diff --git a/addons/switchunits/functions/fnc_module.sqf b/addons/switchunits/functions/fnc_module.sqf index ec9164a866..3b8cea4037 100644 --- a/addons/switchunits/functions/fnc_module.sqf +++ b/addons/switchunits/functions/fnc_module.sqf @@ -35,4 +35,4 @@ GVAR(Module) = true; [QGVAR(EnableSwitchUnits), true, false, true] call EFUNC(common,setSetting); -diag_log text "[ACE]: SwitchUnits Module Initialized."; +ACE_LOGINFO("Switch Unit Module Initialized."); diff --git a/addons/switchunits/stringtable.xml b/addons/switchunits/stringtable.xml index 61731242b3..2e96f14d67 100644 --- a/addons/switchunits/stringtable.xml +++ b/addons/switchunits/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -32,6 +32,7 @@ Einheiten-Switch-System? Systém výměny stran Sistema de troca de unidades + Système de changement d'unité Egységváltó-rendszer Переключение между юнитами @@ -42,6 +43,7 @@ Nach BLUFOR wechseln? Přesunout k BLUFOR? Trocar para Oeste? + Changer en OUEST? Átváltás BLUFOR-ra? На синих? @@ -52,6 +54,7 @@ Erlaube das Wechseln zu BLUFOR-Einheiten? Povolit přesun k BLUFOR? Permitir troca de unidades para o Oeste? + Permettre le changement en unité OUEST? Nyugat-fakciós egységekre való váltás engedélyezése? Разрешить переключаться на синих юнитов? @@ -62,6 +65,7 @@ Nach OPFOR wechseln? Přesunout k OPFOR? Trocar para Leste? + Changer en EST? Átváltás OPFOR-ra? На красных? @@ -72,6 +76,7 @@ Erlaube das Wechseln zu OPFOR-Einheiten? Povolit přesun k OPFOR? Permitir troca de unidades para o Leste? + Permettre le changement en unité EST? Kelet-fakciós egységekre való váltás engedélyezése? Разрешить переключаться на красных юнитов? @@ -82,6 +87,7 @@ Nach INDFOR wechseln? Přesunout k INDFOR? Trocar para Indenpendente + Changer en INDE? Átváltás INDFOR-ra? На независимых? @@ -92,6 +98,7 @@ Erlaube das Wechseln zu INDFOR-Einheiten? Povolit přesun k INDFOR? Permitir troca de unidades para o Indenpendente? + Permettre le changement en unité INDE? Független egységekre való váltás engedélyezése? Разрешить переключаться на независимых юнитов? @@ -102,6 +109,7 @@ Nach CIVILIAN wechseln? Přesunout k CIVILISTŮM? Trocar para Civis? + Changer en CIV? Átváltás civilre? На гражданских? @@ -112,6 +120,7 @@ Erlaube das Wechseln zu CIVILIAN-Einheiten? Povolit přesun k CIVILISTŮM? Permitir troca de unidades para o Civil? + Permettre le changement en unité CIV? Civil egységekre való váltás engedélyezése? Разрешить переключаться на гражданских юнитов? @@ -122,6 +131,7 @@ Aktiviere Sicherheitszone? Povolit bezpečné oblasti? Habilitar zona segura? + Activer la zone sécurisée? Biztonságos zóna engedélyezése? Безопасная зона @@ -132,6 +142,7 @@ Aktiviere eine Sicherheitszone um feindliche Einheiten? Spieler können nicht zu Einheiten in der Sicherheitszone wechseln. Povolit bezpečnou zónu kolem nepřátelských jednotek? Hráči se nemohou změnit strany/jednotky uvnitř bezpečné zóny. Habilitar uma zona segur ao redor das unidades inimigas? Jogadores não conseguirão trocar para unidades dentro dessa zona segura. + Activer une zone sécurisée autour des enemis? Les joueurs ne peuvent changer d'unité dand la zone sécurisée Engedélyezve legyen-e egy biztonságos zóna az ellenségek körül? A játékosok nem tudnak a biztonságos zónán belüli egységekre váltani. Включить безопасную зону вокруг вражеских юнитов? Игроки не могут переключаться на юнитов, находящихся в безопасной зоне. @@ -142,6 +153,7 @@ Sicherheitszonenradius Oblast bezpečné zóny Raio da zona segura + Rayon de la zone sécurisée Biztonságos zóna hatóköre Радиус безопасной зоны @@ -152,6 +164,7 @@ Die Sicherheitszone um Spieler von einem anderen Team. Standard: 200 Bezpečná zóna kolem hráče z jiných týmu. Výchozí: 200 A zona segura ao redor dos jogadores de diferentes equipes. Padrão: 200 + Rayon de la zone sécurisée autour de joueurs d'équipe différentes. Défaut: 200 A biztonságos zóna más csapatból lévő játékosok körül. Alapértelmezett: 200 Радиус безопасной зоны вокруг ироков из противоположной команды. По-умолчанию: 200 @@ -160,6 +173,7 @@ Tento modul umožňuje přepínání mazi dostupnými stranami. Este módulo permite mudar o lado à disposição dos jogadores. Этот модуль позволяет игрокам переключаться между доступными юнитами. + Ce module permet le changement de faction des joueurs - \ No newline at end of file + diff --git a/addons/tacticalladder/stringtable.xml b/addons/tacticalladder/stringtable.xml index d916f8acb9..a05c82efb2 100644 --- a/addons/tacticalladder/stringtable.xml +++ b/addons/tacticalladder/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -7,7 +7,7 @@ Телескопическая лестница Drabina teleskopowa Escalera telescópica - Telescopic Ladder + Echelle téléscopique Teleskopický žebřík Telescopic Ladder Teleszkopikus létra @@ -19,7 +19,7 @@ Установить лестницу Rozłóż drabinę Despelgar escalera - Deploy ladder + Déployer l'échelle Rozložit žebřík Deploy ladder Létra lerakása @@ -31,7 +31,7 @@ Положить лестницу Zostaw drabinę Soltar escalera - Drop ladder + Lacher l'échelle Položit žebřík Drop ladder Létra eldobása @@ -44,6 +44,7 @@ Upravit žebřík Ajustar escalera Ajustar escada + Régler l'échelle Létra állítása Выровнять лестницу @@ -53,7 +54,7 @@ Перенести лестницу Postaw drabinę Colocar escalera - Position ladder + Positionner l'échelle Umístit žebřík Position ladder Létra elhelyezése @@ -65,11 +66,11 @@ Взять лестницу Zabierz drabinę Recoger escalera - Pickup ladder + Prendre l'échelle Vzít žebřík Pickup ladder Létra felvétele Pegar escada - \ No newline at end of file + diff --git a/addons/tripod/stringtable.xml b/addons/tripod/stringtable.xml index 9c85f19a71..e87c89e6ff 100644 --- a/addons/tripod/stringtable.xml +++ b/addons/tripod/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -7,7 +7,7 @@ Снайперский штатив Trójnóg snajperski SSWT Kit - SSWT Kit + Kit SSWT SSWT souprava SSWT Kit SSWT Készlet @@ -19,7 +19,7 @@ Установить снайперский штатив Postaw trójnóg snajperski Place SSWT Kit - Place SSWT Kit + Placer le kit SSWT Rozlož souprava SSWT Place SSWT Kit SSWT készlet elhelyezése @@ -32,6 +32,7 @@ Zvednout SSWT soupravu SSWT-Werkzeug aufheben Pegar kit SSWT + Prendre le kit SSWT SSWT készlet felvétele Подобрать снайперский штатив @@ -42,6 +43,7 @@ Regulovat SSWT soupravu SSWT-Werkzeug anpassen Ajustar kit SSWT + Régler le kit SSWT SSWT készlet állítása Выровнять снайперский штатив @@ -52,6 +54,7 @@ Hotovo Fertig Feito + Terminé Kész Готово @@ -62,8 +65,9 @@ + Modifikátor, regulace + Modifikator, anpassen + Modificador, ajuste + + modifier, régler + Módosító, szabályzás + Модификатор, подстройка - \ No newline at end of file + diff --git a/addons/vehiclelock/stringtable.xml b/addons/vehiclelock/stringtable.xml index bf5dd3b6c3..e1d08762cd 100644 --- a/addons/vehiclelock/stringtable.xml +++ b/addons/vehiclelock/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -140,6 +140,7 @@ Fahrzeugsperreinstellungen Nastavení zámku vozidla Configuração de fechadura do veículo + Paramétrage du sytème de verrouillage Jármű-zár beállítás Запирание транспорта @@ -150,6 +151,7 @@ Sperre Fahrzeuginventar Inventář zamčeného vozidla Bloquear inventário do veículo + Verrouiller l'inventaire du véhicule Jármű rakodótér zárás Закрывать инвентарь транспорта @@ -160,6 +162,7 @@ Sperrt das Inventar von gesperrten Fahrzeugen Zamknout inventář u zamčených vozidel Bloqueia o inventário de veículos fechados + Verrouille l'inventaire de véhicule fermés à clé Bezárja a zárt járművek rakterét is Закрывать инвентарь транспорта, если транспорт закрыт @@ -170,6 +173,7 @@ Fahrzeuge spawnen gesperrt Počáteční stav zámku vozidla Estado inicial da fechadura dos veículos + Etat du verrouillage du véhicule au démarrage Jármű kezdő zár-állapot Начальное состояние замков @@ -180,6 +184,7 @@ Setze Sperrstatus für alle Fahrzeuge (entfernt unklare Sperrzustände) Nastavit stav zámku u všech vozidel (odstraňuje nejednoznačné stavy zámků) Definir estados de fechadura para todos os veículos (remove estados de fechadura ambíguos) + Défini l'état de vérrouillage pour tous les véhicules (supprime les vérrouillage ambigue) Beállítja a zár-állapotot az összes járműhöz (eltávolítja az azonosíthatatlan zárállapotokat) Устанавливает начальное состояние замков всех транспортных средств (устраняет неоднозначные состояния) @@ -190,6 +195,7 @@ Unverändert Jak je Como está + Pas de changement Úgy-ahogy Как есть @@ -200,6 +206,7 @@ Gesperrt Zamčeno Fechado + Verrouillé Zárva Закрыт @@ -210,6 +217,7 @@ Offen Odemčeno Aberto + Déverrouillé Nyitva Открыт @@ -220,6 +228,7 @@ Standard-Pick-Stärke Výchozí síla páčidla Durabilidade padrão da chave micha + Force de crochetage par défaut Alapértelmezett zártörő-erősség Сила отмычки по-умолчанию @@ -230,6 +239,7 @@ Standardzeit um ein Schloss zu knacken (in Sekunden). Standard: 10 Čas k vypáčení zámku (v sekundách). Výchozí: 10 Tempo padrão para forçar a fechadura (em segundos). Padrão: 10 + Temps par défaut pour le crochetage Alapértelmezett idő a zárfeltöréshez (másodpercben). Alapértelmezett: 10 Время для взлома замка отмычкой (в секундах). По-умолчанию: 10 @@ -240,6 +250,7 @@ Einstellungen für Pick-Stärke und anfänglichen Fahrzeugsperrzustand. Entfernt unklare Sperrzustände.<br />Quelle: vehiclelock.pbo Nastavení síly vypáčení a počáteční stav zámku vozidla. Odstraňuje nejednoznačné stavy zámků.<br />Zdroj: vehiclelock.pbo Definições para a durabilidade da chave micha e estado inicial da fechadura do veículo. Remove estados de fechadura ambíguas <br /> Fonte: Vehiclelock.pbo + Paramètres pour le crochetage et état inital des véhicules. Supprime les états de verrouillage ambigue. <br/>Source: véhicle.pbo Beállítások a zártörő erősségére és alapértelmezett zár-állapotra a járműveken. Eltávolítja az azonosíthatatlan zár-állapotokat. <br />Forrás: vehiclelock.pbo Настройки силы отмычек и начальное состояние замков транспорта. Устраняет неоднозначные состояния замков.<br />Источник: vehiclelock.pbo @@ -250,6 +261,7 @@ Fahrzeugschlüsselzuweisung Přidělení klíče k vozidlu Atribuição de chave de veículo + Assignation des clés de véhicule Járműkulcs-osztás Назначение ключей от транспорта @@ -260,8 +272,9 @@ Synchronisiere mit Fahrzeugen und Spielern. Wird eigene Schlüssel an Spieler für jedes synchronisierte Fahrzeuge aushändigen. Nur gültig für am Missionsstart existierende Fahrzeuge.<br />Quelle: vehiclelock.pbo Synchronizuj s vozidly a hráči. Hráč dostane klíč ke každému synchonizovanému vozidlu. Platné pouze pro objekty přítomné na začátku mise.<br />Zdroj: vehiclelock.pbo Sincronizar com veículos e jogadores. Irá distribuir chaves personalizadas para os jogadores para cada veículo sincronizado. Só é válido para objetos presentes no início da missão <br /> Fonte: vehiclelock.pbo + Synchronise avec les véhicules et les joueurs. Distribue les clés aux joueurs pour chaque véhicule synchronisé. Uniquement valide pour les objects présent au démarrage. <br/>Source: vehiclelock.pbo Szinkronizál a járművekkel és játékosokkal. Egyedi kulcsokat oszt ki a játékosoknak minden szinkronizált járműhöz. Csak a küldetés indításakor jelenlévő járművekhez érvényes. <br />Forrás: vehiclelock.pbo Синхронизируйте с транспортом и игроком. Это выдаст игроку ключи от всех синхронизированных транспортных средств. Работает только для объектов, присутствующих на старте миссии.<br />Источник: vehiclelock.pbo - \ No newline at end of file + diff --git a/addons/vehicles/XEH_postInit.sqf b/addons/vehicles/XEH_postInit.sqf index 253f5eab39..a8ec2fb75f 100644 --- a/addons/vehicles/XEH_postInit.sqf +++ b/addons/vehicles/XEH_postInit.sqf @@ -1,7 +1,7 @@ // by esteldunedain #include "script_component.hpp" -if !(hasInterface) exitWith {}; +if (!hasInterface) exitWith {}; // Add keybinds ["ACE3 Vehicles", QGVAR(speedLimiter), localize LSTRING(SpeedLimiter), diff --git a/addons/vehicles/stringtable.xml b/addons/vehicles/stringtable.xml index e1002bc154..a912701b27 100644 --- a/addons/vehicles/stringtable.xml +++ b/addons/vehicles/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -38,4 +38,4 @@ Limitatore di Velocità - \ No newline at end of file + diff --git a/addons/viewdistance/functions/fnc_initModule.sqf b/addons/viewdistance/functions/fnc_initModule.sqf index 912242f373..47cf27025e 100644 --- a/addons/viewdistance/functions/fnc_initModule.sqf +++ b/addons/viewdistance/functions/fnc_initModule.sqf @@ -20,10 +20,10 @@ if (!isServer) exitWith {}; params ["_logic", "_units", "_activated"]; if (!_activated) exitWith { - diag_log text "[ACE]: View Distance Limit Module is placed but NOT active."; + ACE_LOGWARNING("View Distance Limit Module is placed but NOT active."); }; [_logic, QGVAR(enabled),"moduleViewDistanceEnabled"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(limitViewDistance),"moduleViewDistanceLimit"] call EFUNC(common,readSettingFromModule); -diag_log format ["[ACE]: View Distance Limit Module Initialized. Limit set by module: %1",GVAR(limitViewDistance)]; +ACE_LOGINFO_1("View Distance Limit Module Initialized. Limit set by module: %1",GVAR(limitViewDistance)); diff --git a/addons/viewdistance/stringtable.xml b/addons/viewdistance/stringtable.xml index 56d52c4bd4..b3058bc29e 100644 --- a/addons/viewdistance/stringtable.xml +++ b/addons/viewdistance/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -8,6 +8,7 @@ Omezovač dohlednosti Sichtweitenbegrenzung Limitador de distância de visão + Limiteur de distance de vue Látótáv-korlátozó Ограничитель дальности видимости @@ -18,6 +19,7 @@ Umožňuje určit maximální dohlednost, kterou si může hráč nastavit Erlaubt das Einschränken der maximalen Sichtweite, welche von Spielern eingestellt werden kann. Permite limitar a distância máxima de visão que pode ser definida pelos jogadores. + Permet de limiter la distance de vue que les joueurs peuvent choisir Lehetővé teszi a játékosok által a látótávolság maximumának korlátozását. Позволяет ограничить максимальную дальность видимости, которая может быть установлена игроками. @@ -28,6 +30,7 @@ Povolit ACE dohlednost Aktiviere ACE-Sichtweite Habilitar distância de visão ACE + Activer la distance de vue ACE ACE látótávolság engedélyezése Ограничить дальность видимости @@ -38,6 +41,7 @@ Povolit ACE dohlednost Aktiviert ACE-Sichtweite Habilita a distância de visão ACE + Activer la distance de vue ACE Engedélyezi az ACE látótávolságot Включает ограничитель дальности видимости ACE @@ -48,6 +52,7 @@ Limit dohlednosti Sichtweitengrenze Limite da distância de visão + Limite de distance de vue Látótáv-korlát Дальность видимости @@ -58,6 +63,7 @@ Stanoví limit jak daleko si může client zvýšit dohlednost (do 10000) Setze die Grenze fest, wie weit Spieler ihre Sichtweite erhöhen können (bis 10000) Estabelecer um limite de quão alto os clientes podem aumentar sua distância de visão (até 10000) + Défini pour les clients la limite de distance de vue maximale (jusqu'à 10000) Korlátozza, mekkora látótávolságot állíthatnak be a kliensek (maximum 10000-ig) Устанавливает предел дальности, насколько клиенты могут увеличить свою дальность видимости (до 10000) @@ -68,6 +74,7 @@ Limit dohlednoti pro klienty se nastavuje zde a může být potlačeno pomocí modulu. Stellt die Grenze für die Sichtweite des Spielers ein. Das kann von einem Modul überschrieben werden. Permite limitar a distância de visão máxima que pode ser definida por jogadores. Pode ser substituído por módulo. + Limite de la distance de vue pour les clients et peut être forcé par ce module A kliens látótávolsága itt állítható be, és felülbírálható modulok által Предел дальности видимости клиентов устанавливается здесь и может быть переопределен модулем @@ -78,6 +85,7 @@ Dohlednost (Pěšák) Spielersichtweite (zu Fuß) Distância de visão do cliente (A pé) + Distance de vue (à pied) Kliens látótáv (gyalog) Дальность видимости (Пешком) @@ -88,6 +96,7 @@ Změna dohlednosti pro hráče pokud jde po svých. Verändert die Sichtweite, wenn ein Spieler zu Fuß unterwegs ist. Muda a distância de visão do jogador dentro do jogo quando ele está a pé. + Change la distance de vue quand le joueur est à pied Megváltoztatja a játékon belüli látótávolságot, amennyiben a játékos gyalogosan van. Изменяет дальность видимости в игре, когда игрок перемещается пешком. @@ -98,6 +107,7 @@ Dohlednost (Pozemní technika) Spielersichtweite (Landfahrzeuge) Distância de visão do cliente (Veículo terrestre) + Distance de vue (à pied) Kliens látótáv (szárazföldi jármű) Дальность видимости (В наземном трансп.) @@ -108,6 +118,7 @@ Změna dohlednosti pro hráče pokud je v pozemní technice. Verändert die Sichtweite, wenn ein Spieler in einem Landfahrzeug ist. Muda a distância de visão do jogador dentro do jogo quando ele está dentro de um veículo terrestre. + Change la distance de vue quand le joueur est dans un véhicule Megváltoztatja a játékon belüli látótávolságot, amennyiben a játékos szárazföldi járműben van. Изменяет дальность видимости в игре, когда игрок перемещается в наземном транспорте. @@ -118,6 +129,7 @@ Dohlednost (Vzdušná technika) Spielersichtweite (Luftfahrzeuge) Distância de visão do cliente (Veículo aéreo) + Distance de vue (véhicule aérien) Kliens látótáv (légi jármű) Дальность видимости (В воздушном трансп.) @@ -128,6 +140,7 @@ Změna dohlednosti pro hráče pokud je ve vzdušné technice. Verändert die Sichtweite wenn ein Spieler in einem Luftfahrzeug ist. Muda a distância de visão do jogador dentro do jogo quando ele está dentro de um veículo aéreo. + Change la distance de vue quand le joueur est dans un véhicule aérien Megváltoztatja a játékon belüli látótávolságot, amennyiben a játékos légi járműben van. Изменяет дальность видимости в игре, когда игрок перемещается в воздушном транспорте. @@ -138,6 +151,7 @@ Dynamická dohlednost objektů Dynamische Objektsichtweite Distância de visão dinâmica dos objetos + Distance de vue pour les objet dynamique Dinamikus objektum-látótáv Динамич. дальность отрисовки объектов @@ -148,6 +162,7 @@ Nastaví objekt dohlednosti jako koeficient dohlednosti. Passt die Objektsichtweite dynamisch der Sichtweite an. Estabelece a distância de visão dos objetos com um coeficiente da distância de visão. + Défini la distance d'affichage des objets comme un coefficient de la distance de vue Beállítja az objektum-látótávot a megadott látótáv koefficienseként. Устанавливает дальность отрисовки объектов как коэффициент от общей дальности видимости. @@ -158,6 +173,7 @@ Vypnout Aus Desligado + Eteint Kikapcsolva Выкл. @@ -168,6 +184,7 @@ Velmi málo Sehr niedrig Muito baixo + Très bas Minimális Очень низкая @@ -178,6 +195,7 @@ Málo Niedrig Baixo + Bas Alacsony Низкая @@ -188,6 +206,7 @@ Středně Mittel Médio + Moyen Közepes Средняя @@ -198,6 +217,7 @@ Hodně Hoch Alto + Haut Magas Высокая @@ -208,6 +228,7 @@ Velmi hodně Sehr hoch Muito alto + Très haut Maximális Очень высокая @@ -218,6 +239,7 @@ Dohlednost: Sichtweite: Distância de visão: + Distance de vue Látótávolság: Дальность видимости: @@ -228,6 +250,7 @@ Dohlednost objektů je Objektsichtweite ist Distância de visão do objeto é + La distance d'affichage des objets est: Az objektum-látótávolság: Дальность видимости объектов: @@ -238,6 +261,7 @@ Tato volba je neplatná! Limit je Diese Option ist ungültig! Die Grenze ist Essa opção é inválida. O limte é + Cette option est non valide! La limite est Ez a beállítás érvénytelen! A maximum mennyiség Настройка не верна! Текущий предел @@ -248,6 +272,7 @@ Nastavení videa Grafikeinstellungen Ajustes de vídeo + Paramètres vidéo Videobeállítások Видео настройки diff --git a/addons/weaponselect/XEH_postInit.sqf b/addons/weaponselect/XEH_postInit.sqf index d2bfb55236..3da7fda785 100644 --- a/addons/weaponselect/XEH_postInit.sqf +++ b/addons/weaponselect/XEH_postInit.sqf @@ -1,7 +1,7 @@ // by esteldunedain #include "script_component.hpp" -if !(hasInterface) exitWith {}; +if (!hasInterface) exitWith {}; // Add keybinds ["ACE3 Weapons", QGVAR(SelectPistolNew), localize LSTRING(SelectPistol), diff --git a/addons/weather/stringtable.xml b/addons/weather/stringtable.xml index 44b0e66736..d6129f67e5 100644 --- a/addons/weather/stringtable.xml +++ b/addons/weather/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -20,6 +20,7 @@ Wetter Počasí Clima + Météo Időjárás Погода @@ -30,6 +31,7 @@ ACE-Wettermodul (synchron im Multiplayer) Synchronizovat ACE počasí v multiplayeru Módulo climático ACE para sincronismo multiplayer + Module ACE de synchronisation de la météo en multi. Többjátékos szinkronizált ACE időjárás modul ACE Модуль для синхронизации погоды в мультиплеере @@ -40,6 +42,7 @@ Wetterübertragung Změny počasí Propagação do clima + Propagation de la météo Időjárás-változás Единая погода для всех @@ -50,6 +53,7 @@ Aktiviere serverseitige Wetterübertragung Aktivuje změny počasí na straně serveru Ativa propagação de clima via server + Active la propagation météo par le serveur Engedélyezi a szerveroldali időjárás-változást Включает управление погодой на серверной стороне @@ -60,6 +64,7 @@ ACE-Wetter ACE počasí Clima ACE + ACE Météo ACE Időjárás Погода ACE @@ -70,6 +75,7 @@ Überschreibt das Standardwetter (Editor, Missionseinstellungen) mit dem ACE-Wetter (kartenbasiert) Přepíše výchozí počasí (editor, nastavení mise) s ACE počasím (podle mapy) Sobreescreve o clima padrão (editor, ajustes de missão) pelo sistema de clima ACE (baseado por mapa) + Force la métao par défaut (éditeur, paramètres de mission) avec la météo ACE (basé sur la carte) Felülbírálja az alapértelmezett időjárást (editor, küldetésbeállítások) az ACE időjárással (térkép-alapú) Заменяет погоду по-умолчанию (из редактора, настроек миссии) погодой ACE (на основе карты) @@ -80,6 +86,7 @@ Regen synchronisieren Synchronizuj déšť Sincronizar chuva + Synchronisation de la pluie Eső szinkronizálása Синхрониз. дождь @@ -90,6 +97,7 @@ Synchronisiert den Regen Synchronizace deště Sincroniza a chuva + Synchronise la pluie Szinkronizálja az esőt Синхронизирует дождь @@ -100,6 +108,7 @@ Wind synchronisieren Synchronizuj vítr Sincronizar vento + Synchronisation du vent Szél szinkronizálása Синхрониз. ветер @@ -110,6 +119,7 @@ Synchronisiert den Wind Synchronizace větru Sincroniza o vento + Synchronise le vent Szinkronizálja a szelet Синхронизирует ветер @@ -120,6 +130,7 @@ Sonstiges synchronisieren Synchronizuj různé Sincronizar outros + Synchronisation autres Egyéb szinkronizálása Синхрониз. прочее @@ -130,6 +141,7 @@ Synchronisiert Blitze, Regenbögen, Nebel, ... Synchronizace blesků, duhy, mlhy, ... Sincroniza relâmpagos, arco-íris, neblina... + Synchronise les éclairs, les arcs en ciel, le brouillard Szinkronizálja a villámokat, szivárványokat, ködöt, ... Синхронизирует молнии, радугу, туман, ... @@ -140,6 +152,7 @@ Aktualisierungsintervall Interval aktualizace Intervalo de atualização + Intervalle de synchronisation Frissítési intervallum Интервал обновления @@ -150,6 +163,7 @@ Definiert das Intervall (in Sekunden) zwischen Wetteraktualisierungen Určit interval (v sekundách) mezi aktualizacemi počasí Defina o intervalo (em segundos) entre as atualizações de clima + Défini un intervalle (secondes) entre deux synchronisations Megadja az intervallumot (másodpercben) az időjárás-frissítések között Определяет интервал (в секундах) между обновлениями погоды diff --git a/addons/winddeflection/XEH_postInit.sqf b/addons/winddeflection/XEH_postInit.sqf index 63d866fb60..ff9e2427f4 100644 --- a/addons/winddeflection/XEH_postInit.sqf +++ b/addons/winddeflection/XEH_postInit.sqf @@ -1,6 +1,6 @@ #include "script_component.hpp" -if !(hasInterface) exitWith {}; +if (!hasInterface) exitWith {}; GVAR(trackedBullets) = []; diff --git a/addons/winddeflection/stringtable.xml b/addons/winddeflection/stringtable.xml index f5a824bba6..76e3f7f4e4 100644 --- a/addons/winddeflection/stringtable.xml +++ b/addons/winddeflection/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -68,6 +68,7 @@ Účinky větru Windablenkung Desvio de vento + Déflexion du vent Szél-hárítás Отклонение ветром @@ -78,6 +79,7 @@ Windablenkung Účinky větru Desvio de vento + Déflexion du vent Szél-hárítás Отклонение ветром @@ -88,6 +90,7 @@ Aktiviert Windablenkung Umožňit vliv větru Ativa o desvio de vento + Active la déflexion dûe au vent Engedélyezi a szél-hárítást Включает отклонение ветром @@ -98,6 +101,7 @@ Fahrzeuge aktiviert Vozidla povolena Ativado em veículos + Activer les véhicules Jármű engedélyezve Для техники @@ -108,6 +112,7 @@ Aktiviere Windablenkung für statische oder Fahrzeugschützen Umožnit vliv větru pro střelce z vozidla/statiky Ativa o desvio de vento para atiradores de estáticas e veículos + Activer la déflection dûe au vent pour les armes statique et les véhicules Engedélyezi a szél-hárítást a statikus/jármű-lövészeknél Включает отклонение ветром для стрелков стационарных орудий и техники @@ -118,6 +123,7 @@ Simulationsintervall Interval simulace Intervalo de simulação + Intervalle de simulation Szimulációs intervallum Интервал симуляции @@ -128,6 +134,7 @@ Definiert das Intervall zwischen jedem Berechnungsschritt Určuje interval mezi každým výpočtem Define o intervalo entre cada cálculo + Défini l'intervalle entre deux points de calcul Megszabja a számítási lépések közötti intervallumot Определяет временной интервал между расчетами @@ -138,6 +145,7 @@ Simulationsradius Oblast simulace Radio da Simulação + Rayon de simulation Szimulációs hatókör Радиус симуляции @@ -148,6 +156,7 @@ Gibt den Radius (in Metern) um den Spieler an, in dem Projektile vom Wind beeinflusst werden Definuje oblast kolem hráče (v metrech) v které je projektil ovlivněn větrem Define o raio ao redor do jogador (em metros) em qual os projéteis são desviados pelo vento + Défini un rayon autour du joueur (en mètres) autour duquel les projectiles sont influencés par le vent Meghatározza a játékos körüli hatókört (méterben), ahol a lövedékeket háríthatja a szél Определяет радиус вокруг игрока (а метрах), в котором снаряды отклоняются ветром @@ -158,6 +167,7 @@ Windeinfluss auf die Geschossbahnen Vítr ovlivňuje trajektorii projektilu Influência do vento na trajetória dos projéteis + Le vent influe sur la trajectoire des projectiles Szél hatása a lövedékek röppályájára Влияние втера на траекторию снарядов diff --git a/addons/zeus/stringtable.xml b/addons/zeus/stringtable.xml index 0fc63c417c..ff55e6898f 100644 --- a/addons/zeus/stringtable.xml +++ b/addons/zeus/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -8,6 +8,7 @@ Nastavení Zeuse Zeus-Einstellungen Ajustes do Zeus + Paramètres du Zeus Zeus beállítások Настройки Зевса @@ -18,6 +19,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 Különböző beállítási lehetőségeket biztosít a Zeus részeihez. Обеспечивает контроль над различными аспектами работы Зевса. @@ -28,6 +30,7 @@ Zpráva o novém Zeusovi Aufstiegsnachrichten Mensagens de ascensão + Message ascension Felemelkedési üzenetek Сообщения о вознесении @@ -38,6 +41,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 en global quand un joueur est assigner comme Zeus Globális üzeneteket jelez ki, ha egy játékos Zeus-nak lesz beosztva. Отображает глобальное всплывающее сообщение, когда один из игроков становится Зевсом. @@ -48,6 +52,7 @@ Orel Zeuse Zeus-Adler Águia do Zeus + Aigle Zeus Zeus sas Орел Зевса @@ -58,6 +63,7 @@ Vytvoří orla, který následuje kameru Zeuse. Erstelle einen Adler, der der Zeus-Kamera folgt. Cria uma águia que segue a câmera do Zeus + Faire apparaitre un aigle qui suit la caméra Zeus Lerak egy sast, ami követi a Zeus kamerát. Спавнит орла, который следует за камерой Зевса. @@ -68,6 +74,7 @@ Zvuky větru Windgeräusche Sons de vento + Bruit de vent Szélhangok Звук ветра @@ -78,6 +85,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é Szélhangokat játszik le, ha a Zeus távvezérel egy egységet. Проигрывает звук ветра каждый раз, когда Зевс вселяется в юнита. @@ -88,6 +96,7 @@ Varování před dělostřelectvem Artilleriewarnung Aviso de explosivos + Alerte d'équipement militaire Tüzérségi figyelmeztetés Предупреждение об арте @@ -98,6 +107,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 Rádiós figyelmeztetés kiadása, ha a Zeus tüzérséget használ. Проигрывает звук радио каждый раз, когда Зевс использует артиллерию. @@ -108,6 +118,7 @@ Odhalit miny Enthülle Minen Revelar minas + Révéler les mines Aknák feltárása Показывать мины @@ -118,6 +129,7 @@ Odhalí miny pro spojence a umístnit jejich značku na mapu. Enthülle Minen gegenüber Verbündeten und platziere Kartenmarkierungen. Revelar minas para aliados e colocar marcadores no mapa. + 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. Показывает мины союзникам и отмечает их маркерами на карте. @@ -128,6 +140,7 @@ Odhalit pro spojence An Verbündete weitergeben Revelar para aliados + Révéler aux alliés Feltárás a szövetségeseknek Показывать союзникам @@ -138,6 +151,7 @@ Spojenci + Značky na mapě Verbündete + Kartenmarkierungen Aliados + Marcadores no mapa + Alliés + marqueurs sur la carte Szövetségesek + térkép jelölők Союзники + Маркеры на карте @@ -148,6 +162,7 @@ Přepnout - Vězeň Gefangennahme umschalten Alternar prisioneiro + Basculer en captif Elfogott állapot váltása Пленный (вкл./выкл.) @@ -158,6 +173,7 @@ Přepnout - Vzdávání Aufgabe umschalten Alternar rendição + Basculer en capitulation Kapituláló állapot váltása Сдавшийся (вкл./выкл.) @@ -168,23 +184,30 @@ Přepnout - Bezvědomí Bewusstlosigkeit umschalten Alternar inconsciência + Basculer en inconscient Eszméletlen állapot váltása Без сознания (вкл./выкл.) Assign Medic Przydziel medyka + Definir médico Назначить медиком + Přiřadit Zdravotníka Assign Medical Vehicle Przydziel pojazd medyczny + Definir veículo médico Назначить медицинским транспортом + Přiřadit Zdravotnické Vozidlo Assign Medical Facility Przydziel budynek medyczny + Definir instalação médica Назанчить медицинским сооружением + Přiřadit Zdravotnické Zařízení Unit must be alive @@ -213,11 +236,13 @@ Unit must be a structure Jednostka musi być budynkiem + Unidade deve ser uma estrutura Юнит должен быть строением Unit must be a vehicle Jednostka musi być pojazdem + Unidade deve ser um veículo Юнит должен быть транспортом @@ -227,6 +252,7 @@ Jednotka nemí být vězeň Einheit darf nicht gefangen sein Unidade não pode ser prisioneira + L'unité ne doit pas être captive Csak elfogatlan egységeken használni Юнит не должен быть пленным @@ -249,17 +275,20 @@ Vyžaduje addon, který není přítomen Benötigt ein Addon, das nicht vorhanden ist Requer um addon que não está presente + Requiert un addon qui n'est pas présent Egy jelenleg hiányzó bővítményt igényel Требуется аддон, который отсутствует Add Objects to Curator Dodaj obiekt do kuratora + Adicionar objetos para o Curator Добавить объекты куратору Adds any spawned object to all curators in the mission Dodaje każdy zespawnowany obiekt do wszystkich kuratorów podczas misji + Adicionar qualquer objeto criado para todos os curators na missão Добавляет любой отспавненный объект всем кураторам в миссии diff --git a/documentation/README_DE.md b/docs/README_DE.md similarity index 97% rename from documentation/README_DE.md rename to docs/README_DE.md index 23d54f9e35..9921bf3fc6 100644 --- a/documentation/README_DE.md +++ b/docs/README_DE.md @@ -17,6 +17,9 @@ ACE3 License + + ACE3 Slack +

Benötigt die aktuellste Version von CBA A3. Besucht uns auf Facebook | YouTube | Twitter | Reddit

diff --git a/documentation/README_PL.md b/docs/README_PL.md similarity index 97% rename from documentation/README_PL.md rename to docs/README_PL.md index 3fbeb31664..aa7023a9e4 100644 --- a/documentation/README_PL.md +++ b/docs/README_PL.md @@ -17,6 +17,9 @@ ACE3 Licencja + + ACE3 Slack +

Wymaga najnowszej wersji CBA A3. Odwiedź nas na Facebook | YouTube | Twitter | Reddit

diff --git a/documentation/development/ace3-config-entries.md b/documentation/development/ace3-config-entries.md deleted file mode 100644 index 3ba9092d4a..0000000000 --- a/documentation/development/ace3-config-entries.md +++ /dev/null @@ -1,128 +0,0 @@ ---- -layout: wiki -title: ACE3 Config Entries -description: A list of all ACE3 config entries. -group: development -parent: wiki -order: 2 ---- - -## 1. CfgVehicles -Entries found in the `CfgVehicles.hpp` files - - -```c++ -ace_nightvision_grain -ace_nightvision_blur -ace_recoil_enablecamshake -ace_dragging_cancarry -ace_dragging_carryposition -ace_dragging_carrydirection -ace_dragging_candrag -ace_dragging_dragposition -ace_dragging_dragdirection -ace_gforcecoef -ace_offset -ace_hasReserveParachute -ace_reserveParachute -``` - - -## 2. CfgWeapons -Entries found in the `CfgWeapons.hpp` files - - -```c++ -ace_recoil_shakemultiplier -ace_overpressure_angle -ace_overpressure_range -ace_overpressure_damage -ace_overheating_dispersion -ace_overheating_slowdownfactor -ace_overheating_jamchance -ace_nightvision_grain -ace_nightvision_blur -ace_nightvision_radblur -ace_usedtube -ace_reloadlaunchers_enabled -ace_bipod -ace_overheating_allowswapbarrel -ace_clearjamaction -ace_checktemperatureaction -ace_gforcecoef -ace_protection -ace_scopeadjust_horizontal -ace_scopeadjust_vertical -ace_scopeadjust_verticalincrement -ace_scopeadjust_horizontalincrement -ace_isusedlauncher -ace_attachable -ace_range -ace_detonator -ace_barrelTwist -ace_twistDirection -ace_barrelLength -ace_laserpointer -ace_nextmodeclass -ace_modedescription -ace_hearing_protection -ace_hearing_lowerVolume -``` - - -## 3. CfgAmmo -Entries found in the `CfgAmmo.hpp` files - -```c++ -ace_recoil_shakemultiplier -ace_frag_skip -ace_frag_force -ace_frag_classes -ace_frag_metal -ace_frag_charge -ace_frag_gurney_c -ace_frag_gurney_k -ace_explodeondefuse -ace_explosive -ace_fcs_airburst -ace_caliber -ace_bulletlength -ace_bulletmass -ace_transonicstabilitycoef -ace_ammotempmuzzlevelocityshifts -ace_ballisticcoefficients -ace_velocityboundaries -ace_standardatmosphere -ace_dragmodel -ace_muzzlevelocities -ace_barrellengths -``` - - -## 4. CfgGlasses -Entries found in the `CfgGlasses.hpp` file - -```c++ -ace_color -ace_tintamount -ace_overlay -ace_overlaydirt -ace_overlaycracked -ace_resistance -ace_protection -ace_dustpath -``` - - -## 5. CfgMagazines -Entries found in the `CfgMagazines.hpp` files - -```c++ -ace_isbelt -ace_attachable -ace_placeable -ace_setupobject -ace_delaytime -ace_triggers -ace_magazines_forcemagazinemuzzlevelocity -``` diff --git a/documentation/development/ace3-events-system.md b/documentation/development/ace3-events-system.md deleted file mode 100644 index 7f3dbf6a49..0000000000 --- a/documentation/development/ace3-events-system.md +++ /dev/null @@ -1,254 +0,0 @@ ---- -layout: wiki -title: ACE3 Events System -description: Event handlers in ACE3 are implemented through our event system. They should be used to trigger or allow triggering of specific functionality. -group: development -parent: wiki -order: 3 ---- - -## 1. Event Handlers - -Event handlers in ACE3 are implemented through our event system. They should be used to trigger or allow triggering of specific functionality. - -The commands are listed below. - -* `[eventName, eventCodeBlock] call ace_common_fnc_addEventHandler`
adds an event handler with the event name and returns the event handler id. -* `[eventName, args] call ace_common_fnc_globalEvent`
calls an event with the listed args on all machines, the local machine, and the server. -* `[eventName, args] call ace_common_fnc_serverEvent`
calls an event just on the server computer (dedicated or self-hosted). -* `[eventName, targetObject(s), args] call ace_common_fnc_targetEvent`
calls an event just on the targeted object or list of objects. -* `[eventName, args] call ace_common_fnc_localEvent`
calls an event just on the local machine, useful for inter-module events. - -Events can be removed or cleared with the following commands. - -* `[eventName, eventHandlerId] call ace_common_fnc_removeEventHandler`
will remove a specific event handler of the event name, using the ID returned from `ace_common_fnc_addEventHandler`. -* `[eventName] call ace_common_fnc_removeAllEventHandlers`
will remove all event handlers for that type of event. - -### 1.1 Synchronized Events - -* `[eventName, eventCodeBlock, ttlNumberOrCodeBlock] call ace_common_fnc_addSyncedEventHandler`
adds a globally synchronized event handler which will expire events after the provided TTL, or the code returns true. -* `[eventName] call ace_common_fnc_removeSyncedEventHandler`
will remove a specific event handler of the event name, using the ID returned from `ace_common_fnc_addSyncedEventHandler`. -* * `[eventName, args, ttlNumberOrCodeBlock] call ace_common_fnc_syncedEvent`
calls a global synchronized event, which will also be run on JIP players unless it has expired; event will expire after the provided TTL, or the code returns true. - -### 1.2 Pattern: - -```c++ -// tapper machine -["tapShoulder", [_target], [otherArguments]] call EFUNC(common,targetEvent); - -// target machine XEH_preInit.sqf -PREP(onTapShoulder); -["tapShoulder", FUNC(onTapShoulder) ] call EFUNC(common,addEventHandler); -``` - -### 1.3 Listenable Event List: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Event KeyDescriptionSource(s)Passed Parameter(s) (_this)Locality
"playerChanged"`player` changed (zeus/respawn/init)common[_newPlayer, _oldPlayer]local
"PlayerJIP"Player was a JIP player, and `player` object is now created.common[_player]local
"playerInventoryChanged"Inventory changedcommon[_player, getAllGear-Array]local
"playerVisionModeChanged"Vision mode changed (e.g. NVG on)common[_unit, _newVisionMode]local
"inventoryDisplayChanged"Inventory display opened/closedcommon[_unit, _isOpen]local
"zeusDisplayChanged"Zeus display opened/closedcommon[_unit, _isOpen]local
"cameraViewChanged"Camera view changedcommon[_unit, _newCameraView]local
"playerVehicleChanged"Player vehicle changedcommon[_unit, _newVehicle]local
"playerTurretChanged"Player turret changedcommon[_unit, _newTurretIndexArray]local
"infoDisplayChanged"On info box change (e.g. entering and leaving a vehicle)common[_display, _type]local
"inventoryDisplayLoaded"On opening the inventory displaycommon[_display]local
"mapDisplayLoaded"On loading the map (briefing and mission start)common[_display, _mapType]local
"SettingsInitialized"Settings are now safe to use (at mission start)commonlocal
"SettingChanged"A setting was changedcommon[_name, _value]local
"interactionMenuOpened"Interaction Menu Openedinteractionlocal
"killedByFriendly"On TK/Civilian Killedrespawnlocal
"drawing_requestMarkers"Request Drawing Markersmaptarget
"drawing_sendbackMarkers"Send Drawing Markersmaptarget
"drawing_addLineMarker"Line Drawnmapglobal
"drawing_removeLineMarker"Line Deletedmapglobal
"flashbangExplosion"Flashbang Goes Banggrenadestarget
"zeusUnitAssigned"A player was assigned as zeuszeus[_logic,_player]global
- -### 1.4 Callable Event List: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Event KeyDescriptionParametersOwnerLocality
"SetHandcuffed"Set the captive (handcuffed) state of a unit[_unit, _state]captiveslocal
"SetSurrendered"Set the surrender state of a unit[_unit, _state]captiveslocal
"ace_fcs_forceChange"force FCS updatesfcsfcslocal
diff --git a/documentation/development/arma-3-issues.md b/documentation/development/arma-3-issues.md deleted file mode 100644 index c28dc2f118..0000000000 --- a/documentation/development/arma-3-issues.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -layout: wiki -title: Arma 3 Issues -description: Keeping track of Arma 3 issues that need to be fixed. If you want to support us and help raise Bohemia's awareness of those issues, please upvote them. -group: development -parent: wiki -order: 6 ---- - - -Keeping track of Arma 3 issues that need to be fixed. If you want to support us and help raise Bohemia's awareness of those issues, please upvote them: - -**Open:** - -* [bux578: 0020997: MineDetector equipable in Launcher slot](http://feedback.arma3.com/view.php?id=20997) -* [bux578: 0021176: Zeus / Curator Add Remote Controlled Event](http://feedback.arma3.com/view.php?id=21176) -* [bux578: 0021469: Add script commands "addPrimaryWeaponMagazine" and "addSecondaryWeaponMagazine"](http://feedback.arma3.com/view.php?id=21469) -* [bux578: 0022000: Add/Alter script command to add perfectly configured weapons to cargo](http://feedback.arma3.com/view.php?id=22000) -* [commy2: 0021443: Unexpected behavior of += array in configs](http://feedback.arma3.com/view.php?id=21443) -* [commy2: 0022671: setVariable is not always JIP persistent](http://feedback.arma3.com/view.php?id=22671) -* [commy2: 0025404: splitString scripting command causes game crash] (http://feedback.arma3.com/view.php?id=25404) -* [CorruptedHeart: 0022318: Can no longer use "MenuBack" shortcut in AddAction](http://feedback.arma3.com/view.php?id=22318) -* [James2464: 0023725: All Environment Rocks Should Have PhysX LODs](http://feedback.arma3.com/view.php?id=23725) -* [Jaynus: 0023679: Display event handler return values for mouse buttons should be respected](http://feedback.arma3.com/view.php?id=23679) -* [Heisenberg: 0023741: Switching between optic modes of a sniper scope (AMS, DMS, MOS) will result in a blurred vision](http://feedback.arma3.com/view.php?id=23741) -* [AgentRev: 0022310: setObjectTextureGlobal causing "Cannot load texture" errors when used with valid mission files](http://feedback.arma3.com/view.php?id=22310) - -**Resolved:** - -* [Nou: 0020761: Memory points rfemur, lfemur, and other leg memory points returned incorrectly with SQF command selectionPosition](http://feedback.arma3.com/view.php?id=20761) -* [commy2: 0023136: isLightOn doesn't recognize destroyed light bulbs for streetlamps](http://feedback.arma3.com/view.php?id=23136) diff --git a/documentation/development/arma-3-scheduler-and-our-practices.md b/documentation/development/arma-3-scheduler-and-our-practices.md deleted file mode 100644 index 3d9bf0525e..0000000000 --- a/documentation/development/arma-3-scheduler-and-our-practices.md +++ /dev/null @@ -1,96 +0,0 @@ ---- -layout: wiki -title: Arma 3 Scheduler And Our Practices -description: -group: development -parent: wiki -order: 8 ---- - -## 1. Terminology - -### 1.1 Frame -A single rendered frame of Arma 3. - -### 1.2 Scheduled Space - -This refers to execution would is ruled by the Arma 3 default script scheduling engine. This would include: - -* spawn -* execVM - -### 1.3 Unscheduled Space -This refers to execution which is linear; what this means is that the code will run to completion prior to executing the current frame. It must complete, but is guaranteed to run within a given frame. - -* perFrameHandler -* Extended_EventHandlers -* addEventHandler - - -## 2. What is the scheduler and why do I care? - -BIKI Article: https://community.bistudio.com/wiki/Biki2.0:Performance_Considerations - -The Arma 3 script scheduler basically gives a fair-share execution to all running scripts, FSMs, and SQS files running on any given client or server at any given time. See the BIKI article for a in-depth explanation of this. What this basically means though, is that all scripts get a fair share; this also means scheduled execution is drastically affected by other poorly written mods. For example, if 2 different spawn's are running in a tight loop of `do { foo } while (true);`, they will both get exactly 50% of the scheduling time. - -With the way mission makers and mod makers generally use spawn/execVM, this means you're actually getting drastically less execution time in the scheduled environment than you might think. This leads to visible delay issues all the way up to massive delay on execution. You can easily test and prove this by looping spawns and watching the execution times extend. - -What does this all mean? It means we need to live outside of the spawn execution as much as possible. There are 2 places that the majority of our functionality should stem from, which means that as long as we strictly always perform calls between functions, we are executing within the same frame. If our execution is either stemming from the perFrameHandlers, or any default Extended_EventHandlers, than we can guarantee execution within a single frame. *ANY OTHER CIRCUMSTANCE IS NOT GUARANTEED.* - -The scheduler will also actually halt your script mid-execution, usually at the end of a given control block, and pause you to yield to other scripts. This can lead to drastically incorrect results when performing calculations. Again, this is the reason we want all our given code to run to completion in a single given frame. - -## 3 Design Patterns - -Because we are attempting to always run to completion; execution occurs from 2 places. Either PFH handles or event handlers; in both cases, we wish our code to run to completion. This takes a change in mind set for design to ensure your executing that way. In a nutshell though, this all distills down to the fact that you will always call other chunks of code; nothing will ever be spawned off. The only circumstance this really becomes a problem is for waiting or delay. If designed correctly, though, you can avoid those circumstances. - -Rules of thumb for component design: - -* If you need to wait for a value, don't wait, use a CBA event! This means everything should be designed and written with an event-driven model in mind. -* If you have to wait, use a PFH delay/diag_tickTime check. - - -### 3.1 PFH-Design Pattern - -Line Notes: - -* PerFrameHandlers should be self-removing. If a PFH is no longer needed, it is responsible for removing itself. - - - -### 3.2 ACE3 General Rules - -* Always use call whenever possible. We should be calling functions chains exclusive and not be relying on spawn/execVM ever. Consider spawn/execVM banned without good reason. All code should be a chain of execution which is traceable, and not triggered between seperate threads. -* waitUntil and sleep are banned. If you need to use them, use scheduled delay execution instead. **Reasoning: Sleep/waitUntil surrender about 5x the scheduler time than even normal execution does.** -* If we need a spawn or exec, we should utilize the perFrame scheduler. Spawn/execVM are subject to the Arma 3 scheduler and as such, cannot be relied upon. In order to give our players a consistent gameplay experience, we need to have total control over how and when all of our code runs. -* PFH should be utilized at all possible times when the player can see the result of whatever the code is. This applies to missile guidance, bullets, wind, optics, interactive UI, HUD's, and rendering. We should only consider scheduled execution if the code is running out of the visual range of the player. - - -### 3.3 Code Examples - -#### 3.3.1 Generic PFH functions -See: https://dev.withsix.com/docs/cba/files/common/fnc_addPerFrameHandler-sqf.html for more details. - -```c++ -[{ code } , delayTime, [ARGS] ] call CBA_fnc_addPerFrameHandler; -``` - - -#### 3.3.2 PFH Wait - -```c++ -DFUNC(myDelayedFunction) = { - // Our argument array is passed in a PFH as select 0 - _args = _this select 0; - - // Print our arguments - diag_log text format["I received: %1", (_args select 0)]; - - // Delete this PFH, so it is only executed once - [_this select 1] call CBA_fnc_removePerFrameHandler; -}; - -// This runs the PFH once every 5 seconds, with the variable array ["balls"] being passed in -// This executes FUNC(myDelayedFunction), that could also be a { code } block. -// Parameter 2 is the delay (in seconds) for a PFH. This is "execute every N seconds", 0 will be every frame. -[FUNC(myDelayedFunction), 5, ["balls"] ] call CBA_fnc_addPerFrameHandler; -``` diff --git a/documentation/development/branching-and-release.md b/documentation/development/branching-and-release.md deleted file mode 100644 index ae7b67b1e9..0000000000 --- a/documentation/development/branching-and-release.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -layout: wiki -title: Branching and Release -description: -group: development -parent: wiki -order: 5 ---- - - -## 1 Versioning - -For ACE3 we use an versioning strategy based on Semver. This means our version numbering is structured `MAJOR.MINOR.PATCH.BUILD`. - -Because this modification is for Arma and backwards compatability is not always possible, our `MAJOR.MINOR.PATCH.BUILD` rules are slightly different. We increment the: - - MAJOR version when we switch to a new arma version (ie Arma 4 or standalone expansion), - MINOR version when we add new features or large amount of bug fixes. - PATCH version when a release only contains bug fixes. - -## 2 Branching and releases - -We have a release scheduled every 2 weeks on a Tuesday. On the Friday before release, the project management will decide whether or not this scheduled release will continue. When continuing with the release, the current `master branch` will be merged into the `release branch`. The release branch will not contain any direct commits and no other branches will be merged into this branch. The exception being `hotfixes`, which are branched off `Release` and merged back into `Release` and `Master`. - -`Hotfixes` are fixes for critical bugs that prevent stable gameplay with the currently available version of ACE3. - -During this release process between the Friday and Tuesday, the day of release, work can continue on as normal on the `Master branch`. This includes new features, bug fixes that won't make it for release or other work. These will not be merged into the `Release branch` until the next release cycle, normally 2 weeks later. - -### 2.1 Branching - -* New features, bug fixes that are not a hotfix or other work will always be branched off `master` or another branch but never a `hotfix` or the `Release branch`. -* Hotfixes are always branched off the `Release branch` -* The release branch is never merged or deleted. Only master or hotfixes are allowed to merge into the `Release branch`. - -### 2.2 Diagram - -Release and branching flowchart diff --git a/documentation/development/coding-guidelines.md b/documentation/development/coding-guidelines.md deleted file mode 100644 index a869911747..0000000000 --- a/documentation/development/coding-guidelines.md +++ /dev/null @@ -1,298 +0,0 @@ ---- -layout: wiki -title: Coding Guidelines -description: -group: development -parent: wiki -order: 1 ---- - - -## 1. Indentation - -4 spaces for indentation. - -```c++ -class Something: Or { -....class Other { -........foo = "bar"; -....}; -}; -``` - -### 1.1 Reasoning - -Tabs can be tricky sometimes, especially when it comes to sharing code with others. Additionally, a lot of people tend to forget they're using tabs when they're aligning things after the first character, which causes things to fall apart when viewing the code at different tab lengths. - - -## 2. Braces - -- opening brace on the same line as keyword -- closing brace in own line, same level of indentation as keyword - -**Yes:** - -```c++ -class Something: Or { - class Other { - foo = "bar"; - }; -}; -``` - -**No:** - -```c++ -class Something : Or -{ - class Other - { - foo = "bar"; - }; -}; -``` - -**Also no:** - -```c++ -class Something : Or { - class Other { - foo = "bar"; - }; - }; -``` - -When using `if`/`else`, it is encouraged to put `else` on the same line as the closing brace to save space: - -```c++ -if (alive player) then { - player setDamage 1; -} else { - hint ":("; -}; -``` - -In cases where you , e.g, have a lot of one-liner classes, it is allowed to use something like this to save space: - -```c++ -class One {foo = 1;}; -class Two {foo = 2;}; -class Three {foo = 3;}; -``` - -### 2.1 Reasoning - -Putting the opening brace in it's own line wastes a lot of space, and keeping the closing brace on the same level as the keyword makes it easier to recognize what exactly the brace closes. - - -## 3. How to create a new module - -1. Copy the structure from `extras\blank` to the `addons\` folder and name it what you wish the new module to be named. -1. Edit `script_component.hpp`, change the `COMPONENT` definition to the name of the module. Also edit each of the `DEBUG` definitions to be the name of the module (for example, `DEBUG_SETTINGS_BLANK` should be `DEBUG_SETTINGS_BALLS` for module balls) -1. Edit the `script_component.hpp` file in the the `functions` directory to match the path of the new module, for example `#include "\z\ace\addons\blank\script_component.hpp"` for module called balls should now be `#include "\z\ace\addons\ballls\script_component.hpp"`. -1. The module is now prepared for development - - -### 3.1 Function Definitions - -Functions should be created in the functions\ subdirectory, named `fnc_FunctionName.sqf` They should then be indexed via the `PREP(FunctionName)` macro in the XEH_preInit.sqf file. The `PREP` macro allows for CBA function caching, which drastically speeds up load times. **Beware though that function caching is enabled by default and as such to disable it you need to `#define DISABLE_COMPILE_CACHE` above your `#include "script_components.hpp"` include!** - -Every function should have a header of the following format: - -```cpp -/* - * Author: [Name of Author(s)] - * [Description] - * - * Arguments: - * 0: The first argument - * 1: The second argument - * - * Return Value: - * The return value - * - * Example: - * ["something", player] call ace_common_fnc_imanexample - * - * Public: [Yes/No] - */ -``` - - -## 4. Macro Usage - -### 4.1 Module/PBO specific Macro Usage -The family of `GVAR` macro's define global variable strings or constants for use within a module. Please use these to make sure we follow naming conventions across all modules and also prevent duplicate/overwriting between variables in different modules. The macro family expands as follows, for the example of the module 'balls': - - -| Macros | Expands to | -| -------|---------| -| `GVAR(face)` | ace_balls_face | -|`QGVAR(face)` | "ace_balls_face" | -| `EGVAR(balls,face)` | ace_balls_face | -| `EGVAR(leg,face)` | ace_leg_face | -| `QEGVAR(leg,face)` | "ace_leg_face" | - -There also exists the FUNC family of Macros: - -| Macros | Expands to | -| -------|---------| -|`FUNC(face)` | ace_balls_fnc_face or the call trace wrapper for that function.| -|`EFUNC(balls,face)` | ace_balls_fnc_face or the call trace wrapper for that function.| -|`EFUNC(leg,face) `| ace_leg_fnc_face or the call trace wrapper for that function.| -|`DFUNC(face)` | ace_balls_fnc_face and will ALWAYS be the function global variable.| -|`DEFUNC(leg,face)` | ace_leg_fnc_face and will ALWAYS be the function global variable.| -|`QFUNC(face)` | "ace_balls_fnc_face" | -|`QEFUNC(leg,face)` | "ace_leg_fnc_face" | - -The `FUNC` and `EFUNC` macros should NOT be used inside `QUOTE` macros if the intention is to get the function name or assumed to be the function variable due to call tracing (see below). If you need to 100% always be sure that you are getting the function name or variable use the `DFUNC` or `DEFUNC` macros. For example `QUOTE(FUNC(face)) == "ace_balls_fnc_face"` would be an illegal use of `FUNC` inside `QUOTE`. - -Using `FUNC` or `EFUNC` inside a `QUOTE` macro is fine if the intention is for it to be executed as a function. - -#### 4.1.1 FUNC Macros, Call Tracing, and Non-ACE3 /Anonymous Functions - -ACE3 implements a basic call tracing system that can dump the call stack on errors or wherever you want. To do this the `FUNC` macros in debug mode will expand out to include metadata about the call including line numbers and files. This functionality is automatic with the use of calls via `FUNC` and `EFUNC`, but any calls to other functions need to use the following macros: - -| Macro | example | -| -------|---------| -|`CALLSTACK(functionName)` | `[] call CALLSTACK(cba_fnc_someFunction)` | -|`CALLSTACK_NAMED(function,functionName)` | `[] call CALLSTACK_NAMED(_anonymousFunction,'My anonymous function!')`| - -These macros will call these functions with the appropriate wrappers and enable call logging into them (but to no further calls inside obviously). - -### 4.2 General Purpose Macros - -[CBA script_macros_common.hpp](https://gist.github.com/commy2/9ed6cc73fbe6a2b3f4e1) - -* `QUOTE()` is utilized within configuration files for bypassing the quote issues in configuration macros. So, all code segments inside a given config should utilize wrapping in the QUOTE() macro instead of direct strings. This allows us to use our macros inside the string segments, such as `QUOTE(_this call FUNC(balls))` - -#### 4.2.1 setVariable, getVariable family macros - -| Macro | Expands to | -| -------|---------| -|`GETVAR(player,MyVarName,false)` | player getVariable ["MyVarName", false]| -|`GETMVAR(MyVarName,objNull)` | missionNamespace getVariable ["MyVarName", objNull]| -|`GETUVAR(MyVarName,displayNull)` | uiNamespace getVariable ["MyVarName", displayNull]| -|`SETVAR(player,MyVarName,127)` | player setVariable ["MyVarName", 127] SETPVAR(player,MyVarName,127) player setVariable ["MyVarName", 127, true] | -|`SETMVAR(MyVarName,player)` | missionNamespace setVariable ["MyVarName", player] | -|`SETUVAR(MyVarName,_control)` | uiNamespace setVariable ["MyVarName", _control] | - -#### 4.2.2 STRING family macros - -Note that you need the strings in module stringtable.xml in the correct format -`STR_ACE__`
-Example:
-`STR_Balls_Banana`
- -Script strings: - -| Macro | Expands to | -| -------|---------| -| `LSTRING(banana)` | "STR_ACE_balls_banana"| -| `ELSTRING(balls,banana)` | "STR_ACE_balls_banana"| - - -Config Strings (require `$` as first character): - -| Macro | Expands to | -| -------|---------| -| `CSTRING(banana)` | "$STR_ACE_balls_banana" | -| `ECSTRING(balls,banana)` | "$STR_ACE_balls_banana" | - - -## 5. Event Handlers - -Event handlers in ACE3 are implemented through our event system. They should be used to trigger or allow triggering of specific functionality. - -The commands are listed below. - -| Even Handler | Use | -| -------|---------| -|`[eventName, eventCodeBlock] call ace_common_fnc_addEventHandler` | adds an event handler with the event name and returns the event handler id.| -| `[eventName, args] call ace_common_fnc_globalEvent` | calls an event with the listed args on all machines, the local machine, and the server. | -|`[eventName, args] call ace_common_fnc_serverEvent` | calls an event just on the server computer (dedicated or self-hosted).| -| `[eventName, targetObject(s), args] call ace_common_fnc_targetEvent` | calls an event just on the targeted object or list of objects.| -|`[eventName, args] call ace_common_fnc_localEvent` | calls an event just on the local machine, useful for inter-module events.| - -Events can be removed or cleared with the following commands. - -| Even Handler | Use | -| -------|---------| -|`[eventName, eventHandlerId] call ace_common_fnc_removeEventHandler` | will remove a specific event handler of the event name, using the ID returned from `ace_common_fnc_addEventHandler`.| -|`[eventName] call ace_common_fnc_removeAllEventHandlers` | will remove all event handlers for that type of event.| - -More information on the [ACE3 Events System](https://github.com/KoffeinFlummi/ACE3/wiki/ACE-Events-System) page. - -## 6. Hashes - -Hashes are a variable type that store key value pairs. They are not implemented natively in SQF, so there are a number of macros and functions for their usage in ACE3. If you are unfamiliar with the idea, they are similar in function to `setVariable`/`getVariable` but do not require an object to use. - -The following example is a simple usage using our macros which will be explained further below. - -```c++ -_hash = HASHCREATE; -HASH_SET(_hash, "key", "value"); -if(HASH_HASKEY(_hash, "key")) then { - player sideChat format["val: %1", HASH_GET(_hash, "key"); // will print out "val: value" -}; -HASH_REM(_hash, "key"); -if(HASH_HASKEY(_hash, "key")) then { - // this will never execute because we removed the hash key/val pair "key" -}; -``` - -A description of the above macros is below. - -| Macro | Use | -| -------|---------| -|`HASHCREATE` | used to create an empty hash.| -| `HASH_SET(hash, key, val)` | will set the hash key to that value, a key can be anything, even objects. | -|`HASH_GET(hash, key)` | will return the value of that key (or nil if it doesn't exist). | -| `HASH_HASKEY(hash, key)` | will return true/false if that key exists in the hash. | -| `HASH_REM(hash, key)` | will remove that hash key.| - -### 6.1 Hashlists - -A hashlist is an extension of a hash. It is a list of hashes! The reason for having this special type of storage container rather than using a normal array is that an array of normal hashes that are are similar will duplicate a large amount of data in their storage of keys. A hashlist on the other hand uses a common list of keys and an array of unique value containers. The following will demonstrate it's usage. - -```c++ -_defaultKeys = ["key1","key2","key3"]; -// create a new hashlist using the above keys as default -_hashList = HASHLIST_CREATELIST(_defaultKeys); - -//lets get a blank hash template out of this hashlist -_hash = HASHLIST_CREATEHASH(_hashList); - -//_hash is now a standard hash... -HASH_SET(_hash, "key1", "1"); - -//to store it to the list we need to push it to the list -HASHLIST_PUSH(_hashList, _hash); - -//now lets get it out and store it in something else for fun -//it was pushed to an empty list, so it's index is 0 -_anotherHash = HASHLIST_SELECT(_hashList, 0); - -// this should print "val: 1" -player sideChat format["val: %1", HASH_GET(_anotherHash, "key1")]; - -//Say we need to add a new key to the hashlist -//that we didn't initialize it with? We can simply -//set a new key using the standard HASH_SET macro -HASH_SET(_anotherHash, "anotherKey", "another value"); -``` - -As you can see above working with hashlists are fairly simple, a more in depth explanation of the macros is below. - - -| Macro | Use | -| -------|---------| -|`HASHLIST_CREATELIST(keys)` | creates a new hashlist with the default keys, pass [] for no default keys.| -|`HASHLIST_CREATEHASH(hashlist)` | returns a blank hash template from a hashlist.| -|`HASHLIST_PUSH(hashList, hash)` | pushes a new hash onto the end of the list.| -|`HASHLIST_SELECT(hashlist, index)` | returns the hash at that index in the list. | -|`HASHLIST_SET(hashlist, index, hash)` | sets a specific index to that hash.| - -#### 6.1.1 A note on pass by reference and hashes - -Hashes and hashlists are implemented with SQF arrays, and as such they are passed by reference to other functions. Remember to make copies (using the + operator) if you intend for the hash or hashlist to be modified with out the need for changing the original value. diff --git a/documentation/development/documentation-guidelines-and-tips.md b/documentation/development/documentation-guidelines-and-tips.md deleted file mode 100644 index adb3c48b9c..0000000000 --- a/documentation/development/documentation-guidelines-and-tips.md +++ /dev/null @@ -1,65 +0,0 @@ ---- -layout: wiki -title: Documentation guidelines and tips -group: development -parent: wiki -order: 19 ---- - -# Documentation guidelines - - - - - -## Example entry -``` ---- -layout: wiki -title: Mission Modules -group: feature -parent: wiki ---- - -## 1. Overview - -### 1.1 Sub-feature 1 -Short description of sub-feature 1. - -### 1.2 Sub-feature 2 -Short description of sub-feature 2. - -## 2. Usage - -### 2.1 thing n°1 -- Step 1. -- Step 2. -- Step 3. - -### 2.2 thing n°2 -- Step 1. -- Step 2. -- Step 3. - -## 3. Dependencies - -`ace_something` - -## 4. Guides -``` - -# Guidelines - -- A line between each entry like above. -- Use `ACE3` instead of `ACE 3`. -- Remove each entry that is not used. -- Don't forget to say what you're going to work on in #documentation in slack or [this topic] (https://github.com/acemod/ACE3/issues/1166) -- Keybinds in ``` thoses thingies ``` -- Keywords in ``` `thoses thingies` ``` -- Capitals at the start of a sentence and `.`at the end. -- VERIFY EVERYTHING IN GAME, ALL THE THINGS - -# Tips - -- Use http://dillinger.io/ to keep your sanity -- [Markdown cheat sheet] (https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) diff --git a/documentation/development/extension-guidelines.md b/documentation/development/extension-guidelines.md deleted file mode 100644 index 2d551c4278..0000000000 --- a/documentation/development/extension-guidelines.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -layout: wiki -title: Extension Guidelines -description: -group: development -parent: wiki -order: 9 ---- - -## 1. Basics - -### 1.1 Requirements - -- A compiler (VS/GCC/Clang) - - If starting with Visual Studio, you need to make sure to use the Visual studio command prompt -- cmake 3.0 or later in your path - -### 1.2 Cross-Platform Guidelines - -### 1.3 C++ basic style and naming guide - -### 1.4 ace_common cpp library - ---- - -## 2 Building Extensions on Windows - -### 2.1 Compiling - -#### 2.1.1 Windows - Creating a Visual Studio Project -1. Open your compiling command prompt (which has cmake and your compiler) -2. From this directory, you need to use cmake to build the appropriate build files. Change the -G property appropriately. run cmake --help to get a list of the options. - -``` -cd extensions\build -cmake .. -G "Visual Studio 14 2015" -``` - -A Visual studio project file will now be generated in your build directory. - -#### 2.1.2 Windows - Visual Studio - Compile only (nmake) -1. Open your compiling command prompt (which has cmake and your compiler) -2. From this directory, you need to use cmake to build the appropriate build files. Change the -G property appropriately. run cmake --help to get a list of the options. - -``` -cd extensions\build -cmake .. -G "NMake Makefiles" -nmake -``` - -The extensions will not be built in its appropriate project folder, for example: - -``` -extensions\ - build\ - fcs\ace_fcs.dll - somethingElse\ace_somethingElse.dll -``` - -### 2.2 Creating a New Extension diff --git a/documentation/development/how-to-translate-ace3.md b/documentation/development/how-to-translate-ace3.md deleted file mode 100644 index edb88263b1..0000000000 --- a/documentation/development/how-to-translate-ace3.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -layout: wiki -title: How to translate ACE3 -description: This page describes in short how you can help translating ACE3 into your language. -group: development -parent: wiki -order: 20 ---- - -This page describes in short how you can help translating ACE3 into your language. - -1. If you don't already have a GitHub account create one at http://github.com -2. Open the ACE3 repository at https://github.com/acemod/ACE3 -3. In the top right corner press the "Fork" button -4. You are being redirected to your personal fork, a version that is hosted on your GitHub account (it says "yourUsername/ACE3") -5. Clone that fork to your PC (There are a lot of tools and tutorials how to do this (e.g. [GitHub for Windows](https://windows.github.com))) -6. Download [tabler](https://github.com/bux578/tabler/releases) and extract it somewhere -7. Open the tabler.exe and in the menu click "File > Open language files" -8. Point tabler to the cloned ACE3 directory -9. Start translating -10. When done go to the menu and click "File > Save language files" -11. Commit your changes to your local cloned repository -12. Sync (Push) your commit(s) to your fork -13. Create a Pull Request for your changes - -(The last three steps require some git knowledge, but there are a lot of tutorials out there) -[GitHub for Windows help](https://windows.github.com/help.html) - - -#### Community Translation Guides -**Spanish:** [https://gist.github.com/Legolasindar/bf8a3b09cb835f72501f](https://gist.github.com/Legolasindar/bf8a3b09cb835f72501f) diff --git a/documentation/development/merging-pull-requests.md b/documentation/development/merging-pull-requests.md deleted file mode 100644 index 208c9c786d..0000000000 --- a/documentation/development/merging-pull-requests.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -layout: wiki -title: Merging Pull Requests -description: -group: development -parent: wiki -order: 5 ---- - -Who's responsible for merging pull requests. - -All authors must add themselves to the AUTHORS.txt file **with a valid email adress**. - - -#### Changes To Existing Addons - -The people responsible for merging changes to existing addons are the maintainers listed in the README.md file of the respective addon folder. - -If the changes consists of trivial changes, such as spelling or indentation fixes: - -```diff - valueA = 12; - valueB = 31; -- valueC =2; -+ valueC = 2; -``` - -... the PR can be merged right away by one of the maintainers. - -Non-trivial pull requests remain open for a minimum of 48 hours, to give all other contributors time to comment on potential issues, and are then merged by a maintainer, should no issues arise. - - -#### New Addons / Other Changes - -If a pull request adds a new addon, or changes something else, like the README, everyone has 72 hours to comment on the changes. After that, one of the team leads ([NouberNou](https://github.com/NouberNou), [KoffeinFlummi](https://github.com/KoffeinFlummi), [Glowbal](https://github.com/Glowbal)) will merge it. - -Trivial changes such as spelling fixes can be merged immediately by any contributor. diff --git a/documentation/development/modularity-and-pbo-structure.md b/documentation/development/modularity-and-pbo-structure.md deleted file mode 100644 index 7e4a926de8..0000000000 --- a/documentation/development/modularity-and-pbo-structure.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -layout: wiki -title: Modularity And PBO Structure -description: -group: development -parent: wiki -order: 4 ---- - -## 1. Modularity - -Main principles: -- As much stuff as possible should be modular -- Strive to make as much stuff as possible run-time togglable. Adding/removing PBOS would still be requiring to toggle any feature relying on config changes. - -## 2. PBO Structure - -Main principles: - -- Try to keep single module dependencies as much as possible -- Interaction would be the requirement for most modules. -- Anything that is 100% config should require Common and not Interaction. - -``` -Main -> Common -> OptionsMenu -> Interaction -> Most things - -Main -> Common -> Config things - -Main -> Common -> 3D Models | - Interaction | -> Feature -``` - -## 3. Optional .PBOs for 3rd Party Mods - -- ACE3 policy is to NOT take care of compatibility with third party addons single handely. The current compatible .PBOs were kickstarted by the ACE3 team as an example to mod creators so it's clear which entries are needed for compatibility. The authors of those addons have been contacted and many of those pbos are due to be included in their respective mods eventually. - -
-
Notice for 3rd party mod creators:
-

Most of the config entries are inert if ACE3 is not present, so addons can be made ACE3 compatible without explicitly requiring ACE3. However, for addons that are not inert (for example, scope configs), it is best to create and distribute compatibility .PBOs along with the original mod content; feel free to consult with ACE3 devs about how to correctly implement this. All existing compatibility .PBOs are examples and thus no further compatibility .PBOs will be provided by the ACE3 team.

-
- - diff --git a/documentation/development/setting-up-the-development-environment.md b/documentation/development/setting-up-the-development-environment.md deleted file mode 100644 index e02760f96d..0000000000 --- a/documentation/development/setting-up-the-development-environment.md +++ /dev/null @@ -1,112 +0,0 @@ ---- -layout: wiki -title: Setting Up The Development Environment -description: This page describes how you can setup your development environment for ACE3, allowing you to properly build ACE and utilize file patching. -group: development -parent: wiki -order: 0 ---- - -This page describes how you can setup your development environment for ACE3, allowing you to properly build ACE and utilize file patching. - - -## 1. Requirements - -- Arma 3 (duh) -- A proper installation of the Arma 3 Tools (available on Steam) -- A properly setup P-drive -- Run ArmA 3 and Arma 3 Tools directly from steam once to install registry entries (and again after every update) -- Python 3.x, available [here](http://www.python.org) -- The following Mikero Tools (available [here](https://dev.withsix.com/projects/mikero-pbodll/files)): DePBO, DeOgg, Rapify, MakePBO, PBOProject -- A properly setup PATH variable (containing Python ,the Mikero tools and git) - - -## 2. Why so complicated? - -If you have contributed to AGM you might be used to an easier build process, where there was even an .exe you could use for building. ACE3, however, makes use of CBA macros to simplify things and give the developer access to a better debug process, which requires a stricter build environment. Additionally, Mikero's tools are stricter and report more errors than AddonBuilder does. The structure of this development environment also allows for [file patching](#7-file-patching), which is very useful for debugging. - -Not offering .exes for the Python scripts we use allows us to make easy changes without the hassle of compiling self-extracting exes all the time. - - -## 3. Getting ACE - -To actually get the ACE source code on your machine, it is recommended that you use Git. Tutorials for this are all around the web, and it allows you to track your changes and easily update your local copy. - -If you just want to create a quick and dirty build, you can also directly download the source code using the "Download ZIP" button on the front page of the GitHub repo. - - -## 4. Initial Setup - -After ensuring that you have installed all requirements, execute the `setup.py` script found in the `tools` folder. This will do most of the heavy lifting for you, create the links you need and copy the required CBA code to the proper place. Please note that these links are tied to the location of your ACE3 source code, so make sure that the project folder is where you want it to be. We recommend that you store the ACE3 project on your P-drive. - -### 4.1 Manual Setup - -Should the script fail, here is how you create the required links manually: - -First, to set up the links, create `z` folders both in your Arma 3 directory and on your P-drive. Then run the following commands as admin, replacing the text in brackets with the appropriate paths: - -Windows 8: - -``` -mklink /D /J "[Arma 3 installation folder]\z\ace" "[location of the ACE3 project]" -mklink /D /J "P:\z\ace" "[location of the ACE3 project]" -``` - -Windows 7 and Vista: - -``` -mklink /D "[Arma 3 installation folder]\z\ace" "[location of the ACE3 project]" -mklink /D "P:\z\ace" "[location of the ACE3 project]" -``` - -Then, copy the `cba` folder from the `tools` folder to `P:\x\cba`. Create the `x` folder if needed. That folder contains the parts of the CBA source code that are required for the macros to work. - - -## 5. Creating a Test Build - -To create a development build of ACE to test changes or to debug something, run the `build.py` file in the `tools` folder. This will populate the `addons` folder with binarized PBOs. These PBOs still point to the source files in their respective folders however, which allows you to use [file patching](#file-patching). - -This also means that you cannot distribute this build to others. - -To start the game using this build, you can use the following modline: - -``` --mod=@cba_a3;z\ace -``` - - -## 6. Creating a Release Build - -To create a complete build of ACE that you can use without the source files, run the `make.py` file in the `tools` folder. This will populate the `release` folder with binarized PBOs that you can redistribute. These handle like those of any other mod. - - -## 7. File Patching - -File Patching allows you to change the files in an addon while the game is running, requiring only a restart of the mission. This makes it great for debugging, as it cuts down the time required between tests. Note that this only works with PBOs created using MakePBO, as outlined in [Creating a Test Build](#creating-a-test-build). - -### 7.1 Enabling File Patching - -There are two ways to enable file patching: - -- Load cba_cache_disable.pbo (included in CBA's optional folder) -- Add the following to your test missions description.ext: - -```c++ -class CfgSettings { - class CBA { - class Caching { - compile = 0; - xeh = 0; - functions = 0; - }; - }; -}; -``` - -### 7.2 Restrictions of File Patching - -Files must exist in the built PBOs for filepatching to work. If you create a new file you must rebuild the PBO or Arma will not find it in your file paths. - -Configs are not patched during run time, only at load time. You do not have have to rebuild a PBO to make config changes, just restart Arma. You can get around this though if you are on the dev branch of Arma 3 and running the diagnostic exe. That includes `diag_mergeConfig` which takes a full system path (as in `p:\z\ace\addons\my_module\config.cpp`) and allows you selectivly reload config files. - -If you need to add/remove files, then you'll need to run build.py again without the game running, and restart. That is all that is required to add new files to then further use in testing. diff --git a/documentation/feature/advanced-ballistics.md b/documentation/feature/advanced-ballistics.md deleted file mode 100644 index 78ec99ef17..0000000000 --- a/documentation/feature/advanced-ballistics.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -layout: wiki -title: Advanced Ballistics -description: The advanced ballistics module improves internal and external ballistics. -group: feature -category: realism -parent: wiki ---- - -## 1. Overview -The Advanced Ballistics module improves internal and external ballistics. - -## 1.1 Features -- Drag modelling based on real-world ballistic coefficients. -- Ambient air density (air pressure, temperature, humidity) affects drag. -- Wind affects drag and deflects the trajectory. -- Wind speed varies with altitude. -- Terrain features, buildings and other objects disrupt the wind. -- [Magnus effect](https://en.wikipedia.org/wiki/Magnus_effect) (spin drift) -- [Coriolis effect](https://en.wikipedia.org/wiki/Coriolis_effect) and [Eötvös effect](https://en.wikipedia.org/wiki/Eotvos_effect) (Earth rotation) -- Loss of stability during transonic flight. -- Variable muzzle velocity based on powder burn rate and barrel length. -- Bullet trace effect for supersonic bullets (light refraction due to air pressure waves). -- A protractor for quickly measuring the inclination angle. - -## 2. Usage - -### 2.1 Protractor -Press Ctrl+⇧ Shift+K while using a compatible weapon to toggle the protractor. The red line indicates the current inclination angle in degrees. The protractor will disappear if you lower or holster your weapon. - -## 3. Dependencies -`ace_ballistics`, `ace_weather`, `ace_modules` diff --git a/documentation/feature/ai.md b/documentation/feature/ai.md deleted file mode 100644 index 15d770395d..0000000000 --- a/documentation/feature/ai.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -layout: wiki -title: AI (Artificial Intelligence) -description: Config based changes to AI to ensure compatibility with advanced AI modifications -group: feature -category: realism -parent: wiki ---- - -## 1. Overview - -### 1.1 Adjusted AI skill values -The idea here is to reduce the AI's godlike aiming capabilities while retaining its high intelligence. The AI should be smart enough to move through a town, but also be 'human' in their reaction time and aim. - -*Note: All these values can still be adjusted via scripts, these arrays just change what 0 & 1 are for `setSkill`.* - -### 1.2 Firing in burst mode -AI will now use the automatic mode of their weapons at short distances, instead of always relying on firing single shots in quick succession. - -### 1.3 Longer engagement ranges -The maximum engagement ranges are increased: AI will fire in bursts with variable lengths on high ranges of 500 - 700 meters, depending on their weapon and optic. - -### 1.4 No dead zones in CQB -Some weapons had minimum engagement ranges. If you were as close as 2 meters to an AAF soldier, he wouldn't open fire, because the AI couldn't find any valid fire mode for their weapon. ACE3 removes this behaviour mostly notable in CQB by adding a valid firing mode. - -### 1.5 No scripting -All changes of ACE3 AI are config based to ensure full compatibility with advanced AI modifications like e.g. "ASR AI 3". - -## 2. Dependencies - -`ace_common` diff --git a/documentation/feature/aircraft.md b/documentation/feature/aircraft.md deleted file mode 100644 index 43753a8d25..0000000000 --- a/documentation/feature/aircraft.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -layout: wiki -title: Aircraft -description: Aircraft overhaul -group: feature -category: realism -parent: wiki ---- - -## 1. Overview - -### 1.1 Adjusted flight behaviour -Changes the flight behaviour of various aircraft. - -### 1.2 Various adjustments to aircraft and gunships munitions -- Higher capacity magazines for the Comanche. -- Gatling rate of fire (ROF) increased. -- AP rockets have less splash damage. - -### 1.3 Missile lock warnings -Adds missile-lock warning systems to helicopters and planes based on the equivalent real life capabilities. - -### 1.4 Semi-automatic flare mode -Adds the semi-automatic flare mode known from Arma 2. The key to switch modes existed in Arma 3's key settings, but wasn't operational until now. - -### 1.5 Ejecting from pilot and copilot seats -Pilots and copilots of all helicopters can now eject. - -### 1.6 Laser marker for Wildcat -Adds a laser marker to the copilot seat of the Wildcat. - -### 1.7 HUD for AH-9 -Adds a HUD to the AH-9 based on the Comanche's HUD. - -## 2. Usage - -### 2.1 Switching flare modes -Press Ctrl+C to switch between flare firing modes (Arma 3 default key bind `countermeasure mode`) - -## 3. Dependencies - -`ace_common` diff --git a/documentation/feature/apl.md b/documentation/feature/apl.md deleted file mode 100644 index 3be2d6c243..0000000000 --- a/documentation/feature/apl.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: wiki -title: APL -description: assets under APL license -group: feature -category: equipment -parent: wiki ---- - -## 1. Overview - -This folder regroups all assets released under the APL license. - -## 2. Dependencies - -`ace_main` diff --git a/documentation/feature/atragmx.md b/documentation/feature/atragmx.md deleted file mode 100644 index c5ead1cf00..0000000000 --- a/documentation/feature/atragmx.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -layout: wiki -title: ATragMX -description: -group: feature -category: equipment -parent: wiki ---- - -## Overview - -### Sub-feature 1 -Short description of sub-feature 1. - -### Sub-feature 2 -Short description of sub-feature 2. - - -## Usage - -Short overview of how to use the feature, e.g. menu options, key bindings, -instructions. May not apply to all modules. - - -## Dependencies - -`ace_common`, `ace_weather` diff --git a/documentation/feature/attach.md b/documentation/feature/attach.md deleted file mode 100644 index 6f291a99ad..0000000000 --- a/documentation/feature/attach.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -layout: wiki -title: Attach -description: Allow players to attach items to vehicles or themselves -group: feature -category: interaction -parent: wiki ---- - -## 1. Overview - -### 1.1 Attach items to uniform -Allows players to attach IR grenades and chemlights to themselves. - -### 1.2 IR Strobe -Adds an attachable IR strobe, which is only visible using night vision devices and offers better visibility than IR grenades. - -## 2. Usage - -### 2.1 Attaching to yourself -- Use Self Interact Ctrl+⊞ Win (ACE3 default). -- Select `Equipment`. -- Select `Attach item`. -- Select which item you want to attach. -- Repeat the process to detach. - -### 2.2 Attaching to a vehicle -- Interact with the vehicle ⊞ Win (ACE3 default). -- Select `Attach item`. -- Select your item and follow the instructions on the screen. -- Repeat the process to detach. - -## 3. Dependencies - -`ace_interaction` diff --git a/documentation/feature/backpacks.md b/documentation/feature/backpacks.md deleted file mode 100644 index b86f801770..0000000000 --- a/documentation/feature/backpacks.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -layout: wiki -title: Backpacks -description: Notifies a player when his backpack is opened -group: feature -category: equipment -parent: wiki ---- - -## 1. Overview - -### 1.1 Zipping sounds -A zipper sound is played when someone opens your backpack. - -## 2. Dependencies - -`ace_common` diff --git a/documentation/feature/ballistics.md b/documentation/feature/ballistics.md deleted file mode 100644 index 70552a8d25..0000000000 --- a/documentation/feature/ballistics.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -layout: wiki -title: Ballistics -description: Realistic ballistic improvements -group: feature -category: realism -parent: wiki ---- - -## 1. Overview - -### 1.1 Realistic ballistics -Changes include adjusted muzzle velocity, air friction and dispersion based on real life values. - -### 1.2 Realistic silencers and subsonic ammunition -Silencers no longer decrease the muzzle velocity and are generally less effective when used with normal ammunition. They now only remove the muzzle blast and flash. To prevent the crack caused by supersonic projectiles, ACE3 introduces subsonic ammunition for the 7.62mm caliber. This is also fully compatible with AI. - -### 1.3 Armor piercing ammunition -Armor piercing rounds have higher penetration values against light armored targets and other obstacles on the battlefield. Their drawback is a slightly decreased man-stopping power. AP rounds are available in multiple calibers including 5.56mm and 7.62mm. - -### 1.4 IR-Dim tracer ammunition -IR-Dim ammunition is similar to tracer rounds, but these tracers are only visible using night vision devices. - -### 1.5 M118 long range ammunition -The M14 EBR now uses ammunition with decreased muzzle velocity and air friction to improve precision and energy retention at long ranges. - -### 1.6 Fully config-based -This module applies configuration changes only and does not decrease game performance. - -## 2. Dependencies - -`ace_common` diff --git a/documentation/feature/captives.md b/documentation/feature/captives.md deleted file mode 100644 index 4cb495d810..0000000000 --- a/documentation/feature/captives.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -layout: wiki -title: Captives -description: System for taking and handling captives -group: feature -category: interaction -parent: wiki ---- - -## 1. Overview - -### 1.1 Take captives -Introduces a captivity system. - -### 1.2 Load and unload captives into / from vehicles -You can load and unload captives from vehicles using ACE3 interactions. - -### 1.3 Frisk captives -You can frisk a restrained captive. - -### 1.4 Surrendering -Allows players to surrender. It renders the unit unable to move and with the hands behind its head. When surrendered AI won't fire. - -## 2. Usage - -### 2.1 Taking a unit into captivity -- You need `Cable Tie`. -- Approach the unit and Interact ⊞ win (ACE3 default). -- The interaction is located around the hands in the form of a handcuffs icon. -- Repeat to release. - -### 2.2 Escorting a captive -- Interact with the captive ⊞ win. -- Select the `Escort prisoner` option. -- To stop escorting, use the mousewheel and select `Release` or use Self Interaction Ctrl+⊞ win and select `Release`. - -### 2.3 Loading and unloading a captive into/from a vehicle -- Escort the captive. -- Approach the vehicle you wish to load the captive unit into. -- Interact with the vehicle ⊞ win and select `Load captive`. -- To unload the captive interact with the vehicle ⊞ win -- Select `Passengers`. -- Select the captive. -- Select `Unload captive`. - -## 3. Dependencies - -`ace_interaction` diff --git a/documentation/feature/common.md b/documentation/feature/common.md deleted file mode 100644 index 7a7c25166e..0000000000 --- a/documentation/feature/common.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -layout: wiki -title: Common -description: Common functions and systems used by most other components. -group: feature -category: general -parent: wiki ---- - -## 1. Overview - -Common functions and systems used by most other components. - -## 2. Dependencies - -`ace_main` - -*Note: The Common module is required by nearly all other modules. Do NOT remove it!* diff --git a/documentation/feature/concertina-wire.md b/documentation/feature/concertina-wire.md deleted file mode 100644 index 6e462438b9..0000000000 --- a/documentation/feature/concertina-wire.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -layout: wiki -title: Concertina Wire -description: -group: feature -category: equipment -parent: wiki ---- - -## 1. Overview - -A concertina wire is a type of barbed wire formed in large coils that can be expanded to form obstacles, in ACE3 any vehicle making contact with it gets its tires destroyed. - -## 2. Usage - -### 2.1 Deploying the concertina wire -- Approach the concertina coil and select ⊞ Win (ACE3 default) -- Select `Deploy concertina wire`. -- Follow the instructions on screen. - -## 3. Dependencies - -`ace_apl` , `ace_interaction` diff --git a/documentation/feature/dagr.md b/documentation/feature/dagr.md deleted file mode 100644 index 24f80cf0cf..0000000000 --- a/documentation/feature/dagr.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -layout: wiki -title: Dagr -group: feature -category: equipment -parent: wiki ---- - -## 1. Overview - -Adds the Defense Advanced GPS Receiver. - -## 3. Dependencies - -`ace_weather` diff --git a/documentation/feature/difficulties.md b/documentation/feature/difficulties.md deleted file mode 100644 index 0bc6e7e6da..0000000000 --- a/documentation/feature/difficulties.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -layout: wiki -title: Difficulties -description: Tweak to Vanilla hardest difficulty -group: feature -category: realism -parent: wiki ---- - -## 1. Overview - -### 1.1 Elite mode adjustments -Adjusts the default settings of the hardest difficulty to better resemble Arma 2 settings (no crosshair, stat screen, death messages). - -## 2. Dependencies - -`ace_common` diff --git a/documentation/feature/disarming.md b/documentation/feature/disarming.md deleted file mode 100644 index d7b043ab24..0000000000 --- a/documentation/feature/disarming.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -layout: wiki -title: Disarming -description: -group: feature -category: interaction -parent: wiki ---- - -## 1. Overview - -### 1.1 Searching through a unit's inventory -You can search the inventory and disarm captured or unconscious units. - -## 2. Usage - -### 2.1 Searching and disarming -- Interact with the captured or unconscious unit ⊞ Win (ACE3 default key bind `Interaction Key`). -- Select `Open inventory`. -- Drag & Drop the items you wish to remove from the unit. - -## 3. Dependencies - -`ace_interaction` diff --git a/documentation/feature/disposable.md b/documentation/feature/disposable.md deleted file mode 100644 index 16e7a5ca71..0000000000 --- a/documentation/feature/disposable.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: wiki -title: Disposable -description: Makes NLAW disposable and allows addons to do the same -group: feature -category: equipment -parent: wiki ---- - -## 1. Overview - -The NLAW is shoulder fired and disposable, firing just once before being needed to be disposed of. This feature makes the NLAW disposable and provides the tools for other addons to do the same. - -## 2. Dependencies - -`ace_common` diff --git a/documentation/feature/dragging.md b/documentation/feature/dragging.md deleted file mode 100644 index a93089cf3b..0000000000 --- a/documentation/feature/dragging.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -layout: wiki -title: Dragging -description: Adds the option to drag and carry units and objects -group: feature -category: interaction -parent: wiki ---- - -## 1. Overview - -This adds the option to drag or carry units or objects. - -## 2. Usage - -### 2.1 Dragging / Carrying units and objects -- You can only drag or carry an unconscious unit. -- Interact with the unit or object ⊞ Win (ACE3 default key bind `Interact Key`). -- Select `Drag` or `Carry`. -- To release, use the mouse wheel and select `Release` or use Self Interaction Ctrl+⊞ Win and select `Release`. - -## 3. Dependencies - -`ace_interaction` diff --git a/documentation/feature/explosives.md b/documentation/feature/explosives.md deleted file mode 100644 index 214ec7dcab..0000000000 --- a/documentation/feature/explosives.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -layout: wiki -title: Explosives -description: Adds numerous improvements to using and handling explosives -group: feature -category: interaction -parent: wiki ---- - -## 1. Overview - -### 1.1 Advanced explosives placement -Enables more precise placement of explosives. - -### 1.2 Numerous trigger types -Offers different trigger types, like clackers and dead man switches. - -### 1.3 Attach explosives to vehicles -Enables attaching explosives to vehicles. - -## 2. Usage - -### 2.1 Placing explosives -- Use self interaction Ctrl+⊞ Win (ACE3 default key bind `Self Interaction Key`). -- Select `Explosives`. -- Choose your explosive type and follow the instructions on the screen. - -### 2.2 Arming and detonating explosives -- Interact with the explosive ⊞ Win (ACE3 default key bind `Interact Key`). -- Choose the arming method. -- For clackers use Self Interaction `Explosives` → `Detonate` and choose the corresponding Firing Device. - -### 2.3 Defusing explosives -- A `Defusal Kit` is required. -- Interact with the explosive ⊞ Win. -- Select `Disarm`. -- You are safe to pick it up after the action has completed. - -## 3. Dependencies - -`ace_interaction` diff --git a/documentation/feature/fcs.md b/documentation/feature/fcs.md deleted file mode 100644 index bf176179e5..0000000000 --- a/documentation/feature/fcs.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -layout: wiki -title: FCS (Fire Control System) -description: -category: equipment -group: feature -parent: wiki ---- - -## 1. Overview - -### 1.1 Fire control system -Offers a custom fire control system for tanks and helicopters. It enables engaging stationary and moving targets. - -### 1.2 Manual lasing targets -Changes the default rangefinders, including those in vehicles, to require manual lasing. - -### 1.3 Air burst ammunition -Anti air cannons can now use airburst ammunition. It will explode on the FCS' zeroed in range. - -## 2. Usage - -### 2.1 Engaging moving targets -- Place the crosshair on the enemy vehicle. -- Press and hold Tab ↹ (ACE 3 default key bind `Lock Target [Hold]`) and follow the target for about 2 seconds. -- Release Tab ↹. -- The optic is now adjusted sideways to ensure a hit. - -### 2.2 Ranging stationary targets -- Place the crosshair on the object to range. -- Tap Tab ↹ -- The optic is now adjusted. - -## 3. Dependencies - -`ace_interaction` diff --git a/documentation/feature/finger.md b/documentation/feature/finger.md deleted file mode 100644 index 3943980a97..0000000000 --- a/documentation/feature/finger.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -layout: wiki -title: Finger -description: Finger pointing -group: feature -category: realism -parent: wiki ---- - -## 1. Overview -Allows players to point in a direction with their fingers, when they do so people around (4m by default) can see a big circle in the pointed direction. - - -## 2. Usage - -### 2.1 How to point things -- Press ⇧ Shift+` (QWERTY and AZERTY layouts) - -## 3. Dependencies - -`ace_common` diff --git a/documentation/feature/flashsuppressors.md b/documentation/feature/flashsuppressors.md deleted file mode 100644 index ba59dd0907..0000000000 --- a/documentation/feature/flashsuppressors.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -layout: wiki -title: Flash Suppressors -description: -group: feature -category: equipment -parent: wiki ---- - -## 1. Overview - -This adds the ability to use the flash suppressors that are already in game but not accessible. - -Flash suppressors are devices that reduce the muzzle flash while firing by cooling or dispersing the burning gases that exit the muzzle. Its intent is to reduce the chances that the shooter will be blinded in low-light shooting conditions as well as reducing the intensity of the flash visible to the enemy. - -## 2. Dependencies - -`ace_common` diff --git a/documentation/feature/fonts.md b/documentation/feature/fonts.md deleted file mode 100644 index 198e3f8bd0..0000000000 --- a/documentation/feature/fonts.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: wiki -title: Fonts -group: feature -category: general -parent: wiki ---- - -## 1. Overview - -This module adds a font that will be used in the future, characters with equal widths to make it easy to structure correctly. This is **NOT** present in 3.1.1 because of a bug even if it's present in the sources. - - -## 3. Dependencies - -`ace_main` diff --git a/documentation/feature/frag.md b/documentation/feature/frag.md deleted file mode 100644 index 406b6f65ad..0000000000 --- a/documentation/feature/frag.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: wiki -title: Frag -description: -group: feature -category: realism -parent: wiki ---- - -## 1. Overview - -Adds a shrapnel system for explosives. - -## 2. Dependencies - -`ace_common` diff --git a/documentation/feature/gforces.md b/documentation/feature/gforces.md deleted file mode 100644 index be58b966c1..0000000000 --- a/documentation/feature/gforces.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: wiki -title: G-Forces -description: -group: feature -category: realism -parent: wiki ---- - -## 1. Overview - -Adds G-force induced tunnel vision and unconsciousness. - -## 2. Dependencies - -`ace_common` diff --git a/documentation/feature/goggles.md b/documentation/feature/goggles.md deleted file mode 100644 index 945df87a3e..0000000000 --- a/documentation/feature/goggles.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -layout: wiki -title: Goggles -description: -group: feature -category: equipment -parent: wiki ---- - -## 1. Overview - -### 1.1 Visual Effects for eyewear -Adds color tint to sunglasses and other eyewear. Causes raindrops to appear on the screen in rain. Causes dirt to appear on the screen when dirt is kicked up nearby (e.g. explosions, rotor wash, bullet impacts, muzzle blast). - - -## 2. Usage - -### 2.1 Cleaning your goggles -- To clean your goggles press SHIFT + ALT + T(ACE3 deault key bind `Wipe goggles`) - -## 3. Dependencies - -`ace_common` diff --git a/documentation/feature/grenades.md b/documentation/feature/grenades.md deleted file mode 100644 index f5f4e101ce..0000000000 --- a/documentation/feature/grenades.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -layout: wiki -title: Grenades -description: -group: feature -category: equipment -parent: wiki ---- - -## 1. Overview - -### 1.1 Throw modes -Provides different modes for throwing grenades (high throw, precision throw and drop mode). - -### 1.2 Hand flares -Adds throwable hand flares in the colors white, red, green and yellow. Additionally buffs existing flares by making them brighter and last longer. - -### 1.3 M84 stun grenade -Adds the M84 stun grenade. The stun effect will also affect AI. - -## 2. Usage - -### 2.1 Switching between throw modes -- Press 8 (ACE3 default key bind `Switch Grenade Mode`) - -### 2.2 Switching between grenades -- Press 6 (ACE3 default key bind `Select frag`) to switch between `LETHAL` grenades -- Press 7 (ACE3 default key bind `Select non-frag`) to switch between `NON LETHAL` grenades - -## 3. Dependencies - -`ace_common` diff --git a/documentation/feature/hearing.md b/documentation/feature/hearing.md deleted file mode 100644 index f935a6286c..0000000000 --- a/documentation/feature/hearing.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -layout: wiki -title: Hearing -description: -group: feature -category: realism -parent: wiki ---- - -## 1. Overview - -### 1.1 Hearing damage simulation -Introduces hearing damage caused by nearby explosions and large-caliber weapons. - -### 1.2 Earplugs -Adds earplugs to mitigate that effect. Soldiers with high caliber weapons or -missile launchers will be equipped with those, but remember to put them in. - -### 1.3 Helmets -Some types of helmets can mitigate hearing damage also (ie. crewman helmet, pilot helmet etc.). - -## 2. Usage - -### 2.1 Equipping earplugs -- For this you need the `Earplugs` item. -- Press the self interaction key Ctrl + ⊞ Win (ACE3 default key bind `Self Interaction Key`). -- Select `Equipment`. -- Select `Earplugs in`. -- Same method to remove them but the option is `Earplugs out`. -- Note: you're able to re-use earplugs. - -## 3. Dependencies - -`ace_interaction` diff --git a/documentation/feature/hitreactions.md b/documentation/feature/hitreactions.md deleted file mode 100644 index 002cd2b7c6..0000000000 --- a/documentation/feature/hitreactions.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -layout: wiki -title: Hit Reactions -description: -group: feature -category: realism -parent: wiki ---- - -## 1. Overview - -### 1.1 Falling under fire -If a unit is shot while running it falls to the ground in a prone position, the area where the shot lands does not matters. -Note that the shot needs to inflict a certain amount of damage to make the unit fall, a small cut won't make the unit stumble. - -## 2. Dependencies - -`ace_common` diff --git a/documentation/feature/huntIR.md b/documentation/feature/huntIR.md deleted file mode 100644 index bd4841c184..0000000000 --- a/documentation/feature/huntIR.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -layout: wiki -title: HuntIR -group: feature -category: equipment -parent: wiki ---- - -## 1. Overview - -### 1.1 The HuntIR -The **H**igh altitude **U**nit **N**avigated **T**actical **I**maging **R**ound (HuntIR) is designed to be fired from a grenade launcher. After being fired in the air the in built parachute will be deployed and the IR CMOS camera will activate, providing a video stream until it touches the ground or get shot down. - -## 2. Usage -NOTE: the HuntIR round doesn't work with modded weapons without a compatibility fix made either by the ACE3 team or the mod team. - -### 2.1 Using the HuntIR -- To be able to connect to the IR CMOS camera you'll need a `HuntIR monitor`. -- Fire the HuntIR round as high as possible over the area you want to observe. -- Open the `HuntIR monitor`. - - To open the `HuntIR monitor` self interact Ctrl + ⊞ Win (ACE3 default) - - Select `Equipment`. - - Select `Activate HuntIR monitor`. -- You now have control of the IR CMOS camera to close the monitor press ESC or ⊞ Win - -### 2.2 IR CMOS camera controls - -Shortcut | Action ------------- | ------------- -A | Lower zoom level -D | Increase zoom level -N | Toggle NV and TI modes -S | Next camera -W | Previous camera - | Rotate camera anticlockwise -| Rotate camera clockwise - | Raise camera - | Lower camera -R | Reset camera - -## 3. Dependencies - -`ace_common` diff --git a/documentation/feature/interact-menu.md b/documentation/feature/interact-menu.md deleted file mode 100644 index 96364c522b..0000000000 --- a/documentation/feature/interact-menu.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -layout: wiki -title: Interact Menu -description: -group: feature -category: interaction -parent: wiki ---- - -## 1. Overview - -This handles the interaction layer of ACE3. - -## 2. Dependencies - -`ace_common` - -*Note: The Interact Menu module is required by most of the other modules. Do NOT remove it!* diff --git a/documentation/feature/interaction.md b/documentation/feature/interaction.md deleted file mode 100644 index 3916afede2..0000000000 --- a/documentation/feature/interaction.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -layout: wiki -title: Interaction -description: -group: feature -category: interaction -parent: wiki ---- - -## 1. Overview - -This provides interaction options between units, vehicles, buildings and objects. -Some of the zeus actions are also available (while in zeus) in the interaction menu (remote control, group management). - -## 2. Usage - -### 2.1 Opening the self interaction menu -- Press and hold Ctrl + ⊞ Win (ACE3 default). - -### 2.2 Opening the interaction menu -- Press and hold ⊞ Win (ACE3 default). - -### 2.3 Using the zeus interactions -- Units - - Select the unit(s). - - Open the interaction menu. - - Select `Units`. - - Select the stance (works for multiple units) or remote control. - -- Groups - - Select a group by clicking on the icon hovering above it's squad leader, to select multiple squads press and hold Ctrl. - - Open the interaction menu. - - Select `Groups`. - - From here you can select the speed / formation / behavior of all the units of the group(s). - -- Waypoints - - Select a waypoint by clicking on it, same as above press and hold Ctrl to select multiple. - - Open the interaction menu. - - Select `Waypoints`. - - From here you can modify the speed / formation / behavior of the units / groups that are moving to that waypoint. - -## 3. Dependencies - -`ace_interact_menu` - -*Note: The Interaction module is required by most of the other modules. Do NOT remove it!* diff --git a/documentation/feature/inventory.md b/documentation/feature/inventory.md deleted file mode 100644 index f4d4dcfd2b..0000000000 --- a/documentation/feature/inventory.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -layout: wiki -title: Inventory -description: -group: feature -category: interaction -parent: wiki ---- - -## 1. Overview - -### 1.1 Resized inventory UI -Makes the inventory dialog bigger and increases the number of items that can be seen in the list at once. - -## 2. Usage - -### 2.1 Changing the size of the UI -- Press Escape. -- Click on `ACE OPTIONS` on the top left corner of the screen. -- Click on `Make Inventory Display Bigger`. -- Choose the size desired on the right drop down menu. -- Press the `Close` button, your changes are automatically saved. - -## 3. Dependencies - -`ace_common` diff --git a/documentation/feature/javelin.md b/documentation/feature/javelin.md deleted file mode 100644 index baa1549e7e..0000000000 --- a/documentation/feature/javelin.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -layout: wiki -title: Javelin -description: -group: feature -category: equipment -parent: wiki ---- - -## 1. Overview - -### 1.1 Improved locking -The locking capabilities of the Titan and Javelin got improved, you can now lock on anything that has a thermal signature, including houses. - -### 1.2 Fire mode switching -The Titan / Javelin now posses the ability to be used in top down attack or direct. - -## 2. Usage - -### 2.1 Locking with the Titan / Javelin -- For this feature you need to have a compatible launcher. -- Fully zoom in with the launcher. -- Switch to thermals N (Arma 3 default key bind `Night vision`). -- While keeping your aim steadily on target press and hold Tab ↹ (ACE3 default key bind `Lock Target [Hold]`). -- When the sound changes and a cross appears on the screen the target is locked and you're able to fire. - -### 2.2 Switching fire mode -- For this feature you need to have a compatible launcher. -- When aiming with your launcher press Ctrl + Tab ↹. -- On the right side of the screen (for most launchers) you should see that `TOP`is now illumiated in green which means that your missile will be fired in top down mode. - -## 3. Dependencies - -`ace_main`, `ace_common`, `ace_missileguidance` diff --git a/documentation/feature/kestrel4500.md b/documentation/feature/kestrel4500.md deleted file mode 100644 index 3769385c5e..0000000000 --- a/documentation/feature/kestrel4500.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -layout: wiki -title: Kestrel 4500 -description: -group: feature -category: equipment -parent: wiki ---- - -## Overview - -### Sub-feature 1 -Short description of sub-feature 1. - -### Sub-feature 2 -Short description of sub-feature 2. - - -## Usage - -Short overview of how to use the feature, e.g. menu options, key bindings, -instructions. May not apply to all modules. - - -## Dependencies - -`ace_common`, `ace_weather` diff --git a/documentation/feature/laser-selfdesignate.md b/documentation/feature/laser-selfdesignate.md deleted file mode 100644 index cdc35914c5..0000000000 --- a/documentation/feature/laser-selfdesignate.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: wiki -title: Laser Self-Designate -description: -group: feature -category: equipment -parent: wiki ---- - -## 1. Overview - -Allows gunners to lase their own targets. See [Feature: "FCS"]({{ site.productionUrl }}/wiki/feature/fcs.html) for more information. - -## 2. Dependencies - -`ace_laser` diff --git a/documentation/feature/laser.md b/documentation/feature/laser.md deleted file mode 100644 index 27718d6d61..0000000000 --- a/documentation/feature/laser.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: wiki -title: Laser -description: -group: feature -category: realism -parent: wiki ---- - -## 1. Overview - -Contains various functions necessary for the realistic portrayal of laser mechanics in other components. - -## 2. Dependencies - -`ace_common` diff --git a/documentation/feature/laserpointer.md b/documentation/feature/laserpointer.md deleted file mode 100644 index 1e962919c9..0000000000 --- a/documentation/feature/laserpointer.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -layout: wiki -title: Laser Pointer -description: Switching laser modes, daylight lasers -group: feature -category: equipment -parent: wiki ---- - -## 1. Overview - -### 1.1 Visible light laser -ACE3 adds a visible laser attachment for weapons. This feature is compatible with BI's lasers as well as supported modded ones. - -## 2. Usage - -### 2.1 Switching laser mode -- For this feature you need to have a compatible side attachment. -- Press Ctrl + L (ACE3 default key bind `Switch Laser / IR Laser`). -- A hint indicating the mode switch will appear in the top right corner. - -## 3. Dependencies - -`ace_common` diff --git a/documentation/feature/logistics-uavbattery.md b/documentation/feature/logistics-uavbattery.md deleted file mode 100644 index af57c4b2a2..0000000000 --- a/documentation/feature/logistics-uavbattery.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -layout: wiki -title: Logistics - UAV Battery -description: UAV recharging -group: feature -category: equipment -parent: wiki ---- - -## 1. Overview - -### 1.1 Rechargeable darters. -Adds an item `ACE_UAVBattery` that allows refuelling / recharging of the "Darter" quad-copter UAVs. - -## 2. Usage - -### 2.1 Recharging the darter -- For this you need a `UAV battery` and the UAV needs to be a quad-copter. -- Interact with the UAV ⊞ Win (ACE3 default key bind `Interact Key`) -- Select `Recharge` - -## 3. Dependencies - -`ace_interaction` diff --git a/documentation/feature/logistics-wirecutter.md b/documentation/feature/logistics-wirecutter.md deleted file mode 100644 index 9e180c9b62..0000000000 --- a/documentation/feature/logistics-wirecutter.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -layout: wiki -title: Logistics - Wirecutter -description: -group: feature -category: equipment -parent: wiki ---- - -## 1. Overview - -### 1.1 Wirecutter -Adds an item `ACE_wirecutter` that allows cutting of fences in Arma 3 and AllInArma maps. - -## 2. Usage - -### 2.1 Using the wirecutter -- For this you need a `Wirecutter`. -- Approach the fence you want to cut. -- Press the interaction key ⊞ Win (ACE3 default key bind `Interaction Key`). -- Find the interaction point and select `Cut Fence` (the only option). - -## 3. Dependencies - -`ace_interaction` diff --git a/documentation/feature/magazinerepack.md b/documentation/feature/magazinerepack.md deleted file mode 100644 index 870281693c..0000000000 --- a/documentation/feature/magazinerepack.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -layout: wiki -title: Magazine Repack -description: Repacking magazines, and maybe your bananas. -group: feature -category: realism -parent: wiki ---- - -## 1. Overview - -### 1.1 Repacking magazines -Adds the ability to repack magazines of the same type. - -## 2. Usage - -### 2.1 Repacking -- For this you need multiple half empty mags of the same type. -- Press the self interaction button Ctrl + ⊞ Win (ACE3 default key bind `Self Interaction Key`). -- Select `Repack magazines`. -- Select the type of magazines you want to repack. - -## 3. Dependencies - -`ace_interaction` diff --git a/documentation/feature/main.md b/documentation/feature/main.md deleted file mode 100644 index 668cfb531f..0000000000 --- a/documentation/feature/main.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -layout: wiki -title: Main -description: main module -group: feature -category: general -parent: wiki ---- - -## 1. Overview - -Main module which acts as the ACE3 core module. - -## 2. Dependencies - -`Arma 3` and `CBA_A3` - -*Note: The Main module is required by all other modules. Do not remove it!* diff --git a/documentation/feature/map.md b/documentation/feature/map.md deleted file mode 100644 index 9e45c5a359..0000000000 --- a/documentation/feature/map.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -layout: wiki -title: Map -description: Map improvements -group: feature -category: realism -parent: wiki ---- - -## 1. Overview - -### 1.1 Map styling -Better map styling (contours, legend, hiding bushes and trees, etc). - -### 1.2 Map zoom level (optional) -The mission maker / server owner can restrict the maximum zoom level of the map. - -### 1.3 Map shake (optional) -While walking your map will move slightly. - -### 1.4 Map illumination (optional) -The map illumination will be the same as your surroundings meaning that in a dark night you'll either need a light source or NVGs to see your map. - -### 1.5 Blufor tracker (optional) -The Blufor tracker marks the position of your faction's group leaders on the map. - - -## 2. Usage - -- IMPORTANT NOTICE: The (optional) features above CAN be restricted by the mission maker / server owner. User experience may vary. - -## 3. Dependencies - -`ace_interaction` diff --git a/documentation/feature/maptools.md b/documentation/feature/maptools.md deleted file mode 100644 index 0e99b9feef..0000000000 --- a/documentation/feature/maptools.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -layout: wiki -title: Map Tools -description: Map tools, a roamer and pens -group: feature -category: equipment -parent: wiki ---- - -## 1. Overview - -### 1.1 Line drawing -This adds the possibility to draw accurate lines on the map screen. - -### 1.2 Map tools -This adds map tools that can be used to measure distances between two points or bearings on the map. - -### 1.3 GPS on map -If you are equipped with a vanilla GPS it will be shown on the map. (You don't need the map tools in your inventory for this.) - -## 2. Usage - -### 2.1 Using map tools -- For this you need to have `Map Tools`. -- Open the map M (Arma 3 default key bind `Map`). -- Press the self interaction key Ctrl + ⊞ Win (ACE3 default key bind `Self Interaction Key`). -- Select `Map tools`. -- Select the type of tools you want to use. -- Note that you can drag the Roamer (map tool) around with LMB and rotate it with Ctrl + LMB. - -### 2.2 Drawing lines -- To draw lines `Map Tools` are not required. -- Press ALT + LMB to start the line, left click again to end it. -- To delete a line press Del around the center of the line. -- Note that you can change the color of the lines by clicking on one of the coloured column on top of the screen (While the map is opened) - -## 3. Dependencies - -`ace_interaction` diff --git a/documentation/feature/markers.md b/documentation/feature/markers.md deleted file mode 100644 index 73560dd99f..0000000000 --- a/documentation/feature/markers.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -layout: wiki -title: Markers -description: improved markers -group: feature -category: interaction -parent: wiki ---- - -## 1. Overview - -### 1.1 Improved marker placement -Expands the "Insert Marker" menu and allows to rotate map markers. Shows the currently selected channel to prevent misplacement. - -## 2. Dependencies - -`ace_common` diff --git a/documentation/feature/medical-system.md b/documentation/feature/medical-system.md deleted file mode 100644 index 4bc0ae1557..0000000000 --- a/documentation/feature/medical-system.md +++ /dev/null @@ -1,292 +0,0 @@ ---- -layout: wiki -title: Medical System -description: ACE provide users with a more realistic medical system and comes in both a basic and advanced version. Both versions have overlap but each have their own unique characteristics. -group: feature -order: 4 -category: realism -parent: wiki ---- -**Disclaimer:** The documentation for the medical system being extremely long it's highly advised to use the table of contents at the top right corner of the page. - -## 1. Overview -ACE3 provides users with a more realistic medical system and comes in both a basic and an advanced version. This page will detail the differences between both systems and what they do as well as how to use them efficiently. - -### 1.1 Basic medical -ACE3's basic medical system is quite a bit more complex than Arma 3's default system, but not really difficult to grasp. ACE3 basic medical is a mixture between the ACE2 and AGM medical systems. -All interactions in the medical system are done with the interaction menu. Non-medics can - by default - not perform all actions (Epinephrine and IVs) and their actions take more time as when performed by trained medics. - -### 1.2 Revive system -The revive system lets you bring downed units back up. -Upon receiving a deadly amount of damage a unit will fall unconscious for a determined amount of time. In that time a medic will need to treat them and give them epinephrine to bring them back up. - -### 1.3 Advanced medical - -The advanced medical system provides a more complex and detailed medical simulation and is based off the CSE CMS. It focuses on a more realistic model for injuries and treatments, thus resulting in a more important and prominent role for combat medics, and a bigger incentive to avoid getting shot. - -The system behind advanced medical is designed to attempt to mimic important parts of the human body, as well as react to any injuries sustained and treatments applied in a realistic manner. The available treatments and supplies in advanced medical are based off the Tactical Combat Casualty Care (TCCC) guidelines, which are the same guidelines used by real-life combat medics around the world. - -Besides the 4 elements introduced by basic medical, advanced introduces the following: - -- More detailed wound system. -- Accurate blood loss based upon sustained injuries. -- Vitals, including heart rate and blood pressure. -- Cardiac Arrest. -- Various treatment methods such as CPR, different kinds of IVs and a working tourniquet. -- A basic medication simulation. - -## 2. Usage - -### 2.1 Basic - -When hit, units start to lose blood depending on the severity of their wounds. Once the level of blood falls below a certain threshold, the unit will fall unconscious and eventually die. Units will also fall unconscious when sustaining large amounts of damage at once or from high amounts of pain. - -#### 2.1.1 Wounds, bandages and medications - - -##### 2.1.1.1 Wounds - -It's pretty straightforward compared to advanced, you only have two types of wounds. - -- Yellow: you need one bandage to heal it. -- Red: you need two bandages to heal it. - -##### 2.1.1.2 Bandages - -- All of them have the same effect. - -##### 2.1.1.3 Tourniquet - -- Serves no use in basic - -##### 2.1.1.4 IVs - -IV | Effect ----------- | ---------- | -Saline | Serves no use in basic -Plasma | Serves no use in basic -Blood | Restores the blood of the patient - -Use the appropriate amount depending on the situation (low / heavy loss of blood) (250, 500 or 1 000 mL) - - -##### 2.1.1.5 Autoinjectors - -Autoinjector | Effect ----------- | ---------- | -Morphine | Removes pain -Epinephrine | Wakes up the patient -Atropine | Serves no use in basic - -#### 2.1.2 Treating the patient - -- **Step 1:** Is the patient responsive? - - **Yes:** Ask him if he has wounds / he is in pain. - - **No:** Go to step 2. - - -- **Step 2:** Is the patient wounded? - - **Yes:** Treat the wounds and go to step 3. - - **No:** Skip this step. - - -- **Step 3:** Is the patient in pain? - - **Yes:** Give him morphine. - - **No:** Skip this step. - - -- **Step 4:** Did the patient lose blood? - - **Yes:** Give blood via IV. - - **No:** Go to step 5. - - **No and patient responsive:** You're done. - - -- **Step 5** - - If at this point the patient is still not back on its feet it's time to use an epinephrine autoinjector. - -#### 2.1.3 Additional informations - -- If the revive system is in place your character will not die until the revive timer is at 0. Even if a tank shoots your ass off an epinephrine shot will bring you back up after your wounds are treated. (The timer is invisible and may vary from mission to mission, it also depends on the amount of lives remaining you have.) -- You can't do an overdose in basic. - -### 2.2 Advanced - -Same as with basic, when hit an injury is sustained. Different though is that the type of injury and the severity of it are based upon how the damage was done and what caused it. This affects both blood loss and immediate consequences, such as being knocked out or being killed right away. When a player has sustained an injury, this will be indicated by flashing red on the screen; this means the player is bleeding. - -#### 2.2.1 Wounds, bandages and medications - - -##### 2.2.1.1 Abrasions (or scrapes) - -- They occur when the skin is rubbed away by friction against another rough surface (e.g. rope burns and skinned knees). -- Sources: falling, rope burn, vehicle crashes. -- Effects: pain - extremely light, bleeding - extremely slowly. - -##### 2.2.1.2 Avulsions - -- Occur when an entire structure or part of it is forcibly pulled away, such as the loss of a permanent tooth or an ear lobe. Explosions, gunshots, and animal bites may cause avulsions. -- Sources: explosions, vehicle crashes, grenades, artillery shells, bullets, backblast, bites. -- Effects: pain - extremely high, bleeding - extremely fast (depends on wound size). - -##### 2.2.1.3 Contusions - -- Also called bruises, these are the result of a forceful trauma that injures an internal structure without breaking the skin. Blows to the chest, abdomen, or head with a blunt instrument (e.g. a football or a fist) can cause contusions. -- Sources: bullets, backblast, punches, vehicle crashes, falling. -- Effects: pain - light, no bleeding. - -##### 2.2.1.4 Crush wounds - -- Occur when a heavy object falls onto a person, splitting the skin and shattering or tearing underlying structures. -- Sources: falling, vehicle crashes, punches. -- Effects: pain - light, bleeding - extremely slowly. - -##### 2.2.1.5 Cut wounds** - -- Slicing wounds made with a sharp instrument, leaving even edges. They may be as minimal as a paper cut or as significant as a surgical incision. -- Sources: vehicle crashes, grenades, explosions, artillery shells, backblast, stabs. -- Effects: pain - light, bleeding - speed depends on length and size of the wound. - - -##### 2.2.1.6 Lacerations (tears) - -- these are separating wounds that produce ragged edges. They are produced by a tremendous force against the body, either from an internal source or from an external source like a punch. -- Sources: vehicle crashes, punches. -- Effects: pain - light, bleeding - slow to medium speed (depends on wound size). - -##### 2.2.1.7 Velocity wound - -- They are caused by an object entering the body at a high speed, typically a bullet or small pieces of shrapnel. -- Sources: bullets, grenades, explosions, artillery shells. -- Effects: pain - extremely high, bleeding - medium speed (depends on wound size). - - -##### 2.2.1.8 Puncture wounds - -- Deep, narrow wounds produced by sharp objects such as nails, knives, and broken glass. -- Sources: stabs, grenades. -- Effects: pain - light, bleeding - slowly. - -In order to stop the bleeding, all bleeding injuries on every body part requires treatment. This is done by either applying a tourniquet to legs or arms as a temporary solution, or by using bandages to stop the bleeding as a more permanent fix. - - -##### 2.2.1.9 Bandages effectiveness - -Bandage | Abrasions | Avulsions | Contusions | Crush wounds | Cut wounds | Lacerations | Velocity wounds | Puncture wounds| ----------- | ---------- | ---------- | ---------- | ---------- | ---------- | ---------- | ---------- | ------- | -Basic | `highest` | lowest | `highest` | low | very low | medium | lowest | low -Bandage (packing) | `highest` | `highest` | `highest` | low | lowest | lowest | `highest` | lowest -Bandage (elastic) | `highest` | lowest | `highest` | `highest` | `highest` | `highest` | low | high -QuikClot | medium | high | medium | medium | medium | medium | high | high - -##### 2.2.1.10 Tourniquet - -- Can only be applied on limbs. -- Stops bleeding from wounds. -- Should be taken off as fast as possible and applied only to give medic time to bandage all the wounds. -- If not taken off for a while it will cause pain to the patient. - -##### 2.2.1.11 IVs - -IV | Effect ----------- | ---------- | -Saline plasma and blood | All three restore the volume of liquid in the blood stream. as a result blood pressure is raised for all of them. - -Use the appropriate amount depending on the situation (heavy loss of blood, blood pressure too low) (250, 500 or 1 000 mL) - -##### 2.2.1.12 Autoinjectors - -Autoinjector | Effect ----------- | ---------- | -Morphine | lower the blood pressure and heart rate of the patient, also suppress pain -Epinephrine | raise the heart rate of the patient -Atropine | lower the heart rate of the patient - -##### 2.2.1.13 Surgical kit - -- Is only useful when advanced wounds (reopening) is enabled. -- Stitch a wound to stop it from reopening. -- It's use may be limited to a certain class and / or near a vehicle / facility. -- It's use can also be limited according to the condition of the patient, you might need to stabilize him first before using it. - -##### 2.2.1.14 PAK - -- Used to fully heal someone. (Removes any injury, restore vitals to a stable state and reset the medical history, clears all medication in the system.) -- It's use may be limited to a certain class and / or near a vehicle / facility. -- It's use can also be limited according to the condition of the patient, you might need to stabilize him first before using it. - -#### 2.2.2 Vitals - -##### 2.2.2.1 Blood pressure - - NOTE:the `systolic` blood pressure is the number on the left, the `diastolic` blood pressure is the number on the right. - -- Blood pressure is affected by the amount of blood lost as well as IVs and medication. - - **Non existent:** 0 - 20 `systolic`. - - **Low:** 20 - 100 `systolic`. - - **Normal:** 100 - 160 `systolic`. - - **High:** 160 and above `systolic`. - -##### 2.2.2.2 Heart rate - -- The heart rate (pulse) is affected by the amount of blood lost and medications. - - **Low:** 45 and below - - **Normal:** between 46 and 119 - - **High:** 120 and above - - -##### 2.2.2.3 Cardiac arrest - -- A patient will enter cardiac arrest when:
- - The heart rate is below 20. - - The heart rate is above 200. - - The systolic blood pressure is above 260. - - The diastolic blood pressure is below 40 and the heart rate is above 190. - - The systolic blood pressure is above 145 and the heart rate is above 150. - - -#### 2.2.3 Treating the patient -This is a step by step guide, follow the steps from 1 to 6 in order unless stated otherwise. - - -- **Step 1:** Is the patient responsive? - - **Yes:** Ask him if he has wounds / he is in pain and act accordingly. - - **No:** Go to step 2. - - -- **Step 2:** Does the patient have a pulse? - - **Yes:** Go to step 3. - - **No:** If you are alone provide CPR, if you have someone else get him to do CPR while you treat the patient's wounds. skip to step 3 or 4 depending on the situation. - - -- **Step 3:** Is the patient wounded? - - **Yes**: Treat the wounds. - - **No:** Skip this step. - - -- **Step 4:** Did the patient lose blood? - - **Yes:** Use IVs to restore the volume of liquid in the blood stream of the patient. - - **No:** Skip this step. - - -- **Step 5:** Is the patient in pain? - - **Yes and stable pulse:** Give him morphine. - - **Yes and unstable heart rate:** Stabilize the heart rate before administrating morphine. - - **No:** You're done. - - -- **Step 6:** is the patient awake now? - - **Yes:** You're done. - - **No:** Stabilize his pulse / make sure he isn't in pain or missing blood. - -Note that keeping the patient's vitals stable is very important while treating him. - -#### 2.2.4 Additional informations - -- As an infantryman you can use a tourniquet to stop a limb from bleeding, note that this is supposed to be a temporary solution and leaving the tourniquet more than 5 minutes will induce pain. -- Epinephrine should **NEVER** be used in case of cardiac arrest, it will only make the patient harder to treat afterwards or might outright kill him (remember epinephrine raises the blood pressure, a blood pressure too high is deadly). -- Pain is only suppressed and not removed by default. -- You don't have to take epinephrine after you take morphine, just wait until your pulse stabilizes by itself (Provided that you are in a stable condition). -- Giving too much morphine to a patient (more than one every 10 minutes) will put him in cardiac arrest because of a blood pressure / heart rate too low. - -## 3. Dependencies -`ace_interaction`, `ace_modules`, `ace_apl` \ No newline at end of file diff --git a/documentation/feature/microdagr.md b/documentation/feature/microdagr.md deleted file mode 100644 index a7172031f6..0000000000 --- a/documentation/feature/microdagr.md +++ /dev/null @@ -1,149 +0,0 @@ ---- -layout: wiki -title: MicroDAGR -description: A GPS device and much more -group: feature -category: equipment -parent: wiki ---- - -For an easier time reading don't forget that you can view all chapters on the right side of the page by clicking on Show/hide under table of content. - -## 1. Overview - -"Military operations rely on the position, -navigation and timing (PNT) data that GPS -can provide. In combat, the accuracy of -PNT data can mean the difference between -life and death. Non-military GPS receivers -simply aren’t good enough when lives are -on the line" (Extracted from the real life manual) - -that's where the MicroDAGR comes in, here's a list of it's features (in arma 3) : - -- Compass and headings. -- Date and hour synced to the mission. -- Elevation (above or below sea level) -- Current speed. -- GPS with topographic and satellite view. -- Creating, naming, deleting waypoints. -- Friendly identification (BLUFOR tracker need to be on) -- The MicroDAGR is also able to connect to your vector to retrieve data from it. - -## 2. Usage - -Please note that the numbers in 2.1 are going to be referred to as `1` `2` etc when explaining how to use the MicroDAGR - -### 2.1 Bringing the MicroDAGR - -- Self interact Ctrl+⊞ Win. -- Select `Equipment`. -- Select `configure MicroDAGR`. - -### 2.2 The MicroDAGR interface - - - -number | function | ------- | ----------------------------------------------------- | -`1` | Options menu and hour display. -`2` | Grid position `e` is west to east `n` is south to north. -`3` | Elevation above sea level in meters. -`4` & `11` | Compass heading. -`5` & `10` | Current speed. -`6` | Date (mission). -`7` | Main menu button. -`8` | Compass menu button. -`9` | Map menu button. -`12` | Compass -`13` | Player heading (your eyes). -`14` | Center the map on your position. -`15` | Map zoom. -`16` | Map dezoom -`17` | Your position. -`18` | Waypoint creation menu -`19` | Waypoint editing menu. -`20` | Connection menu. -`21` | Settings menu. - -### 2.3 Waypoints -#### 2.3.1 Adding waypoints -- There's three ways of adding a waypoint. - -- First way: Using the waypoint creation menu. - - Find the position you want to mark on the map. - - Get it's map grid. - - The grid is composed of 6 digits. - - The first three digits are read west to east. (Top of the map screen). - - The last three are read south to north. (Left side of the map screen). - - Go to the options menu (Click in `1` area, above the bar). - - Click on `Mark`(`18`). - - Enter the grid number. - - Press OK. - - Enter the desired name of the waypoint. - - Press OK. - -- Second way: Using the waypoint menu - - Find the position you want to mark on the map. - - Get it's map grid. - - The grid is composed of 6 digits. - - The first three digits are read west to east. (Top of the map screen). - - The last three are read south to north. (Left side of the map screen). - - Go to the options menu (Click in `1` area, above the bar). - - CLick on `Waypoints` (`19`). - - Click on `Add`. - - Enter the grid number. - - Press OK. - - Enter the name of the waypoint. - - Press OK. - -- Third way: Using the Map menu. - - Go to the map menu (click on `9`) - - double left click on the position where you want your waypoint. - - Enter the name of the waypoint. - - Press OK. - -#### 2.3.2 Setting a waypoint -- Go to the options menu (Click in `1` area, above the bar). -- CLick on `Waypoints` (`19`). -- Select the waypoint. -- Click on `SetWp`. - - -- Once a waypoint is set: - - It's heading, elevation and distance are marked on the main menu. (`7`) - - It's heading, direction, grid position and name are marked in the compass menu (`8`) - - A marker appear at the waypoint grid location in the map menu (`9`) - -#### 2.3.3 Deleting a waypoint -- Go to the options menu (Click in `1` area, above the bar). -- CLick on `Waypoints` (`19`). -- Select the waypoint. -- Click on `Delete`. - -### 2.4 Switching between mils and degrees -- Go to the options menu (Click in `1` area, above the bar). -- Click on `Settings` (`21`) -- Double left click on the unit next to `Angular unit:` - -### 2.5 Switching between topographical and satellite view - -- Go to the map menu (`9`) -- Click on the map menu button again (`9`) - -### 2.6 Retrieving data from the vector -- For this you obviously need a `vector 21`. -- Go to the options menu (Click in `1` area, above the bar). -- Click on `Connect to` (`20`). -- Pull out your `vector 21`. - - Press and hold both R and Tab ↹ until the red pointing circle appears. - - Sight the circle on the object and release both keys. -- The data on the main menu now have changed, you can now see the azimuth the range and the elevation of the point you sighted. -- Note that the compass menu also changed and now features the azimuth, compass bearing, distance and grid position of the point you sighted. - -Note that the results of the measure you took won't change until you do an other measure. - - -## 3. Dependencies - -`ace_common` diff --git a/documentation/feature/missileguidance.md b/documentation/feature/missileguidance.md deleted file mode 100644 index c718788f0c..0000000000 --- a/documentation/feature/missileguidance.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -layout: wiki -title: Missile Guidance -description: -group: feature -category: realism -parent: wiki ---- - -## 1. Overview - -Adds the AMG framework, for more information about it refer to the [AMG framework documentation] ({{site.productionUrl}}/wiki/framework/advanced-missile-guidance.html) - -## 2. Usage - -### 2.1 Switching fire mode -- Press Ctrl + Tab ↹ the LED's on the right of the UI will change. -- `TOP` for top down mode. -- `DIR` for direct mode. - -### 2.2 Locking -- Fully zoom in by using NUMPAD + -- Switch to thermals by pressing N the `FLTR` LED should light up. -- Aim at the target and hold Tab ↹ a crosshair will appear and the `SEEK` LED will light up. -- Fire! - -## 3. Dependencies - -`ace_laser` diff --git a/documentation/feature/missionmodules.md b/documentation/feature/missionmodules.md deleted file mode 100644 index e96f9dcdd9..0000000000 --- a/documentation/feature/missionmodules.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -layout: wiki -title: Mission Modules -description: modules that can be used by mission makers. -group: feature -category: general -parent: wiki ---- - -## 1. Overview - -Add modules that can be used by mission makers. - -### 1.1 Ambient sounds - -That module can be used to add ambient sounds around players, it let you choose the sounds and some parameters (distance, volume interval). - -## 2. Dependencies - -`ace_common` diff --git a/documentation/feature/mk6mortar.md b/documentation/feature/mk6mortar.md deleted file mode 100644 index 691a6bc8ef..0000000000 --- a/documentation/feature/mk6mortar.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -layout: wiki -title: Mk6 Mortar -description: Improve the existing mk6 mortar. -group: feature -category: equipment -parent: wiki ---- - -## 1. Overview - -### 1.1 mk6 mortar overhaul -ACE3 adds wind deflection for shells as well as a rangetable to accurately take out your target without the artillery computer. - -## 2. Usage - -### 2.1 Switching charge -- Press F (Arma 3 default key bind `Fire Mode Switch`) to switch between charges - -### 2.2 Working with the rangetable -- To open the table: - - Self interact Ctrl + ⊞ Win - - Select `equipment`. - - Select `Open 82mm Rangetable`. - -- Using the table: - - Get the distance and elevation difference between you and the target for this you can use map tools. For this example we'll say we're 2 000m away and 50m below (we're at 20m they are at 70m, 70-20=50). - - - Select the charge you want to use (0 = close / 1 = medium / 2 = far). For this case we're using charge 2. - - - Check the range column on the table, we're at 2 000 then look at the corresponding entry in the column on the right (ELEV = elevation) For this example it's 1339. - - - After that's done move by one column on the right that's the elevation for 100m heigh so in our case we're subtracting 2 (4:2 = 2) if our target was 300m above us we would have to subtract 12 from our elevation (3x4 = 12). - - - Once you finished your maths, it's time to aim, get the cross of the mortar on target, if you don't see it use a waypoint if possible. In our case ELEV is 1339-2 = 1337. - - - On the right side of the screen, while looking through the mk6 scope you should see ELV, we need to match this number with the one we found. - - To adjust the ELV use Page Up and page Down. - - Once the number you found and ELV are the same FIRE ! - - On top of that you can calculate the time the shell will take to land by using the third row from the left, in our case the shell need to travel 2000m that's 20xthe number indicated. so 20x0,5 = 10s. - -### 2.3 Working with the rangetable (Crosswinds enabled) -- Same as above there's just an extra step, I'll provide an other example in case you forgot. - - - Get the distance and elevation difference between you and the target for this you can use map tools. For this example we'll say we're 2 400m away and 223m below (we're at 2m they are at 225, 225-2=223) - - Select the charge you want to use (0 = close / 1 = medium / 2 = far). For this case we're using charge 2. - - - Check the range column on the table, we're 2 400m a then look at the corresponding entry in the column on the right (ELEV = elevation) For this example it's 1145. - - After that's done move by one column on the right that's the elevation for 100m heigh so in our case we're subtracting 22 (2,2 x 10 (2,2 because we're around 220m below)). - - Extra step needed here, a kestrel 4500 IS NEEDED. - - Pick the crosswind on your kestrel (for this refer to the kestrel documentation). - - - For this example the crosswind is of 2 MPS on my table I can see under Azimuth correction that for each 1MPS I need to correct by 2.5 mill. - - So in this case i'm subtracting 5 mill from the ELV. - - - It's MATH TIME the ELV given by the table is 1 145, we subtract 22 because of the heigh, we also subtract 5 for the crosswind ( 1 145-22-5 = 1 118 ). - - After you finished your maths, it's time to aim, get the cross of the mortar on target, if you don't see it use a waypoint if possible. In our case ELEV is 1 118. - - - On the right side of the screen, while looking through the mk6 scope you should see ELV, we need to match this number with the one we found. - - - FIREEEE !!!! - - Little advantage of having crosswind enabled is that you don't have to calculate the flight time, it's marked on the table in this case it's 33,8s. - -## 3. Dependencies - -`ace_interaction` diff --git a/documentation/feature/modules.md b/documentation/feature/modules.md deleted file mode 100644 index 1cdbe9dae4..0000000000 --- a/documentation/feature/modules.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -layout: wiki -title: Modules -group: feature -category: general -parent: wiki ---- - -## 1. Overview - -This is taking care of module initialization **DO NOT REMOVE**. - -## 2. Dependencies - -`ace_main` diff --git a/documentation/feature/movement.md b/documentation/feature/movement.md deleted file mode 100644 index cf64c40945..0000000000 --- a/documentation/feature/movement.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -layout: wiki -title: Movement -description: Movement improvements -group: feature -category: realism -parent: wiki ---- - -## 1. Overview - -### 1.1 Jumping -Adds the ability to jump when pressing the vault key while moving. (V) - -### 1.2 Minor animation tweaks -Walking slowly with the weapon lowered now has a less silly looking animation. - -### 1.3 Fatigue adjustments -Soldiers get fatigued slower, but regain their stamina slower aswell. Fatigued soldiers have a faster walking speed and no longer turn into snails. - -### 1.4 Weight display -Adds a weight of the current loadout display in the inventory to estimate the fatigue gain while moving in combat. Can be adjusted to display lb. instead of kg in the ACE Options Menu. - -### 1.5 Optics view in all stances -The player can now use the sights of rifles and pistols in all prone stances. - - -## 2. Usage - -### 2.1 Jumping -- For this you need your weapon up -- While jogging or running press V - -### 2.2 Climbing -- Approach what you want to climb. -- Press ctrl + V (ACE3 default key bind `Climb`). -- Note that when climbing your character will put his weapon on his back. - -## Dependencies - -`ace_common` diff --git a/documentation/feature/mx2a.md b/documentation/feature/mx2a.md deleted file mode 100644 index c83325f575..0000000000 --- a/documentation/feature/mx2a.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: wiki -title: MX-2A -description: Movement improvements -group: feature -category: equipment -parent: wiki ---- - -## 1. Overview - -Adds the MX-2A thermal imaging device. - -## 3. Dependencies - -`ace_apl` diff --git a/documentation/feature/nametags.md b/documentation/feature/nametags.md deleted file mode 100644 index 00a582c010..0000000000 --- a/documentation/feature/nametags.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -layout: wiki -title: Nametags -description: -group: feature -category: interaction -parent: wiki ---- - -## 1. Overview - -### 1.1 Nametag and rank display -Adds nametags and soldier ranks to friendly players in multiplayer. This can be adjusted in the ACE Options Menu to not display the rank, display all nametags of nearby soldiers instead of those who are looked directly at, to require a button press to show the nametags or to disable them altogether. - -### 1.2 Arma 3 VON, ACRE and TFAR soundwaves -A soundwave effect is shown when someone is speaking using either the vanilla VON, ACRE 1 or 2 and TFAR. - -## 2. Dependencies - -`ace_interaction` diff --git a/documentation/feature/nightvision.md b/documentation/feature/nightvision.md deleted file mode 100644 index 256670a8bd..0000000000 --- a/documentation/feature/nightvision.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -layout: wiki -title: Nightvision -description: -group: feature -category: equipment -parent: wiki ---- - -## 1. Overview - -### 1.1 Multiple Generation NVGs -Adds different night vision devices with varying image quality and field of view. New Classnames for Generations 1, 2, and 4 NVG's (default Arma 3 NVG's represents Generation 3) and a wide view NVG. - -### 1.2 Blending effects -Adds a blending effect depending on ammunition type when firing while using a night vision device. Especially tracer rounds are bright, but you can use the IR-dim tracers from the Ballistics module to reduce tis effect. - -### 1.3 Brightness adjustment -Enables the user to manually adjust NVG brightness. - -## 2. Usage - -### 2.1 Adjusting brightness -- Use ALT + PageUP and ALT + PageDOWN to adjust NVG brightness (ACE3 default key bind `Increase/Decrease NVG Brightness`). - -## 3. Dependencies - -`ace_common` diff --git a/documentation/feature/noidle.md b/documentation/feature/noidle.md deleted file mode 100644 index b57455315c..0000000000 --- a/documentation/feature/noidle.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -layout: wiki -title: No Idle -description: Disables idle animations -group: feature -category: interaction -parent: wiki ---- - -## 1. Overview - -### 1.1 Idle animations removed - -This removes idle animations. - -## 2. Dependencies - -`ace_common` diff --git a/documentation/feature/noradio.md b/documentation/feature/noradio.md deleted file mode 100644 index a3ee167c32..0000000000 --- a/documentation/feature/noradio.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -layout: wiki -title: No Radio -description: Disable callouts -group: feature -category: interaction -parent: wiki ---- - -## 1. Overview - -### 1.1 Silent avatar -Mutes the player's automatic callouts ("Enemy man, 100 meters, front!"). -Does not mute AI callouts. - -## 2. Dependencies - -`ace_common` diff --git a/documentation/feature/norearm.md b/documentation/feature/norearm.md deleted file mode 100644 index 0b5f00d28b..0000000000 --- a/documentation/feature/norearm.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: wiki -title: No Rearm -description: Remove rearm from -group: feature -category: interaction -parent: wiki ---- - -## 1. Overview - -Hides the rearm action for players (on cars / boxes / corpses / ground) - -## 2. Dependencies - -`ace_common` diff --git a/documentation/feature/optics.md b/documentation/feature/optics.md deleted file mode 100644 index 2602d98d98..0000000000 --- a/documentation/feature/optics.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: wiki -title: Optics -description: 2D and PIP optics -group: feature -category: equipment -parent: wiki ---- - -## 1. Overview - -Adds animated 2D and PIP variants of some optics (RCO / MRCO / ARCO / LRPS / MOS) - -## 2. Dependencies - -`ace_common` diff --git a/documentation/feature/optionsmenu.md b/documentation/feature/optionsmenu.md deleted file mode 100644 index 345bb81af8..0000000000 --- a/documentation/feature/optionsmenu.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -layout: wiki -title: Options Menu -description: ACE3 options menu -group: feature -category: interaction -parent: wiki ---- - -## 1. Overview - -Adds the options menu used by other components. - -## 2. Usage - -### 2.1 Opening the user menu -- Press Escape -- In the top left corner of the screen you should see `ACE Options`. -- Click it. - -### 2.2 Options menu informations -- You don't have to press a save button. When a setting is changed it's saved automatically. - -## 3. Dependencies - -`ace_common` - -*Note: The Options Menu module is utilized by many other modules. Disabling it is not recommended.* diff --git a/documentation/feature/overheating.md b/documentation/feature/overheating.md deleted file mode 100644 index ff2e6c6778..0000000000 --- a/documentation/feature/overheating.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -layout: wiki -title: Overheating -description: Weapon temperature and jamming, barrel swapping. -group: feature -category: realism -parent: wiki ---- - -## 1. Overview - -### 1.1 Weapon Jamming -Adds a probability to jam a weapon when firing. Jams can be cleared by reloading or by using the clear jam-key. - -### 1.2 Temperature simulation -Introduces weapon temperature simulation depending on weapon and bullet mass. Hot weapons are more prone to jamming. Depending on weapon type the accuracy and in extreme cases the muzzle velocity might be reduced on high temperatures. Adds smoke puff and heat refraction effects to indicate this. - -### 1.3 Spare barrels -Adds the ability to changes barrels on machine guns to compensate for those effects. - - -## 2. Usage - -### 2.1 Clearing a jammed weapon -- To clear a jammed weapon, press SHIFT + R (ACE3 default key bind `Clear jam`). - -### 2.2 Swapping barrels -- For this you need a `Spare barrel` and a compatible weapon. -- Press self interaction Ctrl + ⊞ Win (ACE3 default key bind `Self Interaction Key`). -- Select `Equipment`. -- Select `Swap barrel`. - -### 2.3 Checking your barrel temperature -- Press self interaction Ctrl + ⊞ Win. -- Select `Equipment`. -- Select `Check weapon temperature`. - -**NOTE** When the bar is half full (yellow) it means the barrel is around 500°c. -Your weapon will be even more prone to jams, and it'll get worse if you don't let the barrel cool down or swap it. - -## 3. Dependencies - -`ace_interaction` diff --git a/documentation/feature/overpressure.md b/documentation/feature/overpressure.md deleted file mode 100644 index 77d16145d8..0000000000 --- a/documentation/feature/overpressure.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -layout: wiki -title: Overpressure -description: backblast and overpressure -group: feature -category: realism -parent: wiki ---- - -## 1. Overview - -### 1.1 Overpressure -Adds backblast to AT launchers and overpressure zones to tank cannons, don't stay behind a firing RPG or it'll hurt. - -## 2. Dependencies - -`ace_common` diff --git a/documentation/feature/parachute.md b/documentation/feature/parachute.md deleted file mode 100644 index 39f353f08b..0000000000 --- a/documentation/feature/parachute.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -layout: wiki -title: Parachute -description: Add an altimeter and a non-steerable parachute -group: feature -category: equipment -parent: wiki ---- - -## 1. Overview - -### 1.1 Altimeter -Removes the altitude and descend speed UI elements when free-falling and parachuting on higher difficulties. Adds an altimeter watch type item. - -### 1.2 Non-steerable parachute -Adds a non-steerable parachute variant for jet pilots. - -### 1.3 Parachute cutting and reserve parachutes -You are now able to cut parachutes and deploy a reserve one. - -### 1.4 Landing animation -Smoothens the parachute landing animation. - -## 2. Usage - -### 2.1 bringing up the altimeter -- For this you need to have an `Altimeter Watch` in the watch slot. -- Press O (Arma 3 default key bind `Watch`) to bring up the altimeter. - -### 2.2 Cutting a parachute -- While falling with a parachute deployed open the self interaction menu Ctrl+⊞ Win (ACE3 default). -- Select `Cut Parachute` - -## 3. Dependencies - -`ace_common` diff --git a/documentation/feature/protection.md b/documentation/feature/protection.md deleted file mode 100644 index a0efe09e05..0000000000 --- a/documentation/feature/protection.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -layout: wiki -title: Protection -description: Tweaks armor values -group: feature -category: realism -parent: wiki ---- - -## 1. Overview - -### 1.1 Tweaked protection values -Fixes and tweaks the protection values of body armour, helmets and uniforms. - -## 2. Dependencies - -`ace_common` diff --git a/documentation/feature/ragdolls.md b/documentation/feature/ragdolls.md deleted file mode 100644 index 603dd13691..0000000000 --- a/documentation/feature/ragdolls.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -layout: wiki -title: Ragdolls -description: Changes the ragdolls to react more to the force of shots and explosions. -group: feature -category: realism -parent: wiki ---- - -## 1. Overview - -### 1.1 Adjusted Ragdolls -Changes the ragdolls to react more to the force of shots and explosions. - -## 2. Dependencies - -`ace_common` diff --git a/documentation/feature/rangecard.md b/documentation/feature/rangecard.md deleted file mode 100644 index 7f3a49251c..0000000000 --- a/documentation/feature/rangecard.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -layout: wiki -title: Rangecard -description: Adds a range card for your weapons -group: feature -category: equipment -parent: wiki ---- - -## 1. Overview - -Add a range card that updates itself for your weapon and the type of ammo you're using. - -## 2. Usage - -### 2.1 Opening the range card -- Open the self interaction menu Ctrl + ⊞ Win -- Select `Equipment` -- Select `Open Range Card` - -### 2.2 Using the range card -- To use this to it's full potential the use of a `Vector 21` is strongly recommended, a `Kestrel 4500` will also help. - -- Pull out your rangefinder (`Vector 21` preferred) and get the distance between you and your target. - -- Open your rangetable and look under the `Target range` column. - -- Move to the `Bullet Drop` column, the drop is in MRADs, you need to compensate for it by adjusting your sight. Example, you want to adjust for a bullet drop of -7.9 MRADs simply adjust your scope 7.9 MRADs vertically. (check [feature scopes](http://ace3mod.com/wiki/feature/scopes.html) ) for this. - -## 3. Dependencies - -`ACE_Advanced_Ballistics` diff --git a/documentation/feature/realisticnames.md b/documentation/feature/realisticnames.md deleted file mode 100644 index 2ec556bfea..0000000000 --- a/documentation/feature/realisticnames.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -layout: wiki -title: Realistic Names -description: More realistic weapon names -group: feature -category: realism -parent: wiki ---- - -## 1. Overview - -### 1.1 Real names -Changes the names of vehicles, magazines, weapons, grenades, explosive charges and mines to their respective real-world counterparts whenever possible. - -## 2. Dependencies - -`ace_common` diff --git a/documentation/feature/recoil.md b/documentation/feature/recoil.md deleted file mode 100644 index fd34686012..0000000000 --- a/documentation/feature/recoil.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -layout: wiki -title: Recoil -description: Recoil overhaul -group: feature -category: realism -parent: wiki ---- - -## 1. Overview - -### 1.1 Recoil adjustment -Overhauls the recoil system reducing upwards recoil. - -### 1.2 Advanced cam shake -Introducing camshake when firing on foot or as vehicle gunner depending on stance and weapon type. - -### 1.3 Burst dispersion -Firing in longer burst (> 3 rounds per burst) slightly reduces the accuracy. Firing machine guns in bursts is now useful. - -## 2. Dependencies - -`ace_common` diff --git a/documentation/feature/reload.md b/documentation/feature/reload.md deleted file mode 100644 index 2c23fadb29..0000000000 --- a/documentation/feature/reload.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -layout: wiki -title: Reload -description: -group: feature -category: interaction -parent: wiki ---- - -## 1. Overview - -### 1.1 Ammo count -Hides the actual round count of magazines and removes the icon when the current magazine is emptied. The player can instead check the magazine weight, but that gives only estimated values for magazines with more than 10 rounds. - -## 2. Usage - -### 2.1 Checking your ammo -- Press Ctrl + R (ACE3 default key bind `Check Ammo`). - -## 3. Dependencies - -`ace_interaction` diff --git a/documentation/feature/reloadlaunchers.md b/documentation/feature/reloadlaunchers.md deleted file mode 100644 index 16bed1b541..0000000000 --- a/documentation/feature/reloadlaunchers.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -layout: wiki -title: Reload Launchers -description: -group: feature -category: interaction -parent: wiki ---- - -## 1. Overview - -Add the ability to reload someone else's launcher. - -### 2. Usage - -### 2.1 Reloading someone else's launcher -- Press the interaction key ⊞ Win and aim at your buddy's launcher. -- Select `reload launcher`. -- Select the type of ammo. - -## 3. Dependencies - -`ace_interaction` diff --git a/documentation/feature/respawn.md b/documentation/feature/respawn.md deleted file mode 100644 index 90d6b0d68d..0000000000 --- a/documentation/feature/respawn.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -layout: wiki -title: Respawn -description: Same gear on respawn, FF message, rallypoints -group: feature -category: interaction -parent: wiki ---- - -## 1. Overview - -### 1.1 Respawn with same gear -Requires the Respawn Gear module to be placed. Respawned soldiers now have their loadout when killed. - -### 1.2 Friendly Fire messages -Shows friendly fire warnings in system chat if the module is placed. Works even in higher difficulties where kill messages are normally disabled. - -### 1.3 Rallypoints -Adds rallypoints to all 3 sides to enable teleportation from base spawn to FOB's. Requires some setup from the mission maker. - - -## 2. Usage - -### 2.1 Using rallypoints -- For this to work pre-emptive preparations need to be made by the mission maker. -- Approach the rallypoint flagpole -- Use the interaction key ⊞ Win (ACE3 default key bind `Interaction key`). -- Select teleport to (base / rallypoint). - - -## 3. Dependencies - -`ace_common` diff --git a/documentation/feature/safemode.md b/documentation/feature/safemode.md deleted file mode 100644 index 5065fb717c..0000000000 --- a/documentation/feature/safemode.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -layout: wiki -title: Safe Mode -description: Introduce safe mode -group: feature -category: equipment -parent: wiki ---- - -## 1. Overview - -### 1.1 Safety -You can now use the safety mode of any weapon. Switching weapon modes takes the safety off. - -## 2. Usage - -### 2.1 Switching safety on / off -- To turn it on press Ctrl + ` (QWERTY layout) (ACE3 default key bind `Safe Mode`). -- To turn it off press Ctrl + ` (QWERTY layout) again or switch firing mode. - -## 3. Dependencies - -`ace_common` diff --git a/documentation/feature/sandbags.md b/documentation/feature/sandbags.md deleted file mode 100644 index dbe450eb31..0000000000 --- a/documentation/feature/sandbags.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -layout: wiki -title: Sandbags -description: Adds stackable sandbags -group: feature -category: equipment -parent: wiki ---- - -## 1. Overview - -Adds stackable sandbags able to block bullets, shrapnel and small explosions. -Note that those sandbags are affected by physics, a rocket will send them flying. - -## 2. Usage - -### 2.1 Placing the sandbags -- You'll need at least one `sandbag (empty)`. -- You need to be over a grass area / sand area to be able to fill the sandbag. -- Self interact Ctrl+⊞ Win (ACE3 default). -- Select `Deploy sandbag`. -- Follow the instruction on screen. - -## 3. Dependencies - -`ace_interaction` diff --git a/documentation/feature/scopes.md b/documentation/feature/scopes.md deleted file mode 100644 index 359f5a8bf6..0000000000 --- a/documentation/feature/scopes.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -layout: wiki -title: Scopes -description: Scope adjustment -group: feature -category: equipment -parent: wiki ---- - -## 1. Overview - -### Sniper Scope Adjustment -Allows snipers to adjust their scopes horizontally and vertically in mils. - -## 2. Usage - -### 2.1 Adjusting your scope vertically -Please not that the following key combinations are ACE3 default key binds. -- Minor adjustment up Page Up. -- Minor adjustment down page Down. -- Major adjustment up ⇧ Shift + Page Up. -- Major adjustment down ⇧ Shift + page Down. - -### 2.2 Adjusting your scope horizontally -- Minor adjustment right Ctrl + Page Up. -- Minor adjustment left Ctrl + page Down. -- Major adjustment right Ctrl + ⇧ Shift + Page Up. -- Major adjustment left Ctrl + ⇧ Shift + page Down. - -## 3. Dependencies - -`ace_common` diff --git a/documentation/feature/sitting.md b/documentation/feature/sitting.md deleted file mode 100644 index aee2ee859d..0000000000 --- a/documentation/feature/sitting.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -layout: wiki -title: Sitting -description: -group: feature -category: interaction -parent: wiki ---- - -## 1. Overview -Adds the ability to sit on chairs. - -## 2. Usage -Please note that to be able to use this function the sitting module need to be placed down (or set to 1 in the server config) - -### 2.1 How to sit / stand up -- Look at the chair and press the interaction key Ctrl+⊞ Win (ACE3 default). -- Select `Sit Down`. -- To stand up press the self interaction key ⊞ Win (ACE3 default) and select `Stand Up`. - -## 3. Dependencies -`ace_interaction` \ No newline at end of file diff --git a/documentation/feature/slideshow.md b/documentation/feature/slideshow.md deleted file mode 100644 index 0ff2372064..0000000000 --- a/documentation/feature/slideshow.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -layout: wiki -title: Slideshow -group: feature -category: interaction -parent: wiki ---- - -## 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). - -## 3. Dependencies - -`ace_common` \ No newline at end of file diff --git a/documentation/feature/smallarms.md b/documentation/feature/smallarms.md deleted file mode 100644 index ffa905eacf..0000000000 --- a/documentation/feature/smallarms.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -layout: wiki -title: Small Arms -description: Various improvements to small arms -group: feature -category: realism -parent: wiki ---- - -## 1. Overview - -### 1.1 Magazine Names -Unifies the name formatting of magazines similar to Arma 2 standards. - -### 1.2 No tracers in non-tracer mags -Assault rifles no longer have tracer rounds in their non-tracer magazines. This doesn't effect the additional tracers in the last rounds of machine gun magazines. - -### 1.3 Real magazine round counts -All pistol and sub machine gun magazines now have adjusted capacities to match their real life counterparts. - -## 2. Dependencies - -`ace_common` diff --git a/documentation/feature/spectator.md b/documentation/feature/spectator.md deleted file mode 100644 index 08919c369d..0000000000 --- a/documentation/feature/spectator.md +++ /dev/null @@ -1,422 +0,0 @@ ---- -layout: wiki -title: Spectator -description: A flexible spectator system -group: feature -category: interaction -parent: wiki ---- - -
-
Please note:
-

This is not part of ACE3 yet. It will be released in a future version.

-
- -## 1. Overview - -The ACE3 spectator system is designed to act as a flexible and easy to configure framework. Most scenarios can be set up as desired using only the settings provided, however public functions are available for finer control of these configurable aspects. - -### 1.1 Spectator System - -By default, the ACE3 spectator system does nothing - meaning existing missions will behave exactly as before. There are two tools available to enable the spectator system in your missions: - -- An `"ace_spectator"` [respawn template](https://community.bistudio.com/wiki/Arma_3_Respawn) -- Public functions `ace_spectator_fnc_setSpectator` and `ace_spectator_fnc_stageSpectator` - -With respawn template `"ace_spectator"` in effect players will enter spectator mode upon death and exit upon respawn. The template is compatible with all respawn types and allows you to take advantage of the vanilla framework's flexibility (combining templates, side specific templates, etc.). This makes for very simple combination of a wide variety of spectator and respawn setups. - -An example description.ext file using the respawn template: - -``` -respawn = 3; -respawnDelay = 180; -respawnTemplates[] = {"ace_spectator"}; -respawnTemplatesWest[] = {"ace_spectator","Counter","Wave"}; -``` - -For groups using custom respawn frameworks - or for missions where you want finer control over who, how and when players enter spectator - the two following functions are provided: - -`ace_spectator_fnc_setSpectator` - -``` -* Sets local client to the given spectator state (virtually) -* To physically handle a spectator see ace_spectator_fnc_stageSpectator -* -* Client will be able to communicate in ACRE/TFAR as appropriate -* The spectator interface will be opened/closed -* -* Arguments: -* 0: Spectator state of local client (default: true) -* -* Return Value: -* None -* -* Example: -* [true] call ace_spectator_fnc_setSpectator -``` - -`ace_spectator_fnc_stageSpectator` - -``` -* Sets target unit to the given spectator state (physically) -* To virtually handle a spectator see ace_spectator_fnc_setSpectator -* -* Units will be gathered at marker ace_spectator_respawn (or [0,0,0] by default) -* Upon unstage, units will be moved to the position they were in upon staging -* -* Arguments: -* 0: Unit to put into spectator stage (default: player) -* 1: Spectator stage (default: true) -* -* Return Value: -* None -* -* Example: -* [player, false] call ace_spectator_fnc_stageSpectator -``` - -### 1.2 Spectatable Units - -Spectatable units are stored in an automatically maintained list (`ace_spectator_unitList`) on each client. However, directly accessing this list is not encouraged. Instead mission makers have two tools at their disposal to tweak the list: - -- Unit filter -- Unit whitelist/blacklist - -The unit filter determines which units will automatically be used to populate the spectatable unit list. It's controlled by setting `ace_spectator_filterUnits` and there are four possible options: - -- **No units** -- **Player units** -- **Playable units** *(default)* -- **All units** - -In cases where more specific control is required function `ace_spectator_fnc_updateUnits` can be used to whitelist units from the filter or blacklist them from the list (on the local client): - -``` - * Arguments: - * 0: Units to add to the whitelist - * 1: Use blacklist - * - * Return Value: - * None - * - * Example: - * [allUnits,true] call ace_spectator_fnc_updateUnits - * -``` - -### 1.3 Spectatable Sides - -Spectatable sides can simply be considered an extra layer of filtering for the spectatable unit list. Again, there are two methods of controlling the spectatable sides: - -- Side filter -- Side list - -The side list is exactly what it sounds like, a list of sides spectatable by the local client. However, unlike spectatable units the side list remains static and can only be updated manually. This is because the side filter is applied on top of the side list whenever the unit list is automatically maintained - meaning the unit list will update if the player changes side or if the side relations change. - -Note that the unit whitelist/blacklist also serves to override this side filtering mechanism. - -The default side list is `[west,east,resistance,civilian]` and to update it (on the local client) function `ace_spectator_fnc_updateSpectatableSides` can be used: - -``` - * Arguments: - * 0: Sides to add - * 1: Sides to remove - * - * Return Value: - * Spectatable sides - * - * Example: - * [[west], [east,civilian]] call ace_spectator_fnc_updateSpectatableSides -``` - -The side filter determines which sides from the side list are valid each time the unit list is updated. It's controlled by setting `ace_spectator_filterSides` and there are four possible options: - -- **Player side** *(default)* -- **Friendly sides** -- **Hostile sides** -- **All sides** - -### 1.4 Camera Modes - -There are 3 possible camera modes: - -- **Free** -- **Internal** -- **External** - -Mission makers can control the camera modes available to spectators via the setting `ace_spectator_restrictModes`. Function `ace_spectator_fnc_updateCameraModes` is also provided to alter the available modes (to the local player) as desired at any point in the mission: - -``` - * Arguments: - * 0: Camera modes to add - * 1: Camera modes to remove - * - * Return Value: - * Available camera modes - * - * Example: - * [[0], [1,2]] call ace_spectator_fnc_updateCameraModes -``` - -### 1.5 Vision Modes - -Vision modes are only available in free camera mode. By default there are 4 available vision modes: - -- **Normal** -- **Night vision** -- **Thermal imaging (white hot)** -- **Thermal imaging (black hot)** - -Mission makers can control which of these vision modes are available to spectators via the setting `ace_spectator_restrictVisions`. However, there are actually a total of 10 possible vision modes and function `ace_spectator_fnc_updateVisionModes` can be used to alter which of them are available (to the local player) at any point in the mission: - -``` - * Possible vision modes are: - * - -2: Normal - * - -1: Night vision - * - 0: White hot - * - 1: Black hot - * - 2: Light Green Hot / Darker Green cold - * - 3: Black Hot / Darker Green cold - * - 4: Light Red Hot / Darker Red Cold - * - 5: Black Hot / Darker Red Cold - * - 6: White Hot / Darker Red Cold - * - 7: Thermal (Shade of Red and Green, Bodies are white) - * - * Arguments: - * 0: Vision modes to add - * 1: Vision modes to remove - * - * Return Value: - * Available vision modes - * - * Example: - * [[0], [1,2]] call ace_spectator_fnc_updateVisionModes -``` - -### 1.6 Camera Attributes - -The spectator camera has 8 manipulatable attributes: - -- **Camera mode:** The camera view -- **Camera unit:** The unit used for internal and external view -- **Camera vision:** The vision mode used by the free camera -- **Camera position:** The position of the free camera -- **Camera pan:** The pan (direction/heading) of the free camera -- **Camera tilt:** The tilt (pitch) of the free camera -- **Camera zoom:** The zoom level of the free camera -- **Camera speed:** The movement speed of the free camera - -Function `ace_spectator_fnc_setCameraAttributes` can be used to change any of these attributes at any point (including before spectator has ever opened): - -``` - * Arguments: - * 0: Camera mode - * - 0: Free - * - 1: Internal - * - 2: External - * 1: Camera unit (objNull for random) - * 2: Camera vision - * - -2: Normal - * - -1: Night vision - * - 0: Thermal white hot - * - 1: Thermal black hot - * 3: Camera position (ATL) - * 4: Camera pan (0 - 360) - * 5: Camera tilt (-90 - 90) - * 6: Camera zoom (0.01 - 2) - * 7: Camera speed in m/s (0.05 - 10) - * - * Return Value: - * None - * - * Example: - * [1, objNull] call ace_spectator_fnc_setCameraAttributes -``` - -## 2. Usage - -### 2.1 Spectator Shortcuts - -Shortcuts are currently hardcoded in the ACE3 spectator system. Future versions are likely to change that. - -#### 2.1.1 Interface Shortcuts - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ShortcutAction
1Toggle unit list
2Toggle help
3Toggle toolbar
4Toggle compass
5Toggle unit icons
MToggle map
BackspaceToggle interface
- -#### 2.1.2 Free Camera Shortcuts - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ShortcutAction
WCamera forward
SCamera backward
ACamera left
DCamera right
QCamera up
ZCamera down
RMBPan camera
LMBDolly camera
⇧ ShiftSpeed boost
FFocus on unit
- -#### 2.1.3 Camera Attribute Shortcuts - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ShortcutAction
Up arrowNext camera
Down arrowPrevious camera
Right arrowNext unit
Left arrowPrevious unit
NNext vision mode
Ctrl+NPrevious vision mode
ScrollwheelAdjust zoom
Ctrl+ScrollwheelAdjust speed
Num-/Num+Increment zoom
Ctrl+Num-/Num+Increment speed
Alt+Num-Reset zoom
Alt+Num+Reset speed
- -### 2.2 The Interface - -#### 2.2.1 Unit list - -The unit list on the left lists all of the units currently available to spectate. -Double click on any unit name in the list to switch to the unit. -Double click on the current unit to switch between internal and external view. - -#### 2.2.2 Toolbar - -The toolbar along the bottom of the screen displays various useful values. From left to right these are: - -- Unit name -- Camera mode -- Vision mode/Unit side -- 24-hour Clock -- Camera zoom/Unit depth -- Camera/Unit speed - -#### 2.2.3 Map - -The map overlay will show the current position of the free camera and all spectatable units. In free camera you can alt-click on the map to teleport the camera to the position of the cursor. - -## 3. Dependencies - -`ace_common` diff --git a/documentation/feature/spotting-scope.md b/documentation/feature/spotting-scope.md deleted file mode 100644 index c0c79fb1ad..0000000000 --- a/documentation/feature/spotting-scope.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -layout: wiki -title: Spotting scope -description: Adds a deployable spotting scope -group: feature -category: equipment -parent: wiki ---- - -## 1. Overview - -Adds a deployable spotting scope. - -## 2. Usage - -### 2.1 Deploying the spotting scope -- Self interact Ctrl+⊞ Win (ACE3 default). -- Select `Equipment`. -- Select `Place spotting scope` (note that the scope will be at your feet). - -## 3. Dependencies - -`ace_apl` , `ace_interaction` diff --git a/documentation/feature/switchunits.md b/documentation/feature/switchunits.md deleted file mode 100644 index da45041fb4..0000000000 --- a/documentation/feature/switchunits.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -layout: wiki -title: Switch Units -description: -group: feature -category: interaction -parent: wiki ---- - -## 1. Overview - -### 1.1 Switch units - -"ACE SwitchUnits" is a tool for mission makers to quickly add PvP (Player vs. Player) elements to a mission. In short it enables a player to control AI units. Allowing players to perform as enemies even during a COOP mission increases the authenticity of the enemy and thus the immersion for everyone. - -The most prominent feature of ACE SwitchUnits is that you can add it to nearly every existing mission and get AI control out of the box. Dynamic mission like "Enemy Assault", "Patrol Ops", "Invade & Annex", etc. don't need to be touched to make all random spawned AI's controllable. - -In its current form you're able to switch to infantry (vehicles, etc. are planned) from all four sides (West, East, Independent, Civilian). - -## 2. Usage - -### 2.1 Switching to a unit -- Open your map -- Find a unit you can access (they are showed with special icons and names on the map). -- Press LMB on the desired unit. -- You'll control that unit until it dies or until you switch to an other one. If the unit dies you'll be brought back to your original unit.. - -## 3. Dependencies - -`ace_common` diff --git a/documentation/feature/tacticallader.md b/documentation/feature/tacticallader.md deleted file mode 100644 index efc05fccf9..0000000000 --- a/documentation/feature/tacticallader.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -layout: wiki -title: Tactical ladder -description: Adds a deployable ladder with adjustable height that you can transport on your back. -group: feature -category: equipment -parent: wiki ---- - -## 1. Overview - -Adds a deployable ladder with adjustable height that you can transport on your back. - -## 2. Usage - -### 2.1 Deploying the ladder -- Self interact Ctrl+⊞ Win (ACE3 default). -- Select `Deploy ladder`. -- You can adjust it's position and height by interacting with it ⊞ Win (ACE3 default) and following the instructions on screen. - -## 3. Dependencies - -`ace_apl` , `ace_interaction` diff --git a/documentation/feature/testmissions.md b/documentation/feature/testmissions.md deleted file mode 100644 index a49ff963b0..0000000000 --- a/documentation/feature/testmissions.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: wiki -title: Test Missions -description: Adds an ACE3 Test Missions -group: feature -category: general -parent: wiki ---- - -## 1. Overview - -Adds an ACE3 Test Missions - -## 2. Dependencies - -`ace_common` diff --git a/documentation/feature/thermals.md b/documentation/feature/thermals.md deleted file mode 100644 index 051bbc8241..0000000000 --- a/documentation/feature/thermals.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -layout: wiki -title: Thermals -description: -group: feature -category: equipment -parent: wiki ---- - -## 1. Overview - -### 1.1 Body Warmth -Adjusts the thermal properties of humans making them less like torches. - -## 2. Dependencies - -`ace_common` diff --git a/documentation/feature/tripod.md b/documentation/feature/tripod.md deleted file mode 100644 index 06d8fc0b4a..0000000000 --- a/documentation/feature/tripod.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -layout: wiki -title: Tripod -description: Adds a packable tripod deployable on the field -group: feature -category: equipment -parent: wiki ---- - -## 1. Overview - -Adds a packable tripod deployable on the field. It features a flat part to deploy your weapon on and adjustable legs. - -## 2. Usage - -### 2.1 deploying the tripod -- Note that you need a `SSWT kit` in your inventory. -- Self interact Ctrl+⊞ Win. -- Select `Equipment` -- Select `Place SSWT kit`. - -To adjust or pick up the tripod just interact with it ⊞ Win and select the desired action. - -## 3. Dependencies - -`ace_interaction` diff --git a/documentation/feature/ui.md b/documentation/feature/ui.md deleted file mode 100644 index b079773d60..0000000000 --- a/documentation/feature/ui.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: wiki -title: UI -description: -group: feature -category: general -parent: wiki ---- - -## 1. Overview - -Changes the chat contrast on the map to allow easier reading. - -## 2. Dependencies - -`ace_common` diff --git a/documentation/feature/vector.md b/documentation/feature/vector.md deleted file mode 100644 index 1dbd11001d..0000000000 --- a/documentation/feature/vector.md +++ /dev/null @@ -1,85 +0,0 @@ ---- -layout: wiki -title: Vector -description: Adds a realistic depiction of the Vector 21 rangefinder -group: feature -category: equipment -parent: wiki ---- - -## 1. Overview - -### 1.1 Vector 21 Rangefinder -ACE3 adds a realistic depiction of the Vector 21 rangefinder to the game. Unlike other rangefinders, it doesn't just magically show you the range to your target, but in exchange allows you to do alot of things with it that the other choices in Arma do not offer. The Vector's functions include, but are not limited to: - -- Distance to a target -- Azimuth to a target -- Horizontal and vertical distance to a target -- Distance between 2 targets -- Angle between 2 targets -- Switching between feet and meters -- Switching between degrees and mils -... - -## 2. Usage - -The Vector is controlled with 2 keys: the azimuth key and the range key; Tab and R and is brought up like any other binoculars. - -#### 2.1 Slope distance -Measuring Slope distance - -- Press and hold R until the red pointing circle appears. Sight the circle on the object and release the key. - -#### 2.2 Azimuth -Measuring Azimuth - -- Press and hold the Tab ↹ until the azimuth is displayed. - -#### 2.3 Slope distance and Azimuth -Measuring Slope distance and Azimuth - -- Press and hold both R and Tab ↹ until the red pointing circle appears. -- Sight the circle on the object and release both keys. - -#### 2.4 Horizontal distance and height difference -Measuring Horizontal distance and height difference - -- Tap R once then press and hold it until the red pointing circle appears. -- Sight the circle on the object and release the key. - -#### 2.5 Azimuth and Inclination -Measuring Azimuth and Inclination - -- Tap Tab ↹ once then press and hold it until the azimuth and inclination is displayed. - -#### 2.6 Distance between two points -Measuring Distance between two points - -- Press and hold R until the red pointing circle appears. -- Sight the circle on the first object and tap Tab ↹ while further holding R. The first measurement is confirmed ("1-P" = first point). -- Sight the second object and release R. - -#### 2.7 Horizontal and vertical distance between two points -Measuring Horizontal and vertical distance between two points - -- Tap R once then press and hold it until the red pointing circle appears. -- Sight the circle on the object and tap Tab ↹ once. The first measurement is confirmed ("1-P" = first point). -- Sight the second object and release R. - -#### 2.8 Horizontal distance and azimuth between two points -Measuring Horizontal distance and azimuth between two points - -- Press and hold Tab ↹ until the azimuth appears. -- Sight the circle on the first object and tap R while further holding Tab ↹. The first measurement is confirmed ("1-P" = first point). -- Sight the second object and release Tab ↹. - -### 2.9 Fall of shot -Measuring Fall of shot - -- Tap Tab ↹ once then press and hold it until the azimuth appears. -- Sight the circle on the object and tap R while further holding Tab ↹. The first measurement is confirmed ("1-P" = first point). -- Sight the Fall of shot and release Tab ↹. The left digits display the left (`L`)/right (`r`) correction value in meter and the right digits display the longer (`A` = add)/shorter (`d` = drop) correction value in meter. If R is tapped the height correction values will be displayed (`UP` and `dn`). - -## 3. Dependencies - -`ace_common` diff --git a/documentation/feature/vehiclelock.md b/documentation/feature/vehiclelock.md deleted file mode 100644 index c4162ace7b..0000000000 --- a/documentation/feature/vehiclelock.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -layout: wiki -title: Vehicle Lock -description: The vehicle lock module enables locking vehicles and their inventory -group: feature -category: interaction -parent: wiki ---- - -## 1. Overview -This feature adds the ability to lock and unlock vehicles and their inventory using a key, as well as picking locks of locked vehicles. It's disabled by default. - -## 2. Usage -Locking, unlocking and picking vehicle locks is possible via the ACE Interact menu. - -
-
Note:
-

Different locking modes can be set, consult with your mission maker for more information.

-
- -## 3. Dependencies -`ace_interaction` diff --git a/documentation/feature/vehicles.md b/documentation/feature/vehicles.md deleted file mode 100644 index 5575a457fc..0000000000 --- a/documentation/feature/vehicles.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -layout: wiki -title: Vehicles -description: -group: feature -category: realism -parent: wiki ---- - -## 1. Overview - -### 1.1 Speed limiter -Adds ability to limit the max. speed of any vehicle. - -### 1.2 Engine start delay -The engine has to be started before the vehicle can move. Starting the engine takes aprox. 1 to 2 seconds. - -### 1.3 Fuel capacity -The range of all vehicle gets significantly reduced to reflect ranges of their real life counterparts. Scaled down to match the relative short distances in Arma 3. A full vehicle on mission start should still most likely never need a refueling during a mission. - -### 1.4 Main gun muzzles -APC's and tanks now share a muzzle for all ammunition types of their main guns. This prevents an exploit that skips the reloading time of a round or clip while changing the ammunition type. Also makes it possible to switch between ammunition types using the scroll wheel like in Arma 2. - -### 1.5 Boat machine gun tracers -NATO and AAF armed boats now use their respective tracer colours like any vehicle when they fire their rear gun. (Red for Blufor, yellow for Indep) - -### 1.6 Improved smoke launcher of Fennek (Strider) -Reduced smoke shell count and launch angle of the AAF Fennek to match the models smoke launcher. - -### 1.7 Stabilized optic of Fennek (Strider) -Stabilizes the commander's view in the Fennek (Strider). - -### 1.8 Vehicle mounted machine guns ROF -The rate of fire of vehicle mounted miniguns and machine guns is adjusted to match real life values. - -### 1.9 120mm gun and mortar behaviour -MBT main guns and mortars can no longer lock on enemies. The AT rounds of both now have raised cost values to encourage the AI to not use those rounds against foot soldiers over their machine guns or HE rounds. - -## 2. Usage - -### 2.1 Turning the engine on / off -- To turn the engine on press 2. -- To turn the engine off press 1. - -### 2.2 Turning the speed limiter on / off -- To turn the speed limiter on press Del. -- To turn it off press Del again. - -## 3. Dependencies - -`ace_common` diff --git a/documentation/feature/viewdistance.md b/documentation/feature/viewdistance.md deleted file mode 100644 index 5c9bd3a815..0000000000 --- a/documentation/feature/viewdistance.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -layout: wiki -title: View Distance -description: The view distance module adds extra view distance settings -group: feature -category: interaction -parent: wiki ---- - -## 1. Overview -ACE3 View Distance adds the ability to have different view distance settings when on foot, in a vehicle or in the air. It is enabled by default. - -## 2. Usage -- When in-game, press ESC. -- Click `ACE Options` in the top-left corner. -- Scroll down to the `Client View Distance` settings. - -## 3. Dependencies -`ace_common` diff --git a/documentation/feature/weaponselect.md b/documentation/feature/weaponselect.md deleted file mode 100644 index ec638ea943..0000000000 --- a/documentation/feature/weaponselect.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -layout: wiki -title: Weapon Select -description: -group: feature -category: interaction -parent: wiki ---- - -## 1. Overview - -### 1.1 Holster weapon -Adds the ability to holster a weapon on the back. - -### 1.2 Quick weapon select -Adds key bindings to quickly switch weapons while on foot or in a vehicle. (Unbound by default). - -### 1.3 Quick vehicle engine on/off -Adds key bindings to quickly turn a vehicle engine on or off. - -### 1.4 Grenade select -Changes the grenade selection key bindings to help prevent accidents. - -## 2. Usage - -### 2.1 Weapons - -- Press 0 to holster and unholster a weapon. -- When a weapon is holstered, the weapon fire button will not pull the weapon out. This can be used as an additional level of safety or as a role-playing feature. - -Quick weapon selection is not bound by default, but can be bound in the controls menu under `ACE3 Weapons`. - -Quick vehicle weapon selection is not bound by default, but can be bound in the controls menu under `ACE3 Vehicles`. - -## 3. Dependencies - -`ace_common` diff --git a/documentation/feature/weather.md b/documentation/feature/weather.md deleted file mode 100644 index e6d6aa6a4e..0000000000 --- a/documentation/feature/weather.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -layout: wiki -title: Weather -description: The Weather module overrides the mission/editor weather setting with a synchronized realistic weather simulation -group: feature -category: realism -parent: wiki ---- - -## 1. Overview -ACE3 Weather simulates realistic weather effects, according to the geographical location of the map, the date and time. It also ensures that all players experience the same weather effects. - -## 2. Usage - -### 2.1 Wind info -- Wind info is toggled on/off using SHIFT + K. -- The arrow representing wind info is based on [Beaufort scale](http://en.wikipedia.org/wiki/Beaufort_scale#Modern_scale) - -## 3. Dependencies -`ace_common`, `ace_modules` diff --git a/documentation/feature/windeflection.md b/documentation/feature/windeflection.md deleted file mode 100644 index ffec021d26..0000000000 --- a/documentation/feature/windeflection.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -layout: wiki -title: Wind Deflection -description: The wind deflection module simulates wind deflection of projectiles -group: feature -category: realism -parent: wiki ---- - -## 1. Overview -ACE3 Wind Deflection is enabled by default. This feature simulates the wind deflection of projectiles fired by players and is designed to work independently or in conjunction with the Advanced Ballistic feature. - -
-
Note:
-

The only affected projectiles are bullets and grenades. Mortar shells, tank shells, missiles and rockets are not affected.

-
- -## 2. Usage -ACE3 Wind Deflection can be disabled or modified via a module in the 2D editor. - - -## 3. Dependencies -`ace_weather` diff --git a/documentation/feature/yardage450.md b/documentation/feature/yardage450.md deleted file mode 100644 index 7aabbf36f2..0000000000 --- a/documentation/feature/yardage450.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -layout: wiki -title: Yardage 450 -description: Adds the Bushnell Yardage Pro Sport 450 Laser Rangefinder -group: feature -category: equipment -parent: wiki ---- - -## 1. Overview - -Adds the Bushnell Yardage Pro Sport 450 Laser Rangefinder. - -## 2. Usage - -### 2.1 How to use the Yardage 450 -- Bring it up like any other binocular -- Tap R once to activate the device. -- Sight the target and Hold R until `TARGET AQCUIRED` appears on top of the screen. -- The range in meters should now appear at the bottom of the screen. - -## 3. Dependencies - -`ace_apl` , `ace_laser` diff --git a/documentation/feature/zeus.md b/documentation/feature/zeus.md deleted file mode 100644 index 36e7f5e434..0000000000 --- a/documentation/feature/zeus.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -layout: wiki -title: Zeus -description: The Zeus module improves the Vanilla functionality -group: feature -category: interaction -parent: wiki ---- - -## 1. Overview -ACE3 Zeus is enabled by default. This feature provides control over vanilla aspects of Zeus. - -## 2. Usage -ACE3 Zeus can be disabled or modified via a module in the 2D editor. - -## 3. Dependencies -`ace_common`, `ace_modules` diff --git a/documentation/framework/advanced-missile-guidance.md b/documentation/framework/advanced-missile-guidance.md deleted file mode 100644 index 14f1d1feae..0000000000 --- a/documentation/framework/advanced-missile-guidance.md +++ /dev/null @@ -1,108 +0,0 @@ ---- -layout: wiki -title: Advanced Missile Guidance -description: The ACE3 Advanced Missile Guidance Framework provides a setup of configuration settings, functions and a execution framework for addon makers to integrate with the missile guidance and targeting mechanisms of ACE3. -group: framework -order: 5 -parent: wiki ---- - -## 1. Overview - -The ACE3 Advanced Missile Guidance Framework provides a setup of configuration settings, functions and a execution framework for addon makers to integrate with the missile guidance and targeting mechanisms of ACE3. It also provides for mod makers to create their own custom guidance methods within the framework. - -The framework provides all the functionality needed for guidance; from laser locking, target specification and selection, to handling the fired events and tracking and steering the vehicle based on provided parameters. This way, all that needs to be defined in addons is the appropriate CfgAmmo entries for the missile. - -The framework also provides addon makers and scripters with the ability to configure custom seeker types and attack profiles, which are defined below. This allows for complete control of the guidance, locking and flight of a missile at the discretion of the addon maker. - -ACE3 provides a full suite of base concepts and guidance for the majority of modern missile weaponry avialable today; these includes all basic types of seekers (SALH/SACLOS/Optic/Thermal/etc) - as well as the different common attack profiles utilized with guided munitions (such as top-down attacks). - -Finally, flight profiles and mechanics for realistic missile simulations are also implemented; allowing for lock-steering bump guidance flight such as with the M47 Dragon or GBU steering fins, or finely tuned direct flight guidance which is currently avialable with other missile types. - -## 2. Details - -The framework is broken up into 3 major components: Locking Types, Seeker Types and Attack Profiles. In combination, these components build out the entire process of launching, locking and going terminal flight against targets. - -### 2.1 Components - -#### 2.1.1 Locking Types -Locking types provide the basic functionality of targeting which will be based to a seeker type, providing target aquisition for seekers. This provides the basic functionality for providing pre-determined targets for a seeker, or allowing the seeker to perform its own target aquisition and locking. Additionally, the seeker may reference back into the locking type in order to re-perform target aquisition. - -#### 2.1.2 Seeker Types -Each seeker is generally assumed to be the logic for the seeker head unit within any given munition. Seekers within this framework provide the basic targeting functionality for the entire framework. The locking type will provide a generic target to the seeker, or the seeker may aquire a target on its own. The seeker then provides a target, either an object or a ASL position, which is then passed further into the framework. This target (or position) should be the actual current target position for the missiles flight. Seekers are required to perform all limitations and checks within their systems, although various limitations have been provided in this framework such as LOS FOV, laser guidance, etc. - -#### 2.1.3 Attack Profiles - -An attack profile adjusts the current target flight location to create the actual flight path of the missile. The attack profile is provided with all parameters of the system, including the returned target of the seeker. Using this information, the attack profile then will adjust the *direct flight target position* to specifically direct where and how the missile shall flight. - -## 3. How it all ties together - -The system is executed in a linear series of calls to each step of the process, and feeding back the return from that step to the next step. Execution is conducted using Locking->Seeker->Profile, iteratively every frame of execution. Flight times are adjusted to accTime values and FPS lag, giving consistent flight. - -On each step of execution, a target specification array [targetObj, targetPos] is passed to the locking type, which then will return a possible modified target array. Next, this modified data is passed to the seeker type - which then, in turn, returns a position vector to the current "seeked" target position (ASL). Last, this target position is passed to the attack profile, who then returns an "adjusted attack position (ASL)", which is the location the missile should *currently* be homing on for flight. - -In the simplest sense, the entire system provides the flight trajectory of the missile homing directly on the "adjusted attack position"; thus, an attack profile would ajust this position to direct the missile. For example, Top down attacks return the adjusted attack position high above the target, until entering their terminal stages, which then changes the position to be directly ontop of the target - thus "walking the missile" along its flight path and to the kill. - -## 4. Adding AMG to a missile - -### 4.1 Enabling guidance on Ammo Types -``` -class CfgAmmo { - class MissileBase; - class MyMissileType : MissileBase { - // Turn off arma crosshair-guidance - manualControl = 0; - - // Begin ACE guidance Configs - class ace_missileguidance { - enabled = 1; - - minDeflection = 0.00025; // Minium flap deflection for guidance - maxDeflection = 0.001; // Maximum flap deflection for guidance - incDeflection = 0.0005; // The incrmeent in which deflection adjusts. - - canVanillaLock = 0; // Can this default vanilla lock? Only applicable to non-cadet modes. All 'recruit' games use vanilla locking - - // Seeker type and settings for munitions - defaultSeekerType = "SALH"; - seekerTypes[] = { "SALH", "LIDAR", "SARH", "Optic", "Thermal", "GPS", "SACLOS", "MCLOS" }; - - defaultSeekerLockMode = "LOAL"; - seekerLockModes[] = { "LOAL", "LOBL" }; - - seekerAngle = 90; // Angle in front of the missile which can be searched - seekerAccuracy = 1; // seeker accuracy multiplier - - seekerMinRange = 1; - seekerMaxRange = 2500; // Range from the missile which the seeker can visually search - - // Attack profile type selection - defaultAttackProfile = "LIN"; - attackProfiles[] = { "LIN", "DIR", "MID", "HI" }; - }; -``` - -## 5. Creating your own custom seekers and attack profiles - -### 5.1 Adding seeker types and attack profiles - -``` -class ace_missileguidance_attackProfiles{ - class MyAttackProfile { - name = ""; - visualName = ""; - description = ""; - - functionName = "my_fnc_doAttackProfile"; - }; -}; -class ace_missileguidance_seekerTypes { - class MySeekerType { - name = ""; - visualName = ""; - description = ""; - - functionName = "my_fnc_doSeekerType"; - }; -}; -``` diff --git a/documentation/framework/carry-drag.md b/documentation/framework/carry-drag.md deleted file mode 100644 index cfa4eb13af..0000000000 --- a/documentation/framework/carry-drag.md +++ /dev/null @@ -1,96 +0,0 @@ ---- -layout: wiki -title: Carry and Drag System -description: -group: framework -order: 5 -parent: wiki ---- - -## 1. Config Values - -``` -class CfgVehicles { - class MyVehicle { - - - ace_dragging_canDrag = 1; // can this object be dragged?; 1 yes, 0 no (0 default) - ace_dragging_dragPosition[] = {0,1.2,0} // Offset of the model from the body while dragging, comparable to the offset in attachTo (It's the same actually) - ace_dragging_dragDirection = 0; // how much degrees is the model rotatated after dragging it (a global setDir after attachTo) - - ace_dragging_canCarry = 1; // can this object be carried?; 1 yes, 0 no (0 default) - ace_dragging_carryPosition[] = {0,1.2,0}; // Same as drag, but for carrying objects - ace_dragging_carryDirection = 0; // Same as drag, but for carrying objects - - }; -}; -``` - -## 2. Functions - -**NOTE THAT THE FOLLOWING FUNCTIONS ARE NOT PUBLIC AND THUS MAY CHANGE IN THE FUTURE.**
- - -Also note that if the item is too heavy you won't be able to carry / drag it, the mass is also affected by what's inside it.
-To bypass this empty the object and / or use setMass.
- -### 2.1 Enabling / disabling dragging - -`ace_dragging_fnc_setDraggable.`
-Enable the object to be dragged.
- -| Arguments | | ---------------| -------- | -0 | Any object (Object) -1: | true to enable dragging, false to disable (Bool) -2:| Position offset for attachTo command (Array, optional; default: [0,0,0]) -3: | Direction in degree to rotate the object after attachTo (Number, optional; default: 0) -Return value: NONE
- -#### 2.1.1 example 1: -``` -[foo,true,[0,2,0],45] call ace_dragging_fnc_setDraggable -``` -| Arguments | | ---------------| -------- | -0:| foo (my object) -1:| true (dragging is enabled) -2:| `[0,2,0]` (0 meters sideways, 2 meters forward, 0 meters upwards) -3:| 45 (the object is rotated by 45°) - -#### 2.1.2 example 2 -``` -[bar,false,[3,-2,2],20] call ace_dragging_fnc_setDraggable -``` - -| Arguments | | ---------------| -------- | -0:| bar (object) -1:| false (dragging is disabled) -2:| 3 meters sideways, -2 meters backwards, 2 meters upwards -3:| the object is rotated by 20° - -### 2.2 Enabling / disabling carrying -`ace_dragging_fnc_setCarryable.`
-Enable the object to be carried.
- -| Arguments | | ---------------| -------- | -0 | Any object (Object) -1:| true to enable carrying, false to disable (Bool) -2:| Position offset for attachTo command (Array, optional; default: [0,1,1]) -3:| Direction in degree to rotate the object after attachTo (Number, optional; default: 0) -Return value: NONE
- - -#### 2.1.1 example 1: -``` -[foo,true,[0,3,1],10] call ace_dragging_fnc_setCarryable -``` -| Arguments | | ---------------| -------- | -0:| foo (my object) -1:| true (carrying is enabled) -2:| `[0,2,0]` (0 meters sideways, 3 meters forward, 1 meters upwards) -3:| 10 (the object is rotated by 10°) - diff --git a/documentation/framework/fragmentation-configuration.md b/documentation/framework/fragmentation-configuration.md deleted file mode 100644 index 876074e6f4..0000000000 --- a/documentation/framework/fragmentation-configuration.md +++ /dev/null @@ -1,77 +0,0 @@ ---- -layout: wiki -title: Fragmentation Configuration -description: The fragmentation system (ace_frag) in ACE3 is a significant improvement over the fragmentation system in ACE2. -group: framework -parent: wiki -order: 7 ---- - -The fragmentation system (ace_frag) in ACE3 is a significant improvement over the fragmentation system in ACE2. Previously the system relied on fuzzy math from the values of `indirectHit` and `indirectHitRange` in CfgAmmo to calculate roughly the velocity and range of fragmentation. This had some serious drawbacks, especially in the case of smaller explosives such as hand grenades and 40mm grenades where casualty production was lower than desired. - -In ACE3 the system has moved away from what "feels" right to actual explosive engineering equations, primarily the [Gurney equations](http://en.wikipedia.org/wiki/Gurney_equations). This allows us to get close to the actual fragmentation velocities that would be produced by an explosive configuration similar to type of ammo we are simulating. - -The system for the end-developer is easy to use, and only requires minimal research into the type of ammo being represented. I will describe how to do this in this ticket. - -Below is an example set of explosives configuration properties for sys_frag (in this case an M67 hand grenade): - -```c++ -ace_frag_metal = 210; // metal in grams -ace_frag_charge = 185; // explosive in grams -ace_frag_gurney_c = 2843; // Gurney velocity constant for explosive type. See: http://en.wikipedia.org/wiki/Gurney_equations -ace_frag_gurney_k = 3/5; // Gurney shape factor, in this case a sphere. See: http://en.wikipedia.org/wiki/Gurney_equations -``` - -`ace_frag_metal` is the amount of metal being fragmented (generally taken as the entire weight of the warhead, though in some cases you might want to only include the fragmentation jacket or body. `ace_frag_charge` is the amount of explosive filler in the warhead. `ace_frag_metal` and `ace_frag_charge` are dimensionless values, as long as they are both in the same unit (for example kg/kg g/g lbs/lbs). - -`ace_frag_gurney_c` is the Gurney constant for explosive force. You can find a list of common explosive types below. If you can not find it here, or want more accurate numbers, just google the type of explosive and Gurney constant and you can find substantial information. This is *NOT* the detonation velocity of the explosive, do not confuse them! - -| Type | Speed | -|------------------|----------| -|Composition B | 2700 m/s | -|Composition C-3 | 2680 m/s | -|Cyclotol 75/25 | 2790 m/s | -|HMX | 2800 m/s | -|LX-14 | 2970 m/s | -|Octol 75/25 | 2800 m/s | -|PBX 9404 | 2900 m/s | -|PBX 9502 | 2377 m/s | -|PETN | 2930 m/s | -|RDX | 2830 m/s | -|Tetryl | 2500 m/s | -|TNT | 2440 m/s | -|Tritonal | 2320 m/s | - - -`ace_frag_gurney_k` is the shape factor for the explosive configuration. You should choose it based on the general configuration of explosives/metal in the warhead. Most grenades for example are a sphere. Artillery and aircraft bombs are a cylinder. Mines generally a flat plate. Below is a list of the three common shapes and their factors. - -``` -Sphere = 3/5 -Cylinder = 1/2 -Plate = 3/5 -``` - -There are other configurations but these are the most common. If you are interested in others check out the wikipedia link given above. Most of these will not correctly function in sys_frag though due to additional variables for the equation. - -In addition to these variables there are different types of fragmentation fragments to choose from, and they can be defined in the config value `ace_frag_classes[]`. Below are a list of the types. - -``` -ACE_frag_tiny -ACE_frag_tiny_HD -ACE_frag_small -ACE_frag_small_HD -ACE_frag_medium -ACE_frag_medium_HD -ACE_frag_large -ACE_frag_large_HD -ACE_frag_huge -ACE_frag_huge_HD -``` - -The tinier the piece of fragmentation the shorter the distance of travel. The `_HD` variants are all even higher drag versions. Grenades generally should use the `_HD` variants. Experimentation here is important. - -The final information needed is a couple of entries for forcing or ignoring fragmentation for this ammo. - -If you set `ace_frag_skip` to 1 then you will skip fragmentation for ammo of this type. This is useful for things that might cause high network load, such as FFAR rockets, or possibly even 40mm grenades from AGLs. Experimentation under network conditions is required. - -If you set `ace_frag_force` to 1 it will force the fragmentation system to use frag on this ammo, ignoring sys_frags internal qualifications based on hit values. diff --git a/documentation/framework/settings.md b/documentation/framework/settings.md deleted file mode 100644 index 58208a873d..0000000000 --- a/documentation/framework/settings.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -layout: wiki -title: Settings Framework -description: ACE3 contains an extensive settings framework that allows you to tweak the modification without having to mess around with deleting pbos. -group: framework -order: 5 -parent: wiki ---- - -ACE3 contains an extensive settings framework that allows you to tweak the modification without having to mess around with deleting pbos. These settings are all handled server side and broadcasted to the clients connecting to that server. This ensures that everyone playing on the server will have a uniform experience. - -Part of this settings framework are global settings and client settings. Both use the same underlaying framework, with the difference that client settings can be adjusted by clients, where global settings can not. - - -## 1. How do they work - -Settings are entries in the config that get translated to `missionnamespace` global variables. An example settings entry looks like this: - -```c++ -class ACE_module_sampleSetting { - // Value - value = 1; - - // Type (SCALAR, BOOL, STRING, ARRAY, COLOR) - typeName = "SCALAR"; - - // Force the setting? - force = 0; - - // Does it appear on the options menu? - isClientSettable = 1; - - // The following settings only apply when isClientSettable == 1 - // Stringtable entry with the setting name - displayName = "$STR_ACE_Common_SettingName"; - - // Stringtable entry with the setting description - description = "$STR_ACE_Common_SettingDescription"; - - // Stringtable entries that describe the options - // Only applies if typeName == "SCALAR"; and is optional - values[] = {"Disabled", "Enabled", "Only Cursor", "Only On Keypress", "Only Cursor and KeyPress"}; -}; -``` - -Settings are defined from the mods config but can be adjusted through the following methods: - -* Optional config entries -* Mission side modules - -## 2. Load order - -The load order for the settings are: - -* 1. Mod config -* 2. Server config -* 3. Mission config -* 4. Placed down mission modules - -What this means is that at any the 3 points after the mod config it is possible to insert your adjusted settings and force those (optionally). This is a powerful tool for server admins, whom can ensure that everyone is using uniform settings across the board on their server. And it provides mission makers the ability to easily set settings for their mission, without creating a large dependency on ACE3; you do not have to place down mission modules. - -## 3. How do I use them? - -In the 'how do they work' chapter an example of settings was shown. This is the same for any settings config. The only difference is the location. For ACE3 modules, the settings are placed in the class `ACE_settings`. The same goes for the mission config. - -The server config setting entries are done through our optional ACE_server.pbo, which can be found in the optionals folder of @ace. It also contains a `userconfig` folder, which inside contains the file `ace\serverconfig.hpp`. This is the location ACE3 settings are placed. There is no need for a sub class. - -### 3.1 Getting all the settings! - -ACE3 contains a lot of settings; for that reason tweaking everything to your liking manually can be quite a task. We have provided the option to export all settings in the editor (single-player). For this, follow these simple steps: - -* Open the editor (single-player). -* Under modules (F7), find ACE, `Config Export [ACE]`. -* Place down the module, ensure that the allow parameter is set to yes. -* Press preview, once in game, press Esc and open the ACE3 Options dialog (top left) -* This is the dialog where you can modify client side settings. On the bottom left of it, you will now see a button called `Config Export`. Press it and a new dialog opens. -* You are now in the dialog that allows you to adjust all settings from ACE3. Tweak this to your liking. -* Once you are done tweaking, press the `Export` button and all settings will be copied to your clipboard. -* Paste the settings in your `serverconfig.hpp` file and you're done. - -Note that the format copied to your clipboard by this can also be used in the mission config (`description.ext`), as long as they are in the class `ACE_Settings`. - -```c++ -class ACE_Settings { - // add exported settings here -}; -``` - - -### 3.2 Loading up the server config - -As stated before, the server config gets loaded through the optional `ACE_server.pbo`. This PBO is only required (and should only be used) on the server - clients do not need to have this! It is for this reason we have not signed this PBO. - -Load the `ACE_server.pbo` like any other addon on your server. It is advised to create an `@aceServer` mod folder with an `addons` sub folder where you would paste the `ACE_server.pbo` and load that through `-serverMod=@aceServer`. - diff --git a/documentation/missionmaker/class-names.md b/documentation/missionmaker/class-names.md deleted file mode 100644 index 9866f20064..0000000000 --- a/documentation/missionmaker/class-names.md +++ /dev/null @@ -1,341 +0,0 @@ ---- -layout: wiki -title: Class names -description: A list of all the class names in ACE3 -group: missionmaker -order: 11 -parent: wiki ---- - -Everything is ordered alphabetically. - -You know an in-game name but want the class name? CTRL + F - -## AtragMX -`added in 3.0.0.3` - -class name | in game name | type | ----------- | --------- | --------- | -ACE_ATragMX | ATragMX | ACE_ItemCore | - -## Attachable -`added in 3.0.0.3` - -class name | in game name | type | ----------- | --------- | --------- | -ACE_IR_Strobe_Item | IR strobe | ACE_ItemCore | - -## Ballistics -`added in 3.0.0.3` - -class name | in game name | type | ----------- | --------- | --------- | -ACE_100Rnd_65x39_caseless_mag_Tracer_Dim | 6.5mm IR-DIM | Magazine | -ACE_200Rnd_65x39_cased_Box_Tracer_Dim | 6.5mm IR-DIM | Magazine | -ACE_30Rnd_65x39_caseless_mag_Tracer_Dim | 6.5mm IR-DIM | Magazine | -ACE_30Rnd_65x39_caseless_green_mag_Tracer_Dim | 6.5mm IR-DIM | Magazine | -ACE_30Rnd_556x45_Stanag_M995_AP_mag | 5.56mm AP | Magazine | -ACE_30Rnd_556x45_Stanag_Mk262_mag | 5.56mm Mk262 | Magazine | -ACE_30Rnd_556x45_Stanag_Mk318_mag | 5.56mm Mk318 | Magazine | -ACE_30Rnd_556x45_Stanag_Tracer_Dim | 5.56mm IR-DIM | Magazine | -ACE_20Rnd_762x51_Mag_Tracer | 7.62mm Tracer | Magazine | -ACE_20Rnd_762x51_Mag_Tracer_Dim | 7.62mm IR-DIM | Magazine | -ACE_20Rnd_762x51_Mag_SD | 7.62mm SD | Magazine | -ACE_10Rnd_762x51_M118LR_Mag | 7.62mm M118LR | Magazine | -ACE_10Rnd_762x51_Mk316_Mod_0_Mag | 7.62mm Mk316 | Magazine| -ACE_10Rnd_762x51_Mk319_Mod_0_Mag | 7.62mm Mk319 | Magazine | -ACE_10Rnd_762x51_M993_AP_Mag | 7.62mm AP | Magazine | -ACE_20Rnd_762x51_M118LR_Mag | 7.62mm M118LR | Magazine | -ACE_20Rnd_762x51_Mk316_Mod_0_Mag | 7.62mm Mk316 | Magazine | -ACE_20Rnd_762x51_Mk319_Mod_0_Mag | 7.62mm Mk319 | Magazine | -ACE_20Rnd_762x51_M993_AP_Mag | 7.62mm AP | Magazine | -ACE_20Rnd_762x67_Mk248_Mod_0_Mag | 7.62mm Mk248 | Magazine | -ACE_20Rnd_762x67_Mk248_Mod_1_Mag | 7.62mm Mk248 | Magazine | -ACE_20Rnd_762x67_Berger_Hybrid_OTM_Mag | 7.62mm OTM | Magazine | -ACE_30Rnd_65x47_Scenar_mag | 6.5mm Lapua | Magazine | -ACE_30Rnd_65_Creedmor_mag | 6.5mm CM | Magazine | -ACE_10Rnd_338_300gr_HPBT_Mag |.338 HPBT | Magazine | -ACE_10Rnd_338_API526_Mag |.338 AP | Magazine | -ACE_5Rnd_127x99_Mag | 12.7mm | Magazine | -ACE_5Rnd_127x99_API_Mag | 12.7mm API | Magazine | -ACE_5Rnd_127x99_AMAX_Mag | 12.7mm | Magazine | -ACE_30Rnd_9x19_mag | 9x19mm | Magazine | -ACE_16Rnd_9x19_mag | 9x19mm | Magazine | -ACE_10Rnd_762x54_Tracer_mag | 7.62mm | Magazine | - -## Captive -`added in 3.0.0.3` - -class name | in game name | type | ----------- | --------- | --------- -ACE_CableTie | cable tie | ACE_ItemCore | - -## Common -`added in 3.0.0.3` - -class name | in game name | type | ----------- | --------- | --------- -ACE_Banana | banana | ACE_ItemCore | - -## Concertina Wire -`added in 3.1.1` - -class name | in game name | type | ----------- | --------- | --------- -ACE_ConcertinaWireCoil | Concertina Wire Coil | ThingX | -ACE_ConcertinaWire | Concertina Wire | deployed concertina wire | - -## DAGR -`added in 3.1.1` - -class name | in game name | type | ----------- | --------- | --------- -ACE_DAGR | DAGR | ACE_ItemCore | - -## Disposable -`added in 3.0.0.3` - -class name | in game name | type | ----------- | --------- | --------- -ACE_launch_NLAW_Used_F | used NLAW | Weapon | - -## Explosives -`added in 3.0.0.3` - -class name | in game name | type | ----------- | --------- | --------- -ACE_Clacker| M57 Firing Device | ACE_ItemCore | -ACE_M26_Clacker| M26 Firing Device | ACE_ItemCore | -ACE_DefusalKit | Defusal Kit | ACE_ItemCore | -ACE_DeadManSwitch | Dead Man's Switch | ACE_ItemCore | -ACE_Cellphone | Cellphone | ACE_ItemCore | - -## Grenades -`added in 3.0.0.3` - -class name | in game name | type | ----------- | --------- | --------- -ACE_HandFlare_White | M127A1 Hand Held Signal (White) | Grenade | -ACE_HandFlare_Red | M127A1 Hand Held Signal (Red | Grenade | -ACE_HandFlare_Green | M127A1 Hand Held Signal (Green) | Grenade | -ACE_HandFlare_Yellow | M127A1 Hand Held Signal (Yellow) | Grenade | -ACE_M84 | M84 Stun Grenade | Grenade | - -## Hearing -`added in 3.0.0.3` - -class name | in game name | type | ----------- | --------- | --------- -ACE_EarPlugs | Earplugs | ACE_ItemCore | - -## HuntIR -`added in 3.1.1` - -class name | in game name | type | ----------- | --------- | --------- -ACE_HuntIR_monitor | HuntIR monitor | ACE_ItemCore | -ACE_HuntIR_M203 | HuntIR Round | Grenade shell | -ACE_HuntIR_Box | HuntIR Transport Box | ammo box | - -## Kestrel -`added in 3.0.0.3` - -class name | in game name | type | ----------- | --------- | --------- -ACE_Kestrel4500 | Kestrel 4500NV | ACE_ItemCore | - -## Laser Pointers -`added in 3.0.0.3` - -class name | in game name | type | ----------- | --------- | --------- -acc_pointer_IR | Laser Pointer (red) | Weapon accessory | -ACE_acc_pointer_red | Laser Pointer (green) | Weapon accessory | -ACE_acc_pointer_green_IR | Laser Pointer (green) | Weapon accessory | -ACE_acc_pointer_green | Laser Pointer (green) | Weapon accessory | - -## Logistics -`added in 3.0.0.3` - -class name | in game name | type | ----------- | --------- | --------- -ACE_UAVBattery | UAV Battery | ACE_ItemCore | -ACE_wirecutter | Wirecutter | ACE_ItemCore | - -## Map Tools -`added in 3.0.0.3` - -class name | in game name | type | ----------- | --------- | --------- -ACE_MapTools | Map Tools | ACE_ItemCore | - -## Medical -`added in 3.0.0.3` - - -class name | in game name | type | ----------- | --------- | --------- -ACE_atropine | Atropin autoinjector | ACE_ItemCore | -ACE_fieldDressing | Bandage (Basic) | ACE_ItemCore | -ACE_elasticBandage | Bandage (Elastic) | ACE_ItemCore | -ACE_quikclot | Basic Field Dressing (QuikClot) | ACE_ItemCore | -ACE_bloodIV | Blood IV (1000ml) | ACE_ItemCore | -ACE_bloodIV_500 | Blood IV (500ml) | ACE_ItemCore | -ACE_bloodIV_250 | Blood IV (250ml) | ACE_ItemCore | -ACE_bodyBag | Bodybag | ACE_ItemCore | -ACE_bodyBagObject | Bodybag (packed) | | -ACE_epinephrine | Epinephrine autoinjector | ACE_ItemCore | -ACE_morphine | Morphine autoinjector | ACE_ItemCore | -ACE_packingBandage | Packing Bandage | ACE_ItemCore | -ACE_personalAidKit | Personal Aid Kit | ACE_ItemCore | -ACE_plasmaIV | Plasma IV (1000ml) | ACE_ItemCore | -ACE_plasmaIV_500 | Plasma IV (500ml) | ACE_ItemCore | -ACE_plasmaIV_250 | Plasma IV (250ml) | ACE_ItemCore | -ACE_salineIV | Saline IV (1000ml) | ACE_ItemCore | -ACE_salineIV_500 | Saline IV (500ml) | ACE_ItemCore | -ACE_salineIV_250 | Saline IV (250ml) | ACE_ItemCore | -ACE_surgicalKit | Surgical Kit | ACE_ItemCore | -ACE_tourniquet | Tourniquet (CAT) | ACE_ItemCore | - -## MicroDAGR -`added in 3.0.0.3` - -class name | in game name | type | ----------- | --------- | --------- -ACE_microDAGR | MicroDAGR GPS | ACE_ItemCore | - -## MK6 Mortar -`added in 3.0.0.3` - -class name | in game name | type | ----------- | --------- | --------- -ACE_RangeTable_82mm | 82mm Rangetable | ACE_ItemCore | - -## M2XA -`added in 3.1.1` - -class name | in game name | type | ----------- | --------- | --------- -ACE_MX2A | MX-2A | Binocular | - - -## Nightvision -`added in 3.0.0.3` - -class name | in game name | type | ----------- | --------- | --------- -ACE_NVG_Gen1 | NV Goggles (Gen1) | Nvgs | -ACE_NVG_Gen2 | NV Goggles (Gen2) | Nvgs | -ACE_NVG_Gen3 | NV Goggles (Gen3) | Nvgs | -ACE_NVG_Gen4 | NV Goggles (Gen4) | Nvgs | -ACE_NVG_Wide | NV Goggles (Wide) | Nvgs | - - -## Optics -`added in 3.0.0.3` - -class name | in game name | type | ----------- | --------- | --------- -ACE_optic_Arco_2D | ARCO (2D) | Weapon accessory | -ACE_optic_Arco_PIP | ARCO (PIP) | Weapon accessory | -ACE_optic_LRPS_2D | LRPS (2D) | Weapon accessory | -ACE_optic_LRPS_PIP | LRPS (PIP) | Weapon accessory | -ACE_optic_SOS_2D| MOS (2D) | Weapon accessory | -ACE_optic_SOS_PIP | MOS (PIP) | Weapon accessory | -ACE_optic_MRCO_2D | MRCO (2D) | Weapon accessory | -ACE_optic_MRCO_PIP | MRCO (PIP) | Weapon accessory | -ACE_optic_Hamr_2D | RCO (2D) | Weapon accessory | -ACE_optic_Hamr_PIP | RCO (PIP) | Weapon accessory | - -## Overheating -`added in 3.0.0.3` - -class name | in game name | type | ----------- | --------- | --------- -ACE_SpareBarrel | Spare barrel | ACE_ItemCore | - -## Parachute -`last modified in 3.2.0` - -class name | in game name | type | ----------- | --------- | --------- -ACE_Altimeter | Altimeter Watch | ACE_ItemCore | -ACE_NonSteerableParachute | Non-Steerable Parachute | Backpack | -ACE_ReserveParachute | Reserve Parachute | Backpack | - -## Rangecard -`added in 3.1.1` - -class name | in game name | type | ----------- | --------- | --------- -ACE_RangeCard | rangecard | ACE_ItemCore | - -## Respawn -`last modified in 3.2.0` - -class name | in game name | type | ----------- | --------- | --------- -ACE_Rallypoint_West | Rallypoint West | FlagCarrier | -ACE_Rallypoint_East | Rallypoint East | FlagCarrier | -ACE_Rallypoint_Independent | Rallypoint Independent | FlagCarrier | -ACE_Rallypoint_West_Base | Rallypoint West (Base) | FlagCarrier | -ACE_Rallypoint_East_Base | Rallypoint East (Base) | FlagCarrier | -ACE_Rallypoint_Independent_Base | Rallypoint Independent (Base) | FlagCarrier | - -## Vector -`added in 3.0.0.3` - -class name | in game name | type | ---------- | --------- | --------- -ACE_Vector | Vector 21 | Binoculars | - -## Vehicle Lock -`added in 3.0.0.3` - -class name | in game name | type | ----------- | --------- | --------- -ACE_key_master | Vehicle Key: Master | ACE_ItemCore | -ACE_key_lockpick | Lockpick | ACE_ItemCore | -ACE_key_west | Vehicle Key: West | ACE_ItemCore | -ACE_key_east | Vehicle Key: East | ACE_ItemCore | -ACE_key_indp | Vehicle Key: Independent | ACE_ItemCore | -ACE_key_civ | Vehicle Key: Civilian | ACE_ItemCore | - -## Sandbag -`added in 3.1.1` - -class name | in game name | type | ----------- | --------- | --------- -ACE_Sandbag_empty | Sandbag (empty) | ACE_ItemCore | -ACE_SandbagObject | Sandbag | ThingX | - -## Spotting Scope -`added in 3.1.1` - -class name | in game name | type | ----------- | --------- | --------- -ACE_SpottingScope | Spotting Scope | ACE_ItemCore | -ACE_SpottingScopeObject | Spotting Scope (placed) | StaticATWeapon | - -## Tactical Ladder -`added in 3.1.1` - -class name | in game name | type | ----------- | --------- | --------- -ACE_TacticalLadder_Pack | Telescopic Ladder | Backpack | -ACE_Tactical_Ladder | Telescopic Ladder (placed) | house | - -## Tripod -`added in 3.1.1` - -class name | in game name | type | ----------- | --------- | --------- -ACE_Tripod | SSWT Kit | ACE_ItemCore | -ACE_TripodObject | SSWT Kit (placed) | ThingX | - -## Yardage 450 -`added in 3.1.1` - -class name | in game name | type | ----------- | --------- | --------- -ACE_Yardage450 | Yardage 450 | Binocular | \ No newline at end of file diff --git a/documentation/missionmaker/mission-tools.md b/documentation/missionmaker/mission-tools.md deleted file mode 100644 index eeb4c2be06..0000000000 --- a/documentation/missionmaker/mission-tools.md +++ /dev/null @@ -1,138 +0,0 @@ ---- -layout: wiki -title: Mission tools -description: A short description of ACE3's mission tools that help mission makers to provide awesome missions -group: missionmaker -order: 10 -parent: wiki ---- - -## 1. ACE Rallypoints -*Part of: ace_respawn* - -"ACE Rallypoints" is a two way teleport system between two positions. Usually this is used to transport units that have died during a mission back to the front line. The rally points are portrayed by flagpoles (West, East and Independant flagpoles are available) that have a "Base" and an "Exit" version. - -They can be found in the editor under: "Empty" >> "ACE Respawn" - -**Classnames:** -- `ACE_Rallypoint_West`, `ACE_Rallypoint_West_Base` -- `ACE_Rallypoint_East`, `ACE_Rallypoint_East_Base` -- `ACE_Rallypoint_Independent`, `ACE_Rallypoint_Independent_Base` - -Using the Interaction Menu on a rallypoint offers the ability to teleport from one flagpole to the other flagpole and vice versa. - -If you want to change the texture of the flag use this line: - -```c++ -this setFlagTexture 'path\to\my\texture\my_awesome_clan_logo.paa'; -``` - -*Note: You can't place more than one rallypoint of the same type.* - -All units synced to the ["Rallypoint System" module](./modules.html#1.14-rallypoint-system) are able to move the rallypoint. - -
-
Note:
-

It's important to mention that this doesn't work for player who join during a mission (JIP = Join in progress). That's something we can't change because that's the way Bohemia Interactive has implemented their module framework.

-
- -To enable other units to move them add this to the unit's initialization code: - -```c++ -_unit setVariable ["ACE_canMoveRallypoint", true, true]; -``` - -## 2. ACE SwitchUnits -*Part of: ace_switchunits* - -"ACE SwitchUnits" is a tool for misson makers to quickly add PvP (Player vs. Player) elements to a mission. In short it enables a player to control AI units. Allowing players to perform as enemies even during a COOP mission increases the authenticity of the enemy and thus the immersion for everyone. - -The most prominent feature of ACE SwitchUnits is that you can add it to nearly every existing mission and get AI control out of the box. Dynamic mission like "Enemy Assault", "Patrol Ops", "Invade & Annex", etc. don't need to be touched to make all random spawned AI's controllable. - -In its current form you're able to switch to infantry (vehicles, etc. are planned) from all four sides (West, East, Independent, Civilian). - -To enable a player to control AI add the following to its init line: - -```c++ -this setVariable ["ACE_CanSwitchUnits", true]; -``` -Once this player spawns, all controllable AI will be marked on his map and he'll be able to click on the map to switch to this unit. The initial unit will be prone to damage, but has no equipment and can't run. So it would be wise to hide or move this unit far from other players. - -The [module settings](./modules.html#1.16-switchunits-system) define which side a player can control or how big the radius of the safe zone is. The safe zone is a circular zone around AI units that must be clear from players of an opposing side to be able to switch to. - -## 3. ACE Slideshow -*Part of: ace_slideshow* - -"ACE Slideshow" is a very powerful tool for mission makers and platoon leaders giving them the power to project images on some objects. -You will now learn how to set up everything for it to work properly. - -### 3.1 The module explained -Name | Explanation ----- | ----- -Objects | Name of the objects used as screens -Controllers | Name of the objects used as controllers -Images | Full path of the image from the mission folder/file or from an other mod (even BI PBOs work) -Interaction names | Name of your interactions -Slide duration | 0 (0 = disabled, number is in seconds) - -- Only objects with hiddenSelection 0 can be used as "screens". -- If you set a duration the remotes will be disabled. (If the remotes are disabled `ace_interaction` is not needed) -- You can have multiple sets of images on different screens, see the advanced slideshow below. -- It is advisable images resolution sizes are powers of 2 (eg. 512x512) to avoid graphical glitches in them. - -
-
Note:
-

Mission MUST be in a PBO format (not bare folder) when used on a dedicated server due to an [issue](http://feedback.arma3.com/view.php?id=22310) to prevent errors.

-
- -### 3.2 Basic slideshow -*A set of 4 images that are swapped via a remote* - -Note that all names and interaction names are examples. - -- First place the slideshow module down. -- Place the object that will be used as a "screen" and give it the name `foo1` -- Place the object you want to use as a remote and name it `bar1` -- In your mission folder create a new folder called images and drop your banana images there. -- Place down the module and fill it as follows: - -Name | Written ----- | ----- -Objects | foo1 -Controllers | bar1 -Images | images\banana1.jpg,images\banana2.jpg,images\banana3.jpg,images\banana4.jpg -Interaction names | banana1,banana2,banana3,banana4 -Slide duration | 0 - -- Go in game and enjoy your bananas - -### 3.3 Multiple screens and remotes -*2 set of "screens" and remotes* - -- First place the slideshow module down. -- Place 2 objects that you want to use as "screens" and call them `foo1` and `foo2` -- Place 2 objects you want to use as remotes and call them `bar1` and `bar2` -- In your mission folder create a new folder called images and drop your banana images there. -- Place down 2 modules and fill them as follows: - -*Module 1* - -Name | Written ----- | ----- -Objects | foo1 -Controllers | bar1 -Images | images\banana1.jpg,images\banana2.jpg -Interaction names | banana1,banana2 -Slide duration | 0 - -*Module 2* - -Name | Written ----- | ----- -objects | foo2 -Controllers | bar2 -images | images\banana3.jpg,images\banana4.jpg -Interaction names | banana3,banana4 -Slide duration | 0 - -- You now have two set of "screens" with a remote each. \ No newline at end of file diff --git a/documentation/missionmaker/modules.md b/documentation/missionmaker/modules.md deleted file mode 100644 index 9ee9ee7e57..0000000000 --- a/documentation/missionmaker/modules.md +++ /dev/null @@ -1,492 +0,0 @@ ---- -layout: wiki -title: Modules -description: A list of all modules in ACE3 and all the settings that can be tweaked by them -group: missionmaker -order: 5 -parent: wiki ---- - -## 1. ACE3 -### 1.1 Advanced Ballistics -*Part of: ace_advanced_ballistics* - -This module allows enabling and configuring advanced ballistic simulations. - -**Settings:** - -Name | Type | Description | Default value ----- | ---- | ---- | ---- | -Advanced Ballistics | Boolean | Enables advanced ballistics. | No -Enabled For Snipers | Boolean | Enables advanced ballistics for non local snipers (when using high power optics). | Yes -Enabled For Group Members | Boolean | Enables advanced ballistics for non local group members.| No -Enabled For Everyone | Boolean | Enables advanced ballistics for all non local players (enabling this feature may degrade performance during heavy firefights in multiplayer). | No -Disabled In FullAuto Mode | Boolean | Disables the advanced ballistics during full auto fire. | No -Enable Ammo Temperature Simulation | Boolean | Muzzle velocity varies with ammo temperature. | Yes -Enable Barrel Length Simulation | Boolean | Muzzle velocity varies with barrel length. | Yes -Enable Bullet Trace Effect | Boolean | Enables a bullet trace effect to high caliber bullets (only visible when looking through high power optics). | Yes -Simulation Interval | Number | Defines the interval between every calculation step. | 0.00 -Simulation Radius | Number | Defines the radius around the player (in meters) at which advanced ballistics are applied to projectiles. | 3000 - -### 1.2 Allow Config Export -*Part of: ace_Optionmenu* - -This modules allows to export all current ACE3 settings from the ACE3 Option menu to the clipboard and RPT file. - -**Settings:** - -Name | Type | Description | Default value ----- | ---- | ---- | ---- | -Allow | Boolean | Enables the "export" button in the ACE3 Option menu. | Yes - -### 1.3 BlueForceTracking -*Part of: ace_map* - -When adding the "Blue Force Tracking" module to your mission it adds map markers to every group on the players side and refreshes them in certain configurable interval (in seconds). The module takes the group type into account and uses the proper NATO icon for each marker. - -**Settings:** - -Name | Type | Description | Default value ----- | ---- | ---- | ---- | -BFT Enable | Boolean | Enable blue force tracking | No -Interval | Number | How often the markers should be refreshed (in seconds). | 1 -Hide AI Groups | Boolean | Hide markers for "AI only" groups. | No - -### 1.4 Captives settings -*Part of: ace_captives* - -Controls the settings for cable ties and surrendering. -Very useful if you don't want your players to be able to restrict each others. - -**Settings:** - -Name | Type | Description | Default value ----- | ---- | ---- | ---- | -Can handcuff own side | Boolean | Determine if you are able to handcuff your own side or not. | Yes -Allow surrendering | Boolean | Determine if you are able to surrender or not when your weapon is holstered. | Yes - -### 1.5 Check PBOs -*Part of: ace_common* - -If you are worried that players haven't updated ACE3 or other mods to the version you're using on the server, you can place the "Check PBOs" module on your map. You can choose one of three posible actions that are being executed when a player joins that has a wrong version of ACE3 or an other mod: - -* Warn once -* Warn permanent -* Kick - -**Settings:** - -Name | Type | Description | Default value ----- | ---- | ---- | ---- | -Action | Option | What to do with people who do not have the right PBOs. | "Warn once" -Check all addons | Boolean | Check all addons instead of only those of ACE3? | "No" - - **Whitelist** - -You can make a whitelist of addons that don't have to be on the server. If you want to use the "Check all addons" option of this module and allow the usage of client side modifications like Blastcore or JSRS, you have to list them here. -The list must be in the following format: `["ADDON1","ADDON2",...]` where the addons are CfgPatches references to all PBOs of the optional mod. To figure these out, you can use the scripting command `activatedAddons` in the editor while those mods are enabled. - -Example 1: @Blastcore-A3:
-``` -["warfxpe","blastcore_vep"] -``` - -Example 2: @JSRS:
-``` -[TBD] -``` - -Example 3: @JSRS + @Blastcore-A3:
-``` -[TBD, "warfxpe","blastcore_vep"] -``` - -### 1.6 Explosive System -*Part of: ace_explosive* - -The "Explosive System" module lets you tweak the settings for the new explosive system that ACE3 introduces. - -**Settings:** - -Name | Type | Description | Default value ----- | ---- | ---- | ---- | -Require specialists? | Boolean | Require explosive specialists to disable explosives. | No -Punish non-specialists? | Boolean | Increase the time it takes to complete actions for non-specialists. | Yes -Explode on defusal? | Boolean | Enables certain explosives to explode on defusal? | Yes - -### 1.7 Finger settings -*Part of ace_finger* - -This module allow you to tweak settings for finger pointing such as is if it's enabled or the distance people can see you finger things - -**Settings:** - -Name | Type | Description | Default value ----- | ---- | ---- | ---- | -Finger pointing enabled | Boolean | | Yes -Finger Max Range | Number | How far away players can finger each others (in meters) | 4 - -### 1.8 Friendly Fire Messages -*Part of: ace_respawn* - -The "Friendly Fire Messages" module triggers a message when a player kills a friendly or civilian unit. This module isn't needed on servers with a low difficulty setting. - -### 1.9 Hearing -*Part of: ace_hearing* - -Placing this modules allows you to disable combat deafness usually triggered by loud explosions or heavy weapons in a players proximity. - -**Settings:** - -Name | Type | Description | Default value ----- | ---- | ---- | ---- | -Enable combat deafness? | Boolean | Enable combat deafness? | Yes - -### 1.10 Interaction System -*Part of: ace_interaction* - -This module allows you to tweak if players should be able to use team management functions (e.g. "switch group", "become leader"). - -**Settings:** - -Name | Type | Description | Default value ----- | ---- | ---- | ---- | -Enable Team Management | Boolean | Should players be allowed to use the Team Management Menu?. | Yes - -### 1.11 LSD Vehicles -*part of ace_common* - -Any vehicle linked to this module will become a seizure inducing machine of doom, no, really. - -### 1.12 Make Unit Surrender -*Part of: ace_captives* - -Syncing units to that module sets them in the captive state with their arms behind their back. Useful for e.g. hostage rescue missions. - -### 1.13 Map -*Part of: ace_map* - -ACE3 introduces a bit more realism for the vanilla Arma 3 map and how it behaves. Some of these settings can be toggled by this module. - -**Settings:** - -Name | Type | Description | Default value ----- | ---- | ---- | ---- | -Map illumination? | Boolean | Calculate dynamic map illumination based on light conditions?. | Yes -Map shake? | Boolean | Make map shake when walking?. | Yes -Limit map zoom? | Boolean | Limit the amount of zoom available for the map?. | No -Show cursor coordinates? | Boolean | Show the grid coordinates on the mouse pointer?. | No - -### 1.14 MicroDAGR Map Fill -*Part of: ace_microdagr* - -Controls how much data is filled on the microDAGR items. Less data restricts the map view to show less on the minimap. - -**Settings:** - -Name | Type | Description | Default value ----- | ---- | ---- | ---- | -MicroDAGR Map Fill | Option | How much map data is filled on MicroDAGR's. | "Full Satellite + Buildings" - -### 1.15 MK6 Settings -*Part of: ace_mk6mortar* - -ACE3 now includes the first iteration of getting a less arcady point and click mortar experience. -Placing this modules allows you to enable the increased realism in game. - -**Settings:** - -Name | Type | Description | Default value ----- | ---- | ---- | ---- | -Air Resistance | Boolean | For Player Shots, Model Air Resistance and Wind Effects. | No -Allow MK6 Computer | Boolean | Show the Computer and Rangefinder (these **NEED** to be removed if you enable air resistance). | No -Allow MK6 Compass | Boolean | Show the MK6 Digital Compass. | Yes - -### 1.16 Name Tags -*Part of: ace_nametags* - -This module allows you to tweak the settings for player names tags. - -**Settings:** - -Name | Type | Description | Default value ----- | ---- | ---- | ---- | -Show player names | Option | Let you choose when nametags appears. | "Do Not Force" -layer Names View Distance | Number | Distance (in meters) at which player names are shown. | 5 -Show name tags for AI? | Option | Show the name and rank tags for friendly AI units, or by default allows players to choose it on their own. | "Do Not Force" -Show crew info? | Option | Show vehicle crew info, or by default allows players to choose it on their own. | "Do Not Force" -Show for Vehicles? | Boolean | Show cursor NameTag for vehicle commander (only if client has name tags enabled). | No - -### 1.17 Rallypoint System -*Part of: ace_respawn* - -This module enables Mission Makers to specifically enable units to move a rallypoint. Every unit that is synced with that module is able to move a rallypoint. - -
-
Note:
-

It's important to mention that this doesn't work for player who join during a mission (JIP = Join in progress). That's something we can't change because that's the way Bohemia has implemented their module framework.

-
- -To enable JIP players to move rally points have a look at [ACE3 Rallypoints](./mission-tools.html#1.-ace-rallypoints). - -### 1.18 Respawn System -*Part of: ace_respawn* - -The "Respawn System" module enables players to respawn with the gear they had before dying and to remove bodies of players after a configurable interval (in seconds). - -**Settings:** - -Name | Type | Description | Default value ----- | ---- | ---- | ---- | -Save Gear? | Boolean | Respawn with the gear a player had just before his death. | No - -### 1.19 Sitting -*part of ace_sitting* - -This module is used to turn sitting on. - -**Settings:** - -Name | Type | Description | Default value ----- | ---- | ---- | ---- | -Enable sitting | Boolean | | Yes - -### 1.20 SwitchUnits System -*Part of: ace_switchunits* - -The [SwitchUnits System](./mission-tools.html#2.-ace-switchunits) enables players to control certain AI units on the map. - -**Settings:** - -Name | Type | Description | Default value ----- | ---- | ---- | ---- | -Switch To West? | Boolean | Allow switching to west units? | No -Switch To East? | Boolean | Allow switching to east units? | No -Switch To Independent? | Boolean | Allow switching to independent units? | No -Switch To Civilian? | Boolean | Allow switching to civilian units? | No -Enable Safe Zone? | Boolean | Enable a safe zone around enemy units? Players can't switch to units inside of the safe zone. | Yes -Safe Zone Radius | Number | The safe zone around players from a different team (in meters). | 200 - -### 1.21 Vehicle Lock -*Part of: ace_vehiclelock* - -These modules allow you to lock and unlock vehicles and their inventory using a key. Players don't receive a key automatically; for key names, see [Classnames Wiki](http://ace3mod.com/wiki/missionmaker/classnames.html#vehicle-lock). - -#### 1.21.1 Vehicle Key Assign -Sync with vehicles and players. Will handout custom keys to players for every synced vehicle. Only valid for objects present at mission start. -Example: `[bob, car1, true] call ACE_VehicleLock_fnc_addKeyForVehicle;` - will add a key to bob and program it to work only on car1 - -#### 1.21.2.1 Vehicle Lock Setup -Settings for lockpick strength and initial vehicle lock state. Removes ambiguous lock states. - -**Settings:** - -Name | Type | Description | Default value ----- | ---- | ---- | ---- | -Lock Vehicle Inventory? | Boolean | Locks the inventory of locked vehicles. | No -Vehicle Starting Lock State | Option | Set lock state for all vehicles (removes ambiguous lock states). | "As Is" -Default Lockpick Strength | Number | Default Time to lockpick (in seconds). | 10 - -#### 1.21.2.2 Vehicle setVariables -* `ACE_VehicleLock_lockSide` - SIDE: overrides a vehicle's side, allowing locking and unlocking using a different side's key. For example: Unlocking INDEP vehicles with a BLUFOR key. -* `ACE_vehicleLock_lockpickStrength` - NUMBER: seconds, determines how long lockpicking with take, overrides the value set in the module for a specific vehicle of the mission maker's choice. - -### 1.22 View Distance Limiter -*Part of: ace_viewdistance* - -This module allows disabling the ACE3 View Distance feature as well as setting a view distance limit. - -**Settings:** - -Name | Type | Description | Default value ----- | ---- | ---- | ---- | -Enable ACE viewdistance | Boolean | Enables ACE viewdistance. | Yes -View Distance Limit | Number | Sets the limit for how high clients can raise their view distance (<= 10 000) | 10000 - -### 1.23 Weather -*Part of: ace_weather* - -This module allows you to customize the weather settings. - -
-
Note:
-

ACE3 Weather overrides weather settings (editor, mission settings) and automatically calculates wind, temperature and pressure according to map location, date, time of day and cloud coverage and allows the weather to evolve realistically as the simulation progresses. Weather synchronization occurs between all clients.
Adjustment of the weather is possible by modifying the overcast value (for example: 0.7 may result in intermittent rain).

-
- -**Settings:** - -Name | Type | Description | Default value ----- | ---- | ---- | ---- | -Weather propagation | Boolean | Enables sever side weather propagation.(This is responsible for synchronizing weather between all clients. Disabling it is **NOT** recommended). | Yes -ACE3 Weather | Boolean | Overrides the default weather with ACE3 weather (map based)(This can be disabled without affecting the weather propagation above. Useful if you prefer changing weather settings manually). | Yes -Sync Rain | Boolean | Synchronizes rain. | Yes -Sync Wind | Boolean | Synchronizes wind. | Yes -Sync Misc | Boolean | Synchronizes lightnings, rainbow, fog, ... | Yes -Update Interval | Number | Defines the interval (seconds) between weather updates. | 60 - -### 1.24 Wind Deflection -*Part of: ace_winddeflection* - -This module allows you to define when wind deflection is active. - -
-
Note:
-

Wind Deflection is compatible with Advanced Ballistics and allows the following combinations: -

    -
  • Only wind deflection
  • -
  • Only advanced ballistics
  • -
  • Combined wind deflection + advanced ballistics
  • -

-
- -**Settings:** - -Name | Type | Description | Default value ----- | ---- | ---- | ---- | -Wind Deflection | Boolean | Enables wind deflection. | Yes -Vehicle Enabled | Boolean | Enables wind deflection for static/vehicle gunners. | Yes -Simulation Interval | Number | Defines the interval between every calculation step. | 0.05 -Simulation Radius | Number | Defines the radius around the player (in meters) at which projectiles are wind deflected. | 3000 - -### 1.25 Zeus Settings -*part of: ace_zeus* - -This module provides control over vanilla aspects of Zeus. - -**Settings:** - -Name | Type | Description | Default value ----- | ---- | ---- | ---- | -Ascension Messages | Boolean | Display global pop-up messages when a player is assigned as Zeus. | No -Zeus Eagle | Boolean | Spawn an eagle that follows the Zeus camera. | No -Wind Sounds | Boolean | Play wind sounds when Zeus remote controls a unit. | No -Ordnance Warning | Boolean | Play a radio warning when Zeus uses ordnance. | No -Reveal Mines | Option | Reveal mines to allies and place map markers. | "Disabled" - -## 2. ACE3 Medical -*Part of: ace_medical* - -### 2.1 Medical Settings - -This module allows to tweak all the medical settings used in ACE3 - -**Settings:** - -Name | Type | Description | Default value ----- | ---- | ---- | ---- | -Medical Level | Option | What is the medical simulation level? | "Basic" -Medics setting | Option | What is the level of detail preferred for medics? | "Basic" -Enable Litter | Boolean | Enable litter being created upon treatment. | "Yes" -Life time of litter objects | Number | How long should litter objects stay? In seconds. -1 is forever. | 1800 -Enable Screams | Boolean | Enable screaming by injured units. | Yes -Player Damage | Number | What is the damage a player can take before being killed? | 1 -AI Damage | Number | What is the damage an AI can take before being killed? | 1 -AI Unconsciousness | Option | Allow AI to go unconscious. | "50/50" -Remote controlled AI | Boolean | Treats remote controlled units as AI not players? | Yes -Prevent instant death | Boolean | Have a unit move to unconscious instead of death. | No -Bleeding coefficient | Number | Coefficient to modify the bleeding speed. | 1 -Pain coefficient | Number | Coefficient to modify the pain intensity. | 1 -Sync status | Boolean | Keep unit status synced. (Recommended on). | Yes - -### 2.2 Advanced Medical Settings - -This module allows you to change the default Advanced Medical Settings, when [2.1 Medical Settings](#2.1-medical-settings) is set to "Advanced". - -**Settings:** - -Name | Type | Description | Default value ----- | ---- | ---- | ---- | -Enabled for | Option | Select what units the advanced medical system will be enabled for. | "Players only" -Enable Advanced wounds | Boolean | Allow reopening of bandaged wounds? | No -Vehicle Crashes | Boolean | Do units take damage from a vehicle crash? | Yes -Allow PAK | Option | Who can use the PAK for full heal? | "Medics only" -Remove PAK on use | Boolean | Should PAK be removed on usage? | Yes -Locations PAK | Option | Where can the personal aid kit be used? | "Vehicles & facility" -Allow Surgical kit | Option | Who can use the surgical kit? | "Medics only" -Remove Surgical kit | Boolean | Should Surgical kit be removed on usage? | Yes -Locations Surgical kit | Option | Where can the Surgical kit be used? | "Vehicles & facility" -Bloodstains | Boolean | Bandaging removes bloodstains. | No -Pain suppression | Boolean | Pain is only temporarily suppressed not removed. | Yes - -### 2.3 Revive Settings - -This modules allows a mission maker to limit the amount of revives for units in basic and advanced medical. - -**Settings:** - -Name | Type | Description | Default value ----- | ---- | ---- | ---- | -Enable Revive | Option | Enable a basic revive system. | "disabled" -Max Revive time | Number | Max amount of seconds a unit can spend in revive state | 120 -Max Revive lives | Number | Max amount of lives a unit. 0 or -1 is disabled. | -1 - -### 2.4 Set Medic Class - -Using this module you can define which unit class is defined as a medic / doctor. - -**Settings:** - -Name | Type | Description | Default value ----- | ---- | ---- | ---- | -List | String | List of unit names that will be classified as medic, separated by commas. | "" -Is Medic | Boolean | Medics allow for more advanced treatment in case of Advanced Medic roles enabled. | "Regular medic" - - -### 2.5 Set Medical Facility - -Defines an object as a medical facility. This allows for more advanced treatments. Can be synced with buildings and vehicles. - -**Settings:** - -Name | Type | Description | Default value ----- | ---- | ---- | ---- | -Is Medical Facility | Boolean | Registers an object as a medical facility. | Yes - -### 2.6 Set Medical Vehicle - -Defines an object as a medical facility. This allows for more advanced treatments. Can be synced with buildings and vehicles. - -**Settings:** - -Name | Type | Description | Default value ----- | ---- | ---- | ---- | -List | String | List of vehicles that will be classified as medical vehicle, separated by commas. | "" -Is Medical Vehicle | Boolean | Whether or not the objects in the list will be a medical vehicle. | Yes - -## 3. ACE3 Mission Modules -*Part of: ace_missionmodules* - -### 3.1 Ambiance Sounds - -Used for ambiance sounds loop (synced across MP). - -This module randomizes the time when the sound file is played and the position where the sound file is played (If "Follow Players" is set to No). -`Minimal Distance` and `Maximal Distance` influence the position from where the sound file is played. Setting both values to 0 forces the module to play the sound from where it was placed in the editor. -`Minimal Delay` and `Maximal Delay` work in a similar fashion but are used to randomize when the sound file is played. Setting both values to 0 plays the sound from mission start. - -**Settings:** - -Name | Type | Description | Default value ----- | ---- | ---- | ---- | -Sounds | String | Class names of the ambiance sounds played. Separated by ','. (Example: `radio_track_01, electricity_loop`)| "" -Minimal Distance | Number | Used for calculating a random position and sets the minimal distance between the players and the played sound file(s) (in meters) | 400 -Maximum Distance | Number | Used for calculating a random position and sets the maximum distance between the players and the played sound file(s) (in meters) | 900 -Minimal Delay | Number | Minimal delay (in seconds) between sounds played | 10 -Maximum Delay | Number | Maximum delay (in seconds) between sounds played | 10 -Follow Players | Boolean | Follow players. If set to false, loop will play sounds only nearby logic position. | No -Volume | Number | The volume of the sounds played. | 1 - -### 3.2 Slideshow -*part of ace_slideshow* - -This module is the core of `ace_slideshow` for more informations about slideshow check [the mission-tools section](./mission-tools.html) - -**Settings:** - -Name | Type | Description | Default value ----- | ---- | ---- | ---- | -Objects | String | Object names (can also be synchronized objects) slide-show will be displayed on, separated by commas if multiple. | "" -Controllers | String | Controller object names, separated by commas if multiple. | "" -Images | String | List of images that will be used for the slide-show, separated by commas, with full path correctly formatted (eg. images\image.paa). | "" -Interaction names | String | List of names that will be used for interaction entries, separated by commas, in order of images. | Number | | 0 "" -Slide Duration | Number | Duration of each slide (in seconds) (0 = automatic slides disabled) | 0 \ No newline at end of file diff --git a/documentation/user/how-to-make-a-feature-request.md b/documentation/user/how-to-make-a-feature-request.md deleted file mode 100644 index 96bec54fb8..0000000000 --- a/documentation/user/how-to-make-a-feature-request.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -layout: wiki -title: How to make a feature request -description: ACE3 requires a special procedure to make feature requests. Because due to our current work load, in the period of weeks prior and posterior to the first release, new feature requests are under embargo. -group: user -order: 11 -parent: wiki ---- - -### Background -ACE2, AGM and CSE had a lot of features implemented or planned. All of them are or have been evaluated for inclusion in ACE3 itself, and we'd like to port the majority of them eventually. However, due to time constraints, we have managed to finish only a fraction of the job so far. - -Please refrain from making requests for any planned or existing features from either ACE2, AGM or CSE. Most of them are already being or have been considered for porting or a rewrite. - -
-
Note:
-

Due to our current work load, in the period of weeks prior and posterior to the first release, new feature requests are under embargo. Feel free to submit yours now, but don't expect them to be considered just yet. Any treatment or attention by developers towards the feature request thread is highly unlikely during this time.

-
- -### Requesting a feature -In order to avoid duplicates and keep the issue tracker organized, we have created a common issue for ACE 3 Feature requests. Any and all relevant requests should be submitted there, where they will also get discussed and evaluated. Before adding a new one, make sure to check the previous entries from the thread and do a quick search for similar suggestions; please don't reiterate requests for features that had already been accepted for inclusion, or those which were disregarded earlier. - -Following their approval, feature requests may be moved by moderators to a separate issue for further discussion. diff --git a/documentation/user/how-to-report-an-issue.md b/documentation/user/how-to-report-an-issue.md deleted file mode 100644 index 96f2dd76c3..0000000000 --- a/documentation/user/how-to-report-an-issue.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -layout: wiki -title: How to report an issue -description: If you've found an issue with ACE3 please read this entry before reporting it. -group: user -order: 10 -parent: wiki ---- - -### Before reporting - -If you've found an issue with ACE3 please make sure that ACE3 is really the cause of the problem. To do this try to reproduce the issue with using only `@cba_a3` and `@ACE3` on a newly created mission. - -Indicate if the issue appears on stable or development version. In case it is the development version, please also include the commit SHA-1 hash. - -
-
Please note:
-

It's not a valid to simply remove @ACE3 from the mod list to confirm that ACE3 is the culprit.

-

If the error happens when using a third-party mod contact the author of the appropriate mod and report the issue there.

-
- -### Reporting the issue - -Head over to the ACE3 GitHub issue tracker and press the "New issue" button in the top right corner. Add a descriptive title and copy the following issue template in to the text area: - -``` -ACE3 Version: 3.x.x -(indicate if stable or dev, if dev indicate the commit the version is based on) - -**Mods:** -* @cba_a3 -* @ace3 - -**Placed ACE3 Modules:** -* *Add the list of modules you have placed on the map. Use 'None' if the error occurs without using any modules.* - -**Description:** -*Add a detailed description of the error. This makes it easier for us to fix the issue.* - -**Steps to reproduce:** -* *Add the steps needed to reproduce the issue.* - -**Where did the issue occur?** -*A possible answer might be "Multiplayer", "Singleplayer"* - -**RPT log file:** -*Add a link (pastebin.com) to the client or server RPT file.* -``` - -A video of the issue might be helpful in resolving it faster. - - -Github uses "Markdown" to style the output. If you want to know more about it (e.g. how to turn text bold, how to denote code blocks or inline code) have a look at the GitHub markdown documentation. diff --git a/documentation/user/information-center.md b/documentation/user/information-center.md deleted file mode 100644 index b1a1e8e9f0..0000000000 --- a/documentation/user/information-center.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -layout: wiki -title: Information center -description: Downloaded ACE3 and have no idea where to start? This page serves as a document to help new players get started with things or get an answer to some of your questions. -group: user -order: 0 -parent: wiki ---- - -Downloaded ACE3 and have no idea where to start? This page serves as a starting point to help new players and mission makers understand what's available to them. - - -- You don't know where to begin your ACE3 journey? [**Check out ACE3 features**](http://ace3mod.com/wiki/feature/) - - -- You are a mission maker but you don't know what ACE3 has to offer? [**We have some documentation for you**](http://ace3mod.com/wiki/missionmaker/) - - -- Are you searching for ACE3 classnames ? [**Here they are**](http://ace3mod.com/wiki/missionmaker/classnames.html) - - -## 1. FAQ -### 1.1 Features -**Q:** Where is X feature?
-**A:** When it's done.
- -**Q:** Feature X was in ACE2/AGM/CSE where is it?
-**A:** It's going to be ported at some point.
- -**Q:** Why was my feature request closed on GitHub?
-**A:** Feature requests should initially be added to issue #414 for easy tracking.[HERE](https://github.com/acemod/ACE3/issues/414/) - -**Q:** I want to disable feature X how do I do it?
-**A:** Simply delete the PBO.(note that some features depends on others, check dependencies before deleting anything).
- -### 1.2 Issues - -**Q:** Laser locking is broken, when are you going to fix it?
-**A:** Fun fact, it isn't, you need to come from the direction of the laser, (laser is pointing to the east, you come from the west) and you drop the GBU, it will then guide itself to the target. The reasoning behind that is that the vehicle or building laser designated would obstruct the laser and the GBU would then be unable to lock on it.
- -**Q:** I take vanilla damage with ACE 3.1.1
-**A:** This has been fixed on ACE3 master and will be fixed in the next release, in the meantime Basic medical doesn't have that issue.
- -**Q:** I'm having dll errors.
-**A:** Remove ACE3 from your Arma 3 folder and repeat the installation process (don't forget to re-download).
- -### 1.3 Compatibility - -**Q:**(mod) doesn't have some ACE3 features.
-**A:**ACE3 isn't and can't be responsible for compatibility with every (mod), due it's size other (mod) authors are strongly encouraged to provide that from their side. Compatibility PBOs currently in ACE3 are there to kick-start and provide examples for (mod) authors.
- -**Q:** ACE3 causes issues in (mod).
-**A:**If you've found an issue with ACE3 please make sure that ACE3 is really the cause of the problem. To do this try to reproduce the issue with using only @cba_a3 and @ACE3 on a newly created mission. ACE3 isn't and can't be responsible for all mod conflicts, due it's size other mod authors are strongly encouraged to provide that from their side.
\ No newline at end of file diff --git a/documentation/user/installation-guide.md b/documentation/user/installation-guide.md deleted file mode 100644 index 751b698cce..0000000000 --- a/documentation/user/installation-guide.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -layout: wiki -title: Installation Guide -description: Step-by-step guide for installing ACE3 -group: user -order: 0 -parent: wiki ---- - -## 1. Overview -This guide will explain how to get ACE3 up and running faster than you can say banana. - -## 2. Prerequisites -- Download [CBA](http://www.armaholic.com/page.php?id=18767). -- Download [ACE3](https://github.com/acemod/ACE3/releases/latest). -- Know how to extract .zip files. Use [Google](https://www.google.com) if not sure. - -## 3. Install ACE3 -- Extract both CBA and ACE3 .zip files into your Arma 3 folder. By default this is located in:
-32-Bit - `C:/Program Files/Steam/Steamapps/Common/Arma 3/`
-64-Bit - `C:/Program Files (x86)/Steam/Steamapps/Common/Arma 3/` -- After extraction you should have the `@ace` and `@CBA_A3` folders inside your Arma 3 folder. - -## 4. Install ACE3 Optional components -
-
Note:
-

Skip this step if you're not using additional mods. If you are, consult with your mission maker before installing any of these components. If you are a Mod creator, please visit the [Modularity and PBO Structure](http://ace3mod.com/wiki/development/modularity-and-pbo-structure.html) page for more information.

-
- -### 4.1 What do they do? -Optional components supplement 3rd party mods with ACE3 features, for example: -- Optional weapon components make Advanced Ballistics possible, as well as the ability to use ACE3 weapon attachments with 3rd party weapons like RHS, HLC, etc. -- Optional tracers component brings back ACE2 ball tracers. -- Optional server component is used to load the userconfig files. - -### 4.2 Which optionals should I use? -Only use the optional components that correspond with your mod-pack. - -### 4.3 How to install these components? -- Inside your `Arma 3/@ace/` folder, you'll find the `optionals` and `addons` folders. -- Copy and paste the relevant `.pbo` and `.bisign` files from the `optionals` folder into the `addons` folder. -- Copy and paste the `userconfig` folder from the `optionals` folder into root `Arma 3` folder. - -## 5. Launch Arma 3 with ACE3 -- Launch Arma 3 to start the official game Launcher. -- Click `Mods` and make sure the checkboxes next to `ace` and `CBA_A3` are ticked. -Arma 3 Vanilla Launcher -- Click `Play` - -## 6. Alternative launch methods - -### 6.1 Steam Launch Parameters -- Not supported with the new Arma 3 Launcher - -### 6.2 Arma 3Sync -- Inspect `Addon Options` and verify the `Addon Search Directories` are leading to your Arma 3 folder. -- Return to the `Addons` tab and click `Refresh`. -- Right-click inside `Addon Groups`, click `Create Group` and give it a name. -- Drag and drop `@ace` and `@CBA_A3` from `Available Addons` into the new Group you created inside `Addon Groups` and make sure the checkboxes are ticked. -Arma 3Sync Launcher -- Click `Start Game` - -### 5.3 Play withSIX diff --git a/documentation/user/promotional-material.md b/documentation/user/promotional-material.md deleted file mode 100644 index 98a8ace6b5..0000000000 --- a/documentation/user/promotional-material.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -layout: wiki -title: Promotional Material -description: Promotional materials like logos and color values. -group: user -order: 20 -parent: wiki ---- - -You are hereby granted to use the ACE3 logos and imagery for promotional purposes. You are NOT allowed to use it commercially. - -## 1. Colors - -* White: `#ffffff, rgb(255, 255, 255)` -* Black: `#000000, rgb(0, 0, 0)` -* Red: `#ba2619, rgb(186, 38, 25)` - - -## 2. Logo -When using the ACE3 logo please do not stretch or skew it. - -### 2.1 Black - - - -* [JPG (white background)](https://github.com/KoffeinFlummi/ACE3/blob/master/extras/assets/logo/black/ACE3-Logo.jpg) -* [PNG (transparent background)](https://github.com/KoffeinFlummi/ACE3/blob/master/extras/assets/logo/black/ACE3-Logo.png) -* [EPS (vector file)](https://github.com/KoffeinFlummi/ACE3/blob/master/extras/assets/logo/black/ACE3-Logo.eps) - -### 2.2 White - - - -* [JPG (black background)](https://github.com/KoffeinFlummi/ACE3/blob/master/extras/assets/logo/white/ACE3-Logo.jpg) -* [PNG (transparent background)](https://github.com/KoffeinFlummi/ACE3/blob/master/extras/assets/logo/white/ACE3-Logo.png) -* [EPS (vector file)](https://github.com/KoffeinFlummi/ACE3/blob/master/extras/assets/logo/white/ACE3-Logo.eps) diff --git a/documentation/user/shortcuts.md b/documentation/user/shortcuts.md deleted file mode 100644 index 59b7975340..0000000000 --- a/documentation/user/shortcuts.md +++ /dev/null @@ -1,215 +0,0 @@ ---- -layout: wiki -title: Shortcuts -description: A list containing all default shortcuts in ACE3 -group: user -order: 5 -parent: wiki ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ShortcutActionPBO
Ctrl+⇧ Shift+KShow ProtractorACE_Advanced_Ballistics
⊞ WinInteraction menuACE_Interaction
Ctrl+⊞ WinSelf-interaction menuACE_Interaction
Ctrl+SpaceOpen/close doorACE_Interaction
Ctrl+TTap on the shoulderACE_Interaction
CtrlModifier keyACE_Logistics
Ctrl+⇧ Shift+TWipe off gogglesACE_Goggles
8Switch grenade modeACE_Grenades
CtrlShow namesACE_NameTags
Alt+Page UpNVG: Increase brightnessACE_NightVision
Alt+Page DownNVG: Decrease brightnessACE_NightVision
⇧ Shift+RClear firearm malfunctionACE_Overheating
OAltimeterACE_Parachute
Ctrl+RCheck ammunitionACE_Reload
`Safety toggleACE_SafeMode
Page UpScope: Elevation upACE_Scopes
Page DownScope: Elevation downACE_Scopes
Ctrl+Page UpScope: Windage leftACE_Scopes
Ctrl+Page DownScope: Windage rightACE_Scopes
Tab ↹Vector: Azimuth keyACE_Vector
RVector: Distance keyACE_Vector
DelSpeed limiterACE_Vehicles
1PistolACE_WeaponSelect
2RifleACE_WeaponSelect
3Grenade launcherACE_WeaponSelect
5BinocularsACE_WeaponSelect
6Frag grenadeACE_WeaponSelect
7Non-frag grenadeACE_WeaponSelect
0Holster weaponACE_WeaponSelect
2Engine onACE_WeaponSelect
1Engine offACE_WeaponSelect
3Primary weaponACE_WeaponSelect
4Machine gunACE_WeaponSelect
5MissilesACE_WeaponSelect
9Fire smoke launcherACE_WeaponSelect
Tab ↹FCS: Lase target (measure distance)ACE_FireControlSsystem
Page UpFCS: Range upACE_FireControlSsystem
Page DownFCS: Range downACE_FireControlSsystem
⇧ Shift+KShow Wind InfoACE_Weather
diff --git a/mod.cpp b/mod.cpp index 0f16ca182a..d7b52260b0 100644 --- a/mod.cpp +++ b/mod.cpp @@ -1,8 +1,8 @@ -name = "Advanced Combat Environment 3.2.1"; +name = "Advanced Combat Environment 3.3.1"; picture = "logo_ace3_ca.paa"; actionName = "GitHub"; action = "https://github.com/acemod/ACE3"; -description = "ACE3 - Version 3.2.1"; +description = "ACE3 - Version 3.3.1"; logo = "logo_ace3_ca.paa"; logoOver = "logo_ace3_ca.paa"; tooltip = "ACE3"; diff --git a/tools/deploy.py b/tools/deploy.py index b9fade83a0..ff2d499d9f 100755 --- a/tools/deploy.py +++ b/tools/deploy.py @@ -38,38 +38,6 @@ def update_translations(token): issue.edit(body=TRANSLATIONBODY.format(diag)) -def deploy_documentation(token): - devnull = open(os.devnull, "w") - url = "https://{}@github.com/{}".format(token, REPOPATH) - - sp.check_call(["git", "clone", url, "out", "--depth", "10", "--branch", "gh-pages"], stdout=devnull, stderr=devnull) - os.chdir("out") - - sp.check_call(["git", "config", "user.name", USERNAME]) - sp.check_call(["git", "config", "user.email", USEREMAIL]) - - for root, dirs, files in os.walk("../documentation", topdown=False): - target = root.replace("../documentation", "wiki") - if root == "../documentation": - continue - for name in files: - print("{} => {}".format(os.path.join(root, name), os.path.join(target, name))) - shutil.copyfile(os.path.join(root, name), os.path.join(target, name)) - - sp.check_call(["git", "add", "--all", "."]) - - filenum = sp.check_output(["git", "status", "--porcelain"]) - filenum = len(str(filenum, "utf-8").split("\n")) - 1 - if filenum > 0: - sp.check_call(["git", "commit", "-m", "Automatic gh-pages deployment"]) - print("Pushing changes ...") - sp.check_call(["git", "push", "origin", "gh-pages"], stdout=devnull, stderr=devnull) - else: - print("No changes.") - - os.chdir("..") - - def main(): print("Obtaining token ...") try: @@ -91,16 +59,6 @@ def main(): else: print("done.") - print("\nDeploying documentation ...") - try: - deploy_documentation(token) - except: - print("Failed to deploy documentation.") - print(traceback.format_exc()) - return 1 - else: - print("done.") - return 0