Merge branch 'master' into german-merge

This commit is contained in:
KoffeinFlummi 2015-07-25 19:35:03 +02:00
commit 9805a8270a
475 changed files with 10100 additions and 2018 deletions

1
.gitignore vendored
View File

@ -5,3 +5,4 @@ texHeaders.bin
*.swp *.swp
*.swo *.swo
*.biprivatekey *.biprivatekey
Thumbs.db

View File

@ -18,6 +18,7 @@ Kieran
NouberNou NouberNou
PabstMirror <pabstmirror@gmail.com> PabstMirror <pabstmirror@gmail.com>
Ruthberg <ulteq@web.de> Ruthberg <ulteq@web.de>
SilentSpike <SilentSpike100@gmail.com>
tpM tpM
ViperMaul ViperMaul
VKing <kauestad@gmail.com> VKing <kauestad@gmail.com>
@ -37,7 +38,7 @@ Alganthe <alganthe@live.fr>
Anthariel <Contact@storm-simulation.com> Anthariel <Contact@storm-simulation.com>
Asgar Serran <piechottaf@web.de> Asgar Serran <piechottaf@web.de>
Bla1337 Bla1337
BlackPixxel BlackPixxel <blackpixxel96@gmail.com>
BlackQwar BlackQwar
Brakoviejo Brakoviejo
Brisse <brisse@outlook.com> Brisse <brisse@outlook.com>
@ -81,6 +82,7 @@ nikolauska <nikolauska1@gmail.com>
nomisum <nomisum@gmail.com> nomisum <nomisum@gmail.com>
OnkelDisMaster <onkeldismaster@gmail.com> OnkelDisMaster <onkeldismaster@gmail.com>
oscarmolinadev oscarmolinadev
PaxJaromeMalues <seemax1991@gmail.com>
pokertour pokertour
Professor <lukas.trneny@wo.cz> Professor <lukas.trneny@wo.cz>
rakowozz rakowozz
@ -89,7 +91,6 @@ Raspu86
Riccardo Petricca <petriccarcc@gmail.com> Riccardo Petricca <petriccarcc@gmail.com>
Robert Boklahánics <bokirobi@gmail.com> Robert Boklahánics <bokirobi@gmail.com>
ruPaladin <happyworm24@rambler.ru> ruPaladin <happyworm24@rambler.ru>
SilentSpike <SilentSpike100@gmail.com>
simon84 <badguy360th@gmail.com> simon84 <badguy360th@gmail.com>
Sniperwolf572 <tenga6@gmail.com> Sniperwolf572 <tenga6@gmail.com>
SzwedzikPL <szwedzikpl@gmail.com> SzwedzikPL <szwedzikpl@gmail.com>

View File

@ -4,11 +4,11 @@
</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.0.1-blue.svg" <img src="https://img.shields.io/badge/Version-3.1.1-blue.svg"
alt="ACE version"> alt="ACE version">
</a> </a>
<a href="https://github.com/acemod/ACE3/releases/download/v3.0.1/ace3_3.0.1.zip"> <a href="https://github.com/acemod/ACE3/releases/download/v3.1.1/ace3_3.1.1.zip">
<img src="http://img.shields.io/badge/Download-40.9_MB-green.svg" <img src="http://img.shields.io/badge/Download-51.7_MB-green.svg"
alt="ACE download"> alt="ACE download">
</a> </a>
<a href="https://github.com/acemod/ACE3/issues"> <a href="https://github.com/acemod/ACE3/issues">

Binary file not shown.

BIN
ace_parse_imagepath.dll Normal file

Binary file not shown.

View File

@ -31,6 +31,7 @@
<Spanish>Balística avanzada</Spanish> <Spanish>Balística avanzada</Spanish>
<German>Erweiterte Ballistik</German> <German>Erweiterte Ballistik</German>
<Czech>Pokročilá balistika</Czech> <Czech>Pokročilá balistika</Czech>
<Portuguese>Balística avançada</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_enabled_DisplayName"> <Key ID="STR_ACE_Advanced_Ballistics_enabled_DisplayName">
<English>Advanced Ballistics</English> <English>Advanced Ballistics</English>
@ -38,6 +39,7 @@
<Spanish>Balística avanzada</Spanish> <Spanish>Balística avanzada</Spanish>
<German>Erweiterte Ballistik</German> <German>Erweiterte Ballistik</German>
<Czech>Pokročilá balistika</Czech> <Czech>Pokročilá balistika</Czech>
<Portuguese>Balística avançada</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_enabled_Description"> <Key ID="STR_ACE_Advanced_Ballistics_enabled_Description">
<English>Enables advanced ballistics</English> <English>Enables advanced ballistics</English>
@ -45,6 +47,7 @@
<Spanish>Activa la balística avanzada</Spanish> <Spanish>Activa la balística avanzada</Spanish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulateForSnipers_DisplayName"> <Key ID="STR_ACE_Advanced_Ballistics_simulateForSnipers_DisplayName">
<English>Enabled For Snipers</English> <English>Enabled For Snipers</English>
@ -52,6 +55,7 @@
<Polish>Akt. dla snajperów</Polish> <Polish>Akt. dla snajperów</Polish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulateForSnipers_Description"> <Key ID="STR_ACE_Advanced_Ballistics_simulateForSnipers_Description">
<English>Enables advanced ballistics for non local snipers (when using high power optics)</English> <English>Enables advanced ballistics for non local snipers (when using high power optics)</English>
@ -59,6 +63,7 @@
<Polish>Aktywuje zaawansowaną balistykę dla nielokalnych snajperów (kiedy używają optyki)</Polish> <Polish>Aktywuje zaawansowaną balistykę dla nielokalnych snajperów (kiedy używają optyki)</Polish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulateForGroupMembers_DisplayName"> <Key ID="STR_ACE_Advanced_Ballistics_simulateForGroupMembers_DisplayName">
<English>Enabled For Group Members</English> <English>Enabled For Group Members</English>
@ -66,6 +71,7 @@
<Polish>Akt. dla czł. grupy</Polish> <Polish>Akt. dla czł. grupy</Polish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulateForGroupMembers_Description"> <Key ID="STR_ACE_Advanced_Ballistics_simulateForGroupMembers_Description">
<English>Enables advanced ballistics for non local group members</English> <English>Enables advanced ballistics for non local group members</English>
@ -73,6 +79,7 @@
<Polish>Aktywuje zaawansowaną balistykę dla nielokalnych członków grupy</Polish> <Polish>Aktywuje zaawansowaną balistykę dla nielokalnych członków grupy</Polish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulateForEveryone_DisplayName"> <Key ID="STR_ACE_Advanced_Ballistics_simulateForEveryone_DisplayName">
<English>Enabled For Everyone</English> <English>Enabled For Everyone</English>
@ -80,6 +87,7 @@
<Polish>Akt. dla wszystkich</Polish> <Polish>Akt. dla wszystkich</Polish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulateForEveryone_Description"> <Key ID="STR_ACE_Advanced_Ballistics_simulateForEveryone_Description">
<English>Enables advanced ballistics for all non local players (enabling this may degrade performance during heavy firefights in multiplayer)</English> <English>Enables advanced ballistics for all non local players (enabling this may degrade performance during heavy firefights in multiplayer)</English>
@ -87,6 +95,7 @@
<Polish>Aktywuje zaawansowaną balistykę dla wszystkich nielokalnych graczy (aktywacja tej opcji może spodowować spory spadek wydajności podczas ciężkiej wymiany ognia)</Polish> <Polish>Aktywuje zaawansowaną balistykę dla wszystkich nielokalnych graczy (aktywacja tej opcji może spodowować spory spadek wydajności podczas ciężkiej wymiany ognia)</Polish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_alwaysSimulateForGroupMembers_DisplayName"> <Key ID="STR_ACE_Advanced_Ballistics_alwaysSimulateForGroupMembers_DisplayName">
<English>Always Enabled For Group Members</English> <English>Always Enabled For Group Members</English>
@ -94,6 +103,7 @@
<Spanish>Siempre activada para miembros de grupo</Spanish> <Spanish>Siempre activada para miembros de grupo</Spanish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_alwaysSimulateForGroupMembers_Description"> <Key ID="STR_ACE_Advanced_Ballistics_alwaysSimulateForGroupMembers_Description">
<English>Always enables advanced ballistics when a group member fires</English> <English>Always enables advanced ballistics when a group member fires</English>
@ -101,6 +111,7 @@
<Spanish>Activada la balística avanzada siempre cuando miembros de grupo disparan</Spanish> <Spanish>Activada la balística avanzada siempre cuando miembros de grupo disparan</Spanish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_disabledInFullAutoMod_DisplayName"> <Key ID="STR_ACE_Advanced_Ballistics_disabledInFullAutoMod_DisplayName">
<English>Disabled In FullAuto Mode</English> <English>Disabled In FullAuto Mode</English>
@ -108,6 +119,7 @@
<Spanish>Desactivada en modo automático</Spanish> <Spanish>Desactivada en modo automático</Spanish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_disabledInFullAutoMod_Description"> <Key ID="STR_ACE_Advanced_Ballistics_disabledInFullAutoMod_Description">
<English>Disables the advanced ballistics during full auto fire</English> <English>Disables the advanced ballistics during full auto fire</English>
@ -115,6 +127,7 @@
<Spanish>Desactivada la balística avanzada durante el fuego automático</Spanish> <Spanish>Desactivada la balística avanzada durante el fuego automático</Spanish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_ammoTemperatureEnabled_DisplayName"> <Key ID="STR_ACE_Advanced_Ballistics_ammoTemperatureEnabled_DisplayName">
<English>Enable Ammo Temperature Simulation</English> <English>Enable Ammo Temperature Simulation</English>
@ -122,6 +135,7 @@
<Spanish>Activar simulación de temperatura de munición</Spanish> <Spanish>Activar simulación de temperatura de munición</Spanish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_ammoTemperatureEnabled_Description"> <Key ID="STR_ACE_Advanced_Ballistics_ammoTemperatureEnabled_Description">
<English>Muzzle velocity varies with ammo temperature</English> <English>Muzzle velocity varies with ammo temperature</English>
@ -129,6 +143,7 @@
<Spanish>La velocidad de salida varía con la temperatura de la munición</Spanish> <Spanish>La velocidad de salida varía con la temperatura de la munición</Spanish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_barrelLengthInfluenceEnabled_DisplayName"> <Key ID="STR_ACE_Advanced_Ballistics_barrelLengthInfluenceEnabled_DisplayName">
<English>Enable Barrel Length Simulation</English> <English>Enable Barrel Length Simulation</English>
@ -136,6 +151,7 @@
<Spanish>Habilitar la simulación de longitud del cañón</Spanish> <Spanish>Habilitar la simulación de longitud del cañón</Spanish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_barrelLengthInfluenceEnabled_Description"> <Key ID="STR_ACE_Advanced_Ballistics_barrelLengthInfluenceEnabled_Description">
<English>Muzzle velocity varies with barrel length</English> <English>Muzzle velocity varies with barrel length</English>
@ -143,6 +159,7 @@
<Spanish>La velocidad de salidal varía con la longitud del cañón</Spanish> <Spanish>La velocidad de salidal varía con la longitud del cañón</Spanish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_bulletTraceEnabled_DisplayName"> <Key ID="STR_ACE_Advanced_Ballistics_bulletTraceEnabled_DisplayName">
<English>Enable Bullet Trace Effect</English> <English>Enable Bullet Trace Effect</English>
@ -150,6 +167,7 @@
<Spanish>Activar el efecto trazador de la bala</Spanish> <Spanish>Activar el efecto trazador de la bala</Spanish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_bulletTraceEnabled_Description"> <Key ID="STR_ACE_Advanced_Ballistics_bulletTraceEnabled_Description">
<English>Enables a bullet trace effect to high caliber bullets (only visible when looking through high power optics)</English> <English>Enables a bullet trace effect to high caliber bullets (only visible when looking through high power optics)</English>
@ -157,6 +175,7 @@
<Spanish>Activa el efecto trazador de la balas de gran calibre (solo visible cuando se mira a través de una mira telescópica)</Spanish> <Spanish>Activa el efecto trazador de la balas de gran calibre (solo visible cuando se mira a través de una mira telescópica)</Spanish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulationInterval_DisplayName"> <Key ID="STR_ACE_Advanced_Ballistics_simulationInterval_DisplayName">
<English>Simulation Interval</English> <English>Simulation Interval</English>
@ -164,6 +183,7 @@
<Spanish>Intervalo de simulación</Spanish> <Spanish>Intervalo de simulación</Spanish>
<German>Simulationsintervall</German> <German>Simulationsintervall</German>
<Czech>Interval simulace</Czech> <Czech>Interval simulace</Czech>
<Portuguese>Intervalo da simulação</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulationInterval_Description"> <Key ID="STR_ACE_Advanced_Ballistics_simulationInterval_Description">
<English>Defines the interval between every calculation step</English> <English>Defines the interval between every calculation step</English>
@ -171,6 +191,7 @@
<Spanish>Define el intervalo entre cada cálculo</Spanish> <Spanish>Define el intervalo entre cada cálculo</Spanish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulationRadius_DisplayName"> <Key ID="STR_ACE_Advanced_Ballistics_simulationRadius_DisplayName">
<English>Simulation Radius</English> <English>Simulation Radius</English>
@ -178,6 +199,7 @@
<Spanish>Radio de simulación</Spanish> <Spanish>Radio de simulación</Spanish>
<German>Simulationsradius</German> <German>Simulationsradius</German>
<Czech>Rozsah simulace</Czech> <Czech>Rozsah simulace</Czech>
<Portuguese>Raio de simulação</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulationRadius_Description"> <Key ID="STR_ACE_Advanced_Ballistics_simulationRadius_Description">
<English>Defines the radius around the player (in meters) at which advanced ballistics are applied to projectiles</English> <English>Defines the radius around the player (in meters) at which advanced ballistics are applied to projectiles</English>
@ -185,11 +207,12 @@
<Spanish>Define el radio alrededor del jugador (en metros) en el cual se aplica la balística avanzada a los proyectiles</Spanish> <Spanish>Define el radio alrededor del jugador (en metros) en el cual se aplica la balística avanzada a los proyectiles</Spanish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_Description"> <Key ID="STR_ACE_Advanced_Ballistics_Description">
<English></English>
<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>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -10,7 +10,7 @@ class CfgVehicles {
showDisabled = 0; showDisabled = 0;
priority = 2; priority = 2;
icon = PATHTOF(UI\ATRAG_Icon.paa); icon = PATHTOF(UI\ATRAG_Icon.paa);
exceptions[] = {"notOnMap", "isNotInside"}; exceptions[] = {"notOnMap", "isNotInside", "isNotSitting"};
}; };
}; };
}; };

View File

@ -1,7 +1,7 @@
["ACE3 Equipment", QGVAR(ATragMXDialogKey), localize LSTRING(ATragMXDialogKey), ["ACE3 Equipment", QGVAR(ATragMXDialogKey), localize LSTRING(ATragMXDialogKey),
{ {
// Conditions: canInteract // Conditions: canInteract
if !([ACE_player, objNull, ["notOnMap", "isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; if !([ACE_player, objNull, ["notOnMap", "isNotInside", "isNotSitting"]] call EFUNC(common,canInteractWith)) exitWith {false};
if (GVAR(active)) exitWith { if (GVAR(active)) exitWith {
closeDialog 0; closeDialog 0;
false false
@ -21,7 +21,7 @@ _conditonCode = {
}; };
_toggleCode = { _toggleCode = {
// Conditions: canInteract // Conditions: canInteract
if !([ACE_player, objNull, ["notOnMap", "isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {}; if !([ACE_player, objNull, ["notOnMap", "isNotInside", "isNotSitting"]] call EFUNC(common,canInteractWith)) exitWith {};
if (GVAR(active)) exitWith { if (GVAR(active)) exitWith {
closeDialog 0; closeDialog 0;
}; };

View File

@ -3,14 +3,17 @@ class CfgMagazines {
class CA_Magazine; class CA_Magazine;
class B_IR_Grenade: CA_Magazine { class B_IR_Grenade: CA_Magazine {
ACE_Attachable = "B_IRStrobe"; ACE_Attachable = "B_IRStrobe";
model = QUOTE(PATHTOF(data\ace_IRStrobe.p3d));
}; };
class O_IR_Grenade: B_IR_Grenade { class O_IR_Grenade: B_IR_Grenade {
ACE_Attachable = "O_IRStrobe"; ACE_Attachable = "O_IRStrobe";
model = QUOTE(PATHTOF(data\ace_IRStrobe.p3d));
}; };
class I_IR_Grenade: B_IR_Grenade { class I_IR_Grenade: B_IR_Grenade {
ACE_Attachable = "I_IRStrobe"; ACE_Attachable = "I_IRStrobe";
model = QUOTE(PATHTOF(data\ace_IRStrobe.p3d));
}; };
class SmokeShell; class SmokeShell;

View File

@ -1,4 +1,3 @@
class CfgWeapons { class CfgWeapons {
class ACE_ItemCore; class ACE_ItemCore;
class InventoryItem_Base_F; class InventoryItem_Base_F;
@ -9,11 +8,11 @@ class CfgWeapons {
scope = 2; scope = 2;
displayName = CSTRING(IrStrobe_Name); displayName = CSTRING(IrStrobe_Name);
descriptionShort = CSTRING(IrStrobe_Description); descriptionShort = CSTRING(IrStrobe_Description);
model = "\A3\weapons_F\ammo\mag_univ.p3d"; model = QUOTE(PATHTOF(data\ace_IRStrobe.p3d));
picture = PATHTOF(UI\irstrobe_item.paa); picture = PATHTOF(UI\irstrobe_item.paa);
class ItemInfo: InventoryItem_Base_F { class ItemInfo: InventoryItem_Base_F {
mass = 1; mass = 1;
}; };
}; };
}; };

Binary file not shown.

View File

@ -0,0 +1,90 @@
class StageTI
{
texture = "a3\data_f\default_glass_ti_ca.paa";
};
ambient[] = {1,1,1,1};
diffuse[] = {1,1,1,1};
forcedDiffuse[] = {0,0,0,1};
emmisive[] = {0,0,0,1};
specular[] = {0.99999976,0.99999976,0.99999976,1};
specularPower = 128;
PixelShaderID = "Super";
VertexShaderID = "Super";
class Stage1
{
texture = "z\ace\addons\attach\data\ace_IRStrobe_nohq.paa";
uvSource = "tex";
class uvTransform
{
aside[] = {1,0,0};
up[] = {0,1,0};
dir[] = {0,0,0};
pos[] = {0,0,0};
};
};
class Stage2
{
texture = "#(argb,8,8,3)color(0.5,0.5,0.5,0.5,DT)";
uvSource = "tex";
class uvTransform
{
aside[] = {1,0,0};
up[] = {0,1,0};
dir[] = {0,0,0};
pos[] = {0,0,0};
};
};
class Stage3
{
texture = "#(argb,8,8,3)color(0,0,0,0,MC)";
uvSource = "tex";
class uvTransform
{
aside[] = {1,0,0};
up[] = {0,1,0};
dir[] = {0,0,0};
pos[] = {0,0,0};
};
};
class Stage4
{
texture = "#(argb,8,8,3)color(1,1,1,1,AS)";
uvSource = "tex";
class uvTransform
{
aside[] = {1,0,0};
up[] = {0,1,0};
dir[] = {0,0,0};
pos[] = {0,0,0};
};
};
class Stage5
{
texture = "#(argb,8,8,3)color(0,0.1,0.1,0.1,SMDI)";
uvSource = "tex";
class uvTransform
{
aside[] = {1,0,0};
up[] = {0,1,0};
dir[] = {0,0,0};
pos[] = {0,0,0};
};
};
class Stage6
{
texture = "#(ai,32,128,1)fresnel(0.71,0.74)";
uvSource = "none";
};
class Stage7
{
texture = "a3\data_f\env_land_co.paa";
useWorldEnvMap = "true";
uvSource = "tex";
class uvTransform
{
aside[] = {1.0,0.0,0.0};
up[] = {0.0,1.0,0.0};
dir[] = {0.0,0.0,0.0};
pos[] = {0.0,0.0,0.0};
};
};

Binary file not shown.

Binary file not shown.

View File

@ -1,8 +1,7 @@
ace_lockbackpacks ace_backpacks
================= =================
Introduces the ability to lock one's backpack. Adds indication when someone else opens your backpack (soundeffect / camShake).
## Maintainers ## Maintainers

View File

@ -225,5 +225,27 @@ class CfgVehicles {
MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_API_Mag,4); MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_API_Mag,4);
MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_AMAX_Mag,4); MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_AMAX_Mag,4);
}; };
class AnimationSources {
class Ammo_source {
source = "user";
animPeriod = 1;
initPhase = 0;
};
class AmmoOrd_source {
source = "user";
animPeriod = 1;
initPhase = 1;
};
class Grenades_source {
source = "user";
animPeriod = 1;
initPhase = 1;
};
class Support_source {
source = "user";
animPeriod = 1;
initPhase = 1;
};
};
}; };
}; };

View File

@ -1598,6 +1598,7 @@
<Spanish>[ACE] Caja de suministros de munición</Spanish> <Spanish>[ACE] Caja de suministros de munición</Spanish>
<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>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -163,6 +163,7 @@
<Spanish>Hacer que la unidad se rinda</Spanish> <Spanish>Hacer que la unidad se rinda</Spanish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Captives_ModuleSurrender_Description"> <Key ID="STR_ACE_Captives_ModuleSurrender_Description">
<English>Sync a unit to make them surrender.&lt;br /&gt;Source: ace_captives</English> <English>Sync a unit to make them surrender.&lt;br /&gt;Source: ace_captives</English>
@ -170,6 +171,7 @@
<Spanish>Sincroniza una unidad para hacer que se rinda.&lt;br /&gt;Fuente: ace_captives</Spanish> <Spanish>Sincroniza una unidad para hacer que se rinda.&lt;br /&gt;Fuente: ace_captives</Spanish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Captives_ModuleSettings_DisplayName"> <Key ID="STR_ACE_Captives_ModuleSettings_DisplayName">
<English>Captives Settings</English> <English>Captives Settings</English>
@ -177,6 +179,7 @@
<Spanish>Ajustes de prisioneros</Spanish> <Spanish>Ajustes de prisioneros</Spanish>
<Czech>Nastavení zajatce</Czech> <Czech>Nastavení zajatce</Czech>
<German>Gefangenen-Einstellungen</German> <German>Gefangenen-Einstellungen</German>
<Portuguese>Ajustes de prisioneiros</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_Captives_ModuleSettings_Description"> <Key ID="STR_ACE_Captives_ModuleSettings_Description">
<English>Controls settings for surrender and cable ties</English> <English>Controls settings for surrender and cable ties</English>
@ -184,6 +187,7 @@
<Spanish>Ajustes de control para rendición y precintos</Spanish> <Spanish>Ajustes de control para rendición y precintos</Spanish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Captives_ModuleSettings_handcuffSide_name"> <Key ID="STR_ACE_Captives_ModuleSettings_handcuffSide_name">
<English>Can handcuff own side</English> <English>Can handcuff own side</English>
@ -191,6 +195,7 @@
<Spanish>Se puede esposar el bando propio</Spanish> <Spanish>Se puede esposar el bando propio</Spanish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Captives_ModuleSettings_handcuffSide_description"> <Key ID="STR_ACE_Captives_ModuleSettings_handcuffSide_description">
<English>Can players cabletie units on their own side</English> <English>Can players cabletie units on their own side</English>
@ -198,6 +203,7 @@
<Spanish>Pueden los jugadores esposar unidades en su propio bando</Spanish> <Spanish>Pueden los jugadores esposar unidades en su propio bando</Spanish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Captives_ModuleSettings_allowSurrender_name"> <Key ID="STR_ACE_Captives_ModuleSettings_allowSurrender_name">
<English>Allow surrendering</English> <English>Allow surrendering</English>
@ -205,6 +211,7 @@
<Spanish>Permitir rendición</Spanish> <Spanish>Permitir rendición</Spanish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Captives_ModuleSettings_allowSurrender_description"> <Key ID="STR_ACE_Captives_ModuleSettings_allowSurrender_description">
<English>Players can surrender after holstering their weapon</English> <English>Players can surrender after holstering their weapon</English>
@ -212,6 +219,7 @@
<Spanish>Los jugadores pueden rendirse después de enfundar su arma</Spanish> <Spanish>Los jugadores pueden rendirse después de enfundar su arma</Spanish>
<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>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -1,112 +1,109 @@
class CfgVehicles { class CfgVehicles {
/*class Man; /*class Man;
class CAManBase: Man { class CAManBase: Man {
// @todo // @todo
class UserActions { class UserActions {
class ACE_Fire { class ACE_Fire {
displayName = ""; displayName = "";
priority = -99; priority = -99;
available = 1; available = 1;
radius = 2.5; radius = 2.5;
radiusView = 0; radiusView = 0;
position = ""; position = "";
showWindow = 0; showWindow = 0;
showIn3D = 0; showIn3D = 0;
onlyForPlayer = 1; onlyForPlayer = 1;
shortcut = "DefaultAction"; shortcut = "DefaultAction";
condition = QUOTE(call GVAR(UserActionFireCondition)); condition = QUOTE(call GVAR(UserActionFireCondition));
statement = QUOTE(call GVAR(UserActionFire)); statement = QUOTE(call GVAR(UserActionFire));
userActionID = 100; userActionID = 100;
}; };
}; };
};*/ };*/
// += needs a non inherited entry in that class, otherwise it simply overwrites // += needs a non inherited entry in that class, otherwise it simply overwrites
//#include <DefaultItems.hpp> //#include <DefaultItems.hpp>
class Logic; class Logic;
class Module_F: Logic { class Module_F: Logic {
class ModuleDescription; class ModuleDescription;
}; };
class ACE_Module: Module_F {}; class ACE_Module: Module_F {};
class ACE_ModuleCheckPBOs: ACE_Module { class ACE_ModuleCheckPBOs: ACE_Module {
author = CSTRING(ACETeam); author = CSTRING(ACETeam);
category = "ACE"; category = "ACE";
displayName = CSTRING(CheckPBO_DisplayName); displayName = CSTRING(CheckPBO_DisplayName);
function = QFUNC(moduleCheckPBOs); function = QFUNC(moduleCheckPBOs);
scope = 2; scope = 2;
isGlobal = 1; isGlobal = 1;
icon = QUOTE(PATHTOF(UI\Icon_Module_CheckPBO_ca.paa)); icon = QUOTE(PATHTOF(UI\Icon_Module_CheckPBO_ca.paa));
class Arguments { class Arguments {
class Action { class Action {
displayName = CSTRING(CheckPBO_Action_DisplayName); displayName = CSTRING(CheckPBO_Action_DisplayName);
description = CSTRING(CheckPBO_Action_Description); description = CSTRING(CheckPBO_Action_Description);
typeName = "NUMBER"; typeName = "NUMBER";
class values { class values {
class WarnOnce { class WarnOnce {
default = 1; default = 1;
name = CSTRING(CheckPBO_Action_WarnOnce); name = CSTRING(CheckPBO_Action_WarnOnce);
value = 0; value = 0;
}; };
class Warn { class Warn {
name = CSTRING(CheckPBO_Action_WarnPerm); name = CSTRING(CheckPBO_Action_WarnPerm);
value = 1; value = 1;
}; };
class Kick { class Kick {
name = CSTRING(CheckPBO_Action_Kick); name = CSTRING(CheckPBO_Action_Kick);
value = 2; value = 2;
}; };
};
};
class CheckAll {
displayName = CSTRING(CheckPBO_CheckAll_DisplayName);
description = CSTRING(CheckPBO_CheckAll_Description);
typeName = "BOOL";
defaultValue = 0;
};
class Whitelist {
displayName = CSTRING(CheckPBO_Whitelist_DisplayName);
description = CSTRING(CheckPBO_Whitelist_Description);
typeName = "STRING";
defaultValue = "[]";
};
}; };
}; class ModuleDescription: ModuleDescription {
class CheckAll { description = CSTRING(CheckPBO_Description);
displayName = CSTRING(CheckPBO_CheckAll_DisplayName);
description = CSTRING(CheckPBO_CheckAll_Description);
typeName = "BOOL";
defaultValue = 0;
};
class Whitelist {
displayName = CSTRING(CheckPBO_Whitelist_DisplayName);
description = CSTRING(CheckPBO_Whitelist_Description);
typeName = "STRING";
class values {
default = "[]";
}; };
};
}; };
class ModuleDescription: ModuleDescription {
description = CSTRING(CheckPBO_Description);
};
};
class ACE_ModuleLSDVehicles: ACE_Module { class ACE_ModuleLSDVehicles: ACE_Module {
author = CSTRING(ACETeam); author = CSTRING(ACETeam);
category = "ACE"; category = "ACE";
displayName = CSTRING(LSDVehicles_DisplayName); displayName = CSTRING(LSDVehicles_DisplayName);
function = "ACE_Common_fnc_moduleLSDVehicles"; function = "ACE_Common_fnc_moduleLSDVehicles";
scope = 2; scope = 2;
icon = QUOTE(PATHTOF(UI\Icon_Module_LSD_ca.paa)); icon = QUOTE(PATHTOF(UI\Icon_Module_LSD_ca.paa));
isGlobal = 1; isGlobal = 1;
class Arguments { class Arguments {};
class ModuleDescription: ModuleDescription {
description = CSTRING(LSDVehicles_Description);
sync[] = {"AnyVehicle"};
};
}; };
class ModuleDescription: ModuleDescription {
description = CSTRING(LSDVehicles_Description); class Box_NATO_Support_F;
sync[] = {"AnyVehicle"}; class ACE_Box_Misc: Box_NATO_Support_F {
author = CSTRING(ACETeam);
displayName = CSTRING(MiscItems);
transportMaxWeapons = 9001;
transportMaxMagazines = 9001;
transportMaxItems = 9001;
maximumload = 9001;
class TransportWeapons {};
class TransportMagazines {};
class TransportItems {};
class TransportBackpacks {};
}; };
};
class Box_NATO_Support_F;
class ACE_Box_Misc: Box_NATO_Support_F {
author = CSTRING(ACETeam);
displayName = CSTRING(MiscItems);
transportMaxWeapons = 9001;
transportMaxMagazines = 9001;
transportMaxItems = 9001;
maximumload = 9001;
class TransportWeapons {};
class TransportMagazines {};
class TransportItems {};
class TransportBackpacks {};
};
class Item_Base_F; class Item_Base_F;
class ACE_bananaItem: Item_Base_F { class ACE_bananaItem: Item_Base_F {
@ -115,10 +112,8 @@ class CfgVehicles {
displayName = CSTRING(bananaDisplayName); displayName = CSTRING(bananaDisplayName);
author = CSTRING(ACETeam); author = CSTRING(ACETeam);
vehicleClass = "Items"; vehicleClass = "Items";
class TransportItems class TransportItems {
{ class ACE_banana {
class ACE_banana
{
name = "ACE_banana"; name = "ACE_banana";
count = 1; count = 1;
}; };

View File

@ -6,7 +6,7 @@
//Singe PFEH to handle execNextFrame and waitAndExec: //Singe PFEH to handle execNextFrame and waitAndExec:
[{ [{
private ["_entry"]; private ["_entry"];
//Handle the waitAndExec array: //Handle the waitAndExec array:
while {((count GVAR(waitAndExecArray)) > 0) && {((GVAR(waitAndExecArray) select 0) select 0) <= ACE_Time}} do { while {((count GVAR(waitAndExecArray)) > 0) && {((GVAR(waitAndExecArray) select 0) select 0) <= ACE_Time}} do {
_entry = GVAR(waitAndExecArray) deleteAt 0; _entry = GVAR(waitAndExecArray) deleteAt 0;
@ -56,6 +56,10 @@
["setFuel", {(_this select 0) setFuel (_this select 1)}] call FUNC(addEventhandler); ["setFuel", {(_this select 0) setFuel (_this select 1)}] call FUNC(addEventhandler);
["setSpeaker", {(_this select 0) setSpeaker (_this select 1)}] call FUNC(addEventhandler); ["setSpeaker", {(_this select 0) setSpeaker (_this select 1)}] call FUNC(addEventhandler);
if (isServer) then {
["hideObjectGlobal", {(_this select 0) hideObjectGlobal (_this select 1)}] call FUNC(addEventHandler);
};
// hack to get PFH to work in briefing // hack to get PFH to work in briefing
[QGVAR(onBriefingPFH), "onEachFrame", { [QGVAR(onBriefingPFH), "onEachFrame", {
if (ACE_time > 0) exitWith { if (ACE_time > 0) exitWith {
@ -140,6 +144,15 @@ call FUNC(checkFiles);
}, 0, [false]] call cba_fnc_addPerFrameHandler; }, 0, [false]] call cba_fnc_addPerFrameHandler;
["SettingsInitialized", {
[
GVAR(checkPBOsAction),
GVAR(checkPBOsCheckAll),
call compile GVAR(checkPBOsWhitelist)
] call FUNC(checkPBOs)
}] call FUNC(addEventHandler);
/***************************************************************/ /***************************************************************/
/***************************************************************/ /***************************************************************/
/***************************************************************/ /***************************************************************/
@ -308,14 +321,6 @@ if(isMultiplayer && { ACE_time > 0 || isNull player } ) then {
}, 0, []] call cba_fnc_addPerFrameHandler; }, 0, []] call cba_fnc_addPerFrameHandler;
}; };
["SettingsInitialized", {
[
GVAR(checkPBOsAction),
GVAR(checkPBOsCheckAll),
call compile GVAR(checkPBOsWhitelist)
] call FUNC(checkPBOs)
}] call FUNC(addEventHandler);
//Device Handler: //Device Handler:
GVAR(deviceKeyHandlingArray) = []; GVAR(deviceKeyHandlingArray) = [];
GVAR(deviceKeyCurrentIndex) = -1; GVAR(deviceKeyCurrentIndex) = -1;

View File

@ -11,7 +11,6 @@ PREP(addCanInteractWithCondition);
PREP(addLineToDebugDraw); PREP(addLineToDebugDraw);
PREP(addSetting); PREP(addSetting);
PREP(addToInventory); PREP(addToInventory);
PREP(adminKick);
PREP(ambientBrightness); PREP(ambientBrightness);
PREP(applyForceWalkStatus); PREP(applyForceWalkStatus);
PREP(ASLToPosition); PREP(ASLToPosition);
@ -103,6 +102,7 @@ PREP(goKneeling);
PREP(hadamardProduct); PREP(hadamardProduct);
PREP(hasItem); PREP(hasItem);
PREP(hasMagazine); PREP(hasMagazine);
PREP(hideUnit);
PREP(inheritsFrom); PREP(inheritsFrom);
PREP(insertionSort); PREP(insertionSort);
PREP(interpolateFromArray); PREP(interpolateFromArray);
@ -180,6 +180,7 @@ PREP(toBin);
PREP(toBitmask); PREP(toBitmask);
PREP(toHex); PREP(toHex);
PREP(toNumber); PREP(toNumber);
PREP(unhideUnit);
PREP(uniqueElementsOnly); PREP(uniqueElementsOnly);
PREP(unloadPerson); PREP(unloadPerson);
PREP(unloadPersonLocal); PREP(unloadPersonLocal);

View File

@ -1,8 +0,0 @@
// by commy2
#include "script_component.hpp"
private "_name";
_name = name (_this select 0);
[_name, "{if (serverCommandAvailable '#kick') then {serverCommand format['#kick %1', _this]}}"] call FUNC(execRemoteFnc);

View File

@ -56,20 +56,23 @@ _addons = [_addons, {_this find "ace_" == 0}] call FUNC(filter);
} forEach getArray (configFile >> "ACE_Extensions" >> "extensions"); } forEach getArray (configFile >> "ACE_Extensions" >> "extensions");
/////////////// ///////////////
// check server version // check server version/addons
/////////////// ///////////////
if (isMultiplayer) then { if (isMultiplayer) then {
if (isServer) then { if (isServer) then {
// send servers version of ACE to all clients // send servers version of ACE to all clients
GVAR(ServerVersion) = _version; GVAR(ServerVersion) = _version;
GVAR(ServerAddons) = _addons;
publicVariable QGVAR(ServerVersion); publicVariable QGVAR(ServerVersion);
publicVariable QGVAR(ServerAddons);
} else { } else {
// clients have to wait for the variable // clients have to wait for the variables
[{ [{
if (isNil QGVAR(ServerVersion)) exitWith {}; if (isNil QGVAR(ServerVersion) || isNil QGVAR(ServerAddons)) exitWith {};
private "_version"; private ["_version","_addons"];
_version = _this select 0; _version = (_this select 0) select 0;
_addons = (_this select 0) select 1;
if (_version != GVAR(ServerVersion)) then { if (_version != GVAR(ServerVersion)) then {
private "_errorMsg"; private "_errorMsg";
@ -82,7 +85,18 @@ if (isMultiplayer) then {
}; };
}; };
_addons = _addons - GVAR(ServerAddons);
if !(_addons isEqualTo []) then {
_errorMsg = format ["Client/Server Addon Mismatch. Client has extra addons: %1.",_addons];
diag_log text format ["[ACE] ERROR: %1", _errorMsg];
if (hasInterface) then {diag_log str "1";
["[ACE] ERROR", _errorMsg, {findDisplay 46 closeDisplay 0}] call FUNC(errorMessage);
};
};
[_this select 1] call CBA_fnc_removePerFrameHandler; [_this select 1] call CBA_fnc_removePerFrameHandler;
}, 1, _version] call CBA_fnc_addPerFrameHandler; }, 1, [_version,_addons]] call CBA_fnc_addPerFrameHandler;
}; };
}; };

View File

@ -8,8 +8,8 @@
* 0: Warn once * 0: Warn once
* 1: Warn permanently * 1: Warn permanently
* 2: Kick * 2: Kick
* 1: Check all PBOs? <BOOL> (Optional - default: "[]") * 1: Check all PBOs? <BOOL> (Optional - default: false)
* 2: Whitelist <STRING> (Optinal - default: false) * 2: Whitelist <STRING> (Optinal - default: "[]")
* *
* Return value: * Return value:
* None * None
@ -67,24 +67,26 @@ if (!isServer) then {
//[_error, "{systemChat _this}"] call FUNC(execRemoteFnc); //[_error, "{systemChat _this}"] call FUNC(execRemoteFnc);
diag_log text _error; diag_log text _error;
_text = composeText [lineBreak, parseText format ["<t align='center'>%1</t>", _text]]; if (_mode < 2) then {
_text = composeText [lineBreak, parseText format ["<t align='center'>%1</t>", _text]];
_rscLayer = "ACE_RscErrorHint" call BIS_fnc_rscLayer; _rscLayer = "ACE_RscErrorHint" call BIS_fnc_rscLayer;
_rscLayer cutRsc ["ACE_RscErrorHint", "PLAIN", 0, true]; _rscLayer cutRsc ["ACE_RscErrorHint", "PLAIN", 0, true];
disableSerialization; disableSerialization;
_ctrlHint = uiNamespace getVariable "ACE_ctrlErrorHint"; _ctrlHint = uiNamespace getVariable "ACE_ctrlErrorHint";
_ctrlHint ctrlSetStructuredText _text; _ctrlHint ctrlSetStructuredText _text;
if (_mode == 0) then { if (_mode == 0) then {
sleep 10; sleep 10;
_rscLayer cutFadeOut 0.2; _rscLayer cutFadeOut 0.2;
};
}; };
if (_mode == 2) then { if (_mode == 2) then {
sleep 10; waitUntil {alive player}; // To be able to show list if using checkAll
waitUntil {alive player}; _text = composeText [parseText format ["<t align='center'>%1</t>", _text]];
[player] call FUNC(adminKick); ["[ACE] ERROR", _text, {findDisplay 46 closeDisplay 0}] call FUNC(errorMessage);
}; };
}; };
}; };

View File

@ -0,0 +1,34 @@
/*
* Author: SilentSpike (based on muteUnit)
* Globally hides a unit. This allows the handling of more than one reason to hide an object globally.
*
* Arguments:
* 0: Unit <OBJECT>
* 1: Reason to hide the unit <STRING>
*
* Return Value:
* nil
*
* Example:
* [ACE_Player, "SpectatorMode"] call ace_common_fnc_hideUnit
*
* Public: No
*/
#include "script_component.hpp"
PARAMS_2(_unit,_reason);
if (isNull _unit) exitWith {};
private "_setHiddenReasons";
_setHiddenReasons = _unit getVariable [QGVAR(setHiddenReasons), []];
if !(_reason in _setHiddenReasons) then {
_setHiddenReasons pushBack _reason;
_unit setVariable [QGVAR(setHiddenReasons), _setHiddenReasons, true];
};
//if !(isObjectHidden _unit) then { (Uncomment when isObjectHidden hits stable branch)
["hideObjectGlobal",[_unit,true]] call FUNC(serverEvent);
//};

View File

@ -3,7 +3,9 @@
* Initializes the check-PBOs module. * Initializes the check-PBOs module.
* *
* Arguments: * Arguments:
* Whatever the module provides. (I dunno.) * 0: The module logic <LOGIC>
* 1: units <ARRAY>
* 2: activated <BOOL>
* *
* Return Value: * Return Value:
* None * None

View File

@ -41,11 +41,11 @@ if ((typeName _value) != (_settingData select 1)) then {
_failed = true; _failed = true;
if ((_settingData select 1) == "BOOL" and (typeName _value) == "SCALAR") then { if ((_settingData select 1) == "BOOL" and (typeName _value) == "SCALAR") then {
// If value is not 0 or 1 consider it invalid and don't set anything // If value is not 0 or 1 consider it invalid and don't set anything
if (_value == 0) then { if (_value isEqualTo 0) then {
_value = false; _value = false;
_failed = false; _failed = false;
}; };
if (_value == 1) then { if (_value isEqualTo 1) then {
_value = true; _value = true;
_failed = false; _failed = false;
}; };

View File

@ -0,0 +1,34 @@
/*
* Author: SilentSpike (based on unmuteUnit)
* Globally unhides a unit. Only unhides if the last reason was removed.
*
* Arguments:
* 0: Unit <OBJECT>
* 1: Reason to unhide the unit <STRING>
*
* Return Value:
* nil
*
* Example:
* [ACE_Player, "SpectatorMode"] call ace_common_fnc_unhideUnit
*
* Public: No
*/
#include "script_component.hpp"
PARAMS_2(_unit,_reason);
if (isNull _unit) exitWith {};
private "_setHiddenReasons";
_setHiddenReasons = _unit getVariable [QGVAR(setHiddenReasons), []];
if (_reason in _setHiddenReasons) then {
_setHiddenReasons deleteAt (_setHiddenReasons find _reason);
_unit setVariable [QGVAR(setHiddenReasons), _setHiddenReasons, true];
};
if (_setHiddenReasons isEqualTo []) then {
["hideObjectGlobal",[_unit,false]] call FUNC(serverEvent);
};

View File

@ -476,6 +476,7 @@
<Spanish>Comprobar PBOs</Spanish> <Spanish>Comprobar PBOs</Spanish>
<German>Überprüfe PBOs</German> <German>Überprüfe PBOs</German>
<Czech>Zkontrolovat PBO</Czech> <Czech>Zkontrolovat PBO</Czech>
<Portuguese>Verificar PBOs</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_Common_CheckPBO_Description"> <Key ID="STR_ACE_Common_CheckPBO_Description">
<English></English> <English></English>
@ -483,6 +484,7 @@
<Spanish>Este módulo verifica la integridad de los addons con los que iniciamos el simulador</Spanish> <Spanish>Este módulo verifica la integridad de los addons con los que iniciamos el simulador</Spanish>
<German>Dieses Modul überprüft ob jeder Spieler die richtigen PBO-Dateien hat.</German> <German>Dieses Modul überprüft ob jeder Spieler die richtigen PBO-Dateien hat.</German>
<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>
</Key> </Key>
<Key ID="STR_ACE_Common_CheckPBO_Action_DisplayName"> <Key ID="STR_ACE_Common_CheckPBO_Action_DisplayName">
<English>Action</English> <English>Action</English>
@ -490,6 +492,7 @@
<Spanish>Acción</Spanish> <Spanish>Acción</Spanish>
<German>Aktion</German> <German>Aktion</German>
<Czech>Akce</Czech> <Czech>Akce</Czech>
<Portuguese>Ação</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_Common_CheckPBO_Action_Description"> <Key ID="STR_ACE_Common_CheckPBO_Action_Description">
<English>What to do with people who do not have the right PBOs?</English> <English>What to do with people who do not have the right PBOs?</English>
@ -497,6 +500,7 @@
<Spanish>¿Qué hacer con la gente que no tiene correctamente los PBOs?</Spanish> <Spanish>¿Qué hacer con la gente que no tiene correctamente los PBOs?</Spanish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Common_CheckPBO_Action_WarnOnce"> <Key ID="STR_ACE_Common_CheckPBO_Action_WarnOnce">
<English>Warn once</English> <English>Warn once</English>
@ -504,6 +508,7 @@
<Spanish>Avisar una vez</Spanish> <Spanish>Avisar una vez</Spanish>
<German>Einmal verwarnen</German> <German>Einmal verwarnen</German>
<Czech>Upozornit jednou</Czech> <Czech>Upozornit jednou</Czech>
<Portuguese>Avisar uma vez</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_Common_CheckPBO_Action_WarnPerm"> <Key ID="STR_ACE_Common_CheckPBO_Action_WarnPerm">
<English>Warn (permanent)</English> <English>Warn (permanent)</English>
@ -511,6 +516,7 @@
<Spanish>Avisar (permanente)</Spanish> <Spanish>Avisar (permanente)</Spanish>
<German>Immer verwarnen</German> <German>Immer verwarnen</German>
<Czech>Upozornit (permanentně)</Czech> <Czech>Upozornit (permanentně)</Czech>
<Portuguese>Avisar (permanente)</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_Common_CheckPBO_Action_Kick"> <Key ID="STR_ACE_Common_CheckPBO_Action_Kick">
<English>Kick</English> <English>Kick</English>
@ -518,6 +524,7 @@
<Spanish>Expulsar</Spanish> <Spanish>Expulsar</Spanish>
<German>Kicken</German> <German>Kicken</German>
<Czech>Vyhodit</Czech> <Czech>Vyhodit</Czech>
<Portuguese>Chutar</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_Common_CheckPBO_CheckAll_DisplayName"> <Key ID="STR_ACE_Common_CheckPBO_CheckAll_DisplayName">
<English>Check all addons</English> <English>Check all addons</English>
@ -525,6 +532,7 @@
<Spanish>Comprobar todos los addons</Spanish> <Spanish>Comprobar todos los addons</Spanish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Common_CheckPBO_CheckAll_Description"> <Key ID="STR_ACE_Common_CheckPBO_CheckAll_Description">
<English>Check all addons instead of only those of ACE?</English> <English>Check all addons instead of only those of ACE?</English>
@ -532,6 +540,7 @@
<Spanish>Comprobar todos los addons en vez de solo los del ACE</Spanish> <Spanish>Comprobar todos los addons en vez de solo los del ACE</Spanish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Common_CheckPBO_Whitelist_DisplayName"> <Key ID="STR_ACE_Common_CheckPBO_Whitelist_DisplayName">
<English>Whitelist</English> <English>Whitelist</English>
@ -539,6 +548,7 @@
<Spanish>Lista blanca</Spanish> <Spanish>Lista blanca</Spanish>
<German>Whitelist</German> <German>Whitelist</German>
<Czech>Seznam povolených</Czech> <Czech>Seznam povolených</Czech>
<Portuguese>Lista branca</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_Common_CheckPBO_Whitelist_Description"> <Key ID="STR_ACE_Common_CheckPBO_Whitelist_Description">
<English>What addons are allowed regardless?</English> <English>What addons are allowed regardless?</English>
@ -546,6 +556,7 @@
<Spanish>Qué addons están permitidos igualmente</Spanish> <Spanish>Qué addons están permitidos igualmente</Spanish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Common_LSDVehicles_DisplayName"> <Key ID="STR_ACE_Common_LSDVehicles_DisplayName">
<English>LSD Vehicles</English> <English>LSD Vehicles</English>
@ -553,6 +564,7 @@
<Spanish>Vehículos LSD</Spanish> <Spanish>Vehículos LSD</Spanish>
<German>LSD-Fahrzeuge</German> <German>LSD-Fahrzeuge</German>
<Czech>LSD vozidla</Czech> <Czech>LSD vozidla</Czech>
<Portuguese>Veículos LSD</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_Common_LSDVehicles_Description"> <Key ID="STR_ACE_Common_LSDVehicles_Description">
<English>Adds LSD effect to synchronized vehicle</English> <English>Adds LSD effect to synchronized vehicle</English>
@ -560,21 +572,31 @@
<Spanish>Añade el efecto LSD al vehículo sincronizado</Spanish> <Spanish>Añade el efecto LSD al vehículo sincronizado</Spanish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Common_toggleHandheldDevice"> <Key ID="STR_ACE_Common_toggleHandheldDevice">
<English>Toggle Handheld Device</English> <English>Toggle Handheld Device</English>
<Spanish>Seleccionar dispositivo de mano</Spanish> <Spanish>Seleccionar dispositivo de mano</Spanish>
<German>Handheld aufrufen</German> <German>Handheld aufrufen</German>
<Portuguese>Ativa dispositivo de mão</Portuguese>
<Polish>Przełącz urządzenie podręczne</Polish>
<Czech>Přepnout ruční zařízení</Czech>
</Key> </Key>
<Key ID="STR_ACE_Common_closeHandheldDevice"> <Key ID="STR_ACE_Common_closeHandheldDevice">
<English>Close Handheld Device</English> <English>Close Handheld Device</English>
<Spanish>Cerrar dispositivo de mano</Spanish> <Spanish>Cerrar dispositivo de mano</Spanish>
<German>Handheld schließen</German> <German>Handheld schließen</German>
<Portuguese>Fecha dispositivo de mão</Portuguese>
<Polish>Zamknij urządzenie podręczne</Polish>
<Czech>Zavřít ruční zařízení</Czech>
</Key> </Key>
<Key ID="STR_ACE_Common_cycleHandheldDevices"> <Key ID="STR_ACE_Common_cycleHandheldDevices">
<English>Cycle Handheld Devices</English> <English>Cycle Handheld Devices</English>
<Spanish>Cambiar dispositivos de mano</Spanish> <Spanish>Cambiar dispositivos de mano</Spanish>
<German>Handheld wechseln</German> <German>Handheld wechseln</German>
<Portuguese>Troca dispositivos de mão</Portuguese>
<Polish>Następne urządzenie podręczne</Polish>
<Czech>Procházet ruční zařízení</Czech>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -6,44 +6,48 @@
<German>NATO-Draht</German> <German>NATO-Draht</German>
<Russian>Проволочная спираль</Russian> <Russian>Проволочная спираль</Russian>
<Polish>Drut kolczasty</Polish> <Polish>Drut kolczasty</Polish>
<Spanish>Concertina wire</Spanish> <Spanish>Alambre de espino</Spanish>
<French>Concertina wire</French> <French>Concertina wire</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>
<Portuguese>Arame farpado</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_CONCERTINA_WIRECOIL"> <Key ID="STR_ACE_CONCERTINA_WIRECOIL">
<English>Concertina Wire Coil</English> <English>Concertina Wire Coil</English>
<German>NATO-Draht Rolle</German> <German>NATO-Draht Rolle</German>
<Russian>Проволочная спираль (моток)</Russian> <Russian>Проволочная спираль (моток)</Russian>
<Polish>Zwój drutu kolczastego</Polish> <Polish>Zwój drutu kolczastego</Polish>
<Spanish>Concertina wire coil</Spanish> <Spanish>Bobina de alambre de espino</Spanish>
<French>Concertina wire coil</French> <French>Concertina wire coil</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>
<Portuguese>Bobina de arame farpado</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_UNROLLWIRE"> <Key ID="STR_ACE_UNROLLWIRE">
<English>Dismount Concertina Wire</English> <English>Dismount Concertina Wire</English>
<German>NATO-Draht abbauen</German> <German>NATO-Draht abbauen</German>
<Russian>Демонтировать проволочную спираль</Russian> <Russian>Демонтировать проволочную спираль</Russian>
<Polish>Zwiń drut kolczasty</Polish> <Polish>Zwiń drut kolczasty</Polish>
<Spanish>Dismount Concertina wire</Spanish> <Spanish>Desmontar alambre de espino</Spanish>
<French>Dismount Concertina wire</French> <French>Dismount Concertina wire</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>
<Portuguese>Desmontar arame farpado</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_ROLLWIRE"> <Key ID="STR_ACE_ROLLWIRE">
<English>Deploy Concertina Wire</English> <English>Deploy Concertina Wire</English>
<German>NATO-Draht verlegen</German> <German>NATO-Draht verlegen</German>
<Russian>Монтировать проволочную спираль</Russian> <Russian>Монтировать проволочную спираль</Russian>
<Polish>Rozwiń drut kolczasty</Polish> <Polish>Rozwiń drut kolczasty</Polish>
<Spanish>Deploy Concertina wire</Spanish> <Spanish>Desplegar alambre de espino</Spanish>
<French>Deploy Concertina wire</French> <French>Deploy Concertina wire</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>
<Portuguese>Colocar arame farpado</Portuguese>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -10,7 +10,7 @@ class CfgVehicles {
showDisabled = 0; showDisabled = 0;
priority = 0.1; priority = 0.1;
icon = QUOTE(PATHTOF(UI\DAGR_Icon.paa)); icon = QUOTE(PATHTOF(UI\DAGR_Icon.paa));
exceptions[] = {"isNotInside"}; exceptions[] = {"isNotInside", "isNotSitting"};
class GVAR(toggle) { class GVAR(toggle) {
displayName = "Toggle DAGR"; displayName = "Toggle DAGR";
condition = QUOTE([ARR_2(_player,'ACE_DAGR')] call EFUNC(common,hasItem)); condition = QUOTE([ARR_2(_player,'ACE_DAGR')] call EFUNC(common,hasItem));
@ -18,7 +18,7 @@ class CfgVehicles {
showDisabled = 0; showDisabled = 0;
priority = 0.2; priority = 0.2;
icon = QUOTE(PATHTOF(UI\DAGR_Icon.paa)); icon = QUOTE(PATHTOF(UI\DAGR_Icon.paa));
exceptions[] = {"notOnMap", "isNotInside"}; exceptions[] = {"notOnMap", "isNotInside", "isNotSitting"};
}; };
}; };
}; };

View File

@ -7,11 +7,11 @@ class CfgWeapons {
author[] = {$STR_ACE_Common_ACETeam, "Ruthberg"}; author[] = {$STR_ACE_Common_ACETeam, "Ruthberg"};
scope = 2; scope = 2;
displayName = "DAGR"; displayName = "DAGR";
model = QUOTE(PATHTOF(data\DAGR.p3d));
descriptionShort = ""; descriptionShort = "";
picture = PATHTOF(UI\DAGR_Icon.paa); picture = PATHTOF(UI\DAGR_Icon.paa);
icon = "iconObject_circle"; icon = "iconObject_circle";
mapSize = 0.034; mapSize = 0.034;
class ItemInfo: InventoryItem_Base_F { class ItemInfo: InventoryItem_Base_F {
mass = 10; mass = 10;
}; };

BIN
addons/dagr/data/DAGR.p3d Normal file

Binary file not shown.

View File

@ -0,0 +1,82 @@
class StageTI
{
texture="a3\data_f\default_ti_ca.paa";
};
ambient[]={1,1,1,1};
diffuse[]={1,1,1,1};
forcedDiffuse[]={0,0,0,0};
emmisive[]={0,0,0,1};
specular[]={0.050000008,0.050000008,0.050000008,1};
specularPower=40;
PixelShaderID="Super";
VertexShaderID="Super";
class Stage1
{
texture="z\ace\addons\dagr\data\DAGR_nohq.paa";
uvSource="tex";
class uvTransform
{
aside[]={1,0,0};
up[]={0,1,0};
dir[]={0,0,0};
pos[]={0,0,0};
};
};
class Stage2
{
texture="#(argb,8,8,3)color(0.5,0.5,0.5,1,DT)";
uvSource="tex";
class uvTransform
{
aside[]={0,9,0};
up[]={4.5,0,0};
dir[]={0,0,0};
pos[]={0,0,0};
};
};
class Stage3
{
texture="#(argb,8,8,3)color(0,0,0,0)";
uvSource="tex";
class uvTransform
{
aside[]={1,0,0};
up[]={0,1,0};
dir[]={0,0,0};
pos[]={0,0,0};
};
};
class Stage4
{
texture="#(argb,8,8,3)color(1,1,1,1,AS)";
uvSource="tex";
class uvTransform
{
aside[]={1,0,0};
up[]={0,1,0};
dir[]={0,0,0};
pos[]={0,0,0};
};
};
class Stage5
{
texture="#(argb,8,8,3)color(1,1,1,1,SMDI)";
uvSource="tex";
class uvTransform
{
aside[]={1,0,0};
up[]={0,1,0};
dir[]={0,0,0};
pos[]={0,0,0};
};
};
class Stage6
{
texture="#(ai,64,128,1)fresnel(0.4,0.2)";
uvSource="none";
};
class Stage7
{
texture="a3\data_f\env_land_co.paa";
uvSource="none";
};

Binary file not shown.

Binary file not shown.

View File

@ -2,7 +2,7 @@
["ACE3 Equipment", QGVAR(MenuKey), "Configure DAGR", ["ACE3 Equipment", QGVAR(MenuKey), "Configure DAGR",
{ {
// Conditions: canInteract // Conditions: canInteract
if !([ACE_player, objNull, ["notOnMap", "isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; if !([ACE_player, objNull, ["notOnMap", "isNotInside", "isNotSitting"]] call EFUNC(common,canInteractWith)) exitWith {false};
if !([ACE_player, "ACE_DAGR"] call EFUNC(common,hasItem)) exitWith {false}; if !([ACE_player, "ACE_DAGR"] call EFUNC(common,hasItem)) exitWith {false};
// Statement // Statement
@ -19,7 +19,7 @@
["ACE3 Equipment", QGVAR(ToggleKey), "Toggle DAGR", ["ACE3 Equipment", QGVAR(ToggleKey), "Toggle DAGR",
{ {
// Conditions: canInteract // Conditions: canInteract
if !([ACE_player, objNull, ["notOnMap", "isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; if !([ACE_player, objNull, ["notOnMap", "isNotInside", "isNotSitting"]] call EFUNC(common,canInteractWith)) exitWith {false};
if !([ACE_player, "ACE_DAGR"] call EFUNC(common,hasItem)) exitWith {false}; if !([ACE_player, "ACE_DAGR"] call EFUNC(common,hasItem)) exitWith {false};
// Statement // Statement

View File

@ -7,4 +7,10 @@ class ACE_Settings {
value = 1; value = 1;
typeName = "BOOL"; typeName = "BOOL";
}; };
class GVAR(ExplodeOnDefuse) {
displayName = CSTRING(ExplodeOnDefuse_DisplayName);
description = CSTRING(ExplodeOnDefuse_Description);
value = 1;
typeName = "BOOL";
};
}; };

View File

@ -69,25 +69,52 @@ class CfgAmmo {
/*class DemoCharge_Remote_Ammo_Scripted: DemoCharge_Remote_Ammo; /*class DemoCharge_Remote_Ammo_Scripted: DemoCharge_Remote_Ammo;
class SatchelCharge_Remote_Ammo_Scripted: SatchelCharge_Remote_Ammo;*/ class SatchelCharge_Remote_Ammo_Scripted: SatchelCharge_Remote_Ammo;*/
class IEDUrbanBig_Remote_Ammo: PipeBombBase { class IEDUrbanBig_Remote_Ammo: PipeBombBase {
mineTrigger = "RangeTrigger";
triggerWhenDestroyed = 1; triggerWhenDestroyed = 1;
soundTrigger[] = {"A3\Sounds_F\weapons\mines\mech_trigger_1", 0.562341, 1, 40}; ACE_explodeOnDefuse = 0.02;
soundTrigger[] = {"A3\Sounds_F\weapons\mines\mech_trigger_1", 0.8, 1, 40};
}; };
class IEDLandBig_Remote_Ammo: PipeBombBase { class IEDUrbanBig_Command_Ammo: IEDUrbanBig_Remote_Ammo {
mineTrigger = "RemoteTrigger";
};
class IEDUrbanBig_Range_Ammo: IEDUrbanBig_Remote_Ammo {
mineTrigger = "RangeTrigger"; mineTrigger = "RangeTrigger";
triggerWhenDestroyed = 1;
soundTrigger[] = {"A3\Sounds_F\weapons\mines\mech_trigger_1", 0.562341, 1, 40};
}; };
class IEDUrbanSmall_Remote_Ammo: PipeBombBase { class IEDUrbanSmall_Remote_Ammo: PipeBombBase {
mineTrigger = "RangeTrigger";
triggerWhenDestroyed = 1; triggerWhenDestroyed = 1;
soundTrigger[] = {"A3\Sounds_F\weapons\mines\mech_trigger_1", 0.562341, 1, 40}; ACE_explodeOnDefuse = 0.02;
soundTrigger[] = {"A3\Sounds_F\weapons\mines\mech_trigger_1", 0.8, 1, 40};
};
class IEDUrbanSmall_Command_Ammo: IEDUrbanSmall_Remote_Ammo {
mineTrigger = "RemoteTrigger";
}; };
class IEDLandSmall_Remote_Ammo: PipeBombBase { class IEDUrbanSmall_Range_Ammo: IEDUrbanSmall_Remote_Ammo {
mineTrigger = "RangeTrigger"; mineTrigger = "RangeTrigger";
};
class IEDLandBig_Remote_Ammo: PipeBombBase {
triggerWhenDestroyed = 1; triggerWhenDestroyed = 1;
soundTrigger[] = {"A3\Sounds_F\weapons\mines\mech_trigger_1", 0.562341, 1, 40}; ACE_explodeOnDefuse = 0.02;
soundTrigger[] = {"A3\Sounds_F\weapons\mines\mech_trigger_1", 0.8, 1, 40};
};
class IEDLandBig_Command_Ammo: IEDLandBig_Remote_Ammo {
mineTrigger = "RemoteTrigger";
};
class IEDLandBig_Range_Ammo: IEDLandBig_Remote_Ammo {
mineTrigger = "RangeTrigger";
};
class IEDLandSmall_Remote_Ammo: PipeBombBase {
triggerWhenDestroyed = 1;
ACE_explodeOnDefuse = 0.02;
soundTrigger[] = {"A3\Sounds_F\weapons\mines\mech_trigger_1", 0.8, 1, 40};
};
class IEDLandSmall_Command_Ammo: IEDLandSmall_Remote_Ammo {
mineTrigger = "RemoteTrigger";
};
class IEDLandSmall_Range_Ammo: IEDLandSmall_Remote_Ammo {
mineTrigger = "RangeTrigger";
}; };
}; };

View File

@ -96,45 +96,51 @@ class CfgMagazines {
}; };
}; };
}; };
class IEDUrbanBig_Remote_Mag: DemoCharge_Remote_Mag { class IEDUrbanBig_Remote_Mag: DemoCharge_Remote_Mag {
ACE_SetupObject = "ACE_Explosives_Place_IEDUrbanBig"; ACE_SetupObject = "ACE_Explosives_Place_IEDUrbanBig";
class ACE_Triggers { class ACE_Triggers {
SupportedTriggers[] = {"Command","DeadmanSwitch", "Cellphone", "PressurePlate"}; SupportedTriggers[] = {"Command", "DeadmanSwitch", "Cellphone", "PressurePlate"};
class Command { class Command {
FuseTime = 0.5; FuseTime = 0.5;
ammo = "IEDUrbanBig_Command_Ammo";
}; };
class DeadmanSwitch:Command {}; class DeadmanSwitch:Command {};
class Cellphone:Command {}; class Cellphone:Command {};
class PressurePlate { class PressurePlate {
displayName = CSTRING(SLAME_Magnetic); displayName = CSTRING(PressurePlate);
digDistance = 0; digDistance = 0;
ammo = "IEDUrbanBig_Remote_Ammo"; ammo = "IEDUrbanBig_Range_Ammo";
pitch = 0; pitch = 0;
}; };
}; };
}; };
class IEDLandBig_Remote_Mag: IEDUrbanBig_Remote_Mag { class IEDLandBig_Remote_Mag: IEDUrbanBig_Remote_Mag {
ACE_SetupObject = "ACE_Explosives_Place_IEDLandBig"; ACE_SetupObject = "ACE_Explosives_Place_IEDLandBig";
class ACE_Triggers: ACE_Triggers { class ACE_Triggers: ACE_Triggers {
class Command: Command {
ammo = "IEDLandBig_Command_Ammo";
};
class PressurePlate: PressurePlate { class PressurePlate: PressurePlate {
ammo = "IEDLandBig_Remote_Ammo"; ammo = "IEDLandBig_Range_Ammo";
}; };
}; };
}; };
class IEDUrbanSmall_Remote_Mag: DemoCharge_Remote_Mag { class IEDUrbanSmall_Remote_Mag: DemoCharge_Remote_Mag {
ACE_SetupObject = "ACE_Explosives_Place_IEDUrbanSmall"; ACE_SetupObject = "ACE_Explosives_Place_IEDUrbanSmall";
class ACE_Triggers { class ACE_Triggers {
SupportedTriggers[] = {"Command","DeadmanSwitch", "Cellphone", "PressurePlate"}; SupportedTriggers[] = {"Command", "DeadmanSwitch", "Cellphone", "PressurePlate"};
class Command { class Command {
FuseTime = 0.5; FuseTime = 0.5;
ammo = "IEDUrbanSmall_Command_Ammo";
}; };
class DeadmanSwitch: Command {}; class DeadmanSwitch: Command {};
class Cellphone: Command {}; class Cellphone: Command {};
class PressurePlate { class PressurePlate {
displayName = CSTRING(SLAME_Magnetic); displayName = CSTRING(PressurePlate);
digDistance = 0; digDistance = 0;
ammo = "IEDUrbanSmall_Remote_Ammo"; ammo = "IEDUrbanSmall_Range_Ammo";
pitch = 0; pitch = 0;
}; };
}; };
@ -142,8 +148,11 @@ class CfgMagazines {
class IEDLandSmall_Remote_Mag: IEDUrbanSmall_Remote_Mag { class IEDLandSmall_Remote_Mag: IEDUrbanSmall_Remote_Mag {
ACE_SetupObject = "ACE_Explosives_Place_IEDLandSmall"; ACE_SetupObject = "ACE_Explosives_Place_IEDLandSmall";
class ACE_Triggers: ACE_Triggers { class ACE_Triggers: ACE_Triggers {
class Command: Command {
ammo = "IEDLandSmall_Command_Ammo";
};
class PressurePlate: PressurePlate { class PressurePlate: PressurePlate {
ammo = "IEDLandSmall_Remote_Ammo"; ammo = "IEDLandSmall_Range_Ammo";
}; };
}; };
}; };

View File

@ -20,6 +20,12 @@ class ACE_ModuleExplosive: ACE_Module {
typeName = "BOOL"; typeName = "BOOL";
defaultValue = 1; defaultValue = 1;
}; };
class ExplodeOnDefuse {
displayName = "$STR_ACE_Explosive_ExplodeOnDefuse_DisplayName";
description = "$STR_ACE_Explosive_ExplodeOnDefuse_Description";
typeName = "BOOL";
defaultValue = 1;
};
}; };
class ModuleDescription { class ModuleDescription {
description = CSTRING(Module_Description); description = CSTRING(Module_Description);

View File

@ -6,7 +6,7 @@ class CfgVehicles {
displayName = CSTRING(Menu); displayName = CSTRING(Menu);
condition = QUOTE(!(_player getVariable [ARR_2('ace_explosives_PlantingExplosive',false)])); condition = QUOTE(!(_player getVariable [ARR_2('ace_explosives_PlantingExplosive',false)]));
statement = ""; statement = "";
exceptions[] = {"isNotSwimming", "isNotInside"}; exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting"};
showDisabled = 1; showDisabled = 1;
priority = 4; priority = 4;
icon = PATHTOF(UI\Explosives_Menu_ca.paa); icon = PATHTOF(UI\Explosives_Menu_ca.paa);
@ -17,7 +17,7 @@ class CfgVehicles {
condition = QUOTE([_player] call FUNC(canDetonate)); condition = QUOTE([_player] call FUNC(canDetonate));
statement = ""; statement = "";
insertChildren = QUOTE([_player] call FUNC(addTransmitterActions);); insertChildren = QUOTE([_player] call FUNC(addTransmitterActions););
exceptions[] = {"isNotSwimming", "isNotInside"}; exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting"};
showDisabled = 1; showDisabled = 1;
icon = PATHTOF(UI\Explosives_Menu_ca.paa); icon = PATHTOF(UI\Explosives_Menu_ca.paa);
priority = 2; priority = 2;
@ -38,7 +38,7 @@ class CfgVehicles {
displayName = CSTRING(cellphone_displayName); displayName = CSTRING(cellphone_displayName);
condition = "('ACE_Cellphone' in (items ace_player))"; condition = "('ACE_Cellphone' in (items ace_player))";
statement = "closeDialog 0;createDialog 'Rsc_ACE_PhoneInterface';"; statement = "closeDialog 0;createDialog 'Rsc_ACE_PhoneInterface';";
exceptions[] = {"isNotSwimming", "isNotInside"}; exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting"};
showDisabled = 0; showDisabled = 0;
icon = PATHTOF(Data\UI\Cellphone_UI.paa); icon = PATHTOF(Data\UI\Cellphone_UI.paa);
priority = 0.8; priority = 0.8;
@ -103,7 +103,7 @@ class CfgVehicles {
statement = ""; statement = "";
insertChildren = QUOTE([ARR_3(_target getVariable QUOTE(QGVAR(class)),_target,_player)] call FUNC(addTriggerActions);); insertChildren = QUOTE([ARR_3(_target getVariable QUOTE(QGVAR(class)),_target,_player)] call FUNC(addTriggerActions););
showDisabled = 0; showDisabled = 0;
exceptions[] = {}; exceptions[] = {"isNotSwimming"};
priority = 5; priority = 5;
icon = QUOTE(PATHTOF(UI\Explosives_Menu_ca.paa)); icon = QUOTE(PATHTOF(UI\Explosives_Menu_ca.paa));
}; };
@ -114,7 +114,7 @@ class CfgVehicles {
condition = "true"; condition = "true";
statement = QUOTE([ARR_2(_player,_target getVariable QUOTE(QGVAR(class)))] call EFUNC(common,addToInventory);deleteVehicle _target;); statement = QUOTE([ARR_2(_player,_target getVariable QUOTE(QGVAR(class)))] call EFUNC(common,addToInventory);deleteVehicle _target;);
showDisabled = 0; showDisabled = 0;
exceptions[] = {}; exceptions[] = {"isNotSwimming"};
priority = 5; priority = 5;
icon = "\A3\ui_f\data\IGUI\Cfg\Actions\Obsolete\ui_action_takemine_ca.paa"; icon = "\A3\ui_f\data\IGUI\Cfg\Actions\Obsolete\ui_action_takemine_ca.paa";
}; };

View File

@ -12,7 +12,7 @@ class CfgWeapons {
displayName = CSTRING(clacker_displayName); displayName = CSTRING(clacker_displayName);
descriptionShort = CSTRING(clacker_description); descriptionShort = CSTRING(clacker_description);
picture = PATHTOF(Data\UI\Clacker.paa); picture = PATHTOF(Data\UI\Clacker.paa);
model = "\A3\weapons_F\ammo\mag_univ.p3d"; model = QUOTE(PATHTOF(data\ace_m57.p3d));
ACE_Range = 250; ACE_Range = 250;
ACE_Detonator = 1; ACE_Detonator = 1;

Binary file not shown.

View File

@ -0,0 +1,82 @@
class StageTI {
texture = "a3\data_f\default_glass_ti_ca.paa";
};
ambient[] = {1,1,1,1};
diffuse[] = {1,1,1,1};
forcedDiffuse[] = {0,0,0,0};
emmisive[] = {0,0,0,1};
specular[] = {0.3,0.3,0.3,1};
specularPower = 3b0;
PixelShaderID = "Super";
VertexShaderID = "Super";
class Stage1 {
texture="#(rgb,1,1,1)color(0.5,0.5,1,1)";
uvSource = "tex";
class uvTransform {
aside[] = {1,0,0};
up[] = {0,1,0};
dir[] = {0,0,1};
pos[] = {0,0,0};
};
};
class Stage2 {
texture = "#(argb,8,8,3)color(0.5,0.5,0.5,1,DT)";
uvSource = "tex";
class uvTransform {
aside[] = {1,0,0};
up[] = {0,1,0};
dir[] = {0,0,1};
pos[] = {0,0,0};
};
};
class Stage3 {
texture = "#(argb,8,8,3)color(0,0,0,0,MC)";
uvSource = "tex";
class uvTransform {
aside[] = {1,0,0};
up[] = {0,1,0};
dir[] = {0,0,1};
pos[] = {0,0,0};
};
};
class Stage4 {
texture = "#(argb,8,8,3)color(1,1,1,1,AS)";
uvSource = "tex";
class uvTransform {
aside[] = {1,0,0};
up[] = {0,1,0};
dir[] = {0,0,1};
pos[] = {0,0,0};
};
};
class Stage5 {
texture = "#(argb,8,8,3)color(0,0.6,1,1,SMDI)";
uvSource = "tex";
class uvTransform {
aside[] = {1,0,0};
up[] = {0,1,0};
dir[] = {0,0,1};
pos[] = {0,0,0};
};
};
class Stage6 {
texture = "#(ai,32,128,1)fresnel(0.85,0.36)";
uvSource = "tex";
class uvTransform {
aside[] = {1,0,0};
up[] = {0,1,0};
dir[] = {0,0,1};
pos[] = {0,0,0};
};
};
class Stage7 {
useWorldEnvMap = "true";
texture = "a3\data_f\env_interier_car_ca.paa";
uvSource = "tex";
class uvTransform {
aside[] = {1,0,0};
up[] = {0,1,0};
dir[] = {0,0,1};
pos[] = {0,0,0};
};
};

Binary file not shown.

View File

@ -17,7 +17,7 @@
#include "script_component.hpp" #include "script_component.hpp"
EXPLODE_2_PVT(_this,_unit,_explosive); EXPLODE_2_PVT(_this,_unit,_explosive);
if (getNumber (ConfigFile >> "CfgAmmo" >> typeof _explosive >> "ACE_explodeOnDefuse") == 1) exitWith { if (GVAR(ExplodeOnDefuse) && (random 1.0) < getNumber(ConfigFile >> "CfgAmmo" >> typeOf _explosive >> "ACE_explodeOnDefuse")) exitWith {
[_unit, -1, [_explosive, 1], true] call FUNC(detonateExplosive); [_unit, -1, [_explosive, 1], true] call FUNC(detonateExplosive);
}; };

View File

@ -27,5 +27,7 @@ if !(_activated) exitWith {};
call EFUNC(Common,readSettingFromModule); call EFUNC(Common,readSettingFromModule);
[_logic, QGVAR(PunishNonSpecialists),"PunishNonSpecialists"] [_logic, QGVAR(PunishNonSpecialists),"PunishNonSpecialists"]
call EFUNC(Common,readSettingFromModule); call EFUNC(Common,readSettingFromModule);
[_logic, QGVAR(ExplodeOnDefuse),"ExplodeOnDefuse"]
call EFUNC(Common,readSettingFromModule);
diag_log text "[ACE]: Explosive Module Initialized."; diag_log text "[ACE]: Explosive Module Initialized.";

View File

@ -511,6 +511,7 @@
<Spanish>Sistema de explosivos</Spanish> <Spanish>Sistema de explosivos</Spanish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Explosives_RequireSpecialist_DisplayName"> <Key ID="STR_ACE_Explosives_RequireSpecialist_DisplayName">
<English>Require specialists?</English> <English>Require specialists?</English>
@ -518,6 +519,7 @@
<Spanish>¿Requiere especialista?</Spanish> <Spanish>¿Requiere especialista?</Spanish>
<German>Benötigt Sprengstoffexperten?</German> <German>Benötigt Sprengstoffexperten?</German>
<Czech>Vyžadovat specialistu?</Czech> <Czech>Vyžadovat specialistu?</Czech>
<Portuguese>Requer especialista?</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_Explosives_RequireSpecialist_Description"> <Key ID="STR_ACE_Explosives_RequireSpecialist_Description">
<English>Require explosive specialists to disable explosives? Default: No</English> <English>Require explosive specialists to disable explosives? Default: No</English>
@ -525,6 +527,7 @@
<Spanish>Requiere especialista en explosivos para desactivar explosivos?. Por defecto: No</Spanish> <Spanish>Requiere especialista en explosivos para desactivar explosivos?. Por defecto: No</Spanish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Explosives_PunishNonSpecialists_DisplayName"> <Key ID="STR_ACE_Explosives_PunishNonSpecialists_DisplayName">
<English>Punish non-specialists?</English> <English>Punish non-specialists?</English>
@ -532,6 +535,7 @@
<Spanish>¿Penalizar a los no especialistas?</Spanish> <Spanish>¿Penalizar a los no especialistas?</Spanish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Explosives_PunishNonSpecialists_Description"> <Key ID="STR_ACE_Explosives_PunishNonSpecialists_Description">
<English>Increase the time it takes to complete actions for non-specialists? Default: Yes</English> <English>Increase the time it takes to complete actions for non-specialists? Default: Yes</English>
@ -539,12 +543,27 @@
<Spanish>Aumenta el tiempo que lleva completar acciones para los no especialstas?. Por defecto: Si</Spanish> <Spanish>Aumenta el tiempo que lleva completar acciones para los no especialstas?. Por defecto: Si</Spanish>
<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>
</Key>
<Key ID="STR_ACE_Explosives_ExplodeOnDefuse_DisplayName">
<English>Explode on defusal?</English>
<Portuguese>Explosão no desarmamento?</Portuguese>
<Polish>Eksplozja przy rozbrajaniu?</Polish>
<Czech>Explodovat při zneškodňování?</Czech>
<Spanish>Explotar al desactivar?</Spanish>
</Key>
<Key ID="STR_ACE_Explosives_ExplodeOnDefuse_Description">
<English>Enable certain explosives to explode on defusal? Default: Yes</English>
<Portuguese>Ativa certos explosivos para detonar no desarmamento? Padrão: Sim</Portuguese>
<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>
<Spanish>¿Habilitar ciertos explosivos para estallar al desactivar? Por defecto: Sí</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Explosives_Module_Description"> <Key ID="STR_ACE_Explosives_Module_Description">
<English></English>
<Polish>Moduł ten pozwala dostosować opcje związane z ładunkami wybuchowymi, ich podkładaniem oraz rozbrajaniem.</Polish> <Polish>Moduł ten pozwala dostosować opcje związane z ładunkami wybuchowymi, ich podkładaniem oraz rozbrajaniem.</Polish>
<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>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -4,13 +4,13 @@ class CfgPatches {
class ADDON { class ADDON {
units[] = {}; units[] = {};
weapons[] = { weapons[] = {
"ACE_muzzle_mzls_H", "ACE_muzzle_mzls_H",
"ACE_muzzle_mzls_B", "ACE_muzzle_mzls_B",
"ACE_muzzle_mzls_L", "ACE_muzzle_mzls_L",
"ACE_muzzle_mzls_smg_01", "ACE_muzzle_mzls_smg_01",
"ACE_muzzle_mzls_smg_02", "ACE_muzzle_mzls_smg_02",
"ACE_muzzle_mzls_338", "ACE_muzzle_mzls_338",
"ACE_muzzle_mzls_93mmg" "ACE_muzzle_mzls_93mmg"
}; };
requiredVersion = REQUIRED_VERSION; requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_common"}; requiredAddons[] = {"ace_common"};

View File

@ -7,6 +7,7 @@
<Spanish>Simulación de fragmentación</Spanish> <Spanish>Simulación de fragmentación</Spanish>
<German>Splittersimulation</German> <German>Splittersimulation</German>
<Czech>Simulace fragmentace</Czech> <Czech>Simulace fragmentace</Czech>
<Portuguese>Simulação de fragmentação</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_Frag_EnableFrag_Desc"> <Key ID="STR_ACE_Frag_EnableFrag_Desc">
<English>Enable the ACE Fragmentation Simulation</English> <English>Enable the ACE Fragmentation Simulation</English>
@ -14,6 +15,7 @@
<Polish>Aktywuje symulację fragmentacji ACE</Polish> <Polish>Aktywuje symulację fragmentacji ACE</Polish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Frag_EnableSpall"> <Key ID="STR_ACE_Frag_EnableSpall">
<English>Spalling Simulation</English> <English>Spalling Simulation</English>
@ -21,6 +23,7 @@
<Polish>Symulacja odprysków</Polish> <Polish>Symulacja odprysków</Polish>
<German>Explosionssimulation</German> <German>Explosionssimulation</German>
<Czech>Simulace úlomků</Czech> <Czech>Simulace úlomků</Czech>
<Portuguese>Simulação de estilhaços</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_Frag_EnableSpall_Desc"> <Key ID="STR_ACE_Frag_EnableSpall_Desc">
<English>Enable the ACE Spalling Simulation</English> <English>Enable the ACE Spalling Simulation</English>
@ -28,6 +31,7 @@
<Polish>Aktywuje symulację odprysków ACE</Polish> <Polish>Aktywuje symulację odprysków ACE</Polish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Frag_MaxTrack"> <Key ID="STR_ACE_Frag_MaxTrack">
<English>Maximum Projectiles Tracked</English> <English>Maximum Projectiles Tracked</English>
@ -35,6 +39,7 @@
<Polish>Maks. liczba śledzonych pocisków</Polish> <Polish>Maks. liczba śledzonych pocisków</Polish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Frag_MaxTrack_Desc"> <Key ID="STR_ACE_Frag_MaxTrack_Desc">
<English>This setting controls the maximum amount of projectiles the fragmentation and spalling system will track at any given time. If more projectiles are fired, they will not be tracked. Lower this setting if you do not want FPS drops at high-count projectile scenarios ( &gt;200 rounds in the air at once)</English> <English>This setting controls the maximum amount of projectiles the fragmentation and spalling system will track at any given time. If more projectiles are fired, they will not be tracked. Lower this setting if you do not want FPS drops at high-count projectile scenarios ( &gt;200 rounds in the air at once)</English>
@ -42,6 +47,7 @@
<Polish>To ustawienie kontroluje maksymalną ilość pocisków, jakie fragmentacja i odpryski symulują w danym momencie. Jeżeli więcej pocisków będzie wystrzelonych, wtedy nie będą one śledzone. Zmniejsz tą opcję jeżeli nie chcesz odczuwać spadków FPS podczas ciężkiej wymiany ognia (więcej niż 200 pocisków w powietrzu na raz).</Polish> <Polish>To ustawienie kontroluje maksymalną ilość pocisków, jakie fragmentacja i odpryski symulują w danym momencie. Jeżeli więcej pocisków będzie wystrzelonych, wtedy nie będą one śledzone. Zmniejsz tą opcję jeżeli nie chcesz odczuwać spadków FPS podczas ciężkiej wymiany ognia (więcej niż 200 pocisków w powietrzu na raz).</Polish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Frag_MaxTrackPerFrame"> <Key ID="STR_ACE_Frag_MaxTrackPerFrame">
<English>Maximum Projectiles Per Frame</English> <English>Maximum Projectiles Per Frame</English>
@ -49,6 +55,7 @@
<German>Maximale Anzahl an Projektilen pro Frame</German> <German>Maximale Anzahl an Projektilen pro Frame</German>
<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>
</Key> </Key>
<Key ID="STR_ACE_Frag_MaxTrackPerFrame_Desc"> <Key ID="STR_ACE_Frag_MaxTrackPerFrame_Desc">
<English>The number of spall track calculations to perform in any given frame. This helps spread the FPS impact of tracking spall rounds across multiple frames, limiting its impact even further.</English> <English>The number of spall track calculations to perform in any given frame. This helps spread the FPS impact of tracking spall rounds across multiple frames, limiting its impact even further.</English>
@ -56,6 +63,7 @@
<German>Gibt die Anzahl der Explosionverfolgungsberechnungen an, die gleichzeitig ausgeführt werden. Das kann dabei helfen den FPS-Einfluss abzuschwächen, wenn Teile über mehrere Frames hinweg verfolgt werden.</German> <German>Gibt die Anzahl der Explosionverfolgungsberechnungen an, die gleichzeitig ausgeführt werden. Das kann dabei helfen den FPS-Einfluss abzuschwächen, wenn Teile über mehrere Frames hinweg verfolgt werden.</German>
<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>
</Key> </Key>
<Key ID="STR_ACE_Frag_EnableDebugTrace"> <Key ID="STR_ACE_Frag_EnableDebugTrace">
<English>(SP Only) Frag/Spall Debug Tracing</English> <English>(SP Only) Frag/Spall Debug Tracing</English>
@ -63,6 +71,7 @@
<Polish>(Tylko SP) Wizualny debug odł./odpr.</Polish> <Polish>(Tylko SP) Wizualny debug odł./odpr.</Polish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Frag_EnableDebugTrace_Desc"> <Key ID="STR_ACE_Frag_EnableDebugTrace_Desc">
<English>(SP Only) Requires a mission/editor restart. Enables visual tracing of fragmentation and spalling rounds in SP game mode only.</English> <English>(SP Only) Requires a mission/editor restart. Enables visual tracing of fragmentation and spalling rounds in SP game mode only.</English>
@ -70,6 +79,7 @@
<Polish>(Tylko SP) Wymaga restartu misji/edytora. Aktywuje wizualne śledzenie odłamków oraz odprysków w trybie gry Single Player.</Polish> <Polish>(Tylko SP) Wymaga restartu misji/edytora. Aktywuje wizualne śledzenie odłamków oraz odprysków w trybie gry Single Player.</Polish>
<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>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -6,7 +6,7 @@ class CfgVehicles {
class ACE_PutInEarplugs { class ACE_PutInEarplugs {
displayName = CSTRING(EarPlugs_On); displayName = CSTRING(EarPlugs_On);
condition = QUOTE( !([_player] call FUNC(hasEarPlugsIn)) && {'ACE_EarPlugs' in items _player} ); condition = QUOTE( !([_player] call FUNC(hasEarPlugsIn)) && {'ACE_EarPlugs' in items _player} );
exceptions[] = {"isNotInside"}; exceptions[] = {"isNotInside", "isNotSitting"};
statement = QUOTE( [_player] call FUNC(putInEarPlugs) ); statement = QUOTE( [_player] call FUNC(putInEarPlugs) );
showDisabled = 0; showDisabled = 0;
priority = 2.5; priority = 2.5;
@ -16,7 +16,7 @@ class CfgVehicles {
class ACE_RemoveEarplugs { class ACE_RemoveEarplugs {
displayName = CSTRING(EarPlugs_Off); displayName = CSTRING(EarPlugs_Off);
condition = QUOTE( [_player] call FUNC(hasEarPlugsIn) ); condition = QUOTE( [_player] call FUNC(hasEarPlugsIn) );
exceptions[] = {"isNotInside"}; exceptions[] = {"isNotInside", "isNotSitting"};
statement = QUOTE( [_player] call FUNC(removeEarPlugs) ); statement = QUOTE( [_player] call FUNC(removeEarPlugs) );
showDisabled = 0; showDisabled = 0;
priority = 2.5; priority = 2.5;

View File

@ -5,11 +5,47 @@ class CfgWeapons {
class ACE_EarPlugs: ACE_ItemCore { class ACE_EarPlugs: ACE_ItemCore {
displayName = CSTRING(EarPlugs_Name); displayName = CSTRING(EarPlugs_Name);
descriptionShort = CSTRING(EarPlugs_Description); descriptionShort = CSTRING(EarPlugs_Description);
model = PATHTOF(ACE_earplugs.p3d); model = QUOTE(PATHTOF(data\ace_earplugs.p3d));
picture = PATHTOF(UI\ACE_earplugs_x_ca.paa); picture = PATHTOF(UI\ACE_earplugs_x_ca.paa);
scope = 2; scope = 2;
class ItemInfo: InventoryItem_Base_F { class ItemInfo: InventoryItem_Base_F {
mass = 1; mass = 1;
}; };
}; };
class H_HelmetB;
class H_HelmetCrew_B: H_HelmetB {
GVAR(protection) = 1;
GVAR(lowerVolume) = 0.80;
};
class H_HelmetCrew_0: H_HelmetCrew_B {};
class H_HelmetCrew_I: H_HelmetCrew_B {};
class H_CrewHelmetHeli_B: H_HelmetB {
GVAR(protection) = 0.75;
GVAR(lowerVolume) = 0.70;
};
class H_CrewHelmetHeli_O: H_CrewHelmetHeli_B {};
class H_CrewHelmetHeli_I: H_CrewHelmetHeli_B {};
class H_PilotHelmetHeli_B: H_HelmetB {
GVAR(protection) = 0.75;
GVAR(lowerVolume) = 0.70;
};
class H_PilotHelmetHeli_O: H_PilotHelmetHeli_B {};
class H_PilotHelmetHeli_I: H_PilotHelmetHeli_B {};
class H_PilotHelmetFighter_B: H_HelmetB {
GVAR(protection) = 1;
GVAR(lowerVolume) = 0.80;
};
class H_PilotHelmetFighter_O: H_PilotHelmetFighter_B {};
class H_PilotHelmetFighter_I: H_PilotHelmetFighter_B {};
class H_Cap_headphones: H_HelmetB {
GVAR(protection) = 0.5;
GVAR(lowerVolume) = 0.60;
};
class H_Cap_marshal: H_Cap_headphones {};
}; };

Binary file not shown.

Binary file not shown.

View File

@ -5,7 +5,7 @@ class CfgPatches {
units[] = {}; units[] = {};
weapons[] = {"ACE_EarPlugs"}; weapons[] = {"ACE_EarPlugs"};
requiredVersion = REQUIRED_VERSION; requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_interaction"}; requiredAddons[] = {"ace_interaction", "A3_Characters_F", "A3_Characters_F_Kart"};
author[] = {"KoffeinFlummi", "esteldunedain", "HopeJ", "commy2", "Rocko", "Rommel", "Ruthberg"}; author[] = {"KoffeinFlummi", "esteldunedain", "HopeJ", "commy2", "Rocko", "Rommel", "Ruthberg"};
authorUrl = "https://github.com/KoffeinFlummi/"; authorUrl = "https://github.com/KoffeinFlummi/";
VERSION_CONFIG; VERSION_CONFIG;

Binary file not shown.

Binary file not shown.

View File

@ -15,9 +15,12 @@
*/ */
#include "script_component.hpp" #include "script_component.hpp"
private ["_unit", "_launcher"]; PARAMS_1(_unit);
_unit = _this select 0; // Exit if hearing is disabled or soldier has earplugs already in (persistence scenarios)
if (!GVAR(enableCombatDeafness) || {[_unit] call FUNC(hasEarPlugsIn)}) exitWith {};
private ["_launcher"];
// add earplugs if the soldier has a rocket launcher // add earplugs if the soldier has a rocket launcher
_launcher = secondaryWeapon _unit; _launcher = secondaryWeapon _unit;

View File

@ -27,6 +27,15 @@ if (_unit getVariable ["ACE_hasEarPlugsin", false]) then {
_strength = _strength / 4; _strength = _strength / 4;
}; };
//headgear hearing protection
if(headgear _unit != "") then {
private ["_protection"];
_protection = (getNumber (configFile >> "CfgWeapons" >> (headgear _unit) >> QGVAR(protection))) min 1;
if(_protection > 0) then {
_strength = _strength * (1 - _protection);
};
};
_unit setVariable [QGVAR(dv), (_unit getVariable [QGVAR(dv), 0]) + _strength]; _unit setVariable [QGVAR(dv), (_unit getVariable [QGVAR(dv), 0]) + _strength];
if (GVAR(earRingingPFH) != -1) exitWith {}; if (GVAR(earRingingPFH) != -1) exitWith {};
@ -35,8 +44,8 @@ GVAR(earRingingPFH) = [{
EXPLODE_1_PVT(_this select 0,_unit); EXPLODE_1_PVT(_this select 0,_unit);
private ["_prior"]; private ["_prior"];
_prior = (_unit getvariable [QGVAR(dv), 0]) min 20; _prior = (_unit getvariable [QGVAR(dv), 0]) min 20;
if (!alive _unit || _prior <= 0) exitWith { if (!alive _unit || _prior <= 0 || GVAR(DisableEarRinging)) exitWith {
_unit setVariable [QGVAR(dv), 0]; _unit setVariable [QGVAR(dv), 0];
_unit setVariable [QGVAR(prior), 0]; _unit setVariable [QGVAR(prior), 0];
GVAR(beep) = false; GVAR(beep) = false;
@ -47,7 +56,7 @@ GVAR(earRingingPFH) = [{
GVAR(earRingingPFH) = -1; GVAR(earRingingPFH) = -1;
[_this select 1] call cba_fnc_removePerFrameHandler; [_this select 1] call cba_fnc_removePerFrameHandler;
}; };
if (((_unit getvariable [QGVAR(dv), 0]) - (_unit getvariable [QGVAR(prior), 0])) > 2) then { if (((_unit getvariable [QGVAR(dv), 0]) - (_unit getvariable [QGVAR(prior), 0])) > 2) then {
if (ACE_time > GVAR(time3)) then { if (ACE_time > GVAR(time3)) then {
GVAR(beep2) = false; GVAR(beep2) = false;
@ -58,16 +67,16 @@ GVAR(earRingingPFH) = [{
GVAR(time3) = ACE_time + 5; GVAR(time3) = ACE_time + 5;
}; };
}; };
_unit setvariable [QGVAR(prior), _prior]; _unit setvariable [QGVAR(prior), _prior];
GVAR(volume) = (1 - (_prior / 20)) max 0; GVAR(volume) = (1 - (_prior / 20)) max 0;
if (_prior > 19.75) then { if (_prior > 19.75) then {
_unit setvariable [QGVAR(deaf), true]; _unit setvariable [QGVAR(deaf), true];
} else { } else {
_unit setvariable [QGVAR(deaf), false]; _unit setvariable [QGVAR(deaf), false];
}; };
if ((_unit getvariable [QGVAR(deaf), false]) && {ACE_time > GVAR(time4)}) then { if ((_unit getvariable [QGVAR(deaf), false]) && {ACE_time > GVAR(time4)}) then {
playSound "ACE_Combat_Deafness"; playSound "ACE_Combat_Deafness";
GVAR(beep2) = true; GVAR(beep2) = true;
@ -77,7 +86,7 @@ GVAR(earRingingPFH) = [{
// Hearing takes longer to return to normal after it hits rock bottom // Hearing takes longer to return to normal after it hits rock bottom
_unit setvariable [QGVAR(dv), _prior - (0.5 * (GVAR(volume) max 0.1))]; _unit setvariable [QGVAR(dv), _prior - (0.5 * (GVAR(volume) max 0.1))];
if (_prior > 10) then { if (_prior > 10) then {
//check if the ringing is already being played //check if the ringing is already being played
if (ACE_time > GVAR(time2)) then { if (ACE_time > GVAR(time2)) then {

View File

@ -58,14 +58,18 @@ if (count _weaponMagazines == 0) then {
_weaponMagazines append _muzzleMagazines; _weaponMagazines append _muzzleMagazines;
}; };
} forEach _muzzles; } forEach _muzzles;
{
_ammoType = getText(configFile >> "CfgMagazines" >> _x >> "ammo");
_weaponMagazines set [_forEachIndex, [_x, _ammoType]];
} forEach _weaponMagazines;
missionNamespace setVariable [format[QEGVAR(common,weaponMagazines_%1),_weapon], _weaponMagazines]; missionNamespace setVariable [format[QEGVAR(common,weaponMagazines_%1),_weapon], _weaponMagazines];
}; };
_magazine = ""; _magazine = "";
{ {
_ammoType = getText(configFile >> "CfgMagazines" >> _x >> "ammo"); EXPLODE_2_PVT(_x,_magazineType,_ammoType)
if (_ammoType == _ammo) exitWith { if (_ammoType == _ammo) exitWith {
_magazine = _x; _magazine = _magazineType;
}; };
} forEach _weaponMagazines; } forEach _weaponMagazines;

View File

@ -46,6 +46,15 @@ if ([ACE_player] call FUNC(hasEarPlugsIn)) then {
_volume = _volume min GVAR(EarplugsVolume); _volume = _volume min GVAR(EarplugsVolume);
}; };
// Headgear can reduce hearing
if(headgear ACE_player != "") then {
private ["_lowerVolume"];
_lowerVolume = (getNumber (configFile >> "CfgWeapons" >> (headgear ACE_player) >> QGVAR(lowerVolume))) min 1;
if(_lowerVolume > 0) then {
_volume = _volume min (1 - _lowerVolume);
};
};
// Reduce volume if player is unconscious // Reduce volume if player is unconscious
if (ACE_player getVariable ["ACE_isUnconscious", false]) then { if (ACE_player getVariable ["ACE_isUnconscious", false]) then {
_volume = _volume min GVAR(UnconsciousnessVolume); _volume = _volume min GVAR(UnconsciousnessVolume);

View File

@ -115,6 +115,7 @@
<Spanish>Audición</Spanish> <Spanish>Audición</Spanish>
<German>Gehör</German> <German>Gehör</German>
<Czech>Sluch</Czech> <Czech>Sluch</Czech>
<Portuguese>Audição</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_Hearing_CombatDeafness_DisplayName"> <Key ID="STR_ACE_Hearing_CombatDeafness_DisplayName">
<English>Enable combat deafness?</English> <English>Enable combat deafness?</English>
@ -122,6 +123,7 @@
<Spanish>¿Habilitar sordera de combate?</Spanish> <Spanish>¿Habilitar sordera de combate?</Spanish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Hearing_CombatDeafness_Description"> <Key ID="STR_ACE_Hearing_CombatDeafness_Description">
<English>Enable combat deafness?</English> <English>Enable combat deafness?</English>
@ -129,12 +131,14 @@
<Spanish>Habilita la sordera de combate</Spanish> <Spanish>Habilita la sordera de combate</Spanish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Hearing_Module_Description"> <Key ID="STR_ACE_Hearing_Module_Description">
<English></English> <English></English>
<Polish>Głuchota bojowa pojawia się w momentach, kiedy stoimy w pobliżu broni wielkokalibrowej bez ochrony słuchu, lub np. podczas ostrzału artyleryjskiego. Moduł ten pozwala na włączenie lub wyłączenie tego efektu.</Polish> <Polish>Głuchota bojowa pojawia się w momentach, kiedy stoimy w pobliżu broni wielkokalibrowej bez ochrony słuchu, lub np. podczas ostrzału artyleryjskiego. Moduł ten pozwala na włączenie lub wyłączenie tego efektu.</Polish>
<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>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -19,16 +19,45 @@ class CfgVehicles {
class Parachute_02_base_F; class Parachute_02_base_F;
class ACE_HuntIR: Parachute_02_base_F { class ACE_HuntIR: Parachute_02_base_F {
scope = 1; author = ECSTRING(common,ACETeam);
castDriverShadow = 0;
destrType = "DestructDefault"; destrType = "DestructDefault";
displayName = "HuntIR"; displayName = "HuntIR";
model = PATHTOF(data\huntir.p3d); model = PATHTOF(data\huntir.p3d);
castDriverShadow = 0; scope = 1;
soundEnviron[] = {"z\ace\addons\apl\sounds\padak_let", 0.316228, 1, 80};
soundCrash[] = {"", db-30, 1 }; soundCrash[] = {"", db-30, 1 };
soundEnviron[] = {"z\ace\addons\apl\sounds\padak_let", 0.316228, 1, 80};
soundLandCrash[] = {"", db-30, 1 }; soundLandCrash[] = {"", db-30, 1 };
soundWaterCrash[] = {"", db10, 1 }; soundWaterCrash[] = {"", db10, 1 };
mapSize = 0; class HitPoints {
class HitEngine {
armor = 0;
material = -1;
name = "";
visual = "";
radius = 0;
passThrough = 0;
explosionShielding = 0;
};
class HitParachute {
armor = 0.0001;
material = -1;
name = "parachute";
visual = "";
radius = 0.2;
passThrough = 1;
explosionShielding = 0;
};
class HitCamera {
armor = 0.001;
material = -1;
name = "camera";
visual = "";
radius = 0.025;
passThrough = 1;
explosionShielding = 1;
};
};
}; };
class Item_Base_F; class Item_Base_F;
@ -56,4 +85,14 @@ class CfgVehicles {
MACRO_ADDMAGAZINE(ACE_HuntIR_M203,20); MACRO_ADDMAGAZINE(ACE_HuntIR_M203,20);
}; };
}; };
class Box_NATO_Support_F;
class ACE_Box_Misc: Box_NATO_Support_F {
class TransportItems {
MACRO_ADDITEM(ACE_HuntIR_monitor,5);
};
class TransportMagazines {
MACRO_ADDMAGAZINE(ACE_HuntIR_M203,20);
};
};
}; };

View File

@ -3,7 +3,6 @@
ADDON = false; ADDON = false;
PREP(cam); PREP(cam);
PREP(handleDamage);
PREP(handleFired); PREP(handleFired);
PREP(huntir); PREP(huntir);
PREP(huntirCompass); PREP(huntirCompass);

Binary file not shown.

View File

@ -65,12 +65,12 @@ GVAR(no_cams) sort true;
[{ [{
GVAR(nearHuntIRs) = ACE_player nearEntities ["ACE_HuntIR", HUNTIR_MAX_TRANSMISSION_RANGE]; GVAR(nearHuntIRs) = ACE_player nearEntities ["ACE_HuntIR", HUNTIR_MAX_TRANSMISSION_RANGE];
{ {
if (((getPosVisual _x) select 2) > 20 && {!(_x in GVAR(no_cams))} && {damage _x < 0.5}) then { if (((getPosVisual _x) select 2) > 20 && {!(_x in GVAR(no_cams))} && {_x getHitPointDamage "HitCamera" < 0.25}) then {
GVAR(no_cams) pushBack _x; GVAR(no_cams) pushBack _x;
}; };
} forEach GVAR(nearHuntIRs); } forEach GVAR(nearHuntIRs);
{ {
if (((getPosVisual _x) select 2) <= 20 || {!(_x in GVAR(nearHuntIRs))} || {damage _x >= 0.5}) then { if (((getPosVisual _x) select 2) <= 20 || {!(_x in GVAR(nearHuntIRs))} || {_x getHitPointDamage "HitCamera" >= 0.25}) then {
GVAR(no_cams) deleteAt _forEachIndex; GVAR(no_cams) deleteAt _forEachIndex;
if (_forEachIndex < GVAR(cur_cam)) then { if (_forEachIndex < GVAR(cur_cam)) then {
GVAR(cur_cam) = GVAR(cur_cam) - 1; GVAR(cur_cam) = GVAR(cur_cam) - 1;

View File

@ -1,25 +0,0 @@
/*
* Author: Ruthberg
*
* Handles huntir damage
*
* Arguments:
* 0: huntir <OBJECT>
* 1: selectionName <STRING>
* 2: damage <NUMBER>
* 3: source <OBJECT>
* 4: projectile <STRING>
*
* Return Value:
* Nothing
*
* Return value:
* None
*/
#include "script_component.hpp"
PARAMS_5(_huntir,_selectionName,_damage,_source,_projectile);
systemChat format["Selection: %1; Damage: %2", _selectionName, _damage];
_damage

View File

@ -32,17 +32,16 @@ if (_ammo != "F_HuntIR") exitWith {};
_huntir = createVehicle ["ACE_HuntIR", _position, [], 0, "FLY"]; _huntir = createVehicle ["ACE_HuntIR", _position, [], 0, "FLY"];
_huntir setPosATL _position; _huntir setPosATL _position;
_huntir setVariable [QGVAR(startTime), ACE_time, true]; _huntir setVariable [QGVAR(startTime), ACE_time, true];
// TODO: Edit the .p3d to allow doing the following _huntir getHit "camera"; _huntir getHit "parachute";
//_huntir addEventHandler ["HandleDamage", {_this call FUNC(handleDamage)}];
[{ [{
EXPLODE_1_PVT(_this select 0,_huntir); EXPLODE_1_PVT(_this select 0,_huntir);
if (isNull _huntir) exitWith { if (isNull _huntir) exitWith {
[_this select 1] call CBA_fnc_removePerFrameHandler; [_this select 1] call CBA_fnc_removePerFrameHandler;
}; };
if (damage _huntir > 0) then { private ["_parachuteDamage", "_velocity"];
private ["_velocity"]; _parachuteDamage = _huntir getHitPointDamage "HitParachute";
if (_parachuteDamage > 0) then {
_velocity = velocity _huntir; _velocity = velocity _huntir;
_velocity set [2, -1 min -20 * sqrt(damage _huntir)]; _velocity set [2, -1 min -20 * sqrt(_parachuteDamage)];
_huntir setVelocity _velocity; _huntir setVelocity _velocity;
_huntir setVectorUp [0, 0, 1]; _huntir setVectorUp [0, 0, 1];
}; };

View File

@ -61,7 +61,7 @@ createDialog "ace_huntir_cam_dialog_off";
if (_elapsedTime > 10) then { if (_elapsedTime > 10) then {
GVAR(state) = "noGDS"; GVAR(state) = "noGDS";
}; };
if (_elapsedTime > 5 && {count _nearestHuntIRs > 0}) then { if (_elapsedTime > 5 && {{_x getHitPointDamage "HitCamera" < 0.25} count _nearestHuntIRs > 0}) then {
GVAR(state) = "connecting"; GVAR(state) = "connecting";
}; };
}; };

View File

@ -4,178 +4,194 @@
<Key ID="STR_DN_ACE_HUNTIRBOX"> <Key ID="STR_DN_ACE_HUNTIRBOX">
<English>HuntIR Transport Box</English> <English>HuntIR Transport Box</English>
<German>HuntIR Transportkiste</German> <German>HuntIR Transportkiste</German>
<Spanish>HuntIR Transport Box</Spanish> <Spanish>Caja de transporte de HuntIR</Spanish>
<Czech>Trasnportní bedna HuntIR</Czech> <Czech>Trasnportní bedna HuntIR</Czech>
<Russian>Ящик с HuntIR</Russian> <Russian>Ящик с HuntIR</Russian>
<Italian>HuntIR Transport Box</Italian> <Italian>HuntIR Transport Box</Italian>
<Polish>Skrzynia HuntIR</Polish> <Polish>Skrzynia HuntIR</Polish>
<French>HuntIR Transport Box</French> <French>HuntIR Transport Box</French>
<Hungarian>HuntIR Transport Box</Hungarian> <Hungarian>HuntIR Transport Box</Hungarian>
<Portuguese>Caixa de transporte do HuntIR</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_HUNTIR_magazine_displayName"> <Key ID="STR_ACE_HUNTIR_magazine_displayName">
<English>HuntIR Round</English> <English>HuntIR Round</English>
<German>HuntIR Granate</German> <German>HuntIR Granate</German>
<Spanish>HuntIR Round</Spanish> <Spanish>Proyectil HuntIR</Spanish>
<Czech>HuntIR Round</Czech> <Czech>HuntIR Round</Czech>
<Russian>HuntIR снаряд</Russian> <Russian>HuntIR снаряд</Russian>
<Italian>HuntIR Round</Italian> <Italian>HuntIR Round</Italian>
<Polish>Nabój HuntIR</Polish> <Polish>Nabój HuntIR</Polish>
<French>Munition HuntIR</French> <French>Munition HuntIR</French>
<Hungarian>HuntIR lövedék</Hungarian> <Hungarian>HuntIR lövedék</Hungarian>
<Portuguese>Cartucho HuntIR</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_HUNTIR_monitor_displayName"> <Key ID="STR_ACE_HUNTIR_monitor_displayName">
<English>HuntIR monitor</English> <English>HuntIR monitor</English>
<German>HuntIR Monitor</German> <German>HuntIR Monitor</German>
<Spanish>HuntIR monitor</Spanish> <Spanish>Monitor HuntIR</Spanish>
<Czech>HuntIR monitor</Czech> <Czech>HuntIR monitor</Czech>
<Russian>HuntIR монитор</Russian> <Russian>HuntIR монитор</Russian>
<Italian>HuntIR monitor</Italian> <Italian>HuntIR monitor</Italian>
<Polish>Odbiornik HuntIR</Polish> <Polish>Odbiornik HuntIR</Polish>
<French>Ecran HuntIR</French> <French>Ecran HuntIR</French>
<Hungarian>HuntIR monitor</Hungarian> <Hungarian>HuntIR monitor</Hungarian>
<Portuguese>Monitor HuntIR</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_HUNTIR_activateMonitor"> <Key ID="STR_ACE_HUNTIR_activateMonitor">
<English>Activate HuntIR monitor</English> <English>Activate HuntIR monitor</English>
<German>HuntIR Monitor aktivieren</German> <German>HuntIR Monitor aktivieren</German>
<Spanish>Activate HuntIR monitor</Spanish> <Spanish>Activar monitor HuntIR</Spanish>
<Czech>Zapnout HuntIR monitor</Czech> <Czech>Zapnout HuntIR monitor</Czech>
<Russian>Включить HuntIR монитор</Russian> <Russian>Включить HuntIR монитор</Russian>
<Italian>Activate HuntIR monitor</Italian> <Italian>Activate HuntIR monitor</Italian>
<Polish>Włącz odbiornik HuntIR</Polish> <Polish>Włącz odbiornik HuntIR</Polish>
<French>Allumer écran HuntIR</French> <French>Allumer écran HuntIR</French>
<Hungarian>HuntIR monitor aktiválása</Hungarian> <Hungarian>HuntIR monitor aktiválása</Hungarian>
<Portuguese>Ativar monitor do HuntIR</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_HUNTIR_CAM"> <Key ID="STR_ACE_HUNTIR_CAM">
<English>Camera:</English> <English>Camera:</English>
<German>Kamera:</German> <German>Kamera:</German>
<Spanish>Camera:</Spanish> <Spanish>Camara:</Spanish>
<Czech>Kamera:</Czech> <Czech>Kamera:</Czech>
<Russian>Камера:</Russian> <Russian>Камера:</Russian>
<Italian>Camera:</Italian> <Italian>Camera:</Italian>
<Polish>Kamera:</Polish> <Polish>Kamera:</Polish>
<French>Caméra:</French> <French>Caméra:</French>
<Hungarian>Kamera:</Hungarian> <Hungarian>Kamera:</Hungarian>
<Portuguese>Câmera:</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_HUNTIR_ALT"> <Key ID="STR_ACE_HUNTIR_ALT">
<English>Altitude:</English> <English>Altitude:</English>
<German>Höhe:</German> <German>Höhe:</German>
<Spanish>Altitude:</Spanish> <Spanish>Altitud:</Spanish>
<Czech>Výška:</Czech> <Czech>Výška:</Czech>
<Russian>Высота:</Russian> <Russian>Высота:</Russian>
<Italian>Altitude:</Italian> <Italian>Altitude:</Italian>
<Polish>Wysokość:</Polish> <Polish>Wysokość:</Polish>
<French>Altitude:</French> <French>Altitude:</French>
<Hungarian>Magasság:</Hungarian> <Hungarian>Magasság:</Hungarian>
<Portuguese>Altitude:</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_HUNTIR_TIME"> <Key ID="STR_ACE_HUNTIR_TIME">
<English>Recording Time:</English> <English>Recording Time:</English>
<German>Aufnahmezeit:</German> <German>Aufnahmezeit:</German>
<Spanish>Recording Time:</Spanish> <Spanish>Tiempo de grabación:</Spanish>
<Czech>Čas nahrávání:</Czech> <Czech>Čas nahrávání:</Czech>
<Russian>Время записи:</Russian> <Russian>Время записи:</Russian>
<Italian>Recording Time:</Italian> <Italian>Recording Time:</Italian>
<Polish>Czas nagrywania:</Polish> <Polish>Czas nagrywania:</Polish>
<French>Temps d'enregistrement:</French> <French>Temps d'enregistrement:</French>
<Hungarian>Felvételi idő:</Hungarian> <Hungarian>Felvételi idő:</Hungarian>
<Portuguese>Tempo de gravação:</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_HUNTIR_ESC"> <Key ID="STR_ACE_HUNTIR_ESC">
<English>Press ESC to quit camera</English> <English>Press ESC to quit camera</English>
<German>Zum Verlassen ESC drücken</German> <German>Zum Verlassen ESC drücken</German>
<Spanish>Press ESC to quit camera</Spanish> <Spanish>Pulsar ESC para salir de la camara</Spanish>
<Czech>Stiskni ESC pro opustění kamery</Czech> <Czech>Stiskni ESC pro opustění kamery</Czech>
<Russian>Нажмите ESC чтобы выйти из режима камеры</Russian> <Russian>Нажмите ESC чтобы выйти из режима камеры</Russian>
<Italian>Press ESC to quit camera</Italian> <Italian>Press ESC to quit camera</Italian>
<Polish>Wciśnij ESC by wyjść z widoku kamery</Polish> <Polish>Wciśnij ESC by wyjść z widoku kamery</Polish>
<French>Appuyer sur ESC pour quitter camera</French> <French>Appuyer sur ESC pour quitter camera</French>
<Hungarian>Nyomj ESC-ket a kamerából való kilépéshez</Hungarian> <Hungarian>Nyomj ESC-ket a kamerából való kilépéshez</Hungarian>
<Portuguese>Pressione ESC para sair da câmera</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_HUNTIR_HELP"> <Key ID="STR_ACE_HUNTIR_HELP">
<English>Help</English> <English>Help</English>
<German>Hilfe</German> <German>Hilfe</German>
<Spanish>Help</Spanish> <Spanish>Ayuda</Spanish>
<Czech>Pomoc</Czech> <Czech>Pomoc</Czech>
<Russian>Помощь</Russian> <Russian>Помощь</Russian>
<Italian>Help</Italian> <Italian>Help</Italian>
<Polish>Pomoc</Polish> <Polish>Pomoc</Polish>
<French>Aide</French> <French>Aide</French>
<Hungarian>Súgó</Hungarian> <Hungarian>Súgó</Hungarian>
<Portuguese>Ajuda</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_HUNTIR_HELP_ZOOM"> <Key ID="STR_ACE_HUNTIR_HELP_ZOOM">
<English>A/D - Cycle zoom</English> <English>A/D - Cycle zoom</English>
<German>A/D - Zoom</German> <German>A/D - Zoom</German>
<Spanish>A/D - Cycle zoom</Spanish> <Spanish>A/D - Cambiar zoom</Spanish>
<Czech>A/D - Změna přiblížení</Czech> <Czech>A/D - Změna přiblížení</Czech>
<Russian>A/D - Приближение</Russian> <Russian>A/D - Приближение</Russian>
<Italian>A/D - Cycle zoom</Italian> <Italian>A/D - Cycle zoom</Italian>
<Polish>A/D - powiększenie</Polish> <Polish>A/D - powiększenie</Polish>
<French>A/D - Changement zoom</French> <French>A/D - Changement zoom</French>
<Hungarian>A/D - Nagyítás</Hungarian> <Hungarian>A/D - Nagyítás</Hungarian>
<Portuguese>A/D - Troca zoom</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_HUNTIR_HELP_CAM"> <Key ID="STR_ACE_HUNTIR_HELP_CAM">
<English>W/S - Select camera</English> <English>W/S - Select camera</English>
<German>W/S - Wähle Kamera</German> <German>W/S - Wähle Kamera</German>
<Spanish>W/S - Select camera</Spanish> <Spanish>W/S - Seleccionar camara</Spanish>
<Czech>W/S - Výběr kamery</Czech> <Czech>W/S - Výběr kamery</Czech>
<Russian>W/S - Выбрать камеру</Russian> <Russian>W/S - Выбрать камеру</Russian>
<Italian>W/S - Select camera</Italian> <Italian>W/S - Select camera</Italian>
<Polish>W/S - wybór kamery</Polish> <Polish>W/S - wybór kamery</Polish>
<French>W/S - Sélectionner caméra</French> <French>W/S - Sélectionner caméra</French>
<Hungarian>W/S - Kamera váltás</Hungarian> <Hungarian>W/S - Kamera váltás</Hungarian>
<Portuguese>W/S - Seleciona câmera</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_HUNTIR_HELP_ROT"> <Key ID="STR_ACE_HUNTIR_HELP_ROT">
<English>Left/Right - Rotate camera</English> <English>Left/Right - Rotate camera</English>
<German>Links/Rechts - Rotiere Kamera</German> <German>Links/Rechts - Rotiere Kamera</German>
<Spanish>Left/Right - Rotate camera</Spanish> <Spanish>Left/Right - Rotar camara</Spanish>
<Czech>Levá/Pravá - Rotace kamery</Czech> <Czech>Levá/Pravá - Rotace kamery</Czech>
<Russian>Влево/Вправо - Вращать камеру</Russian> <Russian>Влево/Вправо - Вращать камеру</Russian>
<Italian>Left/Right - Rotate camera</Italian> <Italian>Left/Right - Rotate camera</Italian>
<Polish>Lewo/Prawo - obrót kamery w poziomie</Polish> <Polish>Lewo/Prawo - obrót kamery w poziomie</Polish>
<French>Gauche/Droite - Rotation caméra</French> <French>Gauche/Droite - Rotation caméra</French>
<Hungarian>Jobb/Bal - Kamera forgatás</Hungarian> <Hungarian>Jobb/Bal - Kamera forgatás</Hungarian>
<Portuguese>Esquerda/Direita - Rotaciona câmera</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_HUNTIR_HELP_ELV"> <Key ID="STR_ACE_HUNTIR_HELP_ELV">
<English>Up/Down - Elevate/lower camera</English> <English>Up/Down - Elevate/lower camera</English>
<German>Hoch/Runter - Neige Kamera</German> <German>Hoch/Runter - Neige Kamera</German>
<Spanish>Up/Down - Elevate/lower camera</Spanish> <Spanish>Up/Down - Subir/bajar camara</Spanish>
<Czech>Nahoru/Dolu - Zvýšít/snížit úhel pohledu kamery</Czech> <Czech>Nahoru/Dolu - Zvýšít/snížit úhel pohledu kamery</Czech>
<Russian>Вверх/Вниз - Поднять/Опустить камеру</Russian> <Russian>Вверх/Вниз - Поднять/Опустить камеру</Russian>
<Italian>Up/Down - Elevate/lower camera</Italian> <Italian>Up/Down - Elevate/lower camera</Italian>
<Polish>Góra/Dół - obrót kamery w pionie</Polish> <Polish>Góra/Dół - obrót kamery w pionie</Polish>
<French>Haut/Bas - Monter/descendre caméra</French> <French>Haut/Bas - Monter/descendre caméra</French>
<Hungarian>Fel/Le - Kamera döntése/süllyesztése</Hungarian> <Hungarian>Fel/Le - Kamera döntése/süllyesztése</Hungarian>
<Portuguese>Acima/Abaixo - Eleva/Abaixa a câmera</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_HUNTIR_HELP_MOD"> <Key ID="STR_ACE_HUNTIR_HELP_MOD">
<English>N - Cycle IT modes</English> <English>N - Cycle IT modes</English>
<German>N - Sichtmodi</German> <German>N - Sichtmodi</German>
<Spanish>N - Cycle IT modes</Spanish> <Spanish>N - Cambiar modos de IT</Spanish>
<Czech>N - Změna režimů kamery</Czech> <Czech>N - Změna režimů kamery</Czech>
<Russian>N - Режимы камеры</Russian> <Russian>N - Режимы камеры</Russian>
<Italian>N - Cycle IT modes</Italian> <Italian>N - Cycle IT modes</Italian>
<Polish>N - wybór trybu IT</Polish> <Polish>N - wybór trybu IT</Polish>
<French>N - Changement de modes IT</French> <French>N - Changement de modes IT</French>
<Hungarian>N - Hőkép módok</Hungarian> <Hungarian>N - Hőkép módok</Hungarian>
<Portuguese>N - Troca modo IT</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_HUNTIR_HELP_RES"> <Key ID="STR_ACE_HUNTIR_HELP_RES">
<English>R - Reset camera</English> <English>R - Reset camera</English>
<German>R - Reset</German> <German>R - Reset</German>
<Spanish>R - Reset camera</Spanish> <Spanish>R - Reiniciar camara</Spanish>
<Czech>R - Reset kamery</Czech> <Czech>R - Reset kamery</Czech>
<Russian>R - Сбросить настройки камеры</Russian> <Russian>R - Сбросить настройки камеры</Russian>
<Italian>R - Reset camera</Italian> <Italian>R - Reset camera</Italian>
<Polish>R - resetuj kamerę</Polish> <Polish>R - resetuj kamerę</Polish>
<French>R - Reset caméra</French> <French>R - Reset caméra</French>
<Hungarian>R - Kamera visszaállítása</Hungarian> <Hungarian>R - Kamera visszaállítása</Hungarian>
<Portuguese>R - Redefine a câmera</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_HUNTIR_HELP_EXIT"> <Key ID="STR_ACE_HUNTIR_HELP_EXIT">
<English>Esc - Exit help</English> <English>Esc - Exit help</English>
<German>ESC - Hilfe verlassen</German> <German>ESC - Hilfe verlassen</German>
<Spanish>Esc - Exit help</Spanish> <Spanish>Esc - Salit de ayuda</Spanish>
<Czech>Esc - Ukončit pomoc </Czech> <Czech>Esc - Ukončit pomoc </Czech>
<Russian>Esc - Выйти из помощи</Russian> <Russian>Esc - Выйти из помощи</Russian>
<Italian>Esc - Exit help</Italian> <Italian>Esc - Exit help</Italian>
<Polish>Esc - wyjście z ekranu Pomocy</Polish> <Polish>Esc - wyjście z ekranu Pomocy</Polish>
<French>Esc - Sortir de l'aide</French> <French>Esc - Sortir de l'aide</French>
<Hungarian>Exit - Kilépés a súgóból</Hungarian> <Hungarian>Exit - Kilépés a súgóból</Hungarian>
<Portuguese>Esc - Sai do Ajuda</Portuguese>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -76,4 +76,11 @@ class ACE_Settings {
displayName = CSTRING(background); displayName = CSTRING(background);
values[] = {"$STR_A3_OPTIONS_DISABLED", CSTRING(backgroundBlur), CSTRING(backgroundBlack)}; values[] = {"$STR_A3_OPTIONS_DISABLED", CSTRING(backgroundBlur), CSTRING(backgroundBlack)};
}; };
class GVAR(addBuildingActions) {
value = 0;
typeName = "BOOL";
isClientSettable = 1;
displayName = CSTRING(addBuildingActions);
description = CSTRING(addBuildingActionsDescription);
};
}; };

View File

@ -3,6 +3,9 @@
if (!hasInterface) exitWith {}; if (!hasInterface) exitWith {};
GVAR(cachedBuildingTypes) = [];
GVAR(cachedBuildingActionPairs) = [];
GVAR(ParsedTextCached) = []; GVAR(ParsedTextCached) = [];
//Setup text/shadow/size/color settings matrix //Setup text/shadow/size/color settings matrix
@ -17,6 +20,9 @@ GVAR(ParsedTextCached) = [];
// Install the render EH on the main display // Install the render EH on the main display
addMissionEventHandler ["Draw3D", DFUNC(render)]; addMissionEventHandler ["Draw3D", DFUNC(render)];
//Add Actions to Houses:
["interactMenuOpened", {_this call FUNC(userActions_addHouseActions)}] call EFUNC(common,addEventHandler);
// This spawn is probably worth keeping, as pfh don't work natively on the briefing screen and IDK how reliable the hack we implemented for them is. // This spawn is probably worth keeping, as pfh don't work natively on the briefing screen and IDK how reliable the hack we implemented for them is.
// The thread dies as soon as the mission start, so it's not really compiting for scheduler space. // The thread dies as soon as the mission start, so it's not really compiting for scheduler space.
[] spawn { [] spawn {
@ -30,8 +36,6 @@ addMissionEventHandler ["Draw3D", DFUNC(render)];
["ACE3 Common", QGVAR(InteractKey), (localize LSTRING(InteractKey)), ["ACE3 Common", QGVAR(InteractKey), (localize LSTRING(InteractKey)),
{ {
// Conditions: canInteract
if !([ACE_player, objNull, ["isNotInside","isNotDragging", "isNotCarrying", "isNotSwimming", "notOnMap", "isNotEscorting", "isNotSurrendering"]] call EFUNC(common,canInteractWith)) exitWith {false};
// Statement // Statement
[0] call FUNC(keyDown) [0] call FUNC(keyDown)
},{[0,false] call FUNC(keyUp)}, },{[0,false] call FUNC(keyUp)},
@ -39,8 +43,6 @@ addMissionEventHandler ["Draw3D", DFUNC(render)];
["ACE3 Common", QGVAR(SelfInteractKey), (localize LSTRING(SelfInteractKey)), ["ACE3 Common", QGVAR(SelfInteractKey), (localize LSTRING(SelfInteractKey)),
{ {
// Conditions: canInteract
if !([ACE_player, objNull, ["isNotInside","isNotDragging", "isNotCarrying", "isNotSwimming", "notOnMap", "isNotEscorting", "isNotSurrendering"]] call EFUNC(common,canInteractWith)) exitWith {false};
// Statement // Statement
[1] call FUNC(keyDown) [1] call FUNC(keyDown)
},{[1,false] call FUNC(keyUp)}, },{[1,false] call FUNC(keyUp)},
@ -72,3 +74,11 @@ addMissionEventHandler ["Draw3D", DFUNC(render)];
if (GVAR(menuBackground)==1) then {[QGVAR(menuBackground), false] call EFUNC(common,blurScreen);}; if (GVAR(menuBackground)==1) then {[QGVAR(menuBackground), false] call EFUNC(common,blurScreen);};
if (GVAR(menuBackground)==2) then {(uiNamespace getVariable [QGVAR(menuBackground), displayNull]) closeDisplay 0;}; if (GVAR(menuBackground)==2) then {(uiNamespace getVariable [QGVAR(menuBackground), displayNull]) closeDisplay 0;};
}] call EFUNC(common,addEventHandler); }] call EFUNC(common,addEventHandler);
// Let key work with zeus open (not perfect, enables all added hotkeys in zeus interface rather than only menu)
["zeusDisplayChanged",{
if (_this select 1) then {
(finddisplay 312) displayAddEventHandler ["KeyUp", {[_this,'keyup'] call CBA_events_fnc_keyHandler}];
(finddisplay 312) displayAddEventHandler ["KeyDown", {[_this,'keydown'] call CBA_events_fnc_keyHandler}];
};
}] call EFUNC(common,addEventHandler);

View File

@ -6,6 +6,7 @@ PREP(addActionToClass);
PREP(addActionToObject); PREP(addActionToObject);
PREP(compileMenu); PREP(compileMenu);
PREP(compileMenuSelfAction); PREP(compileMenuSelfAction);
PREP(compileMenuZeus);
PREP(collectActiveActionTree); PREP(collectActiveActionTree);
PREP(createAction); PREP(createAction);
PREP(ctrlSetParsedTextCached); PREP(ctrlSetParsedTextCached);
@ -24,6 +25,8 @@ PREP(renderMenu);
PREP(renderSelector); PREP(renderSelector);
PREP(setupTextColors); PREP(setupTextColors);
PREP(splitPath); PREP(splitPath);
PREP(userActions_addHouseActions);
PREP(userActions_getHouseActions);
// Event handlers for all interact menu controls // Event handlers for all interact menu controls
DFUNC(handleMouseMovement) = { DFUNC(handleMouseMovement) = {
@ -75,4 +78,7 @@ GVAR(lastTimeSearchedActions) = -1000;
["CAManBase"] call FUNC(compileMenu); ["CAManBase"] call FUNC(compileMenu);
["CAManBase"] call FUNC(compileMenuSelfAction); ["CAManBase"] call FUNC(compileMenuSelfAction);
// Init zeus menu
[] call FUNC(compileMenuZeus);
ADDON = true; ADDON = true;

View File

@ -21,5 +21,5 @@ class CfgPatches {
#include "ACE_Settings.hpp" #include "ACE_Settings.hpp"
class ACE_Extensions { class ACE_Extensions {
extensions[] += {"ace_break_line"}; extensions[] += {"ace_break_line", "ace_parse_imagepath"};
}; };

View File

@ -90,7 +90,7 @@ _recurseFnc = {
[], [],
_position, _position,
_distance, _distance,
[_showDisabled,_enableInside,_canCollapse,_runOnHover], [_showDisabled,_enableInside,_canCollapse,_runOnHover, false],
_modifierFunction _modifierFunction
], ],
_children _children

View File

@ -74,7 +74,7 @@ _recurseFnc = {
{}, {},
[0,0,0], [0,0,0],
10, //distace 10, //distace
[_showDisabled,_enableInside,_canCollapse,_runOnHover], [_showDisabled,_enableInside,_canCollapse,_runOnHover, true],
_modifierFunction _modifierFunction
], ],
_children _children
@ -122,7 +122,7 @@ _actions = if (_isMan) then {
// Dummy statement so it's not collapsed when there's no available actions // Dummy statement so it's not collapsed when there's no available actions
true true
}, },
{[ACE_player, _target, ["isNotInside","isNotDragging", "isNotCarrying", "isNotSwimming", "notOnMap", "isNotEscorting", "isNotSurrendering"]] call EFUNC(common,canInteractWith)}, {[ACE_player, _target, ["isNotInside","isNotDragging", "isNotCarrying", "isNotSwimming", "notOnMap", "isNotEscorting", "isNotSurrendering", "isNotSitting"]] call EFUNC(common,canInteractWith)},
{}, {},
{}, {},
"Spine3", "Spine3",

View File

@ -0,0 +1,94 @@
/*
* Author: SilentSpike
* Compile the zeus action menu (only to be done once)
*
* Argument:
* nil
*
* Return value:
* None
*
* Public: No
*/
#include "script_component.hpp";
// Exit if the action menu is already compiled for zeus
if !(isNil {missionNamespace getVariable [QGVAR(ZeusActions), nil]}) exitWith {};
private "_recurseFnc";
_recurseFnc = {
private ["_actions", "_displayName", "_icon", "_statement", "_condition", "_showDisabled",
"_enableInside", "_canCollapse", "_runOnHover", "_children", "_entry", "_entryCfg", "_insertChildren", "_modifierFunction"];
EXPLODE_1_PVT(_this,_actionsCfg);
_actions = [];
{
_entryCfg = _x;
if(isClass _entryCfg) then {
_displayName = getText (_entryCfg >> "displayName");
_icon = getText (_entryCfg >> "icon");
_statement = compile (getText (_entryCfg >> "statement"));
_condition = getText (_entryCfg >> "condition");
if (_condition == "") then {_condition = "true"};
_insertChildren = compile (getText (_entryCfg >> "insertChildren"));
_modifierFunction = compile (getText (_entryCfg >> "modifierFunction"));
_showDisabled = (getNumber (_entryCfg >> "showDisabled")) > 0;
_enableInside = (getNumber (_entryCfg >> "enableInside")) > 0;
_canCollapse = (getNumber (_entryCfg >> "canCollapse")) > 0;
_runOnHover = true;
if (isText (_entryCfg >> "runOnHover")) then {
_runOnHover = compile getText (_entryCfg >> "runOnHover");
} else {
_runOnHover = (getNumber (_entryCfg >> "runOnHover")) > 0;
};
_condition = compile _condition;
_children = [_entryCfg] call _recurseFnc;
_entry = [
[
configName _entryCfg,
_displayName,
_icon,
_statement,
_condition,
_insertChildren,
{},
[0,0,0],
10, //distace
[_showDisabled,_enableInside,_canCollapse,_runOnHover],
_modifierFunction
],
_children
];
_actions pushBack _entry;
};
} forEach (configProperties [_actionsCfg, "isClass _x", true]);
_actions
};
private ["_actionsCfg"];
_actionsCfg = configFile >> "ACE_ZeusActions";
// Create a master action to base zeus actions on
GVAR(ZeusActions) = [
[
[
"ACE_ZeusActions",
localize LSTRING(ZeusActionsRoot),
"\A3\Ui_F_Curator\Data\Logos\arma3_zeus_icon_ca.paa",
{true},
{true},
{},
{},
{[0,0,0]},
10,
[false,true,false]
],
[_actionsCfg] call _recurseFnc
]
];

View File

@ -68,7 +68,7 @@ _distance = if (count _this > 8) then {
_params = if (count _this > 9) then { _params = if (count _this > 9) then {
_this select 9 _this select 9
} else { } else {
[false,false,false,false] [false,false,false,false,false]
}; };
_modifierFunction = if (count _this > 10) then { _modifierFunction = if (count _this > 10) then {

View File

@ -16,6 +16,11 @@ EXPLODE_1_PVT(_this,_menuType);
if (GVAR(openedMenuType) == _menuType) exitWith {true}; if (GVAR(openedMenuType) == _menuType) exitWith {true};
// Conditions: canInteract (these don't apply to zeus)
if ((isNull curatorCamera) && {
!([ACE_player, objNull, ["isNotInside","isNotDragging", "isNotCarrying", "isNotSwimming", "notOnMap", "isNotEscorting", "isNotSurrendering", "isNotSitting"]] call EFUNC(common,canInteractWith))
}) exitWith {false};
while {dialog} do { while {dialog} do {
closeDialog 0; closeDialog 0;
}; };
@ -34,6 +39,7 @@ GVAR(ParsedTextCached) = [];
GVAR(useCursorMenu) = (vehicle ACE_player != ACE_player) || GVAR(useCursorMenu) = (vehicle ACE_player != ACE_player) ||
visibleMap || visibleMap ||
(!isNull curatorCamera) ||
{(_menuType == 1) && {(isWeaponDeployed ACE_player) || GVAR(AlwaysUseCursorSelfInteraction) || {cameraView == "GUNNER"}}} || {(_menuType == 1) && {(isWeaponDeployed ACE_player) || GVAR(AlwaysUseCursorSelfInteraction) || {cameraView == "GUNNER"}}} ||
{(_menuType == 0) && GVAR(AlwaysUseCursorInteraction)}; {(_menuType == 0) && GVAR(AlwaysUseCursorInteraction)};
@ -46,7 +52,12 @@ for "_i" from 0 to (count GVAR(iconCtrls))-1 do {
GVAR(iconCtrls) resize GVAR(iconCount); GVAR(iconCtrls) resize GVAR(iconCount);
if (GVAR(useCursorMenu)) then { if (GVAR(useCursorMenu)) then {
(findDisplay 46) createDisplay QGVAR(cursorMenu); //"RscCinemaBorder";// // Don't close zeus interface if open
if (isNull curatorCamera) then {
(findDisplay 46) createDisplay QGVAR(cursorMenu); //"RscCinemaBorder";//
} else {
createDialog QGVAR(cursorMenu);
};
(finddisplay 91919) displayAddEventHandler ["KeyUp", {[_this,'keyup'] call CBA_events_fnc_keyHandler}]; (finddisplay 91919) displayAddEventHandler ["KeyUp", {[_this,'keyup'] call CBA_events_fnc_keyHandler}];
(finddisplay 91919) displayAddEventHandler ["KeyDown", {[_this,'keydown'] call CBA_events_fnc_keyHandler}]; (finddisplay 91919) displayAddEventHandler ["KeyDown", {[_this,'keydown'] call CBA_events_fnc_keyHandler}];
// The dialog sets: // The dialog sets:

View File

@ -46,6 +46,8 @@ if(GVAR(actionSelected)) then {
}; };
}; };
["interactMenuClosed", [GVAR(openedMenuType)]] call EFUNC(common,localEvent);
GVAR(keyDown) = false; GVAR(keyDown) = false;
GVAR(keyDownSelfAction) = false; GVAR(keyDownSelfAction) = false;
GVAR(openedMenuType) = -1; GVAR(openedMenuType) = -1;
@ -54,6 +56,4 @@ GVAR(expanded) = false;
GVAR(lastPath) = []; GVAR(lastPath) = [];
GVAR(menuDepthPath) = []; GVAR(menuDepthPath) = [];
["interactMenuClosed", [GVAR(openedMenuType)]] call EFUNC(common,localEvent);
true true

View File

@ -49,7 +49,7 @@ _fnc_renderNearbyActions = {
_action = _x; _action = _x;
if ([_target, _action] call FUNC(renderBaseMenu)) then { if ([_target, _action] call FUNC(renderBaseMenu)) then {
_numInteractions = _numInteractions + 1; _numInteractions = _numInteractions + 1;
GVAR(foundActions) pushBack [_target, _action]; GVAR(foundActions) pushBack [_target, _action, GVAR(objectActionList)];
}; };
}; };
} forEach GVAR(objectActionList); } forEach GVAR(objectActionList);
@ -61,7 +61,7 @@ _fnc_renderNearbyActions = {
// Try to render the menu // Try to render the menu
if ([_target, _action] call FUNC(renderBaseMenu)) then { if ([_target, _action] call FUNC(renderBaseMenu)) then {
_numInteractions = _numInteractions + 1; _numInteractions = _numInteractions + 1;
GVAR(foundActions) pushBack [_target, _action]; GVAR(foundActions) pushBack [_target, _action, GVAR(objectActionList)];
}; };
} forEach _classActions; } forEach _classActions;
@ -78,7 +78,10 @@ _fnc_renderNearbyActions = {
_fnc_renderLastFrameActions = { _fnc_renderLastFrameActions = {
{ {
_x call FUNC(renderBaseMenu); EXPLODE_3_PVT(_x,_target,_action,_objectActionList);
GVAR(objectActionList) = _objectActionList;
[_target, _action] call FUNC(renderBaseMenu);
} forEach GVAR(foundActions); } forEach GVAR(foundActions);
}; };
@ -118,24 +121,35 @@ _fnc_renderSelfActions = {
} forEach _classActions; } forEach _classActions;
}; };
_fnc_renderZeusActions = {
{
_action = _x;
[_this, _action, [0.5, 0.5]] call FUNC(renderBaseMenu);
} forEach GVAR(ZeusActions);
};
GVAR(collectedActionPoints) resize 0; GVAR(collectedActionPoints) resize 0;
// Render nearby actions, unit self actions or vehicle self actions as appropiate // Render nearby actions, unit self actions or vehicle self actions as appropiate
if (GVAR(openedMenuType) == 0) then { if (GVAR(openedMenuType) == 0) then {
if (isNull curatorCamera) then {
if (vehicle ACE_player == ACE_player) then { if (vehicle ACE_player == ACE_player) then {
if (ACE_diagTime > GVAR(lastTimeSearchedActions) + 0.20) then { if (ACE_diagTime > GVAR(lastTimeSearchedActions) + 0.20) then {
// Once every 0.2 secs, collect nearby objects active and visible action points and render them // Once every 0.2 secs, collect nearby objects active and visible action points and render them
call _fnc_renderNearbyActions; call _fnc_renderNearbyActions;
} else {
// The rest of the frames just draw the same action points rendered the last frame
call _fnc_renderLastFrameActions;
};
} else { } else {
// The rest of the frames just draw the same action points rendered the last frame // Render vehicle self actions when in vehicle
call _fnc_renderLastFrameActions; (vehicle ACE_player) call _fnc_renderSelfActions;
}; };
} else { } else {
(vehicle ACE_player) call _fnc_renderSelfActions; // Render zeus actions when zeus open
(getAssignedCuratorLogic player) call _fnc_renderZeusActions;
}; };
} else { } else {
ACE_player call _fnc_renderSelfActions; ACE_player call _fnc_renderSelfActions;
}; };

View File

@ -36,7 +36,7 @@ _pos = if((count _this) > 2) then {
}; };
// For non-self actions, exit if the action is too far away or ocluded // For non-self actions, exit if the action is too far away or ocluded
if (GVAR(openedMenuType) == 0 && vehicle ACE_player == ACE_player && if (GVAR(openedMenuType) == 0 && (vehicle ACE_player == ACE_player) && (isNull curatorCamera) &&
{ {
private ["_headPos","_actualDistance"]; private ["_headPos","_actualDistance"];
_headPos = ACE_player modelToWorldVisual (ACE_player selectionPosition "pilot"); _headPos = ACE_player modelToWorldVisual (ACE_player selectionPosition "pilot");
@ -44,7 +44,7 @@ if (GVAR(openedMenuType) == 0 && vehicle ACE_player == ACE_player &&
if (_actualDistance > _distance) exitWith {true}; if (_actualDistance > _distance) exitWith {true};
if (_actualDistance > 1.5) exitWith { if ((_actualDistance > 1.5) && {!((_actionData select 9) select 4)}) exitWith {
// If distance to action is greater than 1.5 m, check LOS // If distance to action is greater than 1.5 m, check LOS
_line = [_headPos call EFUNC(common,positionToASL), _pos call EFUNC(common,positionToASL), _object, ACE_player]; _line = [_headPos call EFUNC(common,positionToASL), _pos call EFUNC(common,positionToASL), _object, ACE_player];
lineIntersects _line lineIntersects _line

View File

@ -0,0 +1,97 @@
/*
* Author: PabstMirror
* Scans for nearby "Static" objects (buildings) and adds the UserActions to them.
* Called when interact_menu starts rendering (from "interact_keyDown" event)
*
* Arguments:
* 0: Interact Menu Type (0 - world, 1 - self) <NUMBER>
*
* Return Value:
* Nothing
*
* Example:
* [0] call ace_interact_menu_fnc_addHouseActions
*
* Public: Yes
*/
#include "script_component.hpp"
PARAMS_1(_interactionType);
//Ignore if not enabled:
if (!GVAR(addBuildingActions)) exitWith {};
//Ignore self-interaction menu:
if (_interactionType != 0) exitWith {};
//Ignore when mounted:
if ((vehicle ACE_player) != ACE_player) exitWith {};
[{
private ["_nearBuidlings", "_typeOfHouse", "_houseBeingScaned", "_actionSet", "_memPoints", "_memPointsActions", "_helperPos", "_helperObject"];
PARAMS_2(_args,_pfID);
EXPLODE_4_PVT(_args,_setPosition,_addedHelpers,_housesScaned,_housesToScanForActions);
if (!EGVAR(interact_menu,keyDown)) then {
{deleteVehicle _x;} forEach _addedHelpers;
[_pfID] call CBA_fnc_removePerFrameHandler;
} else {
// Prevent Rare Error when ending mission with interact key down:
if (isNull ace_player) exitWith {};
//Make the common case fast (cursorTarget is looking at a door):
if ((!isNull cursorTarget) && {cursorTarget isKindOf "Static"} && {!(cursorTarget in _housesScaned)}) then {
if (((count (configFile >> "CfgVehicles" >> (typeOf cursorTarget) >> "UserActions")) > 0) || {(count (getArray (configFile >> "CfgVehicles" >> (typeOf cursorTarget) >> "ladders"))) > 0}) then {
_housesToScanForActions = [cursorTarget];
} else {
_housesScaned pushBack cursorTarget;
};
};
//For performance, we only do 1 thing per frame,
//-either do a wide scan and search for houses with actions
//-or scan one house at a time and add the actions for that house
if (_housesToScanForActions isEqualTo []) then {
//If player moved >2 meters from last pos, then rescan
if (((getPosASL ace_player) distance _setPosition) < 2) exitWith {};
_nearBuidlings = nearestObjects [ace_player, ["Static"], 30];
{
_typeOfHouse = typeOf _x;
if (((count (configFile >> "CfgVehicles" >> _typeOfHouse >> "UserActions")) == 0) && {(count (getArray (configFile >> "CfgVehicles" >> _typeOfHouse >> "ladders"))) == 0}) then {
_housesScaned pushBack _x;
} else {
_housesToScanForActions pushBack _x;
};
} forEach (_nearBuidlings - _housesScaned);
_args set [0, (getPosASL ace_player)];
} else {
_houseBeingScaned = _housesToScanForActions deleteAt 0;
_typeOfHouse = typeOf _houseBeingScaned;
//Skip this house for now if we are outside of it's radius
//(we have to scan far out for the big houses, but we don't want to waste time adding actions on every little shack)
if ((_houseBeingScaned != cursorTarget) && {((ACE_player distance _houseBeingScaned) - ((sizeOf _typeOfHouse) / 2)) > 4}) exitWith {};
_housesScaned pushBack _houseBeingScaned;
_actionSet = [_typeOfHouse] call FUNC(userActions_getHouseActions);
EXPLODE_2_PVT(_actionSet,_memPoints,_memPointsActions);
// systemChat format ["Add Actions for [%1] (count %2) @ %3", _typeOfHouse, (count _memPoints), diag_tickTime];
{
_helperPos = (_houseBeingScaned modelToWorld (_houseBeingScaned selectionPosition _x)) call EFUNC(common,positionToASL);
_helperObject = "Sign_Sphere25cm_F" createVehicleLocal _helperPos;
_addedHelpers pushBack _helperObject;
_helperObject setVariable [QGVAR(building), _houseBeingScaned];
_helperObject setPosASL _helperPos;
_helperObject hideObject true;
TRACE_3("Making New Helper",_helperObject,_x,_houseBeingScaned);
{
[_helperObject, 0, [], _x] call EFUNC(interact_menu,addActionToObject);
} forEach (_memPointsActions select _forEachIndex);
} forEach _memPoints;
};
};
}, 0, [((getPosASL ace_player) vectorAdd [-100,0,0]), [], [], []]] call CBA_fnc_addPerFrameHandler;

View File

@ -0,0 +1,137 @@
/*
* Author: PabstMirror
* Scans the buidling type for UserActions and Ladder mount points.
*
* Arguments:
* 0: Building Classname <STRING>
*
* Return Value:
* [[Array of MemPoints], [Array Of Actions]]
*
* Public: Yes
*/
#include "script_component.hpp"
PARAMS_1(_typeOfBuilding);
private["_action", "_actionDisplayName", "_actionDisplayNameDefault", "_actionMaxDistance", "_actionOffset", "_actionPath", "_actionPosition", "_building", "_configPath", "_endIndex", "_iconImage", "_index", "_ladders", "_memPointIndex", "_memPoints", "_memPointsActions", "_startIndex"];
_searchIndex = GVAR(cachedBuildingTypes) find _typeOfBuilding;
if (_searchIndex != -1) exitWith {GVAR(cachedBuildingActionPairs) select _searchIndex};
_memPoints = [];
_memPointsActions = [];
//Get the offset for a memory point:
_fnc_getMemPointOffset = {
PARAMS_1(_memoryPoint);
_memPointIndex = _memPoints find _memoryPoint;
_actionOffset = [0,0,0];
if (_memPointIndex == -1) then {
_memPoints pushBack _memoryPoint;
_memPointsActions pushBack [];
} else {
_actionOffset set [2, 0.0254 * (count (_memPointsActions select _memPointIndex))];
};
_actionOffset
};
// Add UserActions for the building:
_fnc_userAction_Statement = {
PARAMS_3(_target,_player,_variable);
EXPLODE_2_PVT(_variable,_actionStatement,_actionCondition);
this = _target getVariable [QGVAR(building), objNull];
call _actionStatement;
};
_fnc_userAction_Condition = {
PARAMS_3(_target,_player,_variable);
EXPLODE_2_PVT(_variable,_actionStatement,_actionCondition);
this = _target getVariable [QGVAR(building), objNull];
if (isNull this) exitWith {false};
call _actionCondition;
};
_configPath = configFile >> "CfgVehicles" >> _typeOfBuilding >> "UserActions";
for "_index" from 0 to ((count _configPath) - 1) do {
_actionPath = _configPath select _index;
_actionDisplayName = getText (_actionPath >> "displayName");
_actionDisplayNameDefault = getText (_actionPath >> "displayNameDefault");
_actionPosition = getText (_actionPath >> "position");
_actionCondition = getText (_actionPath >> "condition");
_actionStatement = getText (_actionPath >> "statement");
_actionMaxDistance = getNumber (_actionPath >> "radius");
if (_actionDisplayName == "") then {_actionDisplayName = (configName _x);};
if (_actionPosition == "") then {ERROR("Bad Position");};
if (_actionCondition == "") then {_actionCondition = "true";};
if (_actionStatement == "") then {ERROR("No Statement");};
_actionStatement = compile _actionStatement;
_actionCondition = compile _actionCondition;
_actionMaxDistance = _actionMaxDistance + 0.1; //increase range slightly
_iconImage = "";
//extension ~4x as fast:
_iconImage = "ace_parse_imagepath" callExtension _actionDisplayNameDefault;
_actionOffset = [_actionPosition] call _fnc_getMemPointOffset;
_memPointIndex = _memPoints find _actionPosition;
_action = [(configName _actionPath), _actionDisplayName, _iconImage, _fnc_userAction_Statement, _fnc_userAction_Condition, {}, [_actionStatement, _actionCondition], _actionOffset, _actionMaxDistance, [false,false,false,false,true]] call EFUNC(interact_menu,createAction);
(_memPointsActions select _memPointIndex) pushBack _action;
};
// Add Ladder Actions for the building:
_fnc_ladder_ladderUp = {
PARAMS_3(_target,_player,_variable);
EXPLODE_1_PVT(_variable,_ladderIndex);
_building = _target getVariable [QGVAR(building), objNull];
TRACE_3("Ladder Action - UP",_player,_building,_ladderIndex);
_player action ["LadderUp", _building, _ladderIndex, 0];
};
_fnc_ladder_ladderDown = {
PARAMS_3(_target,_player,_variable);
EXPLODE_1_PVT(_variable,_ladderIndex);
_building = _target getVariable [QGVAR(building), objNull];
TRACE_3("Ladder Action - Down",_player,_building,_ladderIndex);
_player action ["LadderDown", _building, _ladderIndex, 1];
};
_fnc_ladder_conditional = {
PARAMS_2(_target,_player);
//(Check distance < 2) and (Don't show actions if on a ladder)
((_target distance _player) < 2) && {((getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState _player) >> "onLadder")) == 0)}
};
_ladders = getArray (configFile >> "CfgVehicles" >> _typeOfBuilding >> "ladders");
{
EXPLODE_2_PVT(_x,_ladderBottomMemPoint,_ladderTopMemPoint);
_actionMaxDistance = 3; //interact_menu will check head -> target's offset; leave this high and do a precice distance check in condition
_actionDisplayName = localize "str_action_ladderup";
_iconImage = "\A3\ui_f\data\igui\cfg\actions\ladderup_ca.paa";
//Ladder Up Action:
_actionOffset = [_ladderBottomMemPoint] call _fnc_getMemPointOffset;
_actionOffset = _actionOffset vectorAdd [0,0,1];
_memPointIndex = _memPoints find _ladderBottomMemPoint;
_action = [format ["LadderUp_%1", _forEachIndex], _actionDisplayName, _iconImage, _fnc_ladder_ladderUp, _fnc_ladder_conditional, {}, [_forEachIndex], _actionOffset, _actionMaxDistance, [false,false,false,false,true]] call EFUNC(interact_menu,createAction);
(_memPointsActions select _memPointIndex) pushBack _action;
_actionDisplayName = localize "str_action_ladderdown";
_iconImage = "\A3\ui_f\data\igui\cfg\actions\ladderdown_ca.paa";
//Ladder Down Action:
_actionOffset = [_ladderTopMemPoint] call _fnc_getMemPointOffset;
_actionOffset = _actionOffset vectorAdd [0,0,0.25];
_memPointIndex = _memPoints find _ladderTopMemPoint;
_action = [format ["LadderDown_%1", _forEachIndex], _actionDisplayName, _iconImage, _fnc_ladder_ladderDown, _fnc_ladder_conditional, {}, [_forEachIndex], _actionOffset, _actionMaxDistance, [false,false,false,false,true]] call EFUNC(interact_menu,createAction);
(_memPointsActions select _memPointIndex) pushBack _action;
} forEach _ladders;
GVAR(cachedBuildingTypes) pushBack _typeOfBuilding;
GVAR(cachedBuildingActionPairs) pushBack [_memPoints, _memPointsActions];
[_memPoints, _memPointsActions]

View File

@ -85,6 +85,12 @@
<Italian>Interazioni con veicoli</Italian> <Italian>Interazioni con veicoli</Italian>
<Portuguese>Ações de Veículos</Portuguese> <Portuguese>Ações de Veículos</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_Interact_Menu_ZeusActionsRoot">
<English>Zeus Actions</English>
<Polish>Akcje Zeusa</Polish>
<Czech>Akce Zeuse</Czech>
<Spanish>Acciones Zeus</Spanish>
</Key>
<Key ID="STR_ACE_Interact_Menu_ColorTextMax"> <Key ID="STR_ACE_Interact_Menu_ColorTextMax">
<English>Interaction - Text Max</English> <English>Interaction - Text Max</English>
<Polish>Interakcja - Tekst max</Polish> <Polish>Interakcja - Tekst max</Polish>
@ -223,6 +229,7 @@
<Spanish>Fondo del menú de interacción</Spanish> <Spanish>Fondo del menú de interacción</Spanish>
<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>
</Key> </Key>
<Key ID="STR_ACE_Interact_Menu_blurScreenDesc"> <Key ID="STR_ACE_Interact_Menu_blurScreenDesc">
<English>Blur the background while the interaction menu is open.</English> <English>Blur the background while the interaction menu is open.</English>
@ -230,6 +237,7 @@
<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 pokud je interakční menu otevřené.</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>
</Key> </Key>
<Key ID="STR_ACE_Interact_Menu_backgroundBlur"> <Key ID="STR_ACE_Interact_Menu_backgroundBlur">
<English>Blur screen</English> <English>Blur screen</English>
@ -237,13 +245,27 @@
<Spanish>Pantalla de desenfoque</Spanish> <Spanish>Pantalla de desenfoque</Spanish>
<Czech>Rozmazaný obraz</Czech> <Czech>Rozmazaný obraz</Czech>
<German>Verschwommenes Bild</German> <German>Verschwommenes Bild</German>
<Portuguese>Desfoque de tela</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_Interact_Menu_backgroundBlack"> <Key ID="STR_ACE_Interact_Menu_backgroundBlack">
<English>Black</English> <English>Black</English>
<Polish>Przyciemnienie ekranu</Polish> <Polish>Przyciemnienie ekranu</Polish>
<Spanish>Negra</Spanish> <Spanish>Negro</Spanish>
<Czech>Černý obraz</Czech> <Czech>Černý obraz</Czech>
<Portuguese>Preto</Portuguese>
<German>Schwarz</German> <German>Schwarz</German>
</Key> </Key>
<Key ID="STR_ACE_Interact_Menu_addBuildingActions">
<English>Show actions for buildings</English>
<Polish>Pokazuj akcje dla budynków</Polish>
<Czech>Zobrazit akci pro budovy</Czech>
<Spanish>Mostrar acciones para edificios</Spanish>
</Key>
<Key ID="STR_ACE_Interact_Menu_addBuildingActionsDescription">
<English>Adds interaction actions for opening doors and mounting ladders on buildings. (Note: There is a performance cost when opening interaction menu, especially in towns)</English>
<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>
<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>
</Key>
</Package> </Package>
</Project> </Project>

View File

@ -0,0 +1,244 @@
class ACE_ZeusActions {
// _target = curatorLogic
// curatorSelected = [objects,groups,waypoints,markers]
class ZeusUnits {
displayName = "$STR_A3_RscDisplayCurator_ModeUnits_tooltip";
icon = "\A3\UI_F_Curator\Data\Displays\RscDisplayCurator\modeUnits_ca.paa";
class stance {
displayName = "$STR_A3_RscAttributeUnitPos_Title";
class prone {
displayName = "$STR_Pos_Down";
icon = "\A3\UI_F\Data\IGUI\RscIngameUI\RscUnitInfo\SI_prone_ca.paa";
statement = "{_x setUnitPos 'DOWN';} forEach (curatorSelected select 0);";
};
class crouch {
displayName = "$STR_Pos_Crouch";
icon = "\A3\UI_F\Data\IGUI\RscIngameUI\RscUnitInfo\SI_crouch_ca.paa";
statement = "{_x setUnitPos 'MIDDLE';} forEach (curatorSelected select 0);";
};
class stand {
displayName = "$STR_Pos_Up";
icon = "\A3\UI_F\Data\IGUI\RscIngameUI\RscUnitInfo\SI_stand_ca.paa";
statement = "{_x setUnitPos 'UP';} forEach (curatorSelected select 0);";
};
class auto {
displayName = "$STR_Pos_Automatic";
icon = "\A3\UI_F_Curator\Data\default_ca.paa";
statement = "{_x setUnitPos 'AUTO';} forEach (curatorSelected select 0);";
};
};
class remoteControl {
displayName = "$STR_A3_CfgVehicles_ModuleRemoteControl_F";
icon = "\A3\Modules_F_Curator\Data\portraitRemoteControl_ca.paa";
statement = "_unit = objNull; { if ((side _x in [east,west,resistance,civilian]) && !(isPlayer _x)) exitWith { _unit = _x; }; } forEach (curatorSelected select 0); bis_fnc_curatorObjectPlaced_mouseOver = ['OBJECT',_unit]; (group _target) createUnit ['ModuleRemoteControl_F',[0,0,0],[],0,''];";
};
};
class ZeusGroups {
displayName = "$STR_A3_RscDisplayCurator_ModeGroups_tooltip";
icon = "\A3\UI_F_Curator\Data\Displays\RscDisplayCurator\modeGroups_ca.paa";
class behaviour {
displayName = "$STR_Combat_Mode";
class careless {
displayName = "$STR_Combat_Careless";
statement = "{ _x setBehaviour 'CARELESS'; } forEach (curatorSelected select 1);";
};
class safe {
displayName = "$STR_Combat_Safe";
icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeBehaviour\safe_ca.paa";
statement = "{ _x setBehaviour 'SAFE'; } forEach (curatorSelected select 1);";
};
class aware {
displayName = "$STR_Combat_Aware";
icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeBehaviour\aware_ca.paa";
statement = "{ _x setBehaviour 'AWARE'; } forEach (curatorSelected select 1);";
};
class combat {
displayName = "$STR_Combat_Combat";
icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeBehaviour\combat_ca.paa";
statement = "{ _x setBehaviour 'COMBAT'; } forEach (curatorSelected select 1);";
};
class stealth {
displayName = "$STR_Combat_Stealth";
icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeBehaviour\stealth_ca.paa";
statement = "{ _x setBehaviour 'STEALTH'; } forEach (curatorSelected select 1);";
};
};
class speed {
displayName = "$STR_HC_Menu_Speed";
class limited {
displayName = "$STR_Speed_Limited";
icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeSpeedMode\limited_ca.paa";
statement = "{_x setSpeedMode 'LIMITED';} forEach (curatorSelected select 1);";
};
class normal {
displayName = "$STR_Speed_Normal";
icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeSpeedMode\normal_ca.paa";
statement = "{_x setSpeedMode 'NORMAL';} forEach (curatorSelected select 1);";
};
class full {
displayName = "$STR_Speed_Full";
icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeSpeedMode\full_ca.paa";
statement = "{_x setSpeedMode 'FULL';} forEach (curatorSelected select 1);";
};
};
class formation {
displayName = "$STR_Formation";
class wedge {
displayName = "$STR_Wedge";
icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\wedge_ca.paa";
statement = "{_x setFormation 'WEDGE';} forEach (curatorSelected select 1);";
};
class vee {
displayName = "$STR_Vee";
icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\vee_ca.paa";
statement = "{_x setFormation 'VEE';} forEach (curatorSelected select 1);";
};
class line {
displayName = "$STR_Line";
icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\line_ca.paa";
statement = "{_x setFormation 'LINE';} forEach (curatorSelected select 1);";
};
class column {
displayName = "$STR_Column";
icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\column_ca.paa";
statement = "{_x setFormation 'COLUMN';} forEach (curatorSelected select 1);";
};
class file {
displayName = "$STR_File";
icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\file_ca.paa";
statement = "{_x setFormation 'FILE';} forEach (curatorSelected select 1);";
};
class stag_column {
displayName = "$STR_Staggered";
icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\stag_column_ca.paa";
statement = "{_x setFormation 'STAG COLUMN';} forEach (curatorSelected select 1);";
};
class ech_left {
displayName = "$STR_EchL";
icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\ech_left_ca.paa";
statement = "{_x setFormation 'ECH LEFT';} forEach (curatorSelected select 1);";
};
class ech_right {
displayName = "$STR_EchR";
icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\ech_right_ca.paa";
statement = "{_x setFormation 'ECH RIGHT';} forEach (curatorSelected select 1);";
};
class diamond {
displayName = "$STR_Diamond";
icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\diamond_ca.paa";
statement = "{_x setFormation 'DIAMOND';} forEach (curatorSelected select 1);";
};
};
};
class ZeusWaypoints {
displayName = "Waypoints";
icon = "\A3\UI_F_Curator\Data\Displays\RscDisplayCurator\modeRecent_ca.paa";
class behaviour {
displayName = "$STR_Combat_Mode";
class careless {
displayName = "$STR_Combat_Careless";
statement = "{ _x setWaypointBehaviour 'CARELESS'; } forEach (curatorSelected select 2);";
};
class safe {
displayName = "$STR_Combat_Safe";
icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeBehaviour\safe_ca.paa";
statement = "{ _x setWaypointBehaviour 'SAFE'; } forEach (curatorSelected select 2);";
};
class aware {
displayName = "$STR_Combat_Aware";
icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeBehaviour\aware_ca.paa";
statement = "{ _x setWaypointBehaviour 'AWARE'; } forEach (curatorSelected select 2);";
};
class combat {
displayName = "$STR_Combat_Combat";
icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeBehaviour\combat_ca.paa";
statement = "{ _x setWaypointBehaviour 'COMBAT'; } forEach (curatorSelected select 2);";
};
class stealth {
displayName = "$STR_Combat_Stealth";
icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeBehaviour\stealth_ca.paa";
statement = "{ _x setWaypointBehaviour 'STEALTH'; } forEach (curatorSelected select 2);";
};
};
class speed {
displayName = "$STR_HC_Menu_Speed";
class limited {
displayName = "$STR_Speed_Limited";
icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeSpeedMode\limited_ca.paa";
statement = "{ _x setWaypointSpeed 'LIMITED'; } forEach (curatorSelected select 2);";
};
class normal {
displayName = "$STR_Speed_Normal";
icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeSpeedMode\normal_ca.paa";
statement = "{ _x setWaypointSpeed 'NORMAL'; } forEach (curatorSelected select 2);";
};
class full {
displayName = "$STR_Speed_Full";
icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeSpeedMode\full_ca.paa";
statement = "{ _x setWaypointSpeed 'FULL'; } forEach (curatorSelected select 2);";
};
};
class formation {
displayName = "$STR_Formation";
class wedge {
displayName = "$STR_Wedge";
icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\wedge_ca.paa";
statement = "{_x setWaypointFormation 'WEDGE';} forEach (curatorSelected select 1);";
};
class vee {
displayName = "$STR_Vee";
icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\vee_ca.paa";
statement = "{_x setWaypointFormation 'VEE';} forEach (curatorSelected select 1);";
};
class line {
displayName = "$STR_Line";
icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\line_ca.paa";
statement = "{_x setWaypointFormation 'LINE';} forEach (curatorSelected select 1);";
};
class column {
displayName = "$STR_Column";
icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\column_ca.paa";
statement = "{_x setWaypointFormation 'COLUMN';} forEach (curatorSelected select 1);";
};
class file {
displayName = "$STR_File";
icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\file_ca.paa";
statement = "{_x setWaypointFormation 'FILE';} forEach (curatorSelected select 1);";
};
class stag_column {
displayName = "$STR_Staggered";
icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\stag_column_ca.paa";
statement = "{_x setWaypointFormation 'STAG COLUMN';} forEach (curatorSelected select 1);";
};
class ech_left {
displayName = "$STR_EchL";
icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\ech_left_ca.paa";
statement = "{_x setWaypointFormation 'ECH LEFT';} forEach (curatorSelected select 1);";
};
class ech_right {
displayName = "$STR_EchR";
icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\ech_right_ca.paa";
statement = "{_x setWaypointFormation 'ECH RIGHT';} forEach (curatorSelected select 1);";
};
class diamond {
displayName = "$STR_Diamond";
icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\diamond_ca.paa";
statement = "{_x setWaypointFormation 'DIAMOND';} forEach (curatorSelected select 1);";
};
};
};
class ZeusMarkers {
displayName = "$STR_A3_RscDisplayCurator_ModeMarkers_tooltip";
icon = "\A3\UI_F_Curator\Data\Displays\RscDisplayCurator\modeMarkers_ca.paa";
};
};

View File

@ -191,7 +191,7 @@ class CfgVehicles {
class ACE_TeamManagement { class ACE_TeamManagement {
displayName = CSTRING(TeamManagement); displayName = CSTRING(TeamManagement);
condition = QUOTE(GVAR(EnableTeamManagement)); condition = QUOTE(GVAR(EnableTeamManagement));
exceptions[] = {"isNotInside"}; exceptions[] = {"isNotInside", "isNotSitting"};
statement = ""; statement = "";
showDisabled = 1; showDisabled = 1;
priority = 3.2; priority = 3.2;
@ -201,7 +201,7 @@ class CfgVehicles {
class ACE_JoinTeamRed { class ACE_JoinTeamRed {
displayName = CSTRING(JoinTeamRed); displayName = CSTRING(JoinTeamRed);
condition = QUOTE(true); condition = QUOTE(true);
exceptions[] = {"isNotInside"}; exceptions[] = {"isNotInside", "isNotSitting"};
statement = QUOTE([ARR_2(_player,'RED')] call DFUNC(joinTeam)); statement = QUOTE([ARR_2(_player,'RED')] call DFUNC(joinTeam));
showDisabled = 1; showDisabled = 1;
priority = 2.4; priority = 2.4;
@ -211,7 +211,7 @@ class CfgVehicles {
class ACE_JoinTeamGreen { class ACE_JoinTeamGreen {
displayName = CSTRING(JoinTeamGreen); displayName = CSTRING(JoinTeamGreen);
condition = QUOTE(true); condition = QUOTE(true);
exceptions[] = {"isNotInside"}; exceptions[] = {"isNotInside", "isNotSitting"};
statement = QUOTE([ARR_2(_player,'GREEN')] call DFUNC(joinTeam)); statement = QUOTE([ARR_2(_player,'GREEN')] call DFUNC(joinTeam));
showDisabled = 1; showDisabled = 1;
priority = 2.3; priority = 2.3;
@ -221,7 +221,7 @@ class CfgVehicles {
class ACE_JoinTeamBlue { class ACE_JoinTeamBlue {
displayName = CSTRING(JoinTeamBlue); displayName = CSTRING(JoinTeamBlue);
condition = QUOTE(true); condition = QUOTE(true);
exceptions[] = {"isNotInside"}; exceptions[] = {"isNotInside", "isNotSitting"};
statement = QUOTE([ARR_2(_player,'BLUE')] call DFUNC(joinTeam)); statement = QUOTE([ARR_2(_player,'BLUE')] call DFUNC(joinTeam));
showDisabled = 1; showDisabled = 1;
priority = 2.2; priority = 2.2;
@ -231,7 +231,7 @@ class CfgVehicles {
class ACE_JoinTeamYellow { class ACE_JoinTeamYellow {
displayName = CSTRING(JoinTeamYellow); displayName = CSTRING(JoinTeamYellow);
condition = QUOTE(true); condition = QUOTE(true);
exceptions[] = {"isNotInside"}; exceptions[] = {"isNotInside", "isNotSitting"};
statement = QUOTE([ARR_2(_player,'YELLOW')] call DFUNC(joinTeam)); statement = QUOTE([ARR_2(_player,'YELLOW')] call DFUNC(joinTeam));
showDisabled = 1; showDisabled = 1;
priority = 2.1; priority = 2.1;
@ -242,7 +242,7 @@ class CfgVehicles {
class ACE_LeaveTeam { class ACE_LeaveTeam {
displayName = CSTRING(LeaveTeam); displayName = CSTRING(LeaveTeam);
condition = QUOTE(assignedTeam _player != 'MAIN'); condition = QUOTE(assignedTeam _player != 'MAIN');
exceptions[] = {"isNotInside"}; exceptions[] = {"isNotInside", "isNotSitting"};
statement = QUOTE([ARR_2(_player,'MAIN')] call DFUNC(joinTeam)); statement = QUOTE([ARR_2(_player,'MAIN')] call DFUNC(joinTeam));
showDisabled = 1; showDisabled = 1;
priority = 2.5; priority = 2.5;
@ -252,7 +252,7 @@ class CfgVehicles {
class ACE_BecomeLeader { class ACE_BecomeLeader {
displayName = CSTRING(BecomeLeader); displayName = CSTRING(BecomeLeader);
condition = QUOTE(_this call DFUNC(canBecomeLeader)); condition = QUOTE(_this call DFUNC(canBecomeLeader));
exceptions[] = {"isNotInside"}; exceptions[] = {"isNotInside", "isNotSitting"};
statement = QUOTE(_this call DFUNC(doBecomeLeader)); statement = QUOTE(_this call DFUNC(doBecomeLeader));
showDisabled = 1; showDisabled = 1;
priority = 1.0; priority = 1.0;
@ -262,7 +262,7 @@ class CfgVehicles {
class ACE_LeaveGroup { class ACE_LeaveGroup {
displayName = CSTRING(LeaveGroup); displayName = CSTRING(LeaveGroup);
condition = QUOTE(count (units group _player) > 1); condition = QUOTE(count (units group _player) > 1);
exceptions[] = {"isNotInside"}; exceptions[] = {"isNotInside", "isNotSitting"};
statement = QUOTE(_oldGroup = units group _player; _newGroup = createGroup side _player; [_player] joinSilent _newGroup; {_player reveal _x} forEach _oldGroup;); statement = QUOTE(_oldGroup = units group _player; _newGroup = createGroup side _player; [_player] joinSilent _newGroup; {_player reveal _x} forEach _oldGroup;);
showDisabled = 1; showDisabled = 1;
priority = 1.2; priority = 1.2;
@ -379,7 +379,7 @@ class CfgVehicles {
class ACE_Equipment { class ACE_Equipment {
displayName = CSTRING(Equipment); displayName = CSTRING(Equipment);
condition = QUOTE(true); condition = QUOTE(true);
exceptions[] = {"isNotInside","notOnMap"}; exceptions[] = {"isNotInside","notOnMap", "isNotSitting"};
statement = ""; statement = "";
showDisabled = 1; showDisabled = 1;
priority = 4.5; priority = 4.5;
@ -581,6 +581,13 @@ class CfgVehicles {
selection = ""; selection = "";
distance = 2; distance = 2;
condition = "true"; condition = "true";
class ACE_OpenBox {
displayName = CSTRING(OpenBox);
condition = QUOTE(alive _target);
statement = QUOTE(_player action [ARR_2(QUOTE(QUOTE(Gear)), _target)]);
showDisabled = 0;
priority = -1;
};
}; };
}; };
class ACE_SelfActions {}; class ACE_SelfActions {};

View File

@ -16,3 +16,4 @@ class CfgPatches {
#include "CfgVehicles.hpp" #include "CfgVehicles.hpp"
#include "Menu_Config.hpp" #include "Menu_Config.hpp"
#include "ACE_Settings.hpp" #include "ACE_Settings.hpp"
#include "ACE_ZeusActions.hpp"

View File

@ -793,12 +793,19 @@
<Italian>Passeggeri</Italian> <Italian>Passeggeri</Italian>
<Portuguese>Passageiros</Portuguese> <Portuguese>Passageiros</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_Interaction_OpenBox">
<English>Open</English>
<Polish>Otwórz</Polish>
<Czech>Otevřít</Czech>
<Spanish>Abrir</Spanish>
</Key>
<Key ID="STR_ACE_Interaction_Module_DisplayName"> <Key ID="STR_ACE_Interaction_Module_DisplayName">
<English>Interaction System</English> <English>Interaction System</English>
<Polish>System interakcji</Polish> <Polish>System interakcji</Polish>
<Spanish>Sistema de interacción</Spanish> <Spanish>Sistema de interacción</Spanish>
<German>Interaktionssystem</German> <German>Interaktionssystem</German>
<Czech>Systém interakce</Czech> <Czech>Systém interakce</Czech>
<Russian>Sistema de interação</Russian>
</Key> </Key>
<Key ID="STR_ACE_Interaction_EnableTeamManagement_DisplayName"> <Key ID="STR_ACE_Interaction_EnableTeamManagement_DisplayName">
<English>Enable Team Management</English> <English>Enable Team Management</English>
@ -806,6 +813,7 @@
<Spanish>Habilitar gestión de equipos</Spanish> <Spanish>Habilitar gestión de equipos</Spanish>
<German>Aktiviere Gruppenverwaltung</German> <German>Aktiviere Gruppenverwaltung</German>
<Czech>Povolit správu týmu</Czech> <Czech>Povolit správu týmu</Czech>
<Russian>Habilitar gestão de equipes</Russian>
</Key> </Key>
<Key ID="STR_ACE_Interaction_EnableTeamManagement_Description"> <Key ID="STR_ACE_Interaction_EnableTeamManagement_Description">
<English>Should players be allowed to use the Team Management Menu? Default: Yes</English> <English>Should players be allowed to use the Team Management Menu? Default: Yes</English>
@ -813,12 +821,15 @@
<Spanish>¿Deben tener permitido los jugadores el uso del menu de gestión de equipos? Por defecto: Si</Spanish> <Spanish>¿Deben tener permitido los jugadores el uso del menu de gestión de equipos? Por defecto: Si</Spanish>
<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>Devem os jogadores ter permissão de usar o menu de gestão de equipes? Padrão: Sim</Russian>
</Key> </Key>
<Key ID="STR_ACE_Interaction_Module_Description"> <Key ID="STR_ACE_Interaction_Module_Description">
<English></English> <English>Team management allows color allocation for team members, taking team command and joining/leaving teams.</English>
<Polish>Na zarządzanie drużyną składa się: przydział kolorów dla członków drużyny, przejmowanie dowodzenia, dołączanie/opuszczanie drużyn.</Polish> <Polish>Na zarządzanie drużyną składa się: przydział kolorów dla członków drużyny, przejmowanie dowodzenia, dołączanie/opuszczanie drużyn.</Polish>
<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>
<Russian>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.</Russian>
<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>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -9,5 +9,7 @@ PREP(showFireMode);
PREP(onFired); PREP(onFired);
PREP(onOpticLoad); PREP(onOpticLoad);
PREP(onOpticDraw); PREP(onOpticDraw);
PREP(onOpticUnload);
GVAR(isLockKeyDown) = false; GVAR(isLockKeyDown) = false;
GVAR(pfehID) = -1;

View File

@ -1,21 +1,17 @@
//#define DEBUG_MODE_FULL //#define DEBUG_MODE_FULL
#include "script_component.hpp" #include "script_component.hpp"
PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); PARAMS_2(_shooter,_weapon);
// Bail on not missile // Bail on not missile or javelin PFEH not running
if( _shooter != ACE_player) exitWith { false }; if ((_shooter != ACE_player) || {(GVAR(pfehID) == -1)}) exitWith { false };
private ["_configs"];
_configs = configProperties [configFile >> "CfgWeapons" >> _weapon, QUOTE(configName _x == QUOTE(QGVAR(enabled))), false]; _configs = configProperties [configFile >> "CfgWeapons" >> _weapon, QUOTE(configName _x == QUOTE(QGVAR(enabled))), false];
if (((count _configs) < 1) || {(getNumber (_configs select 0)) != 1}) exitWith {}; if (((count _configs) < 1) || {(getNumber (_configs select 0)) != 1}) exitWith {};
_pfh_handle = uiNamespace getVariable ["ACE_RscOptics_javelin_PFH", nil]; __JavelinIGUITargeting ctrlShow false;
if(!isNil "_pfh_handle") then { __JavelinIGUITargetingGate ctrlShow false;
//[_pfh_handle] call cba_fnc_removePerFrameHandler; __JavelinIGUITargetingLines ctrlShow false;
//uiNamespace setVariable["ACE_RscOptics_javelin_PFH", nil]; __JavelinIGUITargetingConstraints ctrlShow false;
__JavelinIGUITargeting ctrlShow false;
__JavelinIGUITargetingGate ctrlShow false;
__JavelinIGUITargetingLines ctrlShow false;
__JavelinIGUITargetingConstraints ctrlShow false;
};

View File

@ -56,7 +56,7 @@ if (((count _weaponConfig) < 1) || {(getNumber (_weaponConfig select 0)) != 1})
}; };
[(_this select 1)] call cba_fnc_removePerFrameHandler; [(_this select 1)] call cba_fnc_removePerFrameHandler;
uiNamespace setVariable["ACE_RscOptics_javelin_PFH", nil]; GVAR(pfehID) = -1;
}; };
// Find a target within the optic range // Find a target within the optic range

View File

@ -18,6 +18,10 @@ __JavelinIGUITargetingConstrains ctrlShow false;
__JavelinIGUITargetingGate ctrlShow false; __JavelinIGUITargetingGate ctrlShow false;
__JavelinIGUITargetingLines ctrlShow false; __JavelinIGUITargetingLines ctrlShow false;
if(GVAR(pfehID) != -1) then {
[] call FUNC(onOpticUnload); // Unload optic if it was already loaded
};
uiNameSpace setVariable [QGVAR(arguments), uiNameSpace setVariable [QGVAR(arguments),
[ [
ACE_diagTime, // Last runtime ACE_diagTime, // Last runtime
@ -30,11 +34,4 @@ uiNameSpace setVariable [QGVAR(arguments),
] ]
]; ];
GVAR(pfehID) = [FUNC(onOpticDraw), 0, []] call CBA_fnc_addPerFrameHandler;
_pfh_handle = uiNamespace getVariable ["ACE_RscOptics_javelin_PFH", nil];
if(!isNil "_pfh_handle") then {
[] call FUNC(onOpticUnload); // Unload optic if it was already loaded
};
_pfh_handle = [FUNC(onOpticDraw), 0, []] call CBA_fnc_addPerFrameHandler;
uiNamespace setVariable["ACE_RscOptics_javelin_PFH", _pfh_handle];

View File

@ -1,14 +1,13 @@
//#define DEBUG_MODE_FULL //#define DEBUG_MODE_FULL
#include "script_component.hpp" #include "script_component.hpp"
TRACE_1("enter", _this); TRACE_1("enter", _this);
private["_args", "_disableFireEH", "_pfh"]; private["_args", "_disableFireEH"];
uiNameSpace setVariable ['ACE_RscOptics_javelin',nil]; // uiNameSpace setVariable ['ACE_RscOptics_javelin',nil];
_pfh = uiNamespace getVariable["ACE_RscOptics_javelin_PFH", nil ]; if(GVAR(pfehID) != -1) then {
if(!isNil "_pfh") then { [GVAR(pfehID)] call CBA_fnc_removePerFrameHandler;
[_pfh] call CBA_fnc_removePerFrameHandler; GVAR(pfehID) = -1;
uiNameSpace setVariable ['ACE_RscOptics_javelin_PFH',nil];
}; };
_args = uiNamespace getVariable[QGVAR(arguments), nil ]; _args = uiNamespace getVariable[QGVAR(arguments), nil ];

View File

@ -10,7 +10,7 @@ class CfgVehicles {
showDisabled = 0; showDisabled = 0;
priority = 0.1; priority = 0.1;
icon = QUOTE(PATHTOF(UI\Kestrel4500_Icon.paa)); icon = QUOTE(PATHTOF(UI\Kestrel4500_Icon.paa));
exceptions[] = {"notOnMap"}; exceptions[] = {"notOnMap", "isNotInside", "isNotSitting"};
class GVAR(show) { class GVAR(show) {
displayName = CSTRING(ShowKestrel); displayName = CSTRING(ShowKestrel);
condition = QUOTE(call FUNC(canShow) && !GVAR(Overlay)); condition = QUOTE(call FUNC(canShow) && !GVAR(Overlay));
@ -18,7 +18,7 @@ class CfgVehicles {
showDisabled = 0; showDisabled = 0;
priority = 0.2; priority = 0.2;
icon = QUOTE(PATHTOF(UI\Kestrel4500_Icon.paa)); icon = QUOTE(PATHTOF(UI\Kestrel4500_Icon.paa));
exceptions[] = {"notOnMap", "isNotInside"}; exceptions[] = {"notOnMap", "isNotInside", "isNotSitting"};
}; };
class GVAR(hide) { class GVAR(hide) {
displayName = CSTRING(HideKestrel); displayName = CSTRING(HideKestrel);
@ -27,7 +27,7 @@ class CfgVehicles {
showDisabled = 0; showDisabled = 0;
priority = 0.3; priority = 0.3;
icon = QUOTE(PATHTOF(UI\Kestrel4500_Icon.paa)); icon = QUOTE(PATHTOF(UI\Kestrel4500_Icon.paa));
exceptions[] = {"notOnMap", "isNotInside"}; exceptions[] = {"notOnMap", "isNotInside", "isNotSitting"};
}; };
}; };
}; };

View File

@ -1,7 +1,7 @@
["ACE3 Equipment", QGVAR(KestrelDialogKey), localize LSTRING(KestrelDialogKey), ["ACE3 Equipment", QGVAR(KestrelDialogKey), localize LSTRING(KestrelDialogKey),
{ {
// Conditions: canInteract // Conditions: canInteract
if !([ACE_player, objNull, ["notOnMap", "isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; if !([ACE_player, objNull, ["notOnMap", "isNotInside", "isNotSitting"]] call EFUNC(common,canInteractWith)) exitWith {false};
if (GVAR(Kestrel4500)) exitWith { if (GVAR(Kestrel4500)) exitWith {
closeDialog 0; closeDialog 0;
false false
@ -16,7 +16,7 @@
["ACE3 Equipment", QGVAR(DisplayKestrelKey), localize LSTRING(DisplayKestrelKey), ["ACE3 Equipment", QGVAR(DisplayKestrelKey), localize LSTRING(DisplayKestrelKey),
{ {
// Conditions: canInteract // Conditions: canInteract
if !([ACE_player, objNull, ["notOnMap", "isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; if !([ACE_player, objNull, ["notOnMap", "isNotInside", "isNotSitting"]] call EFUNC(common,canInteractWith)) exitWith {false};
// Statement // Statement
[] call FUNC(displayKestrel); [] call FUNC(displayKestrel);

View File

@ -1,7 +1,7 @@
// by commy2 and esteldunedain // by commy2 and esteldunedain
#include "script_component.hpp" #include "script_component.hpp"
private ["_brightness", "_p0", "_p1", "_p0Pos", "_offV1", "_offV2", "_offV3", "_camPos", "_intermediatePos", "_iteration", "_light", "_line", "_pL", "_pL2", "_pX", "_size", "_units", "_fnc_getDistanceToTerrain", "_fnc_doesIntersectWithMan"]; private ["_p0", "_p1", "_p0Pos", "_offV1", "_offV2", "_offV3", "_camPos", "_intermediatePos", "_iteration", "_light", "_line", "_pL", "_pL2", "_pX", "_size", "_units", "_fnc_getDistanceToTerrain", "_fnc_doesIntersectWithMan"];
// init object // init object
/*if (isNil QGVAR(laserdot)) then { /*if (isNil QGVAR(laserdot)) then {
@ -16,7 +16,7 @@ private ["_brightness", "_p0", "_p1", "_p0Pos", "_offV1", "_offV2", "_offV3", "_
GVAR(laserdot) = _light; GVAR(laserdot) = _light;
};*/ };*/
EXPLODE_3_PVT(_this,_unit,_range,_isGreen); EXPLODE_4_PVT(_this,_unit,_range,_isGreen,_brightness);
_p0Pos = _unit modelToWorldVisual (_unit selectionPosition "righthand"); _p0Pos = _unit modelToWorldVisual (_unit selectionPosition "righthand");

View File

@ -35,7 +35,7 @@ _brightness = 2 - call EFUNC(common,ambientBrightness);
}; };
if (_laserID > 0 && {_x isFlashlightOn _weapon}) then { if (_laserID > 0 && {_x isFlashlightOn _weapon}) then {
[_x, 50, _laserID == 2 || _isIR] call FUNC(drawLaserpoint); [_x, 50, (_laserID == 2 || _isIR), _brightness] call FUNC(drawLaserpoint);
}; };
}; };

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