mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Merge remote-tracking branch 'origin' into pl-translation-1
Conflicts: addons/advanced_ballistics/stringtable.xml addons/frag/stringtable.xml
This commit is contained in:
commit
212862a401
38
AUTHORS.txt
38
AUTHORS.txt
@ -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,37 @@ 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>
|
||||
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 +96,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
BIN
ace_medical.dll
Normal file
Binary file not shown.
@ -28,94 +28,117 @@
|
||||
<Key ID="STR_ACE_AdvancedBallistics_DisplayName">
|
||||
<English>Advanced Ballistics</English>
|
||||
<Polish>Zaawansowana balistyka</Polish>
|
||||
<Spanish>Balística avanzada</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedBallistics_enabled_DisplayName">
|
||||
<English>Advanced Ballistics</English>
|
||||
<Polish>Zaawansowana balistyka</Polish>
|
||||
<Spanish>Balística avanzada</Spanish>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedBallistics_simulateForSnipers_DisplayName">
|
||||
<English>Enabled For Snipers</English>
|
||||
<Spanish>Activada para francotiradores</Spanish>
|
||||
<Polish>Akt. dla snajperów</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedBallistics_simulateForSnipers_Description">
|
||||
<English>Enables advanced ballistics for non local snipers (when using high power optics)</English>
|
||||
<Polish>Aktywuje zaawansowaną balistykę dla nielokalnych snajperów (kiedy używają optyki)</Polish>
|
||||
<Spanish>Activa la balística avanzada para francotiradores no locales (cuando se usa una mira telescópica)</Spanish>
|
||||
<Polish>Aktywuje zaawansowaną balistykę dla nielokalnych snajperów (kiedy używają optyki)</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedBallistics_simulateForGroupMembers_DisplayName">
|
||||
<English>Enabled For Group Members</English>
|
||||
<Polish>Akt. dla czł. grupy</Polish>
|
||||
<Spanish>Activada para miembros de grupo</Spanish>
|
||||
<Polish>Akt. dla czł. grupy</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedBallistics_simulateForGroupMembers_Description">
|
||||
<English>Enables advanced ballistics for non local group members</English>
|
||||
<Polish>Aktywuje zaawansowaną balistykę dla nielokalnych członków grupy</Polish>
|
||||
<Spanish>Activada la balística avanzada para miembros de grupo no locales</Spanish>
|
||||
<Polish>Aktywuje zaawansowaną balistykę dla nielokalnych członków grupy</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedBallistics_simulateForEveryone_DisplayName">
|
||||
<English>Enabled For Everyone</English>
|
||||
<Polish>Akt. dla wszystkich</Polish>
|
||||
<Spanish>Activada para todos</Spanish>
|
||||
<Polish>Akt. dla wszystkich</Polish>
|
||||
</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>
|
||||
<Polish>Aktywuje zaawansowaną balistykę dla wszystkich nielokalnych graczy (aktywacja tej opcji może spodowować spory spadek wydajności podczas ciężkiej wymiany ognia)</Polish>
|
||||
<Spanish>Activada la balística avanzada para todos los jugadores no locales (activarlo puede degradar el rendimiento durante grandes tiroteos en multijugador).</Spanish>
|
||||
<Polish>Aktywuje zaawansowaną balistykę dla wszystkich nielokalnych graczy (aktywacja tej opcji może spodowować spory spadek wydajności podczas ciężkiej wymiany ognia)</Polish>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedBallistics_simulationInterval_DisplayName">
|
||||
<English>Simulation Interval</English>
|
||||
<Polish>Interwał symulacji</Polish>
|
||||
<Spanish>Intervalo de simulación</Spanish>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedBallistics_simulationRadius_DisplayName">
|
||||
<English>Simulation Radius</English>
|
||||
<Polish>Zasięg symulacji</Polish>
|
||||
<Spanish>Radio de simulación</Spanish>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedBallistics_Description">
|
||||
<English></English>
|
||||
|
@ -152,7 +152,7 @@ class ATragMX_Display {
|
||||
type=0;
|
||||
font="TahomaB";
|
||||
SizeEX=0.025;
|
||||
idc=-1;
|
||||
idc=720000;
|
||||
style=48;
|
||||
x=0.55*safezoneW+safezoneX-0.256;
|
||||
y=0.265*safezoneH+safezoneY-0.1;
|
||||
@ -160,7 +160,7 @@ class ATragMX_Display {
|
||||
h=1.024*4/3;
|
||||
colorBackground[]={1,1,1,1};
|
||||
colorText[]={1,1,1,1};
|
||||
text=PATHTOF(UI\atrag.paa);
|
||||
text=PATHTOF(UI\atrag_d.paa);
|
||||
};
|
||||
class POWER: ATragMX_RscButton {
|
||||
idc=-1;
|
||||
|
BIN
addons/atragmx/UI/ATRAG_N.paa
Normal file
BIN
addons/atragmx/UI/ATRAG_N.paa
Normal file
Binary file not shown.
@ -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.0006400, 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.0003740, 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.0006000, 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.0001400, 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.0003950, 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.0010600, 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.0006060, 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.0005350, 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.0006730, 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.0008300, 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.0008150, 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.0007600, 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.0010230, 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.0010350, 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.0008525, 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.0010300, 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.0010300, 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.0004910, 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.0007850, 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.0007710, 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.0006510, 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.0012650, 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.0011250, 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.0011200, 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.0011200, 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)];
|
||||
|
@ -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;
|
||||
};
|
||||
|
||||
|
@ -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;
|
||||
};
|
||||
|
||||
|
@ -15,6 +15,9 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
#define __dsp (uiNamespace getVariable "ATragMX_Display")
|
||||
#define __ctrlBackground (__dsp displayCtrl 720000)
|
||||
|
||||
if (GVAR(active)) exitWith { false };
|
||||
if (underwater ACE_player) exitWith { false };
|
||||
if (!("ACE_ATragMX" in (uniformItems ACE_player)) && !("ACE_ATragMX" in (vestItems ACE_player))) exitWith { false };
|
||||
@ -49,4 +52,11 @@ GVAR(showTargetSpeedAssistTimer) call FUNC(show_target_speed_assist_timer);
|
||||
|
||||
GVAR(active) = true;
|
||||
|
||||
GVAR(DialogPFH) = [{
|
||||
if (!GVAR(active)) exitWith {
|
||||
[_this select 1] call cba_fnc_removePerFrameHandler;
|
||||
};
|
||||
__ctrlBackground ctrlSetText format [QUOTE(PATHTOF(UI\ATRAG_%1.paa)), ["N", "D"] select (call EFUNC(common,ambientBrightness))];
|
||||
}, 60, []] call cba_fnc_addPerFrameHandler;
|
||||
|
||||
true
|
||||
|
@ -1,4 +1,5 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
uiNamespace setVariable ['ATragMX_Display', nil];
|
||||
GVAR(active) = false;
|
||||
GVAR(active) = false;
|
||||
[GVAR(DialogPFH)] call cba_fnc_removePerFrameHandler;
|
@ -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 + "*";
|
||||
};
|
||||
|
||||
|
@ -11,4 +11,4 @@
|
||||
|
||||
#include "\z\ace\addons\main\script_macros.hpp"
|
||||
|
||||
#define ATRAGMX_PROFILE_NAMESPACE_VERSION 1.5
|
||||
#define ATRAGMX_PROFILE_NAMESPACE_VERSION 1.7
|
||||
|
@ -20,11 +20,11 @@ class CfgAmmo {
|
||||
};
|
||||
|
||||
class B_556x45_Ball : BulletBase {
|
||||
airFriction=-0.001265;
|
||||
airFriction=-0.00126466;
|
||||
hit=8;
|
||||
typicalSpeed=750;
|
||||
tracerStartTime = 0.073; //M856 tracer burns out to 800m
|
||||
tracerEndTime = 1.579; //Time in seconds calculated with ballistics calculator
|
||||
tracerStartTime=0.073; // M856 tracer burns out to 800m
|
||||
tracerEndTime=1.57123; // Time in seconds calculated with ballistics calculator
|
||||
ACE_caliber=5.69;
|
||||
ACE_bulletLength=23.012;
|
||||
ACE_bulletMass=4.0176;
|
||||
@ -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.001125;
|
||||
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.001120;
|
||||
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.001120;
|
||||
airFriction=-0.00123272;
|
||||
caliber=1.6;
|
||||
deflecting=18;
|
||||
hit=6;
|
||||
@ -85,14 +85,14 @@ class CfgAmmo {
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={820, 865, 880};
|
||||
ACE_barrelLengths[]={254.0, 393.7, 508.0};
|
||||
ACE_barrelLengths[]={254.0, 368.3, 508.0};
|
||||
};
|
||||
class B_556x45_Ball_Tracer_Red;
|
||||
class ACE_B_556x45_Ball_Tracer_Dim: B_556x45_Ball_Tracer_Red {
|
||||
nvgOnly = 1;
|
||||
};
|
||||
class ACE_545x39_Ball_7N6M : B_556x45_Ball {
|
||||
airFriction=-0.001162;
|
||||
airFriction=-0.00114744;
|
||||
caliber=0.6;
|
||||
deflecting=18;
|
||||
hit=7;
|
||||
@ -110,13 +110,13 @@ class CfgAmmo {
|
||||
};
|
||||
class B_556x45_Ball_Tracer_Green;
|
||||
class ACE_545x39_Ball_7T3M : B_556x45_Ball_Tracer_Green {
|
||||
airFriction=-0.001162;
|
||||
airFriction=-0.00114744;
|
||||
caliber=0.6;
|
||||
deflecting=18;
|
||||
hit=7;
|
||||
typicalSpeed=883;
|
||||
tracerStartTime = 0.073; //7T3M tracer burns out to 850m
|
||||
tracerEndTime = 1.736; //Time in seconds calculated with ballistics calculator
|
||||
tracerStartTime=0.073; // 7T3M tracer burns out to 850m
|
||||
tracerEndTime=1.70236; // Time in seconds calculated with ballistics calculator
|
||||
ACE_caliber=5.588;
|
||||
ACE_bulletLength=21.59;
|
||||
ACE_bulletMass=3.22704;
|
||||
@ -129,7 +129,7 @@ class CfgAmmo {
|
||||
ACE_barrelLengths[]={254.0, 414.02, 508.0};
|
||||
};
|
||||
class B_65x39_Caseless : BulletBase {
|
||||
airFriction=-0.000785;
|
||||
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.00078;
|
||||
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.000651;
|
||||
airFriction=-0.00060887;
|
||||
typicalSpeed=860 ;
|
||||
caliber=1.1;
|
||||
ACE_caliber=6.706;
|
||||
@ -181,11 +181,11 @@ class CfgAmmo {
|
||||
ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4};
|
||||
};
|
||||
class B_762x51_Ball : BulletBase {
|
||||
airFriction=-0.001035;
|
||||
airFriction=-0.00100957;
|
||||
typicalSpeed=833;
|
||||
hit=9;
|
||||
tracerStartTime = 0.073; //Based on the British L5A1 which burns out to 1000m
|
||||
tracerEndTime = 2.058; //Time in seconds calculated with ballistics calculator
|
||||
tracerStartTime=0.073; // Based on the British L5A1 which burns out to 1000m
|
||||
tracerEndTime=2.15957; // Time in seconds calculated with ballistics calculator
|
||||
ACE_caliber=7.823;
|
||||
ACE_bulletLength=28.956;
|
||||
ACE_bulletMass=9.4608;
|
||||
@ -202,7 +202,7 @@ class CfgAmmo {
|
||||
nvgOnly = 1;
|
||||
};
|
||||
class ACE_762x51_Ball_M118LR : B_762x51_Ball {
|
||||
airFriction=-0.0008525;
|
||||
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.0008525;
|
||||
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.00103;
|
||||
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.00103;
|
||||
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.000535;
|
||||
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.0009;
|
||||
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.0008;
|
||||
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.00095;
|
||||
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.000830;
|
||||
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.000815;
|
||||
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.00076;
|
||||
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.001023;
|
||||
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.001023;
|
||||
airFriction=-0.00100023;
|
||||
caliber=1.5;
|
||||
hit=15;
|
||||
typicalSpeed=820;
|
||||
@ -409,12 +409,12 @@ class CfgAmmo {
|
||||
};
|
||||
class B_762x54_Tracer_Green;
|
||||
class ACE_762x54_Ball_7T2 : B_762x54_Tracer_Green {
|
||||
airFriction=-0.001023;
|
||||
airFriction=-0.00103989;
|
||||
caliber=1.5;
|
||||
hit=15;
|
||||
typicalSpeed=800;
|
||||
tracerStartTime = 0.073; //Based on the 7T2 which burns three seconds
|
||||
tracerEndTime = 3;
|
||||
tracerStartTime=0.073; // Based on the 7T2 which burns three seconds
|
||||
tracerEndTime=3;
|
||||
ACE_caliber=7.925;
|
||||
ACE_bulletLength=28.956;
|
||||
ACE_bulletMass=9.6552;
|
||||
@ -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.000821;
|
||||
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.0015168;
|
||||
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.00125;
|
||||
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.001234;
|
||||
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.001234;
|
||||
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.001213;
|
||||
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.00083;
|
||||
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.00106;
|
||||
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.000395;
|
||||
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.000606;
|
||||
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.000537;
|
||||
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.000535;
|
||||
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.000673;
|
||||
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.00014;
|
||||
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.0006;
|
||||
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.0006;
|
||||
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.000374;
|
||||
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.00064;
|
||||
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.0007182;
|
||||
airFriction=-0.00081221;
|
||||
typicalSpeed=250;
|
||||
ACE_caliber=11.481;
|
||||
ACE_bulletLength=17.272;
|
||||
|
@ -55,7 +55,7 @@ class CfgMagazines {
|
||||
displayName = "$STR_ACE_30Rnd_556x45_Stanag_M995_AP_mag_Name";
|
||||
displayNameShort = "$STR_ACE_30Rnd_556x45_Stanag_M995_AP_mag_NameShort";
|
||||
descriptionShort = "$STR_ACE_30Rnd_556x45_Stanag_M995_AP_mag_Description";
|
||||
initSpeed = 1046;
|
||||
initSpeed = 865;
|
||||
};
|
||||
class ACE_30Rnd_556x45_Stanag_Mk262_mag: 30Rnd_556x45_Stanag {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
|
@ -1595,6 +1595,7 @@
|
||||
<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>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
</Project>
|
@ -196,10 +196,12 @@
|
||||
<Key ID="STR_ACE_Captives_ModuleSurrender_DisplayName">
|
||||
<English>Make Unit Surrender</English>
|
||||
<Polish>Poddaj się!</Polish>
|
||||
<Spanish>Hacer que la unidad se rinda</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_ModuleSurrender_Description">
|
||||
<English>Sync a unit to make them surrender.<br />Source: ace_captives</English>
|
||||
<Polish>Zsynchronizuj z jednostką aby sprawić by się poddała<br />Źródło: ace_captives</Polish>
|
||||
<Spanish>Sincroniza una unidad para hacer que se rinda.<br />Fuente: ace_captives</Spanish>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
</Project>
|
@ -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,37 @@ 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"];
|
||||
|
||||
// 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;
|
||||
|
@ -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);
|
||||
};
|
||||
|
@ -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 {
|
||||
|
@ -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;
|
||||
|
44
addons/common/functions/fnc_unloadPersonLocal.sqf
Normal file
44
addons/common/functions/fnc_unloadPersonLocal.sqf
Normal 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;
|
@ -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;
|
||||
};
|
||||
|
@ -473,54 +473,67 @@
|
||||
<Key ID="STR_ACE_Common_CheckPBO_DisplayName">
|
||||
<English>Check PBOs</English>
|
||||
<Polish>Sprawdzaj PBO</Polish>
|
||||
<Spanish>Comprobar PBOs</Spanish>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_CheckPBO_Action_DisplayName">
|
||||
<English>Action</English>
|
||||
<Polish>Akcja</Polish>
|
||||
<Spanish>Acción</Spanish>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_CheckPBO_Action_WarnOnce">
|
||||
<English>Warn once</English>
|
||||
<Polish>Ostrzeż raz</Polish>
|
||||
<Spanish>Avisar una vez</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_CheckPBO_Action_WarnPerm">
|
||||
<English>Warn (permanent)</English>
|
||||
<Polish>Ostrzeżenie (permanentne)</Polish>
|
||||
<Spanish>Avisar (permanente)</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_CheckPBO_Action_Kick">
|
||||
<English>Kick</English>
|
||||
<Polish>Kick</Polish>
|
||||
<Spanish>Expulsar</Spanish>
|
||||
</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>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_CheckPBO_Whitelist_DisplayName">
|
||||
<English>Whitelist</English>
|
||||
<Polish>Biała lista</Polish>
|
||||
<Spanish>Lista blanca</Spanish>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_LSDVehicles_DisplayName">
|
||||
<English>LSD Vehicles</English>
|
||||
<Polish>Pojazdy LSD</Polish>
|
||||
<Spanish>Vehículos LSD</Spanish>
|
||||
</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>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
</Project>
|
@ -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));
|
||||
};
|
||||
};
|
||||
|
@ -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];
|
||||
};
|
||||
};
|
||||
}];
|
||||
|
@ -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);
|
||||
|
@ -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];
|
||||
|
@ -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;
|
||||
|
56
addons/explosives/functions/fnc_interactEH.sqf
Normal file
56
addons/explosives/functions/fnc_interactEH.sqf
Normal 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;
|
35
addons/explosives/functions/fnc_onInventoryChanged.sqf
Normal file
35
addons/explosives/functions/fnc_onInventoryChanged.sqf
Normal 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];
|
||||
};
|
||||
};
|
26
addons/explosives/functions/fnc_onKilled.sqf
Normal file
26
addons/explosives/functions/fnc_onKilled.sqf
Normal 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;
|
@ -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 {
|
||||
|
@ -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)];
|
||||
|
@ -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,31 @@
|
||||
<Key ID="STR_ACE_Explosive_Module_DisplayName">
|
||||
<English>Explosive System</English>
|
||||
<Polish>System ładunków wybuchowych</Polish>
|
||||
<Spanish>Sistema de explosivos</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosive_RequireSpecialist_DisplayName">
|
||||
<English>Require specialists?</English>
|
||||
<Polish>Wymagaj specjalistów?</Polish>
|
||||
<Spanish>¿Requiere especialista?</Spanish>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
</Project>
|
@ -4,29 +4,36 @@
|
||||
<Key ID="STR_ACE_frag_EnableFrag">
|
||||
<English>Fragmentation Simulation</English>
|
||||
<Polish>Symulacja fragmentacji</Polish>
|
||||
<Spanish>Simulación de fragmentación</Spanish>
|
||||
</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>
|
||||
<Polish>Aktywuje symulację fragmentacji ACE</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_frag_EnableSpall">
|
||||
<English>Spalling Simulation</English>
|
||||
<Spanish>Simulación de astillamiento</Spanish>
|
||||
<Polish>Symulacja odprysków</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_frag_EnableSpall_Desc">
|
||||
<English>Enable the ACE Spalling Simulation</English>
|
||||
<Spanish>Activa la simulación de astillamiento ACE</Spanish>
|
||||
<Polish>Aktywuje symulację odprysków ACE</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_frag_MaxTrack">
|
||||
<English>Maximum Projectiles Tracked</English>
|
||||
<Spanish>Máximos proyectiles rastreados</Spanish>
|
||||
<Polish>Maks. liczba śledzonych pocisków</Polish>
|
||||
</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>
|
||||
<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 (>200 proyectiles en el aire a la vez)</Spanish>
|
||||
<Polish>To ustawienie kontroluje maksymalną ilość pocisków, jakie fragmentacja i odpryski symulują w danym momencie. Jeżeli więcej pocisków będzie wystrzelonych, wtedy nie będą one śledzone. Zmniejsz tą opcję jeżeli nie chcesz odczuwać spadków FPS podczas ciężkiej wymiany ognia (więcej niż 200 pocisków w powietrzu na raz).</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_frag_MaxTrackPerFrame">
|
||||
<English>Maximum Projectiles Per Frame</English>
|
||||
<Spanish>Máximos proyectiles por cuadro</Spanish>
|
||||
<Polish>Maks. liczba pocisków na klatkę</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_frag_MaxTrackPerFrame_Desc">
|
||||
@ -35,10 +42,12 @@
|
||||
</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>
|
||||
<Polish>(Tylko SP) Wizualny debug odł./odpr.</Polish>
|
||||
</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>
|
||||
<Polish>(Tylko SP) Wymaga restartu misji/edytora. Aktywuje wizualne śledzenie odłamków oraz odprysków w trybie gry Single Player.</Polish>
|
||||
</Key>
|
||||
</Package>
|
||||
|
@ -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 {
|
||||
|
@ -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);
|
||||
|
||||
|
@ -112,14 +112,17 @@
|
||||
<Key ID="STR_ACE_Hearing_Module_DisplayName">
|
||||
<English>Hearing</English>
|
||||
<Polish>Słuch</Polish>
|
||||
<Spanish>Audición</Spanish>
|
||||
</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>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Hearing_Module_Description">
|
||||
<English></English>
|
||||
|
@ -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";
|
||||
};
|
||||
};
|
||||
|
@ -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);
|
||||
|
@ -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");
|
||||
@ -92,7 +92,7 @@ _recurseFnc = {
|
||||
];
|
||||
_actions pushBack _entry;
|
||||
};
|
||||
};
|
||||
} forEach (configProperties [_actionsCfg, "isClass _x", true]);
|
||||
_actions
|
||||
};
|
||||
|
||||
|
@ -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");
|
||||
|
||||
@ -76,7 +76,7 @@ _recurseFnc = {
|
||||
];
|
||||
_actions pushBack _entry;
|
||||
};
|
||||
};
|
||||
} forEach (configProperties [_actionsCfg, "isClass _x", true]);
|
||||
_actions
|
||||
};
|
||||
|
||||
|
@ -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>
|
||||
|
@ -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">
|
||||
@ -796,14 +796,17 @@
|
||||
<Key ID="STR_ACE_InteractionSystem_Module_DisplayName">
|
||||
<English>Interaction System</English>
|
||||
<Polish>System interakcji</Polish>
|
||||
<Spanish>Sistema de interacción</Spanish>
|
||||
</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>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_InteractionSystem_Module_Description">
|
||||
<English></English>
|
||||
|
18
addons/javelin/CfgMagazines.hpp
Normal file
18
addons/javelin/CfgMagazines.hpp
Normal file
@ -0,0 +1,18 @@
|
||||
class CfgMagazines {
|
||||
//Static Titan Magazine
|
||||
class 5Rnd_GAT_missiles;
|
||||
class 1Rnd_GAT_missiles: 5Rnd_GAT_missiles {
|
||||
ammo = "ACE_Javelin_FGM148_static"; //from misssileGuidance, was "M_Titan_AT_static"
|
||||
};
|
||||
|
||||
//Handheld Titan "AT" Magazine (Locking - "Anti-Tank")
|
||||
class Titan_AA;
|
||||
class Titan_AT: Titan_AA {
|
||||
ammo = "ACE_Javelin_FGM148"; //from misssileGuidance, was "M_Titan_AT"
|
||||
};
|
||||
|
||||
//Handheld Titan "AP" Magazine (SACLOS? "Anti-personal")
|
||||
// class Titan_AP: Titan_AA {
|
||||
//???
|
||||
// };
|
||||
};
|
@ -14,4 +14,5 @@ class CfgPatches {
|
||||
#include "RscInGameUI.hpp"
|
||||
#include "CfgSounds.hpp"
|
||||
#include "CfgWeapons.hpp"
|
||||
#include "CfgVehicles.hpp"
|
||||
#include "CfgVehicles.hpp"
|
||||
#include "CfgMagazines.hpp"
|
||||
|
@ -35,8 +35,17 @@ _soundTime = _args select 4;
|
||||
_randomLockInterval = _args select 5;
|
||||
_fireDisabledEH = _args select 6;
|
||||
|
||||
_configs = configProperties [configFile >> "CfgWeapons" >> (currentWeapon (vehicle ACE_player)), QUOTE(configName _x == QUOTE(QGVAR(enabled))), false];
|
||||
if (((count _configs) < 1) || {(getNumber (_configs select 0)) != 1}) exitWith {
|
||||
private["_ammo", "_magazineConfig", "_weaponConfig"];
|
||||
_weaponConfig = configProperties [configFile >> "CfgWeapons" >> (currentWeapon _currentShooter), QUOTE(configName _x == QUOTE(QGVAR(enabled))), false];
|
||||
_magazineConfig = if ((currentMagazine _currentShooter) != "") then {
|
||||
_ammo = getText (configFile >> "CfgMagazines" >> (currentMagazine _currentShooter) >> "ammo");
|
||||
configProperties [(configFile >> "CfgAmmo" >> _ammo), "(configName _x) == 'ace_missileguidance'", false];
|
||||
} else {
|
||||
[]
|
||||
};
|
||||
|
||||
//Only enable if both weapon and currentMagazine are enabled (bandaid to allow firing the "AP" missle)
|
||||
if (((count _weaponConfig) < 1) || {(getNumber (_weaponConfig select 0)) != 1} || {(count _magazineConfig) < 1} || {(getNumber ((_magazineConfig select 0) >> "enabled")) != 1}) exitWith {
|
||||
__JavelinIGUITargeting ctrlShow false;
|
||||
__JavelinIGUITargetingGate ctrlShow false;
|
||||
__JavelinIGUITargetingLines ctrlShow false;
|
||||
|
@ -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));
|
||||
};
|
||||
};
|
||||
|
@ -57,12 +57,12 @@ if (GVAR(mapShake)) then {
|
||||
} else {
|
||||
if (GVAR(isShaking)) then {
|
||||
// Stop shaking, return to original position
|
||||
ctrlMapAnimClear _mapCtrl;
|
||||
_mapCtrl ctrlMapAnimAdd [0, _mapScale, GVAR(lastStillPosition)];
|
||||
ctrlMapAnimCommit _mapCtrl;
|
||||
GVAR(isShaking) = false;
|
||||
} else {
|
||||
// The map is still, store state
|
||||
ctrlMapAnimClear _mapCtrl;
|
||||
GVAR(lastStillPosition) = _mapCtrl ctrlMapScreenToWorld [0.5, 0.5];
|
||||
GVAR(lastStillTime) = ACE_time;
|
||||
};
|
||||
|
@ -4,38 +4,47 @@
|
||||
<Key ID="STR_ACE_Map_Module_DisplayName">
|
||||
<English>Map</English>
|
||||
<Polish>Mapa</Polish>
|
||||
<Spanish>Mapa</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Map_MapIllumination_DisplayName">
|
||||
<English>Map illumination?</English>
|
||||
<Polish>Oświetlenie mapy</Polish>
|
||||
<Spanish>¿Iluminación de mapa?</Spanish>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Map_MapShake_DisplayName">
|
||||
<English>Map shake?</English>
|
||||
<Polish>Drżenie mapy</Polish>
|
||||
<Spanish>¿Temblor de mapa?</Spanish>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Map_MapLimitZoom_DisplayName">
|
||||
<English>Limit map zoom?</English>
|
||||
<Polish>Ograniczony zoom</Polish>
|
||||
<Spanish>¿Limitar el zoom de mapa?</Spanish>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Map_MapShowCursorCoordinates_DisplayName">
|
||||
<English>Show cursor coordinates?</English>
|
||||
<Polish>Koordynaty pod kursorem</Polish>
|
||||
<Spanish>¿Mostrar coordenadas de cursor?</Spanish>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Map_Module_Description">
|
||||
<English></English>
|
||||
@ -44,22 +53,27 @@
|
||||
<Key ID="STR_ACE_Map_BFT_Module_DisplayName">
|
||||
<English>Blue Force Tracking</English>
|
||||
<Polish>Blue Force Tracking</Polish>
|
||||
<Spanish>Seguimiento de fuerzas amigas</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Map_BFT_Interval_DisplayName">
|
||||
<English>Interval</English>
|
||||
<Polish>Interwał</Polish>
|
||||
<Spanish>Intervalo</Spanish>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Map_BFT_Module_Description">
|
||||
<English></English>
|
||||
|
@ -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"} }};
|
||||
|
@ -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 {
|
||||
|
@ -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);
|
||||
|
@ -21,3 +21,7 @@ class CfgPatches {
|
||||
#include "ACE_Settings.hpp"
|
||||
#include "UI\RscTitles.hpp"
|
||||
#include "UI\triagecard.hpp"
|
||||
|
||||
class ACE_Extensions {
|
||||
extensions[] += {"ace_medical"};
|
||||
};
|
||||
|
@ -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)
|
@ -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];
|
||||
|
@ -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";
|
||||
|
@ -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;
|
||||
@ -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],
|
||||
|
@ -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
|
@ -2704,298 +2704,372 @@
|
||||
<Key ID="STR_ACE_Medical_Category_DisplayName">
|
||||
<English>ACE Medical</English>
|
||||
<Polish>ACE Opcje medyczne</Polish>
|
||||
<Spanish>Médico ACE</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_MedicalSettings_Module_DisplayName">
|
||||
<English>Medical Settings [ACE]</English>
|
||||
<Polish>Ustawienia medyczne [ACE]</Polish>
|
||||
<Spanish>Ajustes médicos [ACE]</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_MedicalSettings_level_DisplayName">
|
||||
<English>Medical Level</English>
|
||||
<Polish>Poziom medyczny</Polish>
|
||||
<Spanish>Nivel médico</Spanish>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_MedicalSettings_basic">
|
||||
<English>Basic</English>
|
||||
<Polish>Podstawowy</Polish>
|
||||
<Spanish>Básico</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_MedicalSettings_advanced">
|
||||
<English>Advanced</English>
|
||||
<Polish>Zaawansowany</Polish>
|
||||
<Spanish>Avanzado</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_MedicalSettings_medicSetting_DisplayName">
|
||||
<English>Medics setting</English>
|
||||
<Polish>Poziom medyków</Polish>
|
||||
<Spanish>Configuración médica</Spanish>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_MedicalSettings_allowLitterCreation_DisplayName">
|
||||
<English>Enable Litter</English>
|
||||
<Polish>Aktywuj odpadki</Polish>
|
||||
<Spanish>Activar restos médicos</Spanish>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_MedicalSettings_enableScreams_DisplayName">
|
||||
<English>Enable Screams</English>
|
||||
<Polish>Aktywuj wrzaski</Polish>
|
||||
<Spanish>Activar gritos</Spanish>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_MedicalSettings_AIDamageThreshold_DisplayName">
|
||||
<English>AI Damage</English>
|
||||
<Polish>Próg obrażeń AI</Polish>
|
||||
<Spanish>Daño IA</Spanish>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_MedicalSettings_enableUnconsciousnessAI_DisplayName">
|
||||
<English>AI Unconsciousness</English>
|
||||
<Polish>Nieprzytomność AI</Polish>
|
||||
<Spanish>Inconsciencia IA</Spanish>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Medical_disabled">
|
||||
<English>Disabled</English>
|
||||
<Polish>Wyłączone</Polish>
|
||||
<Spanish>Activado</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Medical_enabled">
|
||||
<English>Enabled</English>
|
||||
<Polish>Włączone</Polish>
|
||||
<Spanish>Desactivado</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_MedicalSettings_preventInstaDeath_DisplayName">
|
||||
<English>Prevent instant death</English>
|
||||
<Polish>Wył. natychmiast. śmierć</Polish>
|
||||
<Spanish>Prevenir muerte instantánea</Spanish>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_MedicalSettings_bleedingCoefficient_DisplayName">
|
||||
<English>Bleeding coefficient</English>
|
||||
<Polish>Mnożnik krwawienia</Polish>
|
||||
<Spanish>Coeficiente de sangrado</Spanish>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_MedicalSettings_painCoefficient_DisplayName">
|
||||
<English>Pain coefficient</English>
|
||||
<Polish>Mnożnik bólu</Polish>
|
||||
<Spanish>Coeficiente de dolor</Spanish>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_MedicalSettings_keepLocalSettingsSynced_DisplayName">
|
||||
<English>Sync status</English>
|
||||
<Polish>Synchronizuj status</Polish>
|
||||
<Spanish>Sincronizador estado</Spanish>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedMedicalSettings_enableFor_DisplayName">
|
||||
<English>Enabled for</English>
|
||||
<Polish>Aktywne dla</Polish>
|
||||
<Spanish>Hablitado para</Spanish>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Medical_playeronly">
|
||||
<English>Players only</English>
|
||||
<Polish>Tylko dla graczy</Polish>
|
||||
<Spanish>Solo jugadores</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Medical_playersandai">
|
||||
<English>Players and AI</English>
|
||||
<Polish>Gracze oraz AI</Polish>
|
||||
<Spanish>Jugadors e IA</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedMedicalSettings_enableAdvancedWounds_DisplayName">
|
||||
<English>Enable Advanced wounds</English>
|
||||
<Polish>Akt. zaawansowane rany</Polish>
|
||||
<Spanish>Activa heridas avanzadas</Spanish>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedMedicalSettings_enableVehicleCrashes_DisplayName">
|
||||
<English>Vehicle Crashes</English>
|
||||
<Polish>Obrażenia od kolizji</Polish>
|
||||
<Spanish>Accidentes de vehículos</Spanish>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedMedicalSettings_medicSetting_PAK_DisplayName">
|
||||
<English>Allow PAK</English>
|
||||
<Polish>Ust. apteczek osobistych</Polish>
|
||||
<Spanish>Permitir EPA</Spanish>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedMedicalSettings_anyone">
|
||||
<English>Anyone</English>
|
||||
<Polish>Wszyscy</Polish>
|
||||
<Spanish>Nadie</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedMedicalSettings_Medic">
|
||||
<English>Medics only</English>
|
||||
<Polish>Tylko medycy</Polish>
|
||||
<Spanish>Solo médicos</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedMedicalSettings_Special">
|
||||
<English>Doctors only</English>
|
||||
<Polish>Tylko doktorzy</Polish>
|
||||
<Spanish>Solo doctores</Spanish>
|
||||
</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>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedMedicalSettings_useLocation_PAK_DisplayName">
|
||||
<English>Locations PAK</English>
|
||||
<Polish>Ogr. apteczek osobistych</Polish>
|
||||
<Spanish>Ubicacions del EPA</Spanish>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedMedicalSettings_anywhere">
|
||||
<English>Anywhere</English>
|
||||
<Polish>Wszędzie</Polish>
|
||||
<Spanish>Donde sea</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedMedicalSettings_vehicle">
|
||||
<English>Medical vehicles</English>
|
||||
<Polish>Pojazdy medyczne</Polish>
|
||||
<Spanish>Vehiculos médicos</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedMedicalSettings_facility">
|
||||
<English>Medical facility</English>
|
||||
<Polish>Budynki medyczne</Polish>
|
||||
<Spanish>Centro médico</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedMedicalSettings_vehicleAndFacility">
|
||||
<English>Vehicles & facility</English>
|
||||
<Polish>Pojazdy i budynki medyczne</Polish>
|
||||
<Spanish>Vehículos y centros</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedMedicalSettings_disabled">
|
||||
<English>Disabled</English>
|
||||
<Polish>Wyłączone</Polish>
|
||||
<Spanish>Desactivado</Spanish>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_ReviveSettings_Module_DisplayName">
|
||||
<English>Revive Settings [ACE]</English>
|
||||
<Polish>Ustawienia wskrzeszania [ACE]</Polish>
|
||||
<Spanish>Sistema de resucitado [ACE]</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_ReviveSettings_enableRevive_DisplayName">
|
||||
<English>Enable Revive</English>
|
||||
<Polish>Aktywuj wskrzeszanie</Polish>
|
||||
<Spanish>Habilitar resucitado</Spanish>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AssignMedicRoles_EnableList_DisplayName">
|
||||
<English>List</English>
|
||||
<Polish>Lista</Polish>
|
||||
<Spanish>Lista</Spanish>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AssignMedicRoles_role_DisplayName">
|
||||
<English>Is Medic</English>
|
||||
<Polish>Klasa medyczna</Polish>
|
||||
<Spanish>Es médico</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AssignMedicRoles_role_Description">
|
||||
<English></English>
|
||||
@ -3004,66 +3078,82 @@
|
||||
<Key ID="STR_ACE_AssignMedicRoles_role_none">
|
||||
<English>None</English>
|
||||
<Polish>Żadna</Polish>
|
||||
<Spanish>Nada</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AssignMedicRoles_role_medic">
|
||||
<English>Regular medic</English>
|
||||
<Polish>Zwykły medyk</Polish>
|
||||
<Spanish>Médico regular</Spanish>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AssignMedicVehicle_EnableList_DisplayName">
|
||||
<English>List</English>
|
||||
<Polish>Lista</Polish>
|
||||
<Spanish>Lista</Spanish>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AssignMedicalFacility_enabled_DisplayName">
|
||||
<English>Is Medical Facility</English>
|
||||
<Polish>Jest budynkiem med.</Polish>
|
||||
<Spanish>Es centro médico</Spanish>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Medical_Yes">
|
||||
<English>Yes</English>
|
||||
@ -3090,4 +3180,4 @@
|
||||
<Italian>No</Italian>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
</Project>
|
@ -304,30 +304,37 @@
|
||||
<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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Dagr_None">
|
||||
<English>Full Satellite + Buildings</English>
|
||||
<Polish>Pełna satelitarna + budynki</Polish>
|
||||
<Spanish>Satelite completo + Edificios</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Dagr_Side">
|
||||
<English>Topographical + Roads</English>
|
||||
<Polish>Topograficzna + drogi</Polish>
|
||||
<Spanish>Topografico + Carreteras</Spanish>
|
||||
</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>
|
||||
</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.<br />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.<br />Ź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.<br />Fuente: microDAGR.pbo</Spanish>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
</Project>
|
@ -94,47 +94,59 @@ class CfgAmmo {
|
||||
};
|
||||
|
||||
// Titan
|
||||
class M_Titan_AT : MissileBase {
|
||||
class M_Titan_AT : MissileBase {};
|
||||
|
||||
class ACE_Javelin_FGM148: M_Titan_AT {
|
||||
irLock = 0;
|
||||
laserLock = 0;
|
||||
airLock = 0;
|
||||
|
||||
// Turn off arma crosshair-guidance
|
||||
manualControl = 0;
|
||||
|
||||
|
||||
hit = 1400; // default: 800
|
||||
indirectHit = 20;
|
||||
indirectHitRange = 2;
|
||||
// ACE uses these values
|
||||
//trackOversteer = 1;
|
||||
//trackLead = 0;
|
||||
|
||||
|
||||
initTime = 2;
|
||||
|
||||
// Begin ACE guidance Configs
|
||||
class ADDON {
|
||||
enabled = 1;
|
||||
|
||||
|
||||
minDeflection = 0.00005; // Minium flap deflection for guidance
|
||||
maxDeflection = 0.025; // Maximum flap deflection for guidance
|
||||
incDeflection = 0.00005; // The incrmeent in which deflection adjusts.
|
||||
|
||||
|
||||
canVanillaLock = 0;
|
||||
|
||||
|
||||
// Guidance type for munitions
|
||||
defaultSeekerType = "Optic";
|
||||
seekerTypes[] = { "Optic" };
|
||||
|
||||
seekerTypes[] = { "Optic" };
|
||||
|
||||
defaultSeekerLockMode = "LOBL";
|
||||
seekerLockModes[] = { "LOBL" };
|
||||
|
||||
|
||||
seekerAngle = 180; // Angle in front of the missile which can be searched
|
||||
seekerAccuracy = 1; // seeker accuracy multiplier
|
||||
|
||||
|
||||
seekerMinRange = 0;
|
||||
seekerMaxRange = 2500; // Range from the missile which the seeker can visually search
|
||||
|
||||
|
||||
// Attack profile type selection
|
||||
defaultAttackProfile = "JAV_TOP";
|
||||
attackProfiles[] = { "JAV_TOP", "JAV_DIR" };
|
||||
};
|
||||
};
|
||||
};
|
||||
class ACE_Javelin_FGM148_static: ACE_Javelin_FGM148 {
|
||||
//Take config changes from (M_Titan_AT_static: M_Titan_AT)
|
||||
initTime = 0.25; //"How long (in seconds) the projectile waits before starting it's engine.", - but doesn't seem to do anything
|
||||
effectsMissileInit = "RocketBackEffectsStaticRPG";
|
||||
class ADDON: ADDON {
|
||||
enabled = 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -100,14 +100,17 @@
|
||||
<Key ID="STR_ACE_MissileGuidance_Off">
|
||||
<English>Off</English>
|
||||
<Polish>Wyłącz</Polish>
|
||||
<Spanish>Desactivado</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_MissileGuidance_PlayerOnly">
|
||||
<English>Player Only</English>
|
||||
<Polish>Tylko gracz</Polish>
|
||||
<Spanish>Solo jugador</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_MissileGuidance_PlayerAndAi">
|
||||
<English>Player and AI</English>
|
||||
<Polish>Gracz oraz AI</Polish>
|
||||
<Spanish>Jugador e IA</Spanish>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
</Project>
|
@ -1,73 +1,90 @@
|
||||
<?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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_MissionModules_AmbianceSounds_DisplayName">
|
||||
<English>Ambiance Sounds [ACE]</English>
|
||||
<Polish>Dźwięki [ACE]</Polish>
|
||||
<Spanish>[ACE] Sonidos ambiente</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_MissionModules_AmbianceSounds_soundFiles_DisplayName">
|
||||
<English>Sounds</English>
|
||||
<Polish>Dźwięki</Polish>
|
||||
<Spanish>Sonidos</Spanish>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_MissionModules_AmbianceSounds_minimalDistance_DisplayName">
|
||||
<English>Minimal Distance</English>
|
||||
<Polish>Minimalny dystans</Polish>
|
||||
<Spanish>Distancia mínima</Spanish>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_MissionModules_AmbianceSounds_maximalDistance_DisplayName">
|
||||
<English>Maximum Distance</English>
|
||||
<Polish>Maksymalny dystans</Polish>
|
||||
<Spanish>Distancia máxima</Spanish>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_MissionModules_AmbianceSounds_minimalDelay_DisplayName">
|
||||
<English>Minimal Delay</English>
|
||||
<Polish>Minimalne opóźnienie</Polish>
|
||||
<Spanish>Retraso mínimo</Spanish>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_MissionModules_AmbianceSounds_maximalDelay_DisplayName">
|
||||
<English>Maximum Delay</English>
|
||||
<Polish>Maksymalne opóźnienie</Polish>
|
||||
<Spanish>Retraso máximo</Spanish>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_MissionModules_AmbianceSounds_followPlayers_DisplayName">
|
||||
<English>Follow Players</English>
|
||||
<Polish>Podążaj za graczami</Polish>
|
||||
<Spanish>Seguir jugadores</Spanish>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_MissionModules_AmbianceSounds_soundVolume_DisplayName">
|
||||
<English>Volume</English>
|
||||
<Polish>Głośność</Polish>
|
||||
<Spanish>Volumen</Spanish>
|
||||
</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>
|
||||
</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>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
@ -52,34 +52,41 @@
|
||||
<Key ID="STR_ACE_mk6mortar_Module_DisplayName">
|
||||
<English>MK6 Settings</English>
|
||||
<Polish>Moździerz MK6 - Ustawienia</Polish>
|
||||
<Spanish>Ajustes MK6</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_mk6mortar_airResistanceEnabled_DisplayName">
|
||||
<English>Air Resistance</English>
|
||||
<Polish>Opór powietrza</Polish>
|
||||
<Spanish>Resistencia al aire</Spanish>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_mk6mortar_allowComputerRangefinder_DisplayName">
|
||||
<English>Allow MK6 Computer</English>
|
||||
<Polish>Komputer MK6</Polish>
|
||||
<Spanish>Habilitar ordenador del MK6</Spanish>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_mk6mortar_allowCompass_DisplayName">
|
||||
<English>Allow MK6 Compass</English>
|
||||
<Polish>Kompas MK6</Polish>
|
||||
<Spanish>Habilitar brujula del MK6</Spanish>
|
||||
</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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_mk6mortar_Module_Description">
|
||||
<English></English>
|
||||
<Polish>Moduł ten pozwala dostosować ustawienia moździerza MK6.</Polish>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
</Project>
|
@ -54,4 +54,12 @@ class ACE_Settings {
|
||||
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"};
|
||||
};
|
||||
};
|
@ -58,5 +58,8 @@ 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
|
||||
addMissionEventHandler ["Draw3D", {_this call FUNC(onDraw3d);}];
|
||||
}] call EFUNC(common,addEventHandler);
|
||||
|
@ -16,24 +16,27 @@
|
||||
|
||||
#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 +45,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"
|
||||
];
|
||||
|
@ -1,9 +1,12 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_onKeyPressAlphaMax", "_defaultIcon", "_distance", "_alpha", "_icon", "_targets", "_pos2", "_vecy", "_relPos", "_projDist", "_pos", "_target"];
|
||||
private ["_onKeyPressAlphaMax", "_defaultIcon", "_distance", "_alpha", "_icon", "_targets", "_pos2", "_vecy", "_relPos", "_projDist", "_pos", "_target", "_targetEyePosASL", "_ambientBrightness", "_maxDistance"];
|
||||
|
||||
//don't show nametags in spectator
|
||||
if (!alive ACE_player) exitWith {};
|
||||
if ((isNull ACE_player) || {!alive ACE_player}) exitWith {};
|
||||
|
||||
_ambientBrightness = ((([] call EFUNC(common,ambientBrightness)) + ([0, 0.4] select ((currentVisionMode ace_player) != 0))) min 1) max 0;
|
||||
_maxDistance = _ambientBrightness * GVAR(PlayerNamesViewDistance);
|
||||
|
||||
_onKeyPressAlphaMax = if ((GVAR(showPlayerNames) in [3,4])) then {
|
||||
2 + (GVAR(ShowNamesTime) - ACE_time); //after release 1 second of full opacity, 1 second of fading to 0
|
||||
@ -29,8 +32,7 @@ if (GVAR(showCursorTagForVehicles) && {_onKeyPressAlphaMax > 0}) then {
|
||||
{GVAR(ShowNamesForAI) || {[_target] call EFUNC(common,isPlayer)}} &&
|
||||
{!(_target getVariable ["ACE_hideName", false])}) then {
|
||||
_distance = ACE_player distance _target;
|
||||
_alpha = ((1 - 0.2 * (_distance - GVAR(PlayerNamesViewDistance))) min 1) * GVAR(PlayerNamesMaxAlpha);
|
||||
_alpha = _alpha min _onKeyPressAlphaMax;
|
||||
_alpha = (((1 - 0.2 * (_distance - _maxDistance)) min 1) * GVAR(PlayerNamesMaxAlpha)) min _onKeyPressAlphaMax;
|
||||
[ACE_player, _target, _alpha, _distance * 0.026, _defaultIcon] call FUNC(drawNameTagIcon);
|
||||
};
|
||||
};
|
||||
@ -46,8 +48,7 @@ if ((GVAR(showPlayerNames) in [2,4]) && {_onKeyPressAlphaMax > 0}) then {
|
||||
{GVAR(ShowNamesForAI) || {[_target] call EFUNC(common,isPlayer)}} &&
|
||||
{!(_target getVariable ["ACE_hideName", false])}) then {
|
||||
_distance = ACE_player distance _target;
|
||||
_alpha = ((1 - 0.2 * (_distance - GVAR(PlayerNamesViewDistance))) min 1) * GVAR(PlayerNamesMaxAlpha);
|
||||
_alpha = _alpha min _onKeyPressAlphaMax;
|
||||
_alpha = (((1 - 0.2 * (_distance - _maxDistance)) min 1) * GVAR(PlayerNamesMaxAlpha)) min _onKeyPressAlphaMax;
|
||||
_icon = ICON_NONE;
|
||||
if (GVAR(showSoundWaves) == 2) then { //icon will be drawn below, so only show name here
|
||||
_icon = if (([_target] call FUNC(isSpeaking)) && {(vehicle _target) == _target}) then {ICON_NAME} else {_defaultIcon};
|
||||
@ -61,7 +62,7 @@ if ((GVAR(showPlayerNames) in [2,4]) && {_onKeyPressAlphaMax > 0}) then {
|
||||
|
||||
if (((GVAR(showPlayerNames) in [1,3]) && {_onKeyPressAlphaMax > 0}) || {GVAR(showSoundWaves) == 2}) then {
|
||||
_pos = positionCameraToWorld [0, 0, 0];
|
||||
_targets = _pos nearObjects ["CAManBase", GVAR(PlayerNamesViewDistance) + 5];
|
||||
_targets = _pos nearObjects ["CAManBase", _maxDistance + 5];
|
||||
|
||||
if (!surfaceIsWater _pos) then {
|
||||
_pos = ATLtoASL _pos;
|
||||
@ -89,18 +90,14 @@ if (((GVAR(showPlayerNames) in [1,3]) && {_onKeyPressAlphaMax > 0}) || {GVAR(sho
|
||||
{GVAR(ShowNamesForAI) || {[_target] call EFUNC(common,isPlayer)}} &&
|
||||
{!(_target getVariable ["ACE_hideName", false])}) then {
|
||||
|
||||
if (lineIntersects [_pos, (visiblePositionASL _target) vectorAdd [0,0,1], vehicle ACE_player, _target]) exitWith {}; // Check if there is line of sight
|
||||
_targetEyePosASL = eyePos _target;
|
||||
if (lineIntersects [_pos, _targetEyePosASL, ACE_player, _target]) exitWith {}; // Check if there is line of sight
|
||||
|
||||
_relPos = (visiblePositionASL _target) vectorDiff _pos;
|
||||
_distance = vectorMagnitude _relPos;
|
||||
_projDist = _relPos vectorDistance (_vecy vectorMultiply (_relPos vectorDotProduct _vecy));
|
||||
|
||||
_alpha = ((1 - 0.2 * (_distance - GVAR(PlayerNamesViewDistance))) min (1 - 0.15 * (_projDist * 5 - _distance - 3)) min 1) * GVAR(PlayerNamesMaxAlpha);
|
||||
|
||||
if ((GVAR(showSoundWaves) == 2) && {([_target] call FUNC(isSpeaking)) && {(vehicle _target) == _target}}) then {
|
||||
_alpha = 1;
|
||||
} else {
|
||||
_alpha = _alpha min _onKeyPressAlphaMax;
|
||||
};
|
||||
_alpha = (((1 - 0.2 * (_distance - _maxDistance)) min 1) * GVAR(PlayerNamesMaxAlpha)) min _onKeyPressAlphaMax;
|
||||
|
||||
[ACE_player, _target, _alpha, _distance * 0.026, _icon] call FUNC(drawNameTagIcon);
|
||||
};
|
||||
|
@ -2,11 +2,11 @@
|
||||
#include "\z\ace\addons\main\script_mod.hpp"
|
||||
|
||||
#ifdef DEBUG_ENABLED_NAMETAGS
|
||||
#define DEBUG_MODE_FULL
|
||||
#define DEBUG_MODE_FULL
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_SETTINGS_NAMETAGS
|
||||
#define DEBUG_SETTINGS DEBUG_SETTINGS_NAMETAGS
|
||||
#define DEBUG_SETTINGS DEBUG_SETTINGS_NAMETAGS
|
||||
#endif
|
||||
|
||||
#include "\z\ace\addons\main\script_macros.hpp"
|
||||
@ -16,3 +16,15 @@
|
||||
#define ICON_NAME_RANK 2
|
||||
#define ICON_NAME_SPEAK 3
|
||||
#define ICON_SPEAK 4
|
||||
|
||||
//todo?: custom rank icons??
|
||||
#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" \
|
||||
]
|
@ -112,50 +112,62 @@
|
||||
<Key ID="STR_ACE_NameTags_Module_DisplayName">
|
||||
<English>Name Tags</English>
|
||||
<Polish>Ustawienia imion</Polish>
|
||||
<Spanish>Etiquetas de nombre</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_NameTags_PlayerNamesViewDistance_DisplayName">
|
||||
<English>Player Names View Dist.</English>
|
||||
<Polish>Zasięg imion graczy</Polish>
|
||||
<Spanish>Distancia de vision para nombres de jugadores</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_NameTags_PlayerNamesViewDistance_Description">
|
||||
<English>Distance in meters at which player names are shown. Default: 5</English>
|
||||
<Polish>Dystans w metrach, na którym wyświetlane są imiona graczy. Domyślnie: 5</Polish>
|
||||
<Spanish>Distancia en metros a la que se muestran los nombres de los jugadores. Por defecto: 5</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_NameTags_showNamesForAI_DisplayName">
|
||||
<English>Show name tags for AI?</English>
|
||||
<Polish>Imiona AI</Polish>
|
||||
<Spanish>¿Mostrar nombres para la IA?</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_NameTags_showNamesForAI_Description">
|
||||
<English>Show the name and rank tags for friendly AI units? Default: Do not force</English>
|
||||
<Polish>Pokaż imiona i rangi przyjaznych jednostek AI? Domyślnie: Nie wymuszaj</Polish>
|
||||
<Spanish>Muestra etiquetas de nombre y rango para las unidades IA amigas? Por defecto: No forzar</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_NameTags_DoNotForce">
|
||||
<English>Do Not Force</English>
|
||||
<Polish>Nie wymuszaj</Polish>
|
||||
<Spanish>No forzar</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_NameTags_ForceHide">
|
||||
<English>Force Hide</English>
|
||||
<Polish>Wymuś ukrycie</Polish>
|
||||
<Spanish>Ocultar forzado</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_NameTags_ForceShow">
|
||||
<English>Force show</English>
|
||||
<Polish>Wymuś wyświetlanie</Polish>
|
||||
<Spanish>Mostrar forzado</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_NameTags_showVehicleCrewInfo_DisplayName">
|
||||
<English>Show crew info?</English>
|
||||
<Polish>Pokaż załogę</Polish>
|
||||
<Spanish>¿Mostrar información de la tripulación?</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_NameTags_showVehicleCrewInfo_Description">
|
||||
<English>Show vehicle crew info, or by default allows players to choose it on their own. Default: Do Not Force</English>
|
||||
<Polish>Pokaż informacje o obsadzie pojazdu, lub pozwól graczom ustawić tą opcje według własnego uznania. Domyślnie: Nie wymuszaj</Polish>
|
||||
<Spanish>Muestra información de la tripulación, o por defecto permite a los jugadores elegirlo. Por defecto: No forzar</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_NameTags_showCursorTagForVehicles_DisplayName">
|
||||
<English>Show for Vehicles</English>
|
||||
<Polish>Pokaż dla pojazdów</Polish>
|
||||
<Spanish>Mostrar para vehiculos</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_NameTags_showCursorTagForVehicles_Description">
|
||||
<English>Show cursor NameTag for vehicle commander (only if client has name tags enabled)Default: No</English>
|
||||
<Polish>Pokazuj imię dowódcy pojazdu nad pojazdem (tylko jeżeli klient ma włączone imiona graczy). Domyślnie: Nie</Polish>
|
||||
<Spanish>Muestra etiquetas de nombre en el cursor para el comandante del vehiculo (solo si el cliente tiene las etiquetas de nombre activadas) Por defecto: No</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_NameTags_Module_Description">
|
||||
<English></English>
|
||||
@ -164,38 +176,51 @@
|
||||
<Key ID="STR_ACE_Common_Disabled">
|
||||
<English>Disabled</English>
|
||||
<Polish>Wyłączone</Polish>
|
||||
<Spanish>Desactivado</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_Enabled">
|
||||
<English>Enabled</English>
|
||||
<Polish>Włączone</Polish>
|
||||
<Spanish>Activado</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_OnlyCursor">
|
||||
<English>Only Cursor</English>
|
||||
<Polish>Tylko pod kursorem</Polish>
|
||||
<Spanish>Solo cursor</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_OnlyOnKeypress">
|
||||
<English>Only On Keypress</English>
|
||||
<Polish>Tylko po wciśnięciu klawisza</Polish>
|
||||
<Spanish>Solo al pulsar tecla</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_OnlyCursorAndKeyPress">
|
||||
<English>Only Cursor and KeyPress</English>
|
||||
<Polish>Tylko pod kursorem i po wciśnięciu klawisza</Polish>
|
||||
<Spanish>En cursor y al pulsar tecla</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_NameTagSettings">
|
||||
<English>Use Nametag settings</English>
|
||||
<Polish>Użyj ustawień imion</Polish>
|
||||
<Spanish>Usar ajustes de etiquetas de nombre</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_AlwaysShowAll">
|
||||
<English>Always Show All</English>
|
||||
<Polish>Zawsze pokazuj wszystkie</Polish>
|
||||
<Spanish>Mostrar siempre todo</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_NameTags_ShowPlayerNames_Desc">
|
||||
<English></English>
|
||||
<Polish>Opcja ta pozwala dostosować sposób wyświetlania imion nad głowami graczy. Opcja "Tylko po wciśnięciu klawisza" wyświetla imiona tylko przytrzymania klawisza "Modyfikator" dostępnego w menu ustawień addonów -> ACE3.</Polish>
|
||||
<Polish>Opcja ta pozwala dostosować sposób wyświetlania imion nad głowami graczy. Opcja "Tylko po wciśnięciu klawisza" wyświetla imiona tylko przytrzymania klawisza "Modyfikator" dostępnego w menu ustawień addonów -> ACE3.</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_NameTags_ShowSoundWaves_Desc">
|
||||
<English></English>
|
||||
<Polish>Opcja ta pozwala dostosować sposób wyświetlania efektu fal dźwiękowych nad głowami mówiących graczy, wyświetlanych po przytrzymaniu klawisza PTT. Opcja ta współpracuje z TFAR oraz ACRE2.</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_nametags_tagsize_name">
|
||||
<English>Nametags Size</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_nametags_tagsize_description">
|
||||
<English>Text and Icon Size Scaling</English>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
</Project>
|
@ -22,12 +22,12 @@ PARAMS_2(_player,_changeInBrightness);
|
||||
|
||||
_brightness = _player getVariable [QGVAR(NVGBrightness), 0];
|
||||
|
||||
_brightness = ((round (10 * _brightness + _changeInBrightness) / 10) min 1) max -1;
|
||||
_brightness = ((round (10 * _brightness + _changeInBrightness) / 10) min 0.5) max -0.5;
|
||||
|
||||
_player setVariable [QGVAR(NVGBrightness), _brightness, false];
|
||||
|
||||
GVAR(ppEffectNVGBrightness) ppEffectAdjust [1, 1, _brightness / 4, [0, 0, 0, 0], [0, 0, 0, 1], [0, 0, 0, 1]];
|
||||
GVAR(ppEffectNVGBrightness) ppEffectAdjust [1, (_brightness + 1), 0, [0, 0, 0, 0], [0, 0, 0, 1], [0, 0, 0, 1]];
|
||||
GVAR(ppEffectNVGBrightness) ppEffectCommit 0;
|
||||
|
||||
[format [(localize "STR_ACE_NightVision_NVGBrightness"), (_brightness * 100)]] call EFUNC(common,displayTextStructured);
|
||||
[format [(localize "STR_ACE_NightVision_NVGBrightness"), (_brightness * 10)]] call EFUNC(common,displayTextStructured);
|
||||
playSound "ACE_Sound_Click";
|
||||
|
@ -41,7 +41,7 @@ class RscInGameUI {
|
||||
};
|
||||
|
||||
class ACE_RscWeapon_base: RscWeaponZeroing {
|
||||
controls[] = {"CA_Zeroing","CA_FOVMode","ACE_DrawReticleHelper","ReticleDay","ReticleNight","BodyNight","BodyDay"}; // don't change this order
|
||||
controls[] = {"CA_Zeroing","CA_FOVMode","ACE_DrawReticleHelper","ReticleDay","ReticleNight","BodyNight","BodyDay", "trippleHeadLeft", "trippleHeadRight"}; // don't change this order
|
||||
|
||||
class CA_FOVMode: RscOpticsValue { // idea by Taosenai. Apparently this can be used via isNil check to determine wheter the scope or the kolimator is used
|
||||
idc = 154;
|
||||
@ -70,9 +70,9 @@ class RscInGameUI {
|
||||
colorText[] = {1,1,1,0};
|
||||
colorBackground[] = {0,0,0,0};
|
||||
x = safezoneX+0.5*safezoneW-0.5*SIZEX;
|
||||
y = safezoneY+0.5*safezoneH-0.5*SIZEX*safezoneW/safezoneH*(16/9)/(getResolution select 4);
|
||||
y = safezoneY+0.5*safezoneH-0.5*SIZEX*(4/3);
|
||||
w = SIZEX;
|
||||
h = SIZEX*safezoneW/safezoneH*(16/9)/(getResolution select 4);
|
||||
h = SIZEX*(4/3);
|
||||
};
|
||||
|
||||
class ReticleNight: ReticleDay {
|
||||
@ -86,15 +86,32 @@ class RscInGameUI {
|
||||
idc = 1713005;
|
||||
text = "";
|
||||
x = safezoneX+0.5*safezoneW-0.5*SIZEX;
|
||||
y = safezoneY+0.5*safezoneH-0.5*SIZEX*safezoneW/safezoneH*(16/9)/(getResolution select 4);
|
||||
y = safezoneY+0.5*safezoneH-0.5*SIZEX*(4/3);
|
||||
w = SIZEX;
|
||||
h = SIZEX*safezoneW/safezoneH*(16/9)/(getResolution select 4);
|
||||
h = SIZEX*(4/3);
|
||||
};
|
||||
|
||||
class BodyNight: BodyDay {
|
||||
idc = 1713006;
|
||||
text = "";
|
||||
};
|
||||
|
||||
//These are just black side panels to cover the areas that the optics p3d doesn't cover
|
||||
//It will ONLY effect tripple head users as (safezoneX == safeZoneXAbs) for everyone else
|
||||
//Reference PR #1156:
|
||||
class trippleHeadLeft: RscText {
|
||||
idc = 1713010;
|
||||
x = "safeZoneXAbs";
|
||||
Y = "safezoneY";
|
||||
W = "(safezoneX - safeZoneXAbs) * ((getResolution select 4)/(16/3))";
|
||||
H = "safeZoneH";
|
||||
colorBackground[] = {0,0,0,1};
|
||||
};
|
||||
class trippleHeadRight: trippleHeadLeft {
|
||||
idc = 1713011;
|
||||
x = "safeZoneXAbs + safeZoneWAbs - (safezoneX - safeZoneXABS) * ((getResolution select 4)/(16/3))";
|
||||
colorBackground[] = {0,0,0,1};
|
||||
};
|
||||
};
|
||||
|
||||
class ACE_RscWeapon_Hamr: ACE_RscWeapon_base {
|
||||
@ -177,12 +194,12 @@ _ctrl = (D displayCtrl 1713006);
|
||||
_sizeX = 1.54/(getResolution select 5);
|
||||
_sizeY = _sizeX*safezoneW/safezoneH;
|
||||
|
||||
_ctrl ctrlSetPosition [
|
||||
_ctrl ctrlSetPosition [
|
||||
safezoneX+0.5*safezoneW-0.5*_sizeX,
|
||||
safezoneY+0.5*safezoneH-0.5*_sizeY,
|
||||
_sizeX,
|
||||
_sizeY
|
||||
_sizeX,
|
||||
_sizeY
|
||||
];
|
||||
_ctrl ctrlCommit 0
|
||||
|
||||
*/
|
||||
*/
|
||||
|
@ -52,7 +52,7 @@ _scopeShiftY = _recoilCoef * linearConversion [0, 1, random 1, SCOPE_SHIFT_Y_MIN
|
||||
private ["_sizeX", "_sizeY"];
|
||||
|
||||
_sizeX = (0.75+_recoilScope)/(getResolution select 5);
|
||||
_sizeY = _sizeX*safezoneW/safezoneH*(16/9)/(getResolution select 4);
|
||||
_sizeY = _sizeX*(4/3);
|
||||
|
||||
private "_positionReticle";
|
||||
_positionReticle = [
|
||||
@ -83,7 +83,7 @@ _positionBody = [
|
||||
|
||||
// Bring them all back
|
||||
_sizeX = 0.75/(getResolution select 5);
|
||||
_sizeY = _sizeX*safezoneW/safezoneH*(16/9)/(getResolution select 4);
|
||||
_sizeY = _sizeX*(4/3);
|
||||
|
||||
_positionReticle = [
|
||||
safezoneX+0.5*safezoneW-0.5*_sizeX,
|
||||
|
@ -12,24 +12,29 @@ if (!ctrlShown (_display displayCtrl 154)) exitWith {
|
||||
(_display displayCtrl 1713002) ctrlShow false;
|
||||
(_display displayCtrl 1713005) ctrlShow false;
|
||||
(_display displayCtrl 1713006) ctrlShow false;
|
||||
};
|
||||
|
||||
GVAR(camera) setposATL positioncameratoworld [0,0,0.4];
|
||||
GVAR(camera) camPrepareTarget positioncameratoworld [0,0,50];
|
||||
GVAR(camera) camCommitPrepared 0;
|
||||
|
||||
// @todo, check if that needs to be done at all
|
||||
if (cameraView == "GUNNER") then {
|
||||
GVAR(camera) camsetFOV 0.7;
|
||||
GVAR(camera) camcommit 0;
|
||||
} else {
|
||||
GVAR(camera) camsetFOV 0.01;
|
||||
GVAR(camera) camcommit 0;
|
||||
(_display displayCtrl 1713010) ctrlShow false;
|
||||
(_display displayCtrl 1713011) ctrlShow false;
|
||||
};
|
||||
|
||||
// @todo, all weapon types
|
||||
private "_optic";
|
||||
private ["_optic", "_isPIP"];
|
||||
_optic = (primaryWeaponItems ACE_player) select 2;
|
||||
_isPIP = (getText (configFile >> "CfgWeapons" >> _optic >> "ItemInfo" >> "modelOptics")) == QUOTE(PATHTOF(models\ace_optics_pip.p3d));
|
||||
|
||||
if (_isPIP) then {
|
||||
GVAR(camera) setposATL positioncameratoworld [0,0,0.4];
|
||||
GVAR(camera) camPrepareTarget positioncameratoworld [0,0,50];
|
||||
GVAR(camera) camCommitPrepared 0;
|
||||
|
||||
// @todo, check if that needs to be done at all
|
||||
if (cameraView == "GUNNER") then {
|
||||
GVAR(camera) camsetFOV 0.7;
|
||||
GVAR(camera) camcommit 0;
|
||||
} else {
|
||||
GVAR(camera) camsetFOV 0.01;
|
||||
GVAR(camera) camcommit 0;
|
||||
};
|
||||
};
|
||||
|
||||
// calculate lighting
|
||||
private ["_dayOpacity", "_nightOpacity"];
|
||||
@ -48,9 +53,11 @@ _nightOpacity = [1,0] select (_dayOpacity == 1);
|
||||
(_display displayCtrl 1713002) ctrlCommit 0;
|
||||
(_display displayCtrl 1713005) ctrlCommit 0;
|
||||
(_display displayCtrl 1713006) ctrlCommit 0;
|
||||
*/
|
||||
*/
|
||||
|
||||
(_display displayCtrl 1713001) ctrlShow true;
|
||||
(_display displayCtrl 1713002) ctrlShow true;
|
||||
(_display displayCtrl 1713005) ctrlShow true;
|
||||
(_display displayCtrl 1713006) ctrlShow true;
|
||||
(_display displayCtrl 1713010) ctrlShow _isPIP;
|
||||
(_display displayCtrl 1713011) ctrlShow _isPIP;
|
||||
|
@ -18,8 +18,6 @@
|
||||
|
||||
private ["_compiledConfig", "_name", "_typeName", "_isClientSetable", "_localizedName", "_localizedDescription", "_possibleValues", "_defaultValue", "_value", "_compiledConfigEntry"];
|
||||
|
||||
_compiledConfig = "
|
||||
";
|
||||
{
|
||||
/*_settingData = [
|
||||
_name,
|
||||
@ -55,25 +53,11 @@ class %1 {
|
||||
force = 1;
|
||||
};", _name, _value, format['"%1"', _typeName]];
|
||||
|
||||
_compiledConfig = _compiledConfig + _compiledConfigEntry;
|
||||
"ace_clipboard" callExtension _compiledConfigEntry;
|
||||
};
|
||||
} forEach EGVAR(common,settings);
|
||||
|
||||
FUNC(clipboardExport) = {
|
||||
private["_chunks"];
|
||||
_chunks = [];
|
||||
|
||||
_chunks = [_this select 0, ";"] call CBA_fnc_split;
|
||||
|
||||
{
|
||||
private["_chunk"];
|
||||
_chunk = _x + ";";
|
||||
"ace_clipboard" callExtension format["%1", _chunk];
|
||||
} forEach _chunks;
|
||||
|
||||
"ace_clipboard" callExtension "--COMPLETE--";
|
||||
};
|
||||
[_compiledConfig] call FUNC(clipboardExport);
|
||||
"ace_clipboard" callExtension "--COMPLETE--";
|
||||
|
||||
["STR_ACE_OptionsMenu_settingsExported"] call EFUNC(common,displayTextStructured);
|
||||
|
||||
|
@ -244,46 +244,57 @@
|
||||
<Key ID="STR_AllowConfigExport_Module_DisplayName">
|
||||
<English>Allow Config Export [ACE]</English>
|
||||
<Polish>Pozwól na eksport ustawień [ACE]</Polish>
|
||||
<Spanish>[ACE] Permitir exportar configuración</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_AllowConfigExport_allowconfigurationExport_DisplayName">
|
||||
<English>Allow</English>
|
||||
<Polish>Zezwól</Polish>
|
||||
<Spanish>Permitir</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_AllowConfigExport_allowconfigurationExport_Description">
|
||||
<English>Allow export of all settings to a server config formatted.</English>
|
||||
<Polish>Zezwól na eksport wszystkich ustawień do formatu konfiguracji serwera.</Polish>
|
||||
<Spanish>Permitir la exportación de todos los ajustes de configuración a un servidor con formato.</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_AllowConfigExport_Module_Description">
|
||||
<English>When allowed, you have access to the settings modification and export in SP. Clicking export will place the formated config on your clipboard.</English>
|
||||
<Polish>Jeżeli ustawione na zezwól, wtedy będziesz mieć dostęp do ekranu modyfikacji wszystich ustawień i zmiennych ACE, a także będziesz mieć możliwość eksportu tychże ustawień do formatu rozpoznawalnego przez userconfig serwera. Kliknięcie opcji Eksportuj skopiuje wszystkie ustawienia do schowka. Działa tylko w trybie SP.</Polish>
|
||||
<Spanish>Cuando esta permitido, se tiene acceso a los ajustes de modificación y exportación en SP. Pulsar en exportar copiara la configuración al portapapeles.</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_Hide">
|
||||
<English>Hide</English>
|
||||
<Polish>Ukryj</Polish>
|
||||
<Spanish>Ocultar</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_TopRightDown">
|
||||
<English>Top right, downwards</English>
|
||||
<Polish>Po prawej u góry, w dół</Polish>
|
||||
<Spanish>Arriba a la derecha, hacia abajo</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_TopRightLeft">
|
||||
<English>Top right, to the left</English>
|
||||
<Polish>Po prawej u góry, do lewej</Polish>
|
||||
<Spanish>Arriba a la derecha, hacia la izquierda</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_TopLeftDown">
|
||||
<English>Top left, downwards</English>
|
||||
<Polish>Po lewej u góry, w dół</Polish>
|
||||
<Spanish>Arriba a la izquierda, hacia abajo</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_TopLeftRight">
|
||||
<English>Top left, to the right</English>
|
||||
<Polish>Po lewej u góry, do prawej</Polish>
|
||||
<Spanish>Arriba a la izquierda, hacia la derecha</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_Top">
|
||||
<English>Top</English>
|
||||
<Polish>Góra</Polish>
|
||||
<Spanish>Arriba</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_Bottom">
|
||||
<English>Bottom</English>
|
||||
<Polish>Dół</Polish>
|
||||
<Spanish>Abajo</Spanish>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
</Project>
|
@ -40,7 +40,21 @@ class CfgWeapons {
|
||||
ACE_Overheating_SlowdownFactor[] = {1, 1, 1, 0.9};
|
||||
ACE_Overheating_JamChance[] = {0, 0.0003, 0.0015, 0.0075};
|
||||
};
|
||||
|
||||
class MMG_02_base_F : rifle_Base_F {
|
||||
ACE_Overheating_allowSwapBarrel = 1;
|
||||
ACE_Overheating_Dispersion[] = {0, -0.001, 0.001, 0.004};
|
||||
ACE_Overheating_SlowdownFactor[] = {1, 1, 1, 0.9};
|
||||
ACE_Overheating_JamChance[] = {0, 0.0003, 0.0015, 0.0075};
|
||||
};
|
||||
|
||||
class MMG_01_base_F : rifle_Base_F {
|
||||
ACE_Overheating_allowSwapBarrel = 1;
|
||||
ACE_Overheating_Dispersion[] = {0, -0.001, 0.001, 0.004};
|
||||
ACE_Overheating_SlowdownFactor[] = {1, 1, 1, 0.9};
|
||||
ACE_Overheating_JamChance[] = {0, 0.0003, 0.0015, 0.0075};
|
||||
};
|
||||
|
||||
class arifle_MX_SW_F : arifle_MX_Base_F {
|
||||
ACE_clearJamAction = ""; // Custom jam clearing action. Use empty string to undefine.
|
||||
ACE_Overheating_allowSwapBarrel = 1; // 1 to enable barrel swap. 0 to disable. Meant for machine guns where you can easily swap the barrel without dismantling the whole weapon.
|
||||
|
1
addons/rangecard/$PBOPREFIX$
Normal file
1
addons/rangecard/$PBOPREFIX$
Normal file
@ -0,0 +1 @@
|
||||
z\ace\addons\rangecard
|
11
addons/rangecard/CfgEventHandlers.hpp
Normal file
11
addons/rangecard/CfgEventHandlers.hpp
Normal file
@ -0,0 +1,11 @@
|
||||
class Extended_PreInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE( call COMPILE_FILE(XEH_preInit) );
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_PostInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE( call COMPILE_FILE(XEH_postInit) );
|
||||
};
|
||||
};
|
60
addons/rangecard/CfgVehicles.hpp
Normal file
60
addons/rangecard/CfgVehicles.hpp
Normal file
@ -0,0 +1,60 @@
|
||||
class CfgVehicles {
|
||||
class Man;
|
||||
class CAManBase: Man {
|
||||
class ACE_Actions {
|
||||
class ACE_Weapon {
|
||||
class GVAR(copyRangeCard) {
|
||||
displayName = "$STR_ACE_RangeCard_CopyRangeCard";
|
||||
distance = 2.0;
|
||||
condition = QUOTE(_target call FUNC(canCopy));
|
||||
statement = QUOTE(_target call FUNC(updateClassNames));
|
||||
icon = QUOTE(PATHTOF(UI\RangeCard_Icon.paa));
|
||||
};
|
||||
};
|
||||
};
|
||||
class ACE_SelfActions {
|
||||
class ACE_Equipment {
|
||||
class GVAR(open) {
|
||||
displayName = "$STR_ACE_RangeCard_OpenRangeCard";
|
||||
condition = QUOTE(call FUNC(canShow) && !GVAR(RangeCardOpened));
|
||||
statement = QUOTE(false call FUNC(openRangeCard));
|
||||
showDisabled = 0;
|
||||
priority = 0.1;
|
||||
icon = QUOTE(PATHTOF(UI\RangeCard_Icon.paa));
|
||||
exceptions[] = {"notOnMap"};
|
||||
};
|
||||
class GVAR(openCopy) {
|
||||
displayName = "$STR_ACE_RangeCard_OpenRangeCardCopy";
|
||||
condition = QUOTE(call FUNC(canShowCopy) && !GVAR(RangeCardOpened));
|
||||
statement = QUOTE(true call FUNC(openRangeCard));
|
||||
showDisabled = 0;
|
||||
priority = 0.1;
|
||||
icon = QUOTE(PATHTOF(UI\RangeCard_Icon.paa));
|
||||
exceptions[] = {"notOnMap"};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class Item_Base_F;
|
||||
class ACE_Item_RangeCard: Item_Base_F {
|
||||
author = "Ruthberg";
|
||||
scope = 2;
|
||||
scopeCurator = 2;
|
||||
displayName = "Range Card";
|
||||
vehicleClass = "Items";
|
||||
class TransportItems {
|
||||
class ACE_RangeCard {
|
||||
name = "ACE_RangeCard";
|
||||
count = 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class Box_NATO_Support_F;
|
||||
class ACE_Box_Misc: Box_NATO_Support_F {
|
||||
class TransportItems {
|
||||
MACRO_ADDITEM(ACE_RangeCard,6);
|
||||
};
|
||||
};
|
||||
};
|
19
addons/rangecard/CfgWeapons.hpp
Normal file
19
addons/rangecard/CfgWeapons.hpp
Normal file
@ -0,0 +1,19 @@
|
||||
|
||||
class CfgWeapons {
|
||||
class ACE_ItemCore;
|
||||
class InventoryItem_Base_F;
|
||||
|
||||
class ACE_RangeCard: ACE_ItemCore {
|
||||
author[] = {"Ruthberg"};
|
||||
scope = 2;
|
||||
displayName = "$STR_ACE_RangeCard_Name";
|
||||
descriptionShort = "$STR_ACE_RangeCard_Description";
|
||||
picture = PATHTOF(UI\RangeCard_Icon.paa);
|
||||
icon = "iconObject_circle";
|
||||
mapSize = 0.034;
|
||||
|
||||
class ItemInfo: InventoryItem_Base_F {
|
||||
mass = 1;
|
||||
};
|
||||
};
|
||||
};
|
10
addons/rangecard/README.md
Normal file
10
addons/rangecard/README.md
Normal file
@ -0,0 +1,10 @@
|
||||
ace_rangecards
|
||||
===============
|
||||
|
||||
Adds range cards
|
||||
|
||||
## Maintainers
|
||||
|
||||
The people responsible for merging changes to this component or answering potential questions.
|
||||
|
||||
- [Ruthberg] (http://github.com/Ulteq)
|
198
addons/rangecard/RscTitles.hpp
Normal file
198
addons/rangecard/RscTitles.hpp
Normal file
@ -0,0 +1,198 @@
|
||||
#define ST_LEFT 0
|
||||
#define ST_RIGHT 1
|
||||
#define ST_CENTER 2
|
||||
|
||||
class RscListNBox;
|
||||
class ScrollBar;
|
||||
|
||||
class RangeCard_RscText {
|
||||
idc=-1;
|
||||
type=0;
|
||||
style=ST_CENTER;
|
||||
colorDisabled[]={0,0,0,0.0};
|
||||
colorBackground[]={0,0,0,0};
|
||||
colorText[]={0,0,0,1};
|
||||
text="";
|
||||
x=0;
|
||||
y=0;
|
||||
h=0.028;
|
||||
w=0.06;
|
||||
font="TahomaB";
|
||||
SizeEx=0.025;
|
||||
shadow=0;
|
||||
};
|
||||
|
||||
class RangeCard_RscListNBox: RscListNBox {
|
||||
idc=-1;
|
||||
type=102;
|
||||
style=0;
|
||||
font="TahomaB";
|
||||
sizeEx=0.026;
|
||||
rowHeight=0.027;
|
||||
colorDisabled[]={0,0,0,0.0};
|
||||
colorBackground[]={1,1,1,1};
|
||||
colorText[]={0,0,0,1};
|
||||
colorScrollbar[]={0.95,0.95,0.95,1};
|
||||
colorSelect[]={0,0,0,1};
|
||||
colorSelect2[]={0,0,0,1};
|
||||
colorSelectBackground[]={1,1,1,0};
|
||||
colorSelectBackground2[]={1,1,1,0};
|
||||
period=0;
|
||||
LineSpacing=0;
|
||||
maxHistoryDelay=1.0;
|
||||
autoScrollSpeed=-1;
|
||||
autoScrollDelay=5;
|
||||
autoScrollRewind=0;
|
||||
soundSelect[]={"",0.09,1};
|
||||
drawSideArrows=0;
|
||||
idcLeft=-1;
|
||||
idcRight=-1;
|
||||
|
||||
class ScrollBar {
|
||||
color[]={1,1,1,0.6};
|
||||
colorActive[]={1,1,1,1};
|
||||
colorDisabled[]={1,1,1,0.3};
|
||||
};
|
||||
|
||||
class ListScrollBar : ScrollBar {
|
||||
};
|
||||
};
|
||||
|
||||
class ACE_RangeCard_Dialog {
|
||||
idd = -1;
|
||||
movingEnable = 1;
|
||||
onLoad = "uiNamespace setVariable ['RangleCard_Display', (_this select 0)]";
|
||||
onUnload = QUOTE(_this call FUNC(onCloseDialog));
|
||||
objects[] = {};
|
||||
|
||||
class controls {
|
||||
class BACKGROUND {
|
||||
moving=1;
|
||||
type=0;
|
||||
font="TahomaB";
|
||||
SizeEX=0.025;
|
||||
idc=-1;
|
||||
style=48;
|
||||
x="safezoneX";
|
||||
y="safezoneY+0.181889";
|
||||
w="1.62727*3/4";
|
||||
h="1.62727";
|
||||
colorBackground[]={1,1,1,1};
|
||||
colorText[]={1,1,1,1};
|
||||
text=QUOTE(PATHTOF(UI\RangeCard.paa));
|
||||
};
|
||||
class CAPTION_TEXT_1: RangeCard_RscText {
|
||||
idc=770000;
|
||||
style=ST_LEFT;
|
||||
x="safezoneX+0.18";
|
||||
y="safezoneY+0.181889+0.0";
|
||||
w="0.56*1.62727*3/4";
|
||||
text=".408 CheyTac - 410 gr Predator Projectiles";
|
||||
};
|
||||
class CAPTION_TEXT_2: CAPTION_TEXT_1 {
|
||||
idc=770001;
|
||||
SizeEx=0.022;
|
||||
y="safezoneY+0.181889+0.03";
|
||||
text="Drop Tables for B.P.: 1013.25mb; Corrected for MVV at Air/Ammo Temperatures -15-35 °C";
|
||||
};
|
||||
class CAPTION_TEXT_3: CAPTION_TEXT_2 {
|
||||
idc=770002;
|
||||
y="safezoneY+0.181889+0.06";
|
||||
text="CheyTac Intervention - 29'' 1:13'' twist (M-200)";
|
||||
};
|
||||
class ZERO_RANGE_TEXT: RangeCard_RscText {
|
||||
idc=77003;
|
||||
style=ST_LEFT;
|
||||
SizeEx=0.028;
|
||||
x="safezoneX+0.885";
|
||||
y="safezoneY+0.181889+0.01";
|
||||
w="0.125*1.62727*3/4";
|
||||
text="100m ZERO";
|
||||
};
|
||||
class BAROMETRIC_PRESSURE_TEXT: ZERO_RANGE_TEXT {
|
||||
idc=77004;
|
||||
colorText[]={1,0,0,0.8};
|
||||
y="safezoneY+0.181889+0.05";
|
||||
text="B.P.: 1013.25mb";
|
||||
};
|
||||
class TARGET_RANGE_TEXT_1: RangeCard_RscText {
|
||||
idc=770010;
|
||||
colorText[]={1,1,1,1};
|
||||
x="safezoneX+0.185";
|
||||
y="safezoneY+0.181889+0.098";
|
||||
text="Target";
|
||||
};
|
||||
class TARGET_RANGE_TEXT_2: TARGET_RANGE_TEXT_1 {
|
||||
idc=770011;
|
||||
SizeEx=0.03;
|
||||
y="safezoneY+0.181889+0.125";
|
||||
text="Range";
|
||||
};
|
||||
class TARGET_RANGE_TEXT_3: TARGET_RANGE_TEXT_1 {
|
||||
idc=770012;
|
||||
y="safezoneY+0.181889+0.152";
|
||||
text="(m)";
|
||||
};
|
||||
class BULLET_DROP_TEXT_1: RangeCard_RscText {
|
||||
idc=770013;
|
||||
x="safezoneX+0.25";
|
||||
y="safezoneY+0.181889+0.095";
|
||||
w="0.405*1.62727*3/4";
|
||||
text="Bullet Drop (MRADs)";
|
||||
};
|
||||
class WIND_LEAD_CAPTION_LIST: RangeCard_RscListNBox {
|
||||
idc=770100;
|
||||
sizeEx=0.021;
|
||||
x="safezoneX+0.728";
|
||||
y="safezoneY+0.181889+0.091";
|
||||
w="0.25*1.62727*3/4";
|
||||
h="0.0909445";
|
||||
columns[]={(0.03/2), (0.985/2)};
|
||||
idcLeft=770101;
|
||||
idcRight=770102;
|
||||
};
|
||||
class TEMPERATURE_CAPTION_LIST_1: RangeCard_RscListNBox {
|
||||
idc=770200;
|
||||
x="safezoneX+0.24";
|
||||
y="safezoneY+0.181889+0.125";
|
||||
w="0.405*1.62727*3/4";
|
||||
h="0.0909445";
|
||||
columns[]={(0/9), (1/9), (2/9), (3/9), (4/9), (5/9), (5.9/9), (6.9/9), (7.8/9)};
|
||||
idcLeft=770201;
|
||||
idcRight=770202;
|
||||
};
|
||||
class TEMPERATURE_CAPTION_LIST_2: RangeCard_RscListNBox {
|
||||
idc=770300;
|
||||
x="safezoneX+0.728";
|
||||
y="safezoneY+0.181889+0.15";
|
||||
w="0.25*1.62727*3/4";
|
||||
h="0.0909445";
|
||||
columns[]={(0/6), (0.9/6), (1.8/6), (2.9/6), (3.8/6), (4.8/6)};
|
||||
idcLeft=770301;
|
||||
idcRight=770302;
|
||||
};
|
||||
class RANGE_CARD_DATA: RangeCard_RscListNBox {
|
||||
idc=770400;
|
||||
x="safezoneX+0.182";
|
||||
y="safezoneY+0.181889+0.194";
|
||||
w="0.72*1.62727*3/4";
|
||||
h="1.62727";
|
||||
columns[]={(0/16), (1.2/16), (2.2/16), (3.2/16), (4.2/16), (5.1/16), (6.1/16), (7.1/16), (8.1/16),
|
||||
(9/16), (10.2/16), (11/16), (11.9/16), (12.8/16), (13.7/16), (14.6/16)};
|
||||
idcLeft=770401;
|
||||
idcRight=770402;
|
||||
};
|
||||
class FOOTNOTE_TEXT_1: CAPTION_TEXT_1 {
|
||||
idc=770020;
|
||||
SizeEx=0.022;
|
||||
y="safezoneY+1.72431";
|
||||
w="0.705*1.62727*3/4";
|
||||
text="For best results keep ammunition at ambient air temperature. Tables calculated for the above listed barrel";
|
||||
};
|
||||
class FOOTNOTE_TEXT_2: FOOTNOTE_TEXT_1 {
|
||||
idc=770021;
|
||||
y="safezoneY+1.72431+0.024";
|
||||
text="and load with optic mounted 1.5'' above line of bore.";
|
||||
};
|
||||
};
|
||||
};
|
BIN
addons/rangecard/UI/RangeCard.paa
Normal file
BIN
addons/rangecard/UI/RangeCard.paa
Normal file
Binary file not shown.
BIN
addons/rangecard/UI/RangeCard_Icon.paa
Normal file
BIN
addons/rangecard/UI/RangeCard_Icon.paa
Normal file
Binary file not shown.
15
addons/rangecard/XEH_postInit.sqf
Normal file
15
addons/rangecard/XEH_postInit.sqf
Normal file
@ -0,0 +1,15 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
#include "initKeybinds.sqf"
|
||||
|
||||
GVAR(RangeCardOpened) = false;
|
||||
|
||||
GVAR(controls) = [];
|
||||
|
||||
GVAR(ammoClass) = "B_65x39_Caseless";
|
||||
GVAR(magazineClass) = "30Rnd_65x39_caseless_mag";
|
||||
GVAR(weaponClass) = "arifle_MXM_F";
|
||||
|
||||
GVAR(ammoClassCopy) = "";//"ACE_762x51_Ball_M118LR";
|
||||
GVAR(magazineClassCopy) = "";//"ACE_20Rnd_762x51_M118LR_Mag";
|
||||
GVAR(weaponClassCopy) = "";//srifle_DMR_06_olive_F";
|
14
addons/rangecard/XEH_preInit.sqf
Normal file
14
addons/rangecard/XEH_preInit.sqf
Normal file
@ -0,0 +1,14 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
ADDON = false;
|
||||
|
||||
PREP(calculateSolution);
|
||||
PREP(canCopy);
|
||||
PREP(canShow);
|
||||
PREP(canShowCopy);
|
||||
PREP(onCloseDialog);
|
||||
PREP(openRangeCard);
|
||||
PREP(updateClassNames);
|
||||
PREP(updateRangeCard);
|
||||
|
||||
ADDON = true;
|
17
addons/rangecard/config.cpp
Normal file
17
addons/rangecard/config.cpp
Normal file
@ -0,0 +1,17 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
class CfgPatches {
|
||||
class ADDON {
|
||||
units[] = {"ACE_Item_RangeCard"};
|
||||
weapons[] = {"ACE_RangeCard"};
|
||||
requiredVersion = REQUIRED_VERSION;
|
||||
requiredAddons[] = {"ACE_Advanced_Ballistics"};
|
||||
author = "Ruthberg";
|
||||
VERSION_CONFIG;
|
||||
};
|
||||
};
|
||||
|
||||
#include "CfgEventHandlers.hpp"
|
||||
#include "CfgVehicles.hpp"
|
||||
#include "CfgWeapons.hpp"
|
||||
#include "RscTitles.hpp"
|
218
addons/rangecard/functions/fnc_calculateSolution.sqf
Normal file
218
addons/rangecard/functions/fnc_calculateSolution.sqf
Normal file
@ -0,0 +1,218 @@
|
||||
/*
|
||||
* Author: Ruthberg
|
||||
* Calculates the range card data
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Scope base angle <NUMBER>
|
||||
* 1: Bullet mass <NUMBER>
|
||||
* 2: Bore height <NUMBER>
|
||||
* 3: air friction <NUMBER>
|
||||
* 4: muzzle velocity <NUMBER>
|
||||
* 5: temperature <NUMBER>
|
||||
* 6: barometric pressure <NUMBER>
|
||||
* 7: relative humidity <NUMBER>
|
||||
* 8: simulation steps <NUMBER>
|
||||
* 9: wind speed <ARRAY>
|
||||
* 10: wind direction <NUMBER>
|
||||
* 11: inclination angle <NUMBER>
|
||||
* 12: target speed <NUMBER>
|
||||
* 13: target range <NUMBER>
|
||||
* 14: ballistic coefficient <NUMBER>
|
||||
* 15: drag model <NUMBER>
|
||||
* 16: atmosphere model <STRING>
|
||||
* 17: Store range card data? <BOOL>
|
||||
* 18: Stability factor <NUMBER>
|
||||
* 19: Twist Direction <NUMBER>
|
||||
* 20: Latitude <NUMBER>
|
||||
* 21: Direction of Fire <NUMBER>
|
||||
* 22: Range Card Slot <NUMBER>
|
||||
* 23: Use advanced ballistics config? <BOOL>
|
||||
*
|
||||
* Return Value:
|
||||
* 0: Elevation (MOA) <NUMBER>
|
||||
* 1: Windage (MOA) <ARRAY>
|
||||
* 2: Lead (MOA) <NUMBER>
|
||||
* 3: Time of fligth (SECONDS) <NUMBER>
|
||||
* 4: Remaining velocity (m/s) <NUMBER>
|
||||
* 5: Remaining kinetic energy (ft·lb) <NUMBER>
|
||||
* 6: Vertical coriolis drift (MOA) <NUMBER>
|
||||
* 7: Horizontal coriolis drift (MOA) <NUMBER>
|
||||
* 8: Spin drift (MOA) <NUMBER>
|
||||
*
|
||||
* Example:
|
||||
* call ace_rangecard_calculate_range_card_data
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_scopeBaseAngle", "_bulletMass", "_boreHeight", "_airFriction", "_muzzleVelocity", "_temperature", "_barometricPressure", "_relativeHumidity", "_simSteps", "_windSpeed1", "_windSpeed2", "_windDirection", "_inclinationAngle", "_targetSpeed", "_targetRange", "_drag", "_bc", "_dragModel", "_atmosphereModel", "_storeRangeCardData", "_stabilityFactor", "_twistDirection", "_latitude", "_directionOfFire", "_rangeCardSlot", "_useABConfig"];
|
||||
_scopeBaseAngle = _this select 0;
|
||||
_bulletMass = _this select 1;
|
||||
_boreHeight = _this select 2;
|
||||
_airFriction = _this select 3;
|
||||
_muzzleVelocity = _this select 4;
|
||||
_temperature = _this select 5;
|
||||
_barometricPressure = _this select 6;
|
||||
_relativeHumidity = _this select 7;
|
||||
_simSteps = _this select 8;
|
||||
_windSpeed1 = (_this select 9) select 0;
|
||||
_windSpeed2 = (_this select 9) select 1;
|
||||
_windDirection = _this select 10;
|
||||
_inclinationAngle = _this select 11;
|
||||
_targetSpeed = _this select 12;
|
||||
_targetRange = _this select 13;
|
||||
_bc = _this select 14;
|
||||
_dragModel = _this select 15;
|
||||
_atmosphereModel = _this select 16;
|
||||
_storeRangeCardData = _this select 17;
|
||||
_stabilityFactor = _this select 18;
|
||||
_twistDirection = _this select 19;
|
||||
_latitude = _this select 20;
|
||||
_directionOfFire = _this select 21;
|
||||
_rangeCardSlot = _this select 22;
|
||||
_useABConfig = _this select 23;
|
||||
|
||||
if (_storeRangeCardData) then {
|
||||
GVAR(rangeCardDataMVs) set [_rangeCardSlot, format[" %1", round(_muzzleVelocity)]];
|
||||
};
|
||||
|
||||
private ["_bulletPos", "_bulletVelocity", "_bulletAccel", "_bulletSpeed", "_gravity", "_deltaT", "_speedOfSound"];
|
||||
_bulletPos = [0, 0, 0];
|
||||
_bulletVelocity = [0, 0, 0];
|
||||
_bulletAccel = [0, 0, 0];
|
||||
_bulletSpeed = 0;
|
||||
_gravity = [0, sin(_scopeBaseAngle + _inclinationAngle) * -9.80665, cos(_scopeBaseAngle + _inclinationAngle) * -9.80665];
|
||||
_deltaT = 1 / _simSteps;
|
||||
_speedOfSound = 0;
|
||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||
_speedOfSound = _temperature call EFUNC(weather,calculateSpeedOfSound);
|
||||
};
|
||||
|
||||
private ["_elevation", "_windage1", "_windage2", "_lead", "_TOF", "_trueVelocity", "_trueSpeed", "_kineticEnergy", "_verticalCoriolis", "_verticalDeflection", "_horizontalCoriolis", "_horizontalDeflection", "_spinDrift", "_spinDeflection"];
|
||||
_elevation = 0;
|
||||
_windage1 = 0;
|
||||
_windage2 = 0;
|
||||
_lead = 0;
|
||||
_TOF = 0;
|
||||
_trueVelocity = [0, 0, 0];
|
||||
_trueSpeed = 0;
|
||||
_verticalCoriolis = 0;
|
||||
_verticalDeflection = 0;
|
||||
_horizontalCoriolis = 0;
|
||||
_horizontalDeflection = 0;
|
||||
_spinDrift = 0;
|
||||
_spinDeflection = 0;
|
||||
|
||||
private ["_n", "_range"];
|
||||
_n = 0;
|
||||
_range = 0;
|
||||
|
||||
private ["_wind1", "_wind2", "_windDrift"];
|
||||
_wind1 = [cos(270 - _windDirection * 30) * _windSpeed1, sin(270 - _windDirection * 30) * _windSpeed1, 0];
|
||||
_wind2 = [cos(270 - _windDirection * 30) * _windSpeed2, sin(270 - _windDirection * 30) * _windSpeed2, 0];
|
||||
_windDrift = 0;
|
||||
if (_useABConfig) then {
|
||||
_bc = [_bc, _temperature, _barometricPressure, _relativeHumidity, _atmosphereModel] call EFUNC(advanced_ballistics,calculateAtmosphericCorrection);
|
||||
};
|
||||
|
||||
private ["_airFrictionCoef", "_airDensity"];
|
||||
_airFrictionCoef = 1;
|
||||
if (!_useABConfig && (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false])) then {
|
||||
_airDensity = [_temperature, _barometricPressure, _relativeHumidity] call EFUNC(weather,calculateAirDensity);
|
||||
_airFrictionCoef = _airDensity / 1.22498;
|
||||
};
|
||||
|
||||
private ["_speedTotal", "_stepsTotal", "_speedAverage"];
|
||||
_speedTotal = 0;
|
||||
_stepsTotal = 0;
|
||||
_speedAverage = 0;
|
||||
|
||||
_bulletPos set [0, 0];
|
||||
_bulletPos set [1, 0];
|
||||
_bulletPos set [2, -(_boreHeight / 100)];
|
||||
|
||||
_bulletVelocity set [0, 0];
|
||||
_bulletVelocity set [1, Cos(_scopeBaseAngle) * _muzzleVelocity];
|
||||
_bulletVelocity set [2, Sin(_scopeBaseAngle) * _muzzleVelocity];
|
||||
|
||||
while {_TOF < 6 && (_bulletPos select 1) < _targetRange} do {
|
||||
_bulletSpeed = vectorMagnitude _bulletVelocity;
|
||||
|
||||
_speedTotal = _speedTotal + _bulletSpeed;
|
||||
_stepsTotal = _stepsTotal + 1;
|
||||
_speedAverage = (_speedTotal / _stepsTotal);
|
||||
|
||||
if (_speedAverage > 450 && _bulletSpeed < _speedOfSound) exitWith {};
|
||||
if (atan((_bulletPos select 2) / (abs(_bulletPos select 1) + 1)) < -2.254) exitWith {};
|
||||
|
||||
_trueVelocity = _bulletVelocity vectorDiff _wind1;
|
||||
_trueSpeed = vectorMagnitude _trueVelocity;
|
||||
|
||||
if (_useABConfig) then {
|
||||
_drag = if (missionNamespace getVariable [QEGVAR(advanced_ballistics,extensionAvailable), false]) then {
|
||||
parseNumber(("ace_advanced_ballistics" callExtension format["retard:%1:%2:%3", _dragModel, _bc, _trueSpeed]))
|
||||
} else {
|
||||
([_dragModel, _bc, _trueSpeed] call EFUNC(advanced_ballistics,calculateRetardation))
|
||||
};
|
||||
_bulletAccel = (vectorNormalized _trueVelocity) vectorMultiply (-1 * _drag);
|
||||
} else {
|
||||
_bulletAccel = _trueVelocity vectorMultiply (_trueSpeed * _airFriction * _airFrictionCoef);
|
||||
};
|
||||
|
||||
_bulletAccel = _bulletAccel vectorAdd _gravity;
|
||||
|
||||
_bulletVelocity = _bulletVelocity vectorAdd (_bulletAccel vectorMultiply _deltaT);
|
||||
_bulletPos = _bulletPos vectorAdd (_bulletVelocity vectorMultiply _deltaT);
|
||||
|
||||
_TOF = _TOF + _deltaT;
|
||||
|
||||
if (_storeRangeCardData) then {
|
||||
_range = GVAR(rangeCardStartRange) + _n * GVAR(rangeCardIncrement);
|
||||
if ((_bulletPos select 1) >= _range && _range <= GVAR(rangeCardEndRange)) then {
|
||||
if ((_bulletPos select 1) > 0) then {
|
||||
_elevation = - atan((_bulletPos select 2) / (_bulletPos select 1));
|
||||
_windage1 = - atan((_bulletPos select 0) / (_bulletPos select 1));
|
||||
};
|
||||
if (_range != 0) then {
|
||||
_lead = (_targetSpeed * _TOF) / (Tan(3.38 / 60) * _range);
|
||||
};
|
||||
private ["_elevationString", "_windageString", "_leadString"];
|
||||
_elevationString = Str(round(-_elevation * 60 / 3.38 * 10) / 10);
|
||||
if (_elevationString == "0") then {
|
||||
_elevationString = "-0.0";
|
||||
};
|
||||
if (_elevationString find "." == -1) then {
|
||||
_elevationString = _elevationString + ".0";
|
||||
};
|
||||
_windageString = Str(round(_windage1 * 60 / 3.38 * 10) / 10);
|
||||
if (_windageString find "." == -1) then {
|
||||
_windageString = _windageString + ".0";
|
||||
};
|
||||
_leadString = Str(round(_lead * 10) / 10);
|
||||
if (_leadString find "." == -1) then {
|
||||
_leadString = _leadString + ".0";
|
||||
};
|
||||
(GVAR(rangeCardDataElevation) select _rangeCardSlot) set [_n, _elevationString];
|
||||
(GVAR(rangeCardDataWindage) select _rangeCardSlot) set [_n, _windageString];
|
||||
(GVAR(rangeCardDataLead) select _rangeCardSlot) set [_n, _leadString];
|
||||
_n = _n + 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
if ((_bulletPos select 1) > 0) then {
|
||||
_elevation = - atan((_bulletPos select 2) / (_bulletPos select 1));
|
||||
_windage1 = - atan((_bulletPos select 0) / (_bulletPos select 1));
|
||||
_windDrift = (_wind2 select 0) * (_TOF - _targetRange / _muzzleVelocity);
|
||||
_windage2 = - atan(_windDrift / (_bulletPos select 1));
|
||||
};
|
||||
|
||||
if (_targetRange != 0) then {
|
||||
_lead = (_targetSpeed * _TOF) / (Tan(3.38 / 60) * _targetRange);
|
||||
};
|
||||
|
||||
_kineticEnergy = 0.5 * (_bulletMass / 1000 * (_bulletSpeed ^ 2));
|
||||
_kineticEnergy = _kineticEnergy * 0.737562149;
|
||||
|
||||
[_elevation * 60, [_windage1 * 60, _windage2 * 60], _lead, _TOF, _bulletSpeed, _kineticEnergy, _verticalCoriolis * 60, _horizontalCoriolis * 60, _spinDrift * 60]
|
18
addons/rangecard/functions/fnc_canCopy.sqf
Normal file
18
addons/rangecard/functions/fnc_canCopy.sqf
Normal file
@ -0,0 +1,18 @@
|
||||
/*
|
||||
* Authors: Ruthberg
|
||||
* Checks if the target has a copyable range card
|
||||
*
|
||||
* Arguments:
|
||||
* unit <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* canShow (bool)
|
||||
*
|
||||
* Example:
|
||||
* [] call ace_rangecard_fnc_canCopy
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
((primaryWeapon _this) != "" && [_this] call EFUNC(common,isPlayer) && [_this, "ACE_RangeCard"] call EFUNC(common,hasItem))
|
18
addons/rangecard/functions/fnc_canShow.sqf
Normal file
18
addons/rangecard/functions/fnc_canShow.sqf
Normal file
@ -0,0 +1,18 @@
|
||||
/*
|
||||
* Authors: Ruthberg
|
||||
* Tests if the Range Card can be shown
|
||||
*
|
||||
* Arguments:
|
||||
* Nothing
|
||||
*
|
||||
* Return Value:
|
||||
* canShow (bool)
|
||||
*
|
||||
* Example:
|
||||
* [] call ace_rangecard_fnc_canShow
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
(GVAR(ammoClass) != "" && GVAR(magazineClass) != "" && GVAR(weaponClass) != "" && !GVAR(RangeCardOpened) && !(underwater ACE_player) && ("ACE_RangeCard" in (uniformItems ACE_player)) || ("ACE_RangeCard" in (vestItems ACE_player)))
|
18
addons/rangecard/functions/fnc_canShowCopy.sqf
Normal file
18
addons/rangecard/functions/fnc_canShowCopy.sqf
Normal file
@ -0,0 +1,18 @@
|
||||
/*
|
||||
* Authors: Ruthberg
|
||||
* Tests if the Range Card copy can be shown
|
||||
*
|
||||
* Arguments:
|
||||
* Nothing
|
||||
*
|
||||
* Return Value:
|
||||
* canShow (bool)
|
||||
*
|
||||
* Example:
|
||||
* [] call ace_rangecard_fnc_canShowCopy
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
(GVAR(ammoClassCopy) != "" && GVAR(magazineClassCopy) != "" && GVAR(weaponClassCopy) != "" && !GVAR(RangeCardOpened) && !(underwater ACE_player) && ("ACE_RangeCard" in (uniformItems ACE_player)) || ("ACE_RangeCard" in (vestItems ACE_player)))
|
4
addons/rangecard/functions/fnc_onCloseDialog.sqf
Normal file
4
addons/rangecard/functions/fnc_onCloseDialog.sqf
Normal file
@ -0,0 +1,4 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
uiNamespace setVariable ['RangleCard_Display', nil];
|
||||
GVAR(RangeCardOpened) = false;
|
36
addons/rangecard/functions/fnc_openRangeCard.sqf
Normal file
36
addons/rangecard/functions/fnc_openRangeCard.sqf
Normal file
@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Authors: Ruthberg
|
||||
* Opens the range card dialog
|
||||
*
|
||||
* Arguments:
|
||||
* Open copy? <BOOLEAN>
|
||||
*
|
||||
* Return Value:
|
||||
* Nothing
|
||||
*
|
||||
* Example:
|
||||
* call ace_rangecard_fnc_openRangeCard
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
if (GVAR(RangeCardOpened)) exitWith {};
|
||||
|
||||
if (_this) then {
|
||||
if (GVAR(ammoClassCopy) != "" && GVAR(magazineClassCopy) != "" && GVAR(weaponClassCopy) != "") then {
|
||||
GVAR(RangeCardOpened) = true;
|
||||
|
||||
createDialog "ACE_RangeCard_Dialog";
|
||||
|
||||
[GVAR(ammoClassCopy), GVAR(magazineClassCopy), GVAR(weaponClassCopy)] call FUNC(updateRangeCard);
|
||||
};
|
||||
} else {
|
||||
if (ACE_player call FUNC(updateClassNames)) then {
|
||||
GVAR(RangeCardOpened) = true;
|
||||
|
||||
createDialog "ACE_RangeCard_Dialog";
|
||||
|
||||
[GVAR(ammoClass), GVAR(magazineClass), GVAR(weaponClass)] call FUNC(updateRangeCard);
|
||||
};
|
||||
};
|
49
addons/rangecard/functions/fnc_updateClassNames.sqf
Normal file
49
addons/rangecard/functions/fnc_updateClassNames.sqf
Normal file
@ -0,0 +1,49 @@
|
||||
/*
|
||||
* Authors: Ruthberg
|
||||
* Updates the ammo and weapon class names
|
||||
*
|
||||
* Arguments:
|
||||
* unit <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* Update successful? <BOOLEAN>
|
||||
*
|
||||
* Example:
|
||||
* unit call ace_rangecard_fnc_updateClassNames
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit", "_ammoClass", "_magazineClass", "_weaponClass", "_ammo", "_ammoConfig", "_parentClasses"];
|
||||
_unit = _this;
|
||||
|
||||
_ammoClass = "";
|
||||
_magazineClass = "";
|
||||
_weaponClass = primaryWeapon _unit;
|
||||
|
||||
if (_weaponClass == "") exitWith { (GVAR(ammoClass) != "" && GVAR(magazineClass) != "" && GVAR(weaponClass) != "") };
|
||||
|
||||
{
|
||||
_ammo = getText (configFile >> "CfgMagazines" >> _x >> "ammo");
|
||||
_ammoConfig = (configFile >> "CfgAmmo" >> _ammo);
|
||||
_parentClasses = [_ammoConfig, true] call BIS_fnc_returnParents;
|
||||
if ("BulletBase" in _parentClasses) exitWith {
|
||||
_ammoClass = _ammo;
|
||||
_magazineClass = _x;
|
||||
};
|
||||
} forEach (primaryWeaponMagazine _unit);
|
||||
|
||||
if (_ammoClass == "") exitWith { (GVAR(ammoClass) != "" && GVAR(magazineClass) != "" && GVAR(weaponClass) != "") };
|
||||
|
||||
if (_unit == ACE_player) then {
|
||||
GVAR(ammoClass) = _ammoClass;
|
||||
GVAR(magazineClass) = _magazineClass;
|
||||
GVAR(weaponClass) = _weaponClass;
|
||||
} else {
|
||||
GVAR(ammoClassCopy) = _ammoClass;
|
||||
GVAR(magazineClassCopy) = _magazineClass;
|
||||
GVAR(weaponClassCopy) = _weaponClass;
|
||||
};
|
||||
|
||||
true
|
249
addons/rangecard/functions/fnc_updateRangeCard.sqf
Normal file
249
addons/rangecard/functions/fnc_updateRangeCard.sqf
Normal file
@ -0,0 +1,249 @@
|
||||
/*
|
||||
* Authors: Ruthberg
|
||||
* Updates the range card data
|
||||
*
|
||||
* Arguments:
|
||||
* 0: ammo class <STRING>
|
||||
* 1: magazine class <STRING>
|
||||
* 2: weapon class <STRING>
|
||||
*
|
||||
* Return Value:
|
||||
* Nothing
|
||||
*
|
||||
* Example:
|
||||
* [mode] call ace_rangecard_fnc_openRangeCard
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
disableSerialization;
|
||||
#define __dsp (uiNamespace getVariable "RangleCard_Display")
|
||||
|
||||
private ["_airFriction", "_ammoConfig", "_atmosphereModel", "_barometricPressure", "_barrelLength", "_barrelTwist", "_bc", "_bulletMass", "_boreHeight", "_cacheEntry", "_column", "_control", "_dragModel", "_i", "_muzzleVelocity", "_mv", "_mvShift", "_offset", "_relativeHumidity", "_result", "_row", "_scopeBaseAngle", "_weaponConfig", "_zeroRange", "_initSpeed", "_initSpeedCoef", "_useABConfig"];
|
||||
_useABConfig = (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]);
|
||||
|
||||
PARAMS_3(_ammoClass,_magazineClass,_weaponClass);
|
||||
|
||||
if (_ammoClass == "" || _magazineClass == "" || _weaponClass == "") exitWith {};
|
||||
|
||||
{
|
||||
ctrlDelete _x;
|
||||
} forEach GVAR(controls);
|
||||
GVAR(controls) = [];
|
||||
|
||||
for "_row" from 0 to 49 do {
|
||||
_offset = if (_row < 5) then {0} else {0.003};
|
||||
_control = (__dsp ctrlCreate ["RangeCard_RscText", 790000 + _row]);
|
||||
_control ctrlSetPosition [safeZoneX + 0.183, safeZoneY + 0.374 + 0.027 * _row + _offset, 0.062, 0.025];
|
||||
if (_row in [0, 8, 18, 28, 38, 48]) then {
|
||||
_control ctrlSetTextColor [1, 1, 1, 1];
|
||||
} else {
|
||||
_control ctrlSetTextColor [0, 0, 0, 1];
|
||||
};
|
||||
_control ctrlCommit 0;
|
||||
_control ctrlSetText Str(100 + _row * 50);
|
||||
GVAR(controls) pushBack _control;
|
||||
};
|
||||
for "_column" from 0 to 8 do {
|
||||
for "_row" from 0 to 49 do {
|
||||
_offset = if (_row < 5) then {0} else {0.003};
|
||||
_control = (__dsp ctrlCreate ["RangeCard_RscText", 90000 + _column * 100 + _row]);
|
||||
_control ctrlSetPosition [safeZoneX + 0.249 + _column * 0.055, safeZoneY + 0.374 + 0.027 * _row + _offset, 0.052, 0.025];
|
||||
_control ctrlCommit 0;
|
||||
_control ctrlSetText "-0.0";
|
||||
GVAR(controls) pushBack _control;
|
||||
};
|
||||
};
|
||||
for "_column" from 0 to 2 do {
|
||||
for "_row" from 0 to 49 do {
|
||||
_offset = if (_row < 5) then {0} else {0.003};
|
||||
_control = (__dsp ctrlCreate ["RangeCard_RscText", 90000 + (9 +_column) * 100 + _row]);
|
||||
_control ctrlSetPosition [safeZoneX + 0.743 + _column * 0.049, safeZoneY + 0.374 + 0.027 * _row + _offset, 0.047, 0.025];
|
||||
_control ctrlCommit 0;
|
||||
_control ctrlSetText "-0.0";
|
||||
GVAR(controls) pushBack _control;
|
||||
};
|
||||
};
|
||||
for "_column" from 0 to 2 do {
|
||||
for "_row" from 0 to 49 do {
|
||||
_offset = if (_row < 5) then {0} else {0.003};
|
||||
_control = (__dsp ctrlCreate ["RangeCard_RscText", 90000 + (12 +_column) * 100 + _row]);
|
||||
_control ctrlSetPosition [safeZoneX + 0.892 + _column * 0.049, safeZoneY + 0.374 + 0.027 * _row + _offset, 0.047, 0.025];
|
||||
_control ctrlCommit 0;
|
||||
_control ctrlSetText "-0.0";
|
||||
GVAR(controls) pushBack _control;
|
||||
};
|
||||
};
|
||||
|
||||
lnbClear 770100;
|
||||
lnbClear 770200;
|
||||
lnbClear 770300;
|
||||
lnbClear 770400;
|
||||
|
||||
GVAR(rangeCardDataElevation) = [[], [], [], [], [], [], [], [], []];
|
||||
GVAR(rangeCardDataWindage) = [[], [], [], [], [], [], [], [], []];
|
||||
GVAR(rangeCardDataLead) = [[], [], [], [], [], [], [], [], []];
|
||||
GVAR(rangeCardDataMVs) = ["", "", "", "", "", "", "", "", ""];
|
||||
GVAR(lastValidRow) = [];
|
||||
|
||||
GVAR(currentUnit) = 2;
|
||||
GVAR(rangeCardStartRange) = 100;
|
||||
GVAR(rangeCardIncrement) = 50;
|
||||
GVAR(rangeCardEndRange) = GVAR(rangeCardStartRange) + 49 * GVAR(rangeCardIncrement);
|
||||
|
||||
_ammoConfig = _ammoClass call EFUNC(advanced_ballistics,readAmmoDataFromConfig);
|
||||
_weaponConfig = _weaponClass call EFUNC(advanced_ballistics,readWeaponDataFromConfig);
|
||||
_airFriction = _ammoConfig select 0;
|
||||
_barrelTwist = _weaponConfig select 0;
|
||||
_barrelLength = _weaponConfig select 2;
|
||||
_muzzleVelocity = 0;
|
||||
|
||||
_bc = 0;
|
||||
if (count (_ammoConfig select 6) > 0) then {
|
||||
_bc = (_ammoConfig select 6) select 0;
|
||||
};
|
||||
_dragModel = _ammoConfig select 5;
|
||||
_atmosphereModel = _ammoConfig select 8;
|
||||
_bulletMass = 5;
|
||||
_boreHeight = 3.81;
|
||||
_zeroRange = 100;
|
||||
|
||||
if (_bc == 0) then {
|
||||
_useABConfig = false;
|
||||
};
|
||||
|
||||
if (_barrelLength > 0 && _useABConfig) then {
|
||||
_muzzleVelocity = [_barrelLength, _ammoConfig select 10, _ammoConfig select 11, 0] call EFUNC(advanced_ballistics,calculateBarrelLengthVelocityShift);
|
||||
} else {
|
||||
_initSpeed = getNumber (configFile >> "CfgMagazines" >> _magazineClass >> "initSpeed");
|
||||
_initSpeedCoef = getNumber (configFile >> "CfgWeapons" >> _weaponClass >> "initSpeed");
|
||||
if (_initSpeedCoef < 0) then {
|
||||
_initSpeed = _initSpeed * -_initSpeedCoef;
|
||||
};
|
||||
if (_initSpeedCoef > 0) then {
|
||||
_initSpeed = _initSpeedCoef;
|
||||
};
|
||||
_muzzleVelocity = _initSpeed;
|
||||
};
|
||||
|
||||
if (_useABConfig) then {
|
||||
ctrlSetText [770000, format["%1'' - %2 gr (%3)", round((_ammoConfig select 1) * 39.3700787) / 1000, round((_ammoConfig select 3) * 15.4323584), _ammoClass]];
|
||||
if (_barrelLength > 0 && _barrelTwist > 0) then {
|
||||
ctrlSetText [770002, format["Barrel: %1'' 1:%2'' twist", round(_barrelLength * 0.0393700787), round(_barrelTwist * 0.0393700787)]];
|
||||
} else {
|
||||
ctrlSetText [770002, ""];
|
||||
};
|
||||
} else {
|
||||
ctrlSetText [770000, getText (configFile >> "CfgMagazines" >> _magazineClass >> "displayNameShort")];
|
||||
ctrlSetText [770002, getText (configFile >> "CfgWeapons" >> _weaponClass >> "displayName")];
|
||||
};
|
||||
|
||||
lnbAddRow [770100, ["4mps Wind(MRADs)", "1mps LEAD(MRADs)"]];
|
||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||
lnbAddRow [770100, ["Air/Ammo Temp", "Air/Ammo Temp"]];
|
||||
|
||||
lnbAddRow [770200, ["-15°C", " -5°C", " 5°C", " 10°C", " 15°C", " 20°C", " 25°C", " 30°C", " 35°C"]];
|
||||
lnbAddRow [770300, ["-15°C", " 10°C", " 35°C", "-15°C", " 10°C", " 35°C"]];
|
||||
};
|
||||
|
||||
_barometricPressure = 1013.25;
|
||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||
_barometricPressure = 1013.25 * (1 - (0.0065 * EGVAR(weather,altitude)) / 288.15) ^ 5.255754495;
|
||||
};
|
||||
_relativeHumidity = 0.5;
|
||||
|
||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||
ctrlSetText [770001, format["Drop Tables for B.P.: %1mb; Corrected for MVV at Air/Ammo Temperatures -15-35 °C", round(_barometricPressure * 100) / 100]];
|
||||
ctrlSetText [77004 , format["B.P.: %1mb", round(_barometricPressure * 100) / 100]];
|
||||
} else {
|
||||
ctrlSetText [770001, ""];
|
||||
ctrlSetText [77004 , ""];
|
||||
};
|
||||
|
||||
_cacheEntry = missionNamespace getVariable format[QGVAR(%1_%2_%3), _ammoClass, _weaponClass, missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]];
|
||||
if (isNil {_cacheEntry}) then {
|
||||
_result = [0, 0, _boreHeight, _airFriction, _muzzleVelocity, 15, 1013.25, 0.5, 1000, [0, 0], 0, 0, 0, _zeroRange, _bc, _dragModel, _atmosphereModel, false, 1.5, 0, 0, 0, 0, _useABConfig] call FUNC(calculateSolution);
|
||||
_scopeBaseAngle = (_result select 0) / 60;
|
||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||
{
|
||||
_mvShift = [_ammoConfig select 9, _x] call EFUNC(advanced_ballistics,calculateAmmoTemperatureVelocityShift);
|
||||
_mv = _muzzleVelocity + _mvShift;
|
||||
|
||||
[_scopeBaseAngle,_bulletMass,_boreHeight,_airFriction,_mv,_x,_barometricPressure,_relativeHumidity,1000,[4,0],3,0,1,GVAR(rangeCardEndRange),_bc,_dragModel,_atmosphereModel,true,1.5,1,46,23,_forEachIndex,_useABConfig] call FUNC(calculateSolution);
|
||||
} forEach [-15, -5, 5, 10, 15, 20, 25, 30, 35];
|
||||
} else {
|
||||
[_scopeBaseAngle,_bulletMass,_boreHeight,_airFriction,_muzzleVelocity,15,_barometricPressure,_relativeHumidity,1000,[4,0],3,0,1,GVAR(rangeCardEndRange),_bc,_dragModel,_atmosphereModel,true,1.5,1,46,23,3,_useABConfig] call FUNC(calculateSolution);
|
||||
};
|
||||
|
||||
for "_i" from 0 to 9 do {
|
||||
GVAR(lastValidRow) pushBack count (GVAR(rangeCardDataElevation) select _i);
|
||||
while {count (GVAR(rangeCardDataElevation) select _i) < 50} do {
|
||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||
(GVAR(rangeCardDataElevation) select _i) pushBack "###";
|
||||
(GVAR(rangeCardDataWindage) select _i) pushBack "##";
|
||||
(GVAR(rangeCardDataLead) select _i) pushBack "##";
|
||||
} else {
|
||||
(GVAR(rangeCardDataElevation) select _i) pushBack "";
|
||||
(GVAR(rangeCardDataWindage) select _i) pushBack "";
|
||||
(GVAR(rangeCardDataLead) select _i) pushBack "";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
missionNamespace setVariable [format[QGVAR(%1_%2_%3), _ammoClass, _weaponClass, missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]], [GVAR(rangeCardDataElevation), GVAR(rangeCardDataWindage), GVAR(rangeCardDataLead), GVAR(rangeCardDataMVs), GVAR(lastValidRow)]];
|
||||
} else {
|
||||
GVAR(rangeCardDataElevation) = _cacheEntry select 0;
|
||||
GVAR(rangeCardDataWindage) = _cacheEntry select 1;
|
||||
GVAR(rangeCardDataLead) = _cacheEntry select 2;
|
||||
GVAR(rangeCardDataMVs) = _cacheEntry select 3;
|
||||
GVAR(lastValidRow) = _cacheEntry select 4;
|
||||
};
|
||||
|
||||
lnbAddRow [770200, GVAR(rangeCardDataMVs)];
|
||||
|
||||
for "_column" from 0 to 8 do {
|
||||
for "_row" from 0 to 49 do {
|
||||
_control = (__dsp displayCtrl (90000 + _column * 100 + _row));
|
||||
_control ctrlSetText ((GVAR(rangeCardDataElevation) select _column) select _row);
|
||||
if (_row >= (GVAR(lastValidRow) select _column)) then {
|
||||
_control ctrlSetTextColor [0, 0, 0, 0.6];
|
||||
} else {
|
||||
_control ctrlSetTextColor [0, 0, 0, 1.0];
|
||||
};
|
||||
_control ctrlCommit 0;
|
||||
};
|
||||
};
|
||||
{
|
||||
for "_row" from 0 to 49 do {
|
||||
_control = (__dsp displayCtrl (90000 + (9 + _forEachIndex) * 100 + _row));
|
||||
_control ctrlSetText ((GVAR(rangeCardDataWindage) select _x) select _row);
|
||||
if (_row >= (GVAR(lastValidRow) select _x)) then {
|
||||
_control ctrlSetTextColor [0, 0, 0, 0.6];
|
||||
} else {
|
||||
_control ctrlSetTextColor [0, 0, 0, 1.0];
|
||||
};
|
||||
_control ctrlCommit 0;
|
||||
};
|
||||
} forEach [0, 3, 8];
|
||||
|
||||
{
|
||||
for "_row" from 0 to 49 do {
|
||||
_control = (__dsp displayCtrl (90000 + (12 + _forEachIndex) * 100 + _row));
|
||||
_control ctrlSetText ((GVAR(rangeCardDataLead) select _x) select _row);
|
||||
if (_row >= (GVAR(lastValidRow) select _x)) then {
|
||||
_control ctrlSetTextColor [0, 0, 0, 0.6];
|
||||
} else {
|
||||
_control ctrlSetTextColor [0, 0, 0, 1.0];
|
||||
};
|
||||
_control ctrlCommit 0;
|
||||
};
|
||||
} forEach [0, 3, 8];
|
||||
|
||||
if (_useABConfig) then {
|
||||
ctrlSetText [770020, "For best results keep ammunition at ambient air temperature. Tables calculated for the above listed barrel"];
|
||||
ctrlSetText [770021, "and load with optic mounted 1.5'' above line of bore."];
|
||||
} else {
|
||||
ctrlSetText [770020, ""];
|
||||
ctrlSetText [770021, ""];
|
||||
};
|
1
addons/rangecard/functions/script_component.hpp
Normal file
1
addons/rangecard/functions/script_component.hpp
Normal file
@ -0,0 +1 @@
|
||||
#include "\z\ace\addons\rangecard\script_component.hpp"
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user