This commit is contained in:
SzwedzikPL 2015-06-03 05:19:57 +02:00
commit 722e1f5fc1
290 changed files with 5541 additions and 1479 deletions

View File

@ -24,22 +24,30 @@ VKing <kauestad@gmail.com>
Walter Pearce <jaynus@gmail.com>
# CONTRIBUTORS
11RDP-LoupVert <loupvert@11rdp.fr>
[BIG]Bull
11RDP-LoupVert <loupvert@11rdp.fr>
ACCtomeek <tomeek99@gmail.com>
adam3adam <br.ada@seznam.cz>
Adanteh
aeroson
alef <alefor@gmail.com>
Aggr094 <bastards4glory@gmail.com>
alef <alefor@gmail.com>
Aleksey EpMAK Yermakov <epmak777@gmail.com>
Alganthe <alganthe@live.fr>
Anthariel <Contact@storm-simulation.com>
Asgar Serran <piechottaf@web.de>
Bla1337
BlackPixxel
BlackQwar
Brakoviejo
Brisse <brisse@outlook.com>
BullHorn <bullhorn7@gmail.com>
Clon1998 <ps.patti1998@gmail.com>
Codingboy
Coren <coren4@gmail.com>
Crusty
Dharma Bellamkonda <dharma.bellamkonda@gmail.com>
Dimaslg <dimaslg@telecable.e>
eRazeri
evromalarkey <evromalarkey@gmail.com>
Falke75
@ -49,31 +57,38 @@ Filip Basara <filip.basara93@googlemail.com>
FreeZbe <freeseb@gmail.com>
geraldbolso1899
Ghost
Gianmarco Varriale (TeamNuke) <admin@forhost.org>
GieNkoV <gienkov.grzegorz@gmail.com>
gpgpgpgp
Grzegorz
Gianmarco Varriale (TeamNuke) <admin@forhost.org>
Hamburger SV
Harakhti <shadowdragonphd@gmail.com>
havena <silveredenis@gmail.com>
Hawkins
jokoho48
Jonpas <jonpas33@gmail.com>
Kavinsky <nmunozfernandez@gmail.com>
Kllrt <kllrtik@gmail.com>
legman <juicemelon@msn.com>
Legolasindar "Viper" <legolasindar@gmail.com>
licht-im-Norden87 <lichtimnorden87@gmail.com>
Macusercom <macusercom@gmail.com>
MarcBook
meat <p.humberdroz@gmail.com>
Michail Nikolaev
nic547 <nic547@outlook.com>
nikolauska <nikolauska1@gmail.com>
nomisum <nomisum@gmail.com>
OnkelDisMaster <onkeldismaster@gmail.com>
oscarmolinadev
pokertour
Professor <lukas.trneny@wo.cz>
rakowozz
ramius86 <pasini86@hotmail.com>
Raspu86
Riccardo Petricca <petriccarcc@gmail.com>
Robert Boklahánics <bokirobi@gmail.com>
ramius86 <pasini86@hotmail.com>
ruPaladin <happyworm24@rambler.ru>
SilentSpike <SilentSpike100@gmail.com>
simon84 <badguy360th@gmail.com>
Sniperwolf572 <tenga6@gmail.com>
@ -82,20 +97,6 @@ Toaster <jonathan.pereira@gmail.com>
Tonic
Tourorist <tourorist@gmail.com>
Valentin Torikian <valentin.torikian@gmail.com>
zGuba
Aleksey EpMAK Yermakov <epmak777@gmail.com>
ruPaladin <happyworm24@rambler.ru>
BlackPixxel
Asgar Serran <piechottaf@web.de>
Kavinsky <nmunozfernandez@gmail.com>
Coren <coren4@gmail.com>
OnkelDisMaster <onkeldismaster@gmail.com>
Dimaslg <dimaslg@telecable.e>
VyMajoris(W-Cephei)<vycanismajoriscsa@gmail.com>
Bla1337
nikolauska <nikolauska1@gmail.com>
adam3adam <br.ada@seznam.cz>
Professor <lukas.trneny@wo.cz>
Winter <simon@agius-muscat.net>
Dharma Bellamkonda <dharma.bellamkonda@gmail.com>
legman <juicemelon@msn.com>
zGuba

Binary file not shown.

BIN
ace_medical.dll Normal file

Binary file not shown.

View File

@ -1,17 +1,13 @@
class RscTitles
{
class RscTurretDial
{
class RscTitles {
class RscTurretDial {
idd=-1;
onLoad="with uiNameSpace do { RscTurretDial = _this select 0 };";
movingEnable=0;
duration=5;
fadeIn="false";
fadeOut="false";
class controls
{
class RscTurretDial
{
class controls {
class RscTurretDial {
idc=132949;
type=0;
style=128;
@ -28,18 +24,15 @@ class RscTitles
};
};
class RscProtractor
{
class RscProtractor {
idd=-1;
onLoad="with uiNameSpace do { RscProtractor = _this select 0 };";
movingEnable=0;
duration=60;
fadeIn="false";
fadeOut="false";
class controls
{
class RscProtractorBase
{
class controls {
class RscProtractorBase {
idc=132950;
type=0;
style=48;
@ -54,8 +47,7 @@ class RscTitles
sizeEx=0.027;
text="";
};
class RscProtractorMarker : RscProtractorBase
{
class RscProtractorMarker : RscProtractorBase {
idc=132951;
};
};

View File

@ -5,7 +5,7 @@ class CfgPatches {
units[] = {};
weapons[] = {};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_ballistics", "ace_weather", "ace_modules"};
requiredAddons[] = {"ace_ballistics", "ace_weather"};
author[] = {"Ruthberg"};
authorUrl = "https://github.com/ulteq";
VERSION_CONFIG;

View File

@ -45,12 +45,12 @@ GVAR(Protractor) = true;
1 cutRsc ["RscProtractor", "PLAIN", 1, false];
__ctrl1 ctrlSetScale 0.75;
__ctrl1 ctrlSetScale 1;
__ctrl1 ctrlCommit 0;
__ctrl1 ctrlSetText QUOTE(PATHTOF(UI\protractor.paa));
__ctrl1 ctrlSetTextColor [1, 1, 1, 1];
__ctrl2 ctrlSetScale 0.75;
__ctrl2 ctrlSetScale 1;
__ctrl2 ctrlSetPosition [(_refPosition select 0), (_refPosition select 1) - 0.0012 * _inclinationAngle, (_refPosition select 2), (_refPosition select 3)];
__ctrl2 ctrlCommit 0;
__ctrl2 ctrlSetText QUOTE(PATHTOF(UI\protractor_marker.paa));

View File

@ -133,8 +133,8 @@ GVAR(currentbulletID) = (GVAR(currentbulletID) + 1) % 10000;
[_this select 1] call cba_fnc_removePerFrameHandler;
};
if (_bulletTraceVisible && _bulletSpeed > 600) then {
drop ["\A3\data_f\ParticleEffects\Universal\Refract","","Billboard",1,0.1,getPos _bullet,[0,0,0],0,1.275,1,0,[0.02*_caliber,0.01*_caliber],[[0,0,0,0.6],[0,0,0,0.4]],[1,0],0,0,"","",""];
if (_bulletTraceVisible && _bulletSpeed > 500) then {
drop ["\A3\data_f\ParticleEffects\Universal\Refract","","Billboard",1,0.1,getPos _bullet,[0,0,0],0,1.275,1,0,[0.02*_caliber,0.01*_caliber],[[0,0,0,0.65],[0,0,0,0.2]],[1,0],0,0,"","",""];
};
call compile ("ace_advanced_ballistics" callExtension format["simulate:%1:%2:%3:%4:%5:%6:%7", _index, _bulletVelocity, _bulletPosition, ACE_wind, ASLToATL(_bulletPosition) select 2, floor(ACE_time), ACE_time - floor(ACE_time)]);

View File

@ -28,88 +28,134 @@
<Key ID="STR_ACE_AdvancedBallistics_DisplayName">
<English>Advanced Ballistics</English>
<Polish>Zaawansowana balistyka</Polish>
<Spanish>Balística avanzada</Spanish>
<German>Erweiterte Ballistik</German>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_enabled_DisplayName">
<English>Advanced Ballistics</English>
<Polish>Zaawansowana balistyka</Polish>
<Spanish>Balística avanzada</Spanish>
<German>Erweiterte Ballistik</German>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_enabled_Description">
<English>Enables advanced ballistics</English>
<Polish>Aktywuje zaawansowaną balistykę</Polish>
<Spanish>Activa la balística avanzada</Spanish>
<German>Aktiviert die erweiterte Ballistik</German>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_simulateForSnipers_DisplayName">
<English>Enabled For Snipers</English>
<Spanish>Activada para francotiradores</Spanish>
<German>Für Scharfschützen aktiviert</German>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_simulateForSnipers_Description">
<English>Enables advanced ballistics for non local snipers (when using high power optics)</English>
<Spanish>Activa la balística avanzada para francotiradores no locales (cuando se usa una mira telescópica)</Spanish>
<German>Aktiviert die erweiterte Ballistik für nicht lokale Scharfschützen (bei Benutzung von Optiken mit starker Vergrößerung)</German>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_simulateForGroupMembers_DisplayName">
<English>Enabled For Group Members</English>
<Spanish>Activada para miembros de grupo</Spanish>
<German>Für Gruppenmitglieder aktiviert</German>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_simulateForGroupMembers_Description">
<English>Enables advanced ballistics for non local group members</English>
<Spanish>Activada la balística avanzada para miembros de grupo no locales</Spanish>
<German>Aktiviert die erweiterte Ballistik für nicht lokale Gruppenmitglieder</German>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_simulateForEveryone_DisplayName">
<English>Enabled For Everyone</English>
<Spanish>Activada para todos</Spanish>
<German>Für jeden aktiviert</German>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_simulateForEveryone_Description">
<English>Enables advanced ballistics for all non local players (enabling this may degrade performance during heavy firefights in multiplayer)</English>
<Spanish>Activada la balística avanzada para todos los jugadores no locales (activarlo puede degradar el rendimiento durante grandes tiroteos en multijugador).</Spanish>
<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>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_alwaysSimulateForGroupMembers_DisplayName">
<English>Always Enabled For Group Members</English>
<Polish>Zawsze akt. dla czł. grupy</Polish>
<Spanish>Siempre activada para miembros de grupo</Spanish>
<German>Für Gruppenmitglieder immer aktiviert</German>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_alwaysSimulateForGroupMembers_Description">
<English>Always enables advanced ballistics when a group member fires</English>
<Polish>Aktywuje zaawansowaną balistykę dla wszystkich członków grupy</Polish>
<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>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_disabledInFullAutoMod_DisplayName">
<English>Disabled In FullAuto Mode</English>
<Polish>Wył. podczas ognia auto.</Polish>
<Spanish>Desactivada en modo automático</Spanish>
<German>Beim vollautomatischen Feuern deaktiviert</German>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_disabledInFullAutoMod_Description">
<English>Disables the advanced ballistics during full auto fire</English>
<Polish>Dezaktywuje zaawansowaną balistykę podczas ognia automatycznego</Polish>
<Spanish>Desactivada la balística avanzada durante el fuego automático</Spanish>
<German>Deaktiviert die erweiterte Ballistik beim vollautomatischen Feuern</German>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_ammoTemperatureEnabled_DisplayName">
<English>Enable Ammo Temperature Simulation</English>
<Polish>Symulacja temp. amunicji</Polish>
<Spanish>Activar simulación de temperatura de munición</Spanish>
<German>Simulation der Munitionstemperatur aktivieren</German>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_ammoTemperatureEnabled_Description">
<English>Muzzle velocity varies with ammo temperature</English>
<Polish>Prędkość wylotowa pocisku jest zależna od temperatury amunicji</Polish>
<Spanish>La velocidad de salida varía con la temperatura de la munición</Spanish>
<German>Munitionstemperatur hat Einfluss auf die Mündungsgeschwindigkeit</German>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_barrelLengthInfluenceEnabled_DisplayName">
<English>Enable Barrel Length Simulation</English>
<Polish>Symulacja długości lufy</Polish>
<Spanish>Habilitar la simulación de longitud del cañón</Spanish>
<German>Simulation der Lauflänge aktivieren</German>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_barrelLengthInfluenceEnabled_Description">
<English>Muzzle velocity varies with barrel length</English>
<Polish>Prędkość wylotowa pocisku jest zależna od długości lufy</Polish>
<Spanish>La velocidad de salidal varía con la longitud del cañón</Spanish>
<German>Lauflänge beeinflusst Mündungsgeschwindigkeit</German>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_bulletTraceEnabled_DisplayName">
<English>Enable Bullet Trace Effect</English>
<Polish>Efekt smugi pocisku</Polish>
<Spanish>Activar el efecto trazador de la bala</Spanish>
<German>Geschossspureffekt aktivieren</German>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_bulletTraceEnabled_Description">
<English>Enables a bullet trace effect to high caliber bullets (only visible when looking through high power optics)</English>
<Polish>Aktywuje efekt smugi pocisku dla pocisków wysokokalibrowych (widoczne tylko podczas patrzenia przez optykę)</Polish>
<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>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_simulationInterval_DisplayName">
<English>Simulation Interval</English>
<Polish>Interwał symulacji</Polish>
<Spanish>Intervalo de simulación</Spanish>
<German>Simulationsintervall</German>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_simulationInterval_Description">
<English>Defines the interval between every calculation step</English>
<Polish>Określa interwał pomiędzy każdym krokiem kalkulacji</Polish>
<Spanish>Define el intervalo entre cada cálculo</Spanish>
<German>Legt das Intervall zwischen den Berechnungsschritten fest</German>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_simulationRadius_DisplayName">
<English>Simulation Radius</English>
<Polish>Zasięg symulacji</Polish>
<Spanish>Radio de simulación</Spanish>
<German>Simulationsradius</German>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_simulationRadius_Description">
<English>Defines the radius around the player (in meters) at which advanced ballistics are applied to projectiles</English>
<Polish>Określa obszar naokoło gracza (w metrach), na którym zaawansowana balistyka jest aplikowana dla pocisków</Polish>
<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>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_Description">
<English></English>

Binary file not shown.

View File

@ -6,41 +6,41 @@ if ((profileNamespace getVariable ["ACE_ATragMX_profileNamespaceVersion", 0]) ==
GVAR(gunList) = profileNamespace getVariable "ACE_ATragMX_gunList";
} else {
// Profile Name, Muzzle Velocity, Zero Range, Scope Base Angle, AirFriction, Bore Height, Scope Unit, Scope Click Unit, Scope Click Number, Maximum Elevation, Dialed Elevation, Dialed Windage, Mass, Bullet Diameter, Rifle Twist, BC, Drag Model, Atmosphere Model
GVAR(gunList) = [["12.7x108mm" , 820, 100, 0.0657, -0.0006469, 3.81, 0, 2, 10, 120, 0, 0, 48.28, 12.7, 38.10, 0.630, 1, "ASM" ],
GVAR(gunList) = [["12.7x108mm" , 820, 100, 0.0657485, -0.00063800, 3.81, 0, 2, 10, 120, 0, 0, 48.28, 12.7, 38.10, 0.630, 1, "ASM" ],
["12.7x99mm AMAX" , 860, 100, 0.0612, -0.0003722, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 38.10, 1.050, 1, "ASM" ],
["12.7x99mm" , 900, 100, 0.0623, -0.0005942, 3.81, 0, 2, 10, 120, 0, 0, 41.92, 12.7, 38.10, 0.670, 1, "ASM" ],
["12.7x99mm AMAX" , 860, 100, 0.0611565, -0.00036645, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 38.10, 1.050, 1, "ASM" ],
["12.7x99mm" , 900, 100, 0.0582418, -0.00057503, 3.81, 0, 2, 10, 120, 0, 0, 41.92, 12.7, 38.10, 0.670, 1, "ASM" ],
["12.7x54mm" , 300, 100, 0.3395, -0.0001877, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 24.13, 1.050, 1, "ASM" ],
["12.7x54mm" , 300, 100, 0.3394630, -0.00019268, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 24.13, 1.050, 1, "ASM" ],
[".408 Chey Tac" , 910, 100, 0.0571, -0.0003958, 3.81, 0, 2, 10, 120, 0, 0, 27.15, 10.4, 33.02, 0.970, 1, "ASM" ],
[".408 Chey Tac" , 910, 100, 0.0569400, -0.00038944, 3.81, 0, 2, 10, 120, 0, 0, 27.15, 10.4, 33.02, 0.970, 1, "ASM" ],
["9.3×64mm" , 870, 100, 0.0619, -0.0010921, 3.81, 0, 2, 10, 120, 0, 0, 14.90, 9.30, 35.56, 0.368, 1, "ASM" ],
["9.3×64mm" , 870, 100, 0.0619295, -0.00108571, 3.81, 0, 2, 10, 120, 0, 0, 14.90, 9.30, 35.56, 0.368, 1, "ASM" ],
[".338LM 250gr" , 880, 100, 0.0598, -0.0006234, 3.81, 0, 2, 10, 120, 0, 0, 16.20, 8.58, 25.40, 0.322, 7, "ICAO"],
[".338LM 300gr" , 800, 100, 0.0677, -0.0005397, 3.81, 0, 2, 10, 120, 0, 0, 19.44, 8.58, 25.40, 0.381, 7, "ICAO"],
[".338LM API526" , 895, 100, 0.0601, -0.0007120, 3.81, 0, 2, 10, 120, 0, 0, 16.39, 8.58, 25.40, 0.560, 1, "ASM" ],
[".338LM 250gr" , 880, 100, 0.0598469, -0.00059133, 3.81, 0, 2, 10, 120, 0, 0, 16.20, 8.58, 25.40, 0.322, 7, "ICAO"],
[".338LM 300gr" , 800, 100, 0.0677343, -0.00052190, 3.81, 0, 2, 10, 120, 0, 0, 19.44, 8.58, 25.40, 0.381, 7, "ICAO"],
[".338LM API526" , 895, 100, 0.0588865, -0.00069611, 3.81, 0, 2, 10, 120, 0, 0, 16.39, 8.58, 25.40, 0.560, 1, "ASM" ],
[".300WM Mk248 Mod 0", 900, 100, 0.0584, -0.0007305, 3.81, 0, 2, 10, 120, 0, 0, 13.31, 7.80, 25.40, 0.268, 7, "ICAO"],
[".300WM Mk248 Mod 1", 867, 100, 0.0611, -0.0006326, 3.81, 0, 2, 10, 120, 0, 0, 14.26, 7.80, 25.40, 0.310, 7, "ICAO"],
[".300WM Berger OTM" , 853, 100, 0.0622, -0.0005271, 3.81, 0, 2, 10, 120, 0, 0, 14.90, 7.80, 25.40, 0.368, 7, "ICAO"],
[".300WM Mk248 Mod 0", 900, 100, 0.0584442, -0.00070530, 3.81, 0, 2, 10, 120, 0, 0, 13.31, 7.80, 25.40, 0.268, 7, "ICAO"],
[".300WM Mk248 Mod 1", 867, 100, 0.0610738, -0.00061188, 3.81, 0, 2, 10, 120, 0, 0, 14.26, 7.80, 25.40, 0.310, 7, "ICAO"],
[".300WM Berger OTM" , 853, 100, 0.0622179, -0.00053733, 3.81, 0, 2, 10, 120, 0, 0, 14.90, 7.80, 25.40, 0.368, 7, "ICAO"],
["7.62x54mmR" , 800, 100, 0.0692, -0.0010165, 3.81, 0, 2, 10, 120, 0, 0, 9.849, 7.92, 24.13, 0.400, 1, "ICAO"],
["7.62x54mmR" , 800, 100, 0.0691878, -0.00100023, 3.81, 0, 2, 10, 120, 0, 0, 9.849, 7.92, 24.13, 0.400, 1, "ICAO"],
["7.62x51mm M80" , 810, 100, 0.0679, -0.0010319, 3.81, 0, 2, 10, 120, 0, 0, 9.525, 7.82, 25.40, 0.200, 7, "ICAO"],
["7.62x51mm M118LR" , 780, 100, 0.0710, -0.0008497, 3.81, 0, 2, 10, 120, 0, 0, 11.34, 7.82, 25.40, 0.243, 7, "ICAO"],
["7.62x51mm Mk319" , 910, 100, 0.0585, -0.0010435, 3.81, 0, 2, 10, 120, 0, 0, 8.424, 7.82, 25.40, 0.377, 1, "ICAO"],
["7.62x51mm M993" , 930, 100, 0.0585, -0.0010914, 3.81, 0, 2, 10, 120, 0, 0, 8.230, 7.82, 25.40, 0.359, 1, "ICAO"],
["7.62x51mm Subsonic", 320, 100, 0.3060, -0.0004145, 3.81, 0, 2, 10, 120, 0, 0, 12.96, 7.82, 25.40, 0.235, 7, "ICAO"],
["7.62x51mm M80" , 810, 100, 0.0679374, -0.00100957, 3.81, 0, 2, 10, 120, 0, 0, 9.525, 7.82, 25.40, 0.200, 7, "ICAO"],
["7.62x51mm M118LR" , 780, 100, 0.0710319, -0.00082828, 3.81, 0, 2, 10, 120, 0, 0, 11.34, 7.82, 25.40, 0.243, 7, "ICAO"],
["7.62x51mm Mk319" , 910, 100, 0.0584524, -0.00102338, 3.81, 0, 2, 10, 120, 0, 0, 8.424, 7.82, 25.40, 0.377, 1, "ICAO"],
["7.62x51mm M993" , 930, 100, 0.0570316, -0.00107148, 3.81, 0, 2, 10, 120, 0, 0, 8.230, 7.82, 25.40, 0.359, 1, "ICAO"],
["7.62x51mm Subsonic", 320, 100, 0.3059680, -0.00049899, 3.81, 0, 2, 10, 120, 0, 0, 12.96, 7.82, 25.40, 0.235, 7, "ICAO"],
["6.5x39mm" , 800, 100, 0.0683, -0.0007728, 3.81, 0, 2, 10, 120, 0, 0, 7.970, 6.71, 22.86, 0.263, 7, "ICAO"],
["6.5x47mm Lapua" , 800, 100, 0.0682, -0.0006977, 3.81, 0, 2, 10, 120, 0, 0, 9.007, 6.71, 22.86, 0.290, 7, "ICAO"],
["6.5mm Creedmor" , 840, 100, 0.0637, -0.0006136, 3.81, 0, 2, 10, 120, 0, 0, 9.072, 6.71, 22.86, 0.317, 7, "ICAO"],
["6.5x39mm" , 800, 100, 0.0683482, -0.00075308, 3.81, 0, 2, 10, 120, 0, 0, 7.970, 6.71, 22.86, 0.263, 7, "ICAO"],
["6.5x47mm Lapua" , 800, 100, 0.0682221, -0.00067037, 3.81, 0, 2, 10, 120, 0, 0, 9.007, 6.71, 22.86, 0.290, 7, "ICAO"],
["6.5mm Creedmor" , 840, 100, 0.0636501, -0.00060887, 3.81, 0, 2, 10, 120, 0, 0, 9.072, 6.71, 22.86, 0.317, 7, "ICAO"],
["5.56x45mm M855" , 870, 100, 0.0626, -0.0013685, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.151, 7, "ASM" ],
["5.56x45mm Mk262" , 820, 100, 0.0671, -0.0011287, 3.81, 0, 2, 10, 120, 0, 0, 4.990, 5.70, 17.78, 0.361, 1, "ASM" ],
["5.56x45mm Mk318" , 880, 100, 0.0616, -0.0013064, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.307, 1, "ASM" ],
["5.56x45mm M995" , 869, 100, 0.0616, -0.0012972, 3.81, 0, 2, 10, 120, 0, 0, 4.536, 5.70, 17.78, 0.310, 1, "ASM" ]];
["5.56x45mm M855" , 870, 100, 0.0626386, -0.00126466, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.151, 7, "ASM" ],
["5.56x45mm Mk262" , 820, 100, 0.0671481, -0.00109563, 3.81, 0, 2, 10, 120, 0, 0, 4.990, 5.70, 17.78, 0.361, 1, "ASM" ],
["5.56x45mm Mk318" , 880, 100, 0.0615937, -0.00123318, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.307, 1, "ASM" ],
["5.56x45mm M995" , 869, 100, 0.0626713, -0.00123272, 3.81, 0, 2, 10, 120, 0, 0, 4.536, 5.70, 17.78, 0.310, 1, "ASM" ]];
[] call FUNC(clear_user_data);
profileNamespace setVariable ["ACE_ATragMX_gunList", GVAR(gunList)];

View File

@ -47,7 +47,7 @@ _temperature = GVAR(temperature);
_barometricPressure = GVAR(barometricPressure);
_relativeHumidity = GVAR(relativeHumidity);
if (!GVAR(atmosphereModeTBH)) then {
_barometricPressure = 1013.25 * exp(-(_altitude) / 7990);
_barometricPressure = 1013.25 * (1 - (0.0065 * _altitude) / (273.15 + _temperature + 0.0065 * _altitude)) ^ 5.255754495;
_relativeHumidity = 50;
};

View File

@ -47,7 +47,7 @@ _temperature = GVAR(temperature);
_barometricPressure = GVAR(barometricPressure);
_relativeHumidity = GVAR(relativeHumidity);
if (!GVAR(atmosphereModeTBH)) then {
_barometricPressure = 1013.25 * exp(-(_altitude) / 7990);
_barometricPressure = 1013.25 * (1 - (0.0065 * _altitude) / (273.15 + _temperature + 0.0065 * _altitude)) ^ 5.255754495;
_relativeHumidity = 50;
};

View File

@ -2,4 +2,4 @@
uiNamespace setVariable ['ATragMX_Display', nil];
GVAR(active) = false;
[GVAR(DialogPFH)] call removePerFrameHandler;
[GVAR(DialogPFH)] call cba_fnc_removePerFrameHandler;

View File

@ -15,7 +15,7 @@
*/
#include "script_component.hpp"
private ["_range", "_elevation", "_windage1", "_windage2", "_clickSize", "_clickNumber", "_clickInterval", "_lead", "_TOF", "_velocity", "_kineticEnergy", "_rangeOutput", "_elevationOutput", "_windageOutput", "_lastColumnOutput"];
private ["_range", "_elevation", "_windage1", "_windage2", "_clickSize", "_clickNumber", "_clickInterval", "_lead", "_TOF", "_velocity", "_kineticEnergy", "_rangeOutput", "_elevationOutput", "_windageOutput", "_lastColumnOutput", "_speedOfSound"];
_lastColumnOutput = "";
if (GVAR(showWind2) && GVAR(rangeCardCurrentColumn) == 0) then {
@ -32,6 +32,8 @@ if (GVAR(currentUnit) == 1) then {
lnbClear 5007;
_speedOfSound = GVAR(temperature) call EFUNC(weather,calculateSpeedOfSound);
{
_range = _x select 0;
_elevation = _x select 1;
@ -72,7 +74,7 @@ lnbClear 5007;
_windageOutput = Str(Round(_windage1 * 100) / 100);
_rangeOutput = Str(_range);
if (_velocity < 340.29) then {
if (_velocity < _speedOfSound) then {
_rangeOutput = _rangeOutput + "*";
};

View File

@ -11,4 +11,4 @@
#include "\z\ace\addons\main\script_macros.hpp"
#define ATRAGMX_PROFILE_NAMESPACE_VERSION 1.6
#define ATRAGMX_PROFILE_NAMESPACE_VERSION 1.7

View File

@ -55,7 +55,7 @@ if (_unit == _attachToVehicle) then { //Self Attachment
[_unit, QGVAR(vehAttach), true] call EFUNC(common,setForceWalkStatus);
//MenuBack isn't working for now (localize "STR_ACE_Attach_CancelAction")
[{[localize "STR_ACE_Attach_PlaceAction", ""] call EFUNC(interaction,showMouseHint)}, [], 0, 0] call EFUNC(common,waitAndExecute);
[{[localize "STR_ACE_Attach_PlaceAction", ""] call EFUNC(interaction,showMouseHint)}, []] call EFUNC(common,execNextFrame);
_unit setVariable [QGVAR(placeActionEH), [_unit, "DefaultAction", {true}, {GVAR(placeAction) = 1;}] call EFUNC(common,AddActionEventHandler)];
// _unit setVariable [QGVAR(cancelActionEH), [_unit, "MenuBack", {true}, {GVAR(placeAction) = 0;}] call EFUNC(common,AddActionEventHandler)];

View File

@ -20,7 +20,7 @@ class CfgAmmo {
};
class B_556x45_Ball : BulletBase {
airFriction=-0.0013685;
airFriction=-0.00126466;
hit=8;
typicalSpeed=750;
tracerStartTime=0.073; // M856 tracer burns out to 800m
@ -37,7 +37,7 @@ class CfgAmmo {
ACE_barrelLengths[]={210.82, 238.76, 269.24, 299.72, 330.2, 360.68, 391.16, 419.1, 449.58, 480.06, 508.0, 609.6};
};
class ACE_556x45_Ball_Mk262 : B_556x45_Ball {
airFriction=-0.0011287;
airFriction=-0.00109563;
caliber=0.8;
deflecting=18;
hit=11;
@ -54,7 +54,7 @@ class CfgAmmo {
ACE_barrelLengths[]={190.5, 368.3, 457.2, 508.0};
};
class ACE_556x45_Ball_Mk318 : B_556x45_Ball {
airFriction=-0.0013064;
airFriction=-0.00123318;
caliber=0.8;
deflecting=18;
hit=9;
@ -71,7 +71,7 @@ class CfgAmmo {
ACE_barrelLengths[]={254.0, 393.7, 508.0};
};
class ACE_556x45_Ball_M995_AP : B_556x45_Ball {
airFriction=-0.0012972;
airFriction=-0.00123272;
caliber=1.6;
deflecting=18;
hit=6;
@ -92,7 +92,7 @@ class CfgAmmo {
nvgOnly = 1;
};
class ACE_545x39_Ball_7N6M : B_556x45_Ball {
airFriction=-0.001222;
airFriction=-0.00114744;
caliber=0.6;
deflecting=18;
hit=7;
@ -110,7 +110,7 @@ class CfgAmmo {
};
class B_556x45_Ball_Tracer_Green;
class ACE_545x39_Ball_7T3M : B_556x45_Ball_Tracer_Green {
airFriction=-0.001222;
airFriction=-0.00114744;
caliber=0.6;
deflecting=18;
hit=7;
@ -129,7 +129,7 @@ class CfgAmmo {
ACE_barrelLengths[]={254.0, 414.02, 508.0};
};
class B_65x39_Caseless : BulletBase {
airFriction=-0.0007728;
airFriction=-0.00075308;
typicalSpeed=800;
ACE_caliber=6.706;
ACE_bulletLength=32.893;
@ -151,7 +151,7 @@ class CfgAmmo {
nvgOnly = 1;
};
class ACE_65x47_Ball_Scenar: B_65x39_Caseless {
airFriction=-0.0006977;
airFriction=-0.00067037;
typicalSpeed=820 ;
caliber=0.9;
ACE_caliber=6.706;
@ -166,7 +166,7 @@ class CfgAmmo {
ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4};
};
class ACE_65_Creedmor_Ball: B_65x39_Caseless {
airFriction=-0.0006136;
airFriction=-0.00060887;
typicalSpeed=860 ;
caliber=1.1;
ACE_caliber=6.706;
@ -181,7 +181,7 @@ class CfgAmmo {
ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4};
};
class B_762x51_Ball : BulletBase {
airFriction=-0.0010319;
airFriction=-0.00100957;
typicalSpeed=833;
hit=9;
tracerStartTime=0.073; // Based on the British L5A1 which burns out to 1000m
@ -202,7 +202,7 @@ class CfgAmmo {
nvgOnly = 1;
};
class ACE_762x51_Ball_M118LR : B_762x51_Ball {
airFriction=-0.0008497;
airFriction=-0.00082828;
caliber=1.8;
hit=16;
typicalSpeed=790;
@ -218,7 +218,7 @@ class CfgAmmo {
ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4};
};
class ACE_762x51_Ball_Mk316_Mod_0 : B_762x51_Ball {
airFriction=-0.0008421;
airFriction=-0.00082029;
caliber=1.8;
hit=16;
typicalSpeed=790;
@ -234,7 +234,7 @@ class CfgAmmo {
ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4};
};
class ACE_762x51_Ball_Mk319_Mod_0 : B_762x51_Ball {
airFriction=-0.0010435;
airFriction=-0.00102338;
caliber=1.5;
hit=14;
typicalSpeed=900;
@ -250,7 +250,7 @@ class CfgAmmo {
ACE_barrelLengths[]={330.2, 406.4, 508.0};
};
class ACE_762x51_Ball_M993_AP : B_762x51_Ball {
airFriction=-0.0010914;
airFriction=-0.00107148;
caliber=2.2;
hit=11;
typicalSpeed=910;
@ -266,7 +266,7 @@ class CfgAmmo {
ACE_barrelLengths[]={330.2, 406.4, 508.0};
};
class ACE_762x51_Ball_Subsonic : B_762x51_Ball {
airFriction=-0.0004145;
airFriction=-0.00049899;
caliber=1;
hit=6;
typicalSpeed=320;
@ -282,7 +282,7 @@ class CfgAmmo {
ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4};
};
class ACE_30_06_M1_Ball : B_762x51_Ball {
airFriction=-0.0008290;
airFriction=-0.00080900;
typicalSpeed=800;
caliber=2.0;
hit=10;
@ -298,7 +298,7 @@ class CfgAmmo {
ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4};
};
class ACE_7_Remington_Magnum_Ball : B_762x51_Ball {
airFriction=-0.0005809;
airFriction=-0.00056738;
typicalSpeed=820;
caliber=2.1;
hit=8;
@ -314,7 +314,7 @@ class CfgAmmo {
ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4};
};
class ACE_243_Winchester_Ball : B_762x51_Ball {
airFriction=-0.0007010;
airFriction=-0.00067875;
typicalSpeed=915;
caliber=2.3;
hit=6;
@ -330,7 +330,7 @@ class CfgAmmo {
ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4};
};
class ACE_762x67_Ball_Mk248_Mod_0 : B_762x51_Ball {
airFriction=-0.0007305;
airFriction=-0.00070530;
caliber=1.8;
hit=17;
typicalSpeed=900;
@ -346,7 +346,7 @@ class CfgAmmo {
ACE_barrelLengths[]={508.0, 609.6, 660.4};
};
class ACE_762x67_Ball_Mk248_Mod_1 : B_762x51_Ball {
airFriction=-0.0006326;
airFriction=-0.00061188;
caliber=1.9;
hit=18;
typicalSpeed=867;
@ -362,7 +362,7 @@ class CfgAmmo {
ACE_barrelLengths[]={508.0, 609.6, 660.4};
};
class ACE_762x67_Ball_Berger_Hybrid_OTM : B_762x51_Ball {
airFriction=-0.0005271;
airFriction=-0.00053733;
caliber=2.0;
hit=19;
typicalSpeed=853;
@ -378,7 +378,7 @@ class CfgAmmo {
ACE_barrelLengths[]={508.0, 609.6, 660.4};
};
class B_762x54_Ball: B_762x51_Ball {
airFriction=-0.0010165;
airFriction=-0.00100023;
typicalSpeed=820;
ACE_caliber=7.925;
ACE_bulletLength=28.956;
@ -392,7 +392,7 @@ class CfgAmmo {
ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4};
};
class ACE_762x54_Ball_7N14 : B_762x51_Ball {
airFriction=-0.0010165;
airFriction=-0.00100023;
caliber=1.5;
hit=15;
typicalSpeed=820;
@ -409,7 +409,7 @@ class CfgAmmo {
};
class B_762x54_Tracer_Green;
class ACE_762x54_Ball_7T2 : B_762x54_Tracer_Green {
airFriction=-0.0010369;
airFriction=-0.00103989;
caliber=1.5;
hit=15;
typicalSpeed=800;
@ -427,7 +427,7 @@ class CfgAmmo {
ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4};
};
class ACE_762x35_Ball : B_762x51_Ball {
airFriction=-0.0012406;
airFriction=-0.00128942;
caliber=1.5;
hit=11;
typicalSpeed=790;
@ -443,7 +443,7 @@ class CfgAmmo {
ACE_barrelLengths[]={228.6, 406.4, 508.0};
};
class ACE_762x39_Ball : B_762x51_Ball {
airFriction=-0.0014519;
airFriction=-0.00151621;
hit=12;
caliber=1.5;
typicalSpeed=716;
@ -459,7 +459,7 @@ class CfgAmmo {
ACE_barrelLengths[]={254.0, 414.02, 508.0};
};
class ACE_762x39_Ball_57N231P : B_762x54_Tracer_Green {
airFriction=-0.0015168;
airFriction=-0.00151621;
hit=12;
caliber=1.5;
typicalSpeed=716;
@ -477,7 +477,7 @@ class CfgAmmo {
ACE_barrelLengths[]={254.0, 414.02, 508.0};
};
class B_9x21_Ball : BulletBase {
airFriction=-0.0021165;
airFriction=-0.00226847;
typicalSpeed=390;
hit=6;
ACE_caliber=9.042;
@ -493,7 +493,7 @@ class CfgAmmo {
};
class ACE_9x18_Ball_57N181S : B_9x21_Ball {
hit=5;
airFriction=-0.0015655;
airFriction=-0.00190333;
typicalSpeed=298;
ACE_caliber=9.271;
ACE_bulletLength=15.494;
@ -507,7 +507,7 @@ class CfgAmmo {
ACE_barrelLengths[]={96.52, 127.0, 228.6};
};
class ACE_9x19_Ball : B_9x21_Ball {
airFriction=-0.0015833;
airFriction=-0.0018577;
typicalSpeed=370;
hit=6;
ACE_caliber=9.017;
@ -522,7 +522,7 @@ class CfgAmmo {
ACE_barrelLengths[]={101.6, 127.0, 228.6};
};
class ACE_10x25_Ball : B_9x21_Ball {
airFriction=-0.00168;
airFriction=-0.00181928;
typicalSpeed=425;
hit=7;
ACE_caliber=12.7;
@ -537,7 +537,7 @@ class CfgAmmo {
ACE_barrelLengths[]={101.6, 117.094, 228.6};
};
class ACE_765x17_Ball: B_9x21_Ball {
airFriction=-0.001410;
airFriction=-0.00163356;
typicalSpeed=282;
hit=7;
ACE_caliber=7.938;
@ -552,7 +552,7 @@ class CfgAmmo {
ACE_barrelLengths[]={101.6, 127.0, 228.6};
};
class ACE_303_Ball : ACE_762x51_Ball_M118LR {
airFriction=-0.0008410;
airFriction=-0.0008349;
typicalSpeed=761;
caliber=2.0;
ACE_caliber=7.899;
@ -567,7 +567,7 @@ class CfgAmmo {
ACE_barrelLengths[]={508.0, 609.6, 660.4};
};
class B_93x64_Ball : BulletBase {
airFriction=-0.0010921;
airFriction=-0.00108571;
typicalSpeed=880;
ACE_caliber=9.296;
ACE_bulletLength=34.29;
@ -582,7 +582,7 @@ class CfgAmmo {
};
class B_408_Ball : BulletBase {
timeToLive=10;
airFriction=-0.0003958;
airFriction=-0.00038944;
typicalSpeed=910;
ACE_caliber=10.363;
ACE_bulletLength=54.0;
@ -598,6 +598,7 @@ class CfgAmmo {
};
class ACE_106x83mm_Ball : B_408_Ball {
timeToLive=10;
airFriction=-0.00052047;
ACE_caliber=10.566;
ACE_bulletLength=53.061;
ACE_bulletMass=25.7904;
@ -611,7 +612,7 @@ class CfgAmmo {
};
class B_338_Ball : BulletBase {
timeToLive=10;
airFriction=-0.0006234;
airFriction=-0.00059133;
typicalSpeed=915;
ACE_caliber=8.585;
ACE_bulletLength=39.573;
@ -625,7 +626,7 @@ class CfgAmmo {
ACE_barrelLengths[]={508.0, 660.4, 711.2};
};
class B_338_NM_Ball : BulletBase {
airFriction=-0.0005434;
airFriction=-0.00052201;
typicalSpeed=820;
ACE_caliber=8.585;
ACE_bulletLength=43.18;
@ -640,7 +641,7 @@ class CfgAmmo {
};
class ACE_338_Ball : B_338_Ball {
timeToLive=10;
airFriction=-0.0005397;
airFriction=-0.00052190;
typicalSpeed=826;
ACE_caliber=8.585;
ACE_bulletLength=43.18;
@ -655,7 +656,7 @@ class CfgAmmo {
};
class ACE_338_Ball_API526 : B_338_Ball {
timeToLive=10;
airFriction=-0.0007120;
airFriction=-0.00069611;
caliber=2.8;
typicalSpeed=895;
ACE_caliber=8.585;
@ -670,7 +671,7 @@ class CfgAmmo {
ACE_barrelLengths[]={508.0, 660.4, 711.2};
};
class B_127x54_Ball : BulletBase {
airFriction=-0.0001877;
airFriction=-0.00019268;
typicalSpeed=300;
ACE_caliber=12.954;
ACE_bulletLength=64.516;
@ -685,7 +686,7 @@ class CfgAmmo {
};
class B_127x99_Ball : BulletBase {
timeToLive=10;
airFriction=-0.0005942;
airFriction=-0.00057503;
typicalSpeed=900;
ACE_caliber=12.954;
ACE_bulletLength=58.674;
@ -700,7 +701,7 @@ class CfgAmmo {
};
class ACE_127x99_API : BulletBase {
timeToLive=10;
airFriction=-0.0005886;
airFriction=-0.00057503;
typicalSpeed=900;
hit=25;
caliber=4.0;
@ -717,7 +718,7 @@ class CfgAmmo {
};
class ACE_127x99_Ball_AMAX : B_127x99_Ball {
timeToLive=10;
airFriction=-0.0003722;
airFriction=-0.00036645;
typicalSpeed=860;
caliber=3.0;
ACE_caliber=12.954;
@ -733,7 +734,7 @@ class CfgAmmo {
};
class B_127x108_Ball : BulletBase {
timeToLive=10;
airFriction=-0.0006469;
airFriction=-0.00063800;
typicalSpeed=820;
ACE_caliber=12.979;
ACE_bulletLength=64.008;
@ -747,7 +748,7 @@ class CfgAmmo {
ACE_barrelLengths[]={728.98};
};
class B_45ACP_Ball : BulletBase {
airFriction=-0.0007312;
airFriction=-0.00081221;
typicalSpeed=250;
ACE_caliber=11.481;
ACE_bulletLength=17.272;

View File

@ -6,8 +6,7 @@ class CfgPatches {
weapons[] = {};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_common"};
author[] = {"TaoSensai","commy2","Ruthberg"};
authorUrl = "https://github.com/Taosenai/tmr";
author[] = {"commy2","Ruthberg"};
VERSION_CONFIG;
};
};

View File

@ -1595,6 +1595,8 @@
<Key ID="STR_ACE_AmmoSupplyCrate_DisplayName">
<English>[ACE] Ammo Supply Crate</English>
<Polish>[ACE] Skrzynka z amunicją</Polish>
<Spanish>[ACE] Caja de suministros de munición</Spanish>
<German>[ACE] Munitionskiste</German>
</Key>
</Package>
</Project>

View File

@ -164,8 +164,6 @@ class CfgVehicles {
displayName = "$STR_ACE_Captives_ModuleSurrender_DisplayName"; //Make Unit Surrender
function = QUOTE(DFUNC(moduleSurrender));
scope = 2; //show in editor
scopeCurator = 2; //show in zeus
curatorCost = 0; //???
isGlobal = 1; //run global
isTriggerActivated = 1; //Wait for triggers
icon = QUOTE(PATHTOF(UI\Icon_Module_Make_Unit_Surrender_ca.paa));
@ -176,4 +174,4 @@ class CfgVehicles {
sync[] = {"AnyAI"};
};
};
};
};

View File

@ -23,37 +23,13 @@ private ["_bisMouseOver", "_mouseOverObject"];
if (!_activated) exitWith {};
if (local _logic) then {
if ((!isnull curatorcamera) && {((count curatorMouseOver) == 2) && {(curatorMouseOver select 1) == _logic}}) then {//in zeus interface and we placed the module
_bisMouseOver = missionNamespace getVariable ["bis_fnc_curatorObjectPlaced_mouseOver", []];//bis caches the previous curatorMouseOver
if ((count _bisMouseOver) == 2) then {//check what mouse was over before the module was placed
_mouseOverObject = _bisMouseOver select 1;
if ((_mouseOverObject isKindOf "CAManBase") && {(vehicle _mouseOverObject) == _mouseOverObject}) then {
TRACE_2("Debug - module surrendering %1",_mouseOverObject,(name _mouseOverObject));
if (alive _mouseOverObject) then {
if (!(_mouseOverObject getVariable [QGVAR(isSurrendering), false])) then {
["SetSurrendered", [_mouseOverObject], [_mouseOverObject, true]] call EFUNC(common,targetEvent);
} else {
["SetSurrendered", [_mouseOverObject], [_mouseOverObject, false]] call EFUNC(common,targetEvent);
};
} else {
["STR_ACE_Captives_Zeus_OnlyAlive"] call EFUNC(common,displayTextStructured);
};
} else {
["STR_ACE_Captives_Zeus_OnlyInfantry"] call EFUNC(common,displayTextStructured);
};
} else {
["STR_ACE_Captives_Zeus_NothingSelected"] call EFUNC(common,displayTextStructured);
};
} else {
//an editor module
//Modules run before postInit can instal the event handler, so we need to wait a little bit
[{
PARAMS_1(_units);
{
["SetSurrendered", [_x], [_x, true]] call EFUNC(common,targetEvent);
} forEach _units;
}, [_units], 0.05, 0.05]call EFUNC(common,waitAndExecute);
};
//Modules run before postInit can instal the event handler, so we need to wait a little bit
[{
PARAMS_1(_units);
{
["SetSurrendered", [_x], [_x, true]] call EFUNC(common,targetEvent);
} forEach _units;
}, [_units], 0.05, 0.05]call EFUNC(common,waitAndExecute);
deleteVehicle _logic;
};

View File

@ -157,49 +157,17 @@
<Hungarian>Megadás abbahagyása</Hungarian>
<Italian>Smetti di arrenderti</Italian>
</Key>
<Key ID="STR_ACE_Captives_Zeus_OnlyAlive">
<English>Only use on alive units</English>
<French>Utiliser uniquement sur une unité vivante</French>
<German>Nur bei lebenden Einheiten verwendbar</German>
<Spanish>Utilizar solo en unidades vivas</Spanish>
<Czech>Použitelné jen na živé jednotky</Czech>
<Polish>Używaj tylko na żywych jednostkach</Polish>
<Russian>Применимо только к живым юнитам</Russian>
<Hungarian>Csak élő egységeken használni</Hungarian>
<Italian>Si può fare solo su persone vive</Italian>
<Portuguese>Usar somente em unidades vivas</Portuguese>
</Key>
<Key ID="STR_ACE_Captives_Zeus_OnlyInfantry">
<English>Only use on dismounted inf</English>
<French>Utiliser uniquement sur du personnel à pied</French>
<German>Nur bei abgesessener Infanterie verwendbar</German>
<Spanish>Utilizar solo en infanteria desmontada</Spanish>
<Czech>Použitelné jen na pěsích jednotkách</Czech>
<Polish>Używaj tylko na piechocie poza wszelkimi pojazdami</Polish>
<Russian>Применимо только к пехоте вне техники</Russian>
<Hungarian>Csak járműben kívül lévő egységeken használni</Hungarian>
<Italian>Si può usare solo su fanteria a piedi</Italian>
<Portuguese>Usar somente em infantaria desmontada</Portuguese>
</Key>
<Key ID="STR_ACE_Captives_Zeus_NothingSelected">
<English>Nothing under mouse</English>
<French>Rien sous le curseur</French>
<German>Es wurde nichts ausgewählt</German>
<Spanish>Nada bajo el ratón</Spanish>
<Portuguese>Nada debaixo do mouse</Portuguese>
<Czech>Nic není vybráno</Czech>
<Polish>Nie ma nic pod kursorem</Polish>
<Russian>Ничего не выделено</Russian>
<Hungarian>Semmi sincs az egér alatt</Hungarian>
<Italian>Nessuna selezione</Italian>
</Key>
<Key ID="STR_ACE_Captives_ModuleSurrender_DisplayName">
<English>Make Unit Surrender</English>
<Polish>Poddaj się!</Polish>
<Spanish>Hacer que la unidad se rinda</Spanish>
<German>Einheit kapitulieren lassen</German>
</Key>
<Key ID="STR_ACE_Captives_ModuleSurrender_Description">
<English>Sync a unit to make them surrender.&lt;br /&gt;Source: ace_captives</English>
<Polish>Zsynchronizuj z jednostką aby sprawić by się poddała&lt;br /&gt;Źródło: ace_captives</Polish>
<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>
</Key>
</Package>
</Project>

View File

@ -24,12 +24,12 @@ class CfgVehicles {
// += needs a non inherited entry in that class, otherwise it simply overwrites
//#include <DefaultItems.hpp>
class Logic;
class Module_F: Logic {
class ModuleDescription {};
};
class ACE_ModuleCheckPBOs: Module_F {
class Logic;
class Module_F: Logic {
class ModuleDescription;
};
class ACE_Module: Module_F {};
class ACE_ModuleCheckPBOs: ACE_Module {
author = "$STR_ACE_Common_ACETeam";
category = "ACE";
displayName = "$STR_ACE_Common_CheckPBO_DisplayName";
@ -77,7 +77,7 @@ class CfgVehicles {
};
};
class ACE_ModuleLSDVehicles: Module_F {
class ACE_ModuleLSDVehicles: ACE_Module {
author = "$STR_ACE_Common_ACETeam";
category = "ACE";
displayName = "$STR_ACE_Common_LSDVehicles_DisplayName";

View File

@ -3,12 +3,6 @@
//IGNORE_PRIVATE_WARNING("_handleNetEvent", "_handleRequestAllSyncedEvents", "_handleRequestSyncedEvent", "_handleSyncedEvent");
// Load settings from profile
if (hasInterface) then {
call FUNC(loadSettingsFromProfile);
call FUNC(loadSettingsLocalizedText);
};
// Listens for global "SettingChanged" events, to update the force status locally
["SettingChanged", {
PARAMS_2(_name,_value);
@ -253,3 +247,40 @@ if(isMultiplayer && { ACE_time > 0 || isNull player } ) then {
};
}, 0, []] call cba_fnc_addPerFrameHandler;
};
GVAR(commonPostInited) = true;
// Create a pfh to wait until all postinits are ready and settings are initialized
[{
PARAMS_1(_args);
EXPLODE_1_PVT(_args,_waitingMsgSent);
// If post inits are not ready then wait
if !(SLX_XEH_MACHINE select 8) exitWith {};
// If settings are not initialized then wait
if (isNil QGVAR(settings)) exitWith {
if (!_waitingMsgSent) then {
_args set [0, true];
diag_log text format["[ACE] Waiting on settings from server"];
};
};
[(_this select 1)] call cba_fnc_removePerFrameHandler;
diag_log text format["[ACE] Settings received from server"];
// Event so that ACE_Modules have their settings loaded:
["InitSettingsFromModules", []] call FUNC(localEvent);
// Load user settings from profile
if (hasInterface) then {
call FUNC(loadSettingsFromProfile);
call FUNC(loadSettingsLocalizedText);
};
diag_log text format["[ACE] Settings initialized"];
//Event that settings are safe to use:
["SettingsInitialized", []] call FUNC(localEvent);
}, 0, [false]] call cba_fnc_addPerFrameHandler;

View File

@ -180,6 +180,7 @@ PREP(toHex);
PREP(toNumber);
PREP(uniqueElementsOnly);
PREP(unloadPerson);
PREP(unloadPersonLocal);
PREP(unmuteUnit);
PREP(useItem);
PREP(useMagazine);
@ -286,13 +287,14 @@ PREP(_handleRequestSyncedEvent);
PREP(_handleRequestAllSyncedEvents);
GVAR(syncedEvents) = HASH_CREATE;
GVAR(waitAndExecArray) = [];
// @TODO: Generic local-managed global-synced objects (createVehicleLocal)
//Debug
ACE_COUNTERS = [];
// Load settings
// Load settings on the server and broadcast them
if (isServer) then {
call FUNC(loadSettingsOnServer);
};

View File

@ -5,7 +5,7 @@ class CfgPatches {
units[] = {"ACE_Box_Misc", "ACE_bananaItem"};
weapons[] = {"ACE_ItemCore","ACE_FakePrimaryWeapon", "ACE_Banana"};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_main"};
requiredAddons[] = {"ace_main","ace_modules"};
author[] = {"KoffeinFlummi"};
authorUrl = "https://github.com/KoffeinFlummi/";
VERSION_CONFIG;

View File

@ -60,7 +60,7 @@ _perFrameFunction = {
if (isNull (uiNamespace getVariable [QGVAR(ctrlProgressBar), controlNull])) then {
_errorCode = 1;
} else {
if (ACE_player != _player) then {
if (ACE_player != _player || !alive _player) then {
_errorCode = 2;
} else {
if (!([_args, _elapsedTime, _totalTime, _errorCode] call _condition)) then {

View File

@ -10,12 +10,12 @@
*
* Public: No
*/
//#define DEBUG_MODE_FULL
#include "script_component.hpp"
#define GROUP_SWITCH_ID QUOTE(FUNC(loadPerson))
private ["_vehicle", "_loaded", "_emptyPos"];
private ["_vehicle","_emptyPos"];
PARAMS_1(_unit);
_vehicle = vehicle _unit;
@ -25,20 +25,8 @@ if !(speed _vehicle <1 && (((getpos _vehicle) select 2) < 2)) exitwith {false;};
_emptyPos = ((getPos _vehicle) findEmptyPosition [0, 10, typeof _unit]);
if (count _emptyPos == 0) exitwith {false};
_unit setPos _emptyPos;
unassignVehicle _unit;
if (!alive _unit) then {
_unit action ["Eject", vehicle _unit];
};
[_unit, false, GROUP_SWITCH_ID, side group _unit] call FUNC(switchToGroupSide);
_loaded = _vehicle getvariable [QGVAR(loaded_persons),[]];
_loaded = _loaded - [_unit];
_vehicle setvariable [QGVAR(loaded_persons),_loaded,true];
if (!([_unit] call FUNC(isAwake))) then {
[_unit,([_unit] call FUNC(getDeathAnim)), 1, true] call FUNC(doAnimation);
if (!isNull _vehicle) then {
[[_unit], QUOTE(FUNC(unloadPersonLocal)), _unit, false] call EFUNC(common,execRemoteFnc);
};
true;

View File

@ -0,0 +1,44 @@
/*
* Author: ViperMaul
* Unload a person from a vehicle, local
*
* Arguments:
* 0: unit <OBJECT>
*
* Return Value:
* Returns true if succesfully unloaded person <BOOL>
*
* Public: No
*/
//#define DEBUG_MODE_FULL
#include "script_component.hpp"
#define GROUP_SWITCH_ID QUOTE(FUNC(loadPerson))
private ["_vehicle", "_loaded", "_emptyPos"];
PARAMS_1(_unit);
_vehicle = vehicle _unit;
if (_vehicle == _unit) exitwith {false;};
if !(speed _vehicle <1 && (((getpos _vehicle) select 2) < 2)) exitwith {false;};
_emptyPos = ((getPos _vehicle) findEmptyPosition [0, 10, typeof _unit]);
if (count _emptyPos == 0) exitwith {false};
_unit setPos _emptyPos;
unassignVehicle _unit;
if (!alive _unit) then {
_unit action ["Eject", vehicle _unit];
};
[_unit, false, GROUP_SWITCH_ID, side group _unit] call FUNC(switchToGroupSide);
_loaded = _vehicle getvariable [QGVAR(loaded_persons),[]];
_loaded = _loaded - [_unit];
_vehicle setvariable [QGVAR(loaded_persons),_loaded,true];
if (!([_unit] call FUNC(isAwake))) then {
[_unit,([_unit] call FUNC(getDeathAnim)), 1, true] call FUNC(doAnimation);
};
true;

View File

@ -7,30 +7,31 @@
* 0: Code to execute (Code)
* 1: Parameters to run the code with (Array)
* 2: Delay in seconds before executing the code (Number)
* 3: Interval of ACE_time in which the execution is evaluated, 0 means every frame (Number)
*
* Return value:
* PFH handler ID
* None
*
* Example:
* [{(_this select 0) setVelocity [0,0,200];}, [player], 10] call ace_common_fnc_waitAndExecute
*
* Public: No
*/
#include "script_component.hpp"
PARAMS_4(_func,_params,_delay,_interval);
PARAMS_3(_func,_params,_delay);
[
{
EXPLODE_2_PVT(_this,_params,_pfhId);
EXPLODE_2_PVT(_params,_delayedExecParams,_startTime);
EXPLODE_3_PVT(_delayedExecParams,_func,_funcParams,_delay);
GVAR(waitAndExecArray) pushBack [(ACE_time + _delay), _func, _params];
GVAR(waitAndExecArray) sort true;
// Exit if the ACE_time was not reached yet
if (ACE_time < _startTime + _delay) exitWith {};
// Remove the PFH
[_pfhId] call cba_fnc_removePerFrameHandler;
// Execute the function
_funcParams call _func;
},
_interval,
[_this, ACE_time]
] call CBA_fnc_addPerFrameHandler
if ((count GVAR(waitAndExecArray)) == 1) then {
[{
while {((count GVAR(waitAndExecArray)) > 0) && {((GVAR(waitAndExecArray) select 0) select 0) <= ACE_Time}} do {
private ["_entry"];
_entry = GVAR(waitAndExecArray) deleteAt 0;
(_entry select 2) call (_entry select 1);
};
if ((count GVAR(waitAndExecArray)) == 0) then {
[(_this select 1)] call cba_fnc_removePerFrameHandler;
};
}, 0, []] call CBA_fnc_addPerFrameHandler;
};

View File

@ -39,7 +39,7 @@
</Key>
<Key ID="STR_ACE_Common_Options">
<English>ACE Options</English>
<German>ACE Optionen</German>
<German>ACE-Optionen</German>
<Spanish>Opciones ACE</Spanish>
<Polish>Ustawienia ACE</Polish>
<Czech>Nastavení ACE</Czech>
@ -473,54 +473,80 @@
<Key ID="STR_ACE_Common_CheckPBO_DisplayName">
<English>Check PBOs</English>
<Polish>Sprawdzaj PBO</Polish>
<Spanish>Comprobar PBOs</Spanish>
<German>Überprüfe PBOs</German>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Description">
<English></English>
<Polish>Sprawdzaj spójność addonów z serwerem</Polish>
<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>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Action_DisplayName">
<English>Action</English>
<Polish>Akcja</Polish>
<Spanish>Acción</Spanish>
<German>Aktion</German>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Action_Description">
<English>What to do with people who do not have the right PBOs?</English>
<Polish>Co zrobić z graczami, którzy nie mają właściwych PBO?</Polish>
<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>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Action_WarnOnce">
<English>Warn once</English>
<Polish>Ostrzeż raz</Polish>
<Spanish>Avisar una vez</Spanish>
<German>Einmal verwarnen</German>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Action_WarnPerm">
<English>Warn (permanent)</English>
<Polish>Ostrzeżenie (permanentne)</Polish>
<Spanish>Avisar (permanente)</Spanish>
<German>Immer verwarnen</German>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Action_Kick">
<English>Kick</English>
<Polish>Kick</Polish>
<Spanish>Expulsar</Spanish>
<German>Kicken</German>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_CheckAll_DisplayName">
<English>Check all addons</English>
<Polish>Sprawdź wsz. addony</Polish>
<Spanish>Comprobar todos los addons</Spanish>
<German>Alle Addons überprüfen</German>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_CheckAll_Description">
<English>Check all addons instead of only those of ACE?</English>
<Polish>Sprawdzaj wszystkie addony czy tylko te z ACE?</Polish>
<Spanish>Comprobar todos los addons en vez de solo los del ACE</Spanish>
<German>Alle Addons anstatt nur ACE überprüfen?</German>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Whitelist_DisplayName">
<English>Whitelist</English>
<Polish>Biała lista</Polish>
<Spanish>Lista blanca</Spanish>
<German>Whitelist</German>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Whitelist_Description">
<English>What addons are allowed regardless?</English>
<Polish>Jakie addony są dozwolone?</Polish>
<Spanish>Qué addons están permitidos igualmente</Spanish>
<German>Welche Addons werden dennoch erlaubt?</German>
</Key>
<Key ID="STR_ACE_Common_LSDVehicles_DisplayName">
<English>LSD Vehicles</English>
<Polish>Pojazdy LSD</Polish>
<Spanish>Vehículos LSD</Spanish>
<German>LSD-Fahrzeuge</German>
</Key>
<Key ID="STR_ACE_Common_LSDVehicles_Description">
<English>Adds LSD effect to synchronized vehicle</English>
<Polish>Dodaje efekt LSD pod zsynchronizowany pojazd</Polish>
<Spanish>Añade el efecto LSD al vehículo sincronizado</Spanish>
<German>Fügt einen LSD-Effekt zum synchronisierten Fahrzeug hinzu</German>
</Key>
</Package>
</Project>

View File

@ -68,7 +68,7 @@ if (isNull _holder) exitWith {
if (_holder getVariable [QGVAR(holderInUse), false]) exitWith {
[{
_this call FUNC(disarmDropItems);
}, _this, 0, 0] call EFUNC(common,waitAndExecute);
}, _this] call EFUNC(common,execNextFrame);
};
_holder setVariable [QGVAR(holderInUse), true];

View File

@ -41,7 +41,7 @@ if (_target isKindOf "CAManBase") then {
// move a bit closer and adjust direction when trying to pick up a person
_target setDir (getDir _unit + 180);
_target setPos (getPos _unit vectorAdd vectorDir _unit);
_target setPosASL (getPosASL _unit vectorAdd (vectorDir _unit));
[_unit, "AcinPknlMstpSnonWnonDnon_AcinPercMrunSnonWnonDnon", 2, true] call EFUNC(common,doAnimation);
[_target, "AinjPfalMstpSnonWrflDnon_carried_Up", 2, true] call EFUNC(common,doAnimation);

View File

@ -43,7 +43,7 @@ _unit selectWeapon primaryWeapon _unit;
// move a bit closer and adjust direction when trying to pick up a person
if (_target isKindOf "CAManBase") then {
_target setDir (getDir _unit + 180);
_target setPos (getPos _unit vectorAdd (vectorDir _unit vectorMultiply 1.5));
_target setPosASL (getPosASL _unit vectorAdd (vectorDir _unit vectorMultiply 1.5));
[_target, "AinjPpneMrunSnonWnonDb_grab", 2, true] call EFUNC(common,doAnimation);
};

View File

@ -9,12 +9,19 @@ class Extended_PostInit_EventHandlers {
};
};
/*
TODO: Move the addEventHandlers out of PostInit into here or separate eventHandlers,
to enable them on all units, so unit switching works for explosives properly.
class Extended_Init_EventHandlers {
class CAManBase {
init = "";
}
}
*/
class Extended_Killed_EventHandlers {
class CAManBase {
GVAR(killedHandler) = QUOTE(_this call FUNC(onKilled));
};
};
class Extended_Take_EventHandlers {
class CAManBase {
GVAR(takeHandler) = QUOTE([ARR_3(_this select 0, _this select 1, _this select 2)] call FUNC(onInventoryChanged));
};
};
class Extended_Put_EventHandlers {
class CAManBase {
GVAR(takeHandler) = QUOTE([ARR_3(_this select 1, _this select 0, _this select 2)] call FUNC(onInventoryChanged));
};
};

View File

@ -1,8 +1,5 @@
class Logic;
class Module_F: Logic {
class ModuleDescription {};
};
class ACE_ModuleExplosive: Module_F {
class ACE_Module;
class ACE_ModuleExplosive: ACE_Module {
author = "$STR_ACE_Common_ACETeam";
category = "ACE";
displayName = "$STR_ACE_Explosive_Module_DisplayName";
@ -24,7 +21,7 @@ class ACE_ModuleExplosive: Module_F {
defaultValue = 1;
};
};
class ModuleDescription: ModuleDescription {
class ModuleDescription {
description = "$STR_ACE_Explosive_Module_Description";
};
};

View File

@ -15,28 +15,10 @@
*/
#include "script_component.hpp"
//Start up a PFEH that scans all mines/explosives without defuseObjects attached and adds them
//Handles Editor Placed / Zeus / Scripted
if (isServer) then {
[{
private ["_explosive", "_helpers", "_defuseHelper"];
{
_explosive = _x;
_helpers = {
((typeOf _x) == "ACE_DefuseObject") && {(_x getVariable [QGVAR(Explosive), objNull]) == _explosive}
} count (attachedObjects _explosive);
if (_helpers == 0) then {
TRACE_3("Explosive without helper",_explosive,(getPosAsl _explosive),(typeOf _explosive));
_defuseHelper = createVehicle ["ACE_DefuseObject", (getPos _explosive), [], 0, "NONE"];
_defuseHelper attachTo [_explosive, [0,0,0], ""];
_defuseHelper setVariable [QGVAR(Explosive),_explosive,true];
};
} forEach allMines;
}, 5, []] call CBA_fnc_addPerFrameHandler;
};
if !(hasInterface) exitWith {};
["interactMenuOpened", {_this call FUNC(interactEH)}] call EFUNC(common,addEventHandler);
GVAR(PlacedCount) = 0;
GVAR(Setup) = objNull;
GVAR(pfeh_running) = false;
@ -50,47 +32,3 @@ GVAR(CurrentSpeedDial) = 0;
}] call EFUNC(common,addEventHandler);
[{(_this select 0) call FUNC(handleScrollWheel);}] call EFUNC(Common,addScrollWheelEventHandler);
player addEventHandler ["Killed", {
private "_deadman";
call FUNC(place_Cancel);
_deadman = [(_this select 0), "DeadManSwitch"] call FUNC(getPlacedExplosives);
{
[(_this select 0), -1, _x, true] call FUNC(detonateExplosive);
} count _deadman;
}];
player addEventHandler ["Take", {
private ["_item", "_getter", "_giver", "_config", "_detonators"];
_item = _this select 2;
_getter = _this select 0;
_giver = _this select 1;
_config = ConfigFile >> "CfgWeapons" >> _item;
if (isClass _config && {getNumber(_config >> "ACE_Detonator") == 1}) then {
private ["_clackerItems"];
_clackerItems = _giver getVariable [QGVAR(Clackers), []];
_getter SetVariable [QGVAR(Clackers), (_getter getVariable [QGVAR(Clackers), []]) + _clackerItems, true];
_detonators = [_giver] call FUNC(getDetonators);
if (count _detonators == 0) then {
_giver setVariable [QGVAR(Clackers), nil, true];
};
};
}];
player addEventHandler ["Put", {
private ["_item", "_getter", "_giver", "_config"];
_item = _this select 2;
_getter = _this select 1;
_giver = _this select 0;
_config = ConfigFile >> "CfgWeapons" >> _item;
if (isClass _config && {getNumber(_config >> "ACE_Detonator") == 1}) then {
private ["_clackerItems"];
_clackerItems = _giver getVariable [QGVAR(Clackers), []];
_getter SetVariable [QGVAR(Clackers), (_getter getVariable [QGVAR(Clackers), []]) + _clackerItems, true];
_detonators = [_giver] call FUNC(getDetonators);
if (count _detonators == 0) then {
_giver setVariable [QGVAR(Clackers), nil, true];
};
};
}];

View File

@ -36,12 +36,16 @@ PREP(handleScrollWheel);
PREP(hasExplosives);
PREP(hasPlacedExplosives);
PREP(interactEH);
PREP(getDetonators);
PREP(getPlacedExplosives);
PREP(getSpeedDialExplosive);
PREP(module);
PREP(onInventoryChanged);
PREP(onKilled);
PREP(onLanded);
PREP(openTimerSetUI);

View File

@ -21,10 +21,4 @@ if (getNumber (ConfigFile >> "CfgAmmo" >> typeof _explosive >> "ACE_explodeOnDef
[_unit, -1, [_explosive, 1], true] call FUNC(detonateExplosive);
};
{
detach _x;
deleteVehicle _x;
false
} count (attachedObjects (_explosive));
_unit action ["Deactivate", _unit, _explosive];

View File

@ -26,12 +26,6 @@ _result = true;
if (!_ignoreRange && {(_unit distance (_item select 0)) > _range}) exitWith {false};
_helpers = attachedObjects (_item select 0);
{
detach _x;
deleteVehicle _x;
} forEach _helpers;
if (getNumber (ConfigFile >> "CfgAmmo" >> typeof (_item select 0) >> "TriggerWhenDestroyed") == 0) then {
private ["_exp", "_previousExp"];
_previousExp = _item select 0;

View File

@ -0,0 +1,56 @@
/*
* Author: PabstMirror
* When interact_menu starts rendering (from "interact_keyDown" event)
* Add defuse helpers to all nearby mines
*
* Arguments:
* Interact Menu Type (0 - world, 1 - self) <NUMBER>
*
* Return Value:
* Nothing
*
* Example:
* [0] call ace_explosives_fnc_interactEH
*
* Public: Yes
*/
#include "script_component.hpp"
PARAMS_1(_interactionType);
//Ignore self-interaction menu
if (_interactionType != 0) exitWith {};
//Ignore while mounted:
if ((vehicle ACE_player) != ACE_player) exitWith {};
//Ignore if we don't have defuse kit
if (!("ACE_DefusalKit" in (items ACE_player))) exitWith {};
[{
PARAMS_2(_args,_pfID);
EXPLODE_3_PVT(_args,_setPosition,_addedDefuseHelpers,_minesHelped);
if (!EGVAR(interact_menu,keyDown)) then {
TRACE_1("Cleaning Defuse Helpers",(count _addedDefuseHelpers));
{deleteVehicle _x;} forEach _addedDefuseHelpers;
[_pfID] call CBA_fnc_removePerFrameHandler;
} else {
private ["_defuseHelper"];
// Prevent Rare Error when ending mission with interact key down:
if (isNull ace_player) exitWith {};
//If player moved >5 meters from last pos, then rescan
if (((getPosASL ace_player) distance _setPosition) > 5) then {
{
if (((_x distance ACE_player) < 15) && {!(_x in _minesHelped)}) then {
TRACE_2("Making Defuse Helper",(_x),(typeOf _x));
_defuseHelper = "ACE_DefuseObject" createVehicleLocal (getPos _x);
_defuseHelper attachTo [_x, [0,0,0]];
_defuseHelper setVariable [QGVAR(Explosive),_x];
_addedDefuseHelpers pushBack _defuseHelper;
_minesHelped pushBack _x;
};
} forEach allMines;
_args set [0, (getPosASL ace_player)];
};
};
}, 0.5, [((getPosASL ace_player) vectorAdd [-100,0,0]), [], []]] call CBA_fnc_addPerFrameHandler;

View File

@ -0,0 +1,35 @@
/*
* Author: Garth 'L-H' de Wet
* When a take/put event handler fires and a detonator is changed hands.
* Then take "attached" explosives.
*
* Arguments:
* 0: Receiver <OBJECT>
* 1: Giver <OBJECT>
* 2: Item <STRING>
*
* Return Value:
* None
*
* Example:
* Handled by CBA
*
* Public: No
*/
#include "script_component.hpp"
private ["_config", "_detonators"];
PARAMS_3(_receiver,_giver,_item);
if (_receiver != ace_player) exitWith {};
_config = ConfigFile >> "CfgWeapons" >> _item;
if (isClass _config && {getNumber(_config >> "ACE_Detonator") == 1}) then {
private ["_clackerItems"];
_clackerItems = _giver getVariable [QGVAR(Clackers), []];
_receiver SetVariable [QGVAR(Clackers), (_receiver getVariable [QGVAR(Clackers), []]) + _clackerItems, true];
_detonators = [_giver] call FUNC(getDetonators);
if (count _detonators == 0) then {
_giver setVariable [QGVAR(Clackers), nil, true];
};
};

View File

@ -0,0 +1,26 @@
/*
* Author: Garth 'L-H' de Wet
* Detonates all attached deadman's switched triggered explosives.
*
* Arguments:
* 0: Unit <OBJECT>
*
* Return Value:
* None
*
* Example:
* Handled by CBA
*
* Public: No
*/
#include "script_component.hpp"
private ["_deadman"];
_unit = _this select 0;
if (_unit == ACE_player) then {
call FUNC(place_Cancel);
};
if (!isServer) exitWith{};
_deadman = [_unit, "DeadManSwitch"] call FUNC(getPlacedExplosives);
{
[_unit, -1, _x, true] call FUNC(detonateExplosive);
} foreach _deadman;

View File

@ -51,16 +51,8 @@ if (isText(_magazineTrigger >> "ammo")) then {
_ammo = getText (_magazineTrigger >> "ammo");
};
_triggerSpecificVars pushBack _triggerConfig;
private ["_defuseHelper"];
_defuseHelper = createVehicle ["ACE_DefuseObject", _pos, [], 0, "NONE"];
_defuseHelper setPosATL _pos;
_explosive = createVehicle [_ammo, _pos, [], 0, "NONE"];
_defuseHelper attachTo [_explosive, [0,0,0], ""];
_defuseHelper setVariable [QGVAR(Explosive),_explosive,true];
_expPos = getPosATL _explosive;
_defuseHelper setPosATL (((getPosATL _defuseHelper) vectorAdd (_pos vectorDiff _expPos)));
_explosive setPosATL _pos;
if (!isNull _attachedTo) then {

View File

@ -37,7 +37,7 @@ if (_dir > 180) then {
} else {
_dir = 180 + _dir;
};
_setup setVariable [QGVAR(Direction), _dir];
_setup setVariable [QGVAR(Direction), _dir, true];
_player setVariable [QGVAR(PlantingExplosive), true];
[{_this setVariable [QGVAR(PlantingExplosive), false]}, _player, 1.5, 0.5] call EFUNC(common,waitAndExecute);
_setup addEventHandler ["EpeContactStart", FUNC(onLanded)];

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="Explosives">
<Key ID="STR_ACE_Explosives_Menu">
@ -508,26 +508,37 @@
<Key ID="STR_ACE_Explosive_Module_DisplayName">
<English>Explosive System</English>
<Polish>System ładunków wybuchowych</Polish>
<Spanish>Sistema de explosivos</Spanish>
<German>Sprengstoffsystem</German>
</Key>
<Key ID="STR_ACE_Explosive_RequireSpecialist_DisplayName">
<English>Require specialists?</English>
<Polish>Wymagaj specjalistów?</Polish>
<Spanish>¿Requiere especialista?</Spanish>
<German>Benötigt Sprengstoffexperten?</German>
</Key>
<Key ID="STR_ACE_Explosive_RequireSpecialist_Description">
<English>Require explosive specialists to disable explosives? Default: No</English>
<Polish>Wymagać saperów do rozbrajania ładunków wybuchowych? Domyślnie: Nie</Polish>
<Spanish>Requiere especialista en explosivos para desactivar explosivos?. Por defecto: No</Spanish>
<German>Benötige Sprengstoffexperte um Sprengladungen zu entschärfen? Standard: Nein</German>
</Key>
<Key ID="STR_ACE_Explosive_PunishNonSpecialists_DisplayName">
<English>Punish non-specialists?</English>
<Polish>Karaj nie-specjalistów?</Polish>
<Spanish>¿Penalizar a los no especialistas?</Spanish>
<German>Bestrafe Nicht-Sprengstoffexperten?</German>
</Key>
<Key ID="STR_ACE_Explosive_PunishNonSpecialists_Description">
<English>Increase the time it takes to complete actions for non-specialists? Default: Yes</English>
<Polish>Zwiększyć ilość wymaganego czasu do ukończenia akcji dla nie-specjalistów? Domyślnie: Tak</Polish>
<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>
</Key>
<Key ID="STR_ACE_Explosive_Module_Description">
<English></English>
<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>
</Key>
</Package>
</Project>

View File

@ -3,7 +3,7 @@
<Package name="FCS">
<Key ID="STR_ACE_FCS_LaseTarget">
<English>Lase Target / Measure Distance</English>
<German>Ziel anlasern / Entfernung Messen</German>
<German>Ziel anlasern / Entfernung messen</German>
<French>Télémétrer la cible</French>
<Polish>Naświetl cel / Zmierz odległość</Polish>
<Czech>Označit cíl / Změřit vzdálenost</Czech>
@ -74,4 +74,4 @@
<Russian>СУО обнулен.</Russian>
</Key>
</Package>
</Project>
</Project>

View File

@ -3,33 +3,51 @@
<Package name="Frag">
<Key ID="STR_ACE_frag_EnableFrag">
<English>Fragmentation Simulation</English>
<Spanish>Simulación de fragmentación</Spanish>
<German>Splittersimulation</German>
</Key>
<Key ID="STR_ACE_frag_EnableFrag_Desc">
<English>Enable the ACE Fragmentation Simulation</English>
<Spanish>Activa la simulación de fragmentación ACE</Spanish>
<German>Aktiviere die ACE-Splittersimulation</German>
</Key>
<Key ID="STR_ACE_frag_EnableSpall">
<English>Spalling Simulation</English>
<Spanish>Simulación de astillamiento</Spanish>
<German>Explosionssimulation</German>
</Key>
<Key ID="STR_ACE_frag_EnableSpall_Desc">
<English>Enable the ACE Spalling Simulation</English>
<Spanish>Activa la simulación de astillamiento ACE</Spanish>
<German>Aktiviere ACE-Explosionssimulation</German>
</Key>
<Key ID="STR_ACE_frag_MaxTrack">
<English>Maximum Projectiles Tracked</English>
<Spanish>Máximos proyectiles rastreados</Spanish>
<German>Maximalzahl der verfolgten Projektile</German>
</Key>
<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 ( >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>
<Spanish>Este ajuste controla la cantidad máxima de proyectiles del sistema de fragmentación y astillamiento de los que se hará un seguimiento en cualquier momento dado. Si se disparan más proyectiles, no serán rastreados. Baja esta opción si no deseas una bajada de FPS en escenarios con muchos proyectiles (&gt;200 proyectiles en el aire a la vez)</Spanish>
<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>
</Key>
<Key ID="STR_ACE_frag_MaxTrackPerFrame">
<English>Maximum Projectiles Per Frame</English>
<Spanish>Máximos proyectiles por cuadro</Spanish>
<German>Maximale Anzahl an Projektilen pro Frame</German>
</Key>
<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>
<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>
</Key>
<Key ID="STR_ACE_frag_EnableDebugTrace">
<English>(SP Only) Frag/Spall Debug Tracing</English>
<Spanish>(Solo SP) Seguimiento de depuración de Fragmentación/Astillamiento </Spanish>
</Key>
<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>
<Spanish>(Solo SP) Requiere un reinicio misión/editor. Permite el seguimiento visual de la fragmentación y astillamientos de los proyectiles en modo SP.</Spanish>
<German>(nur SP) Splitter-/Explosions-Debugging</German>
</Key>
</Package>
</Project>

View File

@ -47,6 +47,8 @@ GVAR(DustHandler) = -1;
GVAR(RainDrops) = objNull;
GVAR(RainActive) = false;
GVAR(RainLastLevel) = 0;
GVAR(surfaceCache) = "";
GVAR(surfaceCacheIsDust) = false;
FUNC(CheckGlasses) = {
if (GVAR(Current) != (goggles ace_player)) then {

View File

@ -15,7 +15,7 @@
* Public: No
*/
#include "script_component.hpp"
private ["_bullets", "_position", "_surface", "_found", "_weapon", "_cloudType", "_unit"];
private ["_bullets", "_position", "_surface", "_weapon", "_cloudType", "_unit"];
EXPLODE_2_PVT(_this,_unit,_weapon);
if (_unit != ace_player) exitWith {true};
_cloudType = "";
@ -39,12 +39,14 @@ if (surfaceIsWater _position) exitWith {};
if ((_position select 2) > 0.2) exitWith {};
_surface = surfaceType _position;
_surface = ([_surface, "#"] call CBA_fnc_split) select 1;
_found = false;
_found = getNumber (ConfigFile >> "CfgSurfaces" >> _surface >> "dust") >= 0.1;
if (_surface != GVAR(surfaceCache)) then {
GVAR(surfaceCache) = _surface;
_surface = ([_surface, "#"] call CBA_fnc_split) select 1;
GVAR(surfaceCacheIsDust) = getNumber (ConfigFile >> "CfgSurfaces" >> _surface >> "dust") >= 0.1;
};
if (!_found) exitWith {};
if (!GVAR(surfaceCacheIsDust)) exitWith {};
_bullets = GETDUSTT(DBULLETS);

View File

@ -94,8 +94,8 @@ class CfgVehicles {
};
class Module_F;
class ACE_ModuleHearing: Module_F {
class ACE_Module;
class ACE_ModuleHearing: ACE_Module {
author = "$STR_ACE_Common_ACETeam";
category = "ACE";
displayName = "$STR_ACE_Hearing_Module_DisplayName";

View File

@ -112,18 +112,25 @@
<Key ID="STR_ACE_Hearing_Module_DisplayName">
<English>Hearing</English>
<Polish>Słuch</Polish>
<Spanish>Audición</Spanish>
<German>Gehör</German>
</Key>
<Key ID="STR_ACE_Hearing_CombatDeafness_DisplayName">
<English>Enable combat deafness?</English>
<Polish>Wł. głuchotę bojową</Polish>
<Spanish>¿Habilitar sordera de combate?</Spanish>
<German>Aktiviere Taubheit im Gefecht?</German>
</Key>
<Key ID="STR_ACE_Hearing_CombatDeafness_Description">
<English>Enable combat deafness?</English>
<Polish>Możliwość chwilowej utraty słuchu przy głośnych wystrzałach i jednoczesnym braku włożonych stoperów</Polish>
<Spanish>Habilita la sordera de combate</Spanish>
<German>Aktiviere Taubheit im Gefecht?</German>
</Key>
<Key ID="STR_ACE_Hearing_Module_Description">
<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>
<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>
</Key>
</Package>
</Project>
</Project>

View File

@ -0,0 +1,7 @@
class ACE_Settings {
class GVAR(minDamageToTrigger) {
//Minimum mamage needed to trigger falling down while moving. Set to -1 to disable completely.
typeName = "SCALAR";
value = 0.1;
};
};

View File

@ -12,4 +12,5 @@ class CfgPatches {
};
};
#include "ACE_Settings.hpp"
#include "CfgEventHandlers.hpp"

View File

@ -10,6 +10,9 @@ _damage = _this select 2;
// don't fall on collision damage
if (_unit == _firer) exitWith {};
//Exit if system disabled:
if (GVAR(minDamageToTrigger) == -1) exitWith {};
// cam shake for player
if (_unit == ACE_player) then {
addCamShake [3, 5, _damage + random 10];
@ -27,13 +30,16 @@ if (_vehicle isKindOf "StaticWeapon") exitwith {
};
// don't fall after minor damage
if (_damage < 0.1) exitWith {};
if (_damage < GVAR(minDamageToTrigger)) exitWith {};
// play sound
if (!isNil QUOTE(EFUNC(medical,playInjuredSound))) then {
[_unit] call EFUNC(medical,playInjuredSound);
};
//Don't do animations if in a vehicle (looks weird and animations never reset):
if (_vehicle != _unit) exitWith {};
// this checks most things, so it doesn't mess with being inside vehicles or while dragging etc.
if !([_unit, _vehicle] call EFUNC(common,canInteractWith)) exitWith {};

View File

@ -4,7 +4,7 @@ class ACE_Settings {
typeName = "BOOL";
isClientSettable = 1;
displayName = "$STR_ACE_Interact_Menu_AlwaysUseCursorSelfInteraction";
};
};
class GVAR(cursorKeepCentered) {
value = 0;
typeName = "BOOL";
@ -54,7 +54,7 @@ class ACE_Settings {
isClientSettable = 1;
displayName = "$STR_ACE_Interact_textSize";
values[] = {"$str_very_small", "$str_small", "$str_medium", "$str_large", "$str_very_large"};
};
};
class GVAR(shadowSetting) {
value = 2;
typeName = "SCALAR";
@ -69,4 +69,11 @@ class ACE_Settings {
isClientSettable = 1;
displayName = "$STR_ACE_Interact_Menu_ActionOnKeyRelease";
};
class GVAR(blurScreen) {
value = 0;
typeName = "BOOL";
isClientSettable = 1;
displayName = "$STR_ACE_Interact_Menu_blurScreen";
description = "$STR_ACE_Interact_Menu_blurScreenDesc";
};
};

View File

@ -62,3 +62,6 @@ addMissionEventHandler ["Draw3D", DFUNC(render)];
// disable firing while the interact menu is is is opened
["playerChanged", {_this call FUNC(handlePlayerChanged)}] call EFUNC(common,addEventHandler);
["interactMenuOpened", { if (GVAR(blurScreen)) then {[QGVAR(blurScreen), true] call EFUNC(common,blurScreen);}; }] call EFUNC(common,addEventHandler);
["interactMenuClosed", { if (GVAR(blurScreen)) then {[QGVAR(blurScreen), false] call EFUNC(common,blurScreen);}; }] call EFUNC(common,addEventHandler);

View File

@ -28,12 +28,12 @@ if !(isNil {missionNamespace getVariable [_actionsVarName, nil]}) exitWith {};
private "_recurseFnc";
_recurseFnc = {
private ["_actions", "_displayName", "_distance", "_icon", "_statement", "_position", "_condition", "_showDisabled", "_enableInside", "_canCollapse", "_runOnHover", "_children", "_entry", "_entryCfg", "_insertChildren", "_modifierFunction", "_i"];
private ["_actions", "_displayName", "_distance", "_icon", "_statement", "_position", "_condition", "_showDisabled", "_enableInside", "_canCollapse", "_runOnHover", "_children", "_entry", "_entryCfg", "_insertChildren", "_modifierFunction"];
EXPLODE_1_PVT(_this,_actionsCfg);
_actions = [];
for "_i" from 0 to (count _actionsCfg) - 1 do {
_entryCfg = _actionsCfg select _i;
{
_entryCfg = _x;
if(isClass _entryCfg) then {
_displayName = getText (_entryCfg >> "displayName");
_distance = getNumber (_entryCfg >> "distance");
@ -69,7 +69,12 @@ _recurseFnc = {
_showDisabled = (getNumber (_entryCfg >> "showDisabled")) > 0;
_enableInside = (getNumber (_entryCfg >> "enableInside")) > 0;
_canCollapse = (getNumber (_entryCfg >> "canCollapse")) > 0;
_runOnHover = (getNumber (_entryCfg >> "runOnHover")) > 0;
_runOnHover = false;
if (isText (_entryCfg >> "runOnHover")) then {
_runOnHover = compile getText (_entryCfg >> "runOnHover");
} else {
_runOnHover = (getNumber (_entryCfg >> "runOnHover")) > 0;
};
_condition = compile _condition;
_children = [_entryCfg] call _recurseFnc;
@ -92,7 +97,7 @@ _recurseFnc = {
];
_actions pushBack _entry;
};
};
} forEach (configProperties [_actionsCfg, "isClass _x", true]);
_actions
};

View File

@ -33,8 +33,8 @@ _recurseFnc = {
EXPLODE_1_PVT(_this,_actionsCfg);
_actions = [];
for "_i" from 0 to (count _actionsCfg) - 1 do {
_entryCfg = _actionsCfg select _i;
{
_entryCfg = _x;
if(isClass _entryCfg) then {
_displayName = getText (_entryCfg >> "displayName");
@ -53,7 +53,12 @@ _recurseFnc = {
_showDisabled = (getNumber (_entryCfg >> "showDisabled")) > 0;
_enableInside = (getNumber (_entryCfg >> "enableInside")) > 0;
_canCollapse = (getNumber (_entryCfg >> "canCollapse")) > 0;
_runOnHover = (getNumber (_entryCfg >> "runOnHover")) > 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;
@ -76,7 +81,7 @@ _recurseFnc = {
];
_actions pushBack _entry;
};
};
} forEach (configProperties [_actionsCfg, "isClass _x", true]);
_actions
};

View File

@ -89,7 +89,17 @@ if (GVAR(openedMenuType) >= 0) then {
// Execute the current action if it's run on hover
private "_runOnHover";
_runOnHover = ((GVAR(selectedAction) select 0) select 9) select 3;
_tmp = ((GVAR(selectedAction) select 0) select 9) select 3;
_runOnHover = true;
if ((typeName _tmp) == "CODE" ) then {
_runOnHover = call _tmp;
} else {
if ((typeName _tmp) == "BOOL" ) then {
_runOnHover = _tmp;
} else {
_runOnHover = _tmp > 0;
};
};
if (_runOnHover) then {
this = GVAR(selectedTarget);
_player = ACE_Player;

View File

@ -217,5 +217,11 @@
<Hungarian>Körvonal</Hungarian>
<Italian>Contorno</Italian>
</Key>
<Key ID="STR_ACE_Interact_Menu_blurScreen">
<English>Blur screen on interaction</English>
</Key>
<Key ID="STR_ACE_Interact_Menu_blurScreenDesc">
<English>Blur the background while the interaction menu is open.</English>
</Key>
</Package>
</Project>

View File

@ -1,7 +1,7 @@
class CfgVehicles {
class Module_F;
class ACE_ModuleInteraction: Module_F {
class ACE_Module;
class ACE_ModuleInteraction: ACE_Module {
author = "$STR_ACE_Common_ACETeam";
category = "ACE";
displayName = "$STR_ACE_InteractionSystem_Module_DisplayName";

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="Interaction">
<Key ID="STR_ACE_Interaction_MainAction">
@ -111,7 +111,7 @@
</Key>
<Key ID="STR_ACE_Interaction_InteractionMenuSelf">
<English>Interaction Menu (Self)</English>
<German>Interaktionsmenü (Selbst)</German>
<German>Interaktionsmenü (selbst)</German>
<Spanish>Menú de interacción (Propio)</Spanish>
<Polish>Menu interakcji (własne)</Polish>
<Czech>Menu interakce (vlastní)</Czech>
@ -495,7 +495,7 @@
</Key>
<Key ID="STR_ACE_Interaction_GetDown">
<English>Get Down!</English>
<German>Auf Den Boden!</German>
<German>Auf den Boden!</German>
<Spanish>Al suelo!</Spanish>
<Polish>Padnij!</Polish>
<Czech>K zemi!</Czech>
@ -507,7 +507,7 @@
</Key>
<Key ID="STR_ACE_Interaction_TeamManagement">
<English>Team Management</English>
<German>Team Management</German>
<German>Gruppenverwaltung</German>
<Spanish>Gestión de equipo</Spanish>
<French>Gestion d'équipe</French>
<Polish>Zarządzanie oddziałem</Polish>
@ -796,18 +796,25 @@
<Key ID="STR_ACE_InteractionSystem_Module_DisplayName">
<English>Interaction System</English>
<Polish>System interakcji</Polish>
<Spanish>Sistema de interacción</Spanish>
<German>Interaktionssystem</German>
</Key>
<Key ID="STR_ACE_InteractionSystem_EnableTeamManagement_DisplayName">
<English>Enable Team Management</English>
<Polish>Wł. zarządzanie drużyną</Polish>
<Spanish>Habilitar gestión de equipos</Spanish>
<German>Aktiviere Gruppenverwaltung</German>
</Key>
<Key ID="STR_ACE_InteractionSystem_EnableTeamManagement_Description">
<English>Should players be allowed to use the Team Management Menu? Default: Yes</English>
<Polish>Czy gracze mogą korzystać z menu zarządzania drużyną? Domyślnie: Tak</Polish>
<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>
</Key>
<Key ID="STR_ACE_InteractionSystem_Module_Description">
<English></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>
<German>Die Gruppenverwaltung erlaubt die Zuweisung von Farben für Einheiten, die Kommandierung und das Beitreten/Verlassen einer Gruppe.</German>
</Key>
</Package>
</Project>
</Project>

View File

@ -15,7 +15,7 @@
</Key>
<Key ID="STR_ACE_Inventory_SettingDescription">
<English>Normally inventory display is scaled by UI size. This allows scaling the Inventory UI size up, but doesn't increase font size allowing more rows displayed.</English>
<German>Im Regelfall wird die Inventargröße durch die Größe der Nutzeroberfläche bestimmt. Diese Einstellung erlaubt es das Inventar unter Ausschluss der Schriftgröße zu vergrößern. Dadurch können mehr Gegenstände angezeigt werden.</German>
<German>Im Regelfall wird die Inventargröße durch die Größe der Nutzeroberfläche bestimmt. Diese Einstellung erlaubt es, das Inventar unter Ausschluss der Schriftgröße zu vergrößern. Dadurch können mehr Gegenstände angezeigt werden.</German>
<Spanish>Normalmente la pantalla de inventario se escala por el tamaño de la interfaz de usuario. Esto permite ampliar el tamaño de la interfaz de usuario de inventario, pero no aumenta el tamaño de fuente, permitiendo mostrar más filas.</Spanish>
<Russian>Обычно, размер окна инвентаря зависит от размеров пользовательского интерфейса. Эта настройка позволяет увеличить размер окна инвентаря, не увеличивая размеры шрифтов, так что отображется большее количество строк.</Russian>
<Czech>Normálně se velikost invetáře škáluje s velikostí UI. Toto nastavení dovoluje škálování velikost inventáře ale nežvětšuje velikost fontu. To dovoluje zobrazení více řad v inventáři.</Czech>
@ -26,4 +26,4 @@
<Portuguese>Normalmente o tamanho da tela do inventário é ditada pelo tamanho da UI. Isso permite aumentar o tamanho da tela de inventário, mas não aumenta o tamanho da fonte, permitindo que mais linhas sejam visualizadas.</Portuguese>
</Key>
</Package>
</Project>
</Project>

View File

@ -2,10 +2,10 @@
#include "initKeybinds.sqf"
GVAR(Menus) = ["Date", "Direction", "Wind SPD m/s", "CROSSWIND m/s", "HEADWIND m/s", "TEMP °C", "CHILL °C", "HUMIDITY %", "HEAT INDEX °C", "DEW POINT °C", "WET BULB °C", "BARO hPA", "ALTITUDE m", "User Screen 1", "User Screen 2"];
GVAR(Menus) = ["Date", "Direction", "Wind SPD m/s", "CROSSWIND m/s", "HEADWIND m/s", "TEMP °C", "CHILL °C", "HUMIDITY %", "HEAT INDEX °C", "DEW POINT °C", "WET BULB °C", "BARO hPA", "ALTITUDE m", "DENS ALT m", "User Screen 1", "User Screen 2"];
GVAR(TOTAL) = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
GVAR(ENTRIES) = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
GVAR(TOTAL) = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
GVAR(ENTRIES) = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
GVAR(MinAvgMax) = false;
GVAR(MinAvgMaxMode) = 0;

View File

@ -14,26 +14,28 @@
*/
#include "script_component.hpp"
private ["_playerDir", "_playerAltitude", "_temperature", "_humidity", "_barometricPressure", "_altitude", "_chill", "_heatIndex", "_dewPoint", "_wetBulb", "_fnc_updateMemory", "_windSpeed", "_crosswind", "_headwind"];
private ["_playerDir", "_playerAltitude", "_temperature", "_humidity", "_barometricPressure", "_altitude", "_airDensity", "_densityAltitude", "_chill", "_heatIndex", "_dewPoint", "_wetBulb", "_fnc_updateMemory", "_windSpeed", "_crosswind", "_headwind"];
_playerDir = getDir ACE_player;
_playerAltitude = (getPosASL ACE_player) select 2;
_temperature = _playerAltitude call EFUNC(weather,calculateTemperatureAtHeight);
_humidity = EGVAR(weather,currentHumidity);
_barometricPressure = _playerAltitude call EFUNC(weather,calculateBarometricPressure);
_altitude = EGVAR(weather,Altitude) + _playerAltitude;
_airDensity = [_temperature, _barometricPressure, _humidity] call EFUNC(weather,calculateAirDensity);
_densityAltitude = _airDensity call EFUNC(weather,calculateDensityAltitude);
_chill = [_temperature, _humidity] call EFUNC(weather,calculateWindChill);
_heatIndex = [_temperature, _humidity] call EFUNC(weather,calculateHeatIndex);
_dewPoint = [_temperature, _humidity] call EFUNC(weather,calculateDewPoint);
_wetBulb = [_temperature, _barometricPressure, _humidity] call EFUNC(weather,calculateWetBulb);
if (isNil QGVAR(MIN) || isNil QGVAR(MAX)) then {
GVAR(MIN) = [0, _playerDir, 0, 0, 0, _temperature, _chill, _humidity, _heatIndex, _dewPoint, _wetBulb, _barometricPressure, _altitude];
GVAR(MAX) = [0, _playerDir, 0, 0, 0, _temperature, _chill, _humidity, _heatIndex, _dewPoint, _wetBulb, _barometricPressure, _altitude];
GVAR(MIN) = [0, _playerDir, 0, 0, 0, _temperature, _chill, _humidity, _heatIndex, _dewPoint, _wetBulb, _barometricPressure, _altitude, _densityAltitude];
GVAR(MAX) = [0, _playerDir, 0, 0, 0, _temperature, _chill, _humidity, _heatIndex, _dewPoint, _wetBulb, _barometricPressure, _altitude, _densityAltitude];
};
{
GVAR(ENTRIES) set [_x, (GVAR(ENTRIES) select _x) + 1];
} forEach [1, 5, 6, 7, 8, 9, 10, 11, 12];
} forEach [1, 5, 6, 7, 8, 9, 10, 11, 12, 13];
_fnc_updateMemory = {
PARAMS_2(_slot,_value);
@ -86,3 +88,4 @@ if (GVAR(MinAvgMaxMode) == 1) then {
[10, _wetBulb] call _fnc_updateMemory;
[11, _barometricPressure] call _fnc_updateMemory;
[12, _altitude] call _fnc_updateMemory;
[13, _densityAltitude] call _fnc_updateMemory;

View File

@ -16,7 +16,7 @@
if (ACE_diagTime - GVAR(headingSetDisplayTimer) < 0.8) exitWith {["", "", " Heading Set", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""]};
private ["_playerDir", "_playerAltitude", "_temperature", "_humidity", "_barometricPressure", "_chill", "_heatIndex", "_dewPoint", "_wetBulb", "_fnc_dayOfWeek", "_dayString", "_monthString", "_windSpeed", "_windDir", "_textTop", "_textCenterBig", "_textCenter", "_textCenterLine1Left", "_textCenterLine2Left", "_textCenterLine3Left", "_textCenterLine1Right", "_textCenterLine2Right", "_textCenterLine3Right", "_textInfoLine1", "_textInfoLine2", "_textBottomBig", "_textCenterLine1", "_textCenterLine2", "_textCenterLine3", "_textCenterLine4", "_textCenterLine5", "_textCenterLine6"];
private ["_playerDir", "_playerAltitude", "_temperature", "_humidity", "_barometricPressure", "_airDensity", "_densityAltitude", "_chill", "_heatIndex", "_dewPoint", "_wetBulb", "_fnc_dayOfWeek", "_dayString", "_monthString", "_windSpeed", "_windDir", "_textTop", "_textCenterBig", "_textCenter", "_textCenterLine1Left", "_textCenterLine2Left", "_textCenterLine3Left", "_textCenterLine1Right", "_textCenterLine2Right", "_textCenterLine3Right", "_textInfoLine1", "_textInfoLine2", "_textBottomBig", "_textCenterLine1", "_textCenterLine2", "_textCenterLine3", "_textCenterLine4", "_textCenterLine5", "_textCenterLine6"];
[] call FUNC(collectData);
@ -52,6 +52,8 @@ _playerAltitude = (getPosASL ACE_player) select 2;
_temperature = _playerAltitude call EFUNC(weather,calculateTemperatureAtHeight);
_humidity = EGVAR(weather,currentHumidity);
_barometricPressure = _playerAltitude call EFUNC(weather,calculateBarometricPressure);
_airDensity = [_temperature, _barometricPressure, _humidity] call EFUNC(weather,calculateAirDensity);
_densityAltitude = _airDensity call EFUNC(weather,calculateDensityAltitude);
_chill = [_temperature, _humidity] call EFUNC(weather,calculateWindChill);
_heatIndex = [_temperature, _humidity] call EFUNC(weather,calculateHeatIndex);
_dewPoint = [_temperature, _humidity] call EFUNC(weather,calculateDewPoint);
@ -284,7 +286,19 @@ if (GVAR(referenceHeadingMenu) == 0) then {
_textCenterLine3Right = Str(round(GVAR(Max) select 12));
};
};
case 13: { // User Screen 1
case 13: { // DENSITY ALTITUDE
if (!GVAR(MinAvgMax)) then {
_textCenterBig = Str(round(_densityAltitude));
} else {
_textCenterLine1Left = "Min";
_textCenterLine2Left = "Avg";
_textCenterLine3Left = "Max";
_textCenterLine1Right = Str(round(GVAR(Min) select 13));
_textCenterLine2Right = Str(round((GVAR(Total) select 13) / (GVAR(Entries) select 13)));
_textCenterLine3Right = Str(round(GVAR(Max) select 13));
};
};
case 14: { // User Screen 1
_textCenterLine1Left = Str(round(_playerDir));
_textCenterLine2Left = Str(round(EGVAR(weather,Altitude) + _playerAltitude));
_textCenterLine3Left = Str(round(abs(_windSpeed) * 10) / 10);
@ -292,7 +306,7 @@ if (GVAR(referenceHeadingMenu) == 0) then {
_textCenterLine2Right = "m";
_textCenterLine3Right = "m/s";
};
case 14: { // User Screen 2
case 15: { // User Screen 2
_textCenterLine1Left = Str(round(_temperature * 10) / 10);
_textCenterLine2Left = Str(round(_humidity * 100 * 10) / 10);
_textCenterLine3Left = Str(round((_playerAltitude call EFUNC(weather,calculateBarometricPressure)) * 10) / 10);

View File

@ -1,15 +1,25 @@
class CfgVehicles {
class Helicopter_Base_F;
class UAV_01_base_F: Helicopter_Base_F {
class Air;
class Helicopter: Air {
class ACE_Actions {
class ACE_MainActions {
class ACE_MainActions {};
};
};
class Helicopter_Base_F: Helicopter {
class ACE_Actions: ACE_Actions{
class ACE_MainActions: ACE_MainActions {};
};
};
class UAV_01_base_F: Helicopter_Base_F {
class ACE_Actions: ACE_Actions{
class ACE_MainActions: ACE_MainActions {
class GVAR(RefuelUAV) {
displayName = "$STR_ACE_logistics_uavbattery_Recharge";
distance = 4;
condition = QUOTE([ARR_2(_player, _target)] call FUNC(canRefuelUAV));
statement = QUOTE([ARR_2(_player, _target)] call FUNC(refuelUAV));
showDisabled = 0; \
priority = 1.245; \
showDisabled = 0;
priority = 1.245;
icon = QUOTE(PATHTOF(ui\UAV_battery_ca.paa));
};
};

View File

@ -76,7 +76,7 @@
<Key ID="STR_ACE_MagazineRepack_RepackComplete">
<English>Repacking Finished</English>
<French>Réorganisation terminée</French>
<German>Wiederverpacken Fertig</German>
<German>Wiederverpacken fertig</German>
<Spanish>Reorganización finalizada</Spanish>
<Russian>Перепаковка завершена</Russian>
<Czech>Páskování dokončeno</Czech>
@ -88,7 +88,7 @@
<Key ID="STR_ACE_MagazineRepack_RepackInterrupted">
<English>Repacking Interrupted</English>
<French>Réorganisation interrompue</French>
<German>Umpacken Unterbrochen</German>
<German>Umpacken unterbrochen</German>
<Spanish>Reorganización interrumpida</Spanish>
<Russian>Перепаковка прервана</Russian>
<Czech>Páskování přerušeno</Czech>
@ -110,4 +110,4 @@
<Portuguese>%1 Total e %2 Parcial </Portuguese>
</Key>
</Package>
</Project>
</Project>

View File

@ -1,6 +1,7 @@
class CfgVehicles {
class Module_F;
class ACE_ModuleMap: Module_F {
class ACE_Module;
class ACE_ModuleMap: ACE_Module {
author = "$STR_ACE_Common_ACETeam";
category = "ACE";
displayName = "$STR_ACE_Map_Module_DisplayName";
@ -39,6 +40,7 @@ class CfgVehicles {
};
};
class Module_F;
class ACE_ModuleBlueForceTracking: Module_F {
author = "$STR_ACE_Common_ACETeam";
category = "ACE";

View File

@ -4,66 +4,96 @@
<Key ID="STR_ACE_Map_Module_DisplayName">
<English>Map</English>
<Polish>Mapa</Polish>
<Spanish>Mapa</Spanish>
<German>Karte</German>
</Key>
<Key ID="STR_ACE_Map_MapIllumination_DisplayName">
<English>Map illumination?</English>
<Polish>Oświetlenie mapy</Polish>
<Spanish>¿Iluminación de mapa?</Spanish>
<German>Kartenausleuchtung</German>
</Key>
<Key ID="STR_ACE_Map_MapIllumination_Description">
<English>Calculate dynamic map illumination based on light conditions?</English>
<Polish>Oblicza dynamiczne oświetlenie mapy bazujące na warunkach oświetleniowych</Polish>
<Spanish>Calcula la iluminación dinámica del mapa basandose en las condiciones de luz</Spanish>
<German>Berechne die Kartenauslichtung anhand des Umgebungslichts?</German>
</Key>
<Key ID="STR_ACE_Map_MapShake_DisplayName">
<English>Map shake?</English>
<Polish>Drżenie mapy</Polish>
<Spanish>¿Temblor de mapa?</Spanish>
<German>Kamerawackeln</German>
</Key>
<Key ID="STR_ACE_Map_MapShake_Description">
<English>Make map shake when walking?</English>
<Polish>Ekran mapy drży podczas ruchu</Polish>
<Spanish>Hace que el mapa tiemble cuando caminas</Spanish>
<German>Kamerawackeln beim Gehen?</German>
</Key>
<Key ID="STR_ACE_Map_MapLimitZoom_DisplayName">
<English>Limit map zoom?</English>
<Polish>Ograniczony zoom</Polish>
<Spanish>¿Limitar el zoom de mapa?</Spanish>
<German>Kartenzoom einschränken</German>
</Key>
<Key ID="STR_ACE_Map_MapLimitZoom_Description">
<English>Limit the amount of zoom available for the map?</English>
<Polish>Ogranicza maksymalny stopień przybliżenia mapy</Polish>
<Spanish>Limita la cantidad de zoom disponible para el mapa</Spanish>
<German>Zoomstufe der Karte einschränken?</German>
</Key>
<Key ID="STR_ACE_Map_MapShowCursorCoordinates_DisplayName">
<English>Show cursor coordinates?</English>
<Polish>Koordynaty pod kursorem</Polish>
<Spanish>¿Mostrar coordenadas de cursor?</Spanish>
<German>Zeige Cursor-Koordinaten?</German>
</Key>
<Key ID="STR_ACE_Map_MapShowCursorCoordinates_Description">
<English>Show the grid coordinates on the mouse pointer?</English>
<Polish>Pokazuje pod kursorem koordynaty wskazanego kwadratu mapy</Polish>
<Spanish>Muestra las coordenadas de la cuadricula en el puntero del ratón</Spanish>
<German>Gitter-Koordinaten auf dem Mauszeiger anzeigen?</German>
</Key>
<Key ID="STR_ACE_Map_Module_Description">
<English></English>
<Polish>Moduł ten pozwala dostosować opcje widoku ekranu mapy.</Polish>
<German>Dieses Modul erweitert die Kartenfunktionen.</German>
</Key>
<Key ID="STR_ACE_Map_BFT_Module_DisplayName">
<English>Blue Force Tracking</English>
<Polish>Blue Force Tracking</Polish>
<Spanish>Seguimiento de fuerzas amigas</Spanish>
<German>Blue Force Tracking</German>
</Key>
<Key ID="STR_ACE_Map_BFT_Interval_DisplayName">
<English>Interval</English>
<Polish>Interwał</Polish>
<Spanish>Intervalo</Spanish>
<German>Intervall</German>
</Key>
<Key ID="STR_ACE_Map_BFT_Interval_Description">
<English>How often the markers should be refreshed (in seconds)</English>
<Polish>Jak często markery powinny być odświeżane (w sekundach)</Polish>
<Spanish>Frecuencia de actualización de los marcadores (en segundos)</Spanish>
<German>Wie oft sollen die Markierungen aktualisiert werden (in Sekunden)</German>
</Key>
<Key ID="STR_ACE_Map_BFT_HideAiGroups_DisplayName">
<English>Hide AI groups?</English>
<Polish>Ukryj grupy AI</Polish>
<Spanish>¿Ocultar grupos de IA?</Spanish>
<German>KI-Gruppen verstecken?</German>
</Key>
<Key ID="STR_ACE_Map_BFT_HideAiGroups_Description">
<English>Hide markers for 'AI only' groups?</English>
<Polish>Ukrywa markery dla grup złożonych tylko z AI</Polish>
<Spanish>Oculta las marcas de grupos 'solo IA'</Spanish>
<German>Verstecke Marker für "nur KI"-Gruppen?</German>
</Key>
<Key ID="STR_ACE_Map_BFT_Module_Description">
<English></English>
<Polish>Pozwala śledzić na mapie pozycje sojuszniczych jednostek za pomocą markerów BFT.</Polish>
<German>Dieses Modul ermöglicht es verbündete Einheiten mit dem BFT auf der Karte zu verfolgen.</German>
</Key>
</Package>
</Project>
</Project>

View File

@ -66,7 +66,7 @@ class ACE_Medical_Actions {
displayNameProgress = "$STR_ACE_Medical_PlacingInBodyBag";
treatmentLocations[] = {"All"};
requiredMedic = 0;
treatmentTime = 2;
treatmentTime = 4;
items[] = {"ACE_bodyBag"};
condition = "!alive (_this select 1);";
callbackSuccess = QUOTE(DFUNC(actionPlaceInBodyBag));
@ -206,8 +206,9 @@ class ACE_Medical_Actions {
items[] = {"ACE_surgicalKit"};
treatmentLocations[] = {QGVAR(useLocation_SurgicalKit)};
requiredMedic = QGVAR(medicSetting_SurgicalKit);
treatmentTime = 10;
callbackSuccess = QUOTE(DFUNC(treatmentAdvanced_surgicalKit));
treatmentTime = "(count ((_this select 1) getVariable ['ACE_Medical_bandagedWounds', []]) * 5)";
callbackSuccess = "";
callbackProgress = QUOTE(DFUNC(treatmentAdvanced_surgicalKit_onProgress));
itemConsumed = QGVAR(consumeItem_SurgicalKit);
animationCaller = "AinvPknlMstpSnonWnonDnon_medic1";
litter[] = { {"All", "", {"ACE_MedicalLitter_gloves"} }};

View File

@ -156,7 +156,7 @@ class CfgWeapons {
class ACE_salineIV_500: ACE_salineIV {
displayName = $STR_ACE_Medical_Saline_IV_500;
class ItemInfo: InventoryItem_Base_F {
mass = 2.5;
mass = 5;
};
};
class ACE_salineIV_250: ACE_salineIV {

View File

@ -78,6 +78,7 @@ PREP(treatmentAdvanced_fullHeal);
PREP(treatmentAdvanced_fullHealLocal);
PREP(treatmentAdvanced_medication);
PREP(treatmentAdvanced_medicationLocal);
PREP(treatmentAdvanced_surgicalKit_onProgress);
PREP(treatmentBasic_bandage);
PREP(treatmentBasic_bloodbag);
PREP(treatmentBasic_bloodbagLocal);

View File

@ -5,7 +5,7 @@ class CfgPatches {
units[] = {"ACE_medicalSupplyCrate", "ACE_medicalSupplyCrate_advanced", "ACE_fieldDressingItem", "ACE_packingBandageItem", "ACE_elasticBandageItem", "ACE_tourniquetItem", "ACE_morphineItem", "ACE_atropineItem", "ACE_epinephrineItem", "ACE_plasmaIVItem", "ACE_bloodIVItem", "ACE_salineIVItem", "ACE_quikclotItem", "ACE_personalAidKitItem", "ACE_surgicalKitItem", "ACE_bodyBagItem", "ACE_bodyBagObject"};
weapons[] = {"ACE_fieldDressing", "ACE_packingBandage", "ACE_elasticBandage", "ACE_tourniquet", "ACE_morphine", "ACE_atropine", "ACE_epinephrine", "ACE_plasmaIV", "ACE_plasmaIV_500", "ACE_plasmaIV_250", "ACE_bloodIV", "ACE_bloodIV_500", "ACE_bloodIV_250", "ACE_salineIV", "ACE_salineIV_500", "ACE_salineIV_250", "ACE_quikclot", "ACE_personalAidKit", "ACE_surgicalKit", "ACE_bodyBag"};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_interaction","ace_modules", "ace_apl"};
requiredAddons[] = {"ace_interaction", "ace_apl"};
author[] = {"Glowbal", "KoffeinFlummi"};
authorUrl = "";
VERSION_CONFIG;
@ -21,3 +21,7 @@ class CfgPatches {
#include "ACE_Settings.hpp"
#include "UI\RscTitles.hpp"
#include "UI\triagecard.hpp"
class ACE_Extensions {
extensions[] += {"ace_medical"};
};

View File

@ -1,31 +1,40 @@
/*
* Author: Glowbal
* Replace a dead body by a bodybag
* Replace a (dead) body by a body bag
*
* Arguments:
* 0: The patient <OBJECT>
* 1: The new item classname <STRING>
* 0: The actor <OBJECT>
* 1: The patient <OBJECT>
*
* Return Value:
* nil
* body bag <OBJECT>
*
* Public: Yes
*/
#include "script_component.hpp"
private ["_target","_caller", "_nameOfUnit", "_onPosition", "_bodyBagCreated"];
_caller = _this select 0;
_target = _this select 1;
PARAMS_2(_caller,_target);
private ["_position", "_headPos", "_spinePos", "_dirVect", "_direction", "_bodyBag"];
_nameOfUnit = [_target] call EFUNC(common,getName);
if (alive _target) then {
[_target, true] call FUNC(setDead);
};
_onPosition = getPos _target;
deleteVehicle _target;
_bodyBagCreated = createVehicle ["ACE_bodyBagObject", _onPosition, [], 0, "NONE"];
// reset the position to ensure it is on the correct one.
_bodyBagCreated setPos [_onPosition select 0, _onPosition select 1, (_onPosition select 2) + 0.2];
_bodyBagCreated;
_position = (getPosASL _target) vectorAdd [0, 0, 0.2];
_headPos = _target modelToWorldVisual (_target selectionPosition "head");
_spinePos = _target modelToWorldVisual (_target selectionPosition "Spine3");
_dirVect = _headPos vectorFromTo _spinePos;
_direction = _dirVect call CBA_fnc_vectDir;
deleteVehicle _target;
_bodyBag = createVehicle ["ACE_bodyBagObject", _position, [], 0, "CAN_COLLIDE"];
// prevent body bag from flipping
_bodyBag setPosASL _position;
_bodyBag setDir _direction;
_bodyBag

View File

@ -22,12 +22,6 @@ _drag = if (count _this > 2) then {_this select 2} else {false};
// cannot unload a unit not in a vehicle.
if (vehicle _target == _target) exitwith {};
if (([_target] call cse_fnc_isAwake)) exitwith {};
if (([_target] call EFUNC(common,isAwake))) exitwith {};
if ([_target] call EFUNC(common,unloadPerson)) then {
if (_drag) then {
if ((vehicle _caller) == _caller) then {
[[_caller, _target, true], QUOTE(DFUNC(actionDragUnit)), _caller, false] call EFUNC(common,execRemoteFnc); // TODO replace by event
};
};
};
[_target] call EFUNC(common,unloadPerson)

View File

@ -24,120 +24,43 @@ _damage = _this select 2;
_typeOfProjectile = _this select 3;
_typeOfDamage = _this select 4;
// Convert the selectionName to a number and ensure it is a valid selection.
_bodyPartn = [_selectionName] call FUNC(selectionNameToNumber);
if (_bodyPartn < 0) exitwith {};
// Get the injury type information. Format: [typeDamage thresholds, selectionSpecific, woundTypes]
_injuryTypeInfo = missionNamespace getvariable [format[QGVAR(woundInjuryType_%1), _typeOfDamage],[[], false, []]];
// This are the available injuries for this damage type. Format [[classtype, selections, bloodloss, minimalDamage, pain], ..]
_allInjuriesForDamageType = _injuryTypeInfo select 2;
// It appears we are dealing with an unknown type of damage.
if (count _allInjuriesForDamageType == 0) then {
// grabbing the configuration for unknown damage type
_injuryTypeInfo = missionNamespace getvariable [QGVAR(woundInjuryType_unknown),[[], false, []]];
_allInjuriesForDamageType = _injuryTypeInfo select 2;
};
// find the available injuries for this damage type and damage amount
_highestPossibleSpot = -1;
_highestPossibleDamage = -1;
_allPossibleInjuries = [];
{
_damageLevels = _x select 4;
_minDamage = _damageLevels select 0;
_maxDamage = _damageLevels select 1;
// Check if the damage is higher as the min damage for the specific injury
if (_damage >= _minDamage && {_damage <= _maxDamage || _maxDamage < 0}) then {
//_classType = _x select 0;
_selections = _x select 1;
//_bloodLoss = _x select 2;
//_pain = _x select 3;
// Check if the injury can be applied to the given selection name
if ("All" in _selections || _selectionName in _selections) then {
// Find the wound which has the highest minimal damage, so we can use this later on for adding the correct injuries
if (_minDamage > _highestPossibleDamage) then {
_highestPossibleSpot = _foreachIndex;
_highestPossibleDamage = _minDamage;
};
// Store the valid possible injury for the damage type, damage amount and selection
_allPossibleInjuries pushback _x;
};
};
}foreach _allInjuriesForDamageType;
// No possible wounds available for this damage type or damage amount.
if (_highestPossibleSpot < 0) exitwith {};
// Administration for open wounds and ids
_openWounds = _unit getvariable[QGVAR(openWounds), []];
_woundID = _unit getvariable[QGVAR(lastUniqueWoundID), 1];
_extensionOutput = "ace_medical" callExtension format ["HandleDamageWounds,%1,%2,%3,%4", _selectionName, _damage, _typeOfDamage, _woundID];
_painToAdd = 0;
_woundsCreated = [];
call compile _extensionOutput;
_foundIndex = -1;
{
if (_x select 0 <= _damage) exitwith {
for "_i" from 0 to (1+ floor(random(_x select 1)-1)) /* step +1 */ do {
// Find the injury we are going to add. Format [ classID, allowdSelections, bloodloss, painOfInjury, minimalDamage]
_toAddInjury = if (random(1) >= 0.85) then {_allInjuriesForDamageType select _highestPossibleSpot} else {_allPossibleInjuries select (floor(random (count _allPossibleInjuries)));};
_toAddClassID = _toAddInjury select 0;
_foundIndex = -1;
_bodyPartNToAdd = if (_injuryTypeInfo select 1) then {_bodyPartn} else {floor(random(6))};
// If the injury type is selection part specific, we will check if one of those injury types already exists and find the spot for it..
if ((_injuryTypeInfo select 1)) then {
{
// Check if we have an id of the given class on the given bodypart already
if (_x select 1 == _toAddClassID && {_x select 2 == _bodyPartNToAdd}) exitwith {
_foundIndex = _foreachIndex;
};
}foreach _openWounds;
};
_injury = [];
if (_foundIndex < 0) then {
// Create a new injury. Format [ID, classID, bodypart, percentage treated, bloodloss rate]
_injury = [_woundID, _toAddInjury select 0, _bodyPartNToAdd, 1, _toAddInjury select 2];
// Since it is a new injury, we will have to add it to the open wounds array to store it
_openWounds pushback _injury;
// New injuries will also increase the wound ID
_woundID = _woundID + 1;
} else {
// We already have one of these, so we are just going to increase the number that we have of it with a new one.
_injury = _openWounds select _foundIndex;
_injury set [3, (_injury select 3) + 1];
};
// Store the injury so we can process it later correctly.
_woundsCreated pushback _injury;
// Collect the pain that is caused by this injury
_painToAdd = _painToAdd + (_toAddInjury select 3);
_toAddClassID = _x select 1;
_bodyPartNToAdd = _x select 2;
{
// Check if we have an id of the given class on the given bodypart already
if (_x select 1 == _toAddClassID && {_x select 2 == _bodyPartNToAdd}) exitwith {
_foundIndex = _foreachIndex;
};
};
}foreach (_injuryTypeInfo select 0); // foreach damage thresholds
}foreach _openWounds;
_unit setvariable [QGVAR(openWounds), _openWounds, !USE_WOUND_EVENT_SYNC];
if (_foundIndex < 0) then {
// Since it is a new injury, we will have to add it to the open wounds array to store it
_openWounds pushback _x;
} else {
// We already have one of these, so we are just going to increase the number that we have of it with a new one.
_injury = _openWounds select _foundIndex;
_injury set [3, (_injury select 3) + 1];
};
}foreach _woundsCreated;
_unit setvariable [QGVAR(openWounds), _openWounds, true];
// Only update if new wounds have been created
if (count _woundsCreated > 0) then {
_unit setvariable [QGVAR(lastUniqueWoundID), _woundID, true];
};
if (USE_WOUND_EVENT_SYNC) then {
// Broadcast the new injuries across the net in parts. One broadcast per injury. Prevents having to broadcast one massive array of injuries.
{
["medical_propagateWound", [_unit, _x]] call EFUNC(common,globalEvent);
}foreach _woundsCreated;
};
_painLevel = _unit getvariable [QGVAR(pain), 0];
_unit setvariable [QGVAR(pain), _painLevel + _painToAdd];

View File

@ -118,4 +118,58 @@ _selectionSpecific = getNumber(_damageTypesConfig >> "selectionSpecific");
if (isNumber(_damageTypesConfig >> _x >> "selectionSpecific")) then { _selectionSpecificType = getNumber(_damageTypesConfig >> _x >> "selectionSpecific");};
};
missionNamespace setvariable [_varName, [_typeThresholds, _selectionSpecificType > 0, _woundTypes]];
private ["_minDamageThresholds", "_amountThresholds"];
// extension loading
_minDamageThresholds = "";
_amountThresholds = "";
{
_minDamageThresholds = _minDamageThresholds + str(_x select 0);
_amountThresholds = _amountThresholds + str(_x select 1);
if (_forEachIndex < (count _typeThresholds) - 1) then {
_minDamageThresholds = _minDamageThresholds + ":";
_amountThresholds = _amountThresholds + ":";
};
}foreach _typeThresholds;
"ace_medical" callExtension format ["addDamageType,%1,%2,%3,%4,%5", _type, GVAR(minLethalDamages) select _foreachIndex, _minDamageThresholds, _amountThresholds, _selectionSpecificType];
}foreach _allFoundDamageTypes;
// Extension loading
{
private ["_classID", "_className", "_allowedSelections", "_bloodLoss", "_pain", "_minDamage", "_maxDamage", "_causes", "_classDisplayName", "_extensionInput", "_selections", "_causesArray"];
// add shit to addInjuryType
_classID = _x select 0;
_className = GVAR(woundClassNames) select _forEachIndex;
_allowedSelections = "";
_selections = _x select 1;
{
_allowedSelections = _allowedSelections + _x;
if (_forEachIndex < (count _selections) - 1) then {
_allowedSelections = _allowedSelections + ":";
};
}foreach _selections;
_bloodLoss = _x select 2;
_pain = _x select 3;
_minDamage = (_x select 4) select 0;
_maxDamage = (_x select 4) select 1;
_causes = "";
_causesArray = (_x select 5);
{
_causes = _causes + _x;
if (_forEachIndex < (count _causesArray) - 1) then {
_causes = _causes + ":";
};
}foreach _causesArray;
_classDisplayName = _x select 6;
"ace_medical" callExtension format["addInjuryType,%1,%2,%3,%4,%5,%6,%7,%8,%9", _classID, _className, _allowedSelections, _bloodLoss, _pain, _minDamage, _maxDamage, _causes, _classDisplayName];
}foreach _allWoundClasses;
"ace_medical" callExtension "ConfigComplete";

View File

@ -16,7 +16,7 @@
#include "script_component.hpp"
private ["_caller", "_target", "_selectionName", "_className", "_config", "_medicRequired", "_items", "_locations", "_return", "_callbackProgress", "_treatmentTime", "_callerAnim", "_patientAnim", "_iconDisplayed", "_return", "_usersOfItems", "_consumeItems", "_condition", "_displayText", "_wpn"];
private ["_caller", "_target", "_selectionName", "_className", "_config", "_medicRequired", "_items", "_locations", "_return", "_callbackProgress", "_treatmentTime", "_callerAnim", "_patientAnim", "_iconDisplayed", "_return", "_usersOfItems", "_consumeItems", "_condition", "_displayText", "_wpn", "_treatmentTimeConfig"];
_caller = _this select 0;
_target = _this select 1;
_selectionName = _this select 2;
@ -26,7 +26,7 @@ _className = _this select 3;
if (uiNamespace getVariable [QEGVAR(interact_menu,cursorMenuOpened),false]) exitwith {
[{
_this call FUNC(treatment);
}, _this, 0, 0] call EFUNC(common,waitAndExecute);
}, _this] call EFUNC(common,execNextFrame);
};
if !(_target isKindOf "CAManBase") exitWith {false};
@ -174,8 +174,26 @@ if (vehicle _caller == _caller && {_callerAnim != ""}) then {
[_caller, _callerAnim] call EFUNC(common,doAnimation);
};
//Get treatment time
_treatmentTime = if (isNumber (_config >> "treatmentTime")) then {
getNumber (_config >> "treatmentTime");
} else {
if (isText (_config >> "treatmentTime")) exitwith {
_treatmentTimeConfig = getText(_config >> "treatmentTime");
if (isnil _treatmentTimeConfig) then {
_treatmentTimeConfig = compile _treatmentTimeConfig;
} else {
_treatmentTimeConfig = missionNamespace getvariable _treatmentTimeConfig;
};
if (typeName _treatmentTimeConfig == "SCALAR") exitwith {
_treatmentTimeConfig;
};
[_caller, _target, _selectionName, _className] call _treatmentTimeConfig;
};
0;
};
// Start treatment
_treatmentTime = getNumber (_config >> "treatmentTime");
[
_treatmentTime,
[_caller, _target, _selectionName, _className, _items, _usersOfItems],

View File

@ -0,0 +1,28 @@
/*
* Author: BaerMitUmlaut
* Handles treatment via surgical kit per frame.
*
* Public: No
*/
#include "script_component.hpp"
private ["_args", "_target", "_caller", "_elapsedTime", "_totalTime", "_bandagedWounds"];
_args = _this select 0;
_caller = _args select 0;
_target = _args select 1;
_elapsedTime = _this select 1;
_totalTime = _this select 2;
_bandagedWounds = _target getVariable [QGVAR(bandagedWounds), []];
//In case two people stitch up one patient and the last wound has already been closed we can stop already
if (count _bandagedWounds == 0) exitWith {false};
//Has enough time elapsed that we can close another wound?
if ((_totalTime - _elapsedTime) <= (((count _bandagedWounds) - 1) * 5)) then {
_bandagedWounds deleteAt 0;
_target setVariable [QGVAR(bandagedWounds), _bandagedWounds, true];
};
true

View File

@ -44,7 +44,7 @@
<Russian>Устанавливает количество мусора, который появляется после использования мед. препаратов. Большое количество мусора может уменьшить производительность, поэтому данная настройка локальна для клиента.</Russian>
<Italian>Il livello di dettagli della simulazione dei rifiuti indica il numero di rifiuti che verranno creati localmente nel client. La creazione di troppi rifiuti in aree locali potrebbe causare lag e calo di FPS. Questo è un settaggio client.</Italian>
<French>Le niveau de simulation des détritus règle la quantité de déchets qui vont être créés localement chez le client. Des quantitées excessive chez certains clients peuvent causer des chutes de FPS, c'est donc une option client uniquement.</French>
<German>Die Einstellung für das Abfall-Detaillevel stellt die Menge der lokal erzeugten medizinischen Abfälle ein. Zuviel erzeugte Abfälle können FPS-Lags erzeugen, deswegen ist diese Einstellung nur clientseitig.</German>
<German>Die Einstellung für das Abfall-Detaillevel stellt die Menge der lokal erzeugten medizinischen Abfälle ein. Zuviel erzeugte Abfälle können FPS-Einbrüche erzeugen, deswegen ist diese Einstellung nur clientseitig.</German>
<Hungarian>A hulladékszimuláció részletessége megszabja a kliens által megjelenített hulladékobjektumok mennyiségét. Súlyos mennyiségek izolált területeken alacsony FPS-t okozhatnak, így ez egy kliensoldali beállítás.</Hungarian>
<Portuguese>O nível de detalhe de sujeira determina o número de itens que irão aparecer no cliente. Quantidades excessivas em áreas locais podem aumentar o lag do FPS, então esta é uma opção somente para o cliente.</Portuguese>
<Czech>Počet zobrazených předmětů po použití zdravotnického materiálu ovlivňuje počet objektů, které budou zobrazeny klientovi v místě použití zdravotnického materiálu. Vyšší množství objektů může způsobovat poklesy FPS a proto je toto nastavení čistě na klientovi.</Czech>
@ -111,7 +111,7 @@
</Key>
<Key ID="STR_ACE_Medical_Transfuse_Saline">
<English>Transfuse Saline</English>
<German>Salzlösungtransfusion</German>
<German>Salzlösungstransfusion</German>
<Spanish>Transfundir salino</Spanish>
<Czech>Transfúze fyziologický roztoku</Czech>
<Polish>Przetocz sól fizjologiczną</Polish>
@ -171,7 +171,7 @@
</Key>
<Key ID="STR_ACE_Medical_Bandage_HitLeftArm">
<English>Bandage Left Arm</English>
<German>Arm links verbinden</German>
<German>Linken Arm verbinden</German>
<Spanish>Vendar el brazo izquierdo</Spanish>
<Polish>Bandażuj lewe ramię</Polish>
<Czech>Obvázat levou ruku</Czech>
@ -183,7 +183,7 @@
</Key>
<Key ID="STR_ACE_Medical_Bandage_HitRightArm">
<English>Bandage Right Arm</English>
<German>Arm rechts verbinden</German>
<German>Rechten Arm verbinden</German>
<Spanish>Vendar el brazo derecho</Spanish>
<Polish>Bandażuj prawe ramię</Polish>
<Czech>Obvázat pravou ruku</Czech>
@ -195,7 +195,7 @@
</Key>
<Key ID="STR_ACE_Medical_Bandage_HitLeftLeg">
<English>Bandage Left Leg</English>
<German>Bein links verbinden</German>
<German>Linkes Bein verbinden</German>
<Spanish>Vendar la pierna izquierda</Spanish>
<Polish>Bandażuj lewą nogę</Polish>
<Czech>Obvázat levou nohu</Czech>
@ -207,7 +207,7 @@
</Key>
<Key ID="STR_ACE_Medical_Bandage_HitRightLeg">
<English>Bandage Right Leg</English>
<German>Bein rechts verbinden</German>
<German>Rechtes Bein verbinden</German>
<Spanish>Vendar la pierna derecha</Spanish>
<Polish>Bandażuj prawą nogę</Polish>
<Czech>Obvázat pravou nohu</Czech>
@ -267,7 +267,7 @@
</Key>
<Key ID="STR_ACE_Medical_Transfusing_Saline">
<English>Transfusing Saline ...</English>
<German>Sallösungtransfusion ...</German>
<German>Salzlösungtransfusion ...</German>
<Spanish>Transfusión de salino ...</Spanish>
<Czech>Probíha transfúze fyziologický roztoku ...</Czech>
<Polish>Przetaczanie soli fizjologicznej ...</Polish>
@ -787,7 +787,7 @@
<Spanish>Utilizado para cubrir una herida</Spanish>
<French>Utilisé pour couvrir une blessure</French>
<Polish>Używany w celu przykrycia i ochrony miejsca zranienia</Polish>
<German>Verwendet, um Wunden abzudecken</German>
<German>Verwendet um Wunden abzudecken</German>
<Hungarian>Sebesülések befedésére alkalmas</Hungarian>
<Italian>Usato per coprire una ferita</Italian>
<Portuguese>Usado para cobrir um ferimento</Portuguese>
@ -915,7 +915,7 @@
</Key>
<Key ID="STR_ACE_Medical_Morphine_Display">
<English>Morphine autoinjector</English>
<German>Morphium Autoinjektor</German>
<German>Morphium-Autoinjektor</German>
<Russian>Морфин в пневмошприце</Russian>
<Spanish>Morfina auto-inyectable</Spanish>
<French>Auto-injecteur de Morphine</French>
@ -955,7 +955,7 @@
<Spanish>Atropina auto-inyectable</Spanish>
<French>Auto-injecteur d'Atropine</French>
<Polish>Autostrzykawka AtroPen</Polish>
<German>Atropin Autoinjektor</German>
<German>Atropin-Autoinjektor</German>
<Czech>Autoinjektor atropin</Czech>
<Hungarian>Atropin autoinjektor</Hungarian>
<Italian>Autoiniettore di atropina</Italian>
@ -967,7 +967,7 @@
<Spanish>Usado en escenarios NBQ</Spanish>
<French>Utilisé en cas d'attaque CBRN</French>
<Polish>Atropina. Stosowana jako lek rozkurczowy i środek rozszerzający źrenice.</Polish>
<German>Verwendet bei ABC Kontamination</German>
<German>Verwendet bei ABC-Kontamination</German>
<Hungarian>NBK helyzetek esetén használandó</Hungarian>
<Italian>Usato in situazioni con gas nervino.</Italian>
<Portuguese>Usado em casos de ataque QBRN</Portuguese>
@ -979,7 +979,7 @@
<Spanish>Medicamento usado por militares en escenarios NBQ</Spanish>
<French>Médicament utilisé par l'armée en cas d'attaque CBRN</French>
<Polish>Atropina. Stosowana jako lek rozkurczowy i środek rozszerzający źrenice. Środek stosowany w przypadku zagrożeń NBC.</Polish>
<German>Ein Medikament, das vom Militär bei ABC Kontamination verwendet wird.</German>
<German>Ein Medikament, das vom Militär bei ABC-Kontamination verwendet wird.</German>
<Hungarian>Egy instabil alkaloid, NBK helyzetek esetén a katonai szervezetek veszik használatba.</Hungarian>
<Italian>E' un farmaco usato in ambito militare in scenari con presenza di gas nervino.</Italian>
<Portuguese>Uma droga usada por militares em casos de ataque QBRN.</Portuguese>
@ -991,7 +991,7 @@
<Spanish>Epinefrina auto-inyectable</Spanish>
<French>Auto-injecteur d'épinéphrine</French>
<Polish>Autostrzykawka EpiPen</Polish>
<German>Epiniphrin Autoinjektor</German>
<German>Epiniphrin-Autoinjektor</German>
<Czech>Autoinjektor adrenalin</Czech>
<Hungarian>Epinefrin autoinjektor</Hungarian>
<Italian>Autoiniettore di epinefrina</Italian>
@ -1016,7 +1016,7 @@
<French>Medicament qui fonctionne sur le système nerveux sympathique créant une dilatation des bronches, augmente la fréquence cardiaque et annule les effets d'une réaction allergique (anaphylaxie). Utilisé lors d'arrêt cardio-respiratoire pour augmenter les chances de retrouver un pouls.</French>
<Polish>EpiPen z adrenaliną ma działanie sympatykomimetyczne, tj. pobudza receptory alfa- i beta-adrenergiczne. Pobudzenie układu współczulnego prowadzi do zwiększenia częstotliwości pracy serca, zwiększenia pojemności wyrzutowej serca i przyśpieszenia krążenia wieńcowego. Pobudzenie oskrzelowych receptorów beta-adrenergicznych wywołuje rozkurcz mięśni gładkich oskrzeli, co w efekcie zmniejsza towarzyszące oddychaniu świsty i duszności.</Polish>
<Italian>Una sostanza che permette di dilatare i bronchi, aumentare il battito cardiaco e combattere effetti di reazioni allergiche. Usato anche in casi di arresto cardiaco.</Italian>
<German>Ein Medikament, dass die Bronchien erweitert, die Herzfrequenz erhöht und Symptome von allergischen Reaktionen(Anaphylaxie) bekämpft. Wird bei plötzlichem Herzstillstand verabreicht.</German>
<German>Ein Medikament, das die Bronchien erweitert, die Herzfrequenz erhöht und Symptome von allergischen Reaktionen(Anaphylaxie) bekämpft. Wird bei plötzlichem Herzstillstand verabreicht.</German>
<Portuguese>Uma droga trabalha dilatando os bronquios, aumentando a frequência cardíaca e combate efeitos de reações alérgicas(anáfilaticas). Usado em casos de parada cardiaca com poucas changes de recuperação.</Portuguese>
<Hungarian>Egy hormon, mely a szimpatikus idegrendszer által kitágítja a hörgőket, valamint megnöveli a szívverést, ezzel ellensúlyozva ilyen jellegű allergiás reakciókat (anafilaxiás sokk). Hirtelen szívmegállás esetén is használt, idő alatt csökkenő hatásfokkal.</Hungarian>
<Czech>Zúžení periferních cév díky působení na alfa receptory a následné kontrakci hladkých svalů, tím dochází k tzv. centralizaci oběhu, krev se soustřeďuje v životně důležitých centrálních orgánech (srdce, mozek, plíce), působí také pozitivně na srdeční činnost a dochází ke zvýšení krevního tlaku a tepu. Dále se používá při náhlé srdeční zástavě.</Czech>
@ -2704,366 +2704,546 @@
<Key ID="STR_ACE_Medical_Category_DisplayName">
<English>ACE Medical</English>
<Polish>ACE Opcje medyczne</Polish>
<Spanish>Médico ACE</Spanish>
<German>ACE-Medicsystem</German>
</Key>
<Key ID="STR_ACE_MedicalSettings_Module_DisplayName">
<English>Medical Settings [ACE]</English>
<Polish>Ustawienia medyczne [ACE]</Polish>
<Spanish>Ajustes médicos [ACE]</Spanish>
<German>Medizinische Einstellungen [ACE]</German>
</Key>
<Key ID="STR_ACE_MedicalSettings_level_DisplayName">
<English>Medical Level</English>
<Polish>Poziom medyczny</Polish>
<Spanish>Nivel médico</Spanish>
<German>Medizinisches Level</German>
</Key>
<Key ID="STR_ACE_MedicalSettings_level_Description">
<English>What is the medical simulation level?</English>
<Polish>Jaki jest poziom symulacji medycznej?</Polish>
<Spanish>¿Cuál es el nivel de simulación médica?</Spanish>
<German>Wie hoch soll das medizinische Simulationslevel sein?</German>
</Key>
<Key ID="STR_ACE_MedicalSettings_basic">
<English>Basic</English>
<Polish>Podstawowy</Polish>
<Spanish>Básico</Spanish>
<German>Standard</German>
</Key>
<Key ID="STR_ACE_MedicalSettings_advanced">
<English>Advanced</English>
<Polish>Zaawansowany</Polish>
<Spanish>Avanzado</Spanish>
<German>Erweitert</German>
</Key>
<Key ID="STR_ACE_MedicalSettings_medicSetting_DisplayName">
<English>Medics setting</English>
<Polish>Poziom medyków</Polish>
<Spanish>Configuración médica</Spanish>
<German>Medizinische Einstellungen</German>
</Key>
<Key ID="STR_ACE_MedicalSettings_medicSetting_Description">
<English>What is the level of detail prefered for medics?</English>
<Polish>Jaki jest poziom detali medycznych wyświetlanych dla medyków?</Polish>
<Spanish>¿Cuál es el nivel de detalle preferido para los médicos?</Spanish>
</Key>
<Key ID="STR_ACE_MedicalSettings_medicSetting_disable">
<English>Disable medics</English>
<Polish>Wyłącz medyków</Polish>
<Spanish>Desactivar médicos</Spanish>
<German>Sanitäter deaktivieren</German>
</Key>
<Key ID="STR_ACE_MedicalSettings_allowLitterCreation_DisplayName">
<English>Enable Litter</English>
<Polish>Aktywuj odpadki</Polish>
<Spanish>Activar restos médicos</Spanish>
<German>Abfälle aktivieren</German>
</Key>
<Key ID="STR_ACE_MedicalSettings_allowLitterCreation_Description">
<English>Enable litter being created upon treatment</English>
<Polish>Twórz odpadki medyczne podczas leczenia</Polish>
<Spanish>Activar los restos médicos que se crean en el tratamiento</Spanish>
<German>Aktiviere Abfälle, wenn eine Behandlung durchgeführt wurde</German>
</Key>
<Key ID="STR_ACE_MedicalSettings_litterCleanUpDelay_DisplayName">
<English>Life time of litter objects</English>
<Polish>Długość życia odpadków</Polish>
<Spanish>Tiempo de vida de los restos médicos</Spanish>
<German>Dauer des angezeigten Abfalls</German>
</Key>
<Key ID="STR_ACE_MedicalSettings_litterCleanUpDelay_Description">
<English>How long should litter objects stay? In seconds. -1 is forever.</English>
<Polish>Ile czasu musi upłynąć, aby odpadki zaczęły znikać? W sekundach. -1 dla nieskończoności.</Polish>
<Spanish>¿Por cuánto tiempo deben permanecer los restos médicos? En segundos. -1 es para siempre.</Spanish>
<German>Wie lange sollen Abfälle am Boden liegen (in Sekunden)? -1 ist für immer.</German>
</Key>
<Key ID="STR_ACE_MedicalSettings_enableScreams_DisplayName">
<English>Enable Screams</English>
<Polish>Aktywuj wrzaski</Polish>
<Spanish>Activar gritos</Spanish>
<German>Schreie aktivieren</German>
</Key>
<Key ID="STR_ACE_MedicalSettings_enableScreams_Description">
<English>Enable screaming by injuried units</English>
<Polish>Aktywuj wrzeszczenie z bólu przez ranne jednostki</Polish>
<Spanish>Activar gritos para unidades heridas</Spanish>
<German>Aktiviere Schreie bei verletzten Einheiten</German>
</Key>
<Key ID="STR_ACE_MedicalSettings_playerDamageThreshold_DisplayName">
<English>Player Damage</English>
<Polish>Próg obrażeń graczy</Polish>
<Spanish>Daño de jugador</Spanish>
<German>Spielerschaden</German>
</Key>
<Key ID="STR_ACE_MedicalSettings_playerDamageThreshold_Description">
<English>What is the damage a player can take before being killed?</English>
<Polish>Jaki jest próg obrażeń, jakie gracz może otrzymać zanim zostanie zabity?</Polish>
<Spanish>¿Cuál es el daño que un jugador puede sufrir antes de morir?</Spanish>
<German>Wie viel Schaden kann ein Spieler erleiden, bevor er getötet wird?</German>
</Key>
<Key ID="STR_ACE_MedicalSettings_AIDamageThreshold_DisplayName">
<English>AI Damage</English>
<Polish>Próg obrażeń AI</Polish>
<Spanish>Daño IA</Spanish>
<German>KI-Schaden</German>
</Key>
<Key ID="STR_ACE_MedicalSettings_AIDamageThreshold_Description">
<English>What is the damage an AI can take before being killed?</English>
<Polish>Jaki jest próg obrażeń, jakie AI może otrzymać zanim zostanie zabite?</Polish>
<Spanish>¿Cuál es el daño que la IA puede sufrir antes de morir?</Spanish>
<German>Wie viel Schaden kann eine KI erleiden, bis sie getötet wird?</German>
</Key>
<Key ID="STR_ACE_MedicalSettings_enableUnconsciousnessAI_DisplayName">
<English>AI Unconsciousness</English>
<Polish>Nieprzytomność AI</Polish>
<Spanish>Inconsciencia IA</Spanish>
<German>KI-Bewusstlosigkeit</German>
</Key>
<Key ID="STR_ACE_MedicalSettings_enableUnconsciousnessAI_Description">
<English>Allow AI to go unconscious</English>
<Polish>Czy AI może być nieprzytomne od odniesionych obrażeń?</Polish>
<Spanish>Permita a la IA caer inconsciente</Spanish>
<German>KI kann bewusstlos werden</German>
</Key>
<Key ID="STR_ACE_Medical_disabled">
<English>Disabled</English>
<Polish>Wyłączone</Polish>
<Spanish>Activado</Spanish>
<German>Deaktiviert</German>
</Key>
<Key ID="STR_ACE_Medical_enabled">
<English>Enabled</English>
<Polish>Włączone</Polish>
<Spanish>Desactivado</Spanish>
<German>Aktiviert</German>
</Key>
<Key ID="STR_ACE_MedicalSettings_preventInstaDeath_DisplayName">
<English>Prevent instant death</English>
<Polish>Wył. natychmiast. śmierć</Polish>
<Spanish>Prevenir muerte instantánea</Spanish>
<German>Verhindere direkten Tod</German>
</Key>
<Key ID="STR_ACE_MedicalSettings_preventInstaDeath_Description">
<English>Have a unit move to unconscious instead of death</English>
<Polish>Spraw, aby jednostka została przeniesiona do stanu nieprzytomności zamiast ginąć na miejscu od śmiertelnych obrażeń</Polish>
<Spanish>Mover una unidad a inconsciente en vez de a muerta</Spanish>
<German>Lässt eine Einheit bewusstlos werden anstatt zu sterben</German>
</Key>
<Key ID="STR_ACE_MedicalSettings_bleedingCoefficient_DisplayName">
<English>Bleeding coefficient</English>
<Polish>Mnożnik krwawienia</Polish>
<Spanish>Coeficiente de sangrado</Spanish>
<German>Verblutungsmultiplikator</German>
</Key>
<Key ID="STR_ACE_MedicalSettings_bleedingCoefficient_Description">
<English>Coefficient to modify the bleeding speed</English>
<Polish>Mnożnik modyfikujący prędkość wykrwawiania się</Polish>
<Spanish>Coeficiente para modificar la velocidad de sangrado</Spanish>
<German>Multiplikator um die Verblutungsgeschwindigkeit zu verändern</German>
</Key>
<Key ID="STR_ACE_MedicalSettings_painCoefficient_DisplayName">
<English>Pain coefficient</English>
<Polish>Mnożnik bólu</Polish>
<Spanish>Coeficiente de dolor</Spanish>
<German>Schmerzmultiplikator</German>
</Key>
<Key ID="STR_ACE_MedicalSettings_painCoefficient_Description">
<English>Coefficient to modify the pain intensity</English>
<Polish>Mnożnik modyfikujący intensywność bólu</Polish>
<Spanish>Coeficiente para modificar la intensidad del dolor</Spanish>
<German>Multiplikator um den Schmerzintensität zu verändern</German>
</Key>
<Key ID="STR_ACE_MedicalSettings_keepLocalSettingsSynced_DisplayName">
<English>Sync status</English>
<Polish>Synchronizuj status</Polish>
<Spanish>Sincronizador estado</Spanish>
<German>Status synchronisieren</German>
</Key>
<Key ID="STR_ACE_MedicalSettings_keepLocalSettingsSynced_Description">
<English>Keep unit status synced. Recommended on.</English>
<Polish>Utrzymuj synchronizację statusu jednostek. Zalecane zostawienie tej opcji włączonej.</Polish>
<Spanish>Mantener el estado de la unidad sincronizado. Recomendado activado</Spanish>
<German>Status der Einheit synchron halten. Sollte aktiviert bleiben.</German>
</Key>
<Key ID="STR_ACE_MedicalSettings_Module_Description">
<English>Provides a medical system for both players and AI.</English>
<Polish>Moduł ten dostarcza system medyczny dla graczy oraz AI.</Polish>
<Spanish>Proporciona un sistema médico para jugadores e IA.</Spanish>
<German>Aktiviert ein medizinisches System für Spieler und KI.</German>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_Module_DisplayName">
<English>Advanced Medical Settings [ACE]</English>
<Polish>Zaawansowane ustawienia medyczne [ACE]</Polish>
<Spanish>Ajustes médicos avanzados [ACE]</Spanish>
<German>Erweiterte medizinische Einstellungen [ACE]</German>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_enableFor_DisplayName">
<English>Enabled for</English>
<Polish>Aktywne dla</Polish>
<Spanish>Hablitado para</Spanish>
<German>Aktiviert für</German>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_enableFor_Description">
<English>Select what units the advanced medical system will be enabled for</English>
<Polish>Wybierz dla kogo zaawansowany system medyczny będzie aktywny</Polish>
<Spanish>Seleccione para qué unidades será habilitado el sistema médico avanzado</Spanish>
<German>Wähle aus welche Einheiten das erweiterte medizinische System haben</German>
</Key>
<Key ID="STR_ACE_Medical_playeronly">
<English>Players only</English>
<Polish>Tylko dla graczy</Polish>
<Spanish>Solo jugadores</Spanish>
<German>Nur Spieler</German>
</Key>
<Key ID="STR_ACE_Medical_playersandai">
<English>Players and AI</English>
<Polish>Gracze oraz AI</Polish>
<Spanish>Jugadors e IA</Spanish>
<German>Spieler und KI</German>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_enableAdvancedWounds_DisplayName">
<English>Enable Advanced wounds</English>
<Polish>Akt. zaawansowane rany</Polish>
<Spanish>Activa heridas avanzadas</Spanish>
<German>Aktiviere erweiterte Wunden</German>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_enableAdvancedWounds_Description">
<English>Allow reopening of bandaged wounds?</English>
<Polish>Pozwól na otwieranie się zabandażowanych ran?</Polish>
<Spanish>Permitir la reapertura de las heridas vendadas?</Spanish>
<German>Erlaube das Öffnen von bandagierten Wunden?</German>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_enableVehicleCrashes_DisplayName">
<English>Vehicle Crashes</English>
<Polish>Obrażenia od kolizji</Polish>
<Spanish>Accidentes de vehículos</Spanish>
<German>Fahrzeugunfälle</German>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_enableVehicleCrashes_Description">
<English>Do units take damage from a vehicle crash?</English>
<Polish>Czy jednostki otrzymują obrażenia w wyniku kolizji pojazdów?</Polish>
<Spanish>¿Las unidades reciben daño de un accidente de tráfico?</Spanish>
<German>Bekommen Einheiten von Fahrzeugunfällen Schaden?</German>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_medicSetting_PAK_DisplayName">
<English>Allow PAK</English>
<Polish>Ust. apteczek osobistych</Polish>
<Spanish>Permitir EPA</Spanish>
<German>Erlaube Erstehilfekasten</German>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_medicSetting_PAK_Description">
<English>Who can use the PAK for full heal?</English>
<Polish>Kto może skorzystać z apteczki osobistej w celu pełnego uleczenia?</Polish>
<Spanish>¿Quién puede utilizar el EPA para una cura completa?</Spanish>
<German>Wer kann den Erstehilfekasten für eine Endheilung verwenden?</German>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_anyone">
<English>Anyone</English>
<Polish>Wszyscy</Polish>
<Spanish>Nadie</Spanish>
<German>Jeder</German>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_Medic">
<English>Medics only</English>
<Polish>Tylko medycy</Polish>
<Spanish>Solo médicos</Spanish>
<German>Nur Sanitäter</German>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_Special">
<English>Doctors only</English>
<Polish>Tylko doktorzy</Polish>
<Spanish>Solo doctores</Spanish>
<German>Nur Ärzte</German>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_consumeItem_PAK_DisplayName">
<English>Remove PAK on use</English>
<Polish>Usuń apteczkę po użyciu</Polish>
<Spanish>Eliminar EPA después del uso</Spanish>
<German>Entferne Erstehilfekasten bei Verwendung</German>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_consumeItem_PAK_Description">
<English>Should PAK be removed on usage?</English>
<Polish>Czy apteczka osobista powinna zniknąć z ekwipunku po jej użyciu?</Polish>
<Spanish>El EPA será eliminado después de usarlo</Spanish>
<German>Sollen Erstehilfekästen bei Verwendung entfernt werden?</German>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_useLocation_PAK_DisplayName">
<English>Locations PAK</English>
<Polish>Ogr. apteczek osobistych</Polish>
<Spanish>Ubicacions del EPA</Spanish>
<German>Orte für Erstehilfekasten</German>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_useLocation_PAK_Description">
<English>Where can the personal aid kit be used?</English>
<Polish>Gdzie można korzystać z apteczek osobistych?</Polish>
<Spanish>¿Dónde se puede utilizar el equipo de primeros auxilios?</Spanish>
<German>Wo kann der Erstehilfekasten verwendet werden?</German>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_anywhere">
<English>Anywhere</English>
<Polish>Wszędzie</Polish>
<Spanish>Donde sea</Spanish>
<German>Überall</German>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_vehicle">
<English>Medical vehicles</English>
<Polish>Pojazdy medyczne</Polish>
<Spanish>Vehiculos médicos</Spanish>
<German>Medizinische Fahrzeuge</German>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_facility">
<English>Medical facility</English>
<Polish>Budynki medyczne</Polish>
<Spanish>Centro médico</Spanish>
<German>Medizinische Einrichtungen</German>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_vehicleAndFacility">
<English>Vehicles &amp; facility</English>
<Polish>Pojazdy i budynki medyczne</Polish>
<Spanish>Vehículos y centros</Spanish>
<German>Fahrzeuge &amp; Einrichtungen</German>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_disabled">
<English>Disabled</English>
<Polish>Wyłączone</Polish>
<Spanish>Desactivado</Spanish>
<German>Deaktiviert</German>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_medicSetting_SurgicalKit_DisplayName">
<English>Allow Surgical kit (Adv)</English>
<Polish>Ust. zestawu chirurg.</Polish>
<Spanish>Permitir equipo quirúrgico (Avanzado)</Spanish>
<German>Erlaube Operationskasten</German>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_medicSetting_SurgicalKit_Description">
<English>Who can use the surgical kit?</English>
<Polish>Kto może skorzystać z zestawu chirurgicznego w celu zszycia ran?</Polish>
<Spanish>¿Quién puede utilizar el equipo quirúrgico?</Spanish>
<German>Wer kann den Operationskasten verwenden?</German>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_consumeItem_SurgicalKit_DisplayName">
<English>Remove Surgical kit (Adv)</English>
<Polish>Usuń zest. chir. po użyciu</Polish>
<Spanish>Eliminar equipo quirúrgico (Avanzado)</Spanish>
<German>Enrtferne Operationskasten (erweitert)</German>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_consumeItem_SurgicalKit_Description">
<English>Should Surgical kit be removed on usage?</English>
<Polish>Czy zestaw chirurgiczny powinien zniknąć z ekwipunku po jego użyciu?</Polish>
<Spanish>Eliminar el equipo quirúrgico después del uso</Spanish>
<German>Entferne Operationskästen bei Verwendung?</German>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_useLocation_SurgicalKit_DisplayName">
<English>Locations Surgical kit (Adv)</English>
<Polish>Ogr. zestawu chirurg.</Polish>
<Spanish>Ubicaciones del equipo quirúrgico (Avanzado)</Spanish>
<German>Orte für Operationskästen (erweitert)</German>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_useLocation_SurgicalKit_Description">
<English>Where can the Surgical kit be used?</English>
<Polish>Gdzie można korzystać z zestawu chirurgicznego?</Polish>
<Spanish>Dónde se puede utilizar el equipo quirúrgico</Spanish>
<German>Wo kann der Operationskasten verwendet werden?</German>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_Module_Description">
<English>Configure the treatment settings from ACE Medical</English>
<Polish>Skonfiguruj zaawansowane ustawienia leczenia systemu medycznego ACE</Polish>
<Spanish>Configure las opciones de tratamiento del ACE Médico</Spanish>
<German>Behandlungseinstellungen vom ACE-Medical konfigurieren</German>
</Key>
<Key ID="STR_ACE_ReviveSettings_Module_DisplayName">
<English>Revive Settings [ACE]</English>
<Polish>Ustawienia wskrzeszania [ACE]</Polish>
<Spanish>Sistema de resucitado [ACE]</Spanish>
<German>Wiederbelebungseinstellungen [ACE]</German>
</Key>
<Key ID="STR_ACE_ReviveSettings_enableRevive_DisplayName">
<English>Enable Revive</English>
<Polish>Aktywuj wskrzeszanie</Polish>
<Spanish>Habilitar resucitado</Spanish>
<German>Erlaube Wiederbelebung</German>
</Key>
<Key ID="STR_ACE_ReviveSettings_enableRevive_Description">
<English>Enable a basic revive system</English>
<Polish>Aktywuj podstawowy system wskrzeszania</Polish>
<Spanish>Habilitar un sistema básico de resucitado</Spanish>
<German>Aktiviere Standard-Wiederbelebungssystem</German>
</Key>
<Key ID="STR_ACE_ReviveSettings_maxReviveTime_DisplayName">
<English>Max Revive time</English>
<Polish>Maks. czas agonii</Polish>
<Spanish>Tiempo máximo de resucitado</Spanish>
<German>Maximale Wiederbelebungszeit</German>
</Key>
<Key ID="STR_ACE_ReviveSettings_maxReviveTime_Description">
<English>Max amount of seconds a unit can spend in revive state</English>
<Polish>Maksymalna długość agonii w sekundach (czas na wskrzeszenie)</Polish>
<Spanish>Cantidad máxima de segundos que una unidad puede gastar en estado de resucitación</Spanish>
<German>Maximale Zeitspanne in Sekunden die eine Einheit im Wiederbelebungszustand verbringen kann</German>
</Key>
<Key ID="STR_ACE_ReviveSettings_amountOfReviveLives_DisplayName">
<English>Max Revive lives</English>
<Polish>Maks. ilość wskrzeszeń</Polish>
<Spanish>Vidas máximas de resucitado</Spanish>
<German>Maximale Leben bei Wiederbelebung</German>
</Key>
<Key ID="STR_ACE_ReviveSettings_amountOfReviveLives_Description">
<English>Max amount of lives a unit. 0 or -1 is disabled.</English>
<Polish>Maksymalna ilość wskrzeszeń. Wpisz 0 lub -1 aby wyłączyć.</Polish>
<Spanish>Cantidad máxima de vidas por unidad. 0 o -1 es desactivado.</Spanish>
<German>Maximale Anzahl von Leben einer Einheit. 0 or -1 bedeutet deaktiviert.</German>
</Key>
<Key ID="STR_ACE_ReviveSettings_Module_Description">
<English>Provides a medical system for both players and AI.</English>
<Polish>Moduł ten aktywuje podstawowy system wskrzeszania. Jednostka po otrzymaniu śmiertelnych obrażeń przechodzi do stanu agonii, która trwa określoną długość czasu. W tym czasie aby wskrzesić i jednocześnie odratować jednostkę należy opatrzeć jej rany i wykonać RKO.</Polish>
<Spanish>Proporciona un sistema médico para jugadores e IA.</Spanish>
<German>Aktiviert das Medicsystem für Spieler und KI.</German>
</Key>
<Key ID="STR_ACE_AssignMedicRoles_Module_DisplayName">
<English>Set Medic Class [ACE]</English>
<Polish>Ustaw klasę medyka [ACE]</Polish>
<Spanish>Establecer case médica [ACE]</Spanish>
<German>Setze Sanitäterklassen [ACE]</German>
</Key>
<Key ID="STR_ACE_AssignMedicRoles_EnableList_DisplayName">
<English>List</English>
<Polish>Lista</Polish>
<Spanish>Lista</Spanish>
<German>Liste</German>
</Key>
<Key ID="STR_ACE_AssignMedicRoles_EnableList_Description">
<English>List of unit names that will be classified as medic, separated by commas.</English>
<Polish>Lista nazw jednostek, które są sklasyfikowane jako medycy, oddzielone przecinkami.</Polish>
<Spanish>Lista de los nombres de las unidades que se clasifican como médico, separados por comas.</Spanish>
<German>Liste von Namen, die als Sanitäter verwendet werden. Wird durch Kommas getrennt.</German>
</Key>
<Key ID="STR_ACE_AssignMedicRoles_role_DisplayName">
<English>Is Medic</English>
<Polish>Klasa medyczna</Polish>
<Spanish>Es médico</Spanish>
<German>Ist Sanitäter</German>
</Key>
<Key ID="STR_ACE_AssignMedicRoles_role_Description">
<English></English>
<Polish></Polish>
<German>Dieses Modul legt fest welche Einheit ein Sanitäter ist.</German>
</Key>
<Key ID="STR_ACE_AssignMedicRoles_role_none">
<English>None</English>
<Polish>Żadna</Polish>
<Spanish>Nada</Spanish>
<German>Keine</German>
</Key>
<Key ID="STR_ACE_AssignMedicRoles_role_medic">
<English>Regular medic</English>
<Polish>Zwykły medyk</Polish>
<Spanish>Médico regular</Spanish>
<German>Normaler Sanitäter</German>
</Key>
<Key ID="STR_ACE_AssignMedicRoles_role_doctor">
<English>Doctor (Only Advanced Medics)</English>
<Polish>Doktor (tylko zaawansowani medycy)</Polish>
<Spanish>Doctor (Solo medicina avanzada)</Spanish>
<German>Arzt (nur erweiterte Sanitäter)</German>
</Key>
<Key ID="STR_ACE_AssignMedicRoles_Module_Description">
<English>Assigns the ACE medic class to a unit</English>
<Polish>Moduł ten przypisuje klasę medyka ACE do jednostek.</Polish>
<Spanish>Asigna la clase médico ACE a una unidad</Spanish>
<German>Weise die ACE-Sanitäterklasse einer Einheit zu</German>
</Key>
<Key ID="STR_ACE_AssignMedicVehicle_Module_DisplayName">
<English>Set Medical Vehicle [ACE]</English>
<Polish>Ustaw pojazd medyczny [ACE]</Polish>
<Spanish>Establecer vehículos médicos [ACE]</Spanish>
<German>Setze medizinisches Fahrzeug [ACE]</German>
</Key>
<Key ID="STR_ACE_AssignMedicVehicle_EnableList_DisplayName">
<English>List</English>
<Polish>Lista</Polish>
<Spanish>Lista</Spanish>
<German>Liste</German>
</Key>
<Key ID="STR_ACE_AssignMedicVehicle_EnableList_Description">
<English>List of vehicles that will be classified as medical vehicle, separated by commas.</English>
<Polish>Lista nazw pojazdów, które są sklasyfikowane jako pojazdy medyczne, oddzielone przecinkami.</Polish>
<Spanish>Lista de los vehículos que se clasifican como vehículo médicos, separados por comas.</Spanish>
<German>Liste ovn Fahrzeugen, die als medizinische Fahrzeuge verwendet werden. Wird durch Kommas getrennt.</German>
</Key>
<Key ID="STR_ACE_AssignMedicVehicle_enabled_DisplayName">
<English>Is Medical Vehicle</English>
<Polish>Jest pojazdem med.</Polish>
<Spanish>Es vehículo médico</Spanish>
<German>Ist medizinisches Fahrzeug</German>
</Key>
<Key ID="STR_ACE_AssignMedicVehicle_enabled_Description">
<English>Whatever or not the objects in the list will be a medical vehicle.</English>
<Polish>Czy pojazdy z tej listy są pojazdami medycznymi.</Polish>
<Spanish>Cualquiera de la lista o fuera de ella será un vehículo médico.</Spanish>
<German>Leg fest ob das Objekt in der Liste ein medizinisches Fahrzeug ist.</German>
</Key>
<Key ID="STR_ACE_AssignMedicVehicle_Module_Description">
<English>Assigns the ACE medic class to a unit</English>
<Polish>Moduł ten pozwala na przypisanie danym pojazdom statusu pojazdów medycznych. Wewnątrz takiego pojazdu można wykonywać zaawansowane zabiegi medyczne.</Polish>
<Spanish>Asigna la clase médico ACE a una unidad</Spanish>
<German>Weist die ACE-Sanitäterklasse einer Einheit zu</German>
</Key>
<Key ID="STR_ACE_AssignMedicalFacility_Module_DisplayName">
<English>Set Medical Facility [ACE]</English>
<Polish>Ustaw budynek medyczny [ACE]</Polish>
<Spanish>Establece el centro médico [ACE]</Spanish>
<German>Setze medizinische Einrichtung [ACE]</German>
</Key>
<Key ID="STR_ACE_AssignMedicalFacility_enabled_DisplayName">
<English>Is Medical Facility</English>
<Polish>Jest budynkiem med.</Polish>
<Spanish>Es centro médico</Spanish>
<German>Ist eine medizinische Einrichtung</German>
</Key>
<Key ID="STR_ACE_AssignMedicalFacility_enabled_Description">
<English>Registers an object as a medical facility</English>
<Polish>Przypisuje danemu obiektowi status budynku medycznego</Polish>
<Spanish>Registra un objeto como un centro médico</Spanish>
<German>Definiert ein Objekt als medizinische Einrichtung</German>
</Key>
<Key ID="STR_ACE_AssignMedicalFacility_Module_Description">
<English>Defines an object as a medical facility. This allows for more advanced treatments. Can be used on buildings and vehicles.</English>
<Polish>Moduł ten pozwala przypisać status budynku medycznego danemu obiektowi. Budynek taki pozwala na wykonywanie zaawansowanych zabiegów medycznych. Może być użyte na pojazdach i budynkach.</Polish>
<Spanish>Define un objeto como un centro médico. Esto permite tratamientos más avanzados. Se puede utilizar en edificios y vehículos.</Spanish>
<German>Definiert ein Objekt als medizinische Einrichtung. Das ermöglicht weitere Behandlungen. Kann bei Gebäuden und Fahrzeugen verwendet werden.</German>
</Key>
<Key ID="STR_ACE_medicalSupplyCrate">
<English>[ACE] Medical Supply Crate (Basic)</English>
<Polish>[ACE] Skrzynka z zapasami medycznymi (podstawowa)</Polish>
<Spanish>[ACE] Caja de suministros médicos (Básica)</Spanish>
<German>[ACE] Medizinische Kiste (standard)</German>
</Key>
<Key ID="STR_ACE_medicalSupplyCrate_advanced">
<English>[ACE] Medical Supply Crate (Advanced)</English>
<Polish>[ACE] Skrzynka z zapasami medycznymi (zaawansowana)</Polish>
<Spanish>[ACE] Caja de suministros médicos (Avanzada)</Spanish>
<German>[ACE] Medizinische Kiste (erweitert)</German>
</Key>
<Key ID="STR_ACE_Medical_Yes">
<English>Yes</English>

View File

@ -36,12 +36,8 @@ class CfgVehicles {
};
};
class Logic;
class Module_F: Logic {
class ArgumentsBaseUnits {};
class ModuleDescription {};
};
class GVAR(dagrModule): Module_F {
class ACE_Module;
class GVAR(dagrModule): ACE_Module {
author = "$STR_ACE_Common_ACETeam";
category = "ACE";
displayName = "$STR_ACE_Dagr_Module_DisplayName";
@ -62,7 +58,7 @@ class CfgVehicles {
};
};
};
class ModuleDescription: ModuleDescription {
class ModuleDescription {
description = "$STR_ACE_Dagr_Module_Description";
};
};

View File

@ -304,30 +304,42 @@
<Key ID="STR_ACE_Dagr_Module_DisplayName">
<English>MicroDAGR Map Fill</English>
<Polish>Wypełnienie mapy MicroDAGR</Polish>
<Spanish>Relleno del mapa MicroDAGR</Spanish>
</Key>
<Key ID="STR_ACE_Dagr_MapDataAvailable_DisplayName">
<English>MicroDAGR Map Fill</English>
<Polish>Wypełnienie mapy MicroDAGR</Polish>
<Spanish>Relleno del mapa MicroDAGR</Spanish>
</Key>
<Key ID="STR_ACE_Dagr_MapDataAvailable_Description">
<English>How much map data is filled on MicroDAGR's</English>
<Polish>Jak duża część informacji mapy jest załadowana do MicroDAGR?</Polish>
<Spanish>Cuanta información está disponible en el mapa del MicroDAG</Spanish>
<German>Wie viel Daten auf einem MicroDAGR zu sehen sind</German>
</Key>
<Key ID="STR_ACE_Dagr_None">
<English>Full Satellite + Buildings</English>
<Polish>Pełna satelitarna + budynki</Polish>
<Spanish>Satelite completo + Edificios</Spanish>
<German>Satellitenbild + Gebäude</German>
</Key>
<Key ID="STR_ACE_Dagr_Side">
<English>Topographical + Roads</English>
<Polish>Topograficzna + drogi</Polish>
<Spanish>Topografico + Carreteras</Spanish>
<German>Topografisch + Straßen</German>
</Key>
<Key ID="STR_ACE_Dagr_Unique">
<English>None (Cannot use map view)</English>
<Polish>Żadna (wyłącza ekran mapy)</Polish>
<Spanish>Nada (No se puede el mapa)</Spanish>
<German>Keine (kann keine Kartenansicht verwenden)</German>
</Key>
<Key ID="STR_ACE_Dagr_Module_Description">
<English>Controls how much data is filled on the microDAGR items. Less data restricts the map view to show less on the minimap.&lt;br /&gt;Source: microDAGR.pbo</English>
<Polish>Moduł ten pozwala kontrolować jak duża ilość informacji jest załadowana do przedmiotów MicroDAGR. Mniejsza ilość danych ogranicza widok mapy pokazując mniej rzeczy na minimapie.&lt;br /&gt;Źródło: microDAGR.pbo</Polish>
<Spanish>Controla la cantidad de información disponible en el microDAGR. Menos datos limitan la vista del mapa a mostrar menos en el minimapa.&lt;br /&gt;Fuente: microDAGR.pbo</Spanish>
<German>Steuert wie viel Daten auf dem microDAGR zu sehen ist. Weniger Daten schränken die Kartenansicht ein, um mehr auf der Minimap zu sehen.&lt;br /&gt;Quelle: microDAGR.pbo</German>
</Key>
</Package>
</Project>

View File

@ -19,7 +19,7 @@
<Italian>Guida dei missili avanzata, o AMG, offre diversi miglioramenti alla teleguida di missili. E' anche un sistema necessario per i tipi di armi missile.</Italian>
<Russian>Продвинутое наведение ракет, или ПНР, обеспечивает множество усовершествований для наведения и стрельбы ракет. Также, это система, необходимая для всех ракетных типов оружия.</Russian>
<Spanish>El guiado avanzado de misiles, o AMG en sus siglas en inglés, ofrece múltiples mejoras en el fijado y disparo de misiles. Es también un sistema requerido para armas de tipo misil.</Spanish>
<German>Das Erweiterte Raketenlenksystem, auch ERls genannt, bietet viele Verbesserungen zum Aufschalten und Feuern mittels gelenkten Raketen. </German>
<German>Das Erweiterte Raketenlenksystem, auch ERls genannt, bietet viele Verbesserungen zum Aufschalten und Feuern mittels gelenkter Raketen. </German>
<French>Le guidage avancé de missile, ou AMG en anglais, apporte de multiple améliorations au verouillage et au tir de missiles. C'est aussi un framework requis pour tout arme de type missile.</French>
<Hungarian>A fejlett rakétairányító (vagy AMG) többféle módosítást tartalmaz a rakéták célkövetéséhez és tüzeléséhez. Ez egy szükséges keresztrendszer a rakéta-alapú fegyverekhez.</Hungarian>
<Portuguese>Orientação avançada de mísseis ou OAM, fornece vários aprimoramentos para travamento de mísseis e disparos. Também é um sistema requerido para disparar armas que utilizem mísseis.</Portuguese>
@ -100,14 +100,20 @@
<Key ID="STR_ACE_MissileGuidance_Off">
<English>Off</English>
<Polish>Wyłącz</Polish>
<Spanish>Desactivado</Spanish>
<German>Aus</German>
</Key>
<Key ID="STR_ACE_MissileGuidance_PlayerOnly">
<English>Player Only</English>
<Polish>Tylko gracz</Polish>
<Spanish>Solo jugador</Spanish>
<German>Nur Spieler</German>
</Key>
<Key ID="STR_ACE_MissileGuidance_PlayerAndAi">
<English>Player and AI</English>
<Polish>Gracz oraz AI</Polish>
<Spanish>Jugador e IA</Spanish>
<German>Spieler und KI</German>
</Key>
</Package>
</Project>

View File

@ -1,73 +1,107 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="Mission Modules">
<Key ID="STR_ACE_MissionModules_Category_DisplayName">
<English>ACE Mission Modules</English>
<Polish>ACE Moduły misji</Polish>
<Spanish>Módulo de misiones ACE</Spanish>
<German>ACE-Missionsmodule</German>
</Key>
<Key ID="STR_ACE_MissionModules_AmbianceSounds_DisplayName">
<English>Ambiance Sounds [ACE]</English>
<Polish>Dźwięki [ACE]</Polish>
<Spanish>[ACE] Sonidos ambiente</Spanish>
<German>Umgebungsgeräusche [ACE]</German>
</Key>
<Key ID="STR_ACE_MissionModules_AmbianceSounds_soundFiles_DisplayName">
<English>Sounds</English>
<Polish>Dźwięki</Polish>
<Spanish>Sonidos</Spanish>
<German>Sounds</German>
</Key>
<Key ID="STR_ACE_MissionModules_AmbianceSounds_soundFiles_Description">
<English>Class names of the ambiance sounds to be played. Seperated by ','</English>
<Polish>Class name-y dźwięków do odtwarzania. Oddzielone przy użyciu ','</Polish>
<Spanish>Class names de los sonidos ambiente que se reproducirán. Separados por ','</Spanish>
<German>Klassennamen der Umgebungsgeräusche, die abgespielt werden sollen. Getrennt durch ","</German>
</Key>
<Key ID="STR_ACE_MissionModules_AmbianceSounds_minimalDistance_DisplayName">
<English>Minimal Distance</English>
<Polish>Minimalny dystans</Polish>
<Spanish>Distancia mínima</Spanish>
<German>Mindestabstand</German>
</Key>
<Key ID="STR_ACE_MissionModules_AmbianceSounds_minimalDistance_Description">
<English>Used for calculating a random position and sets the minimal distance between the players and the played sound file(s)</English>
<Polish>Używany do obliczania losowej pozycji a także ustawia minimalny dystans pomiędzy graczami a odtwarzanymi plikami dźwiękowymi</Polish>
<Spanish>Usado para calcular una posición aleatoria y establecer la distancia mínima entre los jugadores y los ficheros de sonido reproducidos</Spanish>
<German>Wird verwendet, um eine zufällige Position zu bestimmen und setzt den Mindestabstand zwischen Spielern und der/den abzuspielenden Sounddatei(en) fest</German>
</Key>
<Key ID="STR_ACE_MissionModules_AmbianceSounds_maximalDistance_DisplayName">
<English>Maximum Distance</English>
<Polish>Maksymalny dystans</Polish>
<Spanish>Distancia máxima</Spanish>
<German>Maximalabstand</German>
</Key>
<Key ID="STR_ACE_MissionModules_AmbianceSounds_maximalDistance_Description">
<English>Used for calculating a random position and sets the maximum distance between the players and the played sound file(s)</English>
<Polish>Używany do obliczania losowej pozycji a także ustawia maksymalny dystans pomiędzy graczami a odtwarzanymi plikami dźwiękowymi</Polish>
<Spanish>Usado para calcular una posición aleatoria y establecer la distancia máxima entre los jugadores y los ficheros de sonido reproducidos</Spanish>
<German>Wird verwendet, um eine zufällige Position zu bestimmen und setzt den Maximalabstand zwischen Spielern und der/den abzuspielenden Sounddatei(en) fest</German>
</Key>
<Key ID="STR_ACE_MissionModules_AmbianceSounds_minimalDelay_DisplayName">
<English>Minimal Delay</English>
<Polish>Minimalne opóźnienie</Polish>
<Spanish>Retraso mínimo</Spanish>
<German>Minimale Verzögerung</German>
</Key>
<Key ID="STR_ACE_MissionModules_AmbianceSounds_minimalDelay_Description">
<English>Minimal delay between sounds played</English>
<Polish>Minimalne opóźnienie pomiędzy odtwarzanymi dźwiękami</Polish>
<Spanish>Retraso mínimo entre los sonidos reproducidos</Spanish>
<German>Minimale Verzögerung zwischen abzuspielenden Sounds</German>
</Key>
<Key ID="STR_ACE_MissionModules_AmbianceSounds_maximalDelay_DisplayName">
<English>Maximum Delay</English>
<Polish>Maksymalne opóźnienie</Polish>
<Spanish>Retraso máximo</Spanish>
<German>Maximale Verzögerung</German>
</Key>
<Key ID="STR_ACE_MissionModules_AmbianceSounds_maximalDelay_Description">
<English>Maximum delay between sounds played</English>
<Polish>Maksymalne opóźnienie pomiędzy odtwarzanymi dźwiękami</Polish>
<Spanish>Retraso máximo entre los sonidos reproducidos</Spanish>
<German>Maximale Verzögerung zwischen abzuspielenden Sounds</German>
</Key>
<Key ID="STR_ACE_MissionModules_AmbianceSounds_followPlayers_DisplayName">
<English>Follow Players</English>
<Polish>Podążaj za graczami</Polish>
<Spanish>Seguir jugadores</Spanish>
<German>Spielern folgen</German>
</Key>
<Key ID="STR_ACE_MissionModules_AmbianceSounds_followPlayers_Description">
<English>Follow players. If set to false, loop will play sounds only nearby logic position.</English>
<Polish>Podążaj za graczami. Jeżeli ustawione na 'Nie', pętla będzie odtwarzana tylko w pobliżu pozycji logiki.</Polish>
<Spanish>Seguir jugadores. Si esta desabilitado (false), se reproducirán sonidos en bucle solo cerca de la posición lógica.</Spanish>
<German>Spielern folgen. Wenn auf falsch gesetzt, werden Sounds nur in der Nähe des Logikmoduls abgespielt.</German>
</Key>
<Key ID="STR_ACE_MissionModules_AmbianceSounds_soundVolume_DisplayName">
<English>Volume</English>
<Polish>Głośność</Polish>
<Spanish>Volumen</Spanish>
<German>Lautstärke</German>
</Key>
<Key ID="STR_ACE_MissionModules_AmbianceSounds_soundVolume_Description">
<English>The volume of the sounds played</English>
<Polish>Głośność odtwarzanych dźwięków</Polish>
<Spanish>Volumen de los sonidos reproducidos</Spanish>
<German>Lautstärke der abzuspielenden Sounds</German>
</Key>
<Key ID="STR_ACE_MissionModules_AmbianceSounds_Description">
<English>Ambiance sounds loop (synced across MP)</English>
<Polish>Pętla odtwarzania dzwięków (synchronizowana na MP)</Polish>
<Spanish>Bucle de sonidos ambiente (sincronizados en MP)</Spanish>
<German>Umgebungsgeräusch-Schleife (im MP synchronisiert)</German>
</Key>
</Package>
</Project>
</Project>

View File

@ -43,11 +43,8 @@ class CfgVehicles {
};
};
class Logic;
class Module_F: Logic {
class ModuleDescription {};
};
class GVAR(module): Module_F {
class ACE_Module;
class GVAR(module): ACE_Module {
author = "$STR_ACE_Common_ACETeam";
category = "ACE";
displayName = "$STR_ACE_mk6mortar_Module_DisplayName";
@ -76,7 +73,7 @@ class CfgVehicles {
defaultValue = 1;
};
};
class ModuleDescription: ModuleDescription {
class ModuleDescription {
description = "$STR_ACE_mk6mortar_Module_Description";
};
};

View File

@ -52,34 +52,49 @@
<Key ID="STR_ACE_mk6mortar_Module_DisplayName">
<English>MK6 Settings</English>
<Polish>Moździerz MK6 - Ustawienia</Polish>
<Spanish>Ajustes MK6</Spanish>
<German>MK6-Einstellungen</German>
</Key>
<Key ID="STR_ACE_mk6mortar_airResistanceEnabled_DisplayName">
<English>Air Resistance</English>
<Polish>Opór powietrza</Polish>
<Spanish>Resistencia al aire</Spanish>
<German>Luftwiderstand</German>
</Key>
<Key ID="STR_ACE_mk6mortar_airResistanceEnabled_Description">
<English>For Player Shots, Model Air Resistance and Wind Effects</English>
<Polish>Modeluj opór powietrza oraz wpływ wiatru na tor lotu pocisku dla strzałów z moździerza MK6 przez graczy</Polish>
<Spanish>Para disparos del jugador, modelo de resistencia al aire y efectos de viento</Spanish>
<German>Für Spielerschüsse, Luftwiderstand und Windeffekte</German>
</Key>
<Key ID="STR_ACE_mk6mortar_allowComputerRangefinder_DisplayName">
<English>Allow MK6 Computer</English>
<Polish>Komputer MK6</Polish>
<Spanish>Habilitar ordenador del MK6</Spanish>
<German>Erlaube MK6-Computer</German>
</Key>
<Key ID="STR_ACE_mk6mortar_allowComputerRangefinder_Description">
<English>Show the Computer and Rangefinder (these NEED to be removed if you enable air resistance)</English>
<Polish>Zezwól na komputer i dalmierz (opcja ta MUSI zostać wyłączona jeżeli aktywowałeś opór powietrza)</Polish>
<Spanish>Muestra el ordenador y el medidor de distancia (DEBEN ser quitados si se activa la resistecia al aire)</Spanish>
<German>Zeige den Computer und den Entfernungsmesser an (diese MÜSSEN entfernt werden, wenn der Luftwiderstand aktiviert ist)</German>
</Key>
<Key ID="STR_ACE_mk6mortar_allowCompass_DisplayName">
<English>Allow MK6 Compass</English>
<Polish>Kompas MK6</Polish>
<Spanish>Habilitar brujula del MK6</Spanish>
<German>Erlaube MK6-Kompass</German>
</Key>
<Key ID="STR_ACE_mk6mortar_allowCompass_Description">
<English>Show the MK6 Digital Compass</English>
<Polish>Pokaż kompas MK6</Polish>
<Spanish>Muestra la brujula digital en el MK6</Spanish>
<German>Zeige MK6-Digitaler-Kompass</German>
</Key>
<Key ID="STR_ACE_mk6mortar_Module_Description">
<English></English>
<Polish>Moduł ten pozwala dostosować ustawienia moździerza MK6.</Polish>
<German>Dieses Modul erlaubt das Einstellen des MK6-Mörsers.</German>
</Key>
</Package>
</Project>

View File

@ -1,44 +1,46 @@
#include "script_component.hpp"
// TODO This is a basic and limited implementation that mimics some of the functionality from the A3 module framework, but not all of it.
// We have to execute this in the postInit XEH because on object init, the parameters of the modules are not yet available. They are if we execute it at the start of postInit execution.
{
[_x] call {
private ["_logic", "_logicType", "_config", "_isGlobal", "_isDisposable", "_isPersistent","_function"];
_logic = _this select 0;
_logicType = typeof _logic;
_logic hideobject true;
["InitSettingsFromModules", {
// TODO This is a basic and limited implementation that mimics some of the functionality from the A3 module framework, but not all of it.
// We have to execute this in the postInit XEH because on object init, the parameters of the modules are not yet available. They are if we execute it at the start of postInit execution.
{
[_x] call {
private ["_logic", "_logicType", "_config", "_isGlobal", "_isDisposable", "_isPersistent","_function"];
_logic = _this select 0;
_logicType = typeof _logic;
_logic hideobject true;
if (_logic getvariable [QGVAR(initalized), false]) exitwith {};
_config = (configFile >> "CfgVehicles" >> _logicType);
if !(isClass _config) exitwith {};
if (_logic getvariable [QGVAR(initalized), false]) exitwith {};
_config = (configFile >> "CfgVehicles" >> _logicType);
if !(isClass _config) exitwith {};
// isGlobal = 1;
_isGlobal = getNumber (_config >> "isGlobal") > 0;
_isDisposable = getNumber (_config >> "isDisposable") > 0;
_isPersistent = getNumber (_config >> "isPersistent") > 0 || getnumber (_config >> "isGlobal") > 1;
_function = getText (_config >> "function");
if (isnil _function) then {
_function = compile _function;
} else {
_function = missionNamespace getvariable _function;
};
// isGlobal = 1;
_isGlobal = getNumber (_config >> "isGlobal") > 0;
_isDisposable = getNumber (_config >> "isDisposable") > 0;
_isPersistent = getNumber (_config >> "isPersistent") > 0 || getnumber (_config >> "isGlobal") > 1;
_function = getText (_config >> "function");
if (isnil _function) then {
_function = compile _function;
} else {
_function = missionNamespace getvariable _function;
};
if (_isGlobal) then {
[_logic, [], true] call _function;
} else {
if (isServer) then {
if (_isGlobal) then {
[_logic, [], true] call _function;
} else {
if (isServer) then {
[_logic, [], true] call _function;
};
};
if !(_isPersistent) then {
_logic setvariable [QGVAR(initalized), true];
};
if (_isDisposable) then {
deleteVehicle _logic;
};
};
if !(_isPersistent) then {
_logic setvariable [QGVAR(initalized), true];
};
if (_isDisposable) then {
deleteVehicle _logic;
};
};
}foreach GVAR(moduleInitCollection);
}foreach GVAR(moduleInitCollection);
}] call EFUNC(common,addEventhandler);

View File

@ -5,7 +5,7 @@ class CfgPatches {
units[] = {};
weapons[] = {};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_common"};
requiredAddons[] = {"ace_main"};
author[] = {"Glowbal"};
authorUrl = "";
VERSION_CONFIG;

View File

@ -11,7 +11,7 @@ class ACE_Settings {
isClientSettable = 1;
displayName = "$STR_ACE_NameTags_ShowPlayerNames";
description = "$STR_ACE_NameTags_ShowPlayerNames_Desc";
values[] = {"$STR_ACE_Common_Disabled", "$STR_ACE_Common_Enabled", "$STR_ACE_Common_OnlyCursor", "$STR_ACE_Common_OnlyOnKeypress", "$STR_ACE_Common_OnlyCursorAndKeyPress"};
values[] = {"$STR_ACE_NameTags_Disabled", "$STR_ACE_NameTags_Enabled", "$STR_ACE_NameTags_OnlyCursor", "$STR_ACE_NameTags_OnlyKeypress", "$STR_ACE_NameTags_OnlyCursorAndKeypress"};
};
class GVAR(showPlayerRanks) {
value = 1;
@ -42,16 +42,24 @@ class ACE_Settings {
isClientSettable = 1;
displayName = "$STR_ACE_NameTags_ShowSoundWaves";
description = "$STR_ACE_NameTags_ShowSoundWaves_Desc";
values[] = {"$STR_ACE_Common_Disabled", "$STR_ACE_Common_NameTagSettings", "$STR_ACE_Common_AlwaysShowAll"};
values[] = {"$STR_ACE_NameTags_Disabled", "$STR_ACE_NameTags_NameTagSettings", "$STR_ACE_NameTags_AlwaysShowAll"};
};
class GVAR(PlayerNamesViewDistance) {
class GVAR(playerNamesViewDistance) {
value = 5;
typeName = "SCALAR";
isClientSettable = 0;
};
class GVAR(PlayerNamesMaxAlpha) {
class GVAR(playerNamesMaxAlpha) {
value = 0.8;
typeName = "SCALAR";
isClientSettable = 0;
};
};
class GVAR(tagSize) {
value = 2;
typeName = "SCALAR";
isClientSettable = 1;
displayName = "$STR_ACE_NameTags_TagSize_Name";
description = "$STR_ACE_NameTags_TagSize_Description";
values[] = {"$str_very_small", "$str_small", "$str_medium", "$str_large", "$str_very_large"};
};
};

View File

@ -1,9 +1,6 @@
class CfgVehicles {
class Logic;
class Module_F: Logic {
class ModuleDescription {};
};
class ACE_ModuleNameTags : Module_F {
class ACE_Module;
class ACE_ModuleNameTags: ACE_Module {
author = "$STR_ACE_Common_ACETeam";
category = "ACE";
displayName = "$STR_ACE_NameTags_Module_DisplayName";
@ -12,7 +9,39 @@ class CfgVehicles {
isGlobal = 1;
icon = QUOTE(PATHTOF(UI\Icon_Module_NameTags_ca.paa));
class Arguments {
class PlayerNamesViewDistance {
class showPlayerNames {
displayName = "$STR_ACE_NameTags_ShowPlayerNames";
description = "$STR_ACE_NameTags_ShowPlayerNames_Desc";
typeName = "NUMBER";
class values {
class DoNotForce {
default = 1;
name = "$STR_ACE_NameTags_DoNotForce";
value = -1;
};
class ForceHide {
name = "$STR_ACE_NameTags_ForceHide";
value = 0;
};
class ForceShow {
name = "$STR_ACE_NameTags_ForceShow";
value = 1;
};
class ForceShowOnlyCursor {
name = "$STR_ACE_NameTags_ForceShowOnlyCursor";
value = 2;
};
class ForceShowOnlyKeypress {
name = "$STR_ACE_NameTags_ForceShowOnlyKeypress";
value = 3;
};
class ForceShowOnlyCursorAndKeypress {
name = "$STR_ACE_NameTags_ForceShowOnlyCursorAndKeypress";
value = 4;
};
};
};
class playerNamesViewDistance {
displayName = "$STR_ACE_NameTags_PlayerNamesViewDistance_DisplayName";
description = "$STR_ACE_NameTags_PlayerNamesViewDistance_Description";
typeName = "NUMBER";
@ -65,7 +94,7 @@ class CfgVehicles {
defaultValue = 0;
};
};
class ModuleDescription: ModuleDescription {
class ModuleDescription {
description = "$STR_ACE_NameTags_Module_Description";
};
};

View File

@ -5,7 +5,7 @@
if (!hasInterface) exitWith {};
GVAR(ShowNamesTime) = -10;
GVAR(showNamesTime) = -10;
// Add keybinds
["ACE3 Common", QGVAR(showNameTags), localize "STR_ACE_NameTags_ShowNames",
@ -14,7 +14,7 @@ GVAR(ShowNamesTime) = -10;
if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false};
// Statement
GVAR(ShowNamesTime) = ACE_time;
GVAR(showNamesTime) = ACE_time;
if (call FUNC(canShow)) then{ call FUNC(doShow); };
// Return false so it doesn't block other actions
false
@ -58,5 +58,16 @@ GVAR(ShowNamesTime) = -10;
};
}, 5, []] call CBA_fnc_addPerFrameHandler;
// Draw handle
addMissionEventHandler ["Draw3D", {_this call FUNC(onDraw3d);}];
// Wait until the colors are defined before starting to draw the nametags
["SettingsInitialized", {
// Draw handle
call FUNC(updateSettings);
}] call EFUNC(common,addEventHandler);
// Change settings accordingly when they are changed
["SettingChanged", {
PARAMS_1(_name);
if (_name == QGVAR(showPlayerNames)) then {
call FUNC(updateSettings);
};
}] call EFUNC(common,addEventHandler);

View File

@ -10,5 +10,6 @@ PREP(initIsSpeaking);
PREP(moduleNameTags);
PREP(onDraw3d);
PREP(setText);
PREP(updateSettings);
ADDON = true;

View File

@ -13,6 +13,7 @@ class CfgPatches {
};
#include "CfgEventHandlers.hpp"
#include "CfgVehicles.hpp"
#include "ACE_Settings.hpp"
#include "CfgVehicles.hpp"
#include <RscTitles.hpp>

View File

@ -1,12 +1,8 @@
/*
Author: aeroson
Description:
Images, index in images and order of roles.
Defined number also implies order, lower number shows more on top of the list.
*/
#include "script_component.hpp"
* Author: aeroson
* Images, index in images and order of roles.
* Defined number also implies order, lower number shows more on top of the list.
*/
#define PILOT 0
#define DRIVER 1

View File

@ -1,19 +1,22 @@
/*
Author: aeroson
Description:
Might be called several times a second
Parameters:
None
Returns:
true if CrewInfo can be shown, false otherwise
*/
* Author: aeroson
* Checks if crew info can be shown.
* Might be called several times a second.
*
* Arguments:
* None
*
* Return Value:
* Can show Crew Info <BOOL>
*
* Example:
* call ace_nametags_fnc_doShow
*
* Public: No
*/
#include "script_component.hpp"
private["_player"];
private ["_player"];
_player = ACE_player;

View File

@ -1,16 +1,18 @@
/*
Author: aeroson
Description:
Shows the actual text and sets text the crew info
Parameters:
None
Returns:
Nothing
*/
* Author: aeroson
* Shows the actual text and sets text the crew info.
*
* Arguments:
* None
*
* Return Value:
* None
*
* Example:
* call ace_nametags_fnc_doShow
*
* Public: No
*/
#include "script_component.hpp"
#include "common.hpp";

View File

@ -1,39 +1,46 @@
/*
* Author: commy2, esteldunedain
*
* Draw the nametag and rank icon.
*
* Argument:
* Arguments:
* 0: Unit (Player) <OBJECT>
* 1: Target <OBJECT>
* 2: alpha (Number)
* 4: Height offset (Number)
* 2: Alpha <NUMBER>
* 4: Height offset <NUMBER>
* 5: Draw Type <NUMBER>
*
* Return value:
* None.
* None
*
* Example:
* [ACE_player, _target, _alpha, _distance * 0.026, _icon] call ace_nametags_fnc_drawNameTagIcon
*
* Public: No
*/
#include "script_component.hpp"
#define TEXTURES_RANKS [ \
"", \
"\A3\Ui_f\data\GUI\Cfg\Ranks\private_gs.paa", \
"\A3\Ui_f\data\GUI\Cfg\Ranks\corporal_gs.paa", \
"\A3\Ui_f\data\GUI\Cfg\Ranks\sergeant_gs.paa", \
"\A3\Ui_f\data\GUI\Cfg\Ranks\lieutenant_gs.paa", \
"\A3\Ui_f\data\GUI\Cfg\Ranks\captain_gs.paa", \
"\A3\Ui_f\data\GUI\Cfg\Ranks\major_gs.paa", \
"\A3\Ui_f\data\GUI\Cfg\Ranks\colonel_gs.paa" \
]
private ["_height", "_position", "_color", "_name", "_rank", "_size", "_icon"];
PARAMS_5(_player,_target,_alpha,_heightOffset,_iconType);
if (_alpha < 0) exitWith {}; //Don't waste ACE_time if not visable
if (_iconType == ICON_NONE) exitWith {}; //Don't waste ACE_time if not visable
private ["_position", "_color", "_name", "_rank", "_size", "_icon", "_scale"];
if (_iconType == ICON_NONE) exitWith {}; //Don't waste time if not visable
//Set Icon:
_icon = "";
_size = 0;
if ((_iconType == ICON_NAME_SPEAK) || (_iconType == ICON_SPEAK)) then {
_icon = QUOTE(PATHTOF(UI\soundwave)) + str (floor (random 10)) + ".paa";
_size = 1;
_alpha = _alpha max 0.6;//Boost alpha when speaking
} else {
if (_iconType == ICON_NAME_RANK) then {
_icon = TEXTURES_RANKS select ((["PRIVATE", "CORPORAL", "SERGEANT", "LIEUTENANT", "CAPTAIN", "MAJOR", "COLONEL"] find (rank _target)) + 1);
_size = 1;
};
};
if (_alpha < 0) exitWith {}; //Don't waste time if not visable
//Set Text:
_name = if (_iconType in [ICON_NAME, ICON_NAME_RANK, ICON_NAME_SPEAK]) then {
@ -42,41 +49,28 @@ _name = if (_iconType in [ICON_NAME, ICON_NAME_RANK, ICON_NAME_SPEAK]) then {
""
};
//Set Icon:
_icon = "";
_size = 0;
if ((_iconType == ICON_NAME_SPEAK) || (_iconType == ICON_SPEAK)) then {
_icon = QUOTE(PATHTOF(UI\soundwave)) + str (floor (random 10)) + ".paa";
_size = 0.75;
_alpha = _alpha + 0.6;//Boost alpha when speaking
} else {
if (_iconType == ICON_NAME_RANK) then {
_icon = TEXTURES_RANKS select ((["PRIVATE", "CORPORAL", "SERGEANT", "LIEUTENANT", "CAPTAIN", "MAJOR", "COLONEL"] find (rank _target)) + 1);
_size = 0.75;
};
};
//Set Color:
if !(group _target == group _player) then {
_color = +GVAR(defaultNametagColor); //Make a copy, then multiply both alpha values (allows client to decrease alpha in settings)
_color set [3, (_color select 3) * _alpha];
} else {
_color = [[1, 1, 1, _alpha], [1, 0, 0, _alpha], [0, 1, 0, _alpha], [0, 0, 1, _alpha], [1, 1, 0, _alpha]] select (["MAIN", "RED", "GREEN", "BLUE", "YELLOW"] find (if (_target == _player) then {0} else {assignedTeam _target})) max 0
_color = [[1, 1, 1, _alpha], [1, 0, 0, _alpha], [0, 1, 0, _alpha], [0, 0, 1, _alpha], [1, 1, 0, _alpha]] select ((["MAIN", "RED", "GREEN", "BLUE", "YELLOW"] find (assignedTeam _target)) max 0);
};
_height = [2, 1.5, 1, 1.5, 1] select (["STAND", "CROUCH", "PRONE", "UNDEFINED", ""] find (stance _target));
// Convert position to ASLW (expected by drawIcon3D) and add height offsets
_position = _target modelToWorldVisual [0, 0, (_height + _heightOffset)];
_position = _target modelToWorldVisual ((_target selectionPosition "pilot") vectorAdd [0,0,(_heightOffset + .35)]);
_scale = [0.333, 0.5, 0.666, 0.83333, 1] select GVAR(tagSize);
drawIcon3D [
_icon,
_color,
_position,
_size,
_size,
(_size * _scale),
(_size * _scale),
0,
_name,
2,
0.033,
(0.05 * _scale),
"PuristaMedium"
];

View File

@ -1,46 +1,38 @@
/*
Author: aeroson
Description:
Gathers and caches data needed by AGM_CrewInfo_fnc_doShow
What really does make difference for the engine is simulation of CfgAmmo
Priority of roles is: driver/pilot, gunner, copilot, commander, ffv, cargo
Parameters:
None
Returns:
[
Is vehicle inherited from Air ?
Array categorizing each vehicle's turret
]
*/
* Author: aeroson
* Gathers and caches data needed by AGM_CrewInfo_fnc_doShow.
* What really does make difference for the engine is simulation of CfgAmmo.
* Priority of roles is: driver/pilot, gunner, copilot, commander, FFV, cargo.
*
* Arguments:
* None
*
* Return Value:
* Data <ARRAY>
* 0: Vehicle inherits from Air <BOOL>
* 1: Categorized vehicle's turrets <ARRAY>
*
* Example:
* call ace_nametags_fnc_updateSettings
*
* Public: No
*/
#include "script_component.hpp"
#include "common.hpp";
private ["_type", "_varName", "_data", "_isAir", "_config", "_fnc_addTurret", "_fnc_addTurretUnit"];
private ["_type", "_varName", "_data"];
_type = _this select 0;
PARAMS_1(_type);
_varName = format ["ACE_CrewInfo_Cache_%1", _type];
_data = + (uiNamespace getVariable _varName);
if (!isNil "_data") exitWith {
_data
};
if (!isNil "_data") exitWith {_data};
_data = [];
private ["_isAir", "_config", "_fnc_addTurret", "_fnc_addTurretUnit"];
_isAir = _type isKindOf "Air";
_fnc_addTurretUnit = {
private ["_config", "_path", "_role", "_simulationEmpty", "_simulationLaserDesignate", "_simulationOther", "_magazine", "_ammo", "_simulation"];
_config = _this select 0;
@ -83,7 +75,6 @@ _fnc_addTurretUnit = {
};
_data pushBack [_path, _role];
};
@ -108,9 +99,7 @@ _fnc_addTurret = {
} else {
_offset = _offset + 1;
};
};
};

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