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 BallistikPokročilá balistikaBalística avançada
+ Balistique avancéeFejlett ballisztikaПродвинутая баллистика
@@ -42,6 +43,7 @@
Erweiterte BallistikPokročilá balistikaBalística avançada
+ Balistique avancéeFejlett ballisztikaПродвинутая баллистика
@@ -52,6 +54,7 @@
Aktiviert die erweiterte BallistikAktivuje pokročilou balistikuAtiva balística avançada
+ Activer la balistique avancéeEngedélyezi a fejlett ballisztikátВключает продвинутую баллистику
@@ -62,6 +65,7 @@
Für Scharfschützen aktiviertPovoleno pro odstřelovačeAtivar para caçadores
+ Activer pour les snipersMesterlö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 aktiviertPovoleno pro členy skupinyAtivada para membros do grupo
+ Activer pour les membres groupésCsoporttagoknak engedélyezveВключена для группы
@@ -92,6 +98,7 @@
Aktiviert die erweiterte Ballistik für nicht lokale GruppenmitgliederAktivuje pokročilou balistiku pro nelokální členy skupinyAtiva balística avançada para membros de grupo não locais
+ Active la balistique avancée pour les membres groupés non locauxEngedélyezi a fejlett ballisztikát nem-helyi csoporttagoknakВключает продвинутую баллистику для нелокальных членов группы
@@ -102,6 +109,7 @@
Für jeden aktiviertPovoleno pro všechnyAtivada para todos
+ Activer pour tout le mondeMindenkinek 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 aktiviertVždy povoleno pro členy skupinySempre ativada para membros do grupo
+ Toujours activer pour les membres groupésMindig engedélyezve csoporttagoknakВсегда включена для членов группы
@@ -132,6 +142,7 @@
Aktiviert die erweiterte Ballistik immer, wenn ein Gruppenmitglied schießtAktivuje pokročilou balistiku pro členy skupinySempre 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 feuMindig engedélyezi a fejlett ballisztikát, ha egy csoporttag tüzelВсегда включает продвинутую баллистику когда стреляет член группы
@@ -142,6 +153,7 @@
Beim vollautomatischen Feuern deaktiviertZakázáno v automatickém režimu střelbyDesabilitar no modo automático
+ Désactiver en mode rafale libreAutomata módban letiltvaВыкл. для автомат. режима
@@ -152,6 +164,7 @@
Deaktiviert die erweiterte Ballistik beim vollautomatischen FeuernZákáže pokročilou balistiku během střelby v režimu automatDesabilitar a balística avançada durante fogo automático
+ Désactive la balistique avancée pour les tirs en rafale libreLetiltja a fejlett ballisztikát automata tüzelés folyamánВыключает продвинутую баллистику при стрельбе в полностью автоматическом режиме
@@ -162,6 +175,7 @@
Simulation der Munitionstemperatur aktivierenPovolit simulaci teploty municeAtivar simulação de temperatura de munição
+ Activer la simulation de la températureLő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ě municeA velocidade de saída varia com a temperatura da munição
+ La température de la munition influe sur la vélocité intialeA 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 aktivierenPovolit simulaci délky hlavněAtivar a simulação de comprimento do cano
+ Activer la simulation de la longueur de canonCső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é initaleA kezdősebesség a cső hosszától függően változóНачальная скорость пули зависит от длины ствола
@@ -202,6 +219,7 @@
Geschossspureffekt aktivierenPovolit efekt trasírekAtiva efeito traçante de projétil
+ Activer l'effet traçanteNyomkö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 @@
SimulationsintervallInterval simulaceIntervalo da simulação
+ Intervalle de simulationSzimuláció intervallumaИнтервал симуляции
@@ -232,6 +252,7 @@
Legt das Intervall zwischen den Berechnungsschritten festUrčuje interval mezi každým výpočtemDefine o intervalo entre cada cálculo
+ Défini un intervalle de calcul entre deux simulationsMeghatározza a számítási lépések közötti időintervallumotОпределяет временной интервал между вычислениями
@@ -242,6 +263,7 @@
SimulationsradiusRozsah simulaceRaio de simulação
+ Rayon de simulationSzimulá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 wirdUrčuje oblast kolem hráče (v metrech), kde je pokročilá balistika použita na projektilDefine 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éeMeghatá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ésEz 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/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/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/stringtable.xml b/addons/captives/stringtable.xml
index d1b2da15bb..3ecc9d68d6 100644
--- a/addons/captives/stringtable.xml
+++ b/addons/captives/stringtable.xml
@@ -1,4 +1,4 @@
-
+
@@ -164,6 +164,7 @@
Einheit kapitulieren lassenVzdávající se jednotkaFazer 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_captivesSynchronizuj s jednotkou, která se má vzdát.<br />Zdroj: ace_captivesSincroniza uma unidade para fazer com que ela se renda. <br/>Fonte: ace_captives
+ Synchronise une unité pour la rendre captive. <br/>Source: ace_captivesEgység szinkronizálása, hogy kapituláljon.<br />Forrás: ace_captivesСинхронизируйте с юнитами, чтобы сделать их пленными.<br />Источник: ace_captives
@@ -184,6 +186,7 @@
Nastavení zajatceGefangenen-EinstellungenAjustes de prisioneiros
+ Options de capitulationFogoly-beállításokНастройки пленения
@@ -194,6 +197,7 @@
Toto kontroluje nastavení kapitulace a poutEinstellungen zur Kapitulation und KabelbindernControla as configurações de rendição e abraçadeiras
+ Contrôle les paramètres de la rédition et des SerflexSzabályozza a kapituláció és bilincselés beállításaitУправляет настройками сдачи в плен и связывания
@@ -204,6 +208,7 @@
Může spoutat spolubojovníkyKann Teamkollegen fesselnPode algemar o próprio lado
+ Peut libérer sa propre factionSaját oldal megbilincselhetőСвязать союзника
@@ -214,6 +219,7 @@
Mohou hráči spoutat jednotky na své straněKönnen Spieler eigene Einheiten fesselnOs jogadores podem algemar unidades do seu lado
+ Les joueurs peuvent utiliser les Serflex sur leur propre campA játékosok megkötözhetik-e a saját oldalukon lévő egységeketРазрешить игрокам связывать юнитов своей стороны
@@ -224,6 +230,7 @@
Povolit vzdáváníKapitulation erlaubenPermite rendição
+ Permettre la capitulationKapituláció engedélyezéseСдаться в плен
@@ -234,6 +241,7 @@
Hráč se může vzdát poté, co si skryje zbraňSpieler können kapitulieren, nachdem sie ihre Waffe geholstert habenJogadores podem se render depois de guardar sua arma
+ Les joueurs peuvent se rendre après avoir rangé leur armeA játékosok megadhatják magukat a fegyverük elrakása utánИгроки могут сдаться в плен после того, как уберут оружие
@@ -258,4 +266,4 @@
Сдавшийся или безоружный
-
\ No newline at end of file
+
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/stringtable.xml b/addons/cargo/stringtable.xml
index 9681f7173d..e8f48c3b2c 100644
--- a/addons/cargo/stringtable.xml
+++ b/addons/cargo/stringtable.xml
@@ -5,31 +5,37 @@
LoadZaładujЗагрузить
+ NaložitUnloadWyładujВыгрузить
+ VyložitCargoŁadunekГрузовой отсек
+ NákladCargo MenuMenu ładunkuГрузовой отсек
+ Menu nákladuCargo space left: %1Pozostałe miejsce: %1Осталось мест: %1
+ Volný prostor: %1Enable CargoAktywuj cargoВключить модуль перевозки грузов
+ Povolit nákladEnable the load in cargo module
@@ -40,6 +46,7 @@
Cargo SettingsUstawienia cargoПеревозка грузов
+ Nastavení nákladuConfigure the cargo module settings
@@ -47,4 +54,4 @@
Конфигурирует настройки модуля перевозки грузов
-
\ No newline at end of file
+
diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf
index ba014ff182..4a194e0fe9 100644
--- a/addons/common/XEH_postInit.sqf
+++ b/addons/common/XEH_postInit.sqf
@@ -150,6 +150,15 @@ call FUNC(checkFiles);
//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;
@@ -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_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/stringtable.xml b/addons/common/stringtable.xml
index 8aa895a35d..d0dcf43eb9 100644
--- a/addons/common/stringtable.xml
+++ b/addons/common/stringtable.xml
@@ -1,4 +1,4 @@
-
+
@@ -477,6 +477,7 @@
Überprüfe PBOsZkontrolovat PBOVerificar PBOs
+ Vérifier les PBOsPBO-k ellenőrzéseПроверка аддонов
@@ -487,6 +488,7 @@
Zjistit addon který je v souladu se serveremEste módulo verifica a integridade dos addons quando iniciamos a simulaçãoВыполняет проверку версий аддонов ACE у подключаемых игроков
+ Ce module contrôle si les PBOs de chaque joueur sont correctsAction
@@ -495,6 +497,7 @@
AktionAkceAção
+ ActionCselekvé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 PBOsMi legyen azokkal a személyekkel, akiknek nincsenek meg a helyes PBO-k?Что делать с игроками с неправильными аддонами?
@@ -515,6 +519,7 @@
Einmal verwarnenUpozornit jednouAvisar uma vez
+ Avertir une foisEgyszeri figyelmeztetésПредупредить один раз
@@ -525,6 +530,7 @@
Immer verwarnenUpozornit (permanentně)Avisar (permanente)
+ Avertir (permanent)Figyelmeztetés (tartós)Предупреждать (постоянно)
@@ -535,6 +541,7 @@
KickenVyhoditChutar
+ EjecterKirúgásКикнуть
@@ -545,6 +552,7 @@
Alle Addons überprüfenZkontrolovat všechny addonyVerificar 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 à ACEAz összes bővítmény ellenőrzése, csak az ACE helyett?Проверять все аддоны, а не только ACE?
@@ -565,6 +574,7 @@
WhitelistSeznam povolenýchLista branca
+ Liste blancheFehé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ésMilyen bővítmények vannak feltétlenül engedélyezve?Какие аддоны дополнительно разрешены?
@@ -585,6 +596,7 @@
LSD-FahrzeugeLSD vozidlaVeículos LSD
+ LSD - VéhiculesLSD járművekТранспорт под LSD
@@ -595,6 +607,7 @@
Fügt einen LSD-Effekt zum synchronisierten Fahrzeug hinzuPřidá LSD efekt pro synchronizované vozidlaAdiciona efeito LSD ao veículo sincronizado
+ Ajoute l'effet LSD aux véhicules synchronisésLSD-effekt hozzáadása a szinkronizált járművekhezДобавляет эффект LSD (мигание всеми цветами радуги) синхронизированным транспортным средствам
@@ -605,6 +618,7 @@
Ativa dispositivo de mãoPrzełącz urządzenie podręcznePřepnout ruční zařízení
+ Allumer l'ordinateur de pocheKézi eszköz kapcsolásaВключить портативное устройство
@@ -615,6 +629,7 @@
Fecha dispositivo de mãoZamknij urządzenie podręczneZavřít ruční zařízení
+ Fermer l'ordinateur de pocheKézi eszköz bezárásaЗакрыть портативное устройство
@@ -625,6 +640,7 @@
Troca dispositivos de mãoNastępne urządzenie podręczneProcházet ruční zařízení
+ Changer (cycle) d'ordinateur de pocheKézi eszköz váltásaСледующее портативное устройство
@@ -678,6 +694,7 @@
Vehicles onlyTylko pojazdyТолько в транспорте
+ Pouze vozidlaDo Not Force
@@ -692,6 +709,7 @@
ACE3 EquipmentACE3 WyposażenieACE3 Снаряжение
+ ACE3 VybaveníACE3 Common
@@ -702,6 +720,7 @@
ACE3 WeaponsACE3 BrońACE3 Оружие
+ ACE3 ZbraněACE3 Movement
@@ -712,11 +731,13 @@
ACE3 Scope AdjustmentACE3 Regulacja optykiACE3 Прицелы
+ ACE3 Nastavení optikyACE3 VehiclesACE3 PojazdyACE3 Транспорт
+ 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 @@
Колючая проволокаKoncentrinaAlambre de espino
- Concertina wire
+ Fill barbeléOstnatý drátConcertina wireConcertina wire
@@ -19,7 +19,7 @@
Колючая проволока (моток)Zwój koncentrinyBobina de alambre de espino
- Concertina wire coil
+ Bobine de fil barbeléSmyčka ostnatého drátuConcertina wire coilConcertina wire coil
@@ -31,7 +31,7 @@
Демонтировать колючую проволокуZwiń koncentrinęDesmontar alambre de espino
- Dismount Concertina wire
+ Descendre le fil barbeléSvinout ostnatý drátDismount Concertina wireDismount Concertina wire
@@ -43,7 +43,7 @@
Монтировать колючую проволокуRozwiń koncentrinęDesplegar alambre de espino
- Deploy Concertina wire
+ Mettre en place le fil barbeléRozvinout ostnatý drátDeploy Concertina wireDeploy Concertina wire
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/stringtable.xml b/addons/explosives/stringtable.xml
index 0d85415ec3..7d704d8898 100644
--- a/addons/explosives/stringtable.xml
+++ b/addons/explosives/stringtable.xml
@@ -1,4 +1,4 @@
-
+
@@ -77,6 +77,8 @@
BlockedObstruidoЗаблокировано
+ Blokováno
+ ZablokowanyCancel
@@ -529,6 +531,7 @@
SprengstoffsystemSystém výbušninSistema de explosivos
+ Module explosifsRobbanóanyag-rendszerВзрывные устройства
@@ -539,6 +542,7 @@
Benötigt Sprengstoffexperten?Vyžadovat specialistu?Requer especialista?
+ Requiert un spécialiste?Specialisták igénylése?Требуется специалист?
@@ -549,6 +553,7 @@
Benötige Sprengstoffexperte um Sprengladungen zu entschärfen? Standard: NeinVyžadovat specialistu na zneškodnění výbušniny? Výchozí: NeRequer especialista em explosivos para desativar explosivos? Padrão: Não
+ Le désarmoçage d'explosif requiert un spécialiste? Défaut: nonSzükséges-e egy specialista a robbanóanyagok hatástalanításához? Alapértelmezett: NemТребуется ли специалист по минному делу для обезвреживания взрывчатки? По-умолчанию: Нет
@@ -559,6 +564,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 +575,7 @@
Entschärfungszeit für Nicht-Sprengstoffexperten erhöhen? Standard: JaZvýšit čas potřebný k dokončení akce pokud není specialista? Výchozí: AnoAumentar 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: ouiNem-specialisták esetén több ideig tartson a cselekvés befejezése? Alapértelmezett: IgenУвеличивать время завершения действий для не-специалистов? По-умолчанию: Нет
@@ -578,6 +585,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 +595,7 @@
Spraw, aby niektóre ładunki wybuchowe eksplodowały przy próbie ich rozbrojenia? Domyślnie:TakUmož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: ouiMeghatározott robbanóanyagok felrobbanjanak-e hatástalanításkor? Alapértelmezett: IgenРазрешить определенным взрывным устройствам взрываться при разминировании? По-умолчанию: Да
@@ -596,8 +605,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 explosifsEz 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..8d2acd30f5 100644
--- a/addons/finger/stringtable.xml
+++ b/addons/finger/stringtable.xml
@@ -4,62 +4,72 @@
Show pointing indicator to selfИндикатор пальца для показывающего
+ Afficher un indicateur de pointage pour soit mêmePokaż indykator wskazywania palcem dla siebieSaját mutatási indikátor megjelenítéseRender 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.Pointing indicatorИндикатор указания пальцем
+ Indicateur de pointageIndykator palcaUjj-indikátorColor of the pointing indicator circleЦвет индикатора указания пальцем
+ Couleur de l'indicateurKolor okręgu wyświetlanego przy wskazywaniu palcemMutatási indikátor körének színeAction "point a finger at"Действие "показать пальцем на"
+ Action 'Pointer le doigt à"Akcja "wskaż palcem"Cselekvés "ujj rámutatása"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 maintenuWskazuje 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ó.Показывает пальцем и рисует виртуальный маркер в направлении взгляда ближайшим игрокам. Можно удерживать.Pointing Settings
+ Option "Montrer du doigt"Ustawienia wskazywania palcemUjj beállításaiНастройки указания пальцемPointing Enabled
+ Activer "Montrer du doigt"Aktywuj wskazywanieMutatás engedélyezéseУказание пальцем включеноPointing Max Range
+ Distance maximale du pointageMaks. zasięg wskazywaniaUjj maximum hatótávjaМакс. дальность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]Максимальная дальность между игроками для отображения индикатора указания пальцем [по-умолчанию: 4 метра]
-
\ No newline at end of file
+
diff --git a/addons/flashlights/stringtable.xml b/addons/flashlights/stringtable.xml
index acffa4ad4a..08dbe188ec 100644
--- a/addons/flashlights/stringtable.xml
+++ b/addons/flashlights/stringtable.xml
@@ -5,31 +5,37 @@
Fulton MX-991Fulton MX-991Fulton MX-991
+ Fulton MX-991Flashlight with red filter. For use on map.Latarka z czerwonym filtrem. Używana do podświetlania mapy.Фонарь с красным светофильтром. Для использования на карте.
+ Svítilna s červeným filtrem. Pro nahlédnutí do mapy.Maglite XL50Maglite XL50Maglite XL50
+ Maglite XL50White mini flashlight. For use on map.Mini latarka. Światło białe. Używana do podświetlania mapy.Небольшой фонарик белого света. Для использования на карте.
+ Bílá mini svítilna. Pro nahlédnutí do mapy.KSF-1KSF-1KSF-1
+ KSF-1Flashlight with red filter. For use on map.Latarka z czerwonym filtrem. Używana do podświetlania mapy.Фонарь с красным светофильтром. Для использования на карте.
+ Svítilna s červeným filtrem. Pro nahlédnutí do mapy.
-
\ No newline at end of file
+
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 @@
SplittersimulationSimulace fragmentaceSimulação de fragmentação
+ Simulation de la fragmentationRepesz-szimulációСимуляция осколков
@@ -18,6 +19,7 @@
Aktiviere die ACE-SplittersimulationPovolit ACE simulaci fragmentaceAtiva a simulação de fragmentação do ACE
+ Active la simulation ACE de la fragmentationAz ACE repesz-szimuláció engedélyezéseВключить симуляцию осколков ACE
@@ -28,6 +30,7 @@
ExplosionssimulationSimulace úlomkůSimulação de estilhaços
+ Simulation d'éclatPattogzás-szimulációСимуляция обломков
@@ -38,6 +41,7 @@
Aktiviere ACE-ExplosionssimulationPovolit ACE simulaci úlomkůAtiva a simulação de estilhaços do ACE
+ Active la simulation d'éclat ACEAz ACE pattogzás-szimuláció engedélyezéseВключить симуляцию обломков ACE
@@ -48,6 +52,7 @@
Maximalzahl der verfolgten ProjektileMaximální počet sledovaných projektilůMáximo de projéteis rastreados
+ Nombre maximum de projectile suivisMaximum 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ímekProjéteis máximos por quadro
+ Nombre maximal de projectile par imageMaximum 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/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_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
diff --git a/addons/interact_menu/stringtable.xml b/addons/interact_menu/stringtable.xml
index 735e888245..9c3732358d 100644
--- a/addons/interact_menu/stringtable.xml
+++ b/addons/interact_menu/stringtable.xml
@@ -1,4 +1,4 @@
-
+
@@ -90,6 +90,7 @@
Akcje ZeusaAkce ZeuseAcciones Zeus
+ Actions ZeusZeus cselekvésekAções do ZeusДействия Зевса
@@ -233,6 +234,7 @@
Pozadí menu interakceInteraktionsmenü-HintergrundFundo do menu de interação
+ Arrière plan du menu d'interactionCselekvő 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 interakcjiDesenfocar 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'interactionA háttér elmosása a cselekvő menü használata alatt.Размыть фон, пока открыто меню взаимодействия.
@@ -253,6 +256,7 @@
Rozmazaný obrazVerschwommenes BildDesfoque de tela
+ Flouter l'écranKép elmosásaРазмытый
@@ -260,9 +264,10 @@
BlackPrzyciemnienie ekranuNegro
- Černý obraz
+ TmavýPretoSchwarz
+ NoirFeketeЧерный
@@ -271,6 +276,7 @@
Pokazuj akcje dla budynkówZobrazit akci pro budovyMostrar acciones para edificios
+ Affiche les actions pour les batimentsCselekvések mutatása épületeknélMostrar 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)Добавляет действия открывания дверей и залезания на лестницы для зданий. (Примечание: возможно падение производительности при открытии меню взаимодействия, особенно в городах)
@@ -288,6 +295,7 @@
Interaction MenuMenu interakcjiМеню взаимодействия
+ Menu interakce
-
\ No newline at end of file
+
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órzOtevřítAbrir
+ OuvrirNyitásAbrirОткрыть
@@ -785,6 +786,7 @@
InteraktionssystemSystém interakceВзаимодействие
+ Système d'interactionInterakciós rendszerSistema de interação
@@ -795,6 +797,7 @@
Aktiviere GruppenverwaltungPovolit správu týmuУправление группами
+ Active la gestion d'équipeCsapatkezelés engedélyezéseHabilitar gestão de equipes
@@ -805,6 +808,7 @@
Sollen Spieler das Gruppenverwaltungsmenü verwenden dürfen? Standard: JaMohou hráči použít menu správy týmu? Výchozí: AnoРазрешить ли игрокам использовать меню управления группами? По-умолчани: Да
+ Permettre aux joueurs d'utiliser la gestion de groupe? Défaut: ouiA játékosoknak engedélyezve legyen a csapatkezelő menü? Alapértelmezett: IgenDevem 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/main/script_mod.hpp b/addons/main/script_mod.hpp
index e38e71ac4b..c2bf6cc10f 100644
--- a/addons/main/script_mod.hpp
+++ b/addons/main/script_mod.hpp
@@ -4,8 +4,8 @@
#define PREFIX ace
#define MAJOR 3
-#define MINOR 2
-#define PATCHLVL 2
+#define MINOR 3
+#define PATCHLVL 0
#define BUILD 0
#define VERSION MAJOR.MINOR.PATCHLVL.BUILD
diff --git a/addons/main/stringtable.xml b/addons/main/stringtable.xml
index 610fd00195..d38401d45f 100644
--- a/addons/main/stringtable.xml
+++ b/addons/main/stringtable.xml
@@ -5,6 +5,7 @@
ACE LogisticsACE LogistykaACE: логистика
+ 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_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..c2d456b10e 100644
--- a/addons/map/stringtable.xml
+++ b/addons/map/stringtable.xml
@@ -1,4 +1,4 @@
-
+
@@ -8,6 +8,7 @@
KarteMapaMapa
+ CarteTérképКарта
@@ -18,19 +19,24 @@
KartenausleuchtungOsvětlení mapyIluminaçã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Симулировать освещение карты на основе окружающего света и приборов игрока?Map flashlight glow?
+ Poświata latarkiСвет фонаря на карте?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?Добавить свет при использовании фонаря на карте?
@@ -40,6 +46,7 @@
KamerawackelnTřesení mapy?Tremor de mapa?
+ Tremblement de la carte?Térkép-rázkódás?Тряска карты?
@@ -50,6 +57,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 +68,7 @@
Kartenzoom einschränkenOmezit 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 +79,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 +90,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 +101,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 +111,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 carteEz a modul lehetővé teszi a térképnézet testreszabását.Этот модуль позволяет настроить отображение карты.
@@ -109,6 +122,7 @@
Blue Force TrackingBlue Force TrackingRastreio de forças azuis
+ Blue Force TrackingBlue Force követésСистема слежения Blue Force Tracking
@@ -118,6 +132,7 @@
Aktywuj BFTPovolit BFTActivar BFT
+ Activer le Suivi des Forces AlliéesBFT engedélyezéseВключить BFT
@@ -127,6 +142,7 @@
Aktywuj Blue Force Tracking. Domyślnie: NiePovolit Blue Force Tracking. Výchozí: NeActivar Blue Force Tracking. Por defecto: No
+ Activer le SFA. Défaut: nonBlue Force követés engedélyezése. Alapértelmezett: NemВключает систему служения BFT. По-умолчанию: Нет
@@ -137,6 +153,7 @@
IntervallIntervalIntervalo
+ IntervalleIntervallumИнтервал
@@ -147,6 +164,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 +175,7 @@
KI-Gruppen verstecken?Skrýt AI skupiny?Esconder grupos de IA?
+ Cacher les groupes IA?AI csoportok elrejtése?Скрыть группы ботов?
@@ -167,6 +186,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,6 +196,7 @@
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.
@@ -183,31 +204,37 @@
FlashlightsLatarkiФонари
+ SvítilnyNVGNoktowizjaПНВ
+ NVGOnWłączВкл.
+ ZapnoutOffWyłączВыкл.
+ VypnoutIncrease BrightnessZwiększ czułośćУвеличить яркость
+ Zvýšit jasDecrease BrightnessZmniejsz czułośćУменьшить яркость
+ Snížit jas
-
\ No newline at end of file
+
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..e6f7837e24 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];
@@ -35,10 +34,8 @@ GVAR(heartBeatSounds_Slow) = ["ACE_heartbeat_slow_1", "ACE_heartbeat_slow_2"];
// Initialize all effects
_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;
@@ -245,30 +242,28 @@ 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
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/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..9d061460fe 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 ["_bloodPressureHigh", "_bloodPressureLow"];
_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..10a64d79a6 100644
--- a/addons/medical/functions/fnc_determineIfFatal.sqf
+++ b/addons/medical/functions/fnc_determineIfFatal.sqf
@@ -1,19 +1,21 @@
-/**
- * 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};
+private ["_damageThreshold", "_damageBodyPart"];
+params ["_unit", "_part", ["_withDamage", 0]];
if (!alive _unit) exitwith {true};
if (_part < 0 || _part > 5) exitwith {false};
@@ -36,7 +38,7 @@ if (_part == 0) exitwith {
// Check if damage to body part is higher as damage torso
if (_part == 1) exitwith {
- (_damageBodyPart >= (_damageThreshold select 1) && {(random(1) > 0.2)});
+ (_damageBodyPart >= (_damageThreshold select 1) && {(random(1) > 0.35)});
};
// Check if damage to body part is higher as damage limbs
(_damageBodyPart >= (_damageThreshold select 2) && {(random(1) > 0.95)});
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..214d291e86 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", "_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..43b0852e1b 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(3)] 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..41f93b954b 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..37c9f3ef15
--- /dev/null
+++ b/addons/medical/functions/fnc_treatmentBasic_bandageLocal.sqf
@@ -0,0 +1,43 @@
+/*
+ * 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 {
+ _damageBodyParts set [_part, ((_damageBodyParts select _part) - BANDAGEHEAL) 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..7a911dbb6f 100644
--- a/addons/medical/stringtable.xml
+++ b/addons/medical/stringtable.xml
@@ -1,4 +1,4 @@
-
+
@@ -1593,6 +1593,7 @@
KeineŽádnýNada
+ AucunNincs
@@ -2219,6 +2220,7 @@
Obvázání odstraňuje skvrny od krveEl vendaje elimina las manchas de sangreBandagem remove manchas de sangue
+ Les bandages supprimes les tâches de sangA kötözés eltávolítja a vérfoltokatПеревязка убирает пятна крови
@@ -2229,6 +2231,7 @@
Bolest je potlačena pouze dočasněEl dolor se suprime solo temporalmenteDor é suprimida somente temporáriamente
+ La douleur est seulement supprimée temporairementA fájdalom csak ideiglenesen csökkenБоль приглушается только временно
@@ -2744,6 +2747,7 @@
ACE-MedicsystemACE ZdravotnickéACE Médico
+ ACE MédicalACE Orvosi Rendszer
@@ -2754,6 +2758,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 +2769,7 @@
Medizinisches LevelÚroveň medickéhoNível médico
+ Niveau de simulation médicaleOrvosi szint
@@ -2774,6 +2780,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 +2791,7 @@
StandardZákladníBásica
+ BasiqueAlap
@@ -2794,6 +2802,7 @@
ErweitertPokročiléAvançada
+ AvancéeFejlett
@@ -2804,6 +2813,7 @@
Medizinische EinstellungenÚroveň zdravotníkůConfiguração médica
+ Paramètre des infirmiersOrvosok beállítása
@@ -2813,6 +2823,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 +2834,7 @@
Sanitäter deaktivierenZakázat zdravotníkyDesativar médicos
+ Désactiver les infirmiersOrvosok letiltása
@@ -2833,6 +2845,7 @@
Abfälle aktivierenPovolit odpadkyAtivar lixo médico
+ Activer les détritusSzemét engedélyezése
@@ -2843,6 +2856,7 @@
Aktiviere Abfälle, wenn eine Behandlung durchgeführt wurdeVytváří 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 traitementsEngedélyezi a szemét keletkezését ellátáskor
@@ -2853,6 +2867,7 @@
Dauer des angezeigten AbfallsŽivotnost pro odpadkyTempo de vida dos objetos do lixo
+ Durée d'affichage des détritusSzemétobjektumok élettartama
@@ -2863,6 +2878,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 tempsMilyen sokáig legyenek jelen a szemétobjektumok (másodpercben)? A -1 végtelen időt jelent.
@@ -2873,6 +2889,7 @@
Schreie aktivierenPovolit křikAtivar gritos
+ Activer les hurlementsKiáltások engedélyezése
@@ -2883,6 +2900,7 @@
Aktiviere Schreie bei verletzten EinheitenPovolit křičení zraněných jednotekAtiva gritos para unidades feridas
+ Active les hurlements d'unités blesséesEngedélyezi a sérült egységek kiáltásait
@@ -2893,6 +2911,7 @@
SpielerschadenPoškození hráčeDano do jogador
+ Dégats des joueursJátékos sérülés
@@ -2903,6 +2922,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 +2933,7 @@
KI-SchadenPoškození AIDano da IA
+ Dégats des IAAI sérülés
@@ -2923,6 +2944,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éeMennyi sérülést szenvedhet el egy AI, mielőtt meghal?
@@ -2933,6 +2955,7 @@
KI-BewusstlosigkeitBezvědomí AIInconsciência da IA
+ Inconscience des IAAI eszméletlenség
@@ -2943,6 +2966,7 @@
KI kann bewusstlos werdenUmožňuje AI upadnout do bezvědomíPermite IA ficar inconsciente
+ Autoriser les IA à tomber inconscienteEngedélyezi az AI eszméletének elvesztését
@@ -2951,6 +2975,7 @@
IA controlada remotamenteZdalnie sterowane AIVzdáleně ovládané AI
+ Contrôle à distance des IATávvezérelt AIЗевса считать ботом
@@ -2960,6 +2985,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 +2997,7 @@
Verhindere direkten TodZabránit okamžité smrtiPrevinir morte instantânea
+ Empêcher la morte instantanéeAzonnali halál kiiktatása
@@ -2981,6 +3008,7 @@
Lässt eine Einheit bewusstlos werden anstatt zu sterbenJednotka upadne do bezvědomí namísto smrtiFazer a unidade ficar inconsciente invés de morrer
+ Forcer l'inconscience au lieu de la mort instantanéeEgy egység kerüljön eszméletlen állapotba a halott helyett
@@ -2991,6 +3019,7 @@
VerblutungsmultiplikatorKoeficient krváceníCoeficiente de sangramento
+ Coefficient de saignementVérzési koefficiens
@@ -3001,6 +3030,7 @@
Multiplikator um die Verblutungsgeschwindigkeit zu verändernKoeficient rychlosti krváceníCoeficiente para modificar a velocidade do sangramento
+ Coefficient modifiant la vitesse de saignementEgy szorzó a vérzés sebességének szabályozására
@@ -3011,6 +3041,7 @@
SchmerzmultiplikatorKoeficient bolestiCoeficiente de dor
+ Coefficient de douleurFájdalmi koefficiens
@@ -3021,6 +3052,7 @@
Multiplikator um den Schmerzintensität zu verändernKoeficient intenzity bolestiCoeficiente para modificar a instensidade de dor
+ Coefficient modifiant l'intensité de la douleurEgy szorzó a fájdalom erősségének szabályozására
@@ -3031,6 +3063,7 @@
Status synchronisierenSynchronizovat statusSincronizar estado
+ Status de la synchronisationSzinkronizációs állapot
@@ -3041,6 +3074,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 +3085,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 +3096,7 @@
Erweiterte medizinische Einstellungen [ACE]Pokročilé zdravotnické nastavení [ACE]Ajustes médicos avançados [ACE]
+ Paramètres des soins avancésFejlett orvosi beállítások [ACE]
@@ -3071,6 +3107,7 @@
Aktiviert fürPovoleno proHabilitado para
+ Activer pourEngedélyezve...
@@ -3081,6 +3118,7 @@
Wähle aus welche Einheiten das erweiterte medizinische System habenVyberte, pro jaké jednotky bude pokročilý zdravotní systém povolenSelecione 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 +3129,7 @@
Nur SpielerPouze hráčiSomente jogadores
+ Joueur uniquementCsak játékosok
@@ -3101,6 +3140,7 @@
Spieler und KIHráči a AIJogadores e IA
+ Joueur et IAJátékosok és AI
@@ -3111,6 +3151,7 @@
Aktiviere erweiterte WundenPovolit pokročilé zraněníAtivar ferimentos avançados
+ Activer les blessures avancéesKomplex sebek engedélyezése
@@ -3121,6 +3162,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 bandagesVisszanyílhatnak a bekötözött sebek?
@@ -3131,6 +3173,7 @@
FahrzeugunfällePoškození z kolizeBatidas de veículos
+ Accident en véhiculeJárműbalesetek
@@ -3141,6 +3184,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'accidentSérülnek-e az egységek autós ütközés során?
@@ -3151,6 +3195,7 @@
Erlaube Erste-Hilfe-SetPovolit osobní lékárničkyPermitir Kit de Primeiros Socorros
+ Permettre le kit de premier secoursElsősegélycsomag engedélyezése
@@ -3161,6 +3206,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 soignerKi használhatja az elsősegélycsomagot teljes gyógyításra?
@@ -3171,6 +3217,7 @@
JederKdokolivQualquer um
+ Tout le mondeAkárki
@@ -3181,6 +3228,7 @@
Nur SanitäterPouze zdravotníkSomente médicos
+ Infirmier uniquementCsak orvosok
@@ -3191,6 +3239,7 @@
Nur ÄrztePouze doktorSomente doutores
+ Médecin uniquementCsak doktorok
@@ -3201,6 +3250,7 @@
Entferne Erste-Hilfe-Set bei VerwendungOdebrat osobní lékárničku po použitíRemover o KPS depois do uso
+ Enlever le KPS à l'utilisationElsősegélycsomag eltávolítása használatkor
@@ -3211,6 +3261,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 +3272,7 @@
Orte für Erste-Hilfe-SetLokace osobní lékárničkyLocalizações do KPS
+ Lieu d'utilisation du KPSElsősegélycsomag helyek
@@ -3231,12 +3283,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 PAKPodmínka osobní lékárničkyCondición EPA
+ Condition d'utilisation du KPSWarunek apteczekElsősegélycsomag állapotCondição do KPS
@@ -3246,6 +3300,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 SecoursPo 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 +3314,7 @@
ÜberallKdekolivQualquer lugar
+ PArtoutAkárhol
@@ -3269,6 +3325,7 @@
Medizinische FahrzeugeZdravotnická vozidlaVeículos médcos
+ Dans les véhicules médicalsOrvosi járművek
@@ -3279,6 +3336,7 @@
Medizinische EinrichtungenZdravotnické zařízeníInstalação médica
+ Dans les installations médicalesOrvosi létesítmény
@@ -3289,6 +3347,7 @@
Fahrzeuge & EinrichtungenVozidla a zařízeníVeículos e instalações
+ Dans les véhicules et les installations médicalsJárművek & létesítmény
@@ -3299,6 +3358,7 @@
Erlaube OperationskastenPovolit chirurgickou soupravu (Pokr.)Permite kit cirúrgico (avançado)
+ Permettre les kit de chirurgie (Avancé)Sebészkészlet (Fejlett) engedélyezése
@@ -3309,6 +3369,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 chirurgieKi használhatja a sebészkészletet?
@@ -3319,6 +3380,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 +3391,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'utilisationEltávolítódjon a sebészkészlet használatkor?
@@ -3339,6 +3402,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 chirurgieSebészkészlet (Fejlett) helyei
@@ -3349,12 +3413,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 chirurgieHol 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 chirurgieWarunek zestawu chir.Sebészkészlet állapotCondição do Kit Cirúrgico (Avançado)
@@ -3364,6 +3430,7 @@
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 chirurgiePo 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?
@@ -3376,6 +3443,7 @@
Skvrny od krveManchas de sangreManchas de sangue
+ Tâches de sangVérfoltokУдалять пятна крови
@@ -3386,6 +3454,7 @@
Obvázání odstraňuje skvrny od krveEl vendaje elimina las manchas de sangreBandagem remove manchas de sangue
+ Appliquer un bandage supprime les tâches de sangKötözés eltávolítja a vérfoltokatПеревязка удаляет пятна крови
@@ -3396,6 +3465,7 @@
Potlačení bolestiSupresión del dolorSupressão de dor
+ Suppression de la douleurFájdalomcsillapításПриглушение боли
@@ -3406,6 +3476,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éeA fájdalom csak ideiglenesen csökken, nem távolítódik elБоль приглушается только временно
@@ -3417,6 +3488,7 @@
Behandlungseinstellungen vom ACE-Medical konfigurierenKonfigurace nastavení léčby ze zdravotnické systému ACEConfigure as opções de tratamento do ACE Médico
+ Configure les paramètres de traitement du système de soin ACEKezelési lehetőségek konfigurálása az ACE Orvosi rendszerből
@@ -3427,6 +3499,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 +3510,7 @@
Erlaube WiederbelebungPovolit oživeníHabilitar reavivamento
+ Activer le reviveÚjraélesztés engedélyezése
@@ -3447,6 +3521,7 @@
Aktiviere Standard-WiederbelebungssystemPovolit základní systém oživeníHabilitar um sistema básico de reavivamento
+ Active un sytème de revive basiqueEgy alap újraélesztési rendszer engedélyezése
@@ -3457,6 +3532,7 @@
Maximale WiederbelebungszeitMaximální čas pro oživeníTempo máximo de reavivamento
+ Temps maximum pour le reviveMaximum újraélesztési idő
@@ -3467,6 +3543,7 @@
Maximale Zeitspanne in Sekunden die eine Einheit im Wiederbelebungszustand verbringen kannMaximální doba v agónii v sekundáchQuantidade 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 reviveMaximum másodperc, amit egy egység újraélesztési állapotban tölthet
@@ -3477,6 +3554,7 @@
Maximale Leben bei WiederbelebungMaximální počet oživeníVidas máximas do reavivado
+ Nombre maximum de reviveMaximum újraélesztési lehetőségek
@@ -3487,6 +3565,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ésactiveEgy egység maximum "életei". 0 vagy -1 letiltja.
@@ -3497,6 +3576,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 IAsEgy orvosi rendszert ad játékosok és AI-k számára.
@@ -3507,6 +3587,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 +3598,7 @@
ListeSeznamLista
+ ListeLista
@@ -3527,6 +3609,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 virguleAzon egységek nevei, melyek orvosként vannak meghatározva, vesszővel elválasztva.
@@ -3537,6 +3620,7 @@
Ist SanitäterJe zdravotníkÉ médico
+ Est infirmierOrvos-e
@@ -3545,6 +3629,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éeEz a modul engedélyezi az orvosi jelző hozzárendelését kiválasztott egységekhez.Этот модуль позволяет назначить класс медика выбранным юнитам.
@@ -3556,6 +3641,7 @@
KeineŽádnýNada
+ AucunNincs
@@ -3566,6 +3652,7 @@
Normaler SanitäterŘadový zdravotníkMédico regular
+ Infirmier standardHagyományos orvos
@@ -3576,6 +3663,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 +3674,7 @@
Weise die ACE-Sanitäterklasse einer Einheit zuPřiřadí ACE třídu zdravotníka do jednotkyAtribui 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 +3685,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 +3696,7 @@
ListeSeznamLista
+ ListeLista
@@ -3616,6 +3707,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 +3718,7 @@
Ist medizinisches FahrzeugJe zdravotnické vozidloÉ um veículo médico
+ Véhicule médicalOrvosi jármű-e
@@ -3636,6 +3729,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édicalA listában lévő objektumok orvosi járművek-e, vagy sem.
@@ -3646,6 +3740,7 @@
Weist die ACE-Sanitäterklasse einer Einheit zuPřiřadí ACE třídu zdravotníka do jednotkyAtribui 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 +3751,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 +3762,7 @@
Ist eine medizinische EinrichtungJe zdravotnické zařízeníÉ uma instalação médica
+ Est un équipement médicalOrvosi létesítmény-e
@@ -3676,6 +3773,7 @@
Definiert ein Objekt als medizinische EinrichtungRegistruje objekt jako zdravotnické zařízeníRegistra um objeto como instalacão médica
+ Enregistrer un objet comme un équipement médicalEgy objektum orvosi létesítményként való regisztrálása
@@ -3686,6 +3784,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éhiculesEgy 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 +3795,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 +3806,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)AnytimeKdykoliSiempre
+ Tout le tempsZawszeAkármikorSempre
@@ -3721,6 +3823,7 @@
StableStabilníEstable
+ StablePo stabilizacjiStabilEstável
@@ -3743,5 +3846,13 @@
%1 odszedł zbyt daleko, nie można kontynuować leczeniaРасстояние до %1 стало слишком большим для лечения
+
+ 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..1fbf5e20bc 100644
--- a/addons/medical_menu/stringtable.xml
+++ b/addons/medical_menu/stringtable.xml
@@ -57,6 +57,7 @@
EXAMINAR & TRATAMIENTOEXAMINER & TRAITEMENTSBADANIE & LECZENIE
+ VYŠETŘENÍ & LÉČBASTATUS
@@ -64,6 +65,7 @@
ESTADOÉTATSSTATUS
+ STAVOVERVIEW
@@ -71,6 +73,7 @@
DESCRIPCIÓNDESCRIPTIONOPIS
+ PŘEHLEDACTIVITY LOG
@@ -78,6 +81,7 @@
REGISTRO DE ACTIVIDADREGISTRE DES SOINSLOGI AKTYWNOŚCI
+ PROTOKOLQUICK VIEW
@@ -85,6 +89,7 @@
VISTA RÁPIDAVUE RAPIDESZYBKI PODGLĄD
+ RYCHLÝ NÁHLEDView triage Card
@@ -134,6 +139,7 @@
Arrastrar/CargarGlisser/PorterCiągnij/Nieś
+ Táhnout/NéstToggle (Self)
@@ -155,6 +161,7 @@
Seleccionar CabezaSelectioner TêteWybierz głowę
+ Vybrat HlavuSelect Torso
@@ -162,6 +169,7 @@
Seleccionar TorsoSelectioner TorseWybierz tors
+ Vybrat TrupSelect Left Arm
@@ -169,6 +177,7 @@
Seleccionar Brazo IzquierdoSelectioner Bras GaucheWybierz lewą rękę
+ Vybrat Levou RukuSelect Right Arm
@@ -176,6 +185,7 @@
Seleccionar Brazo DerechoSelectioner Bras DroitWybierz prawą rękę
+ Vybrat Pravou RukuSelect Left Leg
@@ -183,6 +193,7 @@
Seleccionar Pierna IzquierdaSelectioner Jambe GaucheWybierz lewą nogę
+ Vybrat Levou NohuSelect Right Leg
@@ -190,6 +201,7 @@
Seleccionar Pierna DerechaSelectioner Jambe DroiteWybierz prawą nogę
+ Vybrat Pravou NohuHead
@@ -197,12 +209,14 @@
CabezaTêteGłowa
+ HlavaTorsoТорсTorseTors
+ TrupLeft Arm
@@ -210,6 +224,7 @@
Brazo IzquierdoBras GaucheLewa ręka
+ Levá RukaRight Arm
@@ -217,6 +232,7 @@
Brazo DerechoBras DroitPrawa ręka
+ Pravá RukaLeft Leg
@@ -224,6 +240,7 @@
Pierna IzquierdaJambe GaucheLewa noga
+ Levá NohaRight Leg
@@ -231,6 +248,7 @@
Pierna DerechaJambe DroitePrawa noga
+ Pravá NohaBody Part: %1
@@ -315,6 +333,7 @@
No respiraApnéeBrak oddechu
+ NedýcháDifficult breathing
@@ -322,6 +341,7 @@
Dificultad para respirarDifficultée RespiratoireTrudności z oddychaniem
+ Potíže s dýchánímAlmost no breathing
@@ -329,6 +349,7 @@
Casi sin respirarRespiration FaiblePrawie brak oddechu
+ Téměř nedýcháBleeding
@@ -336,6 +357,7 @@
SangrandoSeignementKrwawienie zewnętrzne
+ Krvácíin Pain
@@ -343,6 +365,7 @@
Con DolorA De La DouleurW bólu
+ v BolestechLost a lot of Blood
@@ -350,6 +373,7 @@
Mucha Sangre perdidaA Perdu Bcp de SangStracił dużo krwi
+ Ztratil hodně KrveTourniquet [CAT]
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/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/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í mapyMicroDAGR-KartenfüllungPreenchimento de mapa do MicroDAGR
+ MicroDAGR - Remplissage de la carteMicroDAGR térképkitöltésЗаполнение карты MicroDAGR
@@ -318,6 +319,7 @@
MicroDAGR - Vyplnění mapyMicroDAGR-KartenfüllungPreenchimento de mapa do MicroDAGR
+ MicroDAGR - Remplissage de la carteMicroDAGR térképkitöltésЗаполнение карты MicroDAGR
@@ -328,6 +330,7 @@
Wie viel Daten auf einem MicroDAGR zu sehen sindKolik informací je načteno do MicroDAGR?Quanta informação é preenchida no mapa do MicroDAGR
+ Combien d'information apparaisse sur la carte du MicroDAGRMennyi térképadatot tartalmaz a MicroDAGRСколько данных должно отображаться на карте MicroDAGR
@@ -338,6 +341,7 @@
Satellitenbild + GebäudeSatelit + BudovySatélite completo + Edifícios
+ Satellite + BatimentsTeljes műholdas + épületekСпутник + Здания
@@ -348,6 +352,7 @@
Topografisch + StraßenTopografické + CestyTopográfico + Estradas
+ Topographie + RoutesTopográ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.pboTento 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.pboControla 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.pboMeghatá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 @@
AusVypnoutDesligado
+ EteintKiВыкл.
@@ -114,6 +115,7 @@
Nur SpielerPouze hráčiSomente jogador
+ Seulement les joueursCsak játékosokТолько игрок
@@ -124,8 +126,9 @@
Spieler und KIHráči a AIJogador e IA
+ Joueurs et IAJá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-MissionsmoduleACE Moduly miseMódulo de missões ACE
+ ACE module de missionACE 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 @@
SoundsZvukySons
+ SonsHangokЗвуки
@@ -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 @@
MindestabstandMinimální vzdálenostDistância mínima
+ Distance minimaleMinimá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) festPouží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 @@
MaximalabstandMaximální vzdálenostDistância máxima
+ Distance maximaleMaximá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) festPouží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ögerungMinimální prodlevaAtraso mínimo
+ Délais minimalMinimum késleltetésМинимальная задержка
@@ -97,6 +106,7 @@
Minimale Verzögerung zwischen abzuspielenden SoundsMinimální prodleva mezi přehrávanými zvukyAtraso 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ögerungMaximální prodlevaAtraso máximo
+ Délais maximalMaximum késleltetésМаксимальная задержка
@@ -117,6 +128,7 @@
Maximale Verzögerung zwischen abzuspielenden SoundsMaximální prodleva mezi přehrávanými zvukyAtraso 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 folgenNásledovat hráčeSeguir jogadores
+ Suivre les joueursJá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 logiqueJá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ärkeHlasitostVolume
+ VolumeHangerőГромкость
@@ -157,6 +172,7 @@
Lautstärke der abzuspielenden SoundsHlasitost přehrávaného zvukuO volume em que os sons serão reproduzidos
+ Volume des sons lusA 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/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-EinstellungenMK6 - NastaveníAjustes do MK6
+ Option du MK6MK6 beállításokНастройки MK6
@@ -66,6 +67,7 @@
LuftwiderstandOdpor vzduchuResistência do Ar
+ Résistance de l'airLégellenállásСопротивление воздуха
@@ -76,6 +78,7 @@
Für Spielerschüsse, Luftwiderstand und WindeffektePro hráčovu střelbu, Model odporu vzduchu a povětrných podmínekPara 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 ventJá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-ComputerMK6 - Povolit počítačPermitir computador do MK6
+ Autoriser l'ordinateur de tir pour MK6MK6 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-KompassMK6 - Povolit kompasPermitir bússula do MK6
+ Autoriser la boussole pour MK6MK6 iránytű engedélyezéseРазрешить компас MK6
@@ -116,6 +122,7 @@
Zeige MK6-Digitaler-KompassMK6 - Zobrazit digitální kompasMostra a bússula digital do MK6
+ Affiche la boussole digitale pour le MK6Az 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-2AMX-2AMX-2A
+ MX-2AMX-2AMX-2A
@@ -18,8 +19,9 @@
Dispositivo de imagen térmicaTermální dalekohledDispositivo de imagem térmica
+ Appareil d'imagerie thermiqueHőleképező készülékТепловизионный прибор
-
\ No newline at end of file
+
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 @@
NamensanzeigenJmenovkyEtiquetas de nome
+ NameTagsNévcímkékИмена игроков
@@ -126,6 +127,7 @@
Spielernamen-DistanzVzdálenost zobrazení jména hráčůDistância de visão dos nomes dos jogadores
+ Distance de vue des noms de joueursJátékosok nevének látótávjaДистанция отображения имен
@@ -136,6 +138,7 @@
Distanz in Metern bei der Spielernamen angezeigt werden. Standard: 5Vzdálenost v metrech pro zobrazení jména. Výchozí: 5Distâ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: 5Mé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 erwzingenZobrazit jména a hodnosti pro spřátelené AI jednotky? Výchozí: NevynucovatMostra 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 forcerMutassa-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 erzwingenVynuceno skrýtOcultar forçado
+ Forcer la désactivationErőltetett rejtettОбязательно: Скрывать
@@ -176,6 +182,7 @@
Anzeigen erzwingenVynuceno zobrazitMostrar forçado
+ Forcer l'affichageErő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 forcerA 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 FahrzeugenZobrazit pro vozidlaMostrar para veículos
+ Montrer pour les véhiculesMutatá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: NoPokazuj imię dowódcy pojazdu nad pojazdem (tylko jeżeli klient ma włączone imiona graczy). Domyślnie: NieMuestra etiquetas de nombre en el cursor para el comandante del vehiculo (solo si el cliente tiene las etiquetas de nombre activadas) Por defecto: NoZeige Maus-Namensanzeigen für Fahrzeugkommandanten (nur wenn der Client Namensanzeigen aktiviert hat). Standard: NeinZobrazit jmenovky pro velitele vozidla (pouze pokud má klient jmenovky povolené). Výchozí: NeMostrar 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: nonThis 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 nomsEz a modul lehetővé teszi a névcímkék beállításainak testreszabását.Этот модуль позволяет настроить опции и дистанцию отображения имен игроков.
@@ -235,6 +247,7 @@
Nur bei MausPouze na kurzorSomente no cursor
+ Seulement sous le curseurCsak kurzorraТолько под курсором
@@ -245,6 +258,7 @@
Nur bei TastendruckPouze na klávesuSomente em tecla ativada
+ Seulement par appui de toucheCsak gombnyomásraТолько по нажатию клавиши
@@ -255,6 +269,7 @@
Nur Maus und TastendruckPouze na kurzor a klávesuSomente em cursor ou tecla ativada
+ Seulement sous le curseur et par appui de toucheCsak kurzorra és gombnyomásraПод курсором или по нажатию клавиши
@@ -265,6 +280,7 @@
Vynuceno zobrazit pouze na kurzorErzwinge nur mit Mauszeiger anzuzeigenForçar mostrar somente no cursor
+ Forcer l'affichage sous le curseur uniquementErőltetett látható, csak kurzorraОбязательно: Только под курсором
@@ -275,6 +291,7 @@
Vynuceno zobrazit pouze na klávesuErzwinge nur mit Tastendruck anzuzeigenForçar somente mostrar em tecla ativada
+ Forcer l'affichage par appui de touche uniquementErőltetett látható, csak gombnyomásraОбязательно: Только по нажатию клавиши
@@ -285,6 +302,7 @@
Vynuceno zobrazit pouze na kurzor a klávesuErzwinge nur mit Mauszeiger und Tastendruck anzuzeigenForçar mostrar somente em cursor e tecla ativada
+ Forcer l'affichage sous le curseur et par appui de touche uniquementErőltetett látható, csak kurzorra és gombnyomásraОбязательно: Под курсором или по нажатию клавиши
@@ -295,6 +313,7 @@
Verwende NamenanzeigenPoužít nastavení jmenovkyUsar ajustes de etiquetas de nome
+ Utiliser les paramètre des NamesTagsNévcímkék beállításának használataТак же, как имена
@@ -305,6 +324,7 @@
Immer alle zeigenVždy zobrazit všeSempre mostrar tudo
+ Toujours montrer toutMindig minden mutatásaВсегда показывать
@@ -315,6 +335,7 @@
Zobrazit jména hráčů a nastavit jejich aktivaci. Výchozí: PovolenoErlaubt das Anzeigen von Spielernamen und stellt ein, ob sie standardmäßig aktiviert oder deaktiviert sind. Standard: aktiviertMostrar 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 TFARHanghullá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 jmenovkyNamensschildgrößeTamanho das etiquetas de nome
+ Taille des nomsNévcímkék méreteРазмер имен игроков
@@ -345,8 +368,9 @@
Velikost textu a ikonText- und SymbolgrößenEscala de tamanho dos ícones e textos
+ Taille du texte et des iconesSzöveg és ikon méretének skálázásaМасштабирование размера текста и иконок
-
\ No newline at end of file
+
diff --git a/addons/optionsmenu/stringtable.xml b/addons/optionsmenu/stringtable.xml
index 148dc06147..e3a78fb216 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 @@
ErlaubePovolitPermitir
+ AutoriserEngedé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 configurationAz ö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 papierEngedé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 @@
VersteckenSkrýtOcultar
+ CacherElrejtésСкрыть
@@ -274,6 +279,7 @@
Open rechts, nach untenVpravo nahoře, dolůSuperior direito, para baixo
+ Haut droit, vers le basJobb felül, lefeleСправа — сверху вниз
@@ -284,6 +290,7 @@
Von rechts nach linksVpravo nahoře, do levaSuperior direito, à esquerda
+ Haut droit, vers la gaucheJobb felül, balraСверху — справа налево
@@ -294,6 +301,7 @@
Von links, nach untenVlevo nahoře, dolůSuperior esquerdo, para baixo
+ Haut gauche, vers le basBal felül, lefeleСлева - сверху вниз
@@ -304,6 +312,7 @@
Oben links nach rechtsVlevo nahoře, do pravaSuperior esquerdo, para a direita
+ Haut gauche, vers la droiteBal felül, jobbraСверху — слева направо
@@ -314,6 +323,7 @@
ObenNahořeAcima
+ HautFentСверху
@@ -324,6 +334,7 @@
UntenDoleAbaixo
+ BasAlulСнизу
@@ -334,6 +345,7 @@
Debug do schránkyDebug in die ZwischenablageDepuração para área de transferência
+ Debug vers le presse papierDebug a vágólapraОтладка в буфер обмена
@@ -344,20 +356,31 @@
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.
+
+
+ Headbug Fix
+
+
+ Resets your animation state.
+ Copie le Debug dans le RPT et le presse papierDebug információt küld az RPT-be és a vágólapra.Отправляет отладочную информацию в RPT и буфер обмена.Headbug FixFix Headbug
+ HeadBug"Fejhiba" fixFix Headbug
+ Fix HeadbugResets your animation state.Resetuje aktualną animację.
+ Réinitialise l'état de l'animationVisszaállítja az animációs állapotodat.Исправляет баг с зациклившейся анимацией.
+ Resetovat aktuální animaci.ACE News
@@ -365,7 +388,8 @@
ACE-NeuigkeitenNotícias do ACEWiadomości ACE
- ACE Novinky
+ ACE Zprávy
+ Nouveautés ACEACE hírekНовости ACE
@@ -375,7 +399,7 @@
Zeige Neuigkeiten im HauptmenüMostrar notícias no menu principalPokazuj wiadomości ACE w menu głównym
- Zobrazit novinky v hlavním menu
+ Affiche les nouveautés sur l'écran principalHírek mutatása a főmenübenПоказывать новости в Главном Меню
@@ -383,11 +407,13 @@
All CategoriesWszystkie kategorieВсе категории
+ Všechny KategorieLogisticsLogistykaЛогистика
+ Logistika
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..5ee6363c63 100644
--- a/addons/parachute/stringtable.xml
+++ b/addons/parachute/stringtable.xml
@@ -1,4 +1,4 @@
-
+
@@ -17,7 +17,7 @@
Altimeter WatchMontre altimètreHöhenmesser
- Hodinky s výškoměrem
+ Hodinky s VýškoměremZegarek z wysokościomierzemReloj altímetroMagasságmérős karóra
@@ -43,7 +43,7 @@
Paracaídas no dirigibleParachute non manœuvrableNiesterowalny spadochron
- Neříditelný padák
+ Neříditelný PadákIrányíthatatlan ejtőernyőНеуправляемый парашютParacadute non manovrabile
@@ -52,16 +52,20 @@
Cut ParachuteFallschirm abschneiden
+ Couper le parachuteOdetnij spadochronEjtőernyő elvágásaОбрезать стропы
+ Odžíznout PadákReserve ParachuteReserve Fallschirm
+ Mettre de coté le parachute (????)Spadochron awaryjnyTartalék ejtőernyőЗапасной парашют
+ 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..b59e468fa3 100644
--- a/addons/rangecard/stringtable.xml
+++ b/addons/rangecard/stringtable.xml
@@ -1,4 +1,4 @@
-
+
@@ -19,6 +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)
+ Incrément de 50m -- MRAD/MRAD (réticule/tourelle)Intervalle 50 mètres -- millième/millième (réticule/tambours)50 MÉTERES lépések - MRAD/MRAD (célzó/lövegek)Шаг 50 МЕТРОВ - MRAD/MRAD (сетка/маховички)
@@ -30,6 +31,7 @@
Otevřít vzdálenostní tabulkuÖffne EntfernungsspinneAbrir tabela de distâncias
+ Ouvrir la table de tirAfficher table de tirTávolsági kártya kinyitásaОткрыть таблицу поправок
@@ -41,6 +43,7 @@
Otevřít kopii vzdálenostní tabulkyÖffne Kopie der EntfernungsspinneAbrir cópia da tabela de distâncias
+ Ouvrir une copie de la table de tirAfficher table de tir copiéeTávolsági kártya-másolat kinyitásaОткрыть копию таблицы поправок
@@ -52,6 +55,7 @@
Otevřít vzdálenostní tabulkuÖffne EntfernungsspinneAbrir tabela de distäncias
+ Ouvrir la table de tirAfficher table de tirTávolsági kártya kinyitásaОткрыть таблицу поправок
@@ -63,6 +67,7 @@
Otevřít kopii vzdálenostní tabulkyÖffne Kopie der EntfernungsspinneAbrir cópia da tabela de distâncias
+ Ouvrir une copie de la table de tirAfficher table de tir copiéeTávolsági kártya-másolat kinyitásaОткрыть копию таблицы поправок
@@ -74,6 +79,7 @@
Kopírovat vzdálenostní tabulkuKopiere EntfernungsspinneCopiar tabela de distäncias
+ Recopier la table de tirCopier table de tirTávolsági kártya másolásaСкопировать таблицу поправок
diff --git a/addons/repair/ACE_Settings.hpp b/addons/repair/ACE_Settings.hpp
index 48d3a9c0c6..fc3f063fb1 100644
--- a/addons/repair/ACE_Settings.hpp
+++ b/addons/repair/ACE_Settings.hpp
@@ -57,8 +57,15 @@ 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);
+ };
};
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..e9ca5258ba 100644
--- a/addons/repair/CfgVehicles.hpp
+++ b/addons/repair/CfgVehicles.hpp
@@ -91,6 +91,12 @@ 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 ModuleDescription {
description = CSTRING(moduleDescription);
@@ -215,19 +221,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_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_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..2c7e406490 100644
--- a/addons/repair/functions/fnc_moduleRepairSettings.sqf
+++ b/addons/repair/functions/fnc_moduleRepairSettings.sqf
@@ -31,4 +31,6 @@ if (!isServer) exitWith {};
[_logic, QGVAR(fullRepairLocation), "fullRepairLocation"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(engineerSetting_fullRepair), "engineerSetting_fullRepair"] call EFUNC(common,readSettingFromModule);
+[_logic, QGVAR(addSpareParts), "addSpareParts"] call EFUNC(common,readSettingFromModule);
+
diag_log text "[ACE]: Repair Module Initialized.";
diff --git a/addons/repair/stringtable.xml b/addons/repair/stringtable.xml
index de69421fae..56aa2e14c0 100644
--- a/addons/repair/stringtable.xml
+++ b/addons/repair/stringtable.xml
@@ -1,5 +1,4 @@
-
@@ -8,7 +7,7 @@
Cadena de repuestoChenille de réserveZapasowa gąsienica
- Náhradní pásy
+ Náhradní PásyLagarta ReservaCingolo di scortaPót lánctalp
@@ -32,7 +31,7 @@
Cambiar ruedaChanger RoueWymień koło
- Vyměňit kolo
+ Vyměňit KoloTrocar RodaSostituisci la ruotaKerék cseréje
@@ -43,12 +42,14 @@
Ersetze Reifen ...Wymienianie koła ...Замена колеса ...
+ Měním Kolo ...Wheel replacedReifen ersetztKoło zostało wymienioneКолесо заменено
+ Kolo vyměněnoRemove Wheel
@@ -67,57 +68,68 @@
Entferne Reifen ...Zdejmowanie koła ...Снятие колеса ...
+ Odstraňuji Kolo ...Wheel removedReifen entferntKoło zostało zdjęteКолесо снято
+ Kolo odstraněnoChange TrackWymień gąsienicęЗаменить гусеницу
+ Vyměnit PásReplacing Track ...Wymienianie gąsienicy ...Замена гусеницы ...
+ Měním Pás ...Track replacedGąsienica została wymienionaГусеница заменена
+ Pás vyměněnRemove TrackZdejmij gąsienicęСнять гусеницу
+ Odstranit PásRemoving Track ...Zdejmowanie gąsienicy ...Снятие гусеницы ...
+ Odstraňuji Pás ...Track removedGąsienica została zdjętaГусеница снята
+ Pás odstraněnFull RepairPełna naprawaПолный ремонт
+ Kompletní OpravaRepairing Vehicle ...Naprawianie pojazdu ...Ремонт транспорта ...
+ Opravuji Vozidlo ...Full Repair LocationsLokaliz. pełnej naprawyМеста полного ремонта
+ Lokace pro Kompletní OpravuAt what locations can a vehicle be fully repaired?
@@ -128,12 +140,21 @@
Allow Full RepairZezwól na pełną naprawęПолный ремонт выполняют
+ Povolit Kompletní OpravuWho can perform a full repair on a vehicle?Kto może przeprowadzić pełną naprawę pojazdu?Кто может выполнять полный ремонт?
+
+ Add Spare Parts
+ Dodaj części zam.
+
+
+ Add spare parts to vehicles (requires Cargo component)?
+ Czy dodać do pojazdów części zamienne? Wymaga włączonego cargo.
+ Repair >>Reparieren >>
@@ -150,6 +171,7 @@
Display text on repairWyświetl tekst przy naprawieОтображать текст при ремонте
+ Zobrazit text při opravěDisplay a notification whenever you repair a vehicle
@@ -197,6 +219,7 @@
Bauteil vollständig repariertW pełni naprawiono częśćПолностью отремонтированная часть
+ Kompletně opravená částPartially repaired %1
@@ -209,6 +232,7 @@
%1 vollständig repariertW pełni naprawiono: %1Полностью отремонтировано: %1
+ Kompletně opraveno %1Partially repaired %1
@@ -254,14 +278,18 @@
Left Horizontal Stabilizer
+ Lewy statecznik poziomyЛевый горизонтальный стабилизаторRight Horizontal Stabilizer
+ Prawy statecznik poziomyПравый горизонтальный стабилизаторVertical Stabilizer
+ Vertikální Stabilizátor
+ Statecznik pionowyВертикальный стабилизатор
@@ -278,30 +306,42 @@
Transmission
+ Převodovka
+ Skrzynia biegówТрансмиссияGear
+ PodwozieКоробка передачStarter
+ Zapłon
+ StartérСтартерTail
+ Ogon
+ OcasХвост
-
- Pilot Tube
+
+ Pitot Tube
+ Rurka Pitota
+ Pilotova TrubiceКокпитStatic Port
+ Port statycznyСтатический иллюминаторAmmo
+ Munice
+ AmunicjaБоеприпасы
@@ -331,6 +371,8 @@
MissilesРакеты
+ Rakety
+ RakietyLeft Track
@@ -482,7 +524,7 @@
Rotor de colaRotor anticoupleTylni rotor
- Zadní Rotor
+ Ocasní RotorRotor de CaudaRotore di codaFarokrotor
@@ -544,36 +586,43 @@
AnyoneKtokolwiekКто угодно
+ KdokolivEngineer onlyTylko mechanicyТолько инженеры
+ Pouze inženýrRepair Specialist onlyTylko inżynierowieТолько ремонтные специалисты
+ Pouze specialista na opravováníAllow WheelWymiana kółРазрешить замену колес
+ Možnost Výměny KolWho can remove and replace wheels?Kto może zdejmować i zmieniać koła?Кто может снимать и заменять колеса?
+ Kdo může odstranit a vyměnit kola?Allow RepairMożliwość naprawyРазрешить ремонт
+ Možnost OpravováníWho can perform repair actions?Kto może wykonywać czynności związane z naprawą pojazdów?Кто может выполнять ремонт?
+ Kdo může provádět opravy?Repair Threshold
@@ -609,6 +658,7 @@
AnywhereWszędzieГде угодно
+ KdekolivRepair Vehicle only
@@ -629,11 +679,13 @@
Assign EngineerPrzydziel inżynieraНазначить инженером
+ Přiřadit InženýraListListaСписок
+ SeznamList of unit names that will be classified as engineer, separated by commas.
@@ -654,16 +706,19 @@
NoneŻadnyНет
+ NikdoEngineerMechanikИнженер
+ InženýrSpecialistInżynierСпециалист
+ SpecialistaAssign one or multiple units as an engineer
@@ -679,6 +734,7 @@
ListListaСписок
+ SeznamList of vehicles that will be classified as repair vehicle, separated by commas.
@@ -709,6 +765,7 @@
ListListaСписок
+ SeznamList of objects that will be classified as repair Facility, separated by commas.
@@ -730,5 +787,37 @@
Przydziel klasę budynku naprawczego do jednego lub kilku budynków.Назначить один или несколько объектов ремонтными сооружениями
+
+ Add Spare Parts
+ Dodaj części zam.
+
+
+ Add spare parts to one or multiple objects
+ Dodaj części zamienne do jednego lub wielu obiektów.
+
+
+ List
+ Lista
+
+
+ List of objects that will get spare parts added, separated by commas.
+ Lista obiektów, które otrzymają części zamienne, oddzielone przecinkiem.
+
+
+ Part
+ Część
+
+
+ Spare part.
+ Część zamienna.
+
+
+ Amount
+ Ilość
+
+
+ Number of selected spare parts.
+ Ilość wybranych części zamiennych.
+
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-SystemSystém znovuzrozeníSistema de Renascimento
+ Système de RespawnRespawn-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 RespawnAz 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éconnectionJá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 RespawnFriendly Fire Messages
@@ -209,6 +215,7 @@
Freundbeschuss-NachrichtenUpozornění na přátelskou střelbuMensagens de fogo amigo
+ Message de tirs fraticidesBará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-SystemSystém shromážděníSistema de ponto de encontro
+ Système de point de ralliementGyülekezőpont-rendszerСистема точек сбора
@@ -241,6 +250,7 @@
Bewege RallypointPřesun na shromaždištěMover para ponto de encontro
+ Bouger le point de ralliementGyülekezőpont mozgatásaДвигать точку сбора
@@ -251,6 +261,7 @@
ACE-RespawnACE ZnovuzrozeníACE Respawn
+ ACE RespawnACE RespawnACE Возрождение
diff --git a/addons/sitting/CfgMoves.hpp b/addons/sitting/CfgMoves.hpp
index fc902032e2..5cef0fbc6d 100644
--- a/addons/sitting/CfgMoves.hpp
+++ b/addons/sitting/CfgMoves.hpp
@@ -1,6 +1,9 @@
// Enable visual head movement while free-looking
#define MACRO_ANIMATION \
- head = "headDefault";
+ head = "headDefault"; \
+ aimingBody = "aimingNo"; \
+ forceAim = 1; \
+ static = 1;
class CfgMovesBasic;
class CfgMovesMaleSdr: CfgMovesBasic {
diff --git a/addons/sitting/functions/fnc_sit.sqf b/addons/sitting/functions/fnc_sit.sqf
index 0c6825ed58..e0692af951 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", "_sitDirectionVisual"];
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 scrollwheel 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));
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 @@
SentarSednout siSentarse
+ S'assoirLeülésСесть
@@ -16,6 +17,7 @@
LevantarVstátLevantarse
+ Se leverFelállásВстать
@@ -25,6 +27,7 @@
Aktywuj siadaniePovolit sezeníAcivar asiento
+ Permettre de s'assoirÜlés engedélyezéseРазрешить сидение
@@ -32,8 +35,9 @@
SittingSentadoSiadanie
- 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 toilettesEz 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..369593dd16 100644
--- a/addons/slideshow/functions/fnc_createSlideshow.sqf
+++ b/addons/slideshow/functions/fnc_createSlideshow.sqf
@@ -19,8 +19,7 @@
*/
#include "script_component.hpp"
-private ["_currentSlideshow", "_actionsObject", "_actionsClass", "_mainAction", "_slidesAction", "_varString"];
-
+private ["_currentSlideshow", "_slidesAction", "_varString"];
params ["_objects", "_controllers", "_images", "_names", "_duration"];
// Verify data
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..a0b5386f97 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 {};
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
+ DiaporamaPokaz slajdówVetítésApresentação de SlidesСлайд-шоу
+ PrezentaceThis 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ésTen 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
+ ObjetsObiektyObjektumokObjetosОбъекты
+ ObjektyObject 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
+ ControleursKontrolerVezérlőkControles
@@ -38,6 +45,7 @@
Controller object names, separated by commas if multiple.
+ Noms de controleur d'objets, séparation par virgule si plusieursNazwa 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
+ ImagesObrazyKépekImagensИзображения
+ ObrázkyList 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'interactionNazwy interakcjiInterakciós nevekNomes 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 imagesLista 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 diapositiveCzas trwania slajdówDia időtartamDuraçã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
+ DiapositivesSlajdyDiákSlidesСлайды
-
\ No newline at end of file
+
diff --git a/addons/spectator/stringtable.xml b/addons/spectator/stringtable.xml
index ca44a2ab27..5f594081ed 100644
--- a/addons/spectator/stringtable.xml
+++ b/addons/spectator/stringtable.xml
@@ -5,6 +5,7 @@
Spectator SettingsUstawienia obserwatoraНастройки спектатора
+ Nastavení PozorovateleConfigure how the spectator system will operate by default.
@@ -15,6 +16,7 @@
Unit filterFiltr jednostekФильтр юнитов
+ Filtr jednotekMethod of filtering spectatable units.
@@ -25,26 +27,31 @@
No unitsBrak jednostekНикто
+ Žádné jednotkyOnly playersTylko graczeТолько игроки
+ Pouze hráčiPlayable UnitsGrywalne jednostkiИграбельные юниты
+ Hratelné JednotkyAll unitsWszystkie jednostkiВсе юниты
+ Všechny jednotkySide filterFiltr stronФильтр стороны
+ Filtr stranMethod of filtering spectatable sides.
@@ -55,26 +62,31 @@
Player sideStrona graczaСторона игрока
+ Strana hráčeFriendly sidesStrony sojuszniczeДружественные стороны
+ Strana spojencůHostile sidesStrony wrogieВраждебные стороны
+ Strana nepříteleAll sidesWszystkie stronyВсе стороны
+ Všechny stranyCamera modesTryby kameryРежимы камеры
+ Módy kameryCamera modes that can be used.
@@ -85,26 +97,31 @@
AllWszystkieВсе
+ VšechnyFree onlyTylko wolnaТолько свободная
+ Pouze volnáInternal onlyTylko wewnętrznaТолько внутренняя
+ Pouze vnitřníExternal onlyTylko zewnętrznaТолько внешняя
+ Pouze vnějšíInternal and externalWewnętrzna i zewnętrznaВнутренняя и внешняя
+ Vnitřní a vnějšíVision modes
@@ -120,11 +137,13 @@
Night visionNoktowizjaНочное видение
+ NoktovizeThermal imagingTermowizjaТепловизионное
+ Termovize
@@ -141,67 +160,80 @@
FreeWolnaСвободная
+ VolnáInternalWewnętrznaВнутренняя
+ VnitřníExternalZewnętrznaВнешняя
+ VnějšíNormalNormalnaНормальное
+ NormálníNightNocНочное
+ NocThermalTermoТепловизор
+ TermálFree CameraKamera swobodnaСвободная камера
+ Volná KameraCamera ForwardKamera naprzódКамера вперед
+ Kamera VpředCamera BackwardKamera w tyłКамера назад
+ Kamera ZpětCamera LeftKamera w lewoКамера влево
+ Kamera DolevaCamera RightKamera w prawoКамера вправо
+ Kamera DopravaCamera UpKamera w góręКамера вверх
+ Kamera NahoruCamera DownKamera w dółКамера вниз
+ Kamera DolůPan Camera
@@ -217,6 +249,7 @@
Lock Camera to TargetZablokuj kamerę na celuЗафиксировать камеру на цели
+ Zamknout Kameru na CílSpeed Boost
@@ -227,26 +260,31 @@
Focus on UnitSkup na jednostceФокус на юните
+ Zaměřit se na JednotkuInterfaceInterfejsИнтерфейс
+ RozhraníToggle InterfacePrzełącz interfejsПереключить интерфейс
+ Přepnout RozhraníToggle Unit IconsPrzełącz ikony jednostekВкл./выкл. иконки юнитов
+ Přepnout Ikony JednotekToggle Unit ListPrzełącz listę jednostekВкл./выкл. список юнитов
+ Přepnout Seznam JednotekToggle Toolbar
@@ -257,16 +295,19 @@
Toggle CompassPrzełącz kompasВкл./выкл. компас
+ Přepnout KompasToggle MapPrzełącz mapęВкл./выкл. карту
+ Přepnout MapuToggle HelpPrzełącz pomocВкл./выкл. помощь
+ Přepnout NápověduCamera Attributes
@@ -277,21 +318,25 @@
Next CameraNastępna kameraСледующая камера
+ Následující KameraPrevious CameraPoprzednia kameraПредыдущая камера
+ Předchozí KameraNext UnitNastępna jednostkaСледующий юнит
+ Následující JednotkaPrevious UnitPoprzednia jednostkaПредыдущий юнит
+ Předchozí JednotkaNext Vision Mode
@@ -307,11 +352,13 @@
Adjust ZoomReguluj zoomНастроить зум
+ Regulovat PřiblíženíAdjust SpeedReguluj prędkośćНастроить скорость
+ Regulovat RychlostIncrement Zoom
@@ -327,11 +374,13 @@
Reset ZoomResetuj zoomСбросить зум
+ Obnovit PřiblíženíReset SpeedResetuj prędkośćСбросить скорость
+ Obnovit Rychlost
-
\ No newline at end of file
+
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 stranSistema 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éeEngedé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 @@
SicherheitszonenradiusOblast bezpečné zónyRaio da zona segura
+ Rayon de la zone sécuriséeBiztonságos zóna hatóköreРадиус безопасной зоны
@@ -152,6 +164,7 @@
Die Sicherheitszone um Spieler von einem anderen Team. Standard: 200Bezpečná zóna kolem hráče z jiných týmu. Výchozí: 200A 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: 200A 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 teleskopowaEscalera telescópica
- Telescopic Ladder
+ Echelle téléscopiqueTeleskopický žebříkTelescopic LadderTeleszkopikus létra
@@ -19,7 +19,7 @@
Установить лестницуRozłóż drabinęDespelgar escalera
- Deploy ladder
+ Déployer l'échelleRozložit žebříkDeploy ladderLétra lerakása
@@ -31,7 +31,7 @@
Положить лестницуZostaw drabinęSoltar escalera
- Drop ladder
+ Lacher l'échellePoložit žebříkDrop ladderLétra eldobása
@@ -44,6 +44,7 @@
Upravit žebříkAjustar escaleraAjustar escada
+ Régler l'échelleLétra állításaВыровнять лестницу
@@ -53,7 +54,7 @@
Перенести лестницуPostaw drabinęColocar escalera
- Position ladder
+ Positionner l'échelleUmístit žebříkPosition ladderLétra elhelyezése
@@ -65,11 +66,11 @@
Взять лестницуZabierz drabinęRecoger escalera
- Pickup ladder
+ Prendre l'échelleVzít žebříkPickup ladderLétra felvételePegar 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 snajperskiSSWT Kit
- SSWT Kit
+ Kit SSWTSSWT soupravaSSWT KitSSWT Készlet
@@ -19,7 +19,7 @@
Установить снайперский штативPostaw trójnóg snajperskiPlace SSWT Kit
- Place SSWT Kit
+ Placer le kit SSWTRozlož souprava SSWTPlace SSWT KitSSWT készlet elhelyezése
@@ -32,6 +32,7 @@
Zvednout SSWT soupravuSSWT-Werkzeug aufhebenPegar kit SSWT
+ Prendre le kit SSWTSSWT készlet felvételeПодобрать снайперский штатив
@@ -42,6 +43,7 @@
Regulovat SSWT soupravuSSWT-Werkzeug anpassenAjustar kit SSWT
+ Régler le kit SSWTSSWT készlet állításaВыровнять снайперский штатив
@@ -52,6 +54,7 @@
HotovoFertigFeito
+ 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 @@
FahrzeugsperreinstellungenNastavení zámku vozidlaConfiguração de fechadura do veículo
+ Paramétrage du sytème de verrouillageJármű-zár beállításЗапирание транспорта
@@ -150,6 +151,7 @@
Sperre FahrzeuginventarInventář zamčeného vozidlaBloquear inventário do veículo
+ Verrouiller l'inventaire du véhiculeJármű rakodótér zárásЗакрывать инвентарь транспорта
@@ -160,6 +162,7 @@
Sperrt das Inventar von gesperrten FahrzeugenZamknout inventář u zamčených vozidelBloqueia 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 gesperrtPočáteční stav zámku vozidlaEstado inicial da fechadura dos veículos
+ Etat du verrouillage du véhicule au démarrageJá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ändertJak jeComo está
+ Pas de changementÚgy-ahogyКак есть
@@ -200,6 +206,7 @@
GesperrtZamčenoFechado
+ VerrouilléZárvaЗакрыт
@@ -210,6 +217,7 @@
OffenOdemčenoAberto
+ DéverrouilléNyitvaОткрыт
@@ -220,6 +228,7 @@
Standard-Pick-StärkeVýchozí síla páčidlaDurabilidade padrão da chave micha
+ Force de crochetage par défautAlapé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í: 10Tempo padrão para forçar a fechadura (em segundos). Padrão: 10
+ Temps par défaut pour le crochetageAlapé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.pboNastavení síly vypáčení a počáteční stav zámku vozidla. Odstraňuje nejednoznačné stavy zámků.<br />Zdroj: vehiclelock.pboDefiniçõ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.pboBeá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üsselzuweisungPřidělení klíče k vozidluAtribuição de chave de veículo
+ Assignation des clés de véhiculeJá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.pboSynchronizuj 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.pboSincronizar 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.pboSzinkronizá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/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/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č dohlednostiSichtweitenbegrenzungLimitador de distância de visão
+ Limiteur de distance de vueLátótáv-korlátozóОграничитель дальности видимости
@@ -18,6 +19,7 @@
Umožňuje určit maximální dohlednost, kterou si může hráč nastavitErlaubt 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 choisirLehető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 dohlednostAktiviere ACE-SichtweiteHabilitar distância de visão ACE
+ Activer la distance de vue ACEACE látótávolság engedélyezéseОграничить дальность видимости
@@ -38,6 +41,7 @@
Povolit ACE dohlednostAktiviert ACE-SichtweiteHabilita a distância de visão ACE
+ Activer la distance de vue ACEEngedélyezi az ACE látótávolságotВключает ограничитель дальности видимости ACE
@@ -48,6 +52,7 @@
Limit dohlednostiSichtweitengrenzeLimite da distância de visão
+ Limite de distance de vueLá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 moduleA 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 à piedMegvá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éhiculeMegvá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érienMegvá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 ObjektsichtweiteDistâ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 vueBeállítja az objektum-látótávot a megadott látótáv koefficienseként.Устанавливает дальность отрисовки объектов как коэффициент от общей дальности видимости.
@@ -158,6 +173,7 @@
VypnoutAusDesligado
+ EteintKikapcsolvaВыкл.
@@ -168,6 +184,7 @@
Velmi máloSehr niedrigMuito baixo
+ Très basMinimálisОчень низкая
@@ -178,6 +195,7 @@
MáloNiedrigBaixo
+ BasAlacsonyНизкая
@@ -188,6 +206,7 @@
StředněMittelMédio
+ MoyenKözepesСредняя
@@ -198,6 +217,7 @@
HodněHochAlto
+ HautMagasВысокая
@@ -208,6 +228,7 @@
Velmi hodněSehr hochMuito alto
+ Très hautMaximálisОчень высокая
@@ -218,6 +239,7 @@
Dohlednost:Sichtweite:Distância de visão:
+ Distance de vueLátótávolság:Дальность видимости:
@@ -228,6 +250,7 @@
Dohlednost objektů jeObjektsichtweite istDistâ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 jeDiese Option ist ungültig! Die Grenze istEssa opção é inválida. O limte é
+ Cette option est non valide! La limite estEz a beállítás érvénytelen! A maximum mennyiségНастройка не верна! Текущий предел
@@ -248,6 +272,7 @@
Nastavení videaGrafikeinstellungenAjustes de vídeo
+ Paramètres vidéoVideobeállításokВидео настройки
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 @@
WetterPočasíClima
+ MétéoIdőjárásПогода
@@ -30,6 +31,7 @@
ACE-Wettermodul (synchron im Multiplayer)Synchronizovat ACE počasí v multiplayeruMó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 modulACE Модуль для синхронизации погоды в мультиплеере
@@ -40,6 +42,7 @@
WetterübertragungZměny počasíPropagação do clima
+ Propagation de la météoIdőjárás-változásЕдиная погода для всех
@@ -50,6 +53,7 @@
Aktiviere serverseitige WetterübertragungAktivuje změny počasí na straně serveruAtiva propagação de clima via server
+ Active la propagation météo par le serveurEngedélyezi a szerveroldali időjárás-változástВключает управление погодой на серверной стороне
@@ -60,6 +64,7 @@
ACE-WetterACE počasíClima ACE
+ ACE MétéoACE 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 synchronisierenSynchronizuj déšťSincronizar chuva
+ Synchronisation de la pluieEső szinkronizálásaСинхрониз. дождь
@@ -90,6 +97,7 @@
Synchronisiert den RegenSynchronizace deštěSincroniza a chuva
+ Synchronise la pluieSzinkronizálja az esőtСинхронизирует дождь
@@ -100,6 +108,7 @@
Wind synchronisierenSynchronizuj vítrSincronizar vento
+ Synchronisation du ventSzél szinkronizálásaСинхрониз. ветер
@@ -110,6 +119,7 @@
Synchronisiert den WindSynchronizace větruSincroniza o vento
+ Synchronise le ventSzinkronizálja a szeletСинхронизирует ветер
@@ -120,6 +130,7 @@
Sonstiges synchronisierenSynchronizuj různéSincronizar outros
+ Synchronisation autresEgyé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 brouillardSzinkronizálja a villámokat, szivárványokat, ködöt, ...Синхронизирует молнии, радугу, туман, ...
@@ -140,6 +152,7 @@
AktualisierungsintervallInterval aktualizaceIntervalo de atualização
+ Intervalle de synchronisationFrissítési intervallumИнтервал обновления
@@ -150,6 +163,7 @@
Definiert das Intervall (in Sekunden) zwischen WetteraktualisierungenUrč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 synchronisationsMegadja az intervallumot (másodpercben) az időjárás-frissítések közöttОпределяет интервал (в секундах) между обновлениями погоды
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ětruWindablenkungDesvio de vento
+ Déflexion du ventSzél-hárításОтклонение ветром
@@ -78,6 +79,7 @@
WindablenkungÚčinky větruDesvio de vento
+ Déflexion du ventSzél-hárításОтклонение ветром
@@ -88,6 +90,7 @@
Aktiviert WindablenkungUmožňit vliv větruAtiva o desvio de vento
+ Active la déflexion dûe au ventEngedélyezi a szél-hárítástВключает отклонение ветром
@@ -98,6 +101,7 @@
Fahrzeuge aktiviertVozidla povolenaAtivado em veículos
+ Activer les véhiculesJármű engedélyezveДля техники
@@ -108,6 +112,7 @@
Aktiviere Windablenkung für statische oder FahrzeugschützenUmožnit vliv větru pro střelce z vozidla/statikyAtiva 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éhiculesEngedélyezi a szél-hárítást a statikus/jármű-lövészeknélВключает отклонение ветром для стрелков стационарных орудий и техники
@@ -118,6 +123,7 @@
SimulationsintervallInterval simulaceIntervalo de simulação
+ Intervalle de simulationSzimulációs intervallumИнтервал симуляции
@@ -128,6 +134,7 @@
Definiert das Intervall zwischen jedem BerechnungsschrittUrčuje interval mezi každým výpočtemDefine o intervalo entre cada cálculo
+ Défini l'intervalle entre deux points de calculMegszabja a számítási lépések közötti intervallumotОпределяет временной интервал между расчетами
@@ -138,6 +145,7 @@
SimulationsradiusOblast simulaceRadio da Simulação
+ Rayon de simulationSzimulációs hatókörРадиус симуляции
@@ -148,6 +156,7 @@
Gibt den Radius (in Metern) um den Spieler an, in dem Projektile vom Wind beeinflusst werdenDefinuje oblast kolem hráče (v metrech) v které je projektil ovlivněn větremDefine 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 ventMeghatá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 GeschossbahnenVítr ovlivňuje trajektorii projektiluInfluência do vento na trajetória dos projéteis
+ Le vent influe sur la trajectoire des projectilesSzé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..64ef482531 100644
--- a/addons/zeus/stringtable.xml
+++ b/addons/zeus/stringtable.xml
@@ -1,4 +1,4 @@
-
+
@@ -8,6 +8,7 @@
Nastavení ZeuseZeus-EinstellungenAjustes do Zeus
+ Paramètres du ZeusZeus 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 ZeusKü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 ZeusoviAufstiegsnachrichtenMensagens de ascensão
+ Message ascensionFelemelkedé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 ZeusGlobális üzeneteket jelez ki, ha egy játékos Zeus-nak lesz beosztva.Отображает глобальное всплывающее сообщение, когда один из игроков становится Зевсом.
@@ -48,6 +52,7 @@
Orel ZeuseZeus-AdlerÁguia do Zeus
+ Aigle ZeusZeus 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 ZeusLerak egy sast, ami követi a Zeus kamerát.Спавнит орла, который следует за камерой Зевса.
@@ -68,6 +74,7 @@
Zvuky větruWindgeräuscheSons de vento
+ Bruit de ventSzé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řelectvemArtilleriewarnungAviso de explosivos
+ Alerte d'équipement militaireTü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 militaireRádiós figyelmeztetés kiadása, ha a Zeus tüzérséget használ.Проигрывает звук радио каждый раз, когда Зевс использует артиллерию.
@@ -108,6 +118,7 @@
Odhalit minyEnthülle MinenRevelar minas
+ Révéler les minesAkná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 carteFeltárja az aknákat a szövetségeseknek, és jelölőket helyez el a térképen.Показывает мины союзникам и отмечает их маркерами на карте.
@@ -128,6 +140,7 @@
Odhalit pro spojenceAn Verbündete weitergebenRevelar para aliados
+ Révéler aux alliésFeltárás a szövetségeseknekПоказывать союзникам
@@ -138,6 +151,7 @@
Spojenci + Značky na mapěVerbündete + KartenmarkierungenAliados + Marcadores no mapa
+ Alliés + marqueurs sur la carteSzövetségesek + térkép jelölőkСоюзники + Маркеры на карте
@@ -148,6 +162,7 @@
Přepnout - VězeňGefangennahme umschaltenAlternar prisioneiro
+ Basculer en captifElfogott állapot váltásaПленный (вкл./выкл.)
@@ -158,6 +173,7 @@
Přepnout - VzdáváníAufgabe umschaltenAlternar rendição
+ Basculer en capitulationKapituláló állapot váltásaСдавшийся (вкл./выкл.)
@@ -168,6 +184,7 @@
Přepnout - BezvědomíBewusstlosigkeit umschaltenAlternar inconsciência
+ Basculer en inconscientEszméletlen állapot váltásaБез сознания (вкл./выкл.)
@@ -175,16 +192,19 @@
Assign MedicPrzydziel medykaНазначить медиком
+ Přiřadit ZdravotníkaAssign Medical VehiclePrzydziel pojazd medycznyНазначить медицинским транспортом
+ Přiřadit Zdravotnické VozidloAssign Medical FacilityPrzydziel budynek medycznyНазанчить медицинским сооружением
+ Přiřadit Zdravotnické ZařízeníUnit must be alive
@@ -227,6 +247,7 @@
Jednotka nemí být vězeňEinheit darf nicht gefangen seinUnidade não pode ser prisioneira
+ L'unité ne doit pas être captiveCsak elfogatlan egységeken használniЮнит не должен быть пленным
@@ -249,6 +270,7 @@
Vyžaduje addon, který není přítomenBenötigt ein Addon, das nicht vorhanden istRequer um addon que não está presente
+ Requiert un addon qui n'est pas présentEgy jelenleg hiányzó bővítményt igényelТребуется аддон, который отсутствует
diff --git a/documentation/feature/fonts.md b/documentation/feature/fonts.md
index 198e3f8bd0..7661feeaaf 100644
--- a/documentation/feature/fonts.md
+++ b/documentation/feature/fonts.md
@@ -1,6 +1,7 @@
---
layout: wiki
title: Fonts
+description: Custom fonts including fixed-width font.
group: feature
category: general
parent: wiki
diff --git a/documentation/feature/huntIR.md b/documentation/feature/huntIR.md
index bd4841c184..be84c8b02b 100644
--- a/documentation/feature/huntIR.md
+++ b/documentation/feature/huntIR.md
@@ -1,6 +1,7 @@
---
layout: wiki
title: HuntIR
+description: High-altitude Unit Navigated Tactical Imaging Round
group: feature
category: equipment
parent: wiki
@@ -9,27 +10,27 @@ 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.
+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.
+NOTE: The HuntIR round does not 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`.
+- To be able to connect to the IR CMOS camera you will 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
+- 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
+A | Decrease zoom level
D | Increase zoom level
-N | Toggle NV and TI modes
+N | Toggle NV
S | Next camera
W | Previous camera
← | Rotate camera anticlockwise
diff --git a/documentation/feature/maptools.md b/documentation/feature/maptools.md
index 0e99b9feef..8da9e77207 100644
--- a/documentation/feature/maptools.md
+++ b/documentation/feature/maptools.md
@@ -16,23 +16,23 @@ This adds the possibility to draw accurate lines on the map screen.
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.)
+If you are equipped with a vanilla GPS it will be shown on the map. (You don't need the `Map Tools` item in your inventory for this.)
## 2. Usage
### 2.1 Using map tools
-- For this you need to have `Map Tools`.
+- To use map tools the `Map Tools` item is required.
- 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.
+- 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.
+- To draw lines the `Map Tools` item is 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)
+- 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
diff --git a/documentation/feature/medical-system.md b/documentation/feature/medical-system.md
index 4bc0ae1557..0a2cef1c8a 100644
--- a/documentation/feature/medical-system.md
+++ b/documentation/feature/medical-system.md
@@ -1,13 +1,13 @@
---
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.
+description: ACE3 provides 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.
+**Disclaimer:** With 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.
@@ -34,7 +34,7 @@ Besides the 4 elements introduced by basic medical, advanced introduces the foll
- 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
@@ -84,17 +84,17 @@ Atropine | Serves no use in basic
- **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.
@@ -102,13 +102,21 @@ Atropine | Serves no use in basic
- **Step 5**
- - If at this point the patient is still not back on its feet it's time to use an epinephrine autoinjector.
+ - 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.1.4 Revive (Basic Medical)
+For the following procedure to work revive need to be enabled.
+
+- A unit in the revive state will be unconscious and will stay unconscious until it is either woken up or the revive timer runs out.
+- A unit in the revive state can't die from any source of damage, only the timer ending can kill it.
+- To wake up a patient treat all of his wounds, make sure he isn't in pain and then use epinephrine.
+- Each successful revive removes a life from the unit, once the lives run out the next time the unit will take fatal damage it will not enter the revive state and will die.
+
### 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.
@@ -140,7 +148,7 @@ Same as with basic, when hit an injury is sustained. Different though is that th
- Sources: falling, vehicle crashes, punches.
- Effects: pain - light, bleeding - extremely slowly.
-##### 2.2.1.5 Cut wounds**
+##### 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.
@@ -216,7 +224,7 @@ Atropine | lower the heart rate of the patient
#### 2.2.2 Vitals
-##### 2.2.2.1 Blood pressure
+##### 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.
@@ -232,7 +240,7 @@ Atropine | lower the heart rate of the patient
- **Low:** 45 and below
- **Normal:** between 46 and 119
- **High:** 120 and above
-
+
##### 2.2.2.3 Cardiac arrest
@@ -256,12 +264,12 @@ This is a step by step guide, follow the steps from 1 to 6 in order unless state
- **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.
@@ -288,5 +296,76 @@ Note that keeping the patient's vitals stable is very important while treating h
- 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
+#### 2.2.5 Revive (Advanced Medical)
+For the following procedure to work revive needs to be enabled.
+
+- A unit in the revive state will be unconscious and will stay unconscious until it is either woken up or the revive timer runs out.
+- A unit in the revive state can't die from any source of damage, only the timer ending can kill it.
+- To wake up a patient the use of a PAK is required.
+- Each successful revive removes a life from the unit, once the lives run out the next time the unit will take fatal damage it will not enter the revive state and will die.
+- Each successful round of CPR (filled up completion bar) increases the time left in the revive state.
+
+## 3. Guides
+### 3.1 Example loadouts
+
+#### 3.1.1 Basic
+- Soldier:
+ - 10 × Bandage (Basic)
+ - 3 × Morphine Autoinjector
+ - 1 × Epinephrine Autoinjector
+
+- Medic:
+ - 15-25 × Bandage (Basic)
+ - 10 × Morphine Autoinjector
+ - 10 × Epinephrine Autoinjector
+ - 6 × Blood IV (500ml)
+
+#### 3.1.2 Advanced
+
+- Soldier :
+ - 3-6 × Bandage (Basic)
+ - 3-6 × Bandage (Elastic)
+ - 3-6 × Packing Bandage
+ - 3-6 × Basic Field Dressing (QuikClot)
+ - 1 × Morphine Autoinjector
+ - 1 × Epinephrine Autoinjector
+ - 1 × Tourniquet (CAT)
+ - **Optional**: 1 × Saline IV (500ml) - used only by a qualified medic
+
+
+- Combat First Responder (CFR):
+ - 10-15 × Bandage (Basic)
+ - 10-15 × Bandage (Elastic)
+ - 10-15 × Packing Bandage
+ - 10-15 × Basic Field Dressing (QuikClot)
+ - 8 × Atropine Autoinjector
+ - 5 × Morphine Autoinjector
+ - 5 × Epinephrine Autoinjector
+ - 3 × Tourniquet (CAT)
+ - 4 × Saline IV (500ml)
+
+
+- Medic:
+ - 10-15 × Bandage (Basic)
+ - 15-20 × Bandage (Elastic)
+ - 15-20 × Packing Bandage
+ - 10-15 × Basic Field Dressing (QuikClot)
+ - 12 × Atropine Autoinjector
+ - 8 × Morphine Autoinjector
+ - 8 × Epinephrine Autoinjector
+ - 5 × Tourniquet (CAT)
+ - 6 × Saline IV (500ml)
+ - 1-3 × *Surgical Kit*
+ - 1-3 × *Personal Aid Kit*
+
+
+- Paramedic:
+ - 10-15 × Bandage (Basic)
+ - 15-20 × Bandage (Elastic)
+ - 15-20 × Packing Bandage
+ - 10-15 × Basic Field Dressing (QuikClot)
+ - 5 × Tourniquet (CAT)
+ - 2 × Saline IV (500ml)
+
+## 4. Dependencies
+`ace_interaction`, `ace_modules`, `ace_apl`
diff --git a/documentation/feature/mk6mortar.md b/documentation/feature/mk6mortar.md
index 691a6bc8ef..58462f0e2f 100644
--- a/documentation/feature/mk6mortar.md
+++ b/documentation/feature/mk6mortar.md
@@ -1,7 +1,7 @@
---
layout: wiki
title: Mk6 Mortar
-description: Improve the existing mk6 mortar.
+description: Improve the existing Mk6 Mortar.
group: feature
category: equipment
parent: wiki
@@ -9,57 +9,38 @@ parent: wiki
## 1. Overview
-### 1.1 mk6 mortar overhaul
+### 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`.
+### 2.2 Opening 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.2 Getting your shells to land where you want.
+For this you need a `82mm Rangetable`, `Map Tools` and a `Vector 21` are also recommended.
-### 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.
+- Get the distance and elevation difference between you and the target (you can use map tools).
+- Select the charge you want to use (0 = close / 1 = medium / 2 = far).
+- Open the `82mm Rangetable`
+- Calculate the correct ELEV (elevation):
+ - Open the `82mm Rangetable` and click on the charge you are using.
+ - Find your range under the `RANGE` column
+ - Under the `ELEV` column find the number that matches your range, that's the base elevation you are going to work with.
+ - Under the `D ELEV for 100m DR` find the number that matches your ELEV and compensate:
+ - _Example_, if you're 200m above your target multiply the number by 2 and add it to your ELEV.
+ - If you're 200m below the target multiply the number by 2 and substract it to your ELEV.
+ - The lower the elevation the closer to you it will land.
+ - Once you finished calculating the ELEV align the barrel of the mortar with your target (directly looking at it) and set your ELEV to what you calculated by using Page Up and Page Down.
+ - Once the ELEV is correctly set and the barrel is facing the right direction, shoot and enjoy your bananas while watching hell rain on your enemies.
+
## 3. Dependencies
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/disposables-framework.md b/documentation/framework/disposables-framework.md
new file mode 100644
index 0000000000..22887ea2b0
--- /dev/null
+++ b/documentation/framework/disposables-framework.md
@@ -0,0 +1,38 @@
+---
+layout: wiki
+title: Disposables Framework
+description: Explains how to set-up custom disposable launchers with the ACE3 disposables system.
+group: framework
+order: 5
+parent: wiki
+---
+
+
+
Note:
+
This is just the necessary to make a launcher disposable, this is not a guide to make your own launcher.
+
+
+## 1. Making a launcher disposable
+
+### 1.1 CfgWeapons
+
+```c++
+class CfgWeapons {
+ class Launcher_Base_F;
+ class launch_banana: Launcher_Base_F {
+ ACE_UsedTube = "launch_banana_Used_F"; // The class name of the used tube
+ magazines[] = {"ACE_PreloadedMissileDummy"}; // The dummy magazine
+ };
+ class launch_banana_Used_F: launch_banana { // The used tube should be a sub class of the disposable launcher
+ scope = 1;
+ ACE_isUsedLauncher = 1;
+ author = "grandBanana";
+ displayName = "Used banana launcher";
+ descriptionShort = "A used banana launcher";
+ magazines[] = {"ACE_FiredMissileDummy"}; // This will disable the used launcher class from being fired again
+ //picture = ""; // Not supported yet
+ //model = ""; // Not supported yet
+ weaponPoolAvailable = 0;
+ };
+};
+```
diff --git a/documentation/framework/dragging-framework.md b/documentation/framework/dragging-framework.md
new file mode 100644
index 0000000000..14352182b7
--- /dev/null
+++ b/documentation/framework/dragging-framework.md
@@ -0,0 +1,94 @@
+---
+layout: wiki
+title: Dragging/Carrying Framework
+description: Explains how to set-up dragging and carrying of objects with the ACE3 dragging and carrying system.
+group: framework
+order: 5
+parent: wiki
+---
+
+## 1. Config Values
+
+```c++
+class CfgVehicles {
+ class MyVehicle {
+ // Dragging
+ ace_dragging_canDrag = 1; // Can be dragged (0-no, 1-yes)
+ ace_dragging_dragPosition[] = {0, 1.2, 0}; // Offset of the model from the body while dragging (same as attachTo)
+ ace_dragging_dragDirection = 0; // Model direction while dragging (same as setDir after attachTo)
+
+ // Carrying
+ ace_dragging_canCarry = 1; // Can be carried (0-no, 1-yes)
+ ace_dragging_carryPosition[] = {0, 1.2, 0}; // Offset of the model from the body while dragging (same as attachTo)
+ ace_dragging_carryDirection = 0; // Model direction while dragging (same as setDir after attachTo)
+ };
+};
+```
+
+
+## 2. Functions
+
+
+
Note:
+
The following functions are NOT public and are likely to change in the future!
+
+
+You will **not** be able to carry / drag objects that are too heavy, the mass is also affected by what is inside the object. To bypass this empty the object and/or use `setMass`.
+
+### 2.1 Enabling / disabling dragging
+
+`ace_dragging_fnc_setDraggable`
+
+ | Arguments | Type | Optional (default value)
+---| --------- | ---- | ------------------------
+0 | Any object | Object | Required
+1 | Enable dragging, true to enable, false to disable | Boolean | Required
+2 | Position to offset the object from player | Array | Optional (default: `[0, 0, 0]`)
+3 | Direction in degree to rotate the object | Number | Optional (default: `0`)
+**R** | None | None | Return value
+
+#### 2.1.1 Example 1
+
+`[foo, true, [0, 2, 0], 45] call ace_dragging_fnc_setDraggable;`
+
+ | Arguments | Explanation
+---| --------- | -----------
+0 | `foo` | My object
+1 | `true` | Dragging is enabled
+2 | `[0,2,0]` | 0 meters sideways, 2 meters forward, 0 meters upwards
+3 | `45` | Rotated by 45°
+
+#### 2.1.2 Example 2
+
+`[bar, false, [3, -2, 2], 20] call ace_dragging_fnc_setDraggable;`
+
+ | Arguments | Explanation
+---| --------- | -----------
+0 | `bar` | My object
+1 | `false` | Dragging is disabled
+2 | `[3, -2, 2]` | 3 meters sideways, 2 meters backwards, 2 meters upwards
+3 | `20` | Rotated by 20°
+
+
+### 2.2 Enabling / disabling carrying
+
+`ace_dragging_fnc_setCarryable`
+
+ | Arguments | Type | Optional (default value)
+---| --------- | ---- | ------------------------
+0 | Any object | Object | Required
+1 | Enable carrying, true to enable, false to disable | Boolean | Required
+2 | Position to offset the object from player | Array | Optional (default: `[0, 1, 1]`)
+3 | Direction in degree to rotate the object | Number | Optional (default: `0`)
+**R** | None | None | Return value
+
+#### 2.2.1 Example
+
+`[foo, true, [0, 3, 1], 10] call ace_dragging_fnc_setCarryable;`
+
+ | Arguments | Explanation
+---| --------- | -----------
+0 | `foo` | My object
+1 | `true`| Carrying is enabled
+2 | `[0,2,0]` | 0 meters sideways, 3 meters forward, 1 meter upwards
+3 | `10` | Rotated by 10°
diff --git a/documentation/framework/explosives-framework.md b/documentation/framework/explosives-framework.md
new file mode 100644
index 0000000000..abe6e016af
--- /dev/null
+++ b/documentation/framework/explosives-framework.md
@@ -0,0 +1,123 @@
+---
+layout: wiki
+title: Explosives Framework
+description: Explains how to set-up custom explosives with the ACE3 explosives system.
+group: framework
+order: 5
+parent: wiki
+---
+
+
+
Note:
+
This is just the necessary to make explosives using the framework, this is not a guide to make your own explosives.
+
+
+## 1. Explosives
+
+### 1.1 Setting the magazine
+
+```c++
+class CfgMagazines {
+ class CA_Magazine;
+ class banana_satchel_remote_mag: CA_Magazine {
+ ACE_Placeable = 1; // Can be placed
+ useAction = 0; // Disable the vanilla interaction
+ ACE_SetupObject = "banana_satchel_place"; // The object placed before the explosive is armed
+ class ACE_Triggers { // Trigger configurations
+ SupportedTriggers[] = {"Timer", "Command", "MK16_Transmitter", "DeadmanSwitch"}; // Triggers that can be used
+ class Timer {
+ FuseTime = 0.5; // Time for the fuse to burn
+ };
+ class Command {
+ FuseTime = 0.5;
+ };
+ class MK16_Transmitter: Command {};
+ class DeadmanSwitch: Command {};
+ };
+ };
+};
+```
+
+### 1.2 Setting the ammo
+
+```c++
+class CfgAmmo {
+ class PipeBombBase;
+ class SatchelCharge_Remote_Ammo: PipeBombBase {
+ soundActivation[] = {"", 0, 0, 0}; // No sound on activation
+ soundDeactivation[] = {"", 0, 0, 0}; // No sound on deactivation
+ triggerWhenDestroyed = 1; // (Optional) Explode when the object is shot and destroyed (after being placed) (0-disabled, 1-enabled).
+ ACE_explodeOnDefuse = 0.02; // (Optional) Add a chance for the explosive to detonate after being disarmed (in percent)
+ };
+};
+```
+
+### 1.3 Adding the place item
+
+```c++
+class CfgVehicles {
+ class ACE_Explosives_Place;
+ class banana_satchel_place: ACE_Explosives_Place {
+ displayName = "Banana satchel"; // Name of the item
+ model = ""; // Path to your model
+ ACE_offset[] = {0, 0, 0}; // Offset of the interaction point from the model in meters on the X,Y,Z axis.
+ };
+};
+```
+
+
+## 2. Mines
+
+### 2.1 Setting the magazine
+
+_Pretty much the same as Explosives except that we inherit from_ `ATMine_Range_Mag` _instead of_ `CA_Magazine`.
+
+```c++
+class CfgMagazines {
+ class ATMine_Range_Mag;
+ class BananaMine_Range_Mag: ATMine_Range_Mag {
+ ACE_SetupObject = "BananaMine_Place"; // The object placed before the mine is armed
+ class ACE_Triggers { // Triggers
+ SupportedTriggers[] = {"PressurePlate"}; // This mine only support pressure plate activation
+ class PressurePlate {
+ digDistance = 0.05;
+ };
+ };
+ };
+};
+```
+
+### 2.2 Setting up the Ammo
+
+The class you inherit from depends of what type of trigger you are using, for `PressurePlate` and `Tripwire` you can skip this step, for timers and clackers refer to the Explosives entry.
+
+Directional mines inherit from `DirectionalBombBase`.
+
+
+## 3. Adding your own detonators
+
+```c++
+class CfgWeapons {
+ class ACE_ItemCore; // ACE3 base item class
+ class ACE_Clacker; // Clacker base class
+ class banana_clacker: ACE_Clacker {
+ displayName = "banana clacker"; // Name of the item
+ picture = ""; // Path to the item's picture
+ ACE_Range = 9000; // Explosives activation range in meters
+ };
+};
+```
+
+
+## 4. Trigger list
+
+Name | Use
+---- | -----
+`Command` | Explode when activated via clacker.
+`MK16_Transmitter` | Explode when activated via M26 clacker.
+`DeadManSwitch` | Explode after activated via the switch or the person dies.
+`Cellphone` | Explode when the number is called.
+`PressurePlate` | Explode upon being stepped upon.
+`IRSensor` | Explode after movement is detected in front of the mine.
+`Timer` | Explode after timer drop to 0.
+`Tripwire` | Explode when something touch the tripwire.
diff --git a/documentation/framework/frag-framework.md b/documentation/framework/frag-framework.md
new file mode 100644
index 0000000000..2800d78f52
--- /dev/null
+++ b/documentation/framework/frag-framework.md
@@ -0,0 +1,119 @@
+---
+layout: wiki
+title: Fragmentation Framework
+description: Explains how to set-up fragmentation system for explosives using ACE3 fragmentation system.
+group: framework
+parent: wiki
+order: 7
+---
+
+## 1. Overview
+
+The fragmentation system 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.
+
+
+## 2. Config Values
+
+```c++
+class CfgAmmo {
+ class MyGrenade {
+ ace_frag_enabled = 1; // Enable fragmentation (0-disabled, 1-enabled)
+ ace_frag_metal = 210; // Amount of metal being fragmented (grams) - information below
+ ace_frag_charge = 185; // Amount of explosive filler (grams) - information below
+ ace_frag_gurney_c = 2843; // Gurney velocity constant for explosive type - information below
+ ace_frag_gurney_k = 3/5; // Gurney shape factor - information below
+ ace_frag_classes[] = {"ACE_frag_large"}; // Type of fragments - information below
+ ace_frag_skip = 0; // (Optional) Skip fragmentation for this ammo type (0-disabled, 1-enabled) - information below
+ ace_frag_force = 1; // (Optional) Force fragmentation system (0-disabled, 1-enabled) - information below
+ };
+};
+```
+
+### 1.1 Metal amount
+
+`ace_frag_metal`
+
+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.
+
+Dimensionless value, as long as same unit as `ace_frag_charge` (for example `kg/kg` or `g/g` or `lbs/lbs`).
+
+### 1.2 Explosives filler amount
+
+`ace_frag_charge`
+
+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).
+
+Dimensionless value, as long as same unit as `ace_frag_metal` (for example `kg/kg` or `g/g` or `lbs/lbs`).
+
+### 1.3 Gurney velocity constant
+
+`ace_frag_gurney_c`
+
+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
+
+### 1.4 Gurney shape factor
+
+`ace_frag_gurney_k`
+
+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.
+
+Shape | Factor
+-------- | ------
+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 ACE3 though due to additional variables for the equation.
+
+### 1.5 Fragments type
+
+`ace_frag_classes[]`
+
+There are different types of fragmentation fragments to choose from, and they can be defined in this config value.
+
+| Type
+| ----
+| 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.
+
+### 1.6 Ignore fragmentation
+
+`ace_frag_skip`
+
+Setting this to `1` 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.
+
+### 1.7 Force fragmentation
+
+`ace_frag_force`
+
+Settings this to `1` will force the fragmentation system to use frag on this ammo, ignoring internal qualifications based on hit values.
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/goggles-framework.md b/documentation/framework/goggles-framework.md
new file mode 100644
index 0000000000..3dea205af9
--- /dev/null
+++ b/documentation/framework/goggles-framework.md
@@ -0,0 +1,35 @@
+---
+layout: wiki
+title: Goggles Framework
+description: Explains how to set-up goggles with ACE3 goggles system.
+group: framework
+order: 5
+parent: wiki
+---
+
+## 1. Config Values
+
+```c++
+class CfgGlasses {
+ class MyGoggles {
+ ace_color[] = {0, 0, -1}; // Post-proccess color
+ ace_tintAmount = 8; // Amount of tint applied to the color
+ ace_resistance = 1; // Resistance to breaking (0 or 1 or 2)
+ ace_protection = 0; // Provides protection (0-no, 1-yes)
+ ace_overlay = ""; // (Optional) Default overlay image path ("" for none)
+ ace_overlayDirt = "A3\Ui_f\data\igui\rsctitles\HealthTextures\dust_upper_ca.paa"; // (Optional) Dirt overlay image path
+ ace_overlayCracked = "mod\textures\HUD\Cracked.paa"; // (Optional) Cracked overlay image path
+ ace_dustPath = "mod\textures\fx\dust\dust1.paa"; // (Optional) Dust overlay image path
+ };
+};
+```
+
+
+## 2. Events
+
+### 2.1 Listenable
+
+Event Name | Description | Passed Parameter(s) | Locality
+---------- | ----------- | ------------------- | --------
+`"GlassesChanged"` | Glasses Changed | `[_glassesClass]` | Local
+`"GlassesCracked"` | Glasses Cracked | `[_unit]` | Local
diff --git a/documentation/framework/hearing-framework.md b/documentation/framework/hearing-framework.md
new file mode 100644
index 0000000000..6d83665916
--- /dev/null
+++ b/documentation/framework/hearing-framework.md
@@ -0,0 +1,21 @@
+---
+layout: wiki
+title: Hearing Framework
+description: Explains how to set-up headgear with ACE3 hearing system.
+group: framework
+order: 5
+parent: wiki
+---
+
+## 1. Config Values
+
+```c++
+class CfgWeapons {
+ class MyHelmet {
+ ace_hearing_protection = 0.80; // Protection against deafening (0 to 1, higher means more protection)
+ ace_hearing_lowerVolume = 0.60; // Muffling of the sound (0 to 1, higher means more muffling)
+ };
+};
+```
+
+The protection/muffling is a multiplier and not an absolute value, you can still be deafened/muffled with a value of 1.
diff --git a/documentation/framework/huntIR-framework.md b/documentation/framework/huntIR-framework.md
new file mode 100644
index 0000000000..542515d6cb
--- /dev/null
+++ b/documentation/framework/huntIR-framework.md
@@ -0,0 +1,27 @@
+---
+layout: wiki
+title: HuntIR Framework
+description: Explains how to add HuntIR support to a weapon.
+group: framework
+order: 5
+parent: wiki
+---
+
+## 1. Config Values
+
+```c++
+class CfgWeapons {
+ class MyRifle {
+ class MyGL: UGL_F {
+ magazines[] = {
+ // All default UGL magazines
+ "MyFirstMag",
+ "MySecondMag",
+ "MyLastMag",
+ // HuntIR magazine
+ "ACE_HuntIR_M203"
+ };
+ };
+ };
+};
+```
diff --git a/documentation/framework/javelin-framework.md b/documentation/framework/javelin-framework.md
new file mode 100644
index 0000000000..dd384fd282
--- /dev/null
+++ b/documentation/framework/javelin-framework.md
@@ -0,0 +1,23 @@
+---
+layout: wiki
+title: Javelin Framework
+description: Explains how to set-up Javelin-style locking system to a launcher.
+group: framework
+order: 5
+parent: wiki
+---
+
+## 1. Config Values
+
+```c++
+class CfgWeapons {
+ class MyLauncher {
+ ace_javelin_enabled = 1; // Enable Javelin-style locking (0-disabled, 1-enabled)
+ weaponInfoType = "ACE_RscOptics_javelin"; // Inteface
+ modelOptics = "\z\ace\addons\javelin\data\reticle_titan.p3d"; // Optics model
+ canLock = 0; // Disable vanilla locking (0-disabled, 1-enabled)
+ lockingTargetSound[] = {"", 0, 1}; // Locking sound
+ lockedTargetSound[] = {"", 0, 1}; // Target acquired sound
+ };
+};
+```
diff --git a/documentation/framework/missile-guidance-framework.md b/documentation/framework/missile-guidance-framework.md
new file mode 100644
index 0000000000..f09a5c0bc3
--- /dev/null
+++ b/documentation/framework/missile-guidance-framework.md
@@ -0,0 +1,117 @@
+---
+layout: wiki
+title: Advanced Missile Guidance Framework
+description: The ACE3 Advanced Missile Guidance Framework provides a setup of configuration settings, functions and a execution framework for mod 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 an execution framework for mod makers to integrate with the missile guidance and targeting mechanisms of ACE3. It also provides the 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 mods is the appropriate `CfgAmmo` entries for the missile.
+
+The framework also provides mod 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 mod 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 ...) as well as the different common attack profiles utilized with guided munitions (such as top-down attack).
+
+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 available with other missile types.
+
+
+## 2. Components
+
+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 Locking Types
+Locking types provide the basic functionality of targeting which will be based to a seeker type, providing target acquisition for seekers. This provides the basic functionality for providing pre-determined targets for a seeker, or allowing the seeker to perform its own target acquisition and locking. Additionally, the seeker may reference back into the locking type in order to re-perform target acquisition.
+
+#### 2.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.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, which 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 on top of the target - thus "walking the missile" along its flight path and to the impact.
+
+
+## 4. Config Values
+
+### 4.1 Enabling guidance on Ammo Types
+
+```c++
+class CfgAmmo {
+ class MyMissile {
+ manualControl = 0; // Turn off vanilla crosshair guidance
+
+ // Begin ACE guidance Configs
+ class ace_missileguidance {
+ enabled = 1; // Enable missile guidance (0-disabled, 1-enabled)
+
+ minDeflection = 0.00025; // Minimum flap deflection for guidance
+ maxDeflection = 0.001; // Maximum flap deflection for guidance
+ incDeflection = 0.0005; // The increment in which deflection adjusts
+
+ canVanillaLock = 0; // Enable vanilla lock, only applicable to non-cadet modes, 'recruit' always uses vanilla locking (0-disabled, 1-enabled)
+
+ defaultSeekerType = "SALH"; // Default seeker type
+ seekerTypes[] = {"SALH", "LIDAR", "SARH", "Optic", "Thermal", "GPS", "SACLOS", "MCLOS"}; // Seeker types available
+
+ defaultSeekerLockMode = "LOAL"; // Default seeker lock mode
+ seekerLockModes[] = {"LOAL", "LOBL"}; // Seeker lock modes available
+
+ seekerAngle = 90; // Angle in front of the missile which can be searched
+ seekerAccuracy = 1; // Seeker accuracy multiplier
+
+ seekerMinRange = 1; // Minimum range from the missile which the seeker can visually search
+ seekerMaxRange = 2500; // Maximum from the missile which the seeker can visually search
+
+ defaultAttackProfile = "LIN"; // Default attack profile
+ attackProfiles[] = {"LIN", "DIR", "MID", "HI"}; // Attack profiles available
+ };
+```
+
+### 4.2 Custom Seeker Types
+
+```c++
+class ace_missileguidance_attackProfiles {
+ class MyAttackProfile {
+ name = ""; // Name
+ visualName = ""; // Visual name
+ description = ""; // Description
+
+ functionName = "my_fnc_doSeekerType"; // Function that handles the seeker type
+ };
+};
+```
+
+### 4.3 Custom Attack Profiles
+
+```c++
+class ace_missileguidance_seekerTypes {
+ class MySeekerType {
+ name = ""; // Name
+ visualName = ""; // Visual name
+ description = ""; // Description
+
+ functionName = "my_fnc_doAttackProfile"; // Function that handles the attack profile
+ };
+};
+```
+
+## 5. Events
+
+### 5.1 Listenable
+
+Event Name | Description | Passed Parameter(s) | Locality
+---------- | ----------- | ------------------- | --------
+`"ace_missileguidance_handoff"` | Missile handed off | `[_target, _args]` | Global
diff --git a/documentation/framework/nightvision-framework.md b/documentation/framework/nightvision-framework.md
new file mode 100644
index 0000000000..73d78a222a
--- /dev/null
+++ b/documentation/framework/nightvision-framework.md
@@ -0,0 +1,21 @@
+---
+layout: wiki
+title: Night Vision Framework
+description: Explains how to set-up night vision goggles with ACE3 night vision system.
+group: framework
+order: 5
+parent: wiki
+---
+
+## 1. Config Values
+
+```c++
+class CfgWeapons {
+ class MyNightVision {
+ displayName = "Banana NVGs"; // Name displayed in the inventory
+ ace_nightVision_grain = 0.75; // Amount of grain (dots) on the screen (more means more grain) - can be higher than 1
+ ace_nightVision_blur = 0.055; // Blur amount (more means more blur) - keep low values!
+ ace_nightVision_radBlur = 0.001; // Radial blur amount (more means more blur) - keep low values!
+ };
+};
+```
diff --git a/documentation/framework/overheating-framework.md b/documentation/framework/overheating-framework.md
new file mode 100644
index 0000000000..21cca53516
--- /dev/null
+++ b/documentation/framework/overheating-framework.md
@@ -0,0 +1,78 @@
+---
+layout: wiki
+title: Overheating Framework
+description: Explains how to set-up weapon overheating with ACE3 overheating system.
+group: framework
+order: 5
+parent: wiki
+---
+
+## 1. Config Values
+
+### 1.1 Barrel Switching
+
+```c++
+class CfgWeapons {
+ class MyMG {
+ ace_overheating_allowSwapBarrel = 1; // Enable barrel swap (0-disabled, 1-enabled) - information below
+ ace_overheating_dispersion[] = {0, -0.001, 0.001, 0.004}; // Bullet dispersion (in radians) - information below
+ ace_overheating_slowdownFactor[] = {1, 1, 1, 0.9}; // Slowdown factor inside the barrel - information below
+ ace_overheating_jamChance[] = {0, 0.0003, 0.0015, 0.0075}; // Jam chance - information below
+ };
+};
+```
+
+#### 1.1.1 Temperatures
+
+`ace_overheating_dispersion[]`
+`ace_overheating_slowdownFactor[]`
+`ace_overheating_jamChance[]`
+
+Above arrays have 4 values for different temperatures, which are interpolated between. These values correspond to temperatures converted to real life values from.
+
+Config | Real Life
+------ | ---------
+0 | 0°C
+1 | 333°C
+2 | 666°C
+3 | 1000°C
+
+### 1.1.2 Barrel Swapping
+
+`ace_overheating_allowSwapBarrel`
+
+Meant for machine guns where you can easily swap the barrel without dismantling the whole weapon.
+
+### 1.1.3 Dispersion
+
+`ace_overheating_dispersion[]`
+
+Dispersion in radians. First value is for temperature 0, second for temperature 1 and so on. Values in-between get interpolated. Negative values are ignored and can be used to move the starting point to hotter temperatures.
+
+### 1.1.4 Slowdown Factor
+
+`ace_overheating_slowdownFactor[]`
+
+How much the projectile gets slowed down before leaving the barrel. `0.9` means the bullet will lose 10% velocity. Values in-between get interpolated. Numbers greater than `1` increase the velocity, smaller decrease it.
+
+### 1.1.5 Jam Chance
+
+`ace_overheating_jamChance[]`
+
+Chance to jam the weapon. `0.0003` means 3 malfunctions on 10,000 rounds fired at this temperature. Values in-between get interpolated. Negative values are ignored and can be used to move the starting point to hotter temperatures.
+
+When no reliable data exists for temperature versus jam chance except MRBS, the following uniform criteria was adopted.
+`[0, 1/MRBS, 5/MRBS, 25/MRBS]`
+
+
+### 1.2 Custom Animations
+
+```c++
+class CfgWeapons {
+ class MyMG {
+ ace_clearJamAction = "GestureReload"; // Custom jam clearing action, default uses reload animation
+ ace_checkTemperatureAction = "Gear"; // Custom check temperature action, default uses gear animation
+ ace_clearJamAction = ""; // Custom jam clearing action, use empty string to undefine
+ };
+};
+```
diff --git a/documentation/framework/overpressure-framework.md b/documentation/framework/overpressure-framework.md
new file mode 100644
index 0000000000..229200cb46
--- /dev/null
+++ b/documentation/framework/overpressure-framework.md
@@ -0,0 +1,45 @@
+---
+layout: wiki
+title: Overpressure Framework
+description: Explains how to set-up launchers and cannons with backblast and overpressure areas with the ACE3 overpressure system.
+group: framework
+order: 5
+parent: wiki
+---
+
+## 1. Config Values
+
+### 1.1 Launchers
+
+```c++
+class CfgWeapons {
+ class MyLauncher {
+ ace_overpressure_angle = 60; // Cone in which the damage is applied (in degrees from the back end of the launcher)
+ ace_overpressure_range = 15; // Range in meters in which the damage is applied
+ ace_overpressure_damage = 0.7; // Damage multiplier
+ };
+};
+```
+
+### 1.2 Cannons
+
+```c++
+class CfgWeapons {
+ class MyBananaCannon {
+ ace_overpressure_angle = 90; // Cone in which the damage is applied (in degrees from the muzzle of the cannon)
+ ace_overpressure_range = 50; // Range in meters in which the damage is applied
+ ace_overpressure_damage = 0.85; // Damage multiplier
+ };
+};
+```
+
+- You can note that the angle range and damage values are higher, that's because this is a cannon and the backblast area is bigger.
+
+
+## 2. Events
+
+### 2.1 Listenable
+
+Event Name | Description | Passed Parameter(s) | Locality
+---------- | ----------- | ------------------- | --------
+`"overpressure"` | Overpressure damage inflicted | `[_firer, _position, _direction, _weapon]` | Target
diff --git a/documentation/framework/parachute-framework.md b/documentation/framework/parachute-framework.md
new file mode 100644
index 0000000000..2548a3ab4d
--- /dev/null
+++ b/documentation/framework/parachute-framework.md
@@ -0,0 +1,19 @@
+---
+layout: wiki
+title: Parachute Framework
+description: Explains how to set-up a parachute with ACE3 parachute system.
+group: framework
+order: 5
+parent: wiki
+---
+
+## 1. Adding reserve parachute to existing parachute
+
+```c++
+class CfgVehicles {
+ class BananaParachute {
+ ace_hasReserveParachute = 1; // Add reserve parachute (1-enabled, 0-disabled)
+ ace_reserveParachute = "ACE_ReserveParachute"; // Classname of the reserve parachute
+ };
+};
+```
diff --git a/documentation/framework/reloadlaunchers-framework.md b/documentation/framework/reloadlaunchers-framework.md
new file mode 100644
index 0000000000..d58c91666a
--- /dev/null
+++ b/documentation/framework/reloadlaunchers-framework.md
@@ -0,0 +1,26 @@
+---
+layout: wiki
+title: Reload Launchers Framework
+description: Explains how to set-up launchers with ACE3 reload launchers system.
+group: framework
+order: 5
+parent: wiki
+---
+
+## 1. Adding third party reload
+
+```c++
+class CfgWeapons {
+ class MyLauncher {
+ ace_reloadlaunchers_enabled = 1; // Allow your buddies to reload your launcher (0-disabled, 1-enabled)
+ };
+};
+```
+
+## 2. Events
+
+### 2.1 Listenable
+
+Event Name | Description | Passed Parameter(s) | Locality
+---------- | ----------- | ------------------- | --------
+`"reloadLauncher"` | Launcher reloaded | `[_unit, _target, _weapon, _magazine]` | Target
diff --git a/documentation/framework/scopes-framework.md b/documentation/framework/scopes-framework.md
new file mode 100644
index 0000000000..fc318a13f6
--- /dev/null
+++ b/documentation/framework/scopes-framework.md
@@ -0,0 +1,31 @@
+---
+layout: wiki
+title: Scopes Framework
+description: Explains how to set-up scopes with ACE3 scope adjustment system.
+group: framework
+order: 5
+parent: wiki
+---
+
+## 1. Adding scope adjustment support
+
+```c++
+class CfgWeapons {
+ class InventoryOpticsItem_Base_F; // ItemInfo base class
+
+ class YourScope {
+ ace_scopeAdjust_vertical[] = {-4, 30}; // Maxmimum vertical adjustment limits
+ ace_scopeAdjust_horizontal[] = {-6, 6}; // Maximum horizontal adjustment limits
+ ace_scopeAdjust_verticalIncrement = 0.1; // Vertical increment
+ ace_scopeAdjust_horizontalIncrement = 0.1; // Horizontal increment
+ class ItemInfo: InventoryOpticsItem_Base_F {
+ class OpticsModes {
+ class Snip {
+ discreteDistance[] = {100};
+ discreteDistanceInitIndex = 0;
+ };
+ };
+ };
+ };
+};
+```
diff --git a/documentation/framework/settings-framework.md b/documentation/framework/settings-framework.md
new file mode 100644
index 0000000000..b809e19a61
--- /dev/null
+++ b/documentation/framework/settings-framework.md
@@ -0,0 +1,105 @@
+---
+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_Settings {
+ class ACE_module_sampleSetting {
+ // Following 2 entries are redundant if isClientSettable = 0
+ displayName = "$STR_ACE_Common_SettingName"; // Stringtable entry with the setting name
+ description = "$STR_ACE_Common_SettingDescription"; // Stringtable entry with the setting description
+
+ isClientSettable = 1; // Show in client options menu (0-no, 1-yes)
+ typeName = "SCALAR"; // Type (BOOL/SCALAR/STRING/ARRAY/COLOR)
+ value = 1; // Value
+
+ // Following entry is redundant if typeName is NOT "SCALAR"
+ values[] = {"Disabled", "Enabled", "Only Cursor", "Only On Keypress", "Only Cursor and KeyPress"}; // (Optional) Stringtable entries that describe the options
+
+ // Following entry is present only in export
+ force = 0; // Force the setting (0-no, 1-yes), exported settings are forced by default
+ };
+};
+```
+
+Settings are defined from the mod's config but can be adjusted through the following methods:
+
+- Optional config entries
+- Mission modules
+
+
+## 2. Load order
+
+The load order for the settings are:
+
+1. Mod Config
+2. Server Config
+3. Mission Config
+4. Placed 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 where ACE3 settings are placed. There is no need for a sub-class.
+
+### 3.1 Exporting 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, `Allow Config Export [ACE]`.
+- Place down the module, ensure that the `Allow` parameter is set to `Yes`.
+- Press preview, once in the 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.1.1 Notes
+
+- If a setting is forced it cannot be changed further down the line, see `2. Load order` for the hierarchy.
+- Client settings can be forced, include while exporting (the button is next to export on the UI)
+- You can use `ACE_common_forceAllSettings` to force settings in a mission, it will lock **all** the settings (which are not already forced) to the values they are set in either modules or server config
+
+Example of `ACE_common_forceAllSettings`:
+```c++
+class ACE_Settings {
+ class ACE_common_forceAllSettings {
+ value = 1;
+ typeName = "BOOL";
+ };
+};
+```
+
+
+### 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/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/user/how-to-report-an-issue.md b/documentation/user/how-to-report-an-issue.md
index 96f2dd76c3..2c6b4c02ad 100644
--- a/documentation/user/how-to-report-an-issue.md
+++ b/documentation/user/how-to-report-an-issue.md
@@ -1,7 +1,7 @@
---
layout: wiki
title: How to report an issue
-description: If you've found an issue with ACE3 please read this entry before reporting it.
+description: If you have found an issue with ACE3 please read this entry before reporting it.
group: user
order: 10
parent: wiki
@@ -9,13 +9,13 @@ 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.
+If you have 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 `@ace` 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.
+
It's not a valid to simply remove @ace 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.
@@ -28,23 +28,23 @@ ACE3 Version: 3.x.x
(indicate if stable or dev, if dev indicate the commit the version is based on)
**Mods:**
-* @cba_a3
-* @ace3
+* `@CBA_A3`
+* `@ace`
**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.*
+* 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"*
+* A possible answer might be "Multiplayer", "Editor" or "Singleplayer"*
**RPT log file:**
-*Add a link (pastebin.com) to the client or server RPT 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.
diff --git a/documentation/user/information-center.md b/documentation/user/information-center.md
index b1a1e8e9f0..2299ab0df8 100644
--- a/documentation/user/information-center.md
+++ b/documentation/user/information-center.md
@@ -20,7 +20,7 @@ Downloaded ACE3 and have no idea where to start? This page serves as a starting
## 1. FAQ
-### 1.1 Features
+### 1.1 Features
**Q:** Where is X feature?
**A:** When it's done.
@@ -38,16 +38,17 @@ Downloaded ACE3 and have no idea where to start? This page serves as a starting
**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 am having dll errors.
+**A:** Start the game once with the Arma 3 Launcher, close it, then start the game with your usual launcher (ArmA3Sync, Play withSix, etc …).
+The simple explanation is that the BattlEye process wasn't ended properly and is unable to start again properly, launching it with the Arma 3 Launcher is the only known solution to fix it.
-**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).
+**Q:** ACE3 fonts is outdated.
+**A:** This happens because you have file patching enabled, restart your game without the `-FilePatching` param.
### 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:** (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 PBO's 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
+**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 `@ace` 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.
diff --git a/mod.cpp b/mod.cpp
index 0f16ca182a..20d9f44d59 100644
--- a/mod.cpp
+++ b/mod.cpp
@@ -1,8 +1,8 @@
-name = "Advanced Combat Environment 3.2.1";
+name = "Advanced Combat Environment 3.3.0";
picture = "logo_ace3_ca.paa";
actionName = "GitHub";
action = "https://github.com/acemod/ACE3";
-description = "ACE3 - Version 3.2.1";
+description = "ACE3 - Version 3.3.0";
logo = "logo_ace3_ca.paa";
logoOver = "logo_ace3_ca.paa";
tooltip = "ACE3";