Merge branch 'release' into russian

This commit is contained in:
KoffeinFlummi 2015-09-10 21:05:32 +02:00
commit c2ffe7cad0
260 changed files with 3620 additions and 2483 deletions

View File

@ -3,9 +3,9 @@
</p> </p>
<p align="center"> <p align="center">
<a href="https://github.com/acemod/ACE3/releases"> <a href="https://github.com/acemod/ACE3/releases">
<img src="https://img.shields.io/badge/Version-3.2.1-blue.svg" alt="ACE3 Version"> <img src="https://img.shields.io/badge/Version-3.3.0-blue.svg" alt="ACE3 Version">
</a> </a>
<a href="https://github.com/acemod/ACE3/releases/download/v3.2.1/ace3_3.2.1.zip"> <a href="https://github.com/acemod/ACE3/releases/download/v3.3.0/ace3_3.3.0.zip">
<img src="http://img.shields.io/badge/Download-56.5_MB-green.svg" alt="ACE3 Download"> <img src="http://img.shields.io/badge/Download-56.5_MB-green.svg" alt="ACE3 Download">
</a> </a>
<a href="https://github.com/acemod/ACE3/issues"> <a href="https://github.com/acemod/ACE3/issues">
@ -17,6 +17,9 @@
<a href="https://github.com/acemod/ACE3/blob/master/LICENSE"> <a href="https://github.com/acemod/ACE3/blob/master/LICENSE">
<img src="http://img.shields.io/badge/License-GPLv2-red.svg" alt="ACE3 License"> <img src="http://img.shields.io/badge/License-GPLv2-red.svg" alt="ACE3 License">
</a> </a>
<a href="http://slackin.koffeinflummi.de">
<img src="http://slackin.koffeinflummi.de/badge.svg" alt="ACE3 Slack">
</a>
</p> </p>
<p align="center"><sup><strong>Requires the latest version of <a href="https://github.com/CBATeam/CBA_A3/releases">CBA A3</a>. Visit us on <a href="https://www.facebook.com/ACE3Mod">Facebook</a> | <a href="https://www.youtube.com/c/ACE3Mod">YouTube</a> | <a href="https://twitter.com/ACE3Mod">Twitter</a> | <a href="http://www.reddit.com/r/arma/search?q=ACE&restrict_sr=on&sort=new&t=all">Reddit</a></strong></sup></p> <p align="center"><sup><strong>Requires the latest version of <a href="https://github.com/CBATeam/CBA_A3/releases">CBA A3</a>. Visit us on <a href="https://www.facebook.com/ACE3Mod">Facebook</a> | <a href="https://www.youtube.com/c/ACE3Mod">YouTube</a> | <a href="https://twitter.com/ACE3Mod">Twitter</a> | <a href="http://www.reddit.com/r/arma/search?q=ACE&restrict_sr=on&sort=new&t=all">Reddit</a></strong></sup></p>

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project name="ACE"> <Project name="ACE">
<Package name="Advanced_Ballistics"> <Package name="Advanced_Ballistics">
<Key ID="STR_ACE_Advanced_Ballistics_WindInfoKey"> <Key ID="STR_ACE_Advanced_Ballistics_WindInfoKey">
@ -32,6 +32,7 @@
<German>Erweiterte Ballistik</German> <German>Erweiterte Ballistik</German>
<Czech>Pokročilá balistika</Czech> <Czech>Pokročilá balistika</Czech>
<Portuguese>Balística avançada</Portuguese> <Portuguese>Balística avançada</Portuguese>
<French>Balistique avancée</French>
<Hungarian>Fejlett ballisztika</Hungarian> <Hungarian>Fejlett ballisztika</Hungarian>
<Russian>Продвинутая баллистика</Russian> <Russian>Продвинутая баллистика</Russian>
</Key> </Key>
@ -42,6 +43,7 @@
<German>Erweiterte Ballistik</German> <German>Erweiterte Ballistik</German>
<Czech>Pokročilá balistika</Czech> <Czech>Pokročilá balistika</Czech>
<Portuguese>Balística avançada</Portuguese> <Portuguese>Balística avançada</Portuguese>
<French>Balistique avancée</French>
<Hungarian>Fejlett ballisztika</Hungarian> <Hungarian>Fejlett ballisztika</Hungarian>
<Russian>Продвинутая баллистика</Russian> <Russian>Продвинутая баллистика</Russian>
</Key> </Key>
@ -52,6 +54,7 @@
<German>Aktiviert die erweiterte Ballistik</German> <German>Aktiviert die erweiterte Ballistik</German>
<Czech>Aktivuje pokročilou balistiku</Czech> <Czech>Aktivuje pokročilou balistiku</Czech>
<Portuguese>Ativa balística avançada</Portuguese> <Portuguese>Ativa balística avançada</Portuguese>
<French>Activer la balistique avancée</French>
<Hungarian>Engedélyezi a fejlett ballisztikát</Hungarian> <Hungarian>Engedélyezi a fejlett ballisztikát</Hungarian>
<Russian>Включает продвинутую баллистику</Russian> <Russian>Включает продвинутую баллистику</Russian>
</Key> </Key>
@ -62,6 +65,7 @@
<German>Für Scharfschützen aktiviert</German> <German>Für Scharfschützen aktiviert</German>
<Czech>Povoleno pro odstřelovače</Czech> <Czech>Povoleno pro odstřelovače</Czech>
<Portuguese>Ativar para caçadores</Portuguese> <Portuguese>Ativar para caçadores</Portuguese>
<French>Activer pour les snipers</French>
<Hungarian>Mesterlövészeknek engedélyezve</Hungarian> <Hungarian>Mesterlövészeknek engedélyezve</Hungarian>
<Russian>Включена для снайперов</Russian> <Russian>Включена для снайперов</Russian>
</Key> </Key>
@ -72,6 +76,7 @@
<German>Aktiviert die erweiterte Ballistik für nicht lokale Scharfschützen (bei Benutzung von Optiken mit starker Vergrößerung)</German> <German>Aktiviert die erweiterte Ballistik für nicht lokale Scharfschützen (bei Benutzung von Optiken mit starker Vergrößerung)</German>
<Czech>Aktivuje pokročilou balistiku pro nelokální odstřelovače (když používá výkonnou optiku)</Czech> <Czech>Aktivuje pokročilou balistiku pro nelokální odstřelovače (když používá výkonnou optiku)</Czech>
<Portuguese>Ativa balística avançada para caçadores não locais (quando usando miras telescópicas)</Portuguese> <Portuguese>Ativa balística avançada para caçadores não locais (quando usando miras telescópicas)</Portuguese>
<French>Active la balistique avancée pour les snipers non locaux (en utilisant les optiques avancées)</French>
<Hungarian>Engedélyezi a fejlett ballisztikát nem-helyi mesterlövészeknek (nagy-teljesítményű optika használatakor)</Hungarian> <Hungarian>Engedélyezi a fejlett ballisztikát nem-helyi mesterlövészeknek (nagy-teljesítményű optika használatakor)</Hungarian>
<Russian>Включает продвинутую баллистику для нелокальных снайперов (при использовании мощной оптики)</Russian> <Russian>Включает продвинутую баллистику для нелокальных снайперов (при использовании мощной оптики)</Russian>
</Key> </Key>
@ -82,6 +87,7 @@
<German>Für Gruppenmitglieder aktiviert</German> <German>Für Gruppenmitglieder aktiviert</German>
<Czech>Povoleno pro členy skupiny</Czech> <Czech>Povoleno pro členy skupiny</Czech>
<Portuguese>Ativada para membros do grupo</Portuguese> <Portuguese>Ativada para membros do grupo</Portuguese>
<French>Activer pour les membres groupés</French>
<Hungarian>Csoporttagoknak engedélyezve</Hungarian> <Hungarian>Csoporttagoknak engedélyezve</Hungarian>
<Russian>Включена для группы</Russian> <Russian>Включена для группы</Russian>
</Key> </Key>
@ -92,6 +98,7 @@
<German>Aktiviert die erweiterte Ballistik für nicht lokale Gruppenmitglieder</German> <German>Aktiviert die erweiterte Ballistik für nicht lokale Gruppenmitglieder</German>
<Czech>Aktivuje pokročilou balistiku pro nelokální členy skupiny</Czech> <Czech>Aktivuje pokročilou balistiku pro nelokální členy skupiny</Czech>
<Portuguese>Ativa balística avançada para membros de grupo não locais</Portuguese> <Portuguese>Ativa balística avançada para membros de grupo não locais</Portuguese>
<French>Active la balistique avancée pour les membres groupés non locaux</French>
<Hungarian>Engedélyezi a fejlett ballisztikát nem-helyi csoporttagoknak</Hungarian> <Hungarian>Engedélyezi a fejlett ballisztikát nem-helyi csoporttagoknak</Hungarian>
<Russian>Включает продвинутую баллистику для нелокальных членов группы</Russian> <Russian>Включает продвинутую баллистику для нелокальных членов группы</Russian>
</Key> </Key>
@ -102,6 +109,7 @@
<German>Für jeden aktiviert</German> <German>Für jeden aktiviert</German>
<Czech>Povoleno pro všechny</Czech> <Czech>Povoleno pro všechny</Czech>
<Portuguese>Ativada para todos</Portuguese> <Portuguese>Ativada para todos</Portuguese>
<French>Activer pour tout le monde</French>
<Hungarian>Mindenkinek engedélyezve</Hungarian> <Hungarian>Mindenkinek engedélyezve</Hungarian>
<Russian>Включена для всех</Russian> <Russian>Включена для всех</Russian>
</Key> </Key>
@ -112,6 +120,7 @@
<German>Aktiviert die erweiterte Ballistik für alle nicht lokalen Spieler (das Aktivieren dieser Funktion kann zur Beeinträchtigung des Spielerlebnisses im Multiplayer führen)</German> <German>Aktiviert die erweiterte Ballistik für alle nicht lokalen Spieler (das Aktivieren dieser Funktion kann zur Beeinträchtigung des Spielerlebnisses im Multiplayer führen)</German>
<Czech>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)</Czech> <Czech>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)</Czech>
<Portuguese>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)</Portuguese> <Portuguese>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)</Portuguese>
<French>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)</French>
<Hungarian>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)</Hungarian> <Hungarian>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)</Hungarian>
<Russian>Включает продвинутую баллистику для всех нелокальных игроков (включение этой опции может снизить производительность при массовых перестрелках в мультиплеере)</Russian> <Russian>Включает продвинутую баллистику для всех нелокальных игроков (включение этой опции может снизить производительность при массовых перестрелках в мультиплеере)</Russian>
</Key> </Key>
@ -122,6 +131,7 @@
<German>Für Gruppenmitglieder immer aktiviert</German> <German>Für Gruppenmitglieder immer aktiviert</German>
<Czech>Vždy povoleno pro členy skupiny</Czech> <Czech>Vždy povoleno pro členy skupiny</Czech>
<Portuguese>Sempre ativada para membros do grupo</Portuguese> <Portuguese>Sempre ativada para membros do grupo</Portuguese>
<French>Toujours activer pour les membres groupés</French>
<Hungarian>Mindig engedélyezve csoporttagoknak</Hungarian> <Hungarian>Mindig engedélyezve csoporttagoknak</Hungarian>
<Russian>Всегда включена для членов группы</Russian> <Russian>Всегда включена для членов группы</Russian>
</Key> </Key>
@ -132,6 +142,7 @@
<German>Aktiviert die erweiterte Ballistik immer, wenn ein Gruppenmitglied schießt</German> <German>Aktiviert die erweiterte Ballistik immer, wenn ein Gruppenmitglied schießt</German>
<Czech>Aktivuje pokročilou balistiku pro členy skupiny</Czech> <Czech>Aktivuje pokročilou balistiku pro členy skupiny</Czech>
<Portuguese>Sempre ative balística avançada quando um membro do grupo disparar</Portuguese> <Portuguese>Sempre ative balística avançada quando um membro do grupo disparar</Portuguese>
<French>Active tout le temps la balistique avancée quand un membre du groupe ouvre le feu</French>
<Hungarian>Mindig engedélyezi a fejlett ballisztikát, ha egy csoporttag tüzel</Hungarian> <Hungarian>Mindig engedélyezi a fejlett ballisztikát, ha egy csoporttag tüzel</Hungarian>
<Russian>Всегда включает продвинутую баллистику когда стреляет член группы</Russian> <Russian>Всегда включает продвинутую баллистику когда стреляет член группы</Russian>
</Key> </Key>
@ -142,6 +153,7 @@
<German>Beim vollautomatischen Feuern deaktiviert</German> <German>Beim vollautomatischen Feuern deaktiviert</German>
<Czech>Zakázáno v automatickém režimu střelby</Czech> <Czech>Zakázáno v automatickém režimu střelby</Czech>
<Portuguese>Desabilitar no modo automático</Portuguese> <Portuguese>Desabilitar no modo automático</Portuguese>
<French>Désactiver en mode rafale libre</French>
<Hungarian>Automata módban letiltva</Hungarian> <Hungarian>Automata módban letiltva</Hungarian>
<Russian>Выкл. для автомат. режима</Russian> <Russian>Выкл. для автомат. режима</Russian>
</Key> </Key>
@ -152,6 +164,7 @@
<German>Deaktiviert die erweiterte Ballistik beim vollautomatischen Feuern</German> <German>Deaktiviert die erweiterte Ballistik beim vollautomatischen Feuern</German>
<Czech>Zákáže pokročilou balistiku během střelby v režimu automat</Czech> <Czech>Zákáže pokročilou balistiku během střelby v režimu automat</Czech>
<Portuguese>Desabilitar a balística avançada durante fogo automático</Portuguese> <Portuguese>Desabilitar a balística avançada durante fogo automático</Portuguese>
<French>Désactive la balistique avancée pour les tirs en rafale libre</French>
<Hungarian>Letiltja a fejlett ballisztikát automata tüzelés folyamán</Hungarian> <Hungarian>Letiltja a fejlett ballisztikát automata tüzelés folyamán</Hungarian>
<Russian>Выключает продвинутую баллистику при стрельбе в полностью автоматическом режиме</Russian> <Russian>Выключает продвинутую баллистику при стрельбе в полностью автоматическом режиме</Russian>
</Key> </Key>
@ -162,6 +175,7 @@
<German>Simulation der Munitionstemperatur aktivieren</German> <German>Simulation der Munitionstemperatur aktivieren</German>
<Czech>Povolit simulaci teploty munice</Czech> <Czech>Povolit simulaci teploty munice</Czech>
<Portuguese>Ativar simulação de temperatura de munição</Portuguese> <Portuguese>Ativar simulação de temperatura de munição</Portuguese>
<French>Activer la simulation de la température</French>
<Hungarian>Lőszer-hő szimuláció engedélyezése</Hungarian> <Hungarian>Lőszer-hő szimuláció engedélyezése</Hungarian>
<Russian>Симуляция температуры для боеприпасов</Russian> <Russian>Симуляция температуры для боеприпасов</Russian>
</Key> </Key>
@ -172,6 +186,7 @@
<German>Munitionstemperatur hat Einfluss auf die Mündungsgeschwindigkeit</German> <German>Munitionstemperatur hat Einfluss auf die Mündungsgeschwindigkeit</German>
<Czech>Úsťová rychlost je závislá na teplotě munice</Czech> <Czech>Úsťová rychlost je závislá na teplotě munice</Czech>
<Portuguese>A velocidade de saída varia com a temperatura da munição</Portuguese> <Portuguese>A velocidade de saída varia com a temperatura da munição</Portuguese>
<French>La température de la munition influe sur la vélocité intiale</French>
<Hungarian>A kezdősebesség a lőszer hőmérsékletétől függően változó</Hungarian> <Hungarian>A kezdősebesség a lőszer hőmérsékletétől függően változó</Hungarian>
<Russian>Начальная скорость пули зависит от температуры</Russian> <Russian>Начальная скорость пули зависит от температуры</Russian>
</Key> </Key>
@ -182,6 +197,7 @@
<German>Simulation der Lauflänge aktivieren</German> <German>Simulation der Lauflänge aktivieren</German>
<Czech>Povolit simulaci délky hlavně</Czech> <Czech>Povolit simulaci délky hlavně</Czech>
<Portuguese>Ativar a simulação de comprimento do cano</Portuguese> <Portuguese>Ativar a simulação de comprimento do cano</Portuguese>
<French>Activer la simulation de la longueur de canon</French>
<Hungarian>Csőhossz-szimuláció engedélyezése</Hungarian> <Hungarian>Csőhossz-szimuláció engedélyezése</Hungarian>
<Russian>Симуляция длины ствола</Russian> <Russian>Симуляция длины ствола</Russian>
</Key> </Key>
@ -192,6 +208,7 @@
<German>Lauflänge beeinflusst Mündungsgeschwindigkeit</German> <German>Lauflänge beeinflusst Mündungsgeschwindigkeit</German>
<Czech>Úsťová rychlost je závislá na délce hlavně</Czech> <Czech>Úsťová rychlost je závislá na délce hlavně</Czech>
<Portuguese>A velocidade de saída caria com o comprimento do cano</Portuguese> <Portuguese>A velocidade de saída caria com o comprimento do cano</Portuguese>
<French>La longueur du canon influe sur la vélocité initale</French>
<Hungarian>A kezdősebesség a cső hosszától függően változó</Hungarian> <Hungarian>A kezdősebesség a cső hosszától függően változó</Hungarian>
<Russian>Начальная скорость пули зависит от длины ствола</Russian> <Russian>Начальная скорость пули зависит от длины ствола</Russian>
</Key> </Key>
@ -202,6 +219,7 @@
<German>Geschossspureffekt aktivieren</German> <German>Geschossspureffekt aktivieren</German>
<Czech>Povolit efekt trasírek</Czech> <Czech>Povolit efekt trasírek</Czech>
<Portuguese>Ativa efeito traçante de projétil</Portuguese> <Portuguese>Ativa efeito traçante de projétil</Portuguese>
<French>Activer l'effet traçante</French>
<Hungarian>Nyomkövető-effekt engedélyezése</Hungarian> <Hungarian>Nyomkövető-effekt engedélyezése</Hungarian>
<Russian>Следы пуль</Russian> <Russian>Следы пуль</Russian>
</Key> </Key>
@ -212,6 +230,7 @@
<German>Aktiviere Geschossspureffekt für hohe Kaliber (bei Benutzung von Optiken mit starker Vergrößerung)</German> <German>Aktiviere Geschossspureffekt für hohe Kaliber (bei Benutzung von Optiken mit starker Vergrößerung)</German>
<Czech>Aktivuje efekt trasírek z vysokokaliberních zbraní (viditelné pouze skrze výkonnou optiku)</Czech> <Czech>Aktivuje efekt trasírek z vysokokaliberních zbraní (viditelné pouze skrze výkonnou optiku)</Czech>
<Portuguese>Ativa o efeito traçante de projétil para projéteis de alto calibre (somente visível quando observado por miras telescópicas)</Portuguese> <Portuguese>Ativa o efeito traçante de projétil para projéteis de alto calibre (somente visível quando observado por miras telescópicas)</Portuguese>
<French>Active une tracante pour les munitions de gros calibre (seulement visible en utilisant des optiques avancées)</French>
<Hungarian>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ó)</Hungarian> <Hungarian>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ó)</Hungarian>
<Russian>Включает эффект следов пуль для больших калибров (видны только через мощную оптику)</Russian> <Russian>Включает эффект следов пуль для больших калибров (видны только через мощную оптику)</Russian>
</Key> </Key>
@ -222,6 +241,7 @@
<German>Simulationsintervall</German> <German>Simulationsintervall</German>
<Czech>Interval simulace</Czech> <Czech>Interval simulace</Czech>
<Portuguese>Intervalo da simulação</Portuguese> <Portuguese>Intervalo da simulação</Portuguese>
<French>Intervalle de simulation</French>
<Hungarian>Szimuláció intervalluma</Hungarian> <Hungarian>Szimuláció intervalluma</Hungarian>
<Russian>Интервал симуляции</Russian> <Russian>Интервал симуляции</Russian>
</Key> </Key>
@ -232,6 +252,7 @@
<German>Legt das Intervall zwischen den Berechnungsschritten fest</German> <German>Legt das Intervall zwischen den Berechnungsschritten fest</German>
<Czech>Určuje interval mezi každým výpočtem</Czech> <Czech>Určuje interval mezi každým výpočtem</Czech>
<Portuguese>Define o intervalo entre cada cálculo</Portuguese> <Portuguese>Define o intervalo entre cada cálculo</Portuguese>
<French>Défini un intervalle de calcul entre deux simulations</French>
<Hungarian>Meghatározza a számítási lépések közötti időintervallumot</Hungarian> <Hungarian>Meghatározza a számítási lépések közötti időintervallumot</Hungarian>
<Russian>Определяет временной интервал между вычислениями</Russian> <Russian>Определяет временной интервал между вычислениями</Russian>
</Key> </Key>
@ -242,6 +263,7 @@
<German>Simulationsradius</German> <German>Simulationsradius</German>
<Czech>Rozsah simulace</Czech> <Czech>Rozsah simulace</Czech>
<Portuguese>Raio de simulação</Portuguese> <Portuguese>Raio de simulação</Portuguese>
<French>Rayon de simulation</French>
<Hungarian>Szimuláció hatóköre</Hungarian> <Hungarian>Szimuláció hatóköre</Hungarian>
<Russian>Радиус симуляции</Russian> <Russian>Радиус симуляции</Russian>
</Key> </Key>
@ -252,6 +274,7 @@
<German>Gibt den Radius (in Metern) um den Spieler an, bei dem die erweiterte Ballistik auf Geschosse angewendet wird</German> <German>Gibt den Radius (in Metern) um den Spieler an, bei dem die erweiterte Ballistik auf Geschosse angewendet wird</German>
<Czech>Určuje oblast kolem hráče (v metrech), kde je pokročilá balistika použita na projektil</Czech> <Czech>Určuje oblast kolem hráče (v metrech), kde je pokročilá balistika použita na projektil</Czech>
<Portuguese>Define o raio ao redor do jogador (em metros) onde a balística avançada será aplicada aos projéteis</Portuguese> <Portuguese>Define o raio ao redor do jogador (em metros) onde a balística avançada será aplicada aos projéteis</Portuguese>
<French>Défini le rayon autour du joueur (en mètres) d'application de la balistique avancée</French>
<Hungarian>Meghatározza a játékos körüli hatókört (méterben), ahol a lövedékek fejlett ballisztikát használnak</Hungarian> <Hungarian>Meghatározza a játékos körüli hatókört (méterben), ahol a lövedékek fejlett ballisztikát használnak</Hungarian>
<Russian>Определяет радиус вокруг игрока (в метрах), в котором продвинутая баллистика применяется к снарядам</Russian> <Russian>Определяет радиус вокруг игрока (в метрах), в котором продвинутая баллистика применяется к снарядам</Russian>
</Key> </Key>
@ -260,6 +283,7 @@
<Polish>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.</Polish> <Polish>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.</Polish>
<Czech>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.</Czech> <Czech>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.</Czech>
<Portuguese>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.</Portuguese> <Portuguese>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.</Portuguese>
<French>Ce module active la simulation de balistique avancée - ie les projectiles sont influencé par des varibles comme le vent, la température, la pression atmosphérique, l'humidité, la gravité, le type de munition et l'arme avec laquelles ils sont tirés</French>
<Hungarian>Ez a modul engedélyezi a fejlett ballisztikai szimulációt - a lövedékek röppályáját befolyásolni fogja a levegő hőmérséklete, légnyomás, páratartalom, gravitáció, a lövedék fajtája, valamint a fegyver, amiből kilőtték a lövedéket.</Hungarian> <Hungarian>Ez a modul engedélyezi a fejlett ballisztikai szimulációt - a lövedékek röppályáját befolyásolni fogja a levegő hőmérséklete, légnyomás, páratartalom, gravitáció, a lövedék fajtája, valamint a fegyver, amiből kilőtték a lövedéket.</Hungarian>
<Russian>Этот модуль включает симуляцию продвинутой баллистики - при этом на траекторию полета снаряда влияют различные параметры, такие как температура воздуха, атмосферное давление, влажность, гравитация, тип боеприпаса и оружия, из которого произвели выстрел.</Russian> <Russian>Этот модуль включает симуляцию продвинутой баллистики - при этом на траекторию полета снаряда влияют различные параметры, такие как температура воздуха, атмосферное давление, влажность, гравитация, тип боеприпаса и оружия, из которого произвели выстрел.</Russian>
</Key> </Key>

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project name="ACE"> <Project name="ACE">
<Package name="Aircraft"> <Package name="Aircraft">
<Key ID="STR_ACE_Aircraft_CMFlareLauncher_Burst_Name"> <Key ID="STR_ACE_Aircraft_CMFlareLauncher_Burst_Name">

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project name="ACE"> <Project name="ACE">
<Package name="ATragMX"> <Package name="ATragMX">
<Key ID="STR_ACE_ATragMX_Name"> <Key ID="STR_ACE_ATragMX_Name">

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project name="ACE"> <Project name="ACE">
<Package name="Attach"> <Package name="Attach">
<Key ID="STR_ACE_Attach_AttachDetach"> <Key ID="STR_ACE_Attach_AttachDetach">

View File

@ -6,23 +6,11 @@ class CfgAmmo {
timeToLive=6; 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 { class B_556x45_Ball : BulletBase {
airFriction=-0.00126466; airFriction=-0.00126466;
hit=8; hit=8;
typicalSpeed=750; typicalSpeed=750;
tracerScale = 1;
tracerStartTime=0.073; // M856 tracer burns out to 800m tracerStartTime=0.073; // M856 tracer burns out to 800m
tracerEndTime=1.57123; // Time in seconds calculated with ballistics calculator tracerEndTime=1.57123; // Time in seconds calculated with ballistics calculator
ACE_caliber=5.69; ACE_caliber=5.69;
@ -128,9 +116,13 @@ class CfgAmmo {
ACE_muzzleVelocities[]={785, 883, 925}; ACE_muzzleVelocities[]={785, 883, 925};
ACE_barrelLengths[]={254.0, 414.02, 508.0}; ACE_barrelLengths[]={254.0, 414.02, 508.0};
}; };
class B_56x15_dual: BulletBase {
tracerScale = 0.5;
};
class B_65x39_Caseless : BulletBase { class B_65x39_Caseless : BulletBase {
airFriction=-0.00075308; airFriction=-0.00075308;
typicalSpeed=800; typicalSpeed=800;
tracerScale = 1.1; //1.0;
ACE_caliber=6.706; ACE_caliber=6.706;
ACE_bulletLength=32.893; ACE_bulletLength=32.893;
ACE_bulletMass=7.9704; ACE_bulletMass=7.9704;
@ -180,10 +172,15 @@ class CfgAmmo {
ACE_muzzleVelocities[]={750, 820, 840, 852, 860}; ACE_muzzleVelocities[]={750, 820, 840, 852, 860};
ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; 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 { class B_762x51_Ball : BulletBase {
airFriction=-0.00100957; airFriction=-0.00100957;
typicalSpeed=833; typicalSpeed=833;
hit=9; hit=9;
tracerScale = 1.2; //0.6;
tracerStartTime=0.073; // Based on the British L5A1 which burns out to 1000m tracerStartTime=0.073; // Based on the British L5A1 which burns out to 1000m
tracerEndTime=2.15957; // Time in seconds calculated with ballistics calculator tracerEndTime=2.15957; // Time in seconds calculated with ballistics calculator
ACE_caliber=7.823; ACE_caliber=7.823;
@ -479,6 +476,7 @@ class CfgAmmo {
class B_9x21_Ball : BulletBase { class B_9x21_Ball : BulletBase {
airFriction=-0.00226847; airFriction=-0.00226847;
typicalSpeed=390; typicalSpeed=390;
tracerScale = 0.5;
hit=6; hit=6;
ACE_caliber=9.042; ACE_caliber=9.042;
ACE_bulletLength=15.494; ACE_bulletLength=15.494;
@ -491,6 +489,9 @@ class CfgAmmo {
ACE_muzzleVelocities[]={440, 460, 480}; ACE_muzzleVelocities[]={440, 460, 480};
ACE_barrelLengths[]={101.6, 127.0, 228.6}; 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 { class ACE_9x18_Ball_57N181S : B_9x21_Ball {
hit=5; hit=5;
airFriction=-0.00190333; airFriction=-0.00190333;
@ -584,6 +585,7 @@ class CfgAmmo {
timeToLive=10; timeToLive=10;
airFriction=-0.00038944; airFriction=-0.00038944;
typicalSpeed=910; typicalSpeed=910;
tracerScale = 1.3; //1.2;
ACE_caliber=10.363; ACE_caliber=10.363;
ACE_bulletLength=54.0; ACE_bulletLength=54.0;
ACE_bulletMass=26.568; ACE_bulletMass=26.568;
@ -670,9 +672,13 @@ class CfgAmmo {
ACE_muzzleVelocities[]={880, 915, 925}; ACE_muzzleVelocities[]={880, 915, 925};
ACE_barrelLengths[]={508.0, 660.4, 711.2}; ACE_barrelLengths[]={508.0, 660.4, 711.2};
}; };
class B_127x33_Ball: BulletBase {
tracerScale = 1.3; //1.2;
};
class B_127x54_Ball : BulletBase { class B_127x54_Ball : BulletBase {
airFriction=-0.00019268; airFriction=-0.00019268;
typicalSpeed=300; typicalSpeed=300;
tracerScale = 1.3;//
ACE_caliber=12.954; ACE_caliber=12.954;
ACE_bulletLength=64.516; ACE_bulletLength=64.516;
ACE_bulletMass=48.6; ACE_bulletMass=48.6;
@ -688,6 +694,7 @@ class CfgAmmo {
timeToLive=10; timeToLive=10;
airFriction=-0.00057503; airFriction=-0.00057503;
typicalSpeed=900; typicalSpeed=900;
tracerScale = 1.3; //1.2;
ACE_caliber=12.954; ACE_caliber=12.954;
ACE_bulletLength=58.674; ACE_bulletLength=58.674;
ACE_bulletMass=41.9256; ACE_bulletMass=41.9256;
@ -703,6 +710,7 @@ class CfgAmmo {
timeToLive=10; timeToLive=10;
airFriction=-0.00057503; airFriction=-0.00057503;
typicalSpeed=900; typicalSpeed=900;
tracerScale = 1.3;//
hit=25; hit=25;
caliber=4.0; caliber=4.0;
ACE_caliber=12.954; ACE_caliber=12.954;
@ -736,6 +744,7 @@ class CfgAmmo {
timeToLive=10; timeToLive=10;
airFriction=-0.00063800; airFriction=-0.00063800;
typicalSpeed=820; typicalSpeed=820;
tracerScale = 1.3; //1.5;
ACE_caliber=12.979; ACE_caliber=12.979;
ACE_bulletLength=64.008; ACE_bulletLength=64.008;
ACE_bulletMass=48.276; ACE_bulletMass=48.276;
@ -750,6 +759,7 @@ class CfgAmmo {
class B_45ACP_Ball : BulletBase { class B_45ACP_Ball : BulletBase {
airFriction=-0.00081221; airFriction=-0.00081221;
typicalSpeed=250; typicalSpeed=250;
tracerScale = 0.6;
ACE_caliber=11.481; ACE_caliber=11.481;
ACE_bulletLength=17.272; ACE_bulletLength=17.272;
ACE_bulletMass=14.904; ACE_bulletMass=14.904;
@ -761,4 +771,36 @@ class CfgAmmo {
ACE_muzzleVelocities[]={230, 250, 285}; ACE_muzzleVelocities[]={230, 250, 285};
ACE_barrelLengths[]={101.6, 127.0, 228.6}; 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;
};
}; };

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project name="ACE"> <Project name="ACE">
<Package name="Ballistics"> <Package name="Ballistics">
<!-- MX --> <!-- MX -->
@ -1599,6 +1599,7 @@
<German>[ACE] Munitionskiste</German> <German>[ACE] Munitionskiste</German>
<Czech>[ACE] Bedna s municí</Czech> <Czech>[ACE] Bedna s municí</Czech>
<Portuguese>[ACE] Caixa com suprimentos de munição</Portuguese> <Portuguese>[ACE] Caixa com suprimentos de munição</Portuguese>
<French>[ACE] Caisse de munitions</French>
<Hungarian>[ACE] Lőszeres láda</Hungarian> <Hungarian>[ACE] Lőszeres láda</Hungarian>
<Russian>[ACE] Ящик с боеприпасами</Russian> <Russian>[ACE] Ящик с боеприпасами</Russian>
</Key> </Key>

View File

@ -35,6 +35,12 @@ class CfgMovesMaleSdr: CfgMovesBasic {
class CutSceneAnimationBase; class CutSceneAnimationBase;
#define MACRO_ANIMATION \
head = "headDefault"; \
aimingBody = "aimingNo"; \
forceAim = 1; \
static = 1;
//Handcuffed Anims: //Handcuffed Anims:
class ACE_AmovPercMstpSnonWnonDnon_AmovPercMstpScapWnonDnon: CutSceneAnimationBase { class ACE_AmovPercMstpSnonWnonDnon_AmovPercMstpScapWnonDnon: CutSceneAnimationBase {
actions = "ACE_CivilStandHandcuffedActions"; actions = "ACE_CivilStandHandcuffedActions";
@ -45,6 +51,7 @@ class CfgMovesMaleSdr: CfgMovesBasic {
ConnectTo[] = {"ACE_AmovPercMstpScapWnonDnon",0.1}; ConnectTo[] = {"ACE_AmovPercMstpScapWnonDnon",0.1};
InterpolateTo[] = {"Unconscious",0.01,"ACE_AmovPercMstpScapWnonDnon_AmovPercMstpSnonWnonDnon",0.1}; InterpolateTo[] = {"Unconscious",0.01,"ACE_AmovPercMstpScapWnonDnon_AmovPercMstpSnonWnonDnon",0.1};
canReload = 0; canReload = 0;
MACRO_ANIMATION
}; };
class ACE_AmovPercMstpScapWnonDnon: ACE_AmovPercMstpSnonWnonDnon_AmovPercMstpScapWnonDnon { class ACE_AmovPercMstpScapWnonDnon: ACE_AmovPercMstpSnonWnonDnon_AmovPercMstpScapWnonDnon {
file = "\A3\anims_f\Data\Anim\Sdr\mov\erc\stp\non\non\AmovPercMstpSnonWnonDnon_Ease"; 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}; ConnectTo[] = {"ACE_AmovPercMstpScapWnonDnon_AmovPercMstpSnonWnonDnon",0.1};
InterpolateTo[] = {"Unconscious",0.01}; InterpolateTo[] = {"Unconscious",0.01};
looped = 1; looped = 1;
MACRO_ANIMATION
}; };
class ACE_AmovPercMstpScapWnonDnon_AmovPercMstpSnonWnonDnon: ACE_AmovPercMstpSnonWnonDnon_AmovPercMstpScapWnonDnon { class ACE_AmovPercMstpScapWnonDnon_AmovPercMstpSnonWnonDnon: ACE_AmovPercMstpSnonWnonDnon_AmovPercMstpScapWnonDnon {
actions = "CivilStandActions"; actions = "CivilStandActions";
file = "\A3\anims_f\Data\Anim\Sdr\mov\erc\stp\non\non\amovpercmstpsnonwnondnon_easeout"; file = "\A3\anims_f\Data\Anim\Sdr\mov\erc\stp\non\non\amovpercmstpsnonwnondnon_easeout";
ConnectTo[] = {"AmovPercMstpSnonWnonDnon",0.1}; ConnectTo[] = {"AmovPercMstpSnonWnonDnon",0.1};
InterpolateTo[] = {"Unconscious",0.01,"ACE_AmovPercMstpSnonWnonDnon_AmovPercMstpScapWnonDnon",0.1}; InterpolateTo[] = {"Unconscious",0.01,"ACE_AmovPercMstpSnonWnonDnon_AmovPercMstpScapWnonDnon",0.1};
MACRO_ANIMATION
}; };
//Handcuffed-FFV: //Handcuffed-FFV:
@ -65,6 +74,7 @@ class CfgMovesMaleSdr: CfgMovesBasic {
file = "\A3\cargoposes_F_heli\anim\passenger_flatground_3idleunarmed.rtm"; file = "\A3\cargoposes_F_heli\anim\passenger_flatground_3idleunarmed.rtm";
actions = "ACE_CivilHandCuffedFFVActions"; actions = "ACE_CivilHandCuffedFFVActions";
ConnectTo[] = {}; ConnectTo[] = {};
MACRO_ANIMATION
}; };
@ -78,6 +88,7 @@ class CfgMovesMaleSdr: CfgMovesBasic {
ConnectTo[] = {"ACE_AmovPercMstpSsurWnonDnon",0.1}; ConnectTo[] = {"ACE_AmovPercMstpSsurWnonDnon",0.1};
InterpolateTo[] = {"Unconscious",0.01,"ACE_AmovPercMstpSsurWnonDnon_AmovPercMstpSnonWnonDnon",0.1}; InterpolateTo[] = {"Unconscious",0.01,"ACE_AmovPercMstpSsurWnonDnon_AmovPercMstpSnonWnonDnon",0.1};
canReload = 0; canReload = 0;
MACRO_ANIMATION
}; };
class ACE_AmovPercMstpSsurWnonDnon: ACE_AmovPercMstpSnonWnonDnon_AmovPercMstpSsurWnonDnon { class ACE_AmovPercMstpSsurWnonDnon: ACE_AmovPercMstpSnonWnonDnon_AmovPercMstpSsurWnonDnon {
file = "\A3\anims_f\Data\Anim\Sdr\mov\erc\stp\sur\non\AmovPercMstpSsurWnonDnon"; file = "\A3\anims_f\Data\Anim\Sdr\mov\erc\stp\sur\non\AmovPercMstpSsurWnonDnon";
@ -85,6 +96,7 @@ class CfgMovesMaleSdr: CfgMovesBasic {
looped = 1; looped = 1;
ConnectTo[] = {"ACE_AmovPercMstpSsurWnonDnon_AmovPercMstpSnonWnonDnon",0.1}; ConnectTo[] = {"ACE_AmovPercMstpSsurWnonDnon_AmovPercMstpSnonWnonDnon",0.1};
InterpolateTo[] = {"Unconscious",0.01}; InterpolateTo[] = {"Unconscious",0.01};
MACRO_ANIMATION
}; };
class ACE_AmovPercMstpSsurWnonDnon_AmovPercMstpSnonWnonDnon: ACE_AmovPercMstpSnonWnonDnon_AmovPercMstpSsurWnonDnon { class ACE_AmovPercMstpSsurWnonDnon_AmovPercMstpSnonWnonDnon: ACE_AmovPercMstpSnonWnonDnon_AmovPercMstpSsurWnonDnon {
speed = 0.5; //for gameplay reasons, slow this down 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"; file = "\A3\anims_f\Data\Anim\Sdr\mov\erc\stp\sur\non\AmovPercMstpSsurWnonDnon_AmovPercMstpSnonWnonDnon";
ConnectTo[] = {"AmovPercMstpSnonWnonDnon",0.1}; ConnectTo[] = {"AmovPercMstpSnonWnonDnon",0.1};
InterpolateTo[] = {"Unconscious",0.01,"ACE_AmovPercMstpSnonWnonDnon_AmovPercMstpSsurWnonDnon",0.1}; InterpolateTo[] = {"Unconscious",0.01,"ACE_AmovPercMstpSnonWnonDnon_AmovPercMstpSsurWnonDnon",0.1};
MACRO_ANIMATION
}; };
}; };
}; };

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project name="ACE"> <Project name="ACE">
<Package name="Captives"> <Package name="Captives">
<Key ID="STR_ACE_Captives_SetCaptive"> <Key ID="STR_ACE_Captives_SetCaptive">
@ -164,6 +164,7 @@
<German>Einheit kapitulieren lassen</German> <German>Einheit kapitulieren lassen</German>
<Czech>Vzdávající se jednotka</Czech> <Czech>Vzdávající se jednotka</Czech>
<Portuguese>Fazer unidade se render</Portuguese> <Portuguese>Fazer unidade se render</Portuguese>
<French>Faire capituler l'unité</French>
<Hungarian>Egység kapitulálása</Hungarian> <Hungarian>Egység kapitulálása</Hungarian>
<Russian>Сделать юнита пленным</Russian> <Russian>Сделать юнита пленным</Russian>
</Key> </Key>
@ -174,6 +175,7 @@
<German>Einheit synchronisieren, um sie kapitulieren zu lassen.&lt;br /&gt;Quelle: ace_captives</German> <German>Einheit synchronisieren, um sie kapitulieren zu lassen.&lt;br /&gt;Quelle: ace_captives</German>
<Czech>Synchronizuj s jednotkou, která se má vzdát.&lt;br /&gt;Zdroj: ace_captives</Czech> <Czech>Synchronizuj s jednotkou, která se má vzdát.&lt;br /&gt;Zdroj: ace_captives</Czech>
<Portuguese>Sincroniza uma unidade para fazer com que ela se renda. &lt;br/&gt;Fonte: ace_captives</Portuguese> <Portuguese>Sincroniza uma unidade para fazer com que ela se renda. &lt;br/&gt;Fonte: ace_captives</Portuguese>
<French>Synchronise une unité pour la rendre captive. &lt;br/&gt;Source: ace_captives</French>
<Hungarian>Egység szinkronizálása, hogy kapituláljon.&lt;br /&gt;Forrás: ace_captives</Hungarian> <Hungarian>Egység szinkronizálása, hogy kapituláljon.&lt;br /&gt;Forrás: ace_captives</Hungarian>
<Russian>Синхронизируйте с юнитами, чтобы сделать их пленными.&lt;br /&gt;Источник: ace_captives</Russian> <Russian>Синхронизируйте с юнитами, чтобы сделать их пленными.&lt;br /&gt;Источник: ace_captives</Russian>
</Key> </Key>
@ -184,6 +186,7 @@
<Czech>Nastavení zajatce</Czech> <Czech>Nastavení zajatce</Czech>
<German>Gefangenen-Einstellungen</German> <German>Gefangenen-Einstellungen</German>
<Portuguese>Ajustes de prisioneiros</Portuguese> <Portuguese>Ajustes de prisioneiros</Portuguese>
<French>Options de capitulation</French>
<Hungarian>Fogoly-beállítások</Hungarian> <Hungarian>Fogoly-beállítások</Hungarian>
<Russian>Настройки пленения</Russian> <Russian>Настройки пленения</Russian>
</Key> </Key>
@ -194,6 +197,7 @@
<Czech>Toto kontroluje nastavení kapitulace a pout</Czech> <Czech>Toto kontroluje nastavení kapitulace a pout</Czech>
<German>Einstellungen zur Kapitulation und Kabelbindern</German> <German>Einstellungen zur Kapitulation und Kabelbindern</German>
<Portuguese>Controla as configurações de rendição e abraçadeiras</Portuguese> <Portuguese>Controla as configurações de rendição e abraçadeiras</Portuguese>
<French>Contrôle les paramètres de la rédition et des Serflex</French>
<Hungarian>Szabályozza a kapituláció és bilincselés beállításait</Hungarian> <Hungarian>Szabályozza a kapituláció és bilincselés beállításait</Hungarian>
<Russian>Управляет настройками сдачи в плен и связывания</Russian> <Russian>Управляет настройками сдачи в плен и связывания</Russian>
</Key> </Key>
@ -204,6 +208,7 @@
<Czech>Může spoutat spolubojovníky</Czech> <Czech>Může spoutat spolubojovníky</Czech>
<German>Kann Teamkollegen fesseln</German> <German>Kann Teamkollegen fesseln</German>
<Portuguese>Pode algemar o próprio lado</Portuguese> <Portuguese>Pode algemar o próprio lado</Portuguese>
<French>Peut libérer sa propre faction</French>
<Hungarian>Saját oldal megbilincselhető</Hungarian> <Hungarian>Saját oldal megbilincselhető</Hungarian>
<Russian>Связать союзника</Russian> <Russian>Связать союзника</Russian>
</Key> </Key>
@ -214,6 +219,7 @@
<Czech>Mohou hráči spoutat jednotky na své straně</Czech> <Czech>Mohou hráči spoutat jednotky na své straně</Czech>
<German>Können Spieler eigene Einheiten fesseln</German> <German>Können Spieler eigene Einheiten fesseln</German>
<Portuguese>Os jogadores podem algemar unidades do seu lado</Portuguese> <Portuguese>Os jogadores podem algemar unidades do seu lado</Portuguese>
<French>Les joueurs peuvent utiliser les Serflex sur leur propre camp</French>
<Hungarian>A játékosok megkötözhetik-e a saját oldalukon lévő egységeket</Hungarian> <Hungarian>A játékosok megkötözhetik-e a saját oldalukon lévő egységeket</Hungarian>
<Russian>Разрешить игрокам связывать юнитов своей стороны</Russian> <Russian>Разрешить игрокам связывать юнитов своей стороны</Russian>
</Key> </Key>
@ -224,6 +230,7 @@
<Czech>Povolit vzdávání</Czech> <Czech>Povolit vzdávání</Czech>
<German>Kapitulation erlauben</German> <German>Kapitulation erlauben</German>
<Portuguese>Permite rendição</Portuguese> <Portuguese>Permite rendição</Portuguese>
<French>Permettre la capitulation</French>
<Hungarian>Kapituláció engedélyezése</Hungarian> <Hungarian>Kapituláció engedélyezése</Hungarian>
<Russian>Сдаться в плен</Russian> <Russian>Сдаться в плен</Russian>
</Key> </Key>
@ -234,6 +241,7 @@
<Czech>Hráč se může vzdát poté, co si skryje zbraň</Czech> <Czech>Hráč se může vzdát poté, co si skryje zbraň</Czech>
<German>Spieler können kapitulieren, nachdem sie ihre Waffe geholstert haben</German> <German>Spieler können kapitulieren, nachdem sie ihre Waffe geholstert haben</German>
<Portuguese>Jogadores podem se render depois de guardar sua arma</Portuguese> <Portuguese>Jogadores podem se render depois de guardar sua arma</Portuguese>
<French>Les joueurs peuvent se rendre après avoir rangé leur arme</French>
<Hungarian>A játékosok megadhatják magukat a fegyverük elrakása után</Hungarian> <Hungarian>A játékosok megadhatják magukat a fegyverük elrakása után</Hungarian>
<Russian>Игроки могут сдаться в плен после того, как уберут оружие</Russian> <Russian>Игроки могут сдаться в плен после того, как уберут оружие</Russian>
</Key> </Key>

View File

@ -41,7 +41,7 @@ if (getNumber (configFile >> "CfgVehicles" >> _type >> QGVAR(hasCargo)) != 1) ex
private ["_text", "_condition", "_statement", "_icon", "_action"]; private ["_text", "_condition", "_statement", "_icon", "_action"];
_condition = { _condition = {
params ["_target", "_player"]; 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); _text = localize LSTRING(openMenu);
_statement = {GVAR(interactionVehicle) = _target; createDialog QGVAR(menu);}; _statement = {GVAR(interactionVehicle) = _target; createDialog QGVAR(menu);};

View File

@ -5,31 +5,37 @@
<English>Load</English> <English>Load</English>
<Polish>Załaduj</Polish> <Polish>Załaduj</Polish>
<Russian>Загрузить</Russian> <Russian>Загрузить</Russian>
<Czech>Naložit</Czech>
</Key> </Key>
<Key ID="STR_ACE_Cargo_unloadObject"> <Key ID="STR_ACE_Cargo_unloadObject">
<English>Unload</English> <English>Unload</English>
<Polish>Wyładuj</Polish> <Polish>Wyładuj</Polish>
<Russian>Выгрузить</Russian> <Russian>Выгрузить</Russian>
<Czech>Vyložit</Czech>
</Key> </Key>
<Key ID="STR_ACE_Cargo_openMenu"> <Key ID="STR_ACE_Cargo_openMenu">
<English>Cargo</English> <English>Cargo</English>
<Polish>Ładunek</Polish> <Polish>Ładunek</Polish>
<Russian>Грузовой отсек</Russian> <Russian>Грузовой отсек</Russian>
<Czech>Náklad</Czech>
</Key> </Key>
<Key ID="STR_ACE_Cargo_cargoMenu"> <Key ID="STR_ACE_Cargo_cargoMenu">
<English>Cargo Menu</English> <English>Cargo Menu</English>
<Polish>Menu ładunku</Polish> <Polish>Menu ładunku</Polish>
<Russian>Грузовой отсек</Russian> <Russian>Грузовой отсек</Russian>
<Czech>Menu nákladu</Czech>
</Key> </Key>
<Key ID="STR_ACE_Cargo_labelSpace"> <Key ID="STR_ACE_Cargo_labelSpace">
<English>Cargo space left: %1</English> <English>Cargo space left: %1</English>
<Polish>Pozostałe miejsce: %1</Polish> <Polish>Pozostałe miejsce: %1</Polish>
<Russian>Осталось мест: %1</Russian> <Russian>Осталось мест: %1</Russian>
<Czech>Volný prostor: %1</Czech>
</Key> </Key>
<Key ID="STR_ACE_Cargo_ModuleSettings_enable"> <Key ID="STR_ACE_Cargo_ModuleSettings_enable">
<English>Enable Cargo</English> <English>Enable Cargo</English>
<Polish>Aktywuj cargo</Polish> <Polish>Aktywuj cargo</Polish>
<Russian>Включить модуль перевозки грузов</Russian> <Russian>Включить модуль перевозки грузов</Russian>
<Czech>Povolit náklad</Czech>
</Key> </Key>
<Key ID="STR_ACE_Cargo_ModuleSettings_enable_Description"> <Key ID="STR_ACE_Cargo_ModuleSettings_enable_Description">
<English>Enable the load in cargo module</English> <English>Enable the load in cargo module</English>
@ -40,6 +46,7 @@
<English>Cargo Settings</English> <English>Cargo Settings</English>
<Polish>Ustawienia cargo</Polish> <Polish>Ustawienia cargo</Polish>
<Russian>Перевозка грузов</Russian> <Russian>Перевозка грузов</Russian>
<Czech>Nastavení nákladu</Czech>
</Key> </Key>
<Key ID="STR_ACE_Cargo_SettingsModule_Description"> <Key ID="STR_ACE_Cargo_SettingsModule_Description">
<English>Configure the cargo module settings</English> <English>Configure the cargo module settings</English>

View File

@ -150,6 +150,15 @@ call FUNC(checkFiles);
//Event that settings are safe to use: //Event that settings are safe to use:
["SettingsInitialized", []] call FUNC(localEvent); ["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; }, 0, [false]] call CBA_fnc_addPerFrameHandler;
@ -326,7 +335,7 @@ GVAR(OldIsCamera) = false;
if (didJip) then { if (didJip) then {
// We are jipping! Get ready and wait, and throw the event // 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); ["PlayerJip", [player] ] call FUNC(localEvent);
[(_this select 1)] call cba_fnc_removePerFrameHandler; [(_this select 1)] call cba_fnc_removePerFrameHandler;
}; };

View File

@ -157,6 +157,7 @@ PREP(requestCallback);
PREP(resetAllDefaults); PREP(resetAllDefaults);
PREP(restoreVariablesJIP); PREP(restoreVariablesJIP);
PREP(revertKeyCodeLocalized); PREP(revertKeyCodeLocalized);
PREP(runAfterSettingsInit);
PREP(sanitizeString); PREP(sanitizeString);
PREP(sendRequest); PREP(sendRequest);
PREP(serverLog); PREP(serverLog);
@ -303,6 +304,9 @@ GVAR(nextFrameNo) = diag_frameno;
GVAR(nextFrameBufferA) = []; GVAR(nextFrameBufferA) = [];
GVAR(nextFrameBufferB) = []; GVAR(nextFrameBufferB) = [];
GVAR(settingsInitFinished) = false;
GVAR(runAtSettingsInitialized) = [];
// @TODO: Generic local-managed global-synced objects (createVehicleLocal) // @TODO: Generic local-managed global-synced objects (createVehicleLocal)
//Debug //Debug

View File

@ -0,0 +1,27 @@
/*
* Author: PabstMirror
* Executes code after setting are initilized.
*
* Argument:
* 0: Code to execute <CODE>
* 1: Parameters to run the code with <ANY>
*
* 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];
};

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project name="ACE"> <Project name="ACE">
<Package name="Common"> <Package name="Common">
<Key ID="STR_ACE_Common_ACETeam"> <Key ID="STR_ACE_Common_ACETeam">
@ -477,6 +477,7 @@
<German>Überprüfe PBOs</German> <German>Überprüfe PBOs</German>
<Czech>Zkontrolovat PBO</Czech> <Czech>Zkontrolovat PBO</Czech>
<Portuguese>Verificar PBOs</Portuguese> <Portuguese>Verificar PBOs</Portuguese>
<French>Vérifier les PBOs</French>
<Hungarian>PBO-k ellenőrzése</Hungarian> <Hungarian>PBO-k ellenőrzése</Hungarian>
<Russian>Проверка аддонов</Russian> <Russian>Проверка аддонов</Russian>
</Key> </Key>
@ -487,6 +488,7 @@
<Czech>Zjistit addon který je v souladu se serverem</Czech> <Czech>Zjistit addon který je v souladu se serverem</Czech>
<Portuguese>Este módulo verifica a integridade dos addons quando iniciamos a simulação</Portuguese> <Portuguese>Este módulo verifica a integridade dos addons quando iniciamos a simulação</Portuguese>
<Russian>Выполняет проверку версий аддонов ACE у подключаемых игроков</Russian> <Russian>Выполняет проверку версий аддонов ACE у подключаемых игроков</Russian>
<French>Ce module contrôle si les PBOs de chaque joueur sont corrects</French>
</Key> </Key>
<Key ID="STR_ACE_Common_CheckPBO_Action_DisplayName"> <Key ID="STR_ACE_Common_CheckPBO_Action_DisplayName">
<English>Action</English> <English>Action</English>
@ -495,6 +497,7 @@
<German>Aktion</German> <German>Aktion</German>
<Czech>Akce</Czech> <Czech>Akce</Czech>
<Portuguese>Ação</Portuguese> <Portuguese>Ação</Portuguese>
<French>Action</French>
<Hungarian>Cselekvés</Hungarian> <Hungarian>Cselekvés</Hungarian>
<Russian>Действие</Russian> <Russian>Действие</Russian>
</Key> </Key>
@ -505,6 +508,7 @@
<German>Was soll mit Leuten passieren, die nicht die richtigen PBOs haben?</German> <German>Was soll mit Leuten passieren, die nicht die richtigen PBOs haben?</German>
<Czech>Co udělat s lidmi, co nemají správné addony?</Czech> <Czech>Co udělat s lidmi, co nemají správné addony?</Czech>
<Portuguese>O que fazer com pessoas que não tem os PBOs corretos?</Portuguese> <Portuguese>O que fazer com pessoas que não tem os PBOs corretos?</Portuguese>
<French>Que faire avec les personnes n'ayant pas les bon PBOs</French>
<Hungarian>Mi legyen azokkal a személyekkel, akiknek nincsenek meg a helyes PBO-k?</Hungarian> <Hungarian>Mi legyen azokkal a személyekkel, akiknek nincsenek meg a helyes PBO-k?</Hungarian>
<Russian>Что делать с игроками с неправильными аддонами?</Russian> <Russian>Что делать с игроками с неправильными аддонами?</Russian>
</Key> </Key>
@ -515,6 +519,7 @@
<German>Einmal verwarnen</German> <German>Einmal verwarnen</German>
<Czech>Upozornit jednou</Czech> <Czech>Upozornit jednou</Czech>
<Portuguese>Avisar uma vez</Portuguese> <Portuguese>Avisar uma vez</Portuguese>
<French>Avertir une fois</French>
<Hungarian>Egyszeri figyelmeztetés</Hungarian> <Hungarian>Egyszeri figyelmeztetés</Hungarian>
<Russian>Предупредить один раз</Russian> <Russian>Предупредить один раз</Russian>
</Key> </Key>
@ -525,6 +530,7 @@
<German>Immer verwarnen</German> <German>Immer verwarnen</German>
<Czech>Upozornit (permanentně)</Czech> <Czech>Upozornit (permanentně)</Czech>
<Portuguese>Avisar (permanente)</Portuguese> <Portuguese>Avisar (permanente)</Portuguese>
<French>Avertir (permanent)</French>
<Hungarian>Figyelmeztetés (tartós)</Hungarian> <Hungarian>Figyelmeztetés (tartós)</Hungarian>
<Russian>Предупреждать (постоянно)</Russian> <Russian>Предупреждать (постоянно)</Russian>
</Key> </Key>
@ -535,6 +541,7 @@
<German>Kicken</German> <German>Kicken</German>
<Czech>Vyhodit</Czech> <Czech>Vyhodit</Czech>
<Portuguese>Chutar</Portuguese> <Portuguese>Chutar</Portuguese>
<French>Ejecter</French>
<Hungarian>Kirúgás</Hungarian> <Hungarian>Kirúgás</Hungarian>
<Russian>Кикнуть</Russian> <Russian>Кикнуть</Russian>
</Key> </Key>
@ -545,6 +552,7 @@
<German>Alle Addons überprüfen</German> <German>Alle Addons überprüfen</German>
<Czech>Zkontrolovat všechny addony</Czech> <Czech>Zkontrolovat všechny addony</Czech>
<Portuguese>Verificar todos addons</Portuguese> <Portuguese>Verificar todos addons</Portuguese>
<French>Vérifier tous les addons</French>
<Hungarian>Összes bővítmény ellenőrzése</Hungarian> <Hungarian>Összes bővítmény ellenőrzése</Hungarian>
<Russian>Проверять все аддоны</Russian> <Russian>Проверять все аддоны</Russian>
</Key> </Key>
@ -555,6 +563,7 @@
<German>Alle Addons anstatt nur ACE überprüfen?</German> <German>Alle Addons anstatt nur ACE überprüfen?</German>
<Czech>Zkontrolovat všechny addony namísto jen těch od ACE?</Czech> <Czech>Zkontrolovat všechny addony namísto jen těch od ACE?</Czech>
<Portuguese>Verificar todos addons invés de só os do ACE?</Portuguese> <Portuguese>Verificar todos addons invés de só os do ACE?</Portuguese>
<French>Vérifie tous les addons, même ceux qui ne sont pas liés à ACE</French>
<Hungarian>Az összes bővítmény ellenőrzése, csak az ACE helyett?</Hungarian> <Hungarian>Az összes bővítmény ellenőrzése, csak az ACE helyett?</Hungarian>
<Russian>Проверять все аддоны, а не только ACE?</Russian> <Russian>Проверять все аддоны, а не только ACE?</Russian>
</Key> </Key>
@ -565,6 +574,7 @@
<German>Whitelist</German> <German>Whitelist</German>
<Czech>Seznam povolených</Czech> <Czech>Seznam povolených</Czech>
<Portuguese>Lista branca</Portuguese> <Portuguese>Lista branca</Portuguese>
<French>Liste blanche</French>
<Hungarian>Fehérlista</Hungarian> <Hungarian>Fehérlista</Hungarian>
<Russian>Вайтлист доп. аддонов</Russian> <Russian>Вайтлист доп. аддонов</Russian>
</Key> </Key>
@ -575,6 +585,7 @@
<German>Welche Addons werden dennoch erlaubt?</German> <German>Welche Addons werden dennoch erlaubt?</German>
<Czech>Jaké addony jsou povoleny?</Czech> <Czech>Jaké addony jsou povoleny?</Czech>
<Portuguese>Quais addons são permitidos de qualquer maneira?</Portuguese> <Portuguese>Quais addons são permitidos de qualquer maneira?</Portuguese>
<French>Quels addons sont tolérés</French>
<Hungarian>Milyen bővítmények vannak feltétlenül engedélyezve?</Hungarian> <Hungarian>Milyen bővítmények vannak feltétlenül engedélyezve?</Hungarian>
<Russian>Какие аддоны дополнительно разрешены?</Russian> <Russian>Какие аддоны дополнительно разрешены?</Russian>
</Key> </Key>
@ -585,6 +596,7 @@
<German>LSD-Fahrzeuge</German> <German>LSD-Fahrzeuge</German>
<Czech>LSD vozidla</Czech> <Czech>LSD vozidla</Czech>
<Portuguese>Veículos LSD</Portuguese> <Portuguese>Veículos LSD</Portuguese>
<French>LSD - Véhicules</French>
<Hungarian>LSD járművek</Hungarian> <Hungarian>LSD járművek</Hungarian>
<Russian>Транспорт под LSD</Russian> <Russian>Транспорт под LSD</Russian>
</Key> </Key>
@ -595,6 +607,7 @@
<German>Fügt einen LSD-Effekt zum synchronisierten Fahrzeug hinzu</German> <German>Fügt einen LSD-Effekt zum synchronisierten Fahrzeug hinzu</German>
<Czech>Přidá LSD efekt pro synchronizované vozidla</Czech> <Czech>Přidá LSD efekt pro synchronizované vozidla</Czech>
<Portuguese>Adiciona efeito LSD ao veículo sincronizado</Portuguese> <Portuguese>Adiciona efeito LSD ao veículo sincronizado</Portuguese>
<French>Ajoute l'effet LSD aux véhicules synchronisés</French>
<Hungarian>LSD-effekt hozzáadása a szinkronizált járművekhez</Hungarian> <Hungarian>LSD-effekt hozzáadása a szinkronizált járművekhez</Hungarian>
<Russian>Добавляет эффект LSD (мигание всеми цветами радуги) синхронизированным транспортным средствам</Russian> <Russian>Добавляет эффект LSD (мигание всеми цветами радуги) синхронизированным транспортным средствам</Russian>
</Key> </Key>
@ -605,6 +618,7 @@
<Portuguese>Ativa dispositivo de mão</Portuguese> <Portuguese>Ativa dispositivo de mão</Portuguese>
<Polish>Przełącz urządzenie podręczne</Polish> <Polish>Przełącz urządzenie podręczne</Polish>
<Czech>Přepnout ruční zařízení</Czech> <Czech>Přepnout ruční zařízení</Czech>
<French>Allumer l'ordinateur de poche</French>
<Hungarian>Kézi eszköz kapcsolása</Hungarian> <Hungarian>Kézi eszköz kapcsolása</Hungarian>
<Russian>Включить портативное устройство</Russian> <Russian>Включить портативное устройство</Russian>
</Key> </Key>
@ -615,6 +629,7 @@
<Portuguese>Fecha dispositivo de mão</Portuguese> <Portuguese>Fecha dispositivo de mão</Portuguese>
<Polish>Zamknij urządzenie podręczne</Polish> <Polish>Zamknij urządzenie podręczne</Polish>
<Czech>Zavřít ruční zařízení</Czech> <Czech>Zavřít ruční zařízení</Czech>
<French>Fermer l'ordinateur de poche</French>
<Hungarian>Kézi eszköz bezárása</Hungarian> <Hungarian>Kézi eszköz bezárása</Hungarian>
<Russian>Закрыть портативное устройство</Russian> <Russian>Закрыть портативное устройство</Russian>
</Key> </Key>
@ -625,6 +640,7 @@
<Portuguese>Troca dispositivos de mão</Portuguese> <Portuguese>Troca dispositivos de mão</Portuguese>
<Polish>Następne urządzenie podręczne</Polish> <Polish>Następne urządzenie podręczne</Polish>
<Czech>Procházet ruční zařízení</Czech> <Czech>Procházet ruční zařízení</Czech>
<French>Changer (cycle) d'ordinateur de poche</French>
<Hungarian>Kézi eszköz váltása</Hungarian> <Hungarian>Kézi eszköz váltása</Hungarian>
<Russian>Следующее портативное устройство</Russian> <Russian>Следующее портативное устройство</Russian>
</Key> </Key>
@ -678,6 +694,7 @@
<English>Vehicles only</English> <English>Vehicles only</English>
<Polish>Tylko pojazdy</Polish> <Polish>Tylko pojazdy</Polish>
<Russian>Только в транспорте</Russian> <Russian>Только в транспорте</Russian>
<Czech>Pouze vozidla</Czech>
</Key> </Key>
<Key ID="STR_ACE_Common_DoNotForce"> <Key ID="STR_ACE_Common_DoNotForce">
<English>Do Not Force</English> <English>Do Not Force</English>
@ -692,6 +709,7 @@
<English>ACE3 Equipment</English> <English>ACE3 Equipment</English>
<Polish>ACE3 Wyposażenie</Polish> <Polish>ACE3 Wyposażenie</Polish>
<Russian>ACE3 Снаряжение</Russian> <Russian>ACE3 Снаряжение</Russian>
<Czech>ACE3 Vybavení</Czech>
</Key> </Key>
<Key ID="STR_ACE_Common_ACEKeybindCategoryCommon"> <Key ID="STR_ACE_Common_ACEKeybindCategoryCommon">
<English>ACE3 Common</English> <English>ACE3 Common</English>
@ -702,6 +720,7 @@
<English>ACE3 Weapons</English> <English>ACE3 Weapons</English>
<Polish>ACE3 Broń</Polish> <Polish>ACE3 Broń</Polish>
<Russian>ACE3 Оружие</Russian> <Russian>ACE3 Оружие</Russian>
<Czech>ACE3 Zbraně</Czech>
</Key> </Key>
<Key ID="STR_ACE_Common_ACEKeybindCategoryMovement"> <Key ID="STR_ACE_Common_ACEKeybindCategoryMovement">
<English>ACE3 Movement</English> <English>ACE3 Movement</English>
@ -712,11 +731,13 @@
<English>ACE3 Scope Adjustment</English> <English>ACE3 Scope Adjustment</English>
<Polish>ACE3 Regulacja optyki</Polish> <Polish>ACE3 Regulacja optyki</Polish>
<Russian>ACE3 Прицелы</Russian> <Russian>ACE3 Прицелы</Russian>
<Czech>ACE3 Nastavení optiky</Czech>
</Key> </Key>
<Key ID="STR_ACE_Common_ACEKeybindCategoryVehicles"> <Key ID="STR_ACE_Common_ACEKeybindCategoryVehicles">
<English>ACE3 Vehicles</English> <English>ACE3 Vehicles</English>
<Polish>ACE3 Pojazdy</Polish> <Polish>ACE3 Pojazdy</Polish>
<Russian>ACE3 Транспорт</Russian> <Russian>ACE3 Транспорт</Russian>
<Czech>ACE3 Vozidla</Czech>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project name="ACE"> <Project name="ACE">
<Package name="concertina_wire"> <Package name="concertina_wire">
<Key ID="STR_ACE_CONCERTINA_WIRE"> <Key ID="STR_ACE_CONCERTINA_WIRE">
@ -7,7 +7,7 @@
<Russian>Колючая проволока</Russian> <Russian>Колючая проволока</Russian>
<Polish>Koncentrina</Polish> <Polish>Koncentrina</Polish>
<Spanish>Alambre de espino</Spanish> <Spanish>Alambre de espino</Spanish>
<French>Concertina wire</French> <French>Fill barbelé</French>
<Czech>Ostnatý drát</Czech> <Czech>Ostnatý drát</Czech>
<Italian>Concertina wire</Italian> <Italian>Concertina wire</Italian>
<Hungarian>Concertina wire</Hungarian> <Hungarian>Concertina wire</Hungarian>
@ -19,7 +19,7 @@
<Russian>Колючая проволока (моток)</Russian> <Russian>Колючая проволока (моток)</Russian>
<Polish>Zwój koncentriny</Polish> <Polish>Zwój koncentriny</Polish>
<Spanish>Bobina de alambre de espino</Spanish> <Spanish>Bobina de alambre de espino</Spanish>
<French>Concertina wire coil</French> <French>Bobine de fil barbelé</French>
<Czech>Smyčka ostnatého drátu</Czech> <Czech>Smyčka ostnatého drátu</Czech>
<Italian>Concertina wire coil</Italian> <Italian>Concertina wire coil</Italian>
<Hungarian>Concertina wire coil</Hungarian> <Hungarian>Concertina wire coil</Hungarian>
@ -31,7 +31,7 @@
<Russian>Демонтировать колючую проволоку</Russian> <Russian>Демонтировать колючую проволоку</Russian>
<Polish>Zwiń koncentrinę</Polish> <Polish>Zwiń koncentrinę</Polish>
<Spanish>Desmontar alambre de espino</Spanish> <Spanish>Desmontar alambre de espino</Spanish>
<French>Dismount Concertina wire</French> <French>Descendre le fil barbelé</French>
<Czech>Svinout ostnatý drát</Czech> <Czech>Svinout ostnatý drát</Czech>
<Italian>Dismount Concertina wire</Italian> <Italian>Dismount Concertina wire</Italian>
<Hungarian>Dismount Concertina wire</Hungarian> <Hungarian>Dismount Concertina wire</Hungarian>
@ -43,7 +43,7 @@
<Russian>Монтировать колючую проволоку</Russian> <Russian>Монтировать колючую проволоку</Russian>
<Polish>Rozwiń koncentrinę</Polish> <Polish>Rozwiń koncentrinę</Polish>
<Spanish>Desplegar alambre de espino</Spanish> <Spanish>Desplegar alambre de espino</Spanish>
<French>Deploy Concertina wire</French> <French>Mettre en place le fil barbelé</French>
<Czech>Rozvinout ostnatý drát</Czech> <Czech>Rozvinout ostnatý drát</Czech>
<Italian>Deploy Concertina wire</Italian> <Italian>Deploy Concertina wire</Italian>
<Hungarian>Deploy Concertina wire</Hungarian> <Hungarian>Deploy Concertina wire</Hungarian>

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project name="ACE"> <Project name="ACE">
<Package name="Disarming"> <Package name="Disarming">
<Key ID="STR_ACE_Disarming_OpenInventory"> <Key ID="STR_ACE_Disarming_OpenInventory">

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project name="ACE"> <Project name="ACE">
<Package name="Disposable"> <Package name="Disposable">
<Key ID="STR_ACE_Disposable_UsedTube"> <Key ID="STR_ACE_Disposable_UsedTube">

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project name="ACE"> <Project name="ACE">
<Package name="Dragging"> <Package name="Dragging">
<Key ID="STR_ACE_Dragging_Drag"> <Key ID="STR_ACE_Dragging_Drag">

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project name="ACE"> <Project name="ACE">
<Package name="Explosives"> <Package name="Explosives">
<Key ID="STR_ACE_Explosives_Menu"> <Key ID="STR_ACE_Explosives_Menu">
@ -77,6 +77,8 @@
<English>Blocked</English> <English>Blocked</English>
<Spanish>Obstruido</Spanish> <Spanish>Obstruido</Spanish>
<Russian>Заблокировано</Russian> <Russian>Заблокировано</Russian>
<Czech>Blokováno</Czech>
<Polish>Zablokowany</Polish>
</Key> </Key>
<Key ID="STR_ACE_Explosives_CancelAction"> <Key ID="STR_ACE_Explosives_CancelAction">
<English>Cancel</English> <English>Cancel</English>
@ -529,6 +531,7 @@
<German>Sprengstoffsystem</German> <German>Sprengstoffsystem</German>
<Czech>Systém výbušnin</Czech> <Czech>Systém výbušnin</Czech>
<Portuguese>Sistema de explosivos</Portuguese> <Portuguese>Sistema de explosivos</Portuguese>
<French>Module explosifs</French>
<Hungarian>Robbanóanyag-rendszer</Hungarian> <Hungarian>Robbanóanyag-rendszer</Hungarian>
<Russian>Взрывные устройства</Russian> <Russian>Взрывные устройства</Russian>
</Key> </Key>
@ -539,6 +542,7 @@
<German>Benötigt Sprengstoffexperten?</German> <German>Benötigt Sprengstoffexperten?</German>
<Czech>Vyžadovat specialistu?</Czech> <Czech>Vyžadovat specialistu?</Czech>
<Portuguese>Requer especialista?</Portuguese> <Portuguese>Requer especialista?</Portuguese>
<French>Requiert un spécialiste?</French>
<Hungarian>Specialisták igénylése?</Hungarian> <Hungarian>Specialisták igénylése?</Hungarian>
<Russian>Требуется специалист?</Russian> <Russian>Требуется специалист?</Russian>
</Key> </Key>
@ -549,6 +553,7 @@
<German>Benötige Sprengstoffexperte um Sprengladungen zu entschärfen? Standard: Nein</German> <German>Benötige Sprengstoffexperte um Sprengladungen zu entschärfen? Standard: Nein</German>
<Czech>Vyžadovat specialistu na zneškodnění výbušniny? Výchozí: Ne</Czech> <Czech>Vyžadovat specialistu na zneškodnění výbušniny? Výchozí: Ne</Czech>
<Portuguese>Requer especialista em explosivos para desativar explosivos? Padrão: Não</Portuguese> <Portuguese>Requer especialista em explosivos para desativar explosivos? Padrão: Não</Portuguese>
<French>Le désarmoçage d'explosif requiert un spécialiste? Défaut: non</French>
<Hungarian>Szükséges-e egy specialista a robbanóanyagok hatástalanításához? Alapértelmezett: Nem</Hungarian> <Hungarian>Szükséges-e egy specialista a robbanóanyagok hatástalanításához? Alapértelmezett: Nem</Hungarian>
<Russian>Требуется ли специалист по минному делу для обезвреживания взрывчатки? По-умолчанию: Нет</Russian> <Russian>Требуется ли специалист по минному делу для обезвреживания взрывчатки? По-умолчанию: Нет</Russian>
</Key> </Key>
@ -559,6 +564,7 @@
<German>Bestrafe Nicht-Sprengstoffexperten?</German> <German>Bestrafe Nicht-Sprengstoffexperten?</German>
<Czech>Potrestat, pokud není specialista?</Czech> <Czech>Potrestat, pokud není specialista?</Czech>
<Portuguese>Punir não especialistas?</Portuguese> <Portuguese>Punir não especialistas?</Portuguese>
<French>Punir les non-spécialistes?</French>
<Hungarian>Nem-specialisták büntetése?</Hungarian> <Hungarian>Nem-specialisták büntetése?</Hungarian>
<Russian>Штраф не-специалистам?</Russian> <Russian>Штраф не-специалистам?</Russian>
</Key> </Key>
@ -569,6 +575,7 @@
<German>Entschärfungszeit für Nicht-Sprengstoffexperten erhöhen? Standard: Ja</German> <German>Entschärfungszeit für Nicht-Sprengstoffexperten erhöhen? Standard: Ja</German>
<Czech>Zvýšit čas potřebný k dokončení akce pokud není specialista? Výchozí: Ano</Czech> <Czech>Zvýšit čas potřebný k dokončení akce pokud není specialista? Výchozí: Ano</Czech>
<Portuguese>Aumentar o tempo necessário para completar ações por não especialistas? Padrão: Sim</Portuguese> <Portuguese>Aumentar o tempo necessário para completar ações por não especialistas? Padrão: Sim</Portuguese>
<French>Augmenter le temps nécessaire au désarmoçage pour les non-spécialistes? Défaut: oui</French>
<Hungarian>Nem-specialisták esetén több ideig tartson a cselekvés befejezése? Alapértelmezett: Igen</Hungarian> <Hungarian>Nem-specialisták esetén több ideig tartson a cselekvés befejezése? Alapértelmezett: Igen</Hungarian>
<Russian>Увеличивать время завершения действий для не-специалистов? По-умолчанию: Нет</Russian> <Russian>Увеличивать время завершения действий для не-специалистов? По-умолчанию: Нет</Russian>
</Key> </Key>
@ -578,6 +585,7 @@
<Polish>Eksplozja przy rozbrajaniu?</Polish> <Polish>Eksplozja przy rozbrajaniu?</Polish>
<Czech>Explodovat při zneškodňování?</Czech> <Czech>Explodovat při zneškodňování?</Czech>
<Spanish>Explotar al desactivar?</Spanish> <Spanish>Explotar al desactivar?</Spanish>
<French>Explosion si désamorçage?</French>
<Hungarian>Robbanás hatástalanításkor?</Hungarian> <Hungarian>Robbanás hatástalanításkor?</Hungarian>
<Russian>Взрыв при разминир.?</Russian> <Russian>Взрыв при разминир.?</Russian>
</Key> </Key>
@ -587,6 +595,7 @@
<Polish>Spraw, aby niektóre ładunki wybuchowe eksplodowały przy próbie ich rozbrojenia? Domyślnie:Tak</Polish> <Polish>Spraw, aby niektóre ładunki wybuchowe eksplodowały przy próbie ich rozbrojenia? Domyślnie:Tak</Polish>
<Czech>Umožnit u některých výbušnin explozi při pokusu je zneškodnit? Výchozí: Ano</Czech> <Czech>Umožnit u některých výbušnin explozi při pokusu je zneškodnit? Výchozí: Ano</Czech>
<Spanish>¿Habilitar ciertos explosivos para estallar al desactivar? Por defecto: Sí</Spanish> <Spanish>¿Habilitar ciertos explosivos para estallar al desactivar? Por defecto: Sí</Spanish>
<French>Permet à certains explosifs d'exploser au désamorçage? Défaut: oui</French>
<Hungarian>Meghatározott robbanóanyagok felrobbanjanak-e hatástalanításkor? Alapértelmezett: Igen</Hungarian> <Hungarian>Meghatározott robbanóanyagok felrobbanjanak-e hatástalanításkor? Alapértelmezett: Igen</Hungarian>
<Russian>Разрешить определенным взрывным устройствам взрываться при разминировании? По-умолчанию: Да</Russian> <Russian>Разрешить определенным взрывным устройствам взрываться при разминировании? По-умолчанию: Да</Russian>
</Key> </Key>
@ -596,6 +605,7 @@
<German>Dieses Modul erlaubt die Einstellungen für Sprengstoffe zu verändern.</German> <German>Dieses Modul erlaubt die Einstellungen für Sprengstoffe zu verändern.</German>
<Czech>Tento modul umoňuje přizpůsobit nastavení týkajících se výbušnin.</Czech> <Czech>Tento modul umoňuje přizpůsobit nastavení týkajících se výbušnin.</Czech>
<Portuguese>Este módulo permite personalizar as definições relacionadas a explosivos.</Portuguese> <Portuguese>Este módulo permite personalizar as definições relacionadas a explosivos.</Portuguese>
<French>Ce module ajuste les options relative aux explosifs</French>
<Hungarian>Ez a modul a robbanóanyagokhoz kötött beállításokat szabályozza.</Hungarian> <Hungarian>Ez a modul a robbanóanyagokhoz kötött beállításokat szabályozza.</Hungarian>
<Russian>Этот модуль управляет настройками, связанными со взрывными устройствами</Russian> <Russian>Этот модуль управляет настройками, связанными со взрывными устройствами</Russian>
</Key> </Key>

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project name="ACE"> <Project name="ACE">
<Package name="FCS"> <Package name="FCS">
<Key ID="STR_ACE_FCS_LaseTarget"> <Key ID="STR_ACE_FCS_LaseTarget">

View File

@ -4,59 +4,69 @@
<Key ID="STR_ACE_finger_indicatorForSelf_name"> <Key ID="STR_ACE_finger_indicatorForSelf_name">
<English>Show pointing indicator to self</English> <English>Show pointing indicator to self</English>
<Russian>Индикатор пальца для показывающего</Russian> <Russian>Индикатор пальца для показывающего</Russian>
<French>Afficher un indicateur de pointage pour soit même</French>
<Polish>Pokaż indykator wskazywania palcem dla siebie</Polish> <Polish>Pokaż indykator wskazywania palcem dla siebie</Polish>
<Hungarian>Saját mutatási indikátor megjelenítése</Hungarian> <Hungarian>Saját mutatási indikátor megjelenítése</Hungarian>
</Key> </Key>
<Key ID="STR_ACE_finger_indicatorForSelf_description"> <Key ID="STR_ACE_finger_indicatorForSelf_description">
<English>Render the indicator for the pointing player. This option doesn't affect whether the other players would see the indicator</English> <English>Render the indicator for the pointing player. This option doesn't affect whether the other players would see the indicator</English>
<Russian>Отображать индикатор указания пальцем для показывающего игрока. Эта настройка не влияет на то, будут ли другие игроки видеть индикатор</Russian> <Russian>Отображать индикатор указания пальцем для показывающего игрока. Эта настройка не влияет на то, будут ли другие игроки видеть индикатор</Russian>
<French>Affiche l'indicateur pour le joueur qui pointe. Cette option n'affecte pas les autres joueurs</French>
<Polish> Wyświetl indykator kiedy wskazujesz coś palcem. Ta opcja nie wpływa na to, czy inni gracze zobaczą ten indykator czy też nie.</Polish> <Polish> Wyświetl indykator kiedy wskazujesz coś palcem. Ta opcja nie wpływa na to, czy inni gracze zobaczą ten indykator czy też nie.</Polish>
<Hungarian>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.</Hungarian> <Hungarian>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.</Hungarian>
</Key> </Key>
<Key ID="STR_ACE_finger_indicatorColor_name"> <Key ID="STR_ACE_finger_indicatorColor_name">
<English>Pointing indicator</English> <English>Pointing indicator</English>
<Russian>Индикатор указания пальцем</Russian> <Russian>Индикатор указания пальцем</Russian>
<French>Indicateur de pointage</French>
<Polish>Indykator palca</Polish> <Polish>Indykator palca</Polish>
<Hungarian>Ujj-indikátor</Hungarian> <Hungarian>Ujj-indikátor</Hungarian>
</Key> </Key>
<Key ID="STR_ACE_finger_indicatorColor_description"> <Key ID="STR_ACE_finger_indicatorColor_description">
<English>Color of the pointing indicator circle</English> <English>Color of the pointing indicator circle</English>
<Russian>Цвет индикатора указания пальцем</Russian> <Russian>Цвет индикатора указания пальцем</Russian>
<French>Couleur de l'indicateur</French>
<Polish>Kolor okręgu wyświetlanego przy wskazywaniu palcem</Polish> <Polish>Kolor okręgu wyświetlanego przy wskazywaniu palcem</Polish>
<Hungarian>Mutatási indikátor körének színe</Hungarian> <Hungarian>Mutatási indikátor körének színe</Hungarian>
</Key> </Key>
<Key ID="STR_ACE_finger_keyComb"> <Key ID="STR_ACE_finger_keyComb">
<English>Action "point a finger at"</English> <English>Action "point a finger at"</English>
<Russian>Действие "показать пальцем на"</Russian> <Russian>Действие "показать пальцем на"</Russian>
<French>Action 'Pointer le doigt à"</French>
<Polish>Akcja "wskaż palcem"</Polish> <Polish>Akcja "wskaż palcem"</Polish>
<Hungarian>Cselekvés "ujj rámutatása"</Hungarian> <Hungarian>Cselekvés "ujj rámutatása"</Hungarian>
</Key> </Key>
<Key ID="STR_ACE_finger_keyComb_description"> <Key ID="STR_ACE_finger_keyComb_description">
<English>Points, and shows a virtual marker of where you are looking to nearby units. Can be held down.</English> <English>Points, and shows a virtual marker of where you are looking to nearby units. Can be held down.</English>
<French>Montre du doigt et affiche un marqueur virtuel de la direction pointée aux uinités proches. Peut être maintenu</French>
<Polish>Wskazuje a także wyświetla wirtualny marker-okrąg w miejscu, w które patrzysz, dla wszystkich pobliskich jednostek. Może być przytrzymywany.</Polish> <Polish>Wskazuje a także wyświetla wirtualny marker-okrąg w miejscu, w które patrzysz, dla wszystkich pobliskich jednostek. Może być przytrzymywany.</Polish>
<Hungarian>Mutat, és elhelyez egy virtuális jelölőt a nézett területhez közeli egységekhez. Lenyomva tartható.</Hungarian> <Hungarian>Mutat, és elhelyez egy virtuális jelölőt a nézett területhez közeli egységekhez. Lenyomva tartható.</Hungarian>
<Russian>Показывает пальцем и рисует виртуальный маркер в направлении взгляда ближайшим игрокам. Можно удерживать.</Russian> <Russian>Показывает пальцем и рисует виртуальный маркер в направлении взгляда ближайшим игрокам. Можно удерживать.</Russian>
</Key> </Key>
<Key ID="STR_ACE_finger_moduleSettings_displayName"> <Key ID="STR_ACE_finger_moduleSettings_displayName">
<English>Pointing Settings</English> <English>Pointing Settings</English>
<French>Option "Montrer du doigt"</French>
<Polish>Ustawienia wskazywania palcem</Polish> <Polish>Ustawienia wskazywania palcem</Polish>
<Hungarian>Ujj beállításai</Hungarian> <Hungarian>Ujj beállításai</Hungarian>
<Russian>Настройки указания пальцем</Russian> <Russian>Настройки указания пальцем</Russian>
</Key> </Key>
<Key ID="STR_ACE_finger_enabled_displayName"> <Key ID="STR_ACE_finger_enabled_displayName">
<English>Pointing Enabled</English> <English>Pointing Enabled</English>
<French>Activer "Montrer du doigt"</French>
<Polish>Aktywuj wskazywanie</Polish> <Polish>Aktywuj wskazywanie</Polish>
<Hungarian>Mutatás engedélyezése</Hungarian> <Hungarian>Mutatás engedélyezése</Hungarian>
<Russian>Указание пальцем включено</Russian> <Russian>Указание пальцем включено</Russian>
</Key> </Key>
<Key ID="STR_ACE_finger_maxRange_displayName"> <Key ID="STR_ACE_finger_maxRange_displayName">
<English>Pointing Max Range</English> <English>Pointing Max Range</English>
<French>Distance maximale du pointage</French>
<Polish>Maks. zasięg wskazywania</Polish> <Polish>Maks. zasięg wskazywania</Polish>
<Hungarian>Ujj maximum hatótávja</Hungarian> <Hungarian>Ujj maximum hatótávja</Hungarian>
<Russian>Макс. дальность</Russian> <Russian>Макс. дальность</Russian>
</Key> </Key>
<Key ID="STR_ACE_finger_maxRange_description"> <Key ID="STR_ACE_finger_maxRange_description">
<English>Max range between players to show the pointing indicator [default: 4 meters]</English> <English>Max range between players to show the pointing indicator [default: 4 meters]</English>
<French>Distance maximale entre joueurs pour afficher l'indicateur (défaut: 4 mètres)</French>
<Polish>Określ dystans na jakim można wskazywać coś palcem innym graczom. [domyślnie: 4m] </Polish> <Polish>Określ dystans na jakim można wskazywać coś palcem innym graczom. [domyślnie: 4m] </Polish>
<Hungarian>A maximális távolság, amelyben a közeli játékosoknak megjelenik az indikátor. [alapértelmezett: 4 méter]</Hungarian> <Hungarian>A maximális távolság, amelyben a közeli játékosoknak megjelenik az indikátor. [alapértelmezett: 4 méter]</Hungarian>
<Russian>Максимальная дальность между игроками для отображения индикатора указания пальцем [по-умолчанию: 4 метра]</Russian> <Russian>Максимальная дальность между игроками для отображения индикатора указания пальцем [по-умолчанию: 4 метра]</Russian>

View File

@ -5,31 +5,37 @@
<English>Fulton MX-991</English> <English>Fulton MX-991</English>
<Polish>Fulton MX-991</Polish> <Polish>Fulton MX-991</Polish>
<Russian>Fulton MX-991</Russian> <Russian>Fulton MX-991</Russian>
<Czech>Fulton MX-991</Czech>
</Key> </Key>
<Key ID="STR_ACE_Flashlights_MX991_Description"> <Key ID="STR_ACE_Flashlights_MX991_Description">
<English>Flashlight with red filter. For use on map.</English> <English>Flashlight with red filter. For use on map.</English>
<Polish>Latarka z czerwonym filtrem. Używana do podświetlania mapy.</Polish> <Polish>Latarka z czerwonym filtrem. Używana do podświetlania mapy.</Polish>
<Russian>Фонарь с красным светофильтром. Для использования на карте.</Russian> <Russian>Фонарь с красным светофильтром. Для использования на карте.</Russian>
<Czech>Svítilna s červeným filtrem. Pro nahlédnutí do mapy.</Czech>
</Key> </Key>
<Key ID="STR_ACE_Flashlights_XL50_DisplayName"> <Key ID="STR_ACE_Flashlights_XL50_DisplayName">
<English>Maglite XL50</English> <English>Maglite XL50</English>
<Polish>Maglite XL50</Polish> <Polish>Maglite XL50</Polish>
<Russian>Maglite XL50</Russian> <Russian>Maglite XL50</Russian>
<Czech>Maglite XL50</Czech>
</Key> </Key>
<Key ID="STR_ACE_Flashlights_XL50_Description"> <Key ID="STR_ACE_Flashlights_XL50_Description">
<English>White mini flashlight. For use on map.</English> <English>White mini flashlight. For use on map.</English>
<Polish>Mini latarka. Światło białe. Używana do podświetlania mapy.</Polish> <Polish>Mini latarka. Światło białe. Używana do podświetlania mapy.</Polish>
<Russian>Небольшой фонарик белого света. Для использования на карте.</Russian> <Russian>Небольшой фонарик белого света. Для использования на карте.</Russian>
<Czech>Bílá mini svítilna. Pro nahlédnutí do mapy.</Czech>
</Key> </Key>
<Key ID="STR_ACE_Flashlights_KSF1_DisplayName"> <Key ID="STR_ACE_Flashlights_KSF1_DisplayName">
<English>KSF-1</English> <English>KSF-1</English>
<Polish>KSF-1</Polish> <Polish>KSF-1</Polish>
<Russian>KSF-1</Russian> <Russian>KSF-1</Russian>
<Czech>KSF-1</Czech>
</Key> </Key>
<Key ID="STR_ACE_Flashlights_KSF1_Description"> <Key ID="STR_ACE_Flashlights_KSF1_Description">
<English>Flashlight with red filter. For use on map.</English> <English>Flashlight with red filter. For use on map.</English>
<Polish>Latarka z czerwonym filtrem. Używana do podświetlania mapy.</Polish> <Polish>Latarka z czerwonym filtrem. Używana do podświetlania mapy.</Polish>
<Russian>Фонарь с красным светофильтром. Для использования на карте.</Russian> <Russian>Фонарь с красным светофильтром. Для использования на карте.</Russian>
<Czech>Svítilna s červeným filtrem. Pro nahlédnutí do mapy.</Czech>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project name="ACE"> <Project name="ACE">
<Package name="Frag"> <Package name="Frag">
<Key ID="STR_ACE_Frag_EnableFrag"> <Key ID="STR_ACE_Frag_EnableFrag">
@ -8,6 +8,7 @@
<German>Splittersimulation</German> <German>Splittersimulation</German>
<Czech>Simulace fragmentace</Czech> <Czech>Simulace fragmentace</Czech>
<Portuguese>Simulação de fragmentação</Portuguese> <Portuguese>Simulação de fragmentação</Portuguese>
<French>Simulation de la fragmentation</French>
<Hungarian>Repesz-szimuláció</Hungarian> <Hungarian>Repesz-szimuláció</Hungarian>
<Russian>Симуляция осколков</Russian> <Russian>Симуляция осколков</Russian>
</Key> </Key>
@ -18,6 +19,7 @@
<German>Aktiviere die ACE-Splittersimulation</German> <German>Aktiviere die ACE-Splittersimulation</German>
<Czech>Povolit ACE simulaci fragmentace</Czech> <Czech>Povolit ACE simulaci fragmentace</Czech>
<Portuguese>Ativa a simulação de fragmentação do ACE</Portuguese> <Portuguese>Ativa a simulação de fragmentação do ACE</Portuguese>
<French>Active la simulation ACE de la fragmentation</French>
<Hungarian>Az ACE repesz-szimuláció engedélyezése</Hungarian> <Hungarian>Az ACE repesz-szimuláció engedélyezése</Hungarian>
<Russian>Включить симуляцию осколков ACE</Russian> <Russian>Включить симуляцию осколков ACE</Russian>
</Key> </Key>
@ -28,6 +30,7 @@
<German>Explosionssimulation</German> <German>Explosionssimulation</German>
<Czech>Simulace úlomků</Czech> <Czech>Simulace úlomků</Czech>
<Portuguese>Simulação de estilhaços</Portuguese> <Portuguese>Simulação de estilhaços</Portuguese>
<French>Simulation d'éclat</French>
<Hungarian>Pattogzás-szimuláció</Hungarian> <Hungarian>Pattogzás-szimuláció</Hungarian>
<Russian>Симуляция обломков</Russian> <Russian>Симуляция обломков</Russian>
</Key> </Key>
@ -38,6 +41,7 @@
<German>Aktiviere ACE-Explosionssimulation</German> <German>Aktiviere ACE-Explosionssimulation</German>
<Czech>Povolit ACE simulaci úlomků</Czech> <Czech>Povolit ACE simulaci úlomků</Czech>
<Portuguese>Ativa a simulação de estilhaços do ACE</Portuguese> <Portuguese>Ativa a simulação de estilhaços do ACE</Portuguese>
<French>Active la simulation d'éclat ACE</French>
<Hungarian>Az ACE pattogzás-szimuláció engedélyezése</Hungarian> <Hungarian>Az ACE pattogzás-szimuláció engedélyezése</Hungarian>
<Russian>Включить симуляцию обломков ACE</Russian> <Russian>Включить симуляцию обломков ACE</Russian>
</Key> </Key>
@ -48,6 +52,7 @@
<German>Maximalzahl der verfolgten Projektile</German> <German>Maximalzahl der verfolgten Projektile</German>
<Czech>Maximální počet sledovaných projektilů</Czech> <Czech>Maximální počet sledovaných projektilů</Czech>
<Portuguese>Máximo de projéteis rastreados</Portuguese> <Portuguese>Máximo de projéteis rastreados</Portuguese>
<French>Nombre maximum de projectile suivis</French>
<Hungarian>Maximum követett repeszek</Hungarian> <Hungarian>Maximum követett repeszek</Hungarian>
<Russian>Макс. количество отслеживаемых снарядов</Russian> <Russian>Макс. количество отслеживаемых снарядов</Russian>
</Key> </Key>
@ -58,6 +63,7 @@
<German>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 (&gt;200 Objekte gleichzeitig in der Luft)</German> <German>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 (&gt;200 Objekte gleichzeitig in der Luft)</German>
<Czech>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ů ( &gt;200 nábojů najednou ve vzduchu)</Czech> <Czech>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ů ( &gt;200 nábojů najednou ve vzduchu)</Czech>
<Portuguese>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 (&gt; 200 projéteis no ar ao mesmo tempo)</Portuguese> <Portuguese>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 (&gt; 200 projéteis no ar ao mesmo tempo)</Portuguese>
<French>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 (&gt;200 éclats en même temps)</French>
<Hungarian>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)</Hungarian> <Hungarian>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)</Hungarian>
<Russian>Эта настройка контролирует максимальное количество снарядов, которок отслеживает система осколков и обломков в каждый момент времени. Снаряды, выстреленные сверх этого числа, отслеживаться не будут. Уменьшите это значение, если вы не хотите падения FPS при большом количестве снарядов в одной перестрелке (&gt; 200 одновременно летящих снарядов)</Russian> <Russian>Эта настройка контролирует максимальное количество снарядов, которок отслеживает система осколков и обломков в каждый момент времени. Снаряды, выстреленные сверх этого числа, отслеживаться не будут. Уменьшите это значение, если вы не хотите падения FPS при большом количестве снарядов в одной перестрелке (&gt; 200 одновременно летящих снарядов)</Russian>
</Key> </Key>
@ -68,6 +74,7 @@
<Polish>Maks. liczba pocisków na klatkę</Polish> <Polish>Maks. liczba pocisków na klatkę</Polish>
<Czech>Maximální počet projektilů ze jeden snímek</Czech> <Czech>Maximální počet projektilů ze jeden snímek</Czech>
<Portuguese>Projéteis máximos por quadro</Portuguese> <Portuguese>Projéteis máximos por quadro</Portuguese>
<French>Nombre maximal de projectile par image</French>
<Hungarian>Maximum repesz/képkocka</Hungarian> <Hungarian>Maximum repesz/képkocka</Hungarian>
<Russian>Макс. количество снарядов за кадр</Russian> <Russian>Макс. количество снарядов за кадр</Russian>
</Key> </Key>
@ -78,6 +85,7 @@
<Spanish>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.</Spanish> <Spanish>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.</Spanish>
<Czech>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.</Czech> <Czech>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.</Czech>
<Portuguese>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.</Portuguese> <Portuguese>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.</Portuguese>
<French>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.</French>
<Hungarian>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.</Hungarian> <Hungarian>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.</Hungarian>
<Russian>Число обрабатываемых осколков за кадр. Это позволяет распределить нагрузку по отслеживанию осколков между несколькими кадрами, чтобы предотвратить падение FPS.</Russian> <Russian>Число обрабатываемых осколков за кадр. Это позволяет распределить нагрузку по отслеживанию осколков между несколькими кадрами, чтобы предотвратить падение FPS.</Russian>
</Key> </Key>
@ -88,6 +96,7 @@
<Czech>(Pouze SP) Debug sledování Frag/Úlomků</Czech> <Czech>(Pouze SP) Debug sledování Frag/Úlomků</Czech>
<German>(nur SP) Splitter-/Explosions-Debug-Verfolgung</German> <German>(nur SP) Splitter-/Explosions-Debug-Verfolgung</German>
<Portuguese>(Somente SP) Depuração de fragmentação e estilhaços traçantes</Portuguese> <Portuguese>(Somente SP) Depuração de fragmentação e estilhaços traçantes</Portuguese>
<French>(SP uniquement) Fragmentation/éclat debug</French>
<Hungarian>(Csak SP) Repesz/Pattogzás debug követés</Hungarian> <Hungarian>(Csak SP) Repesz/Pattogzás debug követés</Hungarian>
<Russian>(Только для одиночной игры) Отслеживаение/отладка осколков</Russian> <Russian>(Только для одиночной игры) Отслеживаение/отладка осколков</Russian>
</Key> </Key>
@ -98,6 +107,7 @@
<German>(nur SP) Splitter-/Explosions-Debugging</German> <German>(nur SP) Splitter-/Explosions-Debugging</German>
<Czech>(Pouze SP) Vyžaduje restart mise/editoru. Aktivuje vizuální stopování fragmentace a úlomů pouze v režimu jednoho hráče.</Czech> <Czech>(Pouze SP) Vyžaduje restart mise/editoru. Aktivuje vizuální stopování fragmentace a úlomů pouze v režimu jednoho hráče.</Czech>
<Portuguese>(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.</Portuguese> <Portuguese>(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.</Portuguese>
<French>(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</French>
<Hungarian>(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.</Hungarian> <Hungarian>(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.</Hungarian>
<Russian>(Только для одиночной игры) Требует перезапуска миссии/редактора. Включает визуальные следы от осколков и обломков в режиме одиночной игры.</Russian> <Russian>(Только для одиночной игры) Требует перезапуска миссии/редактора. Включает визуальные следы от осколков и обломков в режиме одиночной игры.</Russian>
</Key> </Key>

View File

@ -18,7 +18,7 @@
if (!alive ace_player) exitWith {}; if (!alive ace_player) exitWith {};
if (true) then { if (true) then {
// Detect if curator interface is open and disable effects // Detect if curator interface is open and disable effects
if (!isNull(findDisplay 312)) exitWith { if !(isNull curatorCamera) exitWith {
if (GVAR(EffectsActive)) then { if (GVAR(EffectsActive)) then {
call FUNC(removeGlassesEffect); call FUNC(removeGlassesEffect);
}; };

View File

@ -15,17 +15,14 @@
*/ */
#include "script_component.hpp" #include "script_component.hpp"
PARAMS_1(_unit); params ["_unit"];
private ["_currentGlasses", "_result", "_position", "_visible"]; private ["_currentGlasses", "_result", "_position", "_visible"];
_currentGlasses = goggles _unit; _currentGlasses = goggles _unit;
_result = false; _result = false;
if ((vehicle _unit) != _unit) exitWith {(cameraView != "GUNNER")};
if (_currentGlasses != "") then { if (_currentGlasses != "") then {
_position =(getPosASLW _unit); _position = getPosASLW _unit;
if (surfaceIsWater _position && {((_position select 2) < 0.25)}) exitWith { if (surfaceIsWater _position && {((_position select 2) < 0.25)}) exitWith {
_result = ([_currentGlasses] call FUNC(isDivingGoggles)); _result = ([_currentGlasses] call FUNC(isDivingGoggles));
}; };

View File

@ -28,66 +28,67 @@ class CfgAmmo {
}; };
class ACE_F_Hand_White: F_20mm_White { 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; timeToLive = 60;
}; };
class F_20mm_Red; class F_20mm_Red;
class ACE_F_Hand_Red: 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; timeToLive = 60;
}; };
class F_20mm_Green; class F_20mm_Green;
class ACE_F_Hand_Green: 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; timeToLive = 60;
}; };
class F_20mm_Yellow; class F_20mm_Yellow;
class ACE_F_Hand_Yellow: 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; timeToLive = 60;
}; };
class SmokeShell; 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 { class ACE_G_M84: SmokeShell {
GVAR(flashbang) = 1;
model = PATHTOF(models\ACE_m84_thrown.p3d); model = PATHTOF(models\ACE_m84_thrown.p3d);
dangerRadiusHit = -1; dangerRadiusHit = -1;
suppressionRadiusHit = 20; suppressionRadiusHit = 20;
typicalSpeed = 22; typicalSpeed = 22;
cost = 40; cost = 40;
explosive = 1E-7;
deflecting = 15; deflecting = 15;
explosionTime = 2.3;
timeToLive = 6; timeToLive = 6;
fuseDistance = 2.3;
grenadeFireSound[] = {}; grenadeFireSound[] = {};
grenadeBurningSound[] = {}; grenadeBurningSound[] = {};
aiAmmoUsageFlags = "0"; aiAmmoUsageFlags = "0";

View File

@ -1,3 +1,4 @@
class CfgMagazines { class CfgMagazines {
class HandGrenade; class HandGrenade;
class ACE_HandFlare_Base: HandGrenade { class ACE_HandFlare_Base: HandGrenade {
@ -8,55 +9,60 @@ class CfgMagazines {
mass = 4; mass = 4;
initSpeed = 22; initSpeed = 22;
}; };
class ACE_HandFlare_White: ACE_HandFlare_Base { class ACE_HandFlare_White: ACE_HandFlare_Base {
author = ECSTRING(common,ACETeam); author = ECSTRING(common,ACETeam);
scope = 2; scope = 2;
ammo = "ACE_F_Hand_White";
displayname = CSTRING(M127A1_White_Name); displayname = CSTRING(M127A1_White_Name);
descriptionshort = CSTRING(M127A1_White_Description); descriptionshort = CSTRING(M127A1_White_Description);
displayNameShort = CSTRING(M127A1_White_NameShort); displayNameShort = CSTRING(M127A1_White_NameShort);
model = "\A3\weapons_f\ammo\flare_white"; model = "\A3\weapons_f\ammo\flare_white";
picture = "\A3\Weapons_F\Data\UI\gear_flare_white_ca.paa"; picture = "\A3\Weapons_F\Data\UI\gear_flare_white_ca.paa";
ammo = "ACE_G_Handflare_White";
}; };
class ACE_HandFlare_Red: ACE_HandFlare_Base { class ACE_HandFlare_Red: ACE_HandFlare_Base {
author = ECSTRING(common,ACETeam); author = ECSTRING(common,ACETeam);
scope = 2; scope = 2;
ammo = "ACE_F_Hand_Red";
displayname = CSTRING(M127A1_Red_Name); displayname = CSTRING(M127A1_Red_Name);
descriptionshort = CSTRING(M127A1_Red_Description); descriptionshort = CSTRING(M127A1_Red_Description);
displayNameShort = CSTRING(M127A1_Red_NameShort); displayNameShort = CSTRING(M127A1_Red_NameShort);
model = "\A3\weapons_f\ammo\flare_red"; model = "\A3\weapons_f\ammo\flare_red";
picture = "\A3\Weapons_F\Data\UI\gear_flare_red_ca.paa"; picture = "\A3\Weapons_F\Data\UI\gear_flare_red_ca.paa";
ammo = "ACE_G_Handflare_Red";
}; };
class ACE_HandFlare_Green: ACE_HandFlare_Base { class ACE_HandFlare_Green: ACE_HandFlare_Base {
author = ECSTRING(common,ACETeam); author = ECSTRING(common,ACETeam);
scope = 2; scope = 2;
ammo = "ACE_F_Hand_Green";
displayname = CSTRING(M127A1_Green_Name); displayname = CSTRING(M127A1_Green_Name);
descriptionshort = CSTRING(M127A1_Green_Description); descriptionshort = CSTRING(M127A1_Green_Description);
displayNameShort = CSTRING(M127A1_Green_NameShort); displayNameShort = CSTRING(M127A1_Green_NameShort);
model = "\A3\weapons_f\ammo\flare_green"; model = "\A3\weapons_f\ammo\flare_green";
picture = "\A3\Weapons_F\Data\UI\gear_flare_green_ca.paa"; picture = "\A3\Weapons_F\Data\UI\gear_flare_green_ca.paa";
ammo = "ACE_G_Handflare_Green";
}; };
class ACE_HandFlare_Yellow: ACE_HandFlare_Base { class ACE_HandFlare_Yellow: ACE_HandFlare_Base {
author = ECSTRING(common,ACETeam); author = ECSTRING(common,ACETeam);
scope = 2; scope = 2;
ammo = "ACE_F_Hand_Yellow";
displayname = CSTRING(M127A1_Yellow_Name); displayname = CSTRING(M127A1_Yellow_Name);
descriptionshort = CSTRING(M127A1_Yellow_Description); descriptionshort = CSTRING(M127A1_Yellow_Description);
displayNameShort = CSTRING(M127A1_Yellow_NameShort); displayNameShort = CSTRING(M127A1_Yellow_NameShort);
model = "\A3\weapons_f\ammo\flare_yellow"; model = "\A3\weapons_f\ammo\flare_yellow";
picture = "\A3\Weapons_F\Data\UI\gear_flare_yellow_ca.paa"; picture = "\A3\Weapons_F\Data\UI\gear_flare_yellow_ca.paa";
ammo = "ACE_G_Handflare_Yellow";
}; };
class ACE_M84: HandGrenade { class ACE_M84: HandGrenade {
author = ECSTRING(common,ACETeam); author = ECSTRING(common,ACETeam);
ammo = "ACE_G_M84";
displayname = CSTRING(M84_Name); displayname = CSTRING(M84_Name);
descriptionshort = CSTRING(M84_Description); descriptionshort = CSTRING(M84_Description);
displayNameShort = "M84"; displayNameShort = "M84";
mass = 4;
model = PATHTOF(models\ACE_m84.p3d); model = PATHTOF(models\ACE_m84.p3d);
picture = PATHTOF(UI\ACE_m84_x_ca.paa); picture = PATHTOF(UI\ACE_m84_x_ca.paa);
ammo = "ACE_G_M84";
mass = 4;
}; };
class 3Rnd_UGL_FlareGreen_F; class 3Rnd_UGL_FlareGreen_F;
@ -65,6 +71,7 @@ class CfgMagazines {
ammo = "F_40mm_Green"; ammo = "F_40mm_Green";
initSpeed = 120; initSpeed = 120;
}; };
class 6Rnd_RedSignal_F: 6Rnd_GreenSignal_F { class 6Rnd_RedSignal_F: 6Rnd_GreenSignal_F {
author = ECSTRING(common,ACETeam); author = ECSTRING(common,ACETeam);
ammo = "F_40mm_Red"; ammo = "F_40mm_Red";

View File

@ -2,3 +2,7 @@
class ACE_M84FlashbangEffect { class ACE_M84FlashbangEffect {
// empty // empty
}; };
class ACE_HandFlareEffect {
// empty
};

View File

@ -2,6 +2,7 @@
ADDON = false; ADDON = false;
PREP(flare);
PREP(flashbangExplosionEH); PREP(flashbangExplosionEH);
PREP(flashbangThrownFuze); PREP(flashbangThrownFuze);
PREP(nextMode); PREP(nextMode);

View File

@ -0,0 +1,40 @@
/*
* Author: commy2
* Makes flare shine.
*
* Arguments:
* 0: The flare <OBJECT>
* 1: Color of flare <ARRAY>
* 2: Intensity of flare <NUMBER>
* 3: Flare lifetime <OBJECT>
*
* Return Value:
* None
*
* Example:
* [_nade, [0.5,0.5,0.5], 0.5, 60] call ace_grenades_fnc_flare
*
* Public: No
*/
#include "script_component.hpp"
params ["_projectile", "_color", "_intensity", "_timeToLive"];
private "_light";
_light = "#lightpoint" createVehicleLocal position _projectile;
_light setLightColor _color;
_light setLightAmbient _color;
_light setLightIntensity _intensity;
_light setLightBrightness 0.8;
_light setLightUseFlare true;
_light setLightFlareSize 3.0;
_light setLightFlareMaxDistance 1000;
_light setLightDayLight true;
_light lightAttachObject [_projectile, [0,0,0]];
//_light attachTo [_projectile, [0,0,0]];
[{deleteVehicle _this}, _light, _timeToLive, 1] call EFUNC(common,waitAndExecute);

View File

@ -21,17 +21,45 @@
*/ */
#include "script_component.hpp" #include "script_component.hpp"
private ["_mode", "_fuzeTime"]; params ["_unit", "_weapon", "", "", "_ammo", "", "_projectile"];
params ["_unit", "_weapon", "", "", "", "", "_projectile"];
if (_unit != ACE_player) exitWith {};
if (_weapon != "Throw") exitWith {}; if (_weapon != "Throw") exitWith {};
// http://feedback.arma3.com/view.php?id=12340
if (isNull _projectile) then {
_projectile = nearestObject [_unit, _ammo];
};
// handle special grenades
if (local _unit) then {
if (getNumber (configFile >> "CfgAmmo" >> _ammo >> QGVAR(flashbang)) == 1) then {
private "_fuzeTime";
_fuzeTime = getNumber (configFile >> "CfgAmmo" >> _ammo >> "explosionTime");
[FUNC(flashbangThrownFuze), [_projectile], _fuzeTime, 0] call EFUNC(common,waitAndExecute);
};
};
if (getNumber (configFile >> "CfgAmmo" >> _ammo >> QGVAR(flare)) == 1) then {
private ["_fuzeTime", "_timeToLive", "_color", "_intensity"];
_fuzeTime = getNumber (configFile >> "CfgAmmo" >> _ammo >> "explosionTime");
_timeToLive = getNumber (configFile >> "CfgAmmo" >> _ammo >> "timeToLive");
_color = getArray (configFile >> "CfgAmmo" >> _ammo >> QGVAR(color));
_intensity = _color select 3;
_color resize 3;
[FUNC(flare), [_projectile, _color, _intensity, _timeToLive], _fuzeTime, 0] call EFUNC(common,waitAndExecute);
};
// handle throw modes
if (_unit != ACE_player) exitWith {};
private "_mode";
_mode = missionNamespace getVariable [QGVAR(currentThrowMode), 0]; _mode = missionNamespace getVariable [QGVAR(currentThrowMode), 0];
if (_mode != 0) then { if (_mode != 0) then {
private "_velocity"; private "_velocity";
_velocity = velocity _projectile; _velocity = velocity _projectile;
switch (_mode) do { switch (_mode) do {
@ -59,9 +87,3 @@ if (_mode != 0) then {
_projectile setVelocity _velocity; _projectile setVelocity _velocity;
}; };
if (typeOf _projectile == "ACE_G_M84") then {
_fuzeTime = getNumber (configFile >> "CfgAmmo" >> typeOf _projectile >> "fuseDistance");
// _fuzeTime = getNumber (configFile >> "CfgAmmo" >> typeOf _projectile >> "explosionTime"); //@toDo pretty sure this should be explosionTime not fuseDistance
[FUNC(flashbangThrownFuze), [_projectile], _fuzeTime, 0] call EFUNC(common,waitAndExecute);
};

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project name="ACE"> <Project name="ACE">
<Package name="Grenades"> <Package name="Grenades">
<Key ID="STR_ACE_Grenades_SwitchGrenadeMode"> <Key ID="STR_ACE_Grenades_SwitchGrenadeMode">

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project name="ACE"> <Project name="ACE">
<Package name="Hearing"> <Package name="Hearing">
<Key ID="STR_ACE_Hearing_EarPlugs_Name"> <Key ID="STR_ACE_Hearing_EarPlugs_Name">
@ -116,6 +116,7 @@
<German>Gehör</German> <German>Gehör</German>
<Czech>Sluch</Czech> <Czech>Sluch</Czech>
<Portuguese>Audição</Portuguese> <Portuguese>Audição</Portuguese>
<French>Audition</French>
<Hungarian>Hallás</Hungarian> <Hungarian>Hallás</Hungarian>
<Russian>Слух</Russian> <Russian>Слух</Russian>
</Key> </Key>
@ -126,6 +127,7 @@
<German>Aktiviere Taubheit im Gefecht?</German> <German>Aktiviere Taubheit im Gefecht?</German>
<Czech>Povolit ztrátu sluchu?</Czech> <Czech>Povolit ztrátu sluchu?</Czech>
<Portuguese>Ativar surdez em combate?</Portuguese> <Portuguese>Ativar surdez em combate?</Portuguese>
<French>Activer la surdité au combat?</French>
<Hungarian>Harci süketség engedélyezése?</Hungarian> <Hungarian>Harci süketség engedélyezése?</Hungarian>
<Russian>Оглушение</Russian> <Russian>Оглушение</Russian>
</Key> </Key>
@ -136,6 +138,9 @@
<German>Aktiviere Taubheit im Gefecht?</German> <German>Aktiviere Taubheit im Gefecht?</German>
<Czech>Povolit ztrátu sluchu?</Czech> <Czech>Povolit ztrátu sluchu?</Czech>
<Portuguese>Ativar surdez em combate?</Portuguese> <Portuguese>Ativar surdez em combate?</Portuguese>
</Key>
<Key ID="STR_ACE_Hearing_Module_Description">
<French>Activer la surdité au combat?</French>
<Hungarian>Harci süketség engedélyezése?</Hungarian> <Hungarian>Harci süketség engedélyezése?</Hungarian>
<Russian>Уменьшает способность игроков слышать при повреждении слуха</Russian> <Russian>Уменьшает способность игроков слышать при повреждении слуха</Russian>
</Key> </Key>
@ -145,15 +150,17 @@
<German>Dieses Modul aktiviert/deaktiviert die Taubheit im Gefecht. Wenn aktiviert, können Spieler ohne Gehörschutz taub werden, wenn eine Waffe in ihrer Nähe abgefeuert wird oder eine Explosion stattfindet.</German> <German>Dieses Modul aktiviert/deaktiviert die Taubheit im Gefecht. Wenn aktiviert, können Spieler ohne Gehörschutz taub werden, wenn eine Waffe in ihrer Nähe abgefeuert wird oder eine Explosion stattfindet.</German>
<Czech>Ztráta sluchu je možná ve chvíly, kdy se v bezprostřední blízkosti střílí z velkorážní zbraně nebo při bombardování a osoba je bez ochrany sluchu (např. špunty). Tento modul umožňuje tuto věc povolit nebo zakázat.</Czech> <Czech>Ztráta sluchu je možná ve chvíly, kdy se v bezprostřední blízkosti střílí z velkorážní zbraně nebo při bombardování a osoba je bez ochrany sluchu (např. špunty). Tento modul umožňuje tuto věc povolit nebo zakázat.</Czech>
<Portuguese>Este módulo ativa / desativa surdez em combate. Quando ativado, os jogadores podem ficar surdos quando uma arma é disparada ao seu redor ou uma explosão ocorre sem proteção auditiva.</Portuguese> <Portuguese>Este módulo ativa / desativa surdez em combate. Quando ativado, os jogadores podem ficar surdos quando uma arma é disparada ao seu redor ou uma explosão ocorre sem proteção auditiva.</Portuguese>
<Russian>Контролирует оглушение в бою и звон в ушах. При активации играки могут быть оглушены близкими выстрелами и взрывами при отсутствии защиты для ушей.</Russian> <French>Ce module active / désactivé la surdité au combat. Si active, des joueurs peuvent devenir sourds sans protection d'oreille, si une arme est utilisée ou une explosion a lieu à proximité</French>
</Key> </Key>
<Key ID="STR_ACE_Hearing_enabledForZeusUnits_DisplayName"> <Key ID="STR_ACE_Hearing_enabledForZeusUnits_DisplayName">
<English>Affects Zeus RC</English> <English>Effect Zeus RC</English>
<Polish>Wpływ na Zeus RC</Polish>
<Russian>Влияет на юнита Зевса</Russian> <Russian>Влияет на юнита Зевса</Russian>
</Key> </Key>
<Key ID="STR_ACE_Hearing_enabledForZeusUnits_Description"> <Key ID="STR_ACE_Hearing_enabledForZeusUnits_Description">
<English>Allow zeus remote controlled units to be able to take hearing damage.</English> <English>Allow zeus remote controlled units to be able to take hearing damage.</English>
<Russian>Позволить юнитам, контролируемым Зевсом, получать повреждение слуха.</Russian> <Polish>Aktywuj efekty utraty słuchu dla jednostek kontrolowanych zdalnie przez Zeusa.</Polish>
<Russian>Контролирует оглушение в бою и звон в ушах. При активации играки могут быть оглушены близкими выстрелами и взрывами при отсутствии защиты для ушей.</Russian>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project name="ACE"> <Project name="ACE">
<Package name="HuntIR"> <Package name="HuntIR">
<Key ID="STR_DN_ACE_HUNTIRBOX"> <Key ID="STR_DN_ACE_HUNTIRBOX">

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project name="ACE"> <Project name="ACE">
<Package name="Interact_Menu"> <Package name="Interact_Menu">
<Key ID="STR_ACE_Interact_Menu_AlwaysUseCursorSelfInteraction"> <Key ID="STR_ACE_Interact_Menu_AlwaysUseCursorSelfInteraction">
@ -90,6 +90,7 @@
<Polish>Akcje Zeusa</Polish> <Polish>Akcje Zeusa</Polish>
<Czech>Akce Zeuse</Czech> <Czech>Akce Zeuse</Czech>
<Spanish>Acciones Zeus</Spanish> <Spanish>Acciones Zeus</Spanish>
<French>Actions Zeus</French>
<Hungarian>Zeus cselekvések</Hungarian> <Hungarian>Zeus cselekvések</Hungarian>
<Portuguese>Ações do Zeus</Portuguese> <Portuguese>Ações do Zeus</Portuguese>
<Russian>Действия Зевса</Russian> <Russian>Действия Зевса</Russian>
@ -233,6 +234,7 @@
<Czech>Pozadí menu interakce</Czech> <Czech>Pozadí menu interakce</Czech>
<German>Interaktionsmenü-Hintergrund</German> <German>Interaktionsmenü-Hintergrund</German>
<Portuguese>Fundo do menu de interação</Portuguese> <Portuguese>Fundo do menu de interação</Portuguese>
<French>Arrière plan du menu d'interaction</French>
<Hungarian>Cselekvő menü háttere</Hungarian> <Hungarian>Cselekvő menü háttere</Hungarian>
<Russian>Фон меню взаимодействия</Russian> <Russian>Фон меню взаимодействия</Russian>
</Key> </Key>
@ -240,9 +242,10 @@
<English>Blur the background while the interaction menu is open.</English> <English>Blur the background while the interaction menu is open.</English>
<Polish>Rozmywa lub przyciemnia tło na czas otwarcia menu interakcji</Polish> <Polish>Rozmywa lub przyciemnia tło na czas otwarcia menu interakcji</Polish>
<Spanish>Desenfocar el fondo mientras el menú de interacción está abierto.</Spanish> <Spanish>Desenfocar el fondo mientras el menú de interacción está abierto.</Spanish>
<Czech>Rozmazat obraz pokud je interakční menu otevřené.</Czech> <Czech>Rozmazat obraz při otevřeném interakčním menu.</Czech>
<German>Den Hintergrund verschwimmen lassen, während das Interaktionsmenü geöffnet ist.</German> <German>Den Hintergrund verschwimmen lassen, während das Interaktionsmenü geöffnet ist.</German>
<Portuguese>Desfocar o fundo enquanto o menu de interação está aberto.</Portuguese> <Portuguese>Desfocar o fundo enquanto o menu de interação está aberto.</Portuguese>
<French>Flouter l'arrière plan durant l'ouverture du menu d'interaction</French>
<Hungarian>A háttér elmosása a cselekvő menü használata alatt.</Hungarian> <Hungarian>A háttér elmosása a cselekvő menü használata alatt.</Hungarian>
<Russian>Размыть фон, пока открыто меню взаимодействия.</Russian> <Russian>Размыть фон, пока открыто меню взаимодействия.</Russian>
</Key> </Key>
@ -253,6 +256,7 @@
<Czech>Rozmazaný obraz</Czech> <Czech>Rozmazaný obraz</Czech>
<German>Verschwommenes Bild</German> <German>Verschwommenes Bild</German>
<Portuguese>Desfoque de tela</Portuguese> <Portuguese>Desfoque de tela</Portuguese>
<French>Flouter l'écran</French>
<Hungarian>Kép elmosása</Hungarian> <Hungarian>Kép elmosása</Hungarian>
<Russian>Размытый</Russian> <Russian>Размытый</Russian>
</Key> </Key>
@ -260,9 +264,10 @@
<English>Black</English> <English>Black</English>
<Polish>Przyciemnienie ekranu</Polish> <Polish>Przyciemnienie ekranu</Polish>
<Spanish>Negro</Spanish> <Spanish>Negro</Spanish>
<Czech>Černý obraz</Czech> <Czech>Tmavý</Czech>
<Portuguese>Preto</Portuguese> <Portuguese>Preto</Portuguese>
<German>Schwarz</German> <German>Schwarz</German>
<French>Noir</French>
<Hungarian>Fekete</Hungarian> <Hungarian>Fekete</Hungarian>
<Russian>Черный</Russian> <Russian>Черный</Russian>
</Key> </Key>
@ -271,6 +276,7 @@
<Polish>Pokazuj akcje dla budynków</Polish> <Polish>Pokazuj akcje dla budynków</Polish>
<Czech>Zobrazit akci pro budovy</Czech> <Czech>Zobrazit akci pro budovy</Czech>
<Spanish>Mostrar acciones para edificios</Spanish> <Spanish>Mostrar acciones para edificios</Spanish>
<French>Affiche les actions pour les batiments</French>
<Hungarian>Cselekvések mutatása épületeknél</Hungarian> <Hungarian>Cselekvések mutatása épületeknél</Hungarian>
<Portuguese>Mostrar ações para edifícios</Portuguese> <Portuguese>Mostrar ações para edifícios</Portuguese>
<Russian>Показывать действия для зданий</Russian> <Russian>Показывать действия для зданий</Russian>
@ -280,6 +286,7 @@
<Polish>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.</Polish> <Polish>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.</Polish>
<Czech>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.) </Czech> <Czech>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.) </Czech>
<Spanish>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)</Spanish> <Spanish>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)</Spanish>
<French>Ajoute des interactions pour ouvrir les portes et les échelles des batiments. (Note: l'ouverture du menu en ville dégrade les performances)</French>
<Hungarian>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)</Hungarian> <Hungarian>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)</Hungarian>
<Portuguese>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)</Portuguese> <Portuguese>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)</Portuguese>
<Russian>Добавляет действия открывания дверей и залезания на лестницы для зданий. (Примечание: возможно падение производительности при открытии меню взаимодействия, особенно в городах)</Russian> <Russian>Добавляет действия открывания дверей и залезания на лестницы для зданий. (Примечание: возможно падение производительности при открытии меню взаимодействия, особенно в городах)</Russian>
@ -288,6 +295,7 @@
<English>Interaction Menu</English> <English>Interaction Menu</English>
<Polish>Menu interakcji</Polish> <Polish>Menu interakcji</Polish>
<Russian>Меню взаимодействия</Russian> <Russian>Меню взаимодействия</Russian>
<Czech>Menu interakce</Czech>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -774,6 +774,7 @@
<Polish>Otwórz</Polish> <Polish>Otwórz</Polish>
<Czech>Otevřít</Czech> <Czech>Otevřít</Czech>
<Spanish>Abrir</Spanish> <Spanish>Abrir</Spanish>
<French>Ouvrir</French>
<Hungarian>Nyitás</Hungarian> <Hungarian>Nyitás</Hungarian>
<Portuguese>Abrir</Portuguese> <Portuguese>Abrir</Portuguese>
<Russian>Открыть</Russian> <Russian>Открыть</Russian>
@ -785,6 +786,7 @@
<German>Interaktionssystem</German> <German>Interaktionssystem</German>
<Czech>Systém interakce</Czech> <Czech>Systém interakce</Czech>
<Russian>Взаимодействие</Russian> <Russian>Взаимодействие</Russian>
<French>Système d'interaction</French>
<Hungarian>Interakciós rendszer</Hungarian> <Hungarian>Interakciós rendszer</Hungarian>
<Portuguese>Sistema de interação</Portuguese> <Portuguese>Sistema de interação</Portuguese>
</Key> </Key>
@ -795,6 +797,7 @@
<German>Aktiviere Gruppenverwaltung</German> <German>Aktiviere Gruppenverwaltung</German>
<Czech>Povolit správu týmu</Czech> <Czech>Povolit správu týmu</Czech>
<Russian>Управление группами</Russian> <Russian>Управление группами</Russian>
<French>Active la gestion d'équipe</French>
<Hungarian>Csapatkezelés engedélyezése</Hungarian> <Hungarian>Csapatkezelés engedélyezése</Hungarian>
<Portuguese>Habilitar gestão de equipes</Portuguese> <Portuguese>Habilitar gestão de equipes</Portuguese>
</Key> </Key>
@ -805,6 +808,7 @@
<German>Sollen Spieler das Gruppenverwaltungsmenü verwenden dürfen? Standard: Ja</German> <German>Sollen Spieler das Gruppenverwaltungsmenü verwenden dürfen? Standard: Ja</German>
<Czech>Mohou hráči použít menu správy týmu? Výchozí: Ano</Czech> <Czech>Mohou hráči použít menu správy týmu? Výchozí: Ano</Czech>
<Russian>Разрешить ли игрокам использовать меню управления группами? По-умолчани: Да</Russian> <Russian>Разрешить ли игрокам использовать меню управления группами? По-умолчани: Да</Russian>
<French>Permettre aux joueurs d'utiliser la gestion de groupe? Défaut: oui</French>
<Hungarian>A játékosoknak engedélyezve legyen a csapatkezelő menü? Alapértelmezett: Igen</Hungarian> <Hungarian>A játékosoknak engedélyezve legyen a csapatkezelő menü? Alapértelmezett: Igen</Hungarian>
<Portuguese>Devem os jogadores ter permissão de usar o menu de gestão de equipes? Padrão: Sim</Portuguese> <Portuguese>Devem os jogadores ter permissão de usar o menu de gestão de equipes? Padrão: Sim</Portuguese>
</Key> </Key>
@ -814,6 +818,7 @@
<German>Die Gruppenverwaltung erlaubt die Zuweisung von Farben für Einheiten, die Kommandierung und das Beitreten/Verlassen einer Gruppe.</German> <German>Die Gruppenverwaltung erlaubt die Zuweisung von Farben für Einheiten, die Kommandierung und das Beitreten/Verlassen einer Gruppe.</German>
<Czech>Správa týmu se skládá z: přidělení barev pro členy týmu, převzetí velení, připojení/odpojení. </Czech> <Czech>Správa týmu se skládá z: přidělení barev pro členy týmu, převzetí velení, připojení/odpojení. </Czech>
<Spanish>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.</Spanish> <Spanish>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.</Spanish>
<French>La gestion d'équipe permet l'allocation de couleur aux membres d'équipe, de prendre le commandement, de rejoindre ou quitter une équipe. </French>
<Hungarian>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.</Hungarian> <Hungarian>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.</Hungarian>
<Portuguese>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.</Portuguese> <Portuguese>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.</Portuguese>
<Russian>Управление группами позволяет назначать цвета членам групп, брать командование, вступать в группы или покидать их.</Russian> <Russian>Управление группами позволяет назначать цвета членам групп, брать командование, вступать в группы или покидать их.</Russian>

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project name="ACE"> <Project name="ACE">
<Package name="Inventory"> <Package name="Inventory">
<Key ID="STR_ACE_Inventory_SettingName"> <Key ID="STR_ACE_Inventory_SettingName">

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project name="ACE"> <Project name="ACE">
<Package name="Javelin"> <Package name="Javelin">
<Key ID="STR_ACE_Javelin_LockTarget"> <Key ID="STR_ACE_Javelin_LockTarget">

View File

@ -4,8 +4,8 @@
#define PREFIX ace #define PREFIX ace
#define MAJOR 3 #define MAJOR 3
#define MINOR 2 #define MINOR 3
#define PATCHLVL 2 #define PATCHLVL 0
#define BUILD 0 #define BUILD 0
#define VERSION MAJOR.MINOR.PATCHLVL.BUILD #define VERSION MAJOR.MINOR.PATCHLVL.BUILD

View File

@ -5,6 +5,7 @@
<English>ACE Logistics</English> <English>ACE Logistics</English>
<Polish>ACE Logistyka</Polish> <Polish>ACE Logistyka</Polish>
<Russian>ACE: логистика</Russian> <Russian>ACE: логистика</Russian>
<Czech>ACE Logistika</Czech>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -99,3 +99,13 @@ call FUNC(determineZoom);
}; };
}; };
}] call EFUNC(common,addEventHandler); }] 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);

View File

@ -2,3 +2,6 @@
#include "script_component.hpp" #include "script_component.hpp"
((_this select 0) displayCtrl 1016) ctrlShow GVAR(mapShowCursorCoordinates); ((_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);

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project name="ACE"> <Project name="ACE">
<Package name="Map"> <Package name="Map">
<Key ID="STR_ACE_Map_Module_DisplayName"> <Key ID="STR_ACE_Map_Module_DisplayName">
@ -8,6 +8,7 @@
<German>Karte</German> <German>Karte</German>
<Czech>Mapa</Czech> <Czech>Mapa</Czech>
<Portuguese>Mapa</Portuguese> <Portuguese>Mapa</Portuguese>
<French>Carte</French>
<Hungarian>Térkép</Hungarian> <Hungarian>Térkép</Hungarian>
<Russian>Карта</Russian> <Russian>Карта</Russian>
</Key> </Key>
@ -18,19 +19,24 @@
<German>Kartenausleuchtung</German> <German>Kartenausleuchtung</German>
<Czech>Osvětlení mapy</Czech> <Czech>Osvětlení mapy</Czech>
<Portuguese>Iluminação do mapa?</Portuguese> <Portuguese>Iluminação do mapa?</Portuguese>
<French>Luminosité</French>
<Hungarian>Térkép megvilágítása?</Hungarian> <Hungarian>Térkép megvilágítása?</Hungarian>
<Russian>Освещение карты?</Russian> <Russian>Освещение карты?</Russian>
</Key> </Key>
<Key ID="STR_ACE_Map_MapIllumination_Description"> <Key ID="STR_ACE_Map_MapIllumination_Description">
<English>Simulate map lighting based on ambient lighting and player's items?</English> <English>Simulate map lighting based on ambient lighting and player's items?</English>
<Polish>Symuluj oświetlenie mapy bazujące na oświetleniu otoczenia oraz przedmiotach gracza?</Polish>
<French>Calcul la luminosité de la carte en fonction des conditions de lumière</French>
<Russian>Симулировать освещение карты на основе окружающего света и приборов игрока?</Russian> <Russian>Симулировать освещение карты на основе окружающего света и приборов игрока?</Russian>
</Key> </Key>
<Key ID="STR_ACE_Map_MapGlow_DisplayName"> <Key ID="STR_ACE_Map_MapGlow_DisplayName">
<English>Map flashlight glow?</English> <English>Map flashlight glow?</English>
<Polish>Poświata latarki</Polish>
<Russian>Свет фонаря на карте?</Russian> <Russian>Свет фонаря на карте?</Russian>
</Key> </Key>
<Key ID="STR_ACE_Map_MapGlow_Description"> <Key ID="STR_ACE_Map_MapGlow_Description">
<English>Add external glow to players who use flashlight on map?</English> <English>Add external glow to players who use flashlight on map?</English>
<Polish>Pokaż poświatę światła latarki na graczu, który używa latarki na widoku mapy?</Polish>
<Russian>Добавить свет при использовании фонаря на карте?</Russian> <Russian>Добавить свет при использовании фонаря на карте?</Russian>
</Key> </Key>
<Key ID="STR_ACE_Map_MapShake_DisplayName"> <Key ID="STR_ACE_Map_MapShake_DisplayName">
@ -40,6 +46,7 @@
<German>Kamerawackeln</German> <German>Kamerawackeln</German>
<Czech>Třesení mapy?</Czech> <Czech>Třesení mapy?</Czech>
<Portuguese>Tremor de mapa?</Portuguese> <Portuguese>Tremor de mapa?</Portuguese>
<French>Tremblement de la carte?</French>
<Hungarian>Térkép-rázkódás?</Hungarian> <Hungarian>Térkép-rázkódás?</Hungarian>
<Russian>Тряска карты?</Russian> <Russian>Тряска карты?</Russian>
</Key> </Key>
@ -50,6 +57,7 @@
<German>Kamerawackeln beim Gehen?</German> <German>Kamerawackeln beim Gehen?</German>
<Czech>Umožnit třesení mapy za pochodu?</Czech> <Czech>Umožnit třesení mapy za pochodu?</Czech>
<Portuguese>Tremer o mapa enquanto caminha?</Portuguese> <Portuguese>Tremer o mapa enquanto caminha?</Portuguese>
<French>La carte tremble lors d'un déplacement?</French>
<Hungarian>Rázkódjon-e a térkép mozgáskor?</Hungarian> <Hungarian>Rázkódjon-e a térkép mozgáskor?</Hungarian>
<Russian>Заставлять карту трястись при ходьбе?</Russian> <Russian>Заставлять карту трястись при ходьбе?</Russian>
</Key> </Key>
@ -60,6 +68,7 @@
<German>Kartenzoom einschränken</German> <German>Kartenzoom einschränken</German>
<Czech>Omezit přiblížení mapy?</Czech> <Czech>Omezit přiblížení mapy?</Czech>
<Portuguese>Limitar zoom do mapa?</Portuguese> <Portuguese>Limitar zoom do mapa?</Portuguese>
<French>Limiter le zoom de la carte?</French>
<Hungarian>Térkép-nagyítás korlátozása?</Hungarian> <Hungarian>Térkép-nagyítás korlátozása?</Hungarian>
<Russian>Ограничить приближение карты?</Russian> <Russian>Ограничить приближение карты?</Russian>
</Key> </Key>
@ -70,6 +79,7 @@
<German>Zoomstufe der Karte einschränken?</German> <German>Zoomstufe der Karte einschränken?</German>
<Czech>Omezit stupeň přiblížení pro mapu?</Czech> <Czech>Omezit stupeň přiblížení pro mapu?</Czech>
<Portuguese>Limitar a quantidade de zoom disponível para o mapa?</Portuguese> <Portuguese>Limitar a quantidade de zoom disponível para o mapa?</Portuguese>
<French>Limite le zoom maximum pour la carte?</French>
<Hungarian>Korlátozva legyen-e a nagyítás mennyisége a térképnél?</Hungarian> <Hungarian>Korlátozva legyen-e a nagyítás mennyisége a térképnél?</Hungarian>
<Russian>Ограничить максимальное приближение, доступное на карте?</Russian> <Russian>Ограничить максимальное приближение, доступное на карте?</Russian>
</Key> </Key>
@ -80,6 +90,7 @@
<German>Zeige Cursor-Koordinaten?</German> <German>Zeige Cursor-Koordinaten?</German>
<Czech>Zobrazit souřadnice u kurzoru?</Czech> <Czech>Zobrazit souřadnice u kurzoru?</Czech>
<Portuguese>Mostrar coordenadas no cursor?</Portuguese> <Portuguese>Mostrar coordenadas no cursor?</Portuguese>
<French>Afficher les coordonnées sur le curseur?</French>
<Hungarian>Kurzor-koordináták mutatása?</Hungarian> <Hungarian>Kurzor-koordináták mutatása?</Hungarian>
<Russian>Показывать координаты курсора?</Russian> <Russian>Показывать координаты курсора?</Russian>
</Key> </Key>
@ -90,6 +101,7 @@
<German>Gitter-Koordinaten auf dem Mauszeiger anzeigen?</German> <German>Gitter-Koordinaten auf dem Mauszeiger anzeigen?</German>
<Czech>Zobrazit souřadnice u kurzoru v mapě?</Czech> <Czech>Zobrazit souřadnice u kurzoru v mapě?</Czech>
<Portuguese>Mostrar as coordenadas de grade no ponteiro do mouse?</Portuguese> <Portuguese>Mostrar as coordenadas de grade no ponteiro do mouse?</Portuguese>
<French>Affiche les coordonnées à coté du curseur?</French>
<Hungarian>Mutatva legyen-e a kurzornál található rész rácskoordinátája?</Hungarian> <Hungarian>Mutatva legyen-e a kurzornál található rész rácskoordinátája?</Hungarian>
<Russian>Показывать координаты около курсора мыши?</Russian> <Russian>Показывать координаты около курсора мыши?</Russian>
</Key> </Key>
@ -99,6 +111,7 @@
<German>Dieses Modul erweitert die Kartenfunktionen.</German> <German>Dieses Modul erweitert die Kartenfunktionen.</German>
<Czech>Tento modul umožňuje přizpůsobit mapu s obrazem.</Czech> <Czech>Tento modul umožňuje přizpůsobit mapu s obrazem.</Czech>
<Portuguese>Este módulo permite que você personalize a tela de mapa.</Portuguese> <Portuguese>Este módulo permite que você personalize a tela de mapa.</Portuguese>
<French>Ce module permet de personnaliser l'écran de la carte</French>
<Hungarian>Ez a modul lehetővé teszi a térképnézet testreszabását.</Hungarian> <Hungarian>Ez a modul lehetővé teszi a térképnézet testreszabását.</Hungarian>
<Russian>Этот модуль позволяет настроить отображение карты.</Russian> <Russian>Этот модуль позволяет настроить отображение карты.</Russian>
</Key> </Key>
@ -109,6 +122,7 @@
<German>Blue Force Tracking</German> <German>Blue Force Tracking</German>
<Czech>Blue Force Tracking</Czech> <Czech>Blue Force Tracking</Czech>
<Portuguese>Rastreio de forças azuis</Portuguese> <Portuguese>Rastreio de forças azuis</Portuguese>
<French>Blue Force Tracking</French>
<Hungarian>Blue Force követés</Hungarian> <Hungarian>Blue Force követés</Hungarian>
<Russian>Система слежения Blue Force Tracking</Russian> <Russian>Система слежения Blue Force Tracking</Russian>
</Key> </Key>
@ -118,6 +132,7 @@
<Polish>Aktywuj BFT</Polish> <Polish>Aktywuj BFT</Polish>
<Czech>Povolit BFT</Czech> <Czech>Povolit BFT</Czech>
<Spanish>Activar BFT</Spanish> <Spanish>Activar BFT</Spanish>
<French>Activer le Suivi des Forces Alliées</French>
<Hungarian>BFT engedélyezése</Hungarian> <Hungarian>BFT engedélyezése</Hungarian>
<Russian>Включить BFT</Russian> <Russian>Включить BFT</Russian>
</Key> </Key>
@ -127,6 +142,7 @@
<Polish>Aktywuj Blue Force Tracking. Domyślnie: Nie</Polish> <Polish>Aktywuj Blue Force Tracking. Domyślnie: Nie</Polish>
<Czech>Povolit Blue Force Tracking. Výchozí: Ne</Czech> <Czech>Povolit Blue Force Tracking. Výchozí: Ne</Czech>
<Spanish>Activar Blue Force Tracking. Por defecto: No</Spanish> <Spanish>Activar Blue Force Tracking. Por defecto: No</Spanish>
<French>Activer le SFA. Défaut: non</French>
<Hungarian>Blue Force követés engedélyezése. Alapértelmezett: Nem</Hungarian> <Hungarian>Blue Force követés engedélyezése. Alapértelmezett: Nem</Hungarian>
<Russian>Включает систему служения BFT. По-умолчанию: Нет</Russian> <Russian>Включает систему служения BFT. По-умолчанию: Нет</Russian>
</Key> </Key>
@ -137,6 +153,7 @@
<German>Intervall</German> <German>Intervall</German>
<Czech>Interval</Czech> <Czech>Interval</Czech>
<Portuguese>Intervalo</Portuguese> <Portuguese>Intervalo</Portuguese>
<French>Intervalle</French>
<Hungarian>Intervallum</Hungarian> <Hungarian>Intervallum</Hungarian>
<Russian>Интервал</Russian> <Russian>Интервал</Russian>
</Key> </Key>
@ -147,6 +164,7 @@
<German>Wie oft sollen die Markierungen aktualisiert werden (in Sekunden)</German> <German>Wie oft sollen die Markierungen aktualisiert werden (in Sekunden)</German>
<Czech>Jak často budou značky aktualizovány (v sekundách)</Czech> <Czech>Jak často budou značky aktualizovány (v sekundách)</Czech>
<Portuguese>Frequência em que os marcadores devem ser atualizados (em segundos)</Portuguese> <Portuguese>Frequência em que os marcadores devem ser atualizados (em segundos)</Portuguese>
<French>Tout les combien de temps les marqueurs doivent être rafraichit?</French>
<Hungarian>Milyen gyakran frissüljenek a jelölők (másodpercben)</Hungarian> <Hungarian>Milyen gyakran frissüljenek a jelölők (másodpercben)</Hungarian>
<Russian>Как часто должны обновляться маркеры (в секундах)</Russian> <Russian>Как часто должны обновляться маркеры (в секундах)</Russian>
</Key> </Key>
@ -157,6 +175,7 @@
<German>KI-Gruppen verstecken?</German> <German>KI-Gruppen verstecken?</German>
<Czech>Skrýt AI skupiny?</Czech> <Czech>Skrýt AI skupiny?</Czech>
<Portuguese>Esconder grupos de IA?</Portuguese> <Portuguese>Esconder grupos de IA?</Portuguese>
<French>Cacher les groupes IA?</French>
<Hungarian>AI csoportok elrejtése?</Hungarian> <Hungarian>AI csoportok elrejtése?</Hungarian>
<Russian>Скрыть группы ботов?</Russian> <Russian>Скрыть группы ботов?</Russian>
</Key> </Key>
@ -167,6 +186,7 @@
<German>Verstecke Marker für "nur KI"-Gruppen?</German> <German>Verstecke Marker für "nur KI"-Gruppen?</German>
<Czech>Skrýt značky pouze pro AI skupiny?</Czech> <Czech>Skrýt značky pouze pro AI skupiny?</Czech>
<Portuguese>Esconder marcadores que pertencem ao grupo de IA?</Portuguese> <Portuguese>Esconder marcadores que pertencem ao grupo de IA?</Portuguese>
<French>Cacher les marqueurs pour les groupes d'IA seulement?</French>
<Hungarian>Jelölők elrejtése "csak AI" csoportoknál?</Hungarian> <Hungarian>Jelölők elrejtése "csak AI" csoportoknál?</Hungarian>
<Russian>Скрыть маркеры групп, которые состоят полностью из ботов?</Russian> <Russian>Скрыть маркеры групп, которые состоят полностью из ботов?</Russian>
</Key> </Key>
@ -176,6 +196,7 @@
<German>Dieses Modul ermöglicht es verbündete Einheiten mit dem BFT auf der Karte zu verfolgen.</German> <German>Dieses Modul ermöglicht es verbündete Einheiten mit dem BFT auf der Karte zu verfolgen.</German>
<Czech>Umožňuje sledovat přátelské jednokty na mapě v rámci BFT.</Czech> <Czech>Umožňuje sledovat přátelské jednokty na mapě v rámci BFT.</Czech>
<Portuguese>Permite que você acompanhe as posições no mapa das unidades aliadas com marcadores RFA.</Portuguese> <Portuguese>Permite que você acompanhe as posições no mapa das unidades aliadas com marcadores RFA.</Portuguese>
<French>Ce module permet de suivre les unités alliées avec des marqueurs sur la carte.</French>
<Hungarian>Ez a modul lehetővé teszi a szövetséges egységek követését BFT térképjelzőjkkel.</Hungarian> <Hungarian>Ez a modul lehetővé teszi a szövetséges egységek követését BFT térképjelzőjkkel.</Hungarian>
<Russian>Этот модуль позволяет отслеживать перемещение союзных войск по карте при помощи маркеров BFT.</Russian> <Russian>Этот модуль позволяет отслеживать перемещение союзных войск по карте при помощи маркеров BFT.</Russian>
</Key> </Key>
@ -183,31 +204,37 @@
<English>Flashlights</English> <English>Flashlights</English>
<Polish>Latarki</Polish> <Polish>Latarki</Polish>
<Russian>Фонари</Russian> <Russian>Фонари</Russian>
<Czech>Svítilny</Czech>
</Key> </Key>
<Key ID="STR_ACE_Map_Action_NVG"> <Key ID="STR_ACE_Map_Action_NVG">
<English>NVG</English> <English>NVG</English>
<Polish>Noktowizja</Polish> <Polish>Noktowizja</Polish>
<Russian>ПНВ</Russian> <Russian>ПНВ</Russian>
<Czech>NVG</Czech>
</Key> </Key>
<Key ID="STR_ACE_Map_Action_NVGOn"> <Key ID="STR_ACE_Map_Action_NVGOn">
<English>On</English> <English>On</English>
<Polish>Włącz</Polish> <Polish>Włącz</Polish>
<Russian>Вкл.</Russian> <Russian>Вкл.</Russian>
<Czech>Zapnout</Czech>
</Key> </Key>
<Key ID="STR_ACE_Map_Action_NVGOff"> <Key ID="STR_ACE_Map_Action_NVGOff">
<English>Off</English> <English>Off</English>
<Polish>Wyłącz</Polish> <Polish>Wyłącz</Polish>
<Russian>Выкл.</Russian> <Russian>Выкл.</Russian>
<Czech>Vypnout</Czech>
</Key> </Key>
<Key ID="STR_ACE_Map_Action_NVGUp"> <Key ID="STR_ACE_Map_Action_NVGUp">
<English>Increase Brightness</English> <English>Increase Brightness</English>
<Polish>Zwiększ czułość</Polish> <Polish>Zwiększ czułość</Polish>
<Russian>Увеличить яркость</Russian> <Russian>Увеличить яркость</Russian>
<Czech>Zvýšit jas</Czech>
</Key> </Key>
<Key ID="STR_ACE_Map_Action_NVGDown"> <Key ID="STR_ACE_Map_Action_NVGDown">
<English>Decrease Brightness</English> <English>Decrease Brightness</English>
<Polish>Zmniejsz czułość</Polish> <Polish>Zmniejsz czułość</Polish>
<Russian>Уменьшить яркость</Russian> <Russian>Уменьшить яркость</Russian>
<Czech>Snížit jas</Czech>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -18,7 +18,7 @@
params ["_theMap"]; params ["_theMap"];
private ["_rotatingTexture", "_textureWidth", "_scale", "_xPos", "_yPos"]; private ["_rotatingTexture", "_textureWidth", "_scaleX", "_scaleY", "_xPos", "_yPos"];
// Show/Hide draw buttons // Show/Hide draw buttons
if ([] call FUNC(canDraw)) then { if ([] call FUNC(canDraw)) then {
@ -43,16 +43,18 @@ if (GVAR(mapTool_Shown) == 1) then {
}; };
// Update scale of both parts // 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 // Position of the fixed part
_xPos = GVAR(mapTool_pos) select 0; _xPos = GVAR(mapTool_pos) select 0;
_yPos = (GVAR(mapTool_pos) select 1) + _textureWidth * CENTER_OFFSET_Y_PERC; _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 // Position and rotation of the rotating part
_xPos = (GVAR(mapTool_pos) select 0) + sin(GVAR(mapTool_angle)) * _textureWidth * CENTER_OFFSET_Y_PERC; _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; _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];

View File

@ -7,6 +7,7 @@ class ACE_Medical_Actions {
category = "bandage"; category = "bandage";
treatmentLocations[] = {"All"}; treatmentLocations[] = {"All"};
allowedSelections[] = {"All"}; allowedSelections[] = {"All"};
allowSelfTreatment = 1;
requiredMedic = 0; requiredMedic = 0;
treatmentTime = 5; treatmentTime = 5;
treatmentTimeSelfCoef = 1; treatmentTimeSelfCoef = 1;
@ -32,6 +33,7 @@ class ACE_Medical_Actions {
displayName = CSTRING(Inject_Morphine); displayName = CSTRING(Inject_Morphine);
displayNameProgress = CSTRING(Injecting_Morphine); displayNameProgress = CSTRING(Injecting_Morphine);
allowedSelections[] = {"hand_l", "hand_r", "leg_l", "leg_r"}; allowedSelections[] = {"hand_l", "hand_r", "leg_l", "leg_r"};
allowSelfTreatment = 1;
category = "medication"; category = "medication";
treatmentTime = 2; treatmentTime = 2;
items[] = {"ACE_morphine"}; items[] = {"ACE_morphine"};
@ -43,6 +45,7 @@ class ACE_Medical_Actions {
displayName = CSTRING(Inject_Epinephrine); displayName = CSTRING(Inject_Epinephrine);
displayNameProgress = CSTRING(Injecting_Epinephrine); displayNameProgress = CSTRING(Injecting_Epinephrine);
allowedSelections[] = {"hand_l", "hand_r", "leg_l", "leg_r"}; allowedSelections[] = {"hand_l", "hand_r", "leg_l", "leg_r"};
allowSelfTreatment = 1;
category = "medication"; category = "medication";
requiredMedic = 1; requiredMedic = 1;
treatmentTime = 3; treatmentTime = 3;
@ -55,6 +58,7 @@ class ACE_Medical_Actions {
displayName = CSTRING(Transfuse_Blood); displayName = CSTRING(Transfuse_Blood);
displayNameProgress = CSTRING(Transfusing_Blood); displayNameProgress = CSTRING(Transfusing_Blood);
allowedSelections[] = {"hand_l", "hand_r", "leg_l", "leg_r"}; allowedSelections[] = {"hand_l", "hand_r", "leg_l", "leg_r"};
allowSelfTreatment = 0;
category = "advanced"; category = "advanced";
requiredMedic = 1; requiredMedic = 1;
treatmentTime = 20; treatmentTime = 20;
@ -93,7 +97,7 @@ class ACE_Medical_Actions {
displayNameProgress = CSTRING(Actions_Diagnosing); displayNameProgress = CSTRING(Actions_Diagnosing);
category = "examine"; category = "examine";
treatmentLocations[] = {"All"}; treatmentLocations[] = {"All"};
allowedSelections[] = {"head"}; allowedSelections[] = {"head", "body"};
requiredMedic = 0; requiredMedic = 0;
treatmentTime = 1; treatmentTime = 1;
items[] = {}; items[] = {};
@ -105,6 +109,29 @@ class ACE_Medical_Actions {
itemConsumed = 0; itemConsumed = 0;
litter[] = {}; 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 { class Advanced {
@ -115,6 +142,7 @@ class ACE_Medical_Actions {
// Which locations can this treatment action be used? Available: Field, MedicalFacility, MedicalVehicle, All. // Which locations can this treatment action be used? Available: Field, MedicalFacility, MedicalVehicle, All.
treatmentLocations[] = {"All"}; treatmentLocations[] = {"All"};
allowedSelections[] = {"All"}; allowedSelections[] = {"All"};
allowSelfTreatment = 1;
// What is the level of medical skill required for this treatment action? 0 = all soldiers, 1 = medic, 2 = doctor // What is the level of medical skill required for this treatment action? 0 = all soldiers, 1 = medic, 2 = doctor
requiredMedic = 0; requiredMedic = 0;
// The time it takes for a treatment action to complete. Time is in seconds. // 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); displayName = CSTRING(Actions_Blood4_1000);
displayNameProgress = CSTRING(Transfusing_Blood); displayNameProgress = CSTRING(Transfusing_Blood);
allowedSelections[] = {"hand_l", "hand_r", "leg_l", "leg_r"}; allowedSelections[] = {"hand_l", "hand_r", "leg_l", "leg_r"};
allowSelfTreatment = 0;
category = "advanced"; category = "advanced";
items[] = {"ACE_bloodIV"}; items[] = {"ACE_bloodIV"};
requiredMedic = 1; requiredMedic = 1;
@ -238,6 +267,7 @@ class ACE_Medical_Actions {
category = "advanced"; category = "advanced";
items[] = {"ACE_surgicalKit"}; items[] = {"ACE_surgicalKit"};
treatmentLocations[] = {QGVAR(useLocation_SurgicalKit)}; treatmentLocations[] = {QGVAR(useLocation_SurgicalKit)};
allowSelfTreatment = 0;
requiredMedic = QGVAR(medicSetting_SurgicalKit); requiredMedic = QGVAR(medicSetting_SurgicalKit);
patientStateCondition = QGVAR(useCondition_SurgicalKit); patientStateCondition = QGVAR(useCondition_SurgicalKit);
treatmentTime = "(count ((_this select 1) getVariable ['ACE_Medical_bandagedWounds', []]) * 5)"; treatmentTime = "(count ((_this select 1) getVariable ['ACE_Medical_bandagedWounds', []]) * 5)";
@ -253,6 +283,7 @@ class ACE_Medical_Actions {
category = "advanced"; category = "advanced";
items[] = {"ACE_personalAidKit"}; items[] = {"ACE_personalAidKit"};
treatmentLocations[] = {QGVAR(useLocation_PAK)}; treatmentLocations[] = {QGVAR(useLocation_PAK)};
allowSelfTreatment = 0;
requiredMedic = QGVAR(medicSetting_PAK); requiredMedic = QGVAR(medicSetting_PAK);
patientStateCondition = QGVAR(useCondition_PAK); patientStateCondition = QGVAR(useCondition_PAK);
treatmentTime = QUOTE((_this select 1) call FUNC(treatmentAdvanced_fullHealTreatmentTime)); treatmentTime = QUOTE((_this select 1) call FUNC(treatmentAdvanced_fullHealTreatmentTime));
@ -297,6 +328,7 @@ class ACE_Medical_Actions {
displayName = CSTRING(Check_Response); displayName = CSTRING(Check_Response);
callbackSuccess = QUOTE(DFUNC(actionCheckResponse)); callbackSuccess = QUOTE(DFUNC(actionCheckResponse));
displayNameProgress = CSTRING(Check_Response_Content); displayNameProgress = CSTRING(Check_Response_Content);
allowSelfTreatment = 0;
}; };
class RemoveTourniquet: Tourniquet { class RemoveTourniquet: Tourniquet {
displayName = CSTRING(Actions_RemoveTourniquet); displayName = CSTRING(Actions_RemoveTourniquet);
@ -313,6 +345,7 @@ class ACE_Medical_Actions {
category = "advanced"; category = "advanced";
treatmentLocations[] = {"All"}; treatmentLocations[] = {"All"};
allowedSelections[] = {"body"}; allowedSelections[] = {"body"};
allowSelfTreatment = 0;
requiredMedic = 0; requiredMedic = 0;
treatmentTime = 15; treatmentTime = 15;
items[] = {}; items[] = {};
@ -334,6 +367,7 @@ class ACE_Medical_Actions {
displayNameProgress = CSTRING(PlacingInBodyBag); displayNameProgress = CSTRING(PlacingInBodyBag);
category = "advanced"; category = "advanced";
treatmentLocations[] = {"All"}; treatmentLocations[] = {"All"};
allowSelfTreatment = 0;
requiredMedic = 0; requiredMedic = 0;
treatmentTime = 15; treatmentTime = 15;
items[] = {"ACE_bodyBag"}; items[] = {"ACE_bodyBag"};
@ -605,6 +639,7 @@ class ACE_Medical_Advanced {
class vehiclecrash { class vehiclecrash {
thresholds[] = {{0.25, 5}}; thresholds[] = {{0.25, 5}};
selectionSpecific = 0; selectionSpecific = 0;
lethalDamage = 0.2;
}; };
class backblast { class backblast {
thresholds[] = {{0, 2},{0.55, 5}, {1, 6}}; thresholds[] = {{0, 2},{0.55, 5}, {1, 6}};
@ -622,6 +657,7 @@ class ACE_Medical_Advanced {
class falling { class falling {
thresholds[] = {{0.1, 1}}; thresholds[] = {{0.1, 1}};
selectionSpecific = 1; selectionSpecific = 1;
lethalDamage = 0.4;
}; };
class ropeburn { class ropeburn {
thresholds[] = {{0.1, 1}}; thresholds[] = {{0.1, 1}};

View File

@ -220,7 +220,7 @@ class ACE_Settings {
description = CSTRING(menuTypeDescription); description = CSTRING(menuTypeDescription);
typeName = "SCALAR"; typeName = "SCALAR";
value = 0; value = 0;
values[] = {CSTRING(useSelection)/*, CSTRING(useRadial)*/}; values[] = {CSTRING(useSelection), CSTRING(useRadial), "Disabled"};
// isClientSettable = 1; isClientSettable = 1;
}; };
}; };

View File

@ -2,12 +2,12 @@
#define MEDICAL_ACTION_DISTANCE 1.75 #define MEDICAL_ACTION_DISTANCE 1.75
class CfgVehicles { class CfgVehicles {
class Logic; class Logic;
class Module_F: Logic { class Module_F: Logic {
class ArgumentsBaseUnits { class ArgumentsBaseUnits {
}; };
}; };
class ACE_Module; class ACE_Module;
class ACE_moduleMedicalSettings: ACE_Module { class ACE_moduleMedicalSettings: ACE_Module {
scope = 2; scope = 2;
@ -19,6 +19,7 @@ class CfgVehicles {
isGlobal = 1; isGlobal = 1;
isTriggerActivated = 0; isTriggerActivated = 0;
author = ECSTRING(common,ACETeam); author = ECSTRING(common,ACETeam);
class Arguments { class Arguments {
class level { class level {
displayName = CSTRING(MedicalSettings_level_DisplayName); displayName = CSTRING(MedicalSettings_level_DisplayName);
@ -137,6 +138,7 @@ class CfgVehicles {
defaultValue = 1; defaultValue = 1;
}; };
}; };
class ModuleDescription { class ModuleDescription {
description = CSTRING(MedicalSettings_Module_Description); description = CSTRING(MedicalSettings_Module_Description);
sync[] = {}; sync[] = {};
@ -154,6 +156,7 @@ class CfgVehicles {
isTriggerActivated = 0; isTriggerActivated = 0;
isDisposable = 0; isDisposable = 0;
author = ECSTRING(common,ACETeam); author = ECSTRING(common,ACETeam);
class Arguments { class Arguments {
class enableFor { class enableFor {
displayName = CSTRING(AdvancedMedicalSettings_enableFor_DisplayName); displayName = CSTRING(AdvancedMedicalSettings_enableFor_DisplayName);
@ -256,13 +259,13 @@ class CfgVehicles {
defaultValue = 1; defaultValue = 1;
}; };
}; };
class ModuleDescription { class ModuleDescription {
description = CSTRING(AdvancedMedicalSettings_Module_Description); description = CSTRING(AdvancedMedicalSettings_Module_Description);
sync[] = {}; sync[] = {};
}; };
}; };
class ACE_moduleReviveSettings: ACE_Module { class ACE_moduleReviveSettings: ACE_Module {
scope = 2; scope = 2;
displayName = CSTRING(ReviveSettings_Module_DisplayName); displayName = CSTRING(ReviveSettings_Module_DisplayName);
@ -273,6 +276,7 @@ class CfgVehicles {
isGlobal = 1; isGlobal = 1;
isTriggerActivated = 0; isTriggerActivated = 0;
author = ECSTRING(common,ACETeam); author = ECSTRING(common,ACETeam);
class Arguments { class Arguments {
class enableRevive { class enableRevive {
displayName = CSTRING(ReviveSettings_enableRevive_DisplayName); displayName = CSTRING(ReviveSettings_enableRevive_DisplayName);
@ -298,11 +302,13 @@ class CfgVehicles {
defaultValue = -1; defaultValue = -1;
}; };
}; };
class ModuleDescription { class ModuleDescription {
description = CSTRING(ReviveSettings_Module_Description); description = CSTRING(ReviveSettings_Module_Description);
sync[] = {}; sync[] = {};
}; };
}; };
class ACE_moduleAssignMedicRoles: Module_F { class ACE_moduleAssignMedicRoles: Module_F {
scope = 2; scope = 2;
displayName = CSTRING(AssignMedicRoles_Module_DisplayName); displayName = CSTRING(AssignMedicRoles_Module_DisplayName);
@ -314,6 +320,7 @@ class CfgVehicles {
isTriggerActivated = 0; isTriggerActivated = 0;
isDisposable = 0; isDisposable = 0;
author = ECSTRING(common,ACETeam); author = ECSTRING(common,ACETeam);
class Arguments { class Arguments {
class EnableList { class EnableList {
displayName = CSTRING(AssignMedicRoles_EnableList_DisplayName); displayName = CSTRING(AssignMedicRoles_EnableList_DisplayName);
@ -342,6 +349,7 @@ class CfgVehicles {
}; };
}; };
}; };
class ModuleDescription { class ModuleDescription {
description = CSTRING(AssignMedicRoles_Module_Description); description = CSTRING(AssignMedicRoles_Module_Description);
sync[] = {}; sync[] = {};
@ -359,6 +367,7 @@ class CfgVehicles {
isTriggerActivated = 0; isTriggerActivated = 0;
isDisposable = 0; isDisposable = 0;
author = ECSTRING(common,ACETeam); author = ECSTRING(common,ACETeam);
class Arguments { class Arguments {
class EnableList { class EnableList {
displayName = CSTRING(AssignMedicVehicle_EnableList_DisplayName); displayName = CSTRING(AssignMedicVehicle_EnableList_DisplayName);
@ -384,11 +393,13 @@ class CfgVehicles {
}; };
}; };
}; };
class ModuleDescription { class ModuleDescription {
description = CSTRING(AssignMedicVehicle_Module_Description); description = CSTRING(AssignMedicVehicle_Module_Description);
sync[] = {}; sync[] = {};
}; };
}; };
class ACE_moduleAssignMedicalFacility: Module_F { class ACE_moduleAssignMedicalFacility: Module_F {
scope = 2; scope = 2;
displayName = CSTRING(AssignMedicalFacility_Module_DisplayName); displayName = CSTRING(AssignMedicalFacility_Module_DisplayName);
@ -400,6 +411,7 @@ class CfgVehicles {
isTriggerActivated = 0; isTriggerActivated = 0;
isDisposable = 0; isDisposable = 0;
author = ECSTRING(common,ACETeam); author = ECSTRING(common,ACETeam);
class Arguments { class Arguments {
class enabled { class enabled {
displayName = CSTRING(AssignMedicalFacility_enabled_DisplayName); displayName = CSTRING(AssignMedicalFacility_enabled_DisplayName);
@ -407,70 +419,52 @@ class CfgVehicles {
typeName = "BOOL"; typeName = "BOOL";
}; };
}; };
class ModuleDescription { class ModuleDescription {
description = CSTRING(AssignMedicalFacility_Module_Description); description = CSTRING(AssignMedicalFacility_Module_Description);
sync[] = {}; sync[] = {};
}; };
}; };
#define ARM_LEG_ARMOR_DEFAULT 2 #define ARM_LEG_ARMOR_DEFAULT 3
#define ARM_LEG_ARMOR_BETTER 3 #define ARM_LEG_ARMOR_BETTER 5
#define ARM_LEG_ARMOR_CSAT 4 #define ARM_LEG_ARMOR_CSAT 4
class Man; class Land;
class CAManBase: Man { class Man: Land {
class HitPoints { 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 CAManBase: Man {
class HitPoints: HitPoints { // custom hitpoints. addons might want to adjust these accordingly
class HitLeftArm { class HitLeftArm {
armor = ARM_LEG_ARMOR_DEFAULT; //2; armor = ARM_LEG_ARMOR_DEFAULT;
explosionShielding = 1;
material = -1; material = -1;
minimalHit = 0; name = "hand_l"; // @todo hopefully these still include the whole arm + hands
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";
passThrough = 1; passThrough = 1;
radius = 0.08; 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"; visual = "injury_legs";
minimalHit = 0.01;
}; };
class HitRightLeg: HitLeftLeg { class HitRightLeg: HitLeftLeg {
name = "leg_r"; name = "leg_r";
}; };
}; };
class ACE_SelfActions { class ACE_SelfActions {
#include "ACE_Medical_SelfActions.hpp" #include "ACE_Medical_SelfActions.hpp"
}; };
@ -529,23 +523,19 @@ class CfgVehicles {
class B_Soldier_04_f: B_Soldier_base_F { class B_Soldier_04_f: B_Soldier_base_F {
class HitPoints: HitPoints { class HitPoints: HitPoints {
class HitHead: HitHead {}; class HitHead;
class HitBody: HitBody {}; class HitBody;
class HitHands: HitHands {}; class HitHands;
class HitLegs: HitLegs {}; class HitLegs;
class HitLeftArm: HitLeftArm { class HitLeftArm: HitLeftArm {
armor = ARM_LEG_ARMOR_BETTER; armor = ARM_LEG_ARMOR_BETTER;
}; };
class HitRightArm: HitRightArm { class HitRightArm: HitRightArm {
armor = ARM_LEG_ARMOR_BETTER; armor = ARM_LEG_ARMOR_BETTER;
}; };
class HitLeftLeg: HitLeftLeg { class HitLeftLeg: HitLeftLeg {
armor = ARM_LEG_ARMOR_BETTER; armor = ARM_LEG_ARMOR_BETTER;
}; };
class HitRightLeg: HitRightLeg { class HitRightLeg: HitRightLeg {
armor = ARM_LEG_ARMOR_BETTER; armor = ARM_LEG_ARMOR_BETTER;
}; };
@ -554,23 +544,19 @@ class CfgVehicles {
class B_Soldier_05_f: B_Soldier_base_F { class B_Soldier_05_f: B_Soldier_base_F {
class HitPoints: HitPoints { class HitPoints: HitPoints {
class HitHead: HitHead {}; class HitHead;
class HitBody: HitBody {}; class HitBody;
class HitHands: HitHands {}; class HitHands;
class HitLegs: HitLegs {}; class HitLegs;
class HitLeftArm: HitLeftArm { class HitLeftArm: HitLeftArm {
armor = ARM_LEG_ARMOR_BETTER; armor = ARM_LEG_ARMOR_BETTER;
}; };
class HitRightArm: HitRightArm { class HitRightArm: HitRightArm {
armor = ARM_LEG_ARMOR_BETTER; armor = ARM_LEG_ARMOR_BETTER;
}; };
class HitLeftLeg: HitLeftLeg { class HitLeftLeg: HitLeftLeg {
armor = ARM_LEG_ARMOR_BETTER; armor = ARM_LEG_ARMOR_BETTER;
}; };
class HitRightLeg: HitRightLeg { class HitRightLeg: HitRightLeg {
armor = ARM_LEG_ARMOR_BETTER; armor = ARM_LEG_ARMOR_BETTER;
}; };
@ -581,23 +567,19 @@ class CfgVehicles {
class I_Soldier_03_F: I_Soldier_base_F { class I_Soldier_03_F: I_Soldier_base_F {
class HitPoints: HitPoints { class HitPoints: HitPoints {
class HitHead: HitHead {}; class HitHead;
class HitBody: HitBody {}; class HitBody;
class HitHands: HitHands {}; class HitHands;
class HitLegs: HitLegs {}; class HitLegs;
class HitLeftArm: HitLeftArm { class HitLeftArm: HitLeftArm {
armor = ARM_LEG_ARMOR_BETTER; armor = ARM_LEG_ARMOR_BETTER;
}; };
class HitRightArm: HitRightArm { class HitRightArm: HitRightArm {
armor = ARM_LEG_ARMOR_BETTER; armor = ARM_LEG_ARMOR_BETTER;
}; };
class HitLeftLeg: HitLeftLeg { class HitLeftLeg: HitLeftLeg {
armor = ARM_LEG_ARMOR_BETTER; armor = ARM_LEG_ARMOR_BETTER;
}; };
class HitRightLeg: HitRightLeg { class HitRightLeg: HitRightLeg {
armor = ARM_LEG_ARMOR_BETTER; armor = ARM_LEG_ARMOR_BETTER;
}; };
@ -606,23 +588,19 @@ class CfgVehicles {
class I_Soldier_04_F: I_Soldier_base_F { class I_Soldier_04_F: I_Soldier_base_F {
class HitPoints: HitPoints { class HitPoints: HitPoints {
class HitHead: HitHead {}; class HitHead;
class HitBody: HitBody {}; class HitBody;
class HitHands: HitHands {}; class HitHands;
class HitLegs: HitLegs {}; class HitLegs;
class HitLeftArm: HitLeftArm { class HitLeftArm: HitLeftArm {
armor = ARM_LEG_ARMOR_BETTER; armor = ARM_LEG_ARMOR_BETTER;
}; };
class HitRightArm: HitRightArm { class HitRightArm: HitRightArm {
armor = ARM_LEG_ARMOR_BETTER; armor = ARM_LEG_ARMOR_BETTER;
}; };
class HitLeftLeg: HitLeftLeg { class HitLeftLeg: HitLeftLeg {
armor = ARM_LEG_ARMOR_BETTER; armor = ARM_LEG_ARMOR_BETTER;
}; };
class HitRightLeg: HitRightLeg { class HitRightLeg: HitRightLeg {
armor = ARM_LEG_ARMOR_BETTER; armor = ARM_LEG_ARMOR_BETTER;
}; };
@ -631,61 +609,88 @@ class CfgVehicles {
class O_Soldier_base_F: SoldierEB { class O_Soldier_base_F: SoldierEB {
class HitPoints: HitPoints { class HitPoints: HitPoints {
class HitHead: HitHead {}; class HitHead;
class HitBody: HitBody {}; class HitBody;
class HitHands: HitHands {}; class HitHands;
class HitLegs: HitLegs {}; class HitLegs;
class HitLeftArm: HitLeftArm { class HitLeftArm: HitLeftArm {
armor = ARM_LEG_ARMOR_CSAT; armor = ARM_LEG_ARMOR_CSAT;
passThrough = 0.85;
}; };
class HitRightArm: HitRightArm { class HitRightArm: HitRightArm {
armor = ARM_LEG_ARMOR_CSAT; armor = ARM_LEG_ARMOR_CSAT;
passThrough = 0.85;
}; };
class HitLeftLeg: HitLeftLeg { class HitLeftLeg: HitLeftLeg {
armor = ARM_LEG_ARMOR_CSAT; armor = ARM_LEG_ARMOR_CSAT;
passThrough = 0.85;
}; };
class HitRightLeg: HitRightLeg { class HitRightLeg: HitRightLeg {
armor = ARM_LEG_ARMOR_CSAT; armor = ARM_LEG_ARMOR_CSAT;
passThrough = 0.85;
}; };
}; };
}; };
class O_Soldier_02_F: O_Soldier_base_F { class O_Soldier_02_F: O_Soldier_base_F {
class HitPoints: HitPoints { class HitPoints: HitPoints {
class HitHead: HitHead {}; class HitHead;
class HitBody: HitBody {}; class HitBody;
class HitHands: HitHands {}; class HitHands;
class HitLegs: HitLegs {}; class HitLegs;
class HitLeftArm: HitLeftArm { class HitLeftArm: HitLeftArm {
armor = ARM_LEG_ARMOR_CSAT; armor = ARM_LEG_ARMOR_CSAT;
passThrough = 0.85;
}; };
class HitRightArm: HitRightArm { class HitRightArm: HitRightArm {
armor = ARM_LEG_ARMOR_CSAT; armor = ARM_LEG_ARMOR_CSAT;
passThrough = 0.85;
}; };
class HitLeftLeg: HitLeftLeg { class HitLeftLeg: HitLeftLeg {
armor = ARM_LEG_ARMOR_CSAT; armor = ARM_LEG_ARMOR_CSAT;
passThrough = 0.85;
}; };
class HitRightLeg: HitRightLeg { class HitRightLeg: HitRightLeg {
armor = ARM_LEG_ARMOR_CSAT; 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 MapBoard_altis_F;
class ACE_bodyBagObject: MapBoard_altis_F { class ACE_bodyBagObject: MapBoard_altis_F {
XEH_ENABLED; XEH_ENABLED;

View File

@ -1,10 +1,12 @@
#include "script_component.hpp" #include "script_component.hpp"
private ["_unit"]; params ["_unit"];
_unit = _this select 0;
_unit addEventHandler ["HandleDamage", {_this call FUNC(handleDamage)}]; _unit addEventHandler ["HandleDamage", {_this call FUNC(handleDamage)}];
if (local _unit) then { if (local _unit) then {
if (!EGVAR(common,settingsInitFinished)) exitWith {
EGVAR(common,runAtSettingsInitialized) pushBack [FUNC(init), [_unit]];
};
[_unit] call FUNC(init); [_unit] call FUNC(init);
}; };

View File

@ -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); ["interactMenuClosed", {[objNull, false] call FUNC(displayPatientInformation); }] call EFUNC(common,addEventHandler);
["medical_onUnconscious", { ["medical_onUnconscious", {
if (local (_this select 0)) then { params ["_unit", "_status"];
private ["_unit"]; if (local _unit) then {
_unit = _this select 0; if (_status) then {
if (_this select 1) then {
_unit setVariable ["tf_globalVolume", 0.4]; _unit setVariable ["tf_globalVolume", 0.4];
_unit setVariable ["tf_voiceVolume", 0, true]; _unit setVariable ["tf_voiceVolume", 0, true];
_unit setVariable ["tf_unable_to_use_radio", true, 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 // Initialize all effects
_fnc_createEffect = { _fnc_createEffect = {
private ["_type", "_layer", "_default", "_effect"]; private "_effect";
_type = _this select 0; params ["_type", "_layer", "_default"];
_layer = _this select 1;
_default = _this select 2;
_effect = ppEffectCreate [_type, _layer]; _effect = ppEffectCreate [_type, _layer];
_effect ppEffectForceInNVG true; _effect ppEffectForceInNVG true;
@ -245,22 +242,10 @@ GVAR(lastHeartBeatSound) = ACE_time;
}, 0, []] call CBA_fnc_addPerFrameHandler; }, 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);
};
};
[ ["SettingsInitialized", {
if (GVAR(level) == 2) exitwith {
[
{(((_this select 0) getvariable [QGVAR(bloodVolume), 100]) < 65)}, {(((_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) getvariable [QGVAR(pain), 0]) - ((_this select 0) getvariable [QGVAR(painSuppress), 0])) > 0.9},
{(([_this select 0] call FUNC(getBloodLoss)) > 0.25)}, {(([_this select 0] call FUNC(getBloodLoss)) > 0.25)},
@ -268,7 +253,17 @@ if (USE_WOUND_EVENT_SYNC) then {
{((_this select 0) getvariable [QGVAR(inCardiacArrest), false])}, {((_this select 0) getvariable [QGVAR(inCardiacArrest), false])},
{((_this select 0) getvariable ["ACE_isDead", false])}, {((_this select 0) getvariable ["ACE_isDead", false])},
{(((_this select 0) getvariable [QGVAR(airwayStatus), 100]) < 80)} {(((_this select 0) getvariable [QGVAR(airwayStatus), 100]) < 80)}
] call FUNC(addUnconsciousCondition); ] 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 // Prevent all types of interaction while unconscious
// @todo: probably remove this when CBA keybind hold key works properly // @todo: probably remove this when CBA keybind hold key works properly

View File

@ -68,6 +68,7 @@ PREP(selectionNameToNumber);
PREP(setCardiacArrest); PREP(setCardiacArrest);
PREP(setDead); PREP(setDead);
PREP(setHitPointDamage); PREP(setHitPointDamage);
PREP(setStructuralDamage);
PREP(setUnconscious); PREP(setUnconscious);
PREP(treatment); PREP(treatment);
PREP(treatment_failure); PREP(treatment_failure);
@ -83,6 +84,7 @@ PREP(treatmentAdvanced_medication);
PREP(treatmentAdvanced_medicationLocal); PREP(treatmentAdvanced_medicationLocal);
PREP(treatmentAdvanced_surgicalKit_onProgress); PREP(treatmentAdvanced_surgicalKit_onProgress);
PREP(treatmentBasic_bandage); PREP(treatmentBasic_bandage);
PREP(treatmentBasic_bandageLocal);
PREP(treatmentBasic_bloodbag); PREP(treatmentBasic_bloodbag);
PREP(treatmentBasic_bloodbagLocal); PREP(treatmentBasic_bloodbagLocal);
PREP(treatmentBasic_epipen); PREP(treatmentBasic_epipen);

View File

@ -1,11 +1,8 @@
#include "script_component.hpp" #include "script_component.hpp"
private ["_unit"]; params ["_unit"];
_unit = _this select 0;
if !(local _unit) exitWith {};
// reset all variables. @todo GROUP respawn?
[_unit] call FUNC(init); [_unit] call FUNC(init);
// Reset captive status for respawning unit // Reset captive status for respawning unit

View File

@ -7,15 +7,12 @@
* 1: The patient <OBJECT> * 1: The patient <OBJECT>
* *
* Return Value: * Return Value:
* NONE * None
* *
* Public: No * Public: No
*/ */
#include "script_component.hpp" #include "script_component.hpp"
private ["_caller","_target","_selectionName"]; params ["_caller", "_target", "_selectionName"];
_caller = _this select 0;
_target = _this select 1;
_selectionName = _this select 2;
[[_caller, _target, _selectionName], QUOTE(DFUNC(actionCheckBloodPressureLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ [[_caller, _target, _selectionName], QUOTE(DFUNC(actionCheckBloodPressureLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */

View File

@ -7,25 +7,22 @@
* 1: The patient <OBJECT> * 1: The patient <OBJECT>
* *
* Return Value: * Return Value:
* NONE * None
* *
* Public: No * Public: No
*/ */
#include "script_component.hpp" #include "script_component.hpp"
private ["_caller","_target","_selectionName","_bloodPressure","_bloodPressureHigh","_bloodPressureLow", "_logOutPut", "_output"]; private ["_bloodPressure", "_logOutPut", "_output"];
_caller = _this select 0; params ["_caller", "_target", "_selectionName"];
_target = _this select 1;
_selectionName = _this select 2;
_bloodPressure = [_target] call FUNC(getBloodPressure); _bloodPressure = if (!alive _target) then {
if (!alive _target) then { [0,0]
_bloodPressure = [0,0]; } else {
[_target] call FUNC(getBloodPressure)
}; };
_bloodPressure params ["_bloodPressureHigh", "_bloodPressureLow"];
_bloodPressureHigh = _bloodPressure select 1;
_bloodPressureLow = _bloodPressure select 0;
_output = ""; _output = "";
_logOutPut = ""; _logOutPut = "";
if ([_caller] call FUNC(isMedic)) then { if ([_caller] call FUNC(isMedic)) then {

View File

@ -7,15 +7,13 @@
* 1: The patient <OBJECT> * 1: The patient <OBJECT>
* *
* Return Value: * Return Value:
* NONE * None
* *
* Public: No * Public: No
*/ */
#include "script_component.hpp" #include "script_component.hpp"
private ["_caller","_target","_selectionName"]; params ["_caller","_target", "_selectionName"];
_caller = _this select 0;
_target = _this select 1;
_selectionName = _this select 2;
[[_caller, _target, _selectionName], QUOTE(DFUNC(actionCheckPulseLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ [[_caller, _target, _selectionName], QUOTE(DFUNC(actionCheckPulseLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */

View File

@ -7,17 +7,15 @@
* 1: The patient <OBJECT> * 1: The patient <OBJECT>
* *
* Return Value: * Return Value:
* NONE * None
* *
* Public: No * Public: No
*/ */
#include "script_component.hpp" #include "script_component.hpp"
private ["_caller", "_unit", "_selectionName", "_heartRateOutput", "_heartRate", "_logOutPut"]; private ["_heartRateOutput", "_heartRate", "_logOutPut"];
_caller = _this select 0; params ["_caller", "_unit", "_selectionName"];
_unit = _this select 1;
_selectionName = _this select 2;
_heartRate = _unit getvariable [QGVAR(heartRate), 80]; _heartRate = _unit getvariable [QGVAR(heartRate), 80];
if (!alive _unit) then { if (!alive _unit) then {

View File

@ -7,23 +7,17 @@
* 1: The patient <OBJECT> * 1: The patient <OBJECT>
* *
* Return Value: * Return Value:
* NONE * None
* *
* Public: No * Public: No
*/ */
#include "script_component.hpp" #include "script_component.hpp"
private ["_caller","_target", "_output"]; private ["_output"];
_caller = _this select 0; params ["_caller", "_target"];
_target = _this select 1;
_output = ""; _output = [LSTRING(Check_Response_Unresponsive), LSTRING(Check_Response_Responsive)] select ([_target] call EFUNC(common,isAwake));
if ([_target] call EFUNC(common,isAwake)) then {
_output = LSTRING(Check_Response_Responsive);
} else {
_output = LSTRING(Check_Response_Unresponsive);
};
["displayTextStructured", [_caller], [[_output, [_target] call EFUNC(common,getName)], 2, _caller]] call EFUNC(common,targetEvent); ["displayTextStructured", [_caller], [[_output, [_target] call EFUNC(common,getName)], 2, _caller]] call EFUNC(common,targetEvent);

View File

@ -7,16 +7,15 @@
* 1: The patient <OBJECT> * 1: The patient <OBJECT>
* *
* Return Value: * Return Value:
* NONE * None
* *
* Public: No * Public: No
*/ */
#include "script_component.hpp" #include "script_component.hpp"
private ["_caller", "_target", "_genericMessages"]; private "_genericMessages";
_caller = _this select 0; params ["_caller", "_target"];
_target = _this select 1;
_genericMessages = [LSTRING(diagnoseMessage)]; _genericMessages = [LSTRING(diagnoseMessage)];

View File

@ -7,20 +7,18 @@
* 1: The patient <OBJECT> * 1: The patient <OBJECT>
* *
* Return Value: * Return Value:
* NONE * None
* *
* Public: No * Public: No
*/ */
#include "script_component.hpp" #include "script_component.hpp"
private ["_caller", "_target","_vehicle"]; private "_vehicle";
_caller = _this select 0; params ["_caller", "_target"];
_target = _this select 1;
if ([_target] call EFUNC(common,isAwake)) exitwith { if ([_target] call EFUNC(common,isAwake)) exitwith {
// TODO localization ["displayTextStructured", [_caller], [[LSTRING(CanNotLoaded), [_target] call EFUNC(common,getName)], 1.5, _caller]] call EFUNC(common,targetEvent);
["displayTextStructured", [_caller], [["This person (%1) is awake and cannot be loaded", [_target] call EFUNC(common,getName)], 1.5, _caller]] call EFUNC(common,targetEvent);
}; };
if ([_target] call FUNC(isBeingCarried)) then { if ([_target] call FUNC(isBeingCarried)) then {
[_caller, _target] call EFUNC(dragging,dropObject_carry); [_caller, _target] call EFUNC(dragging,dropObject_carry);

View File

@ -14,9 +14,8 @@
#include "script_component.hpp" #include "script_component.hpp"
PARAMS_2(_caller,_target);
private ["_position", "_headPos", "_spinePos", "_dirVect", "_direction", "_bodyBag"]; private ["_position", "_headPos", "_spinePos", "_dirVect", "_direction", "_bodyBag"];
params ["_caller", "_target"];
if (alive _target) then { if (alive _target) then {
[_target, true] call FUNC(setDead); [_target, true] call FUNC(setDead);

View File

@ -8,17 +8,15 @@
* 2: SelectionName <STRING> * 2: SelectionName <STRING>
* *
* Return Value: * Return Value:
* NONE * None
* *
* Public: Yes * Public: Yes
*/ */
#include "script_component.hpp" #include "script_component.hpp"
private ["_caller", "_target", "_part", "_selectionName", "_tourniquets", "_output"]; private ["_part", "_tourniquets", "_output"];
_caller = _this select 0; params ["_caller", "_target", "_selectionName"];
_target = _this select 1;
_selectionName = _this select 2;
// grab the required data // grab the required data
_part = [_selectionName] call FUNC(selectionNameToNumber); _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 // Check if there is a tourniquet on this bodypart
if ((_tourniquets select _part) == 0) exitwith { 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); ["displayTextStructured", [_caller], [_output, 1.5, _caller]] call EFUNC(common,targetEvent);
}; };

View File

@ -5,20 +5,17 @@
* Arguments: * Arguments:
* 0: The medic <OBJECT> * 0: The medic <OBJECT>
* 1: The patient <OBJECT> * 1: The patient <OBJECT>
* 2: Drag after unload <BOOL> <OPTIONAL> * 2: Drag after unload <BOOL> (default: false)
* *
* Return Value: * Return Value:
* NONE * None
* *
* Public: No * Public: No
*/ */
#include "script_component.hpp" #include "script_component.hpp"
private ["_caller", "_target", "_drag"]; params ["_caller", "_target", ["_drag", false]];
_caller = _this select 0;
_target = _this select 1;
_drag = if (count _this > 2) then {_this select 2} else {false};
// cannot unload a unit not in a vehicle. // cannot unload a unit not in a vehicle.
if (vehicle _target == _target) exitwith {}; if (vehicle _target == _target) exitwith {};

View File

@ -9,18 +9,15 @@
* 3: callback <CODE> * 3: callback <CODE>
* *
* Return Value: * Return Value:
* nil * None
* *
* Public: Yes * Public: Yes
*/ */
#include "script_component.hpp" #include "script_component.hpp"
private ["_unit", "_value", "_time", "_adjustment", "_callBack"];
_unit = [_this, 0, objNull, [objNull]] call BIS_fnc_Param; params [["_unit", objNull, [objNull]], ["_value", 0, [0]], ["_time", 1, [0]], ["_callBack", {}, [{}]]];
_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;
_adjustment = _unit getvariable [QGVAR(heartRateAdjustments), []]; _adjustment = _unit getvariable [QGVAR(heartRateAdjustments), []];
_adjustment pushback [_value, _time, _callBack]; _adjustment pushback [_value, _time, _callBack];

View File

@ -6,16 +6,14 @@
* 0: The Unit <OBJECT> * 0: The Unit <OBJECT>
* *
* ReturnValue: * ReturnValue:
* <NIL> * None
* *
* Public: Yes * Public: Yes
*/ */
#include "script_component.hpp" #include "script_component.hpp"
private ["_unit", "_force"]; params ["_unit", ["_force", false]];
_unit = _this select 0;
_force = if (count _this > 1) then {_this select 1} else {false};
if ([_unit] call FUNC(hasMedicalEnabled) || _force) then { if ([_unit] call FUNC(hasMedicalEnabled) || _force) then {
@ -27,13 +25,13 @@ if ([_unit] call FUNC(hasMedicalEnabled) || _force) then {
_unit setvariable [QGVAR(addedToUnitLoop), true, true]; _unit setvariable [QGVAR(addedToUnitLoop), true, true];
[{ [{
private ["_unit", "_interval"]; params ["_args", "_idPFH"];
_unit = (_this select 0) select 0; _args params ["_unit", "_interval"];
_interval = ACE_time - ((_this select 0) select 1); _interval = ACE_time - _interval;
(_this select 0) set [1, ACE_time]; (_this select 0) set [1, ACE_time];
if (!alive _unit || !local _unit) then { if (!alive _unit || !local _unit) then {
[_this select 1] call CBA_fnc_removePerFrameHandler; [_idPFH] call CBA_fnc_removePerFrameHandler;
if (!local _unit) then { if (!local _unit) then {
if (GVAR(level) >= 2) then { if (GVAR(level) >= 2) then {
_unit setvariable [QGVAR(heartRate), _unit getvariable [QGVAR(heartRate), 80], true]; _unit setvariable [QGVAR(heartRate), _unit getvariable [QGVAR(heartRate), 80], true];
@ -47,9 +45,12 @@ if ([_unit] call FUNC(hasMedicalEnabled) || _force) then {
private "_pain"; private "_pain";
_pain = _unit getvariable [QGVAR(pain), 0]; _pain = _unit getvariable [QGVAR(pain), 0];
if (_pain > (_unit getvariable [QGVAR(painSuppress), 0])) then { 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] call FUNC(setUnconscious);
}; };*/
[_unit, _pain] call FUNC(playInjuredSound); [_unit, _pain] call FUNC(playInjuredSound);
}; };

View File

@ -9,28 +9,24 @@
* 3: The arguments for localization <ARRAY> * 3: The arguments for localization <ARRAY>
* *
* Return Value: * Return Value:
* nil * None
* *
* Public: Yes * Public: Yes
*/ */
#include "script_component.hpp" #include "script_component.hpp"
private ["_unit", "_type", "_message", "_arguments", "_lastNumber", "_moment", "_logVarName", "_log","_newLog", "_logs"]; private ["_moment", "_logVarName", "_log","_newLog", "_logs"];
_unit = _this select 0; params ["_unit", "_type", "_message", "_arguments"];
_type = _this select 1;
_message = _this select 2;
_arguments = _this select 3;
if (!local _unit) exitwith { 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; date params ["", "", "", "_minute", "_hour"];
_moment = format["%1:%2",date select 3, _lastNumber];
if (_lastNumber < 10) then { _moment = format [ (["%1:%2", "%1:0%2"] select (_minute < 10)), _hour, _minute];
_moment = format["%1:0%2",date select 3, _lastNumber];
};
_logVarName = format[QGVAR(logFile_%1), _type]; _logVarName = format[QGVAR(logFile_%1), _type];
_log = _unit getvariable [_logVarName, []]; _log = _unit getvariable [_logVarName, []];
@ -41,10 +37,10 @@ if (count _log >= 8) then {
if (_foreachIndex > 0) then { if (_foreachIndex > 0) then {
_newLog pushback _x; _newLog pushback _x;
}; };
}foreach _log; } foreach _log;
_log = _newLog; _log = _newLog;
}; };
_log pushback [_message,_moment,_type, _arguments]; _log pushback [_message, _moment, _type, _arguments];
_unit setvariable [_logVarName, _log, true]; _unit setvariable [_logVarName, _log, true];
["medical_onLogEntryAdded", [_unit, _type, _message, _arguments]] call EFUNC(common,localEvent); ["medical_onLogEntryAdded", [_unit, _type, _message, _arguments]] call EFUNC(common,localEvent);

View File

@ -7,16 +7,15 @@
* 1: The new item classname <STRING> * 1: The new item classname <STRING>
* *
* Return Value: * Return Value:
* nil * None
* *
* Public: Yes * Public: Yes
*/ */
#include "script_component.hpp" #include "script_component.hpp"
private ["_unit", "_newItem", "_log", "_inList", "_amount"]; private ["_log", "_inList", "_amount"];
_unit = _this select 0; params ["_unit", "_newItem"];
_newItem = _this select 1;
if (!local _unit) exitwith { if (!local _unit) exitwith {
[_this, QUOTE(DFUNC(addToTriageList)), _unit] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ [_this, QUOTE(DFUNC(addToTriageList)), _unit] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */
@ -36,7 +35,7 @@ _amount = 1;
_amount = (_info select 1); _amount = (_info select 1);
_inList = true; _inList = true;
}; };
}foreach _log; } foreach _log;
if (!_inList) then { if (!_inList) then {
_log pushback [_newItem, 1, ACE_time]; _log pushback [_newItem, 1, ACE_time];

View File

@ -3,14 +3,13 @@
* Adds new condition for the unconscious state. Conditions are not actively checked for units unless unit is in unconscious state. * Adds new condition for the unconscious state. Conditions are not actively checked for units unless unit is in unconscious state.
* *
* Arguments: * Arguments:
* 0: Code, should return a boolean <CODE> * 0-N: Code, should return a boolean <CODE>
* *
* ReturnValue: * ReturnValue:
* <NIL> * None
* *
* Public: Yes * Public: Yes
*/ */
#include "script_component.hpp" #include "script_component.hpp"
if (isnil QGVAR(unconsciousConditions)) then { if (isnil QGVAR(unconsciousConditions)) then {
@ -21,5 +20,5 @@ if (typeName _this == typeName []) then {
if (typeName _x == typeName {}) then { if (typeName _x == typeName {}) then {
GVAR(unconsciousConditions) pushback _x; GVAR(unconsciousConditions) pushback _x;
}; };
}foreach _this; } foreach _this;
}; };

View File

@ -13,8 +13,7 @@
* Public: No * Public: No
*/ */
#include "script_component.hpp" #include "script_component.hpp"
params ["_vehicle", "_player", "_parameters"];
EXPLODE_3_PVT(_this,_vehicle,_player,_parameters);
private ["_actions", "_unit"]; private ["_actions", "_unit"];
_actions = []; _actions = [];

View File

@ -18,10 +18,10 @@
private ["_pain"]; private ["_pain"];
PARAMS_2(_unit,_addedPain); params ["_unit", "_addedPain"];
//Only run on local units: //Only run on local units:
if (!local _unit) exitWith {ERROR("unit is not local");}; if (!local _unit) exitWith {ERROR("unit is not local");};
TRACE_3("ACE_DEBUG: adjustPainLevel Called",_unit, _pain, _addedPain);
//Ignore if medical system disabled: //Ignore if medical system disabled:
if (GVAR(level) == 0) exitWith {}; if (GVAR(level) == 0) exitWith {};

View File

@ -14,9 +14,8 @@
#include "script_component.hpp" #include "script_component.hpp"
private ["_target", "_caller", "_accessLevel", "_return"]; private ["_accessLevel", "_return"];
_caller = _this select 0; params ["_caller", "_target"];
_target = _this select 1;
_accessLevel = _target getvariable [QGVAR(allowSharedEquipmentAccess), -1]; _accessLevel = _target getvariable [QGVAR(allowSharedEquipmentAccess), -1];

View File

@ -16,36 +16,35 @@
#include "script_component.hpp" #include "script_component.hpp"
private ["_caller", "_target", "_selectionName", "_className", "_config", "_medicRequired", "_items", "_locations", "_return", "_condition", "_patientStateCondition", "_allowedSelections"]; private ["_config", "_medicRequired", "_items", "_locations", "_return", "_condition", "_patientStateCondition", "_allowedSelections"];
_caller = _this select 0; params ["_caller", "_target", "_selectionName", "_className"];
_target = _this select 1;
_selectionName = _this select 2;
_className = _this select 3;
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}; if !(isClass _config) exitwith {false};
// Allow self treatment check
if (_caller == _target && {getNumber (_config >> "allowSelfTreatment") == 0}) exitwith {false};
_medicRequired = if (isNumber (_config >> "requiredMedic")) then { _medicRequired = if (isNumber (_config >> "requiredMedic")) then {
getNumber (_config >> "requiredMedic"); getNumber (_config >> "requiredMedic");
} else { } else {
// Check for required class // Check for required class
if (isText (_config >> "requiredMedic")) exitwith { if (isText (_config >> "requiredMedic")) exitwith {
missionNamespace getvariable [(getText (_config >> "requiredMedic")), 0]; missionNamespace getvariable [(getText (_config >> "requiredMedic")), 0]
}; };
0; 0;
}; };
if !([_caller, _medicRequired] call FUNC(isMedic)) exitwith {false}; if !([_caller, _medicRequired] call FUNC(isMedic)) exitwith { false };
_items = getArray (_config >> "items"); _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"); _allowedSelections = getArray (_config >> "allowedSelections");
if !("All" in _allowedSelections || {(_selectionName in _allowedSelections)}) exitwith {false}; if !("All" in _allowedSelections || {(_selectionName in _allowedSelections)}) exitwith { false };
_return = true; _return = true;
if (getText (_config >> "condition") != "") then { if (getText (_config >> "condition") != "") then {
@ -61,7 +60,7 @@ if (getText (_config >> "condition") != "") then {
_return = [_caller, _target, _selectionName, _className] call _condition; _return = [_caller, _target, _selectionName, _className] call _condition;
}; };
}; };
if (!_return) exitwith {false}; if (!_return) exitwith { false };
_patientStateCondition = if (isText(_config >> "patientStateCondition")) then { _patientStateCondition = if (isText(_config >> "patientStateCondition")) then {
missionNamespace getvariable [getText(_config >> "patientStateCondition"), 0] 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}; if (_patientStateCondition == 1 && {!([_target] call FUNC(isInStableCondition))}) exitwith {false};
_locations = getArray (_config >> "treatmentLocations"); _locations = getArray (_config >> "treatmentLocations");
if ("All" in _locations) exitwith {true}; if ("All" in _locations) exitwith { true };
private [ "_medFacility", "_medVeh"]; private [ "_medFacility", "_medVeh"];
_medFacility = {([_caller] call FUNC(isInMedicalFacility)) || ([_target] call FUNC(isInMedicalFacility))}; _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; _return;

View File

@ -17,6 +17,7 @@
#include "script_component.hpp" #include "script_component.hpp"
#define MAX_DURATION_CACHE 2 #define MAX_DURATION_CACHE 2
params ["", "_target", "_selection", "_classname"];
// parameters, function, namespace, uid // 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);

View File

@ -7,16 +7,15 @@
* 1: The caller <OBJECT> * 1: The caller <OBJECT>
* *
* Return Value: * 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 <OBJECT>
* *
* Public: No * Public: No
*/ */
#include "script_component.hpp" #include "script_component.hpp"
private ["_oldBody","_newUnit","_class","_group","_position","_side", "_caller", "_name"]; private ["_newUnit", "_class", "_group", "_position", "_side", "_name"];
_oldBody = _this select 0; params ["_oldBody", "_caller"];
_caller = _this select 1;
if (alive _oldBody) exitwith {_oldBody}; // we only want to do this for dead bodies 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]; _newUnit setvariable [QGVAR(disableInteraction), true, true];
_oldBody setvariable [QGVAR(disableInteraction), true, true]; _oldBody setvariable [QGVAR(disableInteraction), true, true];
_newUnit setDamage 0.89; [_newUnit, 0.89] call FUNC(setStructuralDamage);
_newUnit; _newUnit;

View File

@ -3,11 +3,16 @@
* Spawns litter for the treatment action on the ground around the target * Spawns litter for the treatment action on the ground around the target
* *
* Arguments: * Arguments:
* 0: The target <OBJECT> * 0: The Caller <OBJECT>
* 1: The treatment classname <STRING> * 1: The target <OBJECT>
* 2: The treatment Selection Name <STRING>
* 3: The treatment classname <STRING>
* 4: ?
* 5: Users of Items <?>
* 6: Previous Damage <NUMBER>
* *
* Return Value: * Return Value:
* * None
* *
* Public: No * Public: No
*/ */
@ -16,13 +21,8 @@
#define MIN_ENTRIES_LITTER_CONFIG 3 #define MIN_ENTRIES_LITTER_CONFIG 3
private ["_target", "_className", "_config", "_litter", "_createLitter", "_position", "_createdLitter", "_caller", "_selectionName", "_usersOfItems", "_previousDamage"]; private ["_config", "_litter", "_createLitter", "_position", "_createdLitter"];
_caller = _this select 0; params ["_caller", "_target", "_selectionName", "_className", "", "_usersOfItems", "_previousDamage"];
_target = _this select 1;
_selectionName = _this select 2;
_className = _this select 3;
_usersOfItems = _this select 5;
_previousDamage = _this select 6;
if !(GVAR(allowLitterCreation)) exitwith {}; if !(GVAR(allowLitterCreation)) exitwith {};
if (vehicle _caller != _caller || vehicle _target != _target) exitwith {}; if (vehicle _caller != _caller || vehicle _target != _target) exitwith {};
@ -38,25 +38,24 @@ if !(isArray (_config >> "litter")) exitwith {};
_litter = getArray (_config >> "litter"); _litter = getArray (_config >> "litter");
_createLitter = { _createLitter = {
private["_position", "_litterClass", "_direction"]; private["_position", "_direction"];
params ["_unit", "_litterClass"];
// @TODO: handle carriers over water // @TODO: handle carriers over water
// For now, don't spawn litter if we are over water to avoid floating litter // For now, don't spawn litter if we are over water to avoid floating litter
if(surfaceIsWater (getPos (_this select 0))) exitWith { false }; if(surfaceIsWater (getPos _unit)) exitWith { false };
_position = getPosATL (_this select 0); _position = getPosATL _unit;
_position = [_position select 0, _position select 1, 0]; _position params ["_posX", "_posY"];
_litterClass = _this select 1; _position = if (random(1) >= 0.5) then {
if (random(1) >= 0.5) then { [_posX + random 1, _posY + random 1, 0]
_position = [(_position select 0) + random 1, (_position select 1) + random 1, _position select 2];
} else { } 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); _direction = (random 360);
// Create the litter, and timeout the event based on the cleanup delay // 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 // 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 true
}; };
@ -65,11 +64,10 @@ _createdLitter = [];
{ {
if (typeName _x == "ARRAY") then { if (typeName _x == "ARRAY") then {
if (count _x < MIN_ENTRIES_LITTER_CONFIG) exitwith {}; 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. 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 { if (isnil _litterCondition) then {
_litterCondition = if (_litterCondition != "") then {compile _litterCondition} else {{true}}; _litterCondition = if (_litterCondition != "") then {compile _litterCondition} else {{true}};
@ -88,8 +86,8 @@ _createdLitter = [];
if (typeName _x == "STRING") then { if (typeName _x == "STRING") then {
[_target, _x] call _createLitter; [_target, _x] call _createLitter;
}; };
}foreach _litterOptions; } foreach _litterOptions;
}; };
}; };
}; };
}foreach _litter; } foreach _litter;

View File

@ -1,19 +1,21 @@
/** /*
* fn_determineIfFatal.sqf * Author: Glowbal
* @Descr: N/A * Determine If Fatal
* @Author: Glowbal
* *
* @Arguments: [] * Arguments:
* @Return: * 0: Unit <OBJECT>
* @PublicAPI: false * 1: Part <NUMBER>
* 2: with Damage <NUMBER> (default: 0)
*
* Return Value:
* None
*
* Public: No
*/ */
#include "script_component.hpp" #include "script_component.hpp"
private ["_unit","_part","_damageThreshold", "_withDamage", "_damageBodyPart"]; private ["_damageThreshold", "_damageBodyPart"];
_unit = _this select 0; params ["_unit", "_part", ["_withDamage", 0]];
_part = _this select 1;
_withDamage = if (count _this > 2) then { _this select 2} else {0};
if (!alive _unit) exitwith {true}; if (!alive _unit) exitwith {true};
if (_part < 0 || _part > 5) exitwith {false}; 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 // Check if damage to body part is higher as damage torso
if (_part == 1) exitwith { 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 // Check if damage to body part is higher as damage limbs
(_damageBodyPart >= (_damageThreshold select 2) && {(random(1) > 0.95)}); (_damageBodyPart >= (_damageThreshold select 2) && {(random(1) > 0.95)});

View File

@ -4,10 +4,11 @@
* *
* Arguments: * Arguments:
* 0: The Unit <OBJECT> * 0: The Unit <OBJECT>
* 1: Show <BOOL> <OPTIONAL> * 1: Show <BOOL> (default: true)
* 2: Selection <NUMBER> (default: 0)
* *
* ReturnValue: * ReturnValue:
* nil * None
* *
* Public: No * Public: No
*/ */
@ -17,13 +18,11 @@
// Exit for basic medical // Exit for basic medical
if (GVAR(level) < 2) exitWith {}; if (GVAR(level) < 2) exitWith {};
private ["_target", "_show", "_selectionN", "_amountOfGeneric", "_bandagedwounds", "_logCtrl", "_part", "_partText", "_pointDamage", "_severity", "_total", "_totalIvVolume", "_triageStatus", "_type"]; private ["_amountOfGeneric", "_bandagedwounds", "_logCtrl", "_part", "_partText", "_pointDamage", "_severity", "_total", "_totalIvVolume", "_triageStatus", "_type"];
_target = _this select 0; params ["_target", ["_show", true], ["_selectionN", 0]];
_show = if (count _this > 1) then {_this select 1} else {true};
_selectionN = if (count _this > 2) then {_this select 2} else {0};
GVAR(currentSelectedSelectionN) = if (typeName _selectionN == "SCALAR") then {_selectionN} else {0}; GVAR(currentSelectedSelectionN) = [0, _selectionN] select (IS_SCALAR(_selectionN));
GVAR(displayPatientInformationTarget) = if (_show) then {_target} else {ObjNull}; GVAR(displayPatientInformationTarget) = [ObjNull, _target] select _show;
if (USE_WOUND_EVENT_SYNC) then { if (USE_WOUND_EVENT_SYNC) then {
[_target, ACE_player] call FUNC(requestWoundSync); [_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"]; private ["_target", "_display", "_alphaLevel", "_damaged", "_availableSelections", "_openWounds", "_selectionBloodLoss", "_red", "_green", "_blue", "_alphaLevel", "_allInjuryTexts", "_lbCtrl", "_genericMessages"];
_target = (_this select 0) select 0; params ["_args", "_idPFH"];
_selectionN = (_this select 0) select 1; _args params ["_target", "_selectionN"];
if (GVAR(displayPatientInformationTarget) != _target || GVAR(currentSelectedSelectionN) != _selectionN) exitwith { 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 { if (ACE_player distance _target > MAX_DISTANCE) exitwith {
("ACE_MedicalRscDisplayInformation" call BIS_fnc_rscLayer) cutText ["","PLAIN"]; ("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); ["displayTextStructured", [ACE_player], [[LSTRING(DistanceToFar), [_target] call EFUNC(common,getName)], 1.75, ACE_player]] call EFUNC(common,targetEvent);
}; };
disableSerialization; disableSerialization;
_display = uiNamespace getvariable QGVAR(DisplayInformation); _display = uiNamespace getvariable QGVAR(DisplayInformation);
if (isnil "_display") exitwith { if (isnil "_display") exitwith {
[_this select 1] call CBA_fnc_removePerFrameHandler; [_idPFH] call CBA_fnc_removePerFrameHandler;
}; };
_allInjuryTexts = []; _allInjuryTexts = [];
@ -81,7 +80,7 @@ if (_show) then {
if !(isnil "_value") then { if !(isnil "_value") then {
_totalIvVolume = _totalIvVolume + (_target getvariable [_x, 0]); _totalIvVolume = _totalIvVolume + (_target getvariable [_x, 0]);
}; };
}foreach GVAR(IVBags); } foreach GVAR(IVBags);
if (_totalIvVolume >= 1) then { if (_totalIvVolume >= 1) then {
_genericMessages pushback [format[localize LSTRING(receivingIvVolume), floor _totalIvVolume], [1, 1, 1, 1]]; _genericMessages pushback [format[localize LSTRING(receivingIvVolume), floor _totalIvVolume], [1, 1, 1, 1]];
}; };
@ -92,33 +91,33 @@ if (_show) then {
_openWounds = _target getvariable [QGVAR(openWounds), []]; _openWounds = _target getvariable [QGVAR(openWounds), []];
private "_amountOf"; private "_amountOf";
{ {
_amountOf = _x select 3; _x params ["", "_x1", "_selectionX", "_amountOf", "_x4"];
// Find how much this bodypart is bleeding // Find how much this bodypart is bleeding
if (_amountOf > 0) then { if (_amountOf > 0) then {
_damaged set[_x select 2, true]; _damaged set[_selectionX, true];
_selectionBloodLoss set [(_x select 2), (_selectionBloodLoss select (_x select 2)) + (20 * ((_x select 4) * _amountOf))]; _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] // 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 { if (_amountOf >= 1) then {
// TODO localization // 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 { } else {
// TODO localization // 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), []]; _bandagedwounds = _target getvariable [QGVAR(bandagedWounds), []];
{ {
_amountOf = _x select 3; _x params ["", "", "_selectionX", "_amountOf", "_x4"];
// Find how much this bodypart is bleeding // Find how much this bodypart is bleeding
if !(_damaged select (_x select 2)) then { if !(_damaged select _selectionX) then {
_selectionBloodLoss set [(_x select 2), (_selectionBloodLoss select (_x select 2)) + (20 * ((_x select 4) * _amountOf))]; _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] // 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 > 0) then {
if (_amountOf >= 1) then { if (_amountOf >= 1) then {
@ -130,7 +129,7 @@ if (_show) then {
}; };
}; };
}; };
}foreach _bandagedwounds; } foreach _bandagedwounds;
} else { } else {
_damaged = [true, true, true, true, true, true]; _damaged = [true, true, true, true, true, true];
{ {
@ -160,7 +159,7 @@ if (_show) then {
_availableSelections = [50,51,52,53,54,55]; _availableSelections = [50,51,52,53,54,55];
{ {
private ["_red", "_green", "_blue"]; private ["_red", "_green", "_blue", "_total"];
_total = _x; _total = _x;
_red = 1; _red = 1;
@ -177,20 +176,22 @@ if (_show) then {
}; };
}; };
(_display displayCtrl (_availableSelections select _foreachIndex)) ctrlSetTextColor [_red, _green, _blue, 1.0]; (_display displayCtrl (_availableSelections select _foreachIndex)) ctrlSetTextColor [_red, _green, _blue, 1.0];
}foreach _selectionBloodLoss; } foreach _selectionBloodLoss;
_lbCtrl = (_display displayCtrl 200); _lbCtrl = (_display displayCtrl 200);
lbClear _lbCtrl; lbClear _lbCtrl;
{ {
_lbCtrl lbAdd (_x select 0); _x params ["_add", "_color"];
_lbCtrl lbSetColor [_foreachIndex, _x select 1]; _lbCtrl lbAdd _add;
}foreach _genericMessages; _lbCtrl lbSetColor [_foreachIndex, _color];
} foreach _genericMessages;
_amountOfGeneric = count _genericMessages; _amountOfGeneric = count _genericMessages;
{ {
_lbCtrl lbAdd (_x select 0); _x params ["_add", "_color"];
_lbCtrl lbSetColor [_foreachIndex + _amountOfGeneric, _x select 1]; _lbCtrl lbAdd _add;
}foreach _allInjuryTexts; _lbCtrl lbSetColor [_foreachIndex + _amountOfGeneric, _color];
} foreach _allInjuryTexts;
if (count _allInjuryTexts == 0) then { if (count _allInjuryTexts == 0) then {
_lbCtrl lbAdd (localize LSTRING(NoInjuriesBodypart)); _lbCtrl lbAdd (localize LSTRING(NoInjuriesBodypart));
}; };
@ -202,9 +203,7 @@ if (_show) then {
_logs = _target getvariable [QGVAR(logFile_Activity), []]; _logs = _target getvariable [QGVAR(logFile_Activity), []];
{ {
// [_message,_moment,_type, _arguments] // [_message,_moment,_type, _arguments]
_message = _x select 0; _x params ["_message", "_moment", "_type", "_arguments"];
_moment = _x select 1;
_arguments = _x select 3;
if (isLocalized _message) then { if (isLocalized _message) then {
_message = localize _message; _message = localize _message;
}; };
@ -213,10 +212,10 @@ if (_show) then {
if (typeName _x == "STRING" && {isLocalized _x}) then { if (typeName _x == "STRING" && {isLocalized _x}) then {
_arguments set [_foreachIndex, localize _x]; _arguments set [_foreachIndex, localize _x];
}; };
}foreach _arguments; } foreach _arguments;
_message = format([_message] + _arguments); _message = format([_message] + _arguments);
_logCtrl lbAdd format["%1 %2", _moment, _message]; _logCtrl lbAdd format["%1 %2", _moment, _message];
}foreach _logs; } foreach _logs;
_triageStatus = [_target] call FUNC(getTriageStatus); _triageStatus = [_target] call FUNC(getTriageStatus);
(_display displayCtrl 303) ctrlSetText (_triageStatus select 0); (_display displayCtrl 303) ctrlSetText (_triageStatus select 0);

View File

@ -4,18 +4,18 @@
* *
* Arguments: * Arguments:
* 0: The unit <OBJECT> * 0: The unit <OBJECT>
* 1: Show <BOOL> (default: true)
* *
* Return Value: * Return Value:
* nil * None
* *
* Public: Yes * Public: Yes
*/ */
#include "script_component.hpp" #include "script_component.hpp"
private ["_target", "_show", "_amount", "_item", "_log", "_message", "_triageCardTexts", "_triageStatus"]; private ["_amount", "_item", "_log", "_message", "_triageCardTexts", "_triageStatus"];
_target = _this select 0; params ["_target", ["_show", true]];
_show = if (count _this > 1) then {_this select 1} else {true};
GVAR(TriageCardTarget) = if (_show) then {_target} else {ObjNull}; GVAR(TriageCardTarget) = if (_show) then {_target} else {ObjNull};
@ -25,15 +25,16 @@ if (_show) then {
[{ [{
private ["_target", "_display", "_alphaLevel", "_alphaLevel", "_lbCtrl"]; private ["_target", "_display", "_alphaLevel", "_alphaLevel", "_lbCtrl"];
_target = (_this select 0) select 0; params ["_args", "_idPFH"];
_args params ["_target"];
if (GVAR(TriageCardTarget) != _target) exitwith { if (GVAR(TriageCardTarget) != _target) exitwith {
[_this select 1] call CBA_fnc_removePerFrameHandler; [_idPFH] call CBA_fnc_removePerFrameHandler;
}; };
disableSerialization; disableSerialization;
_display = uiNamespace getvariable QGVAR(triageCard); _display = uiNamespace getvariable QGVAR(triageCard);
if (isnil "_display") exitwith { if (isnil "_display") exitwith {
[_this select 1] call CBA_fnc_removePerFrameHandler; [_idPFH] call CBA_fnc_removePerFrameHandler;
}; };
_triageCardTexts = []; _triageCardTexts = [];
@ -44,8 +45,7 @@ if (_show) then {
_log = _target getvariable [QGVAR(triageCard), []]; _log = _target getvariable [QGVAR(triageCard), []];
{ {
_item = _x select 0; _x params ["_item", "_amount"];
_amount = _x select 1;
_message = _item; _message = _item;
if (isClass(configFile >> "CfgWeapons" >> _item)) then { if (isClass(configFile >> "CfgWeapons" >> _item)) then {
_message = getText(configFile >> "CfgWeapons" >> _item >> "DisplayName"); _message = getText(configFile >> "CfgWeapons" >> _item >> "DisplayName");
@ -55,18 +55,21 @@ if (_show) then {
}; };
}; };
_triageCardTexts pushback format["%1x - %2", _amount, _message]; _triageCardTexts pushback format["%1x - %2", _amount, _message];
}foreach _log; } foreach _log;
if (count _triageCardTexts == 0) then { if (count _triageCardTexts == 0) then {
_lbCtrl lbAdd (localize LSTRING(TriageCard_NoEntry)); _lbCtrl lbAdd (localize LSTRING(TriageCard_NoEntry));
}; };
{ {
_lbCtrl lbAdd _x; _lbCtrl lbAdd _x;
}foreach _triageCardTexts; } foreach _triageCardTexts;
_triageStatus = [_target] call FUNC(getTriageStatus); _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; }, 0, [_target]] call CBA_fnc_addPerFrameHandler;

View File

@ -3,18 +3,18 @@
* Display triage card for a unit * Display triage card for a unit
* *
* Arguments: * Arguments:
* 0: The unit <OBJECT> * 0: Show <BOOL>
* *
* Return Value: * Return Value:
* nil * None
* *
* Public: Yes * Public: Yes
*/ */
#include "script_component.hpp" #include "script_component.hpp"
private ["_show", "_ctrl", "_display", "_idc", "_pos"]; private ["_ctrl", "_display", "_idc", "_pos"];
_show = _this select 0; params ["_show"];
disableSerialization; disableSerialization;
_display = uiNamespace getvariable QGVAR(triageCard); _display = uiNamespace getvariable QGVAR(triageCard);

View File

@ -15,10 +15,9 @@
#define BLOODLOSSRATE_BASIC 0.2 #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). // TODO Only use this calculation if medium or higher, otherwise use vanilla calculations (for basic medical).
params ["_unit"];
_unit = _this select 0;
_totalBloodLoss = 0; _totalBloodLoss = 0;
// Advanced medical bloodloss handling // 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)); // (((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), []]; _internalWounds = _unit getvariable [QGVAR(internalWounds), []];
{ {
_totalBloodLoss = _totalBloodLoss + ((_x select 4) * (_x select 3)); _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 // cap the blood loss to be no greater as the current cardiac output
//(_totalBloodLoss min _cardiacOutput); //(_totalBloodLoss min _cardiacOutput);
} else { } 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); _totalBloodLoss * ((_unit getVariable [QGVAR(bleedingCoefficient), GVAR(bleedingCoefficient)]) max 0);

View File

@ -6,29 +6,28 @@
* 0: The Unit <OBJECT> * 0: The Unit <OBJECT>
* *
* ReturnValue: * ReturnValue:
* Blood Pressuret <ARRAY <NUMBER>,<NUMBER>> * 0: BloodPressure Low <NUMBER>
* 1: BloodPressure High <NUMBER>
* *
* Public: No * Public: No
*/ */
#include "script_component.hpp" #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 #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 #define MODIFIER_BP_LOW 0.1524
private ["_unit", "_bloodPressureLow", "_bloodPressureHigh", "_cardiacOutput", "_resistance"]; private ["_bloodPressureLow", "_bloodPressureHigh", "_cardiacOutput", "_resistance"];
_unit = _this select 0;
params ["_unit"];
_cardiacOutput = [_unit] call FUNC(getCardiacOutput); _cardiacOutput = [_unit] call FUNC(getCardiacOutput);
_resistance = _unit getvariable [QGVAR(peripheralResistance), 100]; _resistance = _unit getvariable [QGVAR(peripheralResistance), 100];
_bloodPressureHigh = (_cardiacOutput * MODIFIER_BP_HIGH) * _resistance; _bloodPressureHigh = (_cardiacOutput * MODIFIER_BP_HIGH) * _resistance;
_bloodPressureLow = (_cardiacOutput * MODIFIER_BP_LOW) * _resistance; _bloodPressureLow = (_cardiacOutput * MODIFIER_BP_LOW) * _resistance;
[_bloodPressureLow, _bloodPressureHigh]; [_bloodPressureLow max 0, _bloodPressureHigh max 0]

View File

@ -28,10 +28,8 @@
*/ */
#define BLOOD_CHANGE_PER_SECOND 0.0595 #define BLOOD_CHANGE_PER_SECOND 0.0595
private ["_bloodVolume", "_bloodVolumeChange", "_ivVolume"];
params ["_unit"];
private ["_unit","_bloodVolume","_bloodVolumeChange", "_ivVolume"];
_unit = _this select 0;
_bloodVolume = _unit getvariable [QGVAR(bloodVolume), 100]; _bloodVolume = _unit getvariable [QGVAR(bloodVolume), 100];
_bloodVolumeChange = -([_unit] call FUNC(getBloodLoss)); _bloodVolumeChange = -([_unit] call FUNC(getBloodLoss));
@ -43,13 +41,13 @@ if (_bloodVolume < 100.0) then {
_ivVolume = (_unit getvariable [_x, 0]) + IV_CHANGE_PER_SECOND; _ivVolume = (_unit getvariable [_x, 0]) + IV_CHANGE_PER_SECOND;
_unit setvariable [_x,_ivVolume]; _unit setvariable [_x,_ivVolume];
}; };
}foreach GVAR(IVBags); } foreach GVAR(IVBags);
} else { } else {
{ {
if ((_unit getvariable [_x, 0]) > 0) then { if ((_unit getvariable [_x, 0]) > 0) then {
_unit setvariable [_x, 0]; // lets get rid of exessive IV volume _unit setvariable [_x, 0]; // lets get rid of exessive IV volume
}; };
}foreach GVAR(IVBags); } foreach GVAR(IVBags);
}; };
_bloodVolumeChange; _bloodVolumeChange;

View File

@ -22,7 +22,6 @@
// to limit the amount of complex calculations necessary, we take a set modifier to calculate Stroke Volume. // to limit the amount of complex calculations necessary, we take a set modifier to calculate Stroke Volume.
#define MODIFIER_CARDIAC_OUTPUT 19.04761 #define MODIFIER_CARDIAC_OUTPUT 19.04761
private "_unit"; params ["_unit"];
_unit = _this select 0;
((_unit getvariable [QGVAR(bloodVolume), 100])/MODIFIER_CARDIAC_OUTPUT) + ((_unit getvariable [QGVAR(heartRate), 80])/80-1); ((_unit getvariable [QGVAR(bloodVolume), 100])/MODIFIER_CARDIAC_OUTPUT) + ((_unit getvariable [QGVAR(heartRate), 80])/80-1);

View File

@ -15,8 +15,9 @@
#define HEART_RATE_MODIFIER 0.02 #define HEART_RATE_MODIFIER 0.02
private ["_unit", "_heartRate", "_hrIncrease", "_bloodLoss", "_time", "_values", "_adjustment", "_change", "_callBack", "_bloodVolume"]; private ["_heartRate", "_hrIncrease", "_bloodLoss", "_time", "_values", "_adjustment", "_change", "_callBack", "_bloodVolume"];
_unit = _this select 0; params ["_unit"];
_hrIncrease = 0; _hrIncrease = 0;
if (!(_unit getvariable [QGVAR(inCardiacArrest),false])) then { if (!(_unit getvariable [QGVAR(inCardiacArrest),false])) then {
_heartRate = _unit getvariable [QGVAR(heartRate), 80]; _heartRate = _unit getvariable [QGVAR(heartRate), 80];
@ -24,10 +25,8 @@ if (!(_unit getvariable [QGVAR(inCardiacArrest),false])) then {
_adjustment = _unit getvariable [QGVAR(heartRateAdjustments), []]; _adjustment = _unit getvariable [QGVAR(heartRateAdjustments), []];
{ {
_values = (_x select 0); _x params ["_values", "_time", "_callBack"];
if (abs _values > 0) then { if (abs _values > 0) then {
_time = (_x select 1);
_callBack = _x select 2;
if (_time <= 0) then { if (_time <= 0) then {
_time = 1; _time = 1;
}; };
@ -47,7 +46,7 @@ if (!(_unit getvariable [QGVAR(inCardiacArrest),false])) then {
[_unit] call _callBack; [_unit] call _callBack;
}; };
}foreach _adjustment; } foreach _adjustment;
_adjustment = _adjustment - [ObjNull]; _adjustment = _adjustment - [ObjNull];
_unit setvariable [QGVAR(heartRateAdjustments), _adjustment]; _unit setvariable [QGVAR(heartRateAdjustments), _adjustment];

View File

@ -6,7 +6,9 @@
* 0: The unit <OBJECT> * 0: The unit <OBJECT>
* *
* Return Value: * Return Value:
* Triage status from the unit. Name, statusID, color <ARRAY <STRING><NUMBER><ARRAY>> * 0: Name <STRING>
* 1: Status ID <NUMBER>
* 2: Color <ARRAY <NUMBER>>
* *
* Public: Yes * Public: Yes
*/ */
@ -14,7 +16,7 @@
#include "script_component.hpp" #include "script_component.hpp"
private ["_unit","_return","_status"]; private ["_unit","_return","_status"];
_unit = _this select 0; params ["_unit"];
_status = _unit getvariable [QGVAR(triageLevel), -1]; _status = _unit getvariable [QGVAR(triageLevel), -1];
_return = switch (_status) do { _return = switch (_status) do {
case 1: {[localize LSTRING(Triage_Status_Minor), 1, [0, 0.5, 0, 0.9]]}; 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]]}; 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]]}; default {[localize LSTRING(Triage_Status_None), 0, [0, 0, 0, 0.9]]};
}; };
_return; _return

View File

@ -13,23 +13,19 @@
#include "script_component.hpp" #include "script_component.hpp"
PARAMS_1(_typeOfProjectile); params ["_typeOfProjectile"];
private ["_typeOfDamage"];
_typeOfDamage = switch (true) do { if (_typeOfProjectile isKindOf "BulletBase") exitWith {"bullet"};
case (_typeOfProjectile isKindOf "BulletBase"): {"bullet"}; if (_typeOfProjectile isKindOf "ShotgunBase") exitwith {"bullet"};
case (_typeOfProjectile isKindOf "GrenadeCore"): {"grenade"}; if (_typeOfProjectile isKindOf "GrenadeCore") exitWith {"grenade"};
case (_typeOfProjectile isKindOf "TimeBombCore"): {"explosive"}; if (_typeOfProjectile isKindOf "TimeBombCore") exitWith {"explosive"};
case (_typeOfProjectile isKindOf "MineCore"): {"explosive"}; if (_typeOfProjectile isKindOf "MineCore") exitWith {"explosive"};
case (_typeOfProjectile isKindOf "FuelExplosion"): {"explosive"}; if (_typeOfProjectile isKindOf "FuelExplosion") exitWith {"explosive"};
case (_typeOfProjectile isKindOf "ShellBase"): {"shell"}; if (_typeOfProjectile isKindOf "ShellBase") exitWith {"shell"};
case (_typeOfProjectile isKindOf "RocketBase"): {"explosive"}; if (_typeOfProjectile isKindOf "RocketBase") exitWith {"explosive"};
case (_typeOfProjectile isKindOf "MissileBase"): {"explosive"}; if (_typeOfProjectile isKindOf "MissileBase") exitWith {"explosive"};
case (_typeOfProjectile isKindOf "LaserBombCore"): {"explosive"}; if (_typeOfProjectile isKindOf "LaserBombCore") exitWith {"explosive"};
case (_typeOfProjectile isKindOf "BombCore"): {"explosive"}; if (_typeOfProjectile isKindOf "BombCore") exitWith {"explosive"};
case (_typeOfProjectile isKindOf "Grenade"): {"grenade"}; if (_typeOfProjectile isKindOf "Grenade") exitWith {"grenade"};
default {toLower _typeOfProjectile}; toLower _typeOfProjectile
};
_typeOfDamage

View File

@ -14,7 +14,7 @@
#include "script_component.hpp" #include "script_component.hpp"
private ["_unit","_return"]; private ["_unit","_return"];
_unit = _this select 0; params ["_unit"];
if (isnil QGVAR(unconsciousConditions)) then { if (isnil QGVAR(unconsciousConditions)) then {
GVAR(unconsciousConditions) = []; GVAR(unconsciousConditions) = [];
@ -25,6 +25,6 @@ _return = false;
if (typeName _x == typeName {} && {([_unit] call _x)}) exitwith { if (typeName _x == typeName {} && {([_unit] call _x)}) exitwith {
_return = true; _return = true;
}; };
}foreach GVAR(unconsciousConditions); } foreach GVAR(unconsciousConditions);
_return; _return

View File

@ -18,13 +18,8 @@
#include "script_component.hpp" #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"]; private ["_className", "_reopeningChance", "_reopeningMinDelay", "_reopeningMaxDelay", "_config", "_woundTreatmentConfig", "_bandagedWounds", "_exist", "_injuryId", "_existingInjury", "_delay", "_openWounds", "_selectedInjury", "_bandagedInjury"];
_target = _this select 0; params ["_target", "_impact", "_part", "_injuryIndex", "_injury", "_bandage"];
_impact = _this select 1;
_part = _this select 2;
_injuryIndex = _this select 3;
_injury = _this select 4;
_bandage = _this select 5;
_classID = _injury select 1; _classID = _injury select 1;
_className = GVAR(woundClassNames) select _classID; _className = GVAR(woundClassNames) select _classID;
@ -57,8 +52,8 @@ if (isClass (_config >> _className)) then {
}; };
_bandagedWounds = _target getvariable [QGVAR(bandagedWounds), []]; _bandagedWounds = _target getvariable [QGVAR(bandagedWounds), []];
_exist = false;
_injuryType = _injury select 1; _injuryType = _injury select 1;
_exist = false;
_bandagedInjury = []; _bandagedInjury = [];
{ {
if ((_x select 1) == _injuryType && (_x select 2) == (_injury select 2)) exitwith { if ((_x select 1) == _injuryType && (_x select 2) == (_injury select 2)) exitwith {
@ -69,7 +64,7 @@ _bandagedInjury = [];
_bandagedInjury = _existingInjury; _bandagedInjury = _existingInjury;
}; };
}foreach _bandagedWounds; } foreach _bandagedWounds;
if !(_exist) then { if !(_exist) then {
// [ID, classID, bodypart, percentage treated, bloodloss rate] // [ID, classID, bodypart, percentage treated, bloodloss rate]
@ -83,12 +78,8 @@ _target setvariable [QGVAR(bandagedWounds), _bandagedWounds, true];
if (random(1) <= _reopeningChance) then { if (random(1) <= _reopeningChance) then {
_delay = _reopeningMinDelay + random(_reopeningMaxDelay - _reopeningMinDelay); _delay = _reopeningMinDelay + random(_reopeningMaxDelay - _reopeningMinDelay);
[{ [{
private ["_target", "_impact", "_part", "_injuryIndex", "_bandage", "_injury", "_openWounds", "_selectedInjury","_bandagedWounds","_exist"]; private ["_bandage", "_openWounds", "_selectedInjury","_bandagedWounds","_exist"];
_target = _this select 0; params ["_target", "_impact", "_part", "_injuryIndex", "_injury"];
_impact = _this select 1;
_part = _this select 2;
_injuryIndex = _this select 3;
_injury = _this select 4;
//if (alive _target) then { //if (alive _target) then {
_openWounds = _target getvariable [QGVAR(openWounds), []]; _openWounds = _target getvariable [QGVAR(openWounds), []];
@ -108,7 +99,7 @@ if (random(1) <= _reopeningChance) then {
_existingInjury set [3, ((_existingInjury select 3) - _impact) max 0]; _existingInjury set [3, ((_existingInjury select 3) - _impact) max 0];
_bandagedWounds set [_foreachIndex, _existingInjury]; _bandagedWounds set [_foreachIndex, _existingInjury];
}; };
}foreach _bandagedWounds; } foreach _bandagedWounds;
if (_exist) then { if (_exist) then {
_target setvariable [QGVAR(bandagedWounds), _bandagedWounds, true]; _target setvariable [QGVAR(bandagedWounds), _bandagedWounds, true];

View File

@ -1,9 +1,22 @@
//#define DEBUG_MODE_FULL /*
* Author: Glowbal
* handle Litter Create
*
* Arguments:
* 0: Litter Class <STRING>
* 1: Position <ARRAY>
* 2: Unit <OBJECT>
*
* Return Value:
* None
*
* Public: No
*/
#include "script_component.hpp" #include "script_component.hpp"
if(!hasInterface) exitWith { false }; if(!hasInterface) exitWith { false };
PARAMS_3(_litterClass,_position,_direction); params ["_litterClass", "_position", "_unit"];
private["_litterObject", "_maxLitterCount"]; private["_litterObject", "_maxLitterCount"];
//IGNORE_PRIVATE_WARNING(_values); //IGNORE_PRIVATE_WARNING(_values);
@ -16,7 +29,7 @@ _litterObject = _litterClass createVehicleLocal _position;
_litterObject setDir _direction; _litterObject setDir _direction;
_litterObject setPosATL _position; _litterObject setPosATL _position;
// Move the litter next frame to get rid of HORRIBLE spacing, fixes #1112 // 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); [{ params ["_object", "_pos"]; _object setPosATL _pos; }, [_litterObject, _position]] call EFUNC(common,execNextFrame);
_maxLitterCount = getArray (configFile >> "ACE_Settings" >> QGVAR(litterSimulationDetail) >> "_values") select GVAR(litterSimulationDetail); _maxLitterCount = getArray (configFile >> "ACE_Settings" >> QGVAR(litterSimulationDetail) >> "_values") select GVAR(litterSimulationDetail);
if((count GVAR(allCreatedLitter)) > _maxLitterCount ) then { if((count GVAR(allCreatedLitter)) > _maxLitterCount ) then {
@ -34,10 +47,11 @@ if(!GVAR(litterPFHRunning) && {GVAR(litterCleanUpDelay) > 0}) then {
GVAR(litterPFHRunning) = true; 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; deleteVehicle _x;
} forEach (_x select 1); } forEach _objects;
GVAR(allCreatedLitter) set[_foreachIndex, objNull]; GVAR(allCreatedLitter) set[_foreachIndex, objNull];
}; };
} forEach GVAR(allCreatedLitter); } forEach GVAR(allCreatedLitter);
@ -49,5 +63,3 @@ if(!GVAR(litterPFHRunning) && {GVAR(litterCleanUpDelay) > 0}) then {
}; };
}, 30, []] call CBA_fnc_addPerFrameHandler; }, 30, []] call CBA_fnc_addPerFrameHandler;
}; };
true

View File

@ -1,5 +1,5 @@
/* /*
* Author: KoffeinFlummi, Glowbal * Author: KoffeinFlummi, Glowbal, commy2
* Main HandleDamage EH function. * Main HandleDamage EH function.
* *
* Arguments: * Arguments:
@ -14,61 +14,67 @@
* *
* Public: No * Public: No
*/ */
#include "script_component.hpp" #include "script_component.hpp"
private ["_unit", "_selection", "_damage", "_shooter", "_projectile", "_damageReturn", "_typeOfDamage", "_minLethalDamage", "_newDamage", "_typeIndex", "_preventDeath"]; params ["_unit", "_selection", "_damage", "_shooter", "_projectile"];
_unit = _this select 0; TRACE_5("ACE_DEBUG: HandleDamage Called",_unit, _selection, _damage, _shooter, _projectile);
_selection = _this select 1;
_damage = _this select 2;
_shooter = _this select 3;
_projectile = _this select 4;
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 { if (typeName _projectile == "OBJECT") then {
_projectile = typeOf _projectile; _projectile = typeOf _projectile;
_this set [4, _projectile]; _this set [4, _projectile];
}; };
// If the damage is being weird, we just tell it to fuck off. TRACE_3("ACE_DEBUG: HandleDamage",_selection,_damage,_unit);
if !(_selection in (GVAR(SELECTIONS) + [""])) exitWith {0};
// 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 // Exit if we disable damage temporarily
_damageOld = damage _unit; if !(_unit getVariable [QGVAR(allowDamage), true]) exitWith {
if (_selection in GVAR(SELECTIONS)) then { TRACE_3("ACE_DEBUG: HandleDamage damage disabled.",_selection,damage _unit,_unit);
_damageOld = _unit getHit _selection; if (_selection == "") then {
damage _unit
} else {
_unit getHit _selection
};
}; };
if !(_unit getVariable [QGVAR(allowDamage), true]) exitWith {_damageOld};
// Get return damage // Get return damage
_damageReturn = _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 { } else {
if !([_unit] call FUNC(hasMedicalEnabled)) exitwith { 0.01
// 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);
_typeIndex = (GVAR(allAvailableDamageTypes) find _typeOfDamage); if (vehicle _unit != _unit && {!(vehicle _unit isKindOf "StaticWeapon")} && {isNull _shooter} && {_projectile == ""} && {_selection == ""}) then {
_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 { if (GVAR(enableVehicleCrashes)) then {
_selection = GVAR(SELECTIONS) select (floor(random(count GVAR(SELECTIONS)))); _selection = GVAR(SELECTIONS) select (floor(random(count GVAR(SELECTIONS))));
}; };
}; };
if ((_minLethalDamage <= _newDamage) && {[_unit, [_selection] call FUNC(selectionNameToNumber), _newDamage] call FUNC(determineIfFatal)}) then { if ((_minLethalDamage <= _newDamage) && {[_unit, [_selection] call FUNC(selectionNameToNumber), _newDamage] call FUNC(determineIfFatal)}) then {
if ((_unit getVariable [QGVAR(preventInstaDeath), GVAR(preventInstaDeath)])) exitwith { if ((_unit getVariable [QGVAR(preventInstaDeath), GVAR(preventInstaDeath)])) exitwith {
_damageReturn = 0.9; _damageReturn = 0.9;
}; };
@ -77,11 +83,10 @@ if (GVAR(level) < 2) then {
} else { } else {
_damageReturn = _damageReturn min 0.89; _damageReturn = _damageReturn min 0.89;
}; };
} else { } else {
_damageReturn = _damageReturn min 0.89; _damageReturn = _damageReturn min 0.89;
};
}; };
[_unit] call FUNC(addToInjuredCollection); [_unit] call FUNC(addToInjuredCollection);
if (_unit getVariable [QGVAR(preventInstaDeath), GVAR(preventInstaDeath)]) exitWith { if (_unit getVariable [QGVAR(preventInstaDeath), GVAR(preventInstaDeath)]) exitWith {
@ -123,4 +128,6 @@ if (((_unit getVariable [QGVAR(enableRevive), GVAR(enableRevive)]) > 0) && {_dam
0.89; 0.89;
}; };
_damageReturn; TRACE_3("ACE_DEBUG: HandleDamage damage return",_selection,_damageReturn,_unit);
_damageReturn

View File

@ -12,23 +12,16 @@
* 6: Type of Damage <STRING> * 6: Type of Damage <STRING>
* *
* Return Value: * Return Value:
* Nothing * None
* *
* Public: No * Public: No
*/ */
#include "script_component.hpp" #include "script_component.hpp"
private ["_unit","_selectionName","_amountOfDamage","_sourceOfDamage","_typeOfProjectile","_typeOfDamage", "_part", "_damageBodyParts", "_newDamage", "_hitPoints"]; private ["_typeOfProjectile", "_part", "_damageBodyParts", "_hitPoints"];
_unit = _this select 0; params ["_unit", "_selectionName", "_amountOfDamage", "_sourceOfDamage", "_typeOfProjectile", "_newDamage"];
_selectionName = _this select 1;
_amountOfDamage = _this select 2;
_sourceOfDamage = _this select 3;
_typeOfProjectile = _this select 4;
_newDamage = _this select 5;
// 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); _part = [_selectionName] call FUNC(selectionNameToNumber);
if (_part < 0) exitwith {}; if (_part < 0) exitwith {};
@ -40,6 +33,7 @@ _damageBodyParts set [_part, (_damageBodyParts select _part) + _newDamage];
_unit setvariable [QGVAR(bodyPartStatus), _damageBodyParts, true]; _unit setvariable [QGVAR(bodyPartStatus), _damageBodyParts, true];
_typeOfDamage = [_typeOfProjectile] call FUNC(getTypeOfDamage); _typeOfDamage = [_typeOfProjectile] call FUNC(getTypeOfDamage);
[_unit, _selectionName, _newDamage, _typeOfProjectile, _typeOfDamage] call FUNC(handleDamage_assignWounds); [_unit, _selectionName, _newDamage, _typeOfProjectile, _typeOfDamage] call FUNC(handleDamage_assignWounds);
// TODO Disabled until implemented fully // TODO Disabled until implemented fully

View File

@ -6,23 +6,23 @@
* 0: Unit for which the hitpoint damage will be sorted out <OBJECT> * 0: Unit for which the hitpoint damage will be sorted out <OBJECT>
* *
* Return Value: * Return Value:
* nil * None
* *
* Public: No * Public: No
*/ */
#include "script_component.hpp" #include "script_component.hpp"
PARAMS_1(_unit); params ["_unit"];
if (!local _unit) exitwith {}; if (!local _unit) exitwith {};
private ["_bodyStatus", "_headDamage", "_torsoDamage", "_handsDamage", "_legsDamage"]; private "_bodyStatus";
// ["head", "body", "hand_l", "hand_r", "leg_l", "leg_r"] // ["head", "body", "hand_l", "hand_r", "leg_l", "leg_r"]
_bodyStatus = _unit getVariable [QGVAR(bodyPartStatus), [0,0,0,0,0,0]]; _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 ["hitHead", _headDamage min 0.95];
_unit setHitPointDamage ["hitBody", _torsoDamage min 0.95]; _unit setHitPointDamage ["hitBody", _torsoDamage min 0.95];

View File

@ -10,19 +10,15 @@
* 4: Type of the damage done <STRING> * 4: Type of the damage done <STRING>
* *
* Return Value: * Return Value:
* None <NIL> * None
* *
* Public: No * Public: No
*/ */
#include "script_component.hpp" #include "script_component.hpp"
private ["_unit", "_selectionName", "_amountOfDamage", "_sourceOfDamage", "_typeOfDamage", "_bodyPartn"]; private "_bodyPartn";
_unit = _this select 0; params ["_unit", "_selectionName", "_amountOfDamage", "_sourceOfDamage", "_typeOfDamage"];
_selectionName = _this select 1;
_amountOfDamage = _this select 2;
_sourceOfDamage = _this select 3;
_typeOfDamage = _this select 4;
_bodyPartn = [_selectionName] call FUNC(selectionNameToNumber); _bodyPartn = [_selectionName] call FUNC(selectionNameToNumber);
if (_bodyPartn > 1) exitwith {}; if (_bodyPartn > 1) exitwith {};

View File

@ -1,192 +1,60 @@
/* /*
* Author: KoffeinFlummi * Author: KoffeinFlummi, Glowbal
* Basic HandleDamage EH function. * Handle damage basic medical
* *
* Arguments: * Arguments:
* 0: Unit That Was Hit <OBJECT>
* 1: Name Of Hit Selection <STRING>
* 2: Amount Of Damage <NUMBER>
* 3: Shooter <OBJECT>
* 4: Projectile <STRING>
* 5: Current damage to be returned <NUMBER>
* *
* Return Value: * Return Value:
* Damage To Be Inflicted <NUMBER> * <nil>
* *
* Public: No * Public: No
*/ */
#include "script_component.hpp" #include "script_component.hpp"
#define LEGDAMAGETRESHOLD1 1 private ["_damageBodyParts", "_cache_params", "_cache_damages"];
#define LEGDAMAGETRESHOLD2 1.7 params ["_target"];
#define ARMDAMAGETRESHOLD1 1 TRACE_1("ACE_DEBUG: HandleDamage_BASIC Called",_target);
#define ARMDAMAGETRESHOLD2 1.7
#define UNCONSCIOUSNESSTRESHOLD 0.7
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; TRACE_4("ACE_DEBUG: HandleDamage BASIC",_unit, _damageBodyParts,_cache_params,_cache_damages);
_selectionName = _this select 1;
_damage = _this select 2;
_shooter = _this select 3;
_projectile = _this select 4;
// Apply damage treshold / coefficient {
_threshold = [ _x params ["_unit","_selectionName","_amountOfDamage","_sourceOfDamage","_typeOfProjectile","_typeOfDamage"];
_unit getVariable [QGVAR(damageThreshold), GVAR(AIDamageThreshold)], if !(isNull _sourceOfDamage && {_typeOfProjectile == ""} && {vehicle _unit == _unit} && {(_selectionName == "head" || isBurning _unit)}) then {
_unit getVariable [QGVAR(damageThreshold), GVAR(playerDamageThreshold)] _part = [_selectionName] call FUNC(selectionNameToNumber);
] select ([_unit] call EFUNC(common,isPlayer)); if (_part < 0) exitwith {};
_damage = _damage * (1 / _threshold);
// This is a new hit, reset variables. private ["_newDamage", "_pain"];
// Note: sometimes handleDamage spans over 2 or even 3 frames. _newDamage = (_cache_damages select _foreachIndex);
if (diag_frameno > (_unit getVariable [QGVAR(basic_frameNo), -3]) + 2) then { _damageBodyParts set [_part, (_damageBodyParts select _part) + _newDamage];
_unit setVariable [QGVAR(basic_frameNo), diag_frameno]; _unit setvariable [QGVAR(bodyPartStatus), _damageBodyParts];
_unit setVariable [QGVAR(isFalling), false];
_unit setVariable [QGVAR(projectiles), []];
_unit setVariable [QGVAR(hitPoints), []];
_unit setVariable [QGVAR(damages), []];
_unit setVariable [QGVAR(structDamage), 0];
if (isnil {_unit getvariable QGVAR(structDamagePFH)}) then { if (alive _unit && {!(_unit getvariable ["ACE_isUnconscious", false])}) then {
// Assign orphan structural damage to torso // 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 {
private ["_unit", "_damagesum"]; [_unit, true, 0.5+random(3)] call FUNC(setUnconscious);
_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;
}; };
}, 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;
};
_unit setVariable [QGVAR(projectiles), _cache_projectiles];
_unit setVariable [QGVAR(hitPoints), _cache_hitpoints];
_unit setVariable [QGVAR(damages), _cache_damages];
};
// 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;
};
};
if (_selectionName == "") then {
_damage = _damage + (_unit getVariable QGVAR(structDamage));
} else {
_damage = _damage + _newDamage;
};
// 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 = _unit getVariable [QGVAR(pain), 0];
_pain = _pain + _newDamage * (1 - (_unit getVariable [QGVAR(morphine), 0])); _pain = _pain + (_newDamage / 4) * (1 - (_unit getVariable [QGVAR(morphine), 0]));
_unit setVariable [QGVAR(pain), _pain min 1, true]; _unit setVariable [QGVAR(pain), _pain min 1, true];
}; };
}foreach _cache_params;
// Unconsciousness // We broadcast the value across the net here, in order to avoid broadcasting it multiple times earlier in the above code block
if (_selectionName == "" and _target setvariable [QGVAR(bodyPartStatus), _damageBodyParts, true];
_damage >= UNCONSCIOUSNESSTRESHOLD and TRACE_2("ACE_DEBUG: HandleDamage BASIC Broadcast value here",_unit, _target getvariable QGVAR(bodyPartStatus));
_damage < 1 and
!(_unit getVariable ["ACE_isUnconscious", False]
)) then {
[_unit, true] call FUNC(setUnconscious);
};
_damage 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);

View File

@ -18,13 +18,9 @@
#include "script_component.hpp" #include "script_component.hpp"
private ["_unit", "_selectionName", "_damage", "_source", "_projectile", "_hitSelections", "_hitPoints", "_impactVelocity", "_newDamage", "_cache_hitpoints", "_cache_projectiles", "_cache_params", "_cache_damages"]; private ["_hitSelections", "_hitPoints", "_impactVelocity", "_newDamage", "_cache_hitpoints", "_cache_projectiles", "_cache_params", "_cache_damages"];
_unit = _this select 0; params ["_unit", "_selectionName", "_damage", "_source", "_projectile"];
_selectionName = _this select 1; TRACE_8("ACE_DEBUG: HandleDamage_Caching Called",_unit, _selectionName, _damage, _source, _projectile,GVAR(SELECTIONS),GVAR(HITPOINTS),damage _unit);
_damage = _this select 2;
_source = _this select 3;
_projectile = _this select 4;
_hitSelections = GVAR(SELECTIONS); _hitSelections = GVAR(SELECTIONS);
_hitPoints = GVAR(HITPOINTS); _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 // handle the cached damages 3 frames later
[{ [{
private ["_args", "_params"]; 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 { if (GVAR(level) < 2 || {!([_unit] call FUNC(hasMedicalEnabled))}) then {
(_args select 0) setDamage 0; [_unit] call FUNC(handleDamage_basic);
} else {
_cache_params = (_args select 0) getVariable [QGVAR(cachedHandleDamageParams), []]; _cache_params = _unit getVariable [QGVAR(cachedHandleDamageParams), []];
_cache_damages = (_args select 0) getVariable QGVAR(cachedDamages); _cache_damages = _unit getVariable QGVAR(cachedDamages);
{ {
_params = _x + [_cache_damages select _foreachIndex]; _params = _x + [_cache_damages select _foreachIndex];
_params call FUNC(handleDamage_advanced); _params call FUNC(handleDamage_advanced);
}foreach _cache_params; } foreach _cache_params;
[_unit] call FUNC(handleDamage_advancedSetDamage);
[(_args select 0)] call FUNC(handleDamage_advancedSetDamage); };
[_idPFH] call CBA_fnc_removePerFrameHandler;
[(_this select 1)] call cba_fnc_removePerFrameHandler;
}; };
}, 0, [_unit, diag_frameno] ] call CBA_fnc_addPerFrameHandler; }, 0, [_unit, diag_frameno] ] call CBA_fnc_addPerFrameHandler;
@ -152,4 +150,6 @@ if (_selectionName != "") then {
_unit setVariable [QGVAR(cachedHandleDamageParams), _cache_params]; _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

View File

@ -17,12 +17,8 @@
#include "script_component.hpp" #include "script_component.hpp"
private ["_unit", "_selectionName", "_amountOfDamage", "_sourceOfDamage", "_typeOfDamage", "_bodyPartn", "_fractures", "_fractureType"]; private ["_bodyPartn", "_fractures", "_fractureType"];
_unit = _this select 0; params ["_unit", "_selectionName", "_amountOfDamage", "_sourceOfDamage", "_typeOfDamage"];
_selectionName = _this select 1;
_amountOfDamage = _this select 2;
_sourceOfDamage = _this select 3;
_typeOfDamage = _this select 4;
_bodyPartn = [_selectionName] call FUNC(selectionNameToNumber); _bodyPartn = [_selectionName] call FUNC(selectionNameToNumber);
_fractureType = 1; _fractureType = 1;

View File

@ -10,19 +10,15 @@
* 4: Type of the damage done <STRING> * 4: Type of the damage done <STRING>
* *
* Return Value: * Return Value:
* None <NIL> * None
* *
* Public: No * Public: No
*/ */
#include "script_component.hpp" #include "script_component.hpp"
private ["_unit", "_selectionName", "_amountOfDamage", "_sourceOfDamage", "_typeOfDamage", "_bodyPartn"]; private "_bodyPartn";
_unit = _this select 0; params ["_unit", "_selectionName", "_amountOfDamage", "_sourceOfDamage", "_typeOfDamage"];
_selectionName = _this select 1;
_amountOfDamage = _this select 2;
_sourceOfDamage = _this select 3;
_typeOfDamage = _this select 4;
_bodyPartn = [_selectionName] call FUNC(selectionNameToNumber); _bodyPartn = [_selectionName] call FUNC(selectionNameToNumber);
// TODO implement internal injuries // TODO implement internal injuries

View File

@ -10,19 +10,16 @@
* 4: Type of the damage done <STRING> * 4: Type of the damage done <STRING>
* *
* Return Value: * Return Value:
* None <NIL> * None
* *
* Public: No * Public: No
*/ */
#include "script_component.hpp" #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"]; 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"];
_unit = _this select 0; params ["_unit", "_selectionName", "_damage", "_typeOfProjectile", "_typeOfDamage"];
_selectionName = _this select 1; TRACE_6("ACE_DEBUG: HandleDamage Called",_unit, _selectionName, _damage, _shooter, _typeOfProjectile,_typeOfDamage);
_damage = _this select 2;
_typeOfProjectile = _this select 3;
_typeOfDamage = _this select 4;
// Administration for open wounds and ids // Administration for open wounds and ids
_openWounds = _unit getvariable[QGVAR(openWounds), []]; _openWounds = _unit getvariable[QGVAR(openWounds), []];
@ -43,7 +40,7 @@ _foundIndex = -1;
if (_x select 1 == _toAddClassID && {_x select 2 == _bodyPartNToAdd}) exitwith { if (_x select 1 == _toAddClassID && {_x select 2 == _bodyPartNToAdd}) exitwith {
_foundIndex = _foreachIndex; _foundIndex = _foreachIndex;
}; };
}foreach _openWounds; } foreach _openWounds;
if (_foundIndex < 0) then { if (_foundIndex < 0) then {
// Since it is a new injury, we will have to add it to the open wounds array to store it // 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 = _openWounds select _foundIndex;
_injury set [3, (_injury select 3) + 1]; _injury set [3, (_injury select 3) + 1];
}; };
}foreach _woundsCreated; } foreach _woundsCreated;
_unit setvariable [QGVAR(openWounds), _openWounds, true]; _unit setvariable [QGVAR(openWounds), _openWounds, true];
@ -64,3 +61,4 @@ if (count _woundsCreated > 0) then {
_painLevel = _unit getvariable [QGVAR(pain), 0]; _painLevel = _unit getvariable [QGVAR(pain), 0];
_unit setvariable [QGVAR(pain), _painLevel + _painToAdd]; _unit setvariable [QGVAR(pain), _painLevel + _painToAdd];
TRACE_6("ACE_DEBUG: HandleDamage_WoundsOLD",_unit, _painLevel, _painToAdd, _unit getvariable QGVAR(pain), _unit getvariable QGVAR(openWounds),_woundsCreated);

View File

@ -17,12 +17,9 @@
#include "script_component.hpp" #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"]; 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"];
_unit = _this select 0; params ["_unit", "_selectionName", "_damage", "_typeOfProjectile", "_typeOfDamage"];
_selectionName = _this select 1; TRACE_6("ACE_DEBUG: HandleDamage_WoundsOLD Called",_unit, _selectionName, _damage, _shooter, _typeOfProjectile,_typeOfDamage);
_damage = _this select 2;
_typeOfProjectile = _this select 3;
_typeOfDamage = _this select 4;
// Convert the selectionName to a number and ensure it is a valid selection. // Convert the selectionName to a number and ensure it is a valid selection.
_bodyPartn = [_selectionName] call FUNC(selectionNameToNumber); _bodyPartn = [_selectionName] call FUNC(selectionNameToNumber);
@ -70,7 +67,7 @@ _allPossibleInjuries = [];
_allPossibleInjuries pushback _x; _allPossibleInjuries pushback _x;
}; };
}; };
}foreach _allInjuriesForDamageType; } foreach _allInjuriesForDamageType;
// No possible wounds available for this damage type or damage amount. // No possible wounds available for this damage type or damage amount.
if (_highestPossibleSpot < 0) exitwith {}; if (_highestPossibleSpot < 0) exitwith {};
@ -98,7 +95,7 @@ _woundsCreated = [];
if (_x select 1 == _toAddClassID && {_x select 2 == _bodyPartNToAdd}) exitwith { if (_x select 1 == _toAddClassID && {_x select 2 == _bodyPartNToAdd}) exitwith {
_foundIndex = _foreachIndex; _foundIndex = _foreachIndex;
}; };
}foreach _openWounds; } foreach _openWounds;
}; };
_injury = []; _injury = [];
@ -123,21 +120,15 @@ _woundsCreated = [];
_painToAdd = _painToAdd + (_toAddInjury select 3); _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 // Only update if new wounds have been created
if (count _woundsCreated > 0) then { if (count _woundsCreated > 0) then {
// _unit setvariable [QGVAR(lastUniqueWoundID), _woundID, true]; _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;
}; };
_painLevel = _unit getvariable [QGVAR(pain), 0]; _painLevel = _unit getvariable [QGVAR(pain), 0];
_unit setvariable [QGVAR(pain), _painLevel + _painToAdd]; _unit setvariable [QGVAR(pain), _painLevel + _painToAdd];
TRACE_6("ACE_DEBUG: HandleDamage_WoundsOLD",_unit, _painLevel, _painToAdd, _unit getvariable QGVAR(pain), _unit getvariable QGVAR(openWounds),_woundsCreated);

View File

@ -13,8 +13,8 @@
#include "script_component.hpp" #include "script_component.hpp"
private["_unit", "_openWounds"]; private "_openWounds";
_unit = _this select 0; params ["_unit"];
if (!local _unit) exitwith {}; if (!local _unit) exitwith {};
_unit setvariable [QGVAR(pain), 0]; _unit setvariable [QGVAR(pain), 0];
@ -22,11 +22,4 @@ if (GVAR(level) >= 2) then {
_unit setvariable [QGVAR(heartRate), 0]; _unit setvariable [QGVAR(heartRate), 0];
_unit setvariable [QGVAR(bloodPressure), [0, 0]]; _unit setvariable [QGVAR(bloodPressure), [0, 0]];
_unit setvariable [QGVAR(airwayStatus), 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;
};
}; };

View File

@ -15,9 +15,7 @@
#include "script_component.hpp" #include "script_component.hpp"
private["_unit", "_local"]; params ["_unit", "_local"];
_unit = _this select 0;
_local = _this select 1;
if (_local) then { if (_local) then {
if (_unit getvariable[QGVAR(addedToUnitLoop),false]) then { if (_unit getvariable[QGVAR(addedToUnitLoop),false]) then {
[_unit, true] call FUNC(addToInjuredCollection); [_unit, true] call FUNC(addToInjuredCollection);

Some files were not shown because too many files have changed in this diff Show More