diff --git a/.gitignore b/.gitignore index 76f95dcd10..f05646fb8a 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ release/* texHeaders.bin *.swp *.swo +*.biprivatekey diff --git a/AUTHORS.txt b/AUTHORS.txt index 05049978e6..d0f248e72f 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -17,7 +17,7 @@ Janus Kieran NouberNou PabstMirror -Ruthberg +Ruthberg tpM ViperMaul VKing @@ -30,9 +30,11 @@ ACCtomeek Adanteh aeroson Aggr094 +Alganthe Anthariel BlackQwar Brakoviejo +Brisse Clon1998 Codingboy Crusty @@ -48,6 +50,7 @@ Ghost GieNkoV gpgpgpgp Grzegorz +Gianmarco Varriale (TeamNuke) Hamburger SV Harakhti havena @@ -69,7 +72,7 @@ Raspu86 Riccardo Petricca Robert Boklahánics ramius86 -simon84 +simon84 Sniperwolf572 Tachi Tonic @@ -83,3 +86,4 @@ Asgar Serran Kavinsky Coren OnkelDisMaster +Dimaslg diff --git a/LICENSE b/LICENSE index 0f013a10b9..b76b90e8fb 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (C) 2014 Felix "KoffeinFlummi" Wiegand +Copyright (C) 2015 Felix "KoffeinFlummi" Wiegand This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/README.md b/README.md index 3ec6fe0683..4ed84011bf 100644 --- a/README.md +++ b/README.md @@ -1,48 +1,83 @@

- +

- ACE version + ACE version - - ACE download + + ACE download - ACE issues + ACE issues + + + BIF thread - ACE license + ACE license

-

Requires the latest version of CBA A3 | BIF thread

+

Requires the latest version of CBA A3. Visit us on Facebook | YouTube | Twitter | Reddit

**ACE3** is a joint effort by the teams behind **ACE2**, **AGM** and **CSE** to improve the realism and authenticity of Arma 3. -This mod is entirely **open-source**, and everyone is free to propose changes or maintain their own, customized version as long as they make their changes open to the public in accordance with the GNU General Public License (for more information check the license file attached to this project). +The project is entirely **open-source** and all contributions are welcome. Feel free to maintain your own custom version, so long as the changes you make are open to the public in accordance with the GNU General Public License ([GPLv2](https://github.com/acemod/ACE3/blob/master/LICENSE)). -The mod is **built modularly** — almost any PBO can be removed, thus a team can maintain its own tailored version of ACE, which excludes a select number of components that they don't like, or which conflict with other add-ons. Components themselves, like e.g. the medical system, also include various customization options, allowing mission designers to tweak the overall experience. +The mod is **built modularly**, so almost any included PBO can be easily removed from the configuration. This way, a team can maintain its own tailored version of ACE by simply excluding any components they don't need, or those possibly in conflict with other add-ons. Modules themselves, e.g. the medical system, also include various customization options, allowing mission designers to tweak the overall experience. -### Features -* Improved medical system -* Logistics system including cargo transport and vehicle maintenance -* Explosives system including different trigger types -* Captivity system -* Realistic names for vehicles and weapons -* Realistic ballistics including wind and humidity -* Backblast simulation -* A fire control system for armored vehicles and helicopters - ***and more...*** +### Core features +* Brand new 3D interaction/action system +* Performance and reliability framework +* Focus on modularity and customization +* New flexible client and server settings & configuration +* Improved medical system with various levels (basic/advanced) focus on gameplay/realism +* Proper & consistent network-synced weather +* Wind and weather-based ballistics +* Captivity system +* Explosives system, including different trigger types +* Map screen improvements – marker placement and map tools +* Advanced missile guidance and laser designation -#### Guides & How-Tos -If you installed ACE3, but have trouble understanding how it all works, or where to start — see [Getting Started](https://github.com/acemod/ACE3/blob/master/documentation/user/getting-started.md). +#### Additional features +* Carrying and dragging +* Realistic names for vehicles and weapons +* A fire control system (FCS) for armored vehicles and helicopters +* Realistic ballistics/FCS calculated in C/C++ extensions +* Backblast area and overpressure simulation +* Disposable launchers +* Realistic G-forces +* Vehicle locking +* Realistic night and thermal vision modes +* Magazine repacking +* Realistic weapon overheating mechanic +* Combat deafness (temporary loss of hearing) simulation +* Improved ragdoll physics +* Improved interactions for AARs and ammo bearers +* Adjustable sniper scopes +* No idle animation with lowered weapon +* No talking player avatar +* Jumping over obstacles, climbing over walls and cutting down fences +* Vector, MicroDAGR and Kestrel devices
+***and much more...*** + +### Guides & how-tos +If you installed ACE3 but have trouble understanding how it all works, or where to start, read this first: +* [Getting started](http://ace3mod.com/wiki/user/getting-started.html) #### Contributing -If you want to help put with the ongoing development, you can do so by looking for possible bugs or by contributing new features. To contribute something to ACE, simply fork this repository and submit your pull requests for review by other collaborators. In the process, please add yourself to the author array of any .pbo you will be editing and the AUTHORS.txt file; including a valid email address. +You can help out with the ongoing development by looking for potential bugs in our code base, or by contributing new features. To contribute something to ACE, simply fork this repository and submit your pull requests for review by other collaborators. Remember to add yourself to the author array of any PBO you will be editing and the [`AUTHORS.txt`](https://github.com/acemod/ACE3/blob/master/AUTHORS.txt) file; including a valid email address. -To report a bug, propose a feature, or suggest a change to the existing one — please, use our [Issue Tracker](https://github.com/acemod/ACE3/issues). See [this link](http://ace3mod.com/wiki/user/how-to-report-an-issue.html) for details. +Please, use our [Issue Tracker](https://github.com/acemod/ACE3/issues) to report a bug, propose a feature, or suggest changes to the existing ones. See also: +* [How to report an issue](http://ace3mod.com/wiki/user/how-to-report-an-issue.html) +* [How to make a feature request](http://ace3mod.com/wiki/user/how-to-make-a-feature-request.html) -#### Testing & Building -If you want to help us test the latest development changes, feel free to download our master branch, using either git — if familiar with the process — or directly, by following [this link](https://github.com/acemod/ACE3/archive/master.zip). - -To find out how to set up your development environment and build a version of ACE for testing, follow [these instructions](https://github.com/acemod/ACE3/blob/master/documentation/development/setting-up-the-development-environment.md). +#### Testing & building +To help us test the latest development changes, download our master branch ([directly](https://github.com/acemod/ACE3/archive/master.zip), or [with git](https://help.github.com/articles/fetching-a-remote/)), then assemble a test build: +* [Setting up the development environment](http://ace3mod.com/wiki/development/setting-up-the-development-environment.html) – step-by-step instructions on how to properly setup and build a version of ACE for testing purposes. diff --git a/addons/advanced_ballistics/ACE_Settings.hpp b/addons/advanced_ballistics/ACE_Settings.hpp index d1462b144f..67bc51511e 100644 --- a/addons/advanced_ballistics/ACE_Settings.hpp +++ b/addons/advanced_ballistics/ACE_Settings.hpp @@ -57,7 +57,7 @@ class ACE_Settings { }; class GVAR(simulationRadius) { displayName = "Simulation Radius"; - description = "Defines the radius (in meters) in which advanced ballistics are applied"; + description = "Defines the radius around the player (in meters) at which advanced ballistics are applied to projectiles"; typeName = "SCALAR"; value = 3000; }; diff --git a/addons/advanced_ballistics/CfgVehicles.hpp b/addons/advanced_ballistics/CfgVehicles.hpp index 8e6e40e21e..fda4b9a8ff 100644 --- a/addons/advanced_ballistics/CfgVehicles.hpp +++ b/addons/advanced_ballistics/CfgVehicles.hpp @@ -69,7 +69,7 @@ class CfgVehicles { }; class simulationRadius { displayName = "Simulation Radius"; - description = "Defines the radius (in meters) in which advanced ballistics are applied"; + description = "Defines the radius around the player (in meters) at which advanced ballistics are applied to projectiles"; typeName = "NUMBER"; defaultValue = 3000; }; diff --git a/addons/advanced_ballistics/functions/fnc_handleFired.sqf b/addons/advanced_ballistics/functions/fnc_handleFired.sqf index c21ac6af1f..b6aae2c740 100644 --- a/addons/advanced_ballistics/functions/fnc_handleFired.sqf +++ b/addons/advanced_ballistics/functions/fnc_handleFired.sqf @@ -141,8 +141,12 @@ GVAR(currentbulletID) = (GVAR(currentbulletID) + 1) % 10000; "ace_advanced_ballistics" callExtension format["new:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:%17:%18", GVAR(currentbulletID), _airFriction, _ballisticCoefficients, _velocityBoundaries, _atmosphereModel, _dragModel, _stabilityFactor, _twistDirection, _muzzleVelocity, _transonicStabilityCoef, getPosASL _bullet, EGVAR(weather,Latitude), EGVAR(weather,currentTemperature), EGVAR(weather,Altitude), EGVAR(weather,currentHumidity), overcast, floor(time), time - floor(time)]; [{ - private ["_index", "_bullet", "_caliber", "_bulletTraceVisible", "_bulletVelocity", "_bulletPosition"]; - EXPLODE_4_PVT(_this select 0,_bullet,_caliber,_bulletTraceVisible,_index); + private ["_args", "_index", "_bullet", "_caliber", "_bulletTraceVisible", "_bulletVelocity", "_bulletPosition"]; + _args = _this select 0; + _bullet = _args select 0; + _caliber = _args select 1; + _bulletTraceVisible = _args select 2; + _index = _args select 3; _bulletVelocity = velocity _bullet; _bulletPosition = getPosASL _bullet; diff --git a/addons/advanced_ballistics/stringtable.xml b/addons/advanced_ballistics/stringtable.xml index cd6b75cf97..dbf2784f21 100644 --- a/addons/advanced_ballistics/stringtable.xml +++ b/addons/advanced_ballistics/stringtable.xml @@ -1,5 +1,4 @@  - diff --git a/addons/aircraft/stringtable.xml b/addons/aircraft/stringtable.xml index 57fecc2a44..3a67e11449 100644 --- a/addons/aircraft/stringtable.xml +++ b/addons/aircraft/stringtable.xml @@ -29,7 +29,7 @@ Open Cargo Door Laderampe öffnen Abrir compuerta de carga - Ourvir rampe cargo + Ourvir la rampe Otwórz drzwi ładowni Otevřít nákladní prostor Rakodórámpa nyitása @@ -40,7 +40,7 @@ Close Cargo Door Laderampe schließen Cerrar compuerta de carga - Fermer rampe cargo + Fermer la rampe Zamknij drzwi ładowni Zavřít nákladní prostor Rakodórámpa zárása @@ -48,4 +48,4 @@ Chiudi la porta del cargo - + \ No newline at end of file diff --git a/addons/atragmx/RscTitles.hpp b/addons/atragmx/RscTitles.hpp index 76f06744dc..4ae08c20aa 100644 --- a/addons/atragmx/RscTitles.hpp +++ b/addons/atragmx/RscTitles.hpp @@ -760,7 +760,7 @@ class ATragMX_Display { y=0.265*safezoneH+safezoneY+0.35; strings[]={"Height","Width"}; values[]={1,0}; - onToolBoxSelChanged="GVAR(rangeAssistUseTargetHeight)=((_this select 1)==0)"; + onToolBoxSelChanged=QUOTE(GVAR(rangeAssistUseTargetHeight) = ((_this select 1) == 0)); }; class TEXT_TARGET_RANGE_ASSIST_TARGET_SIZE: TEXT_TARGET_RANGE_ASSIST_MEASUREMENT_METHOD { idc=7003; diff --git a/addons/atragmx/stringtable.xml b/addons/atragmx/stringtable.xml index dd8fe236a7..f6bafa7762 100644 --- a/addons/atragmx/stringtable.xml +++ b/addons/atragmx/stringtable.xml @@ -1,5 +1,4 @@  - @@ -28,6 +27,7 @@ Защищенный КПК с ATragMX PDA rugerizada con ATragMX Robuster PDA mit ATragMX + PDA robuste avec ATragMX Open ATragMX @@ -38,4 +38,4 @@ ATragMX öffnen - + \ No newline at end of file diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index c2d6f0147a..02df51e891 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -337,7 +337,7 @@ class CfgAmmo { ACE_caliber=0.308; ACE_bulletLength=1.353; ACE_bulletMass=190; - ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ammoTempMuzzleVelocityShifts[]={-5.3, -5.1, -4.6, -4.2, -3.4, -2.6, -1.4, -0.3, 1.4, 3.0, 5.2}; ACE_ballisticCoefficients[]={0.268}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; @@ -353,7 +353,7 @@ class CfgAmmo { ACE_caliber=0.308; ACE_bulletLength=1.489; ACE_bulletMass=220; - ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ammoTempMuzzleVelocityShifts[]={-5.3, -5.1, -4.6, -4.2, -3.4, -2.6, -1.4, -0.3, 1.4, 3.0, 5.2}; ACE_ballisticCoefficients[]={0.310}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; @@ -572,7 +572,6 @@ class CfgAmmo { ACE_caliber=0.366; ACE_bulletLength=1.350; ACE_bulletMass=230; - ACE_transonicStabilityCoef=1; ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; ACE_ballisticCoefficients[]={0.368}; ACE_velocityBoundaries[]={}; diff --git a/addons/ballistics/CfgVehicles.hpp b/addons/ballistics/CfgVehicles.hpp index 89f5c26652..c43782d024 100644 --- a/addons/ballistics/CfgVehicles.hpp +++ b/addons/ballistics/CfgVehicles.hpp @@ -9,7 +9,7 @@ class CfgVehicles { //hitPart = "systemChat str _this"; }; }; - + class NATO_Box_Base; class Box_NATO_Wps_F: NATO_Box_Base { class TransportMagazines { diff --git a/addons/ballistics/config.cpp b/addons/ballistics/config.cpp index 8ea75e4460..66ff7d188e 100644 --- a/addons/ballistics/config.cpp +++ b/addons/ballistics/config.cpp @@ -2,7 +2,7 @@ class CfgPatches { class ADDON { - units[] = {"ACE_TargetWall"}; + units[] = {"ACE_TargetWall","ACE_Box_Ammo"}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_common"}; diff --git a/addons/ballistics/stringtable.xml b/addons/ballistics/stringtable.xml index e65b91f926..3db339e9c0 100644 --- a/addons/ballistics/stringtable.xml +++ b/addons/ballistics/stringtable.xml @@ -4,8 +4,8 @@ 6.5mm 30Rnd Tracer IR-DIM Mag - 6,5 mm Nyomjelző IR-DIM 30-as Tár - 6,5 mm 30-Schuss-Magazin Leuchtspur IR-DIM + 6,5mm Nyomjelző IR-DIM 30-as Tár + 6,5mm 30-Patronen-Magazin Leuchtspur IR-DIM Cargador de 30 balas trazadoras IR-DIM de 6,5mm Ch. 6,5mm 30Cps Traçantes IR-DIM Magazynek 6,5mm 30rd Smugacz IR-DIM @@ -16,32 +16,32 @@ 6.5mm IR-DIM - 6,5 mm IR-DIM + 6,5mm IR-DIM 6,5mm IR-DIM 6,5mm IR-DIM 6,5mm IR-DIM 6,5mm IR-DIM 6.5mm IR-DIM 6,5mm IR-DIM - 6.5 IR-DIM + 6.5mm IR-DIM 6,5 мм ИК-трассирующие - Caliber: 6.5x39 mm Tracer IR-DIM<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL - Kaliber: 6,5x39 mm Nyomjelző IR-DIM<br />Lövedékek: 30<br />Használható: MX/C/M/SW/3GL - Kaliber: 6,5x39 mm Leuchtspur IR-DIM<br />Patronen: 30<br />Eingesetzt von: MX/C/M/SW/3GL - Calibre: 6,5x39 mm Trazadoras IR-DIM<br />Balas: 30<br />Se usa en: MX/C/M/SW/3GL - Calibre: 6,5x39 mm Traçantes IR-DIM<br />Cartouches: 30<br />Utilisé dans: MX/C/M/SW/3GL - Kaliber: 6,5x39 mm Smugacz IR-DIM<br />Pociski: 30<br />Używane w: MX/C/M/SW/3GL - Ráže: 6.5x39 mm Svítící IR-DIM<br />Munice: 30<br />Použití: MX/C/M/SW/3GL - Calibre: 6,5x39 mm Traçante IR-DIM<br />Projéteis: 30<br />Usado em: MX/C/M/SW/3GL - Calibro: 6.5x39 mm Traccianti IR-DIM <br />Munizioni: 30<br />In uso su: MX/C/M/SW/3GL + Caliber: 6.5x39mm Tracer IR-DIM<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL + Kaliber: 6,5x39mm Nyomjelző IR-DIM<br />Lövedékek: 30<br />Használható: MX/C/M/SW/3GL + Kaliber: 6,5x39mm Leuchtspur IR-DIM<br />Patronen: 30<br />Eingesetzt von: MX/C/M/SW/3GL + Calibre: 6,5x39mm Trazadoras IR-DIM<br />Balas: 30<br />Se usa en: MX/C/M/SW/3GL + Calibre: 6,5x39mm Traçantes IR-DIM<br />Cartouches: 30<br />Utilisé dans: MX/C/M/SW/3GL + Kaliber: 6,5x39mm Smugacz IR-DIM<br />Pociski: 30<br />Używane w: MX/C/M/SW/3GL + Ráže: 6.5x39mm Svítící IR-DIM<br />Munice: 30<br />Použití: MX/C/M/SW/3GL + Calibre: 6,5x39mm Traçante IR-DIM<br />Projéteis: 30<br />Usado em: MX/C/M/SW/3GL + Calibro: 6.5x39mm Traccianti IR-DIM <br />Munizioni: 30<br />In uso su: MX/C/M/SW/3GL Калибр: 6,5x39 мм ИК-трассирующие<br />Патронов: 30<br />Используются с: MX/C/M/SW/3GL 6.5mm 30Rnd SD Mag - 6,5 mm Halk 30-as Tár - 6,5 mm 30-Schuss-Magazin SD + 6,5mm Halk 30-as Tár + 6,5mm 30-Patronen-Magazin SD Cargador de 30 balas SD de 6,5mm Ch. 6,5mm 30Cps SD Magazynek 6,5mm 30rd SD @@ -52,7 +52,7 @@ 6.5mm SD - 6,5 mm Halk + 6,5mm Halk 6,5mm SD 6,5mm SD 6,5mm SD @@ -63,21 +63,21 @@ 6,5 мм дозвуковые - Caliber: 6.5x39 mm SD<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL - Kaliber: 6,5x39 mm Halk<br />Lövedékek: 30<br />Használható: MX/C/M/SW/3GL - Kaliber: 6,5x39 mm SD<br />Patronen: 30<br />Eingesetzt von: MX/C/M/SW/3GL - Calibre: 6,5x39 mm SD<br />Balas: 30<br />Se usa en: MX/C/M/SW/3GL - Calibre: 6,5x39 mm SD<br />Cartouches: 30<br />Utilisé dans: MX/C/M/SW/3GL - Kaliber: 6,5x39 mm SD<br />Pociski: 30<br />Używane w: MX/C/M/SW/3GL - Ráže: 6.5x39 mm SD<br />Munice: 30<br />Použití: MX/C/M/SW/3GL - Calibre: 6,5x39 mm SD<br />Projéteis: 30<br />Usado em: MX/C/M/SW/3GL - Calibro: 6.5x39 mm Sil.<br />Munizioni: 30<br />In uso su: MX/C/M/SW/3GL + Caliber: 6.5x39mm SD<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL + Kaliber: 6,5x39mm Halk<br />Lövedékek: 30<br />Használható: MX/C/M/SW/3GL + Kaliber: 6,5x39mm SD<br />Patronen: 30<br />Eingesetzt von: MX/C/M/SW/3GL + Calibre: 6,5x39mm SD<br />Balas: 30<br />Se usa en: MX/C/M/SW/3GL + Calibre: 6,5x39mm SD<br />Cartouches: 30<br />Utilisé dans: MX/C/M/SW/3GL + Kaliber: 6,5x39mm SD<br />Pociski: 30<br />Używane w: MX/C/M/SW/3GL + Ráže: 6.5x39mm SD<br />Munice: 30<br />Použití: MX/C/M/SW/3GL + Calibre: 6,5x39mm SD<br />Projéteis: 30<br />Usado em: MX/C/M/SW/3GL + Calibro: 6.5x39mm Sil.<br />Munizioni: 30<br />In uso su: MX/C/M/SW/3GL Калибр: 6,5x39 мм дозвуковые<br />Патронов: 30<br />Используются с: MX/C/M/SW/3GL 6.5mm 30Rnd AP Mag - 6,5 mm Páncéltörő 30-as Tár - 6,5 mm 30-Schuss-Magazin AP + 6,5mm Páncéltörő 30-as Tár + 6,5mm 30-Patronen-Magazin AP Cargador de 30 balas AP de 6,5mm Ch. 6,5mm 30Cps AP Magazynek 6,5mm 30rd AP @@ -88,7 +88,7 @@ 6.5mm AP - 6,5 mm Páncéltörő + 6,5mm Páncéltörő 6,5mm AP 6,5mm AP 6,5mm AP @@ -99,22 +99,22 @@ 6,5 мм бронебойные - Caliber: 6.5x39 mm AP<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL - Kaliber: 6,5x39 mm Páncéltörő<br />Lövedékek: 30<br />Használható: MX/C/M/SW/3GL - Kaliber: 6,5x39 mm AP<br />Patronen: 30<br />Eingesetzt von: MX/C/M/SW/3GL - Calibre: 6,5x39 mm AP<br />Balas: 30<br />Se usa en: MX/C/M/SW/3GL - Calibre: 6,5x39 mm AP<br />Cartouches: 30<br />Utilisé dans: MX/C/M/SW/3GL - Kaliber: 6,5x39 mm AP<br />Pociski: 30<br />Używane w: MX/C/M/SW/3GL - Ráže: 6.5x39 mm AP<br />Munice: 30<br />Použití: MX/C/M/SW/3GL - Calibre: 6,5x39 mm AP<br />Projéteis: 30<br />Usado em: MX/C/M/SW/3GL - Calibro: 6.5x39 mm AP<br />Munizioni: 30<br />In uso su: MX/C/M/SW/3GL + Caliber: 6.5x39mm AP<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL + Kaliber: 6,5x39mm Páncéltörő<br />Lövedékek: 30<br />Használható: MX/C/M/SW/3GL + Kaliber: 6,5x39mm AP<br />Patronen: 30<br />Eingesetzt von: MX/C/M/SW/3GL + Calibre: 6,5x39mm AP<br />Balas: 30<br />Se usa en: MX/C/M/SW/3GL + Calibre: 6,5x39mm AP<br />Cartouches: 30<br />Utilisé dans: MX/C/M/SW/3GL + Kaliber: 6,5x39mm AP<br />Pociski: 30<br />Używane w: MX/C/M/SW/3GL + Ráže: 6.5x39mm AP<br />Munice: 30<br />Použití: MX/C/M/SW/3GL + Calibre: 6,5x39mm AP<br />Projéteis: 30<br />Usado em: MX/C/M/SW/3GL + Calibro: 6.5x39mm AP<br />Munizioni: 30<br />In uso su: MX/C/M/SW/3GL Калибр: 6,5x39 мм бронебойные<br />Патронов: 30<br />Используются с: MX/C/M/SW/3GL 6.5mm 30Rnd Tracer IR-DIM Mag 6,5mm IR-DIM Nyomjelző 30-as Tár - 6,5 mm 30-Schuss-Magazin Leuchtspur IR-DIM + 6,5mm 30-Patronen-Magazin Leuchtspur IR-DIM Cargador de 30 balas trazadoras IR-DIM de 6,5mm Ch. 6,5mm 30Cps Traçantes IR-DIM Magazynek 6,5mm 30rd Smugacz IR-DIM @@ -136,21 +136,21 @@ 6,5 мм ИК-трассирующие - Caliber: 6.5x39 mm Tracer IR-DIM<br />Rounds: 30<br />Used in: Katiba - Kaliber: 6,5x39 mm Nyomjelző IR-DIM<br />Lövedékek: 30<br />Használható: Katiba - Kaliber: 6,5x39 mm Leuchtspur IR-DIM<br />Patronen: 30<br />Eingesetzt von: Katiba - Calibre: 6,5x39 mm Trazadoras IR-DIM<br />Balas: 30<br />Se usa en: Katiba - Calibre: 6,5x39 mm Traçantes IR-DIM<br />Cartouches: 30<br />Utilisé dans: Katiba - Kaliber: 6,5x39 mm Smugacz IR-DIM<br />Pociski: 30<br />Używane w: Katiba - Ráže: 6.5x39 mm Svítící IR-DIM<br />Munice: 30<br />Použití: Katiba - Calibre: 6,5x39 mm Traçante IR-DIM<br />Projéteis: 30<br />Usado em: Katiba - Calibro: 6.5x39 mm Tracciant IR-DIM<br />Munizioni: 30<br />In uso su: Katiba + Caliber: 6.5x39mm Tracer IR-DIM<br />Rounds: 30<br />Used in: Katiba + Kaliber: 6,5x39mm Nyomjelző IR-DIM<br />Lövedékek: 30<br />Használható: Katiba + Kaliber: 6,5x39mm Leuchtspur IR-DIM<br />Patronen: 30<br />Eingesetzt von: Katiba + Calibre: 6,5x39mm Trazadoras IR-DIM<br />Balas: 30<br />Se usa en: Katiba + Calibre: 6,5x39mm Traçantes IR-DIM<br />Cartouches: 30<br />Utilisé dans: Katiba + Kaliber: 6,5x39mm Smugacz IR-DIM<br />Pociski: 30<br />Używane w: Katiba + Ráže: 6.5x39mm Svítící IR-DIM<br />Munice: 30<br />Použití: Katiba + Calibre: 6,5x39mm Traçante IR-DIM<br />Projéteis: 30<br />Usado em: Katiba + Calibro: 6.5x39mm Tracciant IR-DIM<br />Munizioni: 30<br />In uso su: Katiba Калибр: 6,5x39 мм ИК-трассирующие<br />Патронов: 30<br />Используются с: Katiba 6.5mm 30Rnd SD Mag - 6,5 mm Halk 30-as Tár - 6,5 mm 30-Schuss-Magazin SD + 6,5mm Halk 30-as Tár + 6,5mm 30-Patronen-Magazin SD Cargador de 30 balas SD de 6,5mm Ch. 6,5mm 30Cps SD Magazynek 6,5mm 30rd SD @@ -161,7 +161,7 @@ 6.5mm SD - 6,5 mm Halk + 6,5mm Halk 6,5mm SD 6,5mm SD 6,5mm SD @@ -172,21 +172,21 @@ 6,5 мм дозвуковые - Caliber: 6.5x39 mm SD<br />Rounds: 30<br />Used in: Katiba - Kaliber: 6,5x39 mm Halk<br />Lövedékek: 30<br />Használható: Katiba - Kaliber: 6,5x39 mm SD<br />Patronen: 30<br />Eingesetzt von: Katiba - Calibre: 6,5x39 mm SD<br />Balas: 30<br />Se usa en: Katiba - Calibre: 6,5x39 mm SD<br />Cartouches: 30<br />Utilisé dans: Katiba - Kaliber: 6,5x39 mm SD<br />Naboje: 30<br />Używane w: Katiba - Ráže: 6.5x39 mm SD<br />Munice: 30<br />Použití: Katiba - Calibre: 6,5x39 mm SD<br />Projéteis: 30<br />Usado em: Katiba - Calibro: 6.5x39 mm Sil.<br />Munizioni: 30<br />In uso su: Katiba + Caliber: 6.5x39mm SD<br />Rounds: 30<br />Used in: Katiba + Kaliber: 6,5x39mm Halk<br />Lövedékek: 30<br />Használható: Katiba + Kaliber: 6,5x39mm SD<br />Patronen: 30<br />Eingesetzt von: Katiba + Calibre: 6,5x39mm SD<br />Balas: 30<br />Se usa en: Katiba + Calibre: 6,5x39mm SD<br />Cartouches: 30<br />Utilisé dans: Katiba + Kaliber: 6,5x39mm SD<br />Naboje: 30<br />Używane w: Katiba + Ráže: 6.5x39mm SD<br />Munice: 30<br />Použití: Katiba + Calibre: 6,5x39mm SD<br />Projéteis: 30<br />Usado em: Katiba + Calibro: 6.5x39mm Sil.<br />Munizioni: 30<br />In uso su: Katiba Калибр: 6,5x39 мм дозвуковые<br />Патронов: 30<br />Используются с: Katiba 6.5mm 30Rnd AP Mag - 6,5 mm Páncéltörő 30-as Tár - 6,5 mm 30-Schuss-Magazin AP + 6,5mm Páncéltörő 30-as Tár + 6,5mm 30-Patronen-Magazin AP Cargador de 30 balas AP de 6,5mm Ch. 6,5mm 30Cps AP Magazynek 6,5mm 30rd AP @@ -197,7 +197,7 @@ 6.5mm AP - 6,5 mm Páncéltörő + 6,5mm Páncéltörő 6,5mm AP 6,5mm AP 6,5mm AP @@ -208,22 +208,22 @@ 6,5 мм бронебойные - Caliber: 6.5x39 mm AP<br />Rounds: 30<br />Used in: Katiba - Kaliber: 6,5x39 mm Páncéltörő<br />Lövedékek: 30<br />Használható: Katiba - Kaliber: 6,5x39 mm AP<br />Patronen: 30<br />Eingesetzt von: Katiba - Calibre: 6,5x39 mm AP<br />Balas: 30<br />Se usa en: Katiba - Calibre: 6,5x39 mm AP<br />Cartouches: 30<br />Utilisé dans: Katiba - Kaliber: 6,5x39 mm AP<br />Pociski: 30<br />Używane w: Katiba - Ráže: 6.5x39 mm AP<br />Munice: 30<br />Použití: Katiba - Calibre: 6,5x39 mm AP<br />Projéteis: 30<br />Usado em: Katiba - Calibro: 6.5x39 mm AP<br />Munizioni: 30<br />In uso su: Katiba + Caliber: 6.5x39mm AP<br />Rounds: 30<br />Used in: Katiba + Kaliber: 6,5x39mm Páncéltörő<br />Lövedékek: 30<br />Használható: Katiba + Kaliber: 6,5x39mm AP<br />Patronen: 30<br />Eingesetzt von: Katiba + Calibre: 6,5x39mm AP<br />Balas: 30<br />Se usa en: Katiba + Calibre: 6,5x39mm AP<br />Cartouches: 30<br />Utilisé dans: Katiba + Kaliber: 6,5x39mm AP<br />Pociski: 30<br />Używane w: Katiba + Ráže: 6.5x39mm AP<br />Munice: 30<br />Použití: Katiba + Calibre: 6,5x39mm AP<br />Projéteis: 30<br />Usado em: Katiba + Calibro: 6.5x39mm AP<br />Munizioni: 30<br />In uso su: Katiba Калибр: 6,5x39 мм бронебойные<br />Патронов: 30<br />Используются с: Katiba 5.56mm 30rnd Tracer IR-DIM Mag - 5,56 mm Nyomjelző IR-DIM 30-as Tár - 5,56 mm 30-Schuss-Magazin Leuchtspur IR-DIM + 5,56mm Nyomjelző IR-DIM 30-as Tár + 5,56mm 30-Patronen-Magazin Leuchtspur IR-DIM Cargador de 30 balas trazadoras IR-DIM de 5,56mm Ch. 5,56mm 30Cps Traçantes IR-DIM Magazynek 5,56mm 30rd Smugacz IR-DIM @@ -234,7 +234,7 @@ 5.56mm IR-DIM - 5,56 mm IR-DIM + 5,56mm IR-DIM 5,56mm IR-DIM 5,56mm IR-DIM 5,56mm IR-DIM @@ -245,22 +245,22 @@ 5,56 мм ИК-трассирующие - Caliber: 5.56x45 mm Tracer IR-DIM<br />Rounds: 30<br />Used in: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Kaliber: 5,56x45 mm Nyomjelző IR-DIM<br />Lövedékek: 30<br />Használható: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Kaliber: 5,56x45 mm Leuchtspur IR-DIM<br />Patronen: 30<br />Eingesetzt von: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Calibre: 5,56x45 mm Trazadoras IR-DIM<br />Balas: 30<br />Se usa en: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Calibre: 5,56x45 mm Traçantes IR-DIM<br />Cartouches: 30<br />Utilisé dans: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Kaliber: 5,56x45 mm Smugacz IR-DIM<br />Pociski: 30<br />Używane w: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Ráže: 5.56x45 mm Svítící IR-DIM<br />Munice: 30<br />Použití: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Calibre: 5,56x45 mm Traçante IR-DIM<br />Projéteis: 30<br />Usado em: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Calibro: 5.56x45 mm Traccianti IR-DIM<br />Munizioni: 30<br />In uso su: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Caliber: 5.56x45mm Tracer IR-DIM<br />Rounds: 30<br />Used in: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Kaliber: 5,56x45mm Nyomjelző IR-DIM<br />Lövedékek: 30<br />Használható: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Kaliber: 5,56x45mm Leuchtspur IR-DIM<br />Patronen: 30<br />Eingesetzt von: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Calibre: 5,56x45mm Trazadoras IR-DIM<br />Balas: 30<br />Se usa en: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Calibre: 5,56x45mm Traçantes IR-DIM<br />Cartouches: 30<br />Utilisé dans: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Kaliber: 5,56x45mm Smugacz IR-DIM<br />Pociski: 30<br />Używane w: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Ráže: 5.56x45mm Svítící IR-DIM<br />Munice: 30<br />Použití: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Calibre: 5,56x45mm Traçante IR-DIM<br />Projéteis: 30<br />Usado em: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Calibro: 5.56x45mm Traccianti IR-DIM<br />Munizioni: 30<br />In uso su: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR Калибр: 5,56x45 мм ИК-трассирующие<br />Патронов: 30<br />Используются с: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR 7.62mm 20rnd Tracer Mag - 7,62 mm Nyomjelző IR-DIM 20-as Tár - 7,62 mm 20-Schuss-Magazin Leuchtspur + 7,62mm Nyomjelző IR-DIM 20-as Tár + 7,62mm 20-Patronen-Magazin Leuchtspur Cargador de 20 balas trazadores de 7,62mm Ch. 7,62mm 20Cps Traçantes Magazynek 7,62mm 20rd Smugacz @@ -271,7 +271,7 @@ 7.62mm Tracer - 7,62 mm Nyomjelző + 7,62mm Nyomjelző 7,62mm Leuchtspur 7,62mm Trazadora 7,62mm Traçantes @@ -282,21 +282,21 @@ 7,62 мм трассирущие - Caliber: 7.62x51 mm Tracer<br />Rounds: 20<br />Used in: Mk18 ABR - Kaliber: 7,62x51 mm Nyomjelző<br />Lövedékek: 20<br />Használható: Mk18 ABR - Kaliber: 7,62x51 mm Leuchtspur<br />Patronen: 20<br />Eingesetzt von: EBR - Calibre: 7,62x51 mm Trazadora<br />Balas: 20<br />Se usa en: Mk18 ABR - Calibre: 7,62x51 mm Traçantes<br />Cartouches: 20<br />Utilisé dans: EBR - Kaliber: 7,62x51 mm Smugacz<br />Pociski: 20<br />Używane w: Mk18 ABR - Ráže: 7.62x51 mm Svítící<br />Munice: 20<br />Použití: Mk18 ABR - Calibre: 7,62x51 mm Traçante<br />Projéteis: 20<br />Usado em: Mk18 ABR - Calibro: 7.62x51 mm Traccianti<br />Munizioni: 20<br />In uso su: Mk18 ABR + Caliber: 7.62x51mm Tracer<br />Rounds: 20<br />Used in: Mk18 ABR + Kaliber: 7,62x51mm Nyomjelző<br />Lövedékek: 20<br />Használható: Mk18 ABR + Kaliber: 7,62x51mm Leuchtspur<br />Patronen: 20<br />Eingesetzt von: EBR + Calibre: 7,62x51mm Trazadora<br />Balas: 20<br />Se usa en: Mk18 ABR + Calibre: 7,62x51mm Traçantes<br />Cartouches: 20<br />Utilisé dans: EBR + Kaliber: 7,62x51mm Smugacz<br />Pociski: 20<br />Używane w: Mk18 ABR + Ráže: 7.62x51mm Svítící<br />Munice: 20<br />Použití: Mk18 ABR + Calibre: 7,62x51mm Traçante<br />Projéteis: 20<br />Usado em: Mk18 ABR + Calibro: 7.62x51mm Traccianti<br />Munizioni: 20<br />In uso su: Mk18 ABR Калибр: 7,62x51 мм трассирующие<br />Патронов: 20<br />Используются с: Mk18 ABR 7.62mm 20rnd Tracer IR-DIM Mag - 7,62 mm Nyomjelző IR-DIM 20-as Tár - 7,62 mm 20-Schuss-Magazin Leuchtspur IR-DIM + 7,62mm Nyomjelző IR-DIM 20-as Tár + 7,62mm 20-Patronen-Magazin Leuchtspur IR-DIM Cargador de 20 balas trazadoras IR-DIM de 7,62mm Ch. 7,62mm 20Cps Traçantes IR-DIM Magazynek 7,62mm 20rd Smugacz IR-DIM @@ -307,7 +307,7 @@ 7.62mm IR-DIM - 7,62 mm IR-DIM + 7,62mm IR-DIM 7,62mm IR-DIM 7,62mm IR-DIM 7,62mm IR-DIM @@ -318,21 +318,21 @@ 7,62 мм ИК-трассирующие - Caliber: 7.62x51 mm Tracer IR-DIM<br />Rounds: 20<br />Used in: Mk18 ABR - Kaliber: 7,62x51 mm Nyomjelző IR-DIM<br />Lövedékek: 20<br />Használható: Mk18 ABR - Kaliber: 7,62x51 mm Leuchtspur IR-DIM<br />Patronen: 20<br />Eingesetzt von: EBR - Calibre: 7,62x51 mm Trazadoras IR-DIM<br />Balas: 20<br />Se usa en: Mk18 ABR - Calibre: 7,62x51 mm Traçantes IR-DIM<br />Cartouches: 20<br />Utilisé dans: EBR - Kaliber: 7,62x51 mm Smugacz IR-DIM<br />Pociski: 20<br />Używane w: Mk18 ABR - Ráže: 7.62x51 mm Svítící IR-DIM<br />Munice: 20<br />Použití: Mk18 ABR - Calibre: 7,62x51 mm Traçante IR-DIM<br />Projéteis: 20<br />Usado em: Mk18 ABR - Calibro: 7.62x51 mm Traccianti IR-DIM<br />Munizioni: 20<br />In uso su: Mk18 ABR + Caliber: 7.62x51mm Tracer IR-DIM<br />Rounds: 20<br />Used in: Mk18 ABR + Kaliber: 7,62x51mm Nyomjelző IR-DIM<br />Lövedékek: 20<br />Használható: Mk18 ABR + Kaliber: 7,62x51mm Leuchtspur IR-DIM<br />Patronen: 20<br />Eingesetzt von: EBR + Calibre: 7,62x51mm Trazadoras IR-DIM<br />Balas: 20<br />Se usa en: Mk18 ABR + Calibre: 7,62x51mm Traçantes IR-DIM<br />Cartouches: 20<br />Utilisé dans: EBR + Kaliber: 7,62x51mm Smugacz IR-DIM<br />Pociski: 20<br />Używane w: Mk18 ABR + Ráže: 7.62x51mm Svítící IR-DIM<br />Munice: 20<br />Použití: Mk18 ABR + Calibre: 7,62x51mm Traçante IR-DIM<br />Projéteis: 20<br />Usado em: Mk18 ABR + Calibro: 7.62x51mm Traccianti IR-DIM<br />Munizioni: 20<br />In uso su: Mk18 ABR Калибр: 7,62x51 мм ИК-трассирующие<br />Патронов: 20<br />Используются с: Mk18 ABR 7.62mm 20Rnd SD Mag - 7,62 mm Halk 20-as Tár - 7,62 mm 20-Schuss-Magazin SD + 7,62mm Halk 20-as Tár + 7,62mm 20-Patronen-Magazin SD Cargador de 20 balas SD de 7,62mm Ch. 7,62mm 20Cps SD Magazynek 7,62mm 20rd SD @@ -343,7 +343,7 @@ 7.62mm SD - 7,62 mm Halk + 7,62mm Halk 7,62mm SD 7,62mm SD 7,62mm SD @@ -354,21 +354,21 @@ 7,62 мм дозвуковые - Caliber: 7.62x51 mm SD<br />Rounds: 20<br />Used in: Mk18 ABR - Kaliber: 7,62x51 mm Halk<br />Lövedékek: 20<br />Használható: Mk18 ABR - Kaliber: 7,62x51 mm SD<br />Patronen: 20<br />Eingesetzt von: EBR - Calibre: 7,62x51 mm SD<br />Balas: 20<br />Se usa en: Mk18 ABR - Calibre: 7,62x51 mm SD<br />Cartouches: 20<br />Utilisé dans: EBR - Kaliber: 7,62x51 mm SD<br />Pociski: 20<br />Używane w: Mk18 ABR - Ráže: 7.62x51 mm SD<br />Munice: 20<br />Použití: Mk18 ABR - Calibre: 7,62x51 mm SD<br />Projéteis: 20<br />Usado em: Mk18 ABR - Calibro: 7.62x51 mm Sil.<br />Munizioni: 20<br />In uso su: Mk18 ABR + Caliber: 7.62x51mm SD<br />Rounds: 20<br />Used in: Mk18 ABR + Kaliber: 7,62x51mm Halk<br />Lövedékek: 20<br />Használható: Mk18 ABR + Kaliber: 7,62x51mm SD<br />Patronen: 20<br />Eingesetzt von: EBR + Calibre: 7,62x51mm SD<br />Balas: 20<br />Se usa en: Mk18 ABR + Calibre: 7,62x51mm SD<br />Cartouches: 20<br />Utilisé dans: EBR + Kaliber: 7,62x51mm SD<br />Pociski: 20<br />Używane w: Mk18 ABR + Ráže: 7.62x51mm SD<br />Munice: 20<br />Použití: Mk18 ABR + Calibre: 7,62x51mm SD<br />Projéteis: 20<br />Usado em: Mk18 ABR + Calibro: 7.62x51mm Sil.<br />Munizioni: 20<br />In uso su: Mk18 ABR Калибр: 7,62x51 мм дозвуковые<br />Патронов: 20<br />Используются с: Mk18 ABR .338 NM 130Rnd Tracer Belt - .338 NM 130-Schuss-Gurt Leuchtspur + .338 NM 130-Patronen-Gurt Leuchtspur Taśma .338 NM 130rd Smugacz Bande .338 NM 130Cps Traçante Cinta de 130 balas trazadoras de .338 NM @@ -385,7 +385,7 @@ Caliber: .338 Norma Magnum Tracer<br />Rounds: 130<br />Used in: SPMG - Kaliber: .338 Norma Magnum Leuchtspur<br />Schuss: 130<br />Verwendet für: SPMG + Kaliber: .338 Norma Magnum Leuchtspur<br />Patronen: 130<br />Eingesetzt von: SPMG Kaliber: .338 Norma Magnum Smugacz<br />Pociski: 130<br />Używany w: SPMG Calibre: .338 Norma Magnum Traçante<br />Cartouches: 130<br />Utilisé dans: SPMG Calibre: .338 Norma Magnum trazadora<br />Balas: 130<br />Se usa en: SPMG @@ -393,7 +393,7 @@ .338 NM 130Rnd IR-DIM Belt - .338 NM 130-Schuss-Gurt Leuchtspur IR-DIM + .338 NM 130-Patronen-Gurt Leuchtspur IR-DIM Taśma .338 NM 130rd IR-DIM Bande .338 NM 130Cps IR-DIM Cinta de 130 balas IR-DIM de .338 NM @@ -410,7 +410,7 @@ Caliber: .338 Norma Magnum Tracer IR-DIM<br />Rounds: 130<br />Used in: SPMG - Kaliber: .338 Norma Magnum Leuchtspur IR-DIM<br />Schuss: 130<br />Verwendet für: SPMG + Kaliber: .338 Norma Magnum Leuchtspur IR-DIM<br />Patronen: 130<br />Eingesetzt von: SPMG Kaliber: .338 Norma Magnum Smugacz IR-DIM<br />Pociski: 130<br />Używany w: SPMG Calibre: .338 Norma Magnum Traçante IR-DIM<br />Cartouches: 130<br />Utilisé dans: SPMG Calibre: .338 Norma Magnum trazadora IR-DIM<br />Balas: 130<br />Se usa en: SPMG @@ -418,7 +418,7 @@ .338 NM 130Rnd AP Belt - .338 NM 130-Schuss-Gurt Hartkern + .338 NM 130-Patronen-Gurt Hartkern Taśma .338 NM 130rd AP Bande .338 NM 130Cps AP Cinta de 130 balas AP de .338 NM @@ -435,7 +435,7 @@ Caliber: .338 Norma Magnum AP<br />Rounds: 130<br />Used in: SPMG - Kaliber: .338 Norma Magnum Hartkern<br />Schuss: 130<br />Verwendet für: SPMG + Kaliber: .338 Norma Magnum Hartkern<br />Patronen: 130<br />Eingesetzt von: SPMG Kaliber: .338 Norma Magnum AP<br />Pociski: 130<br />Używane w: SPMG Calibre: .338 Norma Magnum AP<br />Cartouches: 130<br />Utilisé dans: SPMG Calibre: .338 Norma Magnum AP<br />Balas: 130<br />Se usa en: SPMG @@ -444,7 +444,7 @@ 9.3mm 10Rnd Tracer Mag - 9,3mm 10-Schuss-Magazin Leuchtspur + 9,3mm 10-Patronen-Magazin Leuchtspur Magazynek 9.3mm 10rd Smugacz Chargeur 9.3mm 10Cps Traçante Cargador de 10 balas trazadoras de 9.3mm @@ -461,15 +461,15 @@ Caliber: 9.3x64mm Tracer<br />Rounds: 10<br />Used in: Cyrus - Kaliber: 9,3x64mm Leuchtspur<br />Schuss: 10<br />Verwendet für: Cyrus - Kaliber: 9,3x64 mm Smugacz<br />Pociski: 10<br />Używany w: Cyrus + Kaliber: 9,3x64mm Leuchtspur<br />Patronen: 10<br />Eingesetzt von: Cyrus + Kaliber: 9,3x64mm Smugacz<br />Pociski: 10<br />Używany w: Cyrus Calibre: 9.3x64mm Traçante<br />Cartouches: 10<br />Utilisé dans: Cyrus Calibre: 9.3x64mm trazadora<br />Balas: 10<br />Se usa en: Cyrus Калибр: 9,3x64 мм трассирующие<br />Патронов: 10<br />Используются с: Cyrus 9.3mm 10Rnd Tracer IR-DIM Mag - 9,3mm 10-Schuss-Magazin Leuchtspur IR-DIM + 9,3mm 10-Patronen-Magazin Leuchtspur IR-DIM Magazynek 9,3mm 10rd Smugacz IR-DIM Chargeur 9.3mm 10Cps Traçante IR-DIM Cargador de 10 balas trazadoras IR-DIM de 9.3mm @@ -486,8 +486,8 @@ Caliber: 9.3x64mm Tracer IR-DIM<br />Rounds: 10<br />Used in: Cyrus - Kaliber: 9,3x64mm Leuchtspur IR-DIM<br />Schuss: 10<br />Verwendet für: Cyrus - Kaliber: 9,3x64 mm Smugacz IR-DIM<br />Pociski: 10<br />Używany w: Cyrus + Kaliber: 9,3x64mm Leuchtspur IR-DIM<br />Patronen: 10<br />Eingesetzt von: Cyrus + Kaliber: 9,3x64mm Smugacz IR-DIM<br />Pociski: 10<br />Używany w: Cyrus Calibre: 9.3x64mm Traçante IR-DIM<br />Cartouches: 10<br />Utilisé dans: Cyrus Calibre: 9.3x64mm trazadora IR-DIM<br />Balas: 10<br />Se usa en: Cyrus Калибр: 9,3x64 мм ИК-трассирующие<br />Патронов: 10<br />Используются с: Cyrus @@ -495,7 +495,7 @@ 9.3mm 150Rnd Tracer Belt - 9,3mm 150-Schuss-Gurt Leuchtspur + 9,3mm 150-Patronen-Gurt Leuchtspur Taśma 9,3mm 150rd Smugacz Bande 9.3mm 150Cps Traçante Cinta de 150 balas trazadoras de 9.3mm @@ -512,15 +512,15 @@ Caliber: 9.3x64mm Tracer<br />Rounds: 150<br />Used in: Navid - Kaliber: 9,3x64mm Leuchtspur<br />Schuss: 150<br />Verwendet für: Navid - Kaliber: 9,3x64 mm Smugacz<br />Pociski: 150<br />Używane w: Navid + Kaliber: 9,3x64mm Leuchtspur<br />Patronen: 150<br />Eingesetzt von: Navid + Kaliber: 9,3x64mm Smugacz<br />Pociski: 150<br />Używane w: Navid Calibre: 9.3x64mm Traçante<br />Cartouches: 150<br />Utilisé dans: Navid Calibre: 9.3x64mm trazadora<br />Balas: 150<br />Se usa en: Navid Калибр: 9,3x64 мм трассирующие<br />Патронов: 150<br />Используются с: Навид 9.3mm 150Rnd Tracer IR-DIM Belt - 9,3mm 150-Schuss-Gurt Leuchtspur IR-DIM + 9,3mm 150-Patronen-Gurt Leuchtspur IR-DIM Taśma 9,3mm 150rd Smugacz IR-DIM Bande 9.3mm 150Cps Traçante IR-DIM Cinta de 150 balas trazadoras IR-DIM de 9.3mm @@ -537,15 +537,15 @@ Caliber: 9.3x64mm Tracer IR-DIM<br />Rounds: 150<br />Used in: Navid - Kaliber: 9,3x64mm Leuchtspur IR-DIM<br />Schuss: 150<br />Verwendet für: Navid - Kaliber: 9,3x64 mm Smugacz IR-DIM<br />Pociski: 150<br />Używane w: Navid + Kaliber: 9,3x64mm Leuchtspur IR-DIM<br />Patronen: 150<br />Eingesetzt von: Navid + Kaliber: 9,3x64mm Smugacz IR-DIM<br />Pociski: 150<br />Używane w: Navid Calibre: 9.3x64mm Traçante IR-DIM<br />Cartouches: 150<br />Utilisé dans: Navid Calibre: 9.3x64mm trazadora IR-DIM<br />Balas: 150<br />Se usa en: Navid Калибр: 9,3x64 мм ИК-трассирующие<br />Патронов: 150<br />Используются с: Навид 9.3mm 150Rnd AP Belt - 9,3mm 150-Schuss-Gurt Hartkern + 9,3mm 150-Patronen-Gurt Hartkern Taśma 9,3mm 150rd AP Bande 9.3mm 150Cps AP Cinta de 150 balas AP de 9.3mm @@ -562,8 +562,8 @@ Caliber: 9.3x64mm AP<br />Rounds: 150<br />Used in: Navid - Kaliber: 9,3x64mm Hartkern<br />Schuss: 150<br />Verwendet für: Navid - Kaliber: 9,3x64 mm AP<br />Pociski: 150<br />Używane w: Navid + Kaliber: 9,3x64mm Hartkern<br />Patronen: 150<br />Eingesetzt von: Navid + Kaliber: 9,3x64mm AP<br />Pociski: 150<br />Używane w: Navid Calibre: 9.3x64mm AP<br />Cartouches: 150<br />Utilisé dans: Navid Calibre: 9.3x64mm AP<br />Balas: 150<br />Se usa en: Navid Калибр: 9,3x64 мм бронебойные<br />Патронов: 150<br />Используются с: Навид @@ -574,6 +574,7 @@ Chargeur 9x19mm 16Cps Cargador de 16 balas de 9x19mm Магазин из 16-ти 9х19 мм + 9x19mm 20-Patronen-Magazin 9x19mm @@ -581,6 +582,7 @@ 9x19mm 9x19mm 9х19 мм + 9x19mm 9x19mm 30Rnd Mag @@ -588,6 +590,7 @@ 9x19mm 30Cps Cargador de 16 balas de 9x19mm Магазин из 16-ти 9х19 мм + 9x19mm 30-Patronen-Magazin 9x19mm 30Rnd Mag @@ -595,6 +598,7 @@ 9x19mm 30Cps Cargador de 30 balas de 9x19mm Магазин из 30-ти 9х19 мм + 9x19mm 30-Patronen-Magazin 9x19mm @@ -602,6 +606,7 @@ 9x19mm 9x19mm 9х19 мм + 9x19mm 9x19mm 30Rnd Mag @@ -609,13 +614,15 @@ 9x19mm 30Cps Cargador de 30 balas de 9x19mm Магазин из 30-ти 9х19 мм + 9x19mm 30-Patronen-Magazin 7.62x54mm 10Rnd Tracer IR-DIM Mag - Magazynek 7,62x54 mm 10rd Smugacz IR-DIM + Magazynek 7,62x54mm 10rd Smugacz IR-DIM Chargeur 7.62x54mm 10Rnd Traçante IR-DIM Cargador de 10 balas trazadoras IR-DIM de 7.62x54mm Магазин из 10-ти 7,62 мм ИК-трассирующих + 7,62x54mm 10-Patronen-Magazin IR-DIM Leuchtspur 7.62mm IR-DIM @@ -623,13 +630,15 @@ 7.62mm IR-DIM 7.62mm IR-DIM 7,62 мм ИК-трассирующие + 7,62x54mm IR-DIM 7.62x54mm 10Rnd Tracer IR-DIM Mag - Magazynek 7,62x54 mm 10rd Smugacz IR-DIM + Magazynek 7,62x54mm 10rd Smugacz IR-DIM Chargeur 7.62x54mm 10Cps Traçante IR-DIM Cargador de 10 balas trazadoras IR-DIM de 7.62x54mm Магазин из 10-ти 7,62 мм ИК-трассирующих + 7,62x54mm 10-Patronen-Magazin IR-DIM Leuchtspur 6.5mm 100Rnd Tracer IR-DIM Mag @@ -637,6 +646,7 @@ Chargeur 6.5mm 100Rnd Traçante IR-DIM Cargador de 100 balas trazadoras IR-DIM de 6.5mm Магазин из 100 6,5 мм ИК-трассирующих + 6,5mm 100-Patronen-Magazin IR-DIM Leuchtspur 6.5mm IR-DIM @@ -644,6 +654,7 @@ 6.5mm IR-DIM 6.5mm IR-DIM 6,5 мм ИК-трассирующие + 6,5mm IR-DIM 6.5mm 100Rnd Tracer IR-DIM Mag<br />Rounds: 100<br />Used in: MX LSW @@ -651,6 +662,7 @@ Chargeur 6.5mm 100Rnd Traçante IR-DIM Cargador de 100 balas trazadoras IR-DIM de 6.5mm Магазин из 100 6,5 мм ИК-трассирующих + 6,5mm 100-Patronen-Magazin IR-DIM Leuchtspur<br />Patronen: 100<br />Eingesetzt von: MXLSW 6.5mm 200Rnd Tracer IR-DIM Belt @@ -658,6 +670,7 @@ Bande 6.5mm 200Rnd Traçante IR-DIM Cinta de 200 balas trazadoras IR-DIM de 6.5mm Магазин из 200-т 6,5 мм ИК-трассирующих + 6,5mm 200-Patronen-Gurt IR-DIM Leuchtspur 6.5mm IR-DIM @@ -665,6 +678,7 @@ 6.5mm IR-DIM 6.5mm IR-DIM 6,5 мм ИК-трассирующие + 6,5mm IR-DIM 6.5mm 200Rnd Tracer IR-DIM Belt<br />Rounds: 200<br />Used in: Stoner 99 LMG @@ -672,6 +686,7 @@ Bande 6.5mm 200Cps Traçante IR-DIM Cinta de 200 balas trazadoras IR-DIM de 6.5mm Магазин из 200-т 6,5 мм ИК-трассирующих + 6,5mm 200-Patronen-Gurt IR-DIM Leuchtspur<br />Patronen: 200<br />Eingesetzt von: Stoner 99 LMG 5.56mm 30Rnd Mag (Mk262) @@ -679,6 +694,7 @@ 5.56mm 30Cps (Mk262) Cargador de 30 balas de 5.56mm (Mk262) Магазин из 30-ти 5.56 мм Mk262 + 5,56mm 30-Patronen-Magazin (Mk262) 5.56mm Mk262 @@ -686,13 +702,15 @@ 5.56mm Mk262 5.56mm Mk262 5,56 мм Mk262 + 5,56mm Mk262 - Caliber: 5.56x45 mm NATO (Mk262)<br />Rounds: 30 - Kaliber: 5,56x45 mm NATO (Mk262)<br />Pociski: 30 - Calibre: 5.56x45 mm NATO (Mk262)<br />Cartouches: 30 - Calibre: 5.56x45 mm NATO (Mk262)<br />Balas: 30 + Caliber: 5.56x45mm NATO (Mk262)<br />Rounds: 30 + Kaliber: 5,56x45mm NATO (Mk262)<br />Pociski: 30 + Calibre: 5.56x45mm NATO (Mk262)<br />Cartouches: 30 + Calibre: 5.56x45mm NATO (Mk262)<br />Balas: 30 Калибр: 5,56x45 мм NATO (Mk262)<br />Патронов: 30 + Kaliber: 5,56x45mm NATO (Mk262)<br />Patronen: 30 5.56mm 30Rnd Mag (Mk318) @@ -700,6 +718,7 @@ 5.56mm 30Cps (Mk318) Cargador de 30 balas de 5.56mm (Mk318) Магазин из 30-ти 5.56 мм (Mk318) + 5,56mm 30-Patronen-Magazin (Mk318) 5.56mm Mk318 @@ -707,13 +726,15 @@ 5.56mm Mk318 5.56mm Mk318 5.56 мм Mk318 + 5,56mm Mk318 - Caliber: 5.56x45 mm NATO (Mk318)<br />Rounds: 30 - Kaliber: 5,56x45 mm NATO (Mk318)<br />Pociski: 30 - Calibre: 5.56x45 mm NATO (Mk318)<br />Cartouches: 30 - Calibre: 5.56x45 mm NATO (Mk318)<br />Balas: 30 + Caliber: 5.56x45mm NATO (Mk318)<br />Rounds: 30 + Kaliber: 5,56x45mm NATO (Mk318)<br />Pociski: 30 + Calibre: 5.56x45mm NATO (Mk318)<br />Cartouches: 30 + Calibre: 5.56x45mm NATO (Mk318)<br />Balas: 30 Калибр: 5,56x45 мм NATO (Mk318)<br />Патронов: 30 + Kaliber: 5,56x45mm NATO (Mk318)<br />Patronen: 30 5.56mm 30Rnd Mag (M995 AP) @@ -721,6 +742,7 @@ 5.56mm 30Cps (M995 AP) Cargador de 30 balas de 5.56mm (M995 AP) Магазин из 30-ти 5.56 мм (M995 AP) + 5,56mm 30-Patronen-Magazin (M995AP) 5.56mm AP @@ -728,13 +750,15 @@ 5.56mm AP 5.56mm AP 5.56 мм AP + 5,56mm AP - Caliber: 5.56x45 mm NATO (M995 AP)<br />Rounds: 30 - Kaliber: 5,56x45 mm NATO (M995 AP)<br />Pociski: 30 - Calibre: 5.56x45 mm NATO (M995 AP)<br />Cartouches: 30 - Calibre: 5.56x45 mm NATO (M995 AP)<br />Balas: 30 + Caliber: 5.56x45mm NATO (M995 AP)<br />Rounds: 30 + Kaliber: 5,56x45mm NATO (M995 AP)<br />Pociski: 30 + Calibre: 5.56x45mm NATO (M995 AP)<br />Cartouches: 30 + Calibre: 5.56x45mm NATO (M995 AP)<br />Balas: 30 Калибр: 5,56x45 мм NATO (M995 AP)<br />Патронов: 30 + Kaliber: 5,56x45mm NATO (M995 AP)<br />Patronen: 30 7.62mm 10Rnd Mag (M118LR) @@ -742,6 +766,7 @@ 7.62mm 10Cps (M118LR) Cargador de 10 balas de 7.62mm (M118LR) Магазин из 10-ти 7,62 мм (M118LR) + 7,62mm 10-Patronen-Magazin (M118LR) 7.62mm M118LR @@ -749,13 +774,15 @@ 7.62mm M118LR 7.62mm (M118LR) 7,62 мм M118LR + 7,62mm M118LR - Caliber: 7.62x51 mm NATO (M118LR)<br />Rounds: 10 - Kaliber: 7,62x51 mm NATO (M118LR)<br />Pociski: 10 - Calibre: 7.62x51 mm NATO (M118LR)<br />Cartouches: 10 - Calibre: 7.62x51 mm NATO (M118LR)<br />Balas: 10 + Caliber: 7.62x51mm NATO (M118LR)<br />Rounds: 10 + Kaliber: 7,62x51mm NATO (M118LR)<br />Pociski: 10 + Calibre: 7.62x51mm NATO (M118LR)<br />Cartouches: 10 + Calibre: 7.62x51mm NATO (M118LR)<br />Balas: 10 Калибр: 7,62x51 мм NATO (M118LR)<br />Патронов: 10 + Kaliber: 7,62x51mm NATO (M118LR)<br />Patronen: 10 7.62mm 20Rnd Mag (M118LR) @@ -763,6 +790,7 @@ 7.62mm 20Cps (M118LR) Cargador de 20 balas de 7.62mm (M118LR) Магазин из 20-ти 7,62 мм (M118LR) + 7,62mm 20-Patronen-Magazin (M118LR) 7.62mm M118LR @@ -770,13 +798,15 @@ 7.62mm M118LR 7.62mm (M118LR) 7,62 мм M118LR + 7,62mm M118LR - Caliber: 7.62x51 mm NATO (M118LR)<br />Rounds: 20 - Kaliber: 7,62x51 mm NATO (M118LR)<br />Pociski: 20 - Calibre: 7.62x51 mm NATO (M118LR)<br />Cartouches: 20 - Calibre: 7.62x51 mm NATO (M118LR)<br />Balas: 20 + Caliber: 7.62x51mm NATO (M118LR)<br />Rounds: 20 + Kaliber: 7,62x51mm NATO (M118LR)<br />Pociski: 20 + Calibre: 7.62x51mm NATO (M118LR)<br />Cartouches: 20 + Calibre: 7.62x51mm NATO (M118LR)<br />Balas: 20 Калибр: 7,62x51 мм NATO (M118LR)<br />Патронов: 20 + Kaliber: 7,62x51mm NATO (M118LR)<br />Patronen: 20 7.62mm 10Rnd Mag (Mk316 Mod 0) @@ -784,6 +814,7 @@ 7.62mm 10Cps (Mk316 Mod 0) Cargador de 10 balas de 7.62mm (Mk316 Mod 0) Магазин из 10-ти 7,62 мм (Mk316 Mod 0) + 7,62mm 10-Patronen-Magazin (Mk316 Mod 0) 7.62mm Mk316 @@ -791,13 +822,15 @@ 7.62mm Mk316 7.62mm Mk316 7,62 мм Mk316 + 7,62mm Mk316 - Caliber: 7.62x51 mm NATO (Mk316 Mod 0)<br />Rounds: 10 - Kaliber: 7,62x51 mm NATO (Mk316 Mod 0)<br />Pociski: 10 - Calibre: 7.62x51 mm NATO (Mk316 Mod 0)<br />Cartouches: 10 - Calibre: 7.62x51 mm NATO (Mk316 Mod 0)<br />Balas: 10 + Caliber: 7.62x51mm NATO (Mk316 Mod 0)<br />Rounds: 10 + Kaliber: 7,62x51mm NATO (Mk316 Mod 0)<br />Pociski: 10 + Calibre: 7.62x51mm NATO (Mk316 Mod 0)<br />Cartouches: 10 + Calibre: 7.62x51mm NATO (Mk316 Mod 0)<br />Balas: 10 Калибр: 7,62x51 мм NATO (Mk316 Mod 0)<br />Патронов: 10 + Kaliber: 7,62x51mm NATO (Mk316 Mod 0)<br />Patronen: 10 7.62mm 20Rnd Mag (Mk316 Mod 0) @@ -805,6 +838,7 @@ 7.62mm 20Cps (Mk316 Mod 0) Cargador de 20 balas de 7.62mm (Mk316 Mod 0) Магазин из 20-ти 7,62 мм (Mk316 Mod 0) + 7,62mm 20-Patronen-Magazin (Mk316 Mod 0) 7.62mm Mk316 @@ -812,13 +846,15 @@ 7.62mm Mk316 7.62mm Mk316 7,62 мм Mk316 + 7,62mm Mk316 - Caliber: 7.62x51 mm NATO (Mk316 Mod 0)<br />Rounds: 20 - Kaliber: 7,62x51 mm NATO (Mk316 Mod 0)<br />Pociski: 20 - Calibre: 7.62x51 mm NATO (Mk316 Mod 0)<br />Cartouches: 20 - Calibre: 7.62x51 mm NATO (Mk316 Mod 0)<br />Balas: 20 + Caliber: 7.62x51mm NATO (Mk316 Mod 0)<br />Rounds: 20 + Kaliber: 7,62x51mm NATO (Mk316 Mod 0)<br />Pociski: 20 + Calibre: 7.62x51mm NATO (Mk316 Mod 0)<br />Cartouches: 20 + Calibre: 7.62x51mm NATO (Mk316 Mod 0)<br />Balas: 20 Калибр: 7,62x51 мм NATO (Mk316 Mod 0)<br />Патронов: 20 + Kaliber: 7,62x51mm NATO (Mk316 Mod 0)<br />Patronen: 20 7.62mm 10Rnd Mag (Mk319 Mod 0) @@ -826,6 +862,7 @@ 7.62mm 10Cps (Mk319 Mod 0) Cargador de 10 balas de 7.62mm (Mk319 Mod 0) Магазин из 10-ти 7,62 мм (Mk319 Mod 0) + 7,62mm 10-Patronen-Magazin (Mk319 Mod 0) 7.62mm Mk319 @@ -833,13 +870,15 @@ 7.62mm Mk319 7.62mm Mk319 7,62mm Mk319 + 7,62mm Mk319 - Caliber: 7.62x51 mm NATO (Mk319 Mod 0)<br />Rounds: 10 - Kaliber: 7,62x51 mm NATO (Mk319 Mod 0)<br />Pociski: 10 - Calibre: 7.62x51 mm NATO (Mk319 Mod 0)<br />Cartouches: 10 - Calibre: 7.62x51 mm NATO (Mk319 Mod 0)<br />Balas: 10 + Caliber: 7.62x51mm NATO (Mk319 Mod 0)<br />Rounds: 10 + Kaliber: 7,62x51mm NATO (Mk319 Mod 0)<br />Pociski: 10 + Calibre: 7.62x51mm NATO (Mk319 Mod 0)<br />Cartouches: 10 + Calibre: 7.62x51mm NATO (Mk319 Mod 0)<br />Balas: 10 Калибр: 7,62x51 мм NATO (Mk319 Mod 0)<br />Патронов: 10 + Kaliber: 7,62x51mm NATO (Mk319 Mod 0)<br />Patronen: 10 7.62mm 20Rnd Mag (Mk319 Mod 0) @@ -847,6 +886,7 @@ 7.62mm 20Cps (Mk319 Mod 0) Cargador de 20 balas de 7.62mm (Mk319 Mod 0) Магазин из 20-ти 7,62 мм (Mk319 Mod 0) + 7,62mm 20-Patronen-Magazin (Mk319 Mod 0) 7.62mm Mk319 @@ -854,13 +894,15 @@ 7.62mm Mk319 7.62mm Mk319 7,62 мм Mk319 + 7,62mm Mk319 - Caliber: 7.62x51 mm NATO (Mk319 Mod 0)<br />Rounds: 20 - Kaliber: 7,62x51 mm NATO (Mk319 Mod 0)<br />Pociski: 20 - Calibre: 7.62x51 mm NATO (Mk319 Mod 0)<br />Cartouches: 20 - Calibre: 7.62x51 mm NATO (Mk319 Mod 0)<br />Balas: 20 + Caliber: 7.62x51mm NATO (Mk319 Mod 0)<br />Rounds: 20 + Kaliber: 7,62x51mm NATO (Mk319 Mod 0)<br />Pociski: 20 + Calibre: 7.62x51mm NATO (Mk319 Mod 0)<br />Cartouches: 20 + Calibre: 7.62x51mm NATO (Mk319 Mod 0)<br />Balas: 20 Калибр: 7,62x51 мм NATO (Mk319 Mod 0)<br />Патронов: 20 + Kaliber: 7,62x51mm NATO (Mk319 Mod 0)<br />Patronen: 20 7.62mm 10Rnd Mag (M993 AP) @@ -868,6 +910,7 @@ 7.62mm 10Cps (M993 AP) Cargador de 10 balas de 7.62mm (M993 AP) Магазин из 10-ти 7,62 мм (M993 AP) + 7,62mm 10-Patronen-Magazin (M993 AP) 7.62mm AP @@ -875,13 +918,15 @@ 7.62mm AP 7.62mm AP 7,62mm AP + 7,62mm AP - Caliber: 7.62x51 mm NATO (M993 AP)<br />Rounds: 10 - Kaliber: 7,62x51 mm NATO (M993 AP)<br />Pociski: 10 - Calibre: 7.62x51 mm NATO (M993 AP)<br />Cartouches: 10 - Calibre: 7.62x51 mm NATO (M993 AP)<br />Balas: 10 + Caliber: 7.62x51mm NATO (M993 AP)<br />Rounds: 10 + Kaliber: 7,62x51mm NATO (M993 AP)<br />Pociski: 10 + Calibre: 7.62x51mm NATO (M993 AP)<br />Cartouches: 10 + Calibre: 7.62x51mm NATO (M993 AP)<br />Balas: 10 Калибр: 7,62x51 мм NATO (M993 AP)<br />Патронов: 10 + Kaliber: 7,62x51mm NATO (M993 AP)<br />Patronen: 10 7.62mm 20Rnd Mag (M993 AP) @@ -889,6 +934,7 @@ 7.62mm 20Cps (M993 AP) Cargador de 20 balas de 7.62mm (M993 AP) Магазин из 20-ти 7,62 мм (M993 AP) + 7,62mm 20-Patronen-Magazin (M993 AP) 7.62mm AP @@ -896,13 +942,15 @@ 7.62mm AP 7.62mm AP 7,62 мм AP + 7,62mm AP - Caliber: 7.62x51 mm NATO (M993 AP)<br />Rounds: 20 - Kaliber: 7,62x51 mm NATO (M993 AP)<br />Pociski: 20 - Calibre: 7.62x51 mm NATO (M993 AP)<br />Cartouches: 20 - Calibre: 7.62x51 mm NATO (M993 AP)<br />Balas: 20 + Caliber: 7.62x51mm NATO (M993 AP)<br />Rounds: 20 + Kaliber: 7,62x51mm NATO (M993 AP)<br />Pociski: 20 + Calibre: 7.62x51mm NATO (M993 AP)<br />Cartouches: 20 + Calibre: 7.62x51mm NATO (M993 AP)<br />Balas: 20 Калибр: 7,62x51 мм NATO (M993 AP)<br />Патронов: 20 + Kaliber: 7,62x51mm NATO (M993 AP)<br />Patronen: 20 7.62mm 20Rnd Mag (Mk248 Mod 0) @@ -910,6 +958,7 @@ 7.62mm 20Cps (Mk248 Mod 0) Cargador de 20 balas de 7.62mm (Mk248 Mod 0) Магазин из 20-ти 7,62 мм (Mk248 Mod 0) + 7,62mm 20-Patronen-Magazin (Mk248 Mod 0) 7.62mm (Mk248 Mod 0) @@ -917,13 +966,15 @@ 7.62mm (Mk248 Mod 0) 7.62mm (Mk248 Mod 0) 7,62 мм (Mk248 Mod 0) + 7,62mm (Mk248 Mod 0) - Caliber: 7.62x67 mm NATO (Mk248 Mod 0)<br />Rounds: 20 - Kaliber: 7,62x67 mm NATO (Mk248 Mod 0)<br />Pociski: 20 + Caliber: 7.62x67mm NATO (Mk248 Mod 0)<br />Rounds: 20 + Kaliber: 7,62x67mm NATO (Mk248 Mod 0)<br />Pociski: 20 Calibre: 7.62x67mm NATO (Mk248 Mod 0)<br />Cartouches: 20 - Calibre: 7.62x67 mm NATO (Mk248 Mod 0)<br />Balas: 20 + Calibre: 7.62x67mm NATO (Mk248 Mod 0)<br />Balas: 20 Калибр: 7,62x67 мм NATO (Mk248 Mod 0)<br />Патронов: 20 + Kaliber: 7,62x51mm NATO (Mk248 Mod 0)<br />Patronen: 20 7.62mm 20Rnd Mag (Mk248 Mod 1) @@ -931,6 +982,7 @@ 7.62mm 20Cps (Mk248 Mod 1) Cargador de 20 balas de 7.62mm (Mk248 Mod 1) Магазин из 20-ти 7,62 мм (Mk248 Mod 1) + 7,62mm 20-Patronen-Magazin (Mk248 Mod 1) 7.62mm (Mk248 Mod 1) @@ -938,13 +990,15 @@ 7.62mm (Mk248 Mod 1) 7.62mm (Mk248 Mod 1) 7,62 мм (Mk248 Mod 1) + 7,62mm (Mk248 Mod 1) - Caliber: 7.62x67 mm NATO (Mk248 Mod 1)<br />Rounds: 20 - Kaliber: 7,62x67 mm NATO (Mk248 Mod 1)<br />Pociski: 20 + Caliber: 7.62x67mm NATO (Mk248 Mod 1)<br />Rounds: 20 + Kaliber: 7,62x67mm NATO (Mk248 Mod 1)<br />Pociski: 20 Calibre: 7.62x67mm NATO (Mk248 Mod 1)<br />Cartouches: 20 - Calibre: 7.62x67 mm NATO (Mk248 Mod 1)<br />Balas: 20 + Calibre: 7.62x67mm NATO (Mk248 Mod 1)<br />Balas: 20 Калибр: 7,62x67 мм NATO (Mk248 Mod 1)<br />Патронов: 20 + Kaliber: 7,62x51mm NATO (Mk248 Mod 1)<br />Patronen: 20 7.62mm 20Rnd Mag (Berger Hybrid OTM) @@ -952,6 +1006,7 @@ 7.62 20Cps (Berger Hybrid OTM) Cargador de 20 balas de 7.62mm (Berger Hybrid OTM) Магазин из 20-ти 7,62 мм (Berger Hybrid OTM) + 7,62mm 20-Patronen-Magazin (Berger Hybrid OTM) 7.62mm (OTM) @@ -959,20 +1014,23 @@ 7.62mm (OTM) 7.62mm (OTM) 7,62 мм (OTM) + 7,62mm (OTM) - Caliber: 7.62x67 mm NATO (Berger Hybrid OTM)<br />Rounds: 20 - Kaliber: 7,62x67 mm NATO (Berger Hybrid OTM)<br />Pociski: 20 + Caliber: 7.62x67mm NATO (Berger Hybrid OTM)<br />Rounds: 20 + Kaliber: 7,62x67mm NATO (Berger Hybrid OTM)<br />Pociski: 20 Calibre: 7.62x67mm NATO (Berger Hybrid OTM)<br />Cartouches: 20 - Calibre: 7.62x67 mm NATO (Berger Hybrid OTM)<br />Balas: 20 + Calibre: 7.62x67mm NATO (Berger Hybrid OTM)<br />Balas: 20 Калибр: 7,62x67 мм NATO (Berger Hybrid OTM)<br />Патронов: 20 + Kaliber: 7,62x67mm NATO (Berger Hybrid OTM)<br />Patronen: 20 6.5x47mm 30Rnd Mag (HPBT Scenar) 6.5x47mm 30Cps (HPBT Scenar) Cargador de 30 balas de 6.5x47mm (HPBT Scenar) - Magazynek 6,5x47 mm 30rd (HPBT Scenar) + Magazynek 6,5x47mm 30rd (HPBT Scenar) Магазин из 30-ти 6,5x47 мм (HPBT Scenar) + 6,5x47mm 30-Patronen-Magazin (HPBT Scenar) 6.5mm Lapua @@ -980,17 +1038,21 @@ 6.5mm Lapua 6,5mm Lapua 6,5 мм Lapua + 6,5mm Lapua Caliber: 6.5x47mm (HPBT Scenar)<br />Rounds: 30<br />Used in: MXM Calibre: 6.5x47mm (HPBT Scenar)<br />Cartouches: 30 Calibre: 6.5x47mm (HPBT Scenar)<br />Balas: 30<br />Se usa en: MXM - Kaliber: 6,5x47 mm (HPBT Scenar)<br />Pociski: 30 + Kaliber: 6,5x47mm (HPBT Scenar)<br />Pociski: 30 Калибр: 6,5x47 мм (HPBT Scenar)<br />Патронов: 30 + Kaliber: 6,5x47mm (HPBT Scenar)<br />Patronen: 30<br />Eingesetzt von: MXM 6.5mm Creedmor 30Rnd Mag Cargador de 30 balas de 6.5mm Creedmor + Magazynek 6,5mm Creedmor 30rd + 6,5mm Creedmor 30-Patronen-Magazin 6.5mm CM @@ -998,10 +1060,13 @@ 6.5mm CM 6,5mm CM 6,5 мм CM + 6,5mm CM - Caliber: 6.5mm Creedmor<br />Rounds: 30<br />Used in: MXM - Calibre: 6.5mm Creedmor<br />Balas: 30<br />Se usa en: MXM + Caliber: 6.5x47mm Creedmor<br />Rounds: 30<br />Used in: MXM + Calibre: 6.5x47mm Creedmor<br />Balas: 30<br />Se usa en: MXM + Kaliber: 6,5x47mm Creedmor<br />Pociski: 30<br />Używany w: MXM + Kaliber: 6,5x47mm Creedmor<br />Patronen: 30<br />Eingesetzt von: MXM .338 10Rnd Mag (300gr Sierra MatchKing HPBT) @@ -1009,20 +1074,23 @@ Cargador de 10 balas de 8.6x70mm (300gr Sierra MatchKing HPBT) Magazynek .338 10rd (300gr Sierra MatchKing HPBT) Магазин из 10-ти .338 (300 гран Sierra MatchKing HPBT) + .338 10-Patronen-Magazin (300gr Sierra MatchKing HPBT) - .338 (HPBT) - .338 (HPBT) - .338 (HPBT) - .338 (HPBT) - .338 (HPBT) + .338 HPBT + .338 HPBT + .338 HPBT + .338 HPBT + .338 HPBT + .338 HPBT Caliber: 8.6x70mm (300gr Sierra MatchKing HPBT)<br />Rounds: 10 Calibre: 8.6x70mm (300gr Sierra MatchKing HPBT)<br />Cartouches: 10 Calibre: 8.6x70mm (300gr Sierra MatchKing HPBT)<br />Balas: 10 - Kaliber: 8,6x70 mm (300gr Sierra MatchKing HPBT)<br />Pociski: 10 - Калибр: .338 (300 гран Sierra MatchKing HPBT)<br />Патронов: 10 + Kaliber: 8,6x70mm (300gr Sierra MatchKing HPBT)<br />Pociski: 10 + Калибр: 8,6x70mm (300 гран Sierra MatchKing HPBT)<br />Патронов: 10 + Kaliber: 8,6x70mm (300gr Sierra MatchKing HPBT)<br />Patronen: 10 .338 10Rnd Mag (API526) @@ -1030,6 +1098,7 @@ Cargador de 10 balas de .338 (API526) Magazynek .338 10rd (API526) Магазин из 10-ти .338 (API526) + .338 10-Patronen-Magazin (API526) .338 AP @@ -1037,20 +1106,23 @@ .338 AP .338 AP .338 бронебойные + .338 AP Caliber: 8.6x70mm (API526)<br />Rounds: 10 Calibre: 8.6x70mm (API526)<br />Cartouches: 10 Calibre: 8.6x70mm (API526)<br />Balas: 10 - Kaliber: 8,6x70 mm (API526)<br />Pociski: 10 - Калибр: .338 (API526)<br />Патронов: 10 + Kaliber: 8,6x70mm (API526)<br />Pociski: 10 + Калибр: 8,6x70mm (API526)<br />Патронов: 10 + Kaliber: 8,6x70mm (API526)<br />Patronen: 10 12.7x99mm 5Rnd Mag 12.7x99mm 5Cps Cargador de 5 balas de 12.7x99mm - Magazynek 12,7x99 mm 5rd + Magazynek 12,7x99mm 5rd Магазин из 5-ти 12,7x99 мм + 12,7x99mm 5-Patronen-Magazin 12.7mm @@ -1058,38 +1130,44 @@ 12.7mm 12,7mm 12,7 мм + 12,7mm Caliber: 12.7x99mm<br />Rounds: 5 Calibre: 12.7x99mm<br />Cartouches: 5 Calibre: 12.7x99mm<br />Balas: 5 - Kaliber: 12,7x99 mm<br />Pociski: 5 + Kaliber: 12,7x99mm<br />Pociski: 5 Калибр: 12,7x99 мм<br />Патронов: 5 + Kaliber: 12,7x99mm<br />Patronen: 5 12.7x99mm API 5Rnd Mag 12.7x99mm API 5Cps Cargador de 5 balas de 12.7x99mm API Magazynek 12,7x99mm API 5rd + 12,7x99mm 5-Patronen-Magazin (API) 12.7mm API 12.7mm API 12.7mm API 12,7mm API + 12,7mm API Caliber: 12.7x99mm API<br />Rounds: 5 Calibre: 12.7x99mm API<br />Cartouches: 5 Calibre: 12.7x99mm API<br />Balas: 5 - Kaliber: 12,7x99 mm API<br />Pociski: 5 + Kaliber: 12,7x99mm API<br />Pociski: 5 + Kaliber:12,7x99mm API<br />Patronen: 5 12.7x99mm 5Rnd Mag (AMAX) 12.7x99mm 5Rnd Mag (AMAX) Cargador de 5 balas de 12.7x99mm (AMAX) - Magazynek 12,7x99 mm 5rd (AMAX) + Magazynek 12,7x99mm 5rd (AMAX) Магазин из 5-ти 12,7x99 мм (A-MAX) + 12,7x99mm 5-Patronen-Magazin (AMAX) 12.7mm @@ -1097,13 +1175,15 @@ 12.7mm 12,7mm 12,7 мм + 12,7mm Caliber: 12.7x99mm (AMAX)<br />Rounds: 5 Calibre: 12.7x99mm (AMAX)<br />Cartouches: 5 Calibre: 12.7x99mm (AMAX)<br />Balas: 5 - Kaliber: 12,7x99 mm (AMAX)<br />Pociski: 5 + Kaliber: 12,7x99mm (AMAX)<br />Pociski: 5 Калибр: 12,7x99 мм (A-MAX)<br />Патронов: 5 + Kaliber:12,7x99mm (AMAX)<br />Patronen: 5 \ No newline at end of file diff --git a/addons/captives/CfgVehicles.hpp b/addons/captives/CfgVehicles.hpp index 10b2d0285f..1e2eb3f201 100644 --- a/addons/captives/CfgVehicles.hpp +++ b/addons/captives/CfgVehicles.hpp @@ -101,25 +101,20 @@ class CfgVehicles { #define MACRO_LOADUNLOADCAPTIVE \ class ACE_Actions { \ class ACE_MainActions { \ - selection = ""; \ - class ACE_LoadCaptive { \ + class GVAR(LoadCaptive) { \ displayName = "$STR_ACE_Captives_LoadCaptive"; \ distance = 4; \ condition = QUOTE([ARR_3(_player, objNull, _target)] call FUNC(canLoadCaptive)); \ statement = QUOTE([ARR_3(_player, objNull, _target)] call FUNC(doLoadCaptive)); \ exceptions[] = {"isNotEscorting"}; \ - showDisabled = 0; \ priority = 1.2; \ - hotkey = "L"; \ }; \ - class ACE_UnloadCaptive { \ + class GVAR(UnloadCaptive) { \ displayName = "$STR_ACE_Captives_UnloadCaptive"; \ distance = 4; \ condition = QUOTE([ARR_2(_player, _target)] call FUNC(canUnloadCaptive)); \ statement = QUOTE([ARR_2(_player, _target)] call FUNC(doUnloadCaptive)); \ - showDisabled = 0; \ priority = 1.2; \ - hotkey = "C"; \ }; \ }; \ }; diff --git a/addons/captives/functions/fnc_doEscortCaptive.sqf b/addons/captives/functions/fnc_doEscortCaptive.sqf index 08f44a1437..b8758065d8 100644 --- a/addons/captives/functions/fnc_doEscortCaptive.sqf +++ b/addons/captives/functions/fnc_doEscortCaptive.sqf @@ -22,7 +22,7 @@ PARAMS_3(_unit,_target,_state); if (_state) then { if (_unit getVariable [QGVAR(isEscorting), false]) exitWith {}; - [_unit, _target] call EFUNC(common,claim); + [_unit, _target, false] call EFUNC(common,claim); _unit setVariable [QGVAR(isEscorting), true, true]; _target attachTo [_unit, [0, 1, 0]]; @@ -34,8 +34,7 @@ if (_state) then { {[(_this select 0), ((_this select 0) getVariable [QGVAR(escortedUnit), objNull]), false] call FUNC(doEscortCaptive);}, nil, 20, false, true, "", QUOTE(!isNull (GETVAR(_target,QGVAR(escortedUnit),objNull)))]; - private "_escortFnc"; - _escortFnc = { + [{ EXPLODE_3_PVT((_this select 0),_unit,_target,_actionID); if (_unit getVariable [QGVAR(isEscorting), false]) then { if (!alive _target || {!alive _unit} || {!canStand _target} || {!canStand _unit} || {_target getVariable ["ACE_isUnconscious", false]} || {_unit getVariable ["ACE_isUnconscious", false]} || {!isNull (attachedTo _unit)}) then { @@ -45,13 +44,12 @@ if (_state) then { if (!(_unit getVariable [QGVAR(isEscorting), false])) then { [(_this select 1)] call cba_fnc_removePerFrameHandler; - [objNull, _target] call EFUNC(common,claim); + [objNull, _target, false] call EFUNC(common,claim); detach _target; _unit removeAction _actionID; _unit setVariable [QGVAR(escortedUnit), objNull, true]; }; - }; - [_escortFnc, 0, [_unit, _target, _actionID]] call CBA_fnc_addPerFrameHandler; + }, 0, [_unit, _target, _actionID]] call CBA_fnc_addPerFrameHandler; } else { _unit setVariable [QGVAR(isEscorting), false, true]; diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index de10a60893..49cdba1583 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -380,7 +380,7 @@ Set the desired location of the progress bar on your screen. Setze die gewünschte Position der Fortschrittsanzeige fest. Seleccionar la ubicación deseada de la barra de progreso en tu pantalla - Modifica la posizione su schermo della barra di avanzamento. + Modifica la posizione della barra di avanzamernto sullo schermo Установите желаемое положение строки состояния на экране. Ustaw pożądaną lokalizację paska postępu na ekranie Appliquer la position de la barre de progression sur l'écran @@ -391,7 +391,7 @@ Hint Background color Hintergrundfarbe der Hinweise Color de fondo de las notificaciones - Sfondo dei Suggerimenti + Colore di sfondo dei Suggerimenti Цвет фона всплывающих подсказок Kolor tła powiadomień Notification: couleur de l'arrière plan @@ -413,7 +413,7 @@ Hint text font color Textfarbe der Hinweise Color del texto de las notificaciones - Testo dei Suggerimenti + Il colore del Testo dei Suggerimenti Цвет шрифта всплывающих подсказок Kolor tekstu powiadomień Notification: couleur du texte @@ -424,7 +424,7 @@ The color of the text font from the ACE hints. This color is the default color for all text displayed through the ACE Hint system, if the hint text has no other color specified. Wähle die Textfarbe für ACE-Hinweise. Die gewählte Farbe wird als Standartfarbe der Hinweise angezeigt, wenn der Hinweis selbst keine spezifische Farbe hat. El color del texto de las notificaciones del ACE. Este es el color predeterminado para todo el texto que se muestra a través del sistema de notificaciones del ACE, si el texto de notificación no tiene otro color especificado. - Il colore del testo dei suggerimenti dell'ACE. Questo è il colore standard per tutti i caratteri mostrati dal sistema di suggerimenti dell'ACE, se questo non è altrimenti specificato. + Il colore del testo dei suggerimenti dell'ACE. Questo è il colore standard per tutti i caratteri mostrati dal sistema di suggerimenti dell'ACE, se il colore del testo non è specificato. Цвет шрифта текста всплывающих подсказок АСЕ. Этот цвет является стандартным для всего текста, транслирующегося через систему подсказок АСЕ, если не установлено другого цвета для текста подсказок. Kolor tekstu dla powiadomień ACE. Ten kolor jest domyślnym dla wszystkich tekstów wyświetlanych poprzez System Powiadomień ACE, jeżeli dla powiadomienia nie określono innego koloru. Notification ACE: couleur du texte. C'est la couleur par défaut de tout texte affiché dans les notifications ACE, si aucune couleur n'est spécifiée pour les notifications @@ -447,7 +447,7 @@ Die Bananen (Musa) sind eine Pflanzengattung in der Familie der Bananengewächse (Musaceae) innerhalb der Einkeimblättrigen Pflanzen (Monokotyledonen). Una banana es una fruta comestible, botanicamente una baya, producida por varios tipos de grandes plantas herbáceas del género Musa. Banán je protáhlé ovoce a plod banánovníku (epigeická bobule). - Una banana è un frutto commestibile, nello specifico una bacca cuoiosa, prodotto da un gran numero di grandi pianti erbacee dotate di fiori, della famiglia delle Musaceae. + Una banana è un frutto commestibile, nello specifico una bacca cuoiosa, prodotta da un gran numero di grandi piante erbacee dotate di fiori, della famiglia delle Musaceae. Банан - это съедобный фрукт, ягода с ботанической точки зрения, произрастающий на нескольких видах травянистых растениях рода Банан (Musa). A banán egy ehető gyümölcs, technikai szempontból bogyótermés, melyet több fürtvirágzatú növény termel a Musa rendszertani nemzetségben. Rodzaj roślin z rodziny bananowatych, obejmujący około 80 gatunków.<br />Przedstawiciele są typowymi przedstawicielami flory międzyzwrotnikowej Azji, Afryki i Australii.<br />Część gatunków dostarcza jadalnych owoców. Słowo banan pochodzi prawdopodobnie od arabskiego słowa banan, co oznacza palec, lub afrykańskiego języka wolof, w którym rośliny te określa się mianem banaana. diff --git a/addons/dragging/stringtable.xml b/addons/dragging/stringtable.xml index 990f91144e..3cb27e7984 100644 --- a/addons/dragging/stringtable.xml +++ b/addons/dragging/stringtable.xml @@ -7,7 +7,7 @@ Arrastrar Ciągnij Táhnout - Tracter + Trainer Ziehen Arrastar Trascina diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml index 7071de32a5..5b70e94987 100644 --- a/addons/explosives/stringtable.xml +++ b/addons/explosives/stringtable.xml @@ -42,7 +42,7 @@ Sprengstoffcode: %1 Código del explosivo: %1 Kod ładunku: %1 - Code explosif: %1 + Code de l'explosif: %1 Kód výbušniny: %1 Robbanóanyag kódja: %1 Código do explosivo: %1 @@ -222,7 +222,7 @@ Löschen Borrar Usuń - Désamorçé + Effacer Čistý Libera Törlés @@ -478,6 +478,7 @@ Detonador de hombre muerto Dead Man's Switch Кнопка мертвеца + Detonatore a rilascio Used to remotely trigger explosives when released. @@ -488,7 +489,7 @@ Utilizado para detonar explosivos remotamente al soltarlo. Robbanóanyagok távoli robbantásához való, elengedéskor gyújt. Используется для дистанционного подрыва, после смерти оператора. - Usato per attivare esplosivi quando rilasciato + Usato per attivare esplosivi al momento del rilascio Pick up diff --git a/addons/fcs/stringtable.xml b/addons/fcs/stringtable.xml index 6c785ae47b..d6f622b1f9 100644 --- a/addons/fcs/stringtable.xml +++ b/addons/fcs/stringtable.xml @@ -10,6 +10,7 @@ Iluminar objetivo / Medir distancia Подсветить цель / Замерить расстояние Célpont lézerezése / Távolság Bemérése + Misura la distanza Zeroed To diff --git a/addons/flashsuppressors/stringtable.xml b/addons/flashsuppressors/stringtable.xml index a806ba8fa6..75641b8e01 100644 --- a/addons/flashsuppressors/stringtable.xml +++ b/addons/flashsuppressors/stringtable.xml @@ -1,5 +1,4 @@  - diff --git a/addons/frag/CfgAmmo.hpp b/addons/frag/CfgAmmo.hpp index 94b4e5dbb6..3cfb27dfaf 100644 --- a/addons/frag/CfgAmmo.hpp +++ b/addons/frag/CfgAmmo.hpp @@ -6,109 +6,137 @@ class CfgAmmo { //class ace_arty_105mm_m1_m782_time; //class ace_arty_105mm_m1_m782_prox: ace_arty_105mm_m1_m782_time {}; //class ace_arty_105mm_m1_m782_delay: ace_arty_105mm_m1_m782_prox { - // ACE_FRAG_SKIP = 1; + // GVAR(skip) = 1; //}; class Bo_GBU12_LGB; class Nou_GBU12 : Bo_GBU12_LGB { - ACE_FRAG_CLASSES[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"}; - ACE_FRAG_METAL = 140000; - ACE_FRAG_CHARGE = 87000; - ACE_FRAG_GURNEY_C = 2320; - ACE_FRAG_GURNEY_K = 1/2; + GVAR(classes)[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"}; + GVAR(metal) = 140000; + GVAR(charge) = 87000; + GVAR(gurney_c) = 2320; + GVAR(gurney_k) = 1/2; sideAirFriction = 0.04; airFriction = 0.04; laserLock = 0; }; - + class GrenadeBase; class Grenade; class GrenadeHand: Grenade { - ACE_FRAG_SKIP = 0; - ACE_FRAG_FORCE = 1; + GVAR(skip) = 0; + GVAR(force) = 1; // This is a good high-drag frag type for grenades. - ACE_FRAG_CLASSES[] = {"ACE_frag_tiny_HD"}; + GVAR(classes)[] = {"ACE_frag_tiny_HD"}; /* These values are based on the M67 Grenade, should be tweaked for individual grenades. */ - ACE_FRAG_METAL = 210; // metal in grams - ACE_FRAG_CHARGE = 185; // explosive in grams - ACE_FRAG_GURNEY_C = 2843; // Gurney velocity constant for explosive type. See: http://en.wikipedia.org/wiki/Gurney_equations - ACE_FRAG_GURNEY_K = 3/5; // Gurney shape factor, in this case a sphere. See: http://en.wikipedia.org/wiki/Gurney_equations + GVAR(metal) = 210; // metal in grams + GVAR(charge) = 185; // explosive in grams + GVAR(gurney_c) = 2843; // Gurney velocity constant for explosive type. See: http://en.wikipedia.org/wiki/Gurney_equations + GVAR(gurney_k) = 3/5; // Gurney shape factor, in this case a sphere. See: http://en.wikipedia.org/wiki/Gurney_equations }; class GrenadeHand_stone: GrenadeHand { - ACE_FRAG_SKIP = 1; + GVAR(skip) = 1; }; class SmokeShell: GrenadeHand { - ACE_FRAG_SKIP = 1; + GVAR(skip) = 1; }; - + class RocketBase; //class R_Hydra_HE: RocketBase { - // ACE_FRAG_SKIP = 1; + // GVAR(skip) = 1; //}; - + //class R_57mm_HE: RocketBase { - // ACE_FRAG_SKIP = 1; + // GVAR(skip) = 1; //}; - + class R_80mm_HE: RocketBase { - ACE_FRAG_SKIP = 1; + GVAR(skip) = 1; }; - + //class R_S8T_AT: RocketBase { - // ACE_FRAG_SKIP = 1; + // GVAR(skip) = 1; //}; - + class BombCore; class Bo_Mk82: BombCore { - ACE_FRAG_CLASSES[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"}; - ACE_FRAG_METAL = 140000; - ACE_FRAG_CHARGE = 87000; - ACE_FRAG_GURNEY_C = 2320; - ACE_FRAG_GURNEY_K = 1/2; + GVAR(classes)[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"}; + GVAR(metal) = 140000; + GVAR(charge) = 87000; + GVAR(gurney_c) = 2320; + GVAR(gurney_k) = 1/2; }; - - + + class G_40mm_HE: GrenadeBase { - ACE_FRAG_SKIP = 0; - ACE_FRAG_FORCE = 1; + GVAR(skip) = 0; + GVAR(force) = 1; }; - + class ACE_G_40mm_HEDP: G_40mm_HE { - ACE_FRAG_CLASSES[] = {"ACE_frag_tiny_HD"}; - ACE_FRAG_METAL = 200; - ACE_FRAG_CHARGE = 45; - ACE_FRAG_GURNEY_C = 2830; - ACE_FRAG_GURNEY_K = 3/5; + GVAR(classes)[] = {"ACE_frag_tiny_HD"}; + GVAR(metal) = 200; + GVAR(charge) = 45; + GVAR(gurney_c) = 2830; + GVAR(gurney_k) = 3/5; }; class ACE_G_40mm_HE: ACE_G_40mm_HEDP { - ACE_FRAG_CLASSES[] = {"ACE_frag_tiny_HD"}; - ACE_FRAG_METAL = 200; - ACE_FRAG_CHARGE = 32; - ACE_FRAG_GURNEY_C = 2700; - ACE_FRAG_GURNEY_K = 3/5; + GVAR(classes)[] = {"ACE_frag_tiny_HD"}; + GVAR(metal) = 200; + GVAR(charge) = 32; + GVAR(gurney_c) = 2700; + GVAR(gurney_k) = 3/5; }; class ACE_G_40mm_Practice: ACE_G_40mm_HE { - ACE_FRAG_SKIP = 1; + GVAR(skip) = 1; }; class ACE_G40mm_HE_VOG25P: G_40mm_HE { - ACE_FRAG_SKIP = 0; - ACE_FRAG_FORCE = 1; + GVAR(skip) = 0; + GVAR(force) = 1; }; - + + // curator ammo entries + class Sh_82mm_AMOS; + class ModuleOrdnanceMortar_F_Ammo: Sh_82mm_AMOS { + GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"}; + GVAR(metal) = 800; + GVAR(charge) = 4200; + GVAR(gurney_c) = 2320; + GVAR(gurney_k) = 1/2; + }; + + class Sh_155mm_AMOS; + class ModuleOrdnanceHowitzer_F_ammo: Sh_155mm_AMOS { + GVAR(classes)[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"}; + GVAR(metal) = 1950; + GVAR(charge) = 15800; + GVAR(gurney_c) = 2320; + GVAR(gurney_k) = 1/2; + }; + + //class R_230mm_HE; + //class ModuleOrdnanceRocket_F_ammo: R_230mm_HE { + //}; + + //class R_230mm_fly; + //class ModuleOrdnanceRocket_F_subammo: R_230mm_fly { + //}; + // end of curator ammo entries + //class R_SMAW_HEDP; //class R_MEEWS_HEDP : R_SMAW_HEDP { - // ACE_FRAG_FORCE = 1; - // ACE_FRAG_MULTIPLIER = 1.2; + // GVAR(force) = 1; + // GVAR(multiplier) = 1.2; //}; - + //class MissileBase; //class M_Hellfire_AT: MissileBase { - // ACE_FRAG_FORCE = 1; - // ACE_FRAG_MULTIPLIER = 1.75; + // GVAR(force) = 1; + // GVAR(multiplier) = 1.75; //}; - + /* class B_762x51_Ball; class ACE_frag_base: B_762x51_Ball { ////TODO: B_762x45_Ball no longer exists, is this a valid replacement? @@ -263,51 +291,51 @@ class CfgAmmo { bulletFly8[] = {"A3\sounds_f\weapons\hits\bullet_by_8.wav",1,1,35}; bulletFly[] = {"bulletFly1",0.166,"bulletFly2",0.166,"bulletFly3",0.166,"bulletFly4",0.166,"bulletFly5",0.166,"bulletFly6",0.167,"bulletFly7",0.166,"bulletFly8",0.167}; supersonicCrackNear[] = {"A3\sounds_f\weapons\hits\sscrack1.wav",1,1,35}; - supersonicCrackFar[] = {"A3\sounds_f\weapons\hits\sscrack2.wav",1,1,135}; + supersonicCrackFar[] = {"A3\sounds_f\weapons\hits\sscrack2.wav",1,1,135}; }; */ - + class B_65x39_Caseless; class ACE_frag_base: B_65x39_Caseless { timeToLive = 12; typicalSpeed = 1500; deflecting = 65; }; - + class ACE_frag_tiny: ACE_frag_base { hit = 6; airFriction = BASE_DRAG; caliber = 0.75; }; - + class ACE_frag_tiny_HD: ACE_frag_base { hit = 6; airFriction = BASE_DRAG_HD; caliber = 0.75; }; - + class ACE_frag_small: ACE_frag_base { hit = 12; airFriction = BASE_DRAG*0.9; }; - + class ACE_frag_small_HD: ACE_frag_base { hit = 12; airFriction = BASE_DRAG_HD*0.9; }; - + class ACE_frag_medium: ACE_frag_base { hit = 14; airFriction = BASE_DRAG*0.75; caliber = 1.2; }; - + class ACE_frag_medium_HD: ACE_frag_base { hit = 14; airFriction = BASE_DRAG_HD*0.75; caliber = 1.2; }; - + class ACE_frag_large: ACE_frag_base { hit = 28; indirectHit = 2; @@ -315,19 +343,19 @@ class CfgAmmo { airFriction = BASE_DRAG*0.65; caliber = 2; explosive = 0; - + }; - + class ACE_frag_large_HD: ACE_frag_large { hit = 28; indirectHit = 2; indirectHitRange = 0.25; airFriction = BASE_DRAG_HD*0.65; caliber = 2; - - + + }; - + class ACE_frag_huge: ACE_frag_large { hit = 40; indirectHit = 4; @@ -335,7 +363,7 @@ class CfgAmmo { airFriction = BASE_DRAG*0.5; caliber = 2.8; }; - + class ACE_frag_huge_HD: ACE_frag_large { hit = 40; indirectHit = 4; @@ -343,19 +371,19 @@ class CfgAmmo { airFriction = BASE_DRAG_HD*0.5; caliber = 2.8; }; - + class ACE_frag_spall_small: ACE_frag_small { timeToLive = 0.1; }; - + class ACE_frag_spall_medium: ACE_frag_medium { timeToLive = 0.15; }; - + class ACE_frag_spall_large: ACE_frag_large { timeToLive = 0.25; }; - + class ACE_frag_spall_huge: ACE_frag_huge { timeToLive = 0.3; }; diff --git a/addons/frag/XEH_pre_Init.sqf b/addons/frag/XEH_pre_Init.sqf index 5b3aa36b18..5fb261cc05 100644 --- a/addons/frag/XEH_pre_Init.sqf +++ b/addons/frag/XEH_pre_Init.sqf @@ -26,6 +26,9 @@ GVAR(tracesStarted) = false; GVAR(traceID) = -1; GVAR(autoTrace) = true; +// TODO setting +GVAR(enabled) = true; + // * Other Shit */ PREP(frag_trace); diff --git a/addons/frag/functions/fnc_doSpall.sqf b/addons/frag/functions/fnc_doSpall.sqf index 761490fa90..cb54cb776b 100644 --- a/addons/frag/functions/fnc_doSpall.sqf +++ b/addons/frag/functions/fnc_doSpall.sqf @@ -3,11 +3,11 @@ #ifdef DEBUG_MODE_FULL GVAR(traceFrags) = true; #endif -// player sideChat "WAAAAAAAAAAAAAAAAAAAAA"; -private ["_params", "_initialData", "_hpData", "_roundType", "_round", "_object", "_caliber", "_explosive", - "_idh", "_alive", "_exit", "_vm", "_velocity", "_unitDir", "_oldVelocity", "_curVelocity", "_diff", "_polar", - "_pos", "_spallPos", "_i", "_pos1", "_pos2", "_blah", "_data", "_spallPolar", "_c", "_warn", "_m", "_k", - "_gC", "_shellType", "_fragPower", "_spread", "_spallCount", "_elev", "_dir", "_vel", "_spallFragVect", +// ACE_player sideChat "WAAAAAAAAAAAAAAAAAAAAA"; +private ["_params", "_initialData", "_hpData", "_roundType", "_round", "_object", "_caliber", "_explosive", + "_idh", "_alive", "_exit", "_vm", "_velocity", "_unitDir", "_oldVelocity", "_curVelocity", "_diff", "_polar", + "_pos", "_spallPos", "_i", "_pos1", "_pos2", "_blah", "_data", "_spallPolar", "_c", "_warn", "_m", "_k", + "_gC", "_shellType", "_fragPower", "_spread", "_spallCount", "_elev", "_dir", "_vel", "_spallFragVect", "_fragment"]; @@ -40,21 +40,21 @@ if(!alive _round && (_initialData select 6) == 1) then { }; if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then { - // player sideChat format["BBBB"]; + // ACE_player sideChat format["BBBB"]; _exit = false; _vm = 1; _velocity = _initialData select 5; - + _oldVelocity = _velocity call BIS_fnc_magnitude; _curVelocity = (velocity _round) call BIS_fnc_magnitude; - + if(alive _round) then { _diff = _velocity vectorDiff (velocity _round); _polar = _diff call CBA_fnc_vect2polar; - // player sideChat format["polar: %1", _polar]; + // ACE_player sideChat format["polar: %1", _polar]; if((abs(_polar select 1) > 45 || abs(_polar select 2) > 45)) then { if(_caliber < 2.5) then { - // player sideChat format["exit!"]; + // ACE_player sideChat format["exit!"]; _exit = true; } else { _vm = 1-(_curVelocity/_oldVelocity); @@ -78,20 +78,20 @@ if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then { ]; // _blah = [_object, "FIRE"] intersect [_object worldToModel (ASLtoATL _pos1), _object worldToModel (ASLtoATL _pos2)]; // diag_log text format["b: %1", _blah]; - + // _data = [nil, nil, nil, 1, [[ASLtoATL _pos1, 1], [ASLtoATL _pos2, 1]]]; // NOU_TRACES set[(count NOU_TRACES), _data]; - + if(!lineIntersects [_pos1, _pos2]) exitWith { - // player sideChat format["FOUND!"]; + // ACE_player sideChat format["FOUND!"]; _spallPos = _pos2; }; }; if(!isNil "_spallPos") then { _spallPolar = _velocity call CBA_fnc_vect2polar; - + if(_explosive > 0) then { - // player sideChat format["EXPLOSIVE!"]; + // ACE_player sideChat format["EXPLOSIVE!"]; _warn = false; _c = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_CHARGE"); if(_c == 0) then { _c = 1; _warn = true;}; @@ -109,7 +109,7 @@ if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then { _fragPower = (((_m/_c)+_k)^-(1/2))*_gC; _spallPolar set[0, _fragPower*0.66]; }; - + _fragTypes = [ "ACE_frag_spall_small", "ACE_frag_spall_small", "ACE_frag_spall_small", "ACE_frag_spall_small","ACE_frag_spall_medium","ACE_frag_spall_medium","ACE_frag_spall_medium", @@ -117,7 +117,7 @@ if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then { "ACE_frag_spall_huge" ]; - + // diag_log text format["SPALL POWER: %1", _spallPolar select 0]; _spread = 15+(random 25); _spallCount = 5+(random 10); @@ -130,14 +130,14 @@ if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then { _dir = _dir % 360; _vel = (_spallPolar select 0)*0.33*_vm; _vel = (_vel-(_vel*0.25))+(random (_vel*0.5)); - + _spallFragVect = [_vel, _dir, _elev] call CBA_fnc_polar2vect; _fragType = round (random ((count _fragTypes)-1)); _fragment = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; _fragment setPosASL _spallPos; _fragment setVelocity _spallFragVect; if(GVAR(traceFrags)) then { - [player, _fragment, [1,0.5,0,1]] call FUNC(addTrack); + [ACE_player, _fragment, [1,0.5,0,1]] call FUNC(addTrack); }; }; _spread = 5+(random 5); @@ -151,14 +151,14 @@ if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then { _dir = _dir % 360; _vel = (_spallPolar select 0)*0.55*_vm; _vel = (_vel-(_vel*0.25))+(random (_vel*0.5)); - + _spallFragVect = [_vel, _dir, _elev] call CBA_fnc_polar2vect; _fragType = round (random ((count _fragTypes)-1)); _fragment = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; _fragment setPosASL _spallPos; _fragment setVelocity _spallFragVect; if(GVAR(traceFrags)) then { - [player, _fragment, [1,0,0,1]] call FUNC(addTrack); + [ACE_player, _fragment, [1,0,0,1]] call FUNC(addTrack); }; }; }; diff --git a/addons/frag/functions/fnc_fired.sqf b/addons/frag/functions/fnc_fired.sqf index e7d7d09682..85f5f45c0a 100644 --- a/addons/frag/functions/fnc_fired.sqf +++ b/addons/frag/functions/fnc_fired.sqf @@ -1,6 +1,6 @@ #include "script_component.hpp" private ["_gun", "_type", "_round", "_doFragTrack", "_doSpall"]; -if !(isNil QGVAR(enabled) && {GVAR(enabled)}) exitWith {}; +if !(!isNil QGVAR(enabled) && {GVAR(enabled)}) exitWith {}; _gun = _this select 0; _type = _this select 4; @@ -11,10 +11,10 @@ if(_round in GVAR(blackList)) exitWith { }; _doFragTrack = false; -if(_gun == player) then { +if(_gun == ACE_player) then { _doFragTrack = true; } else { - if((gunner _gun) == player) then { + if((gunner _gun) == ACE_player) then { _doFragTrack = true; } else { if(local _gun && {!(isPlayer (gunner _gun))} && {!(isPlayer _gun)}) then { @@ -28,14 +28,18 @@ if(_doSpall) then { GVAR(spallHPData) = []; }; if(GVAR(spallIsTrackingCount) > 5) then { - // player sideChat "LIMT!"; + // ACE_player sideChat "LIMT!"; _doSpall = false; } else { GVAR(spallIsTrackingCount) = GVAR(spallIsTrackingCount) + 1; }; }; -// player sideChat format["c: %1", GVAR(spallIsTrackingCount)]; -[player, _round, [1,0,0,1]] call nou_fnc_addTrack; +// ACE_player sideChat format["c: %1", GVAR(spallIsTrackingCount)]; + +#ifdef DEBUG_MODE_FULL +[ACE_player, _round, [1,0,0,1]] call FUNC(addTrack); +#endif + if(_doFragTrack && alive _round) then { GVAR(trackedObjects) pushBack _round; _spallTrack = []; @@ -44,5 +48,5 @@ if(_doFragTrack && alive _round) then { if(_doSpall) then { [_round, 2, _spallTrack, _spallTrackID] call FUNC(spallTrack); }; - // player sideChat "WTF2"; + // ACE_player sideChat "WTF2"; }; diff --git a/addons/frag/functions/fnc_frago.sqf b/addons/frag/functions/fnc_frago.sqf index 1b737dc70d..a396de04e8 100644 --- a/addons/frag/functions/fnc_frago.sqf +++ b/addons/frag/functions/fnc_frago.sqf @@ -9,14 +9,14 @@ if(!isServer) exitWith { }; // _startTime = diag_tickTime; -private ["_round", "_lastPos", "_lastVel", "_shellType", "_gun", "_fragTypes", "_warn", "_atlPos", "_isArmed", - "_fuseDist", "_indirectHitRange", "_fragRange", "_c", "_m", "_k", "_gC", "_fragPower", "_fragPowerRandom", - "_manObjects", "_objects", "_crew", "_fragCount", "_fragArcs", "_doRandom", "_target", "_boundingBox", - "_targetPos", "_distance", "_add", "_bbX", "_bbY", "_bbZ", "_cubic", "_targetVel", "_baseVec", "_dir", - "_currentCount", "_count", "_vecVar", "_i", "_vec", "_fp", "_vel", "_fragType", "_fragObj", "_randomCount", +private ["_round", "_lastPos", "_lastVel", "_shellType", "_gun", "_fragTypes", "_warn", "_atlPos", "_isArmed", + "_fuseDist", "_indirectHitRange", "_fragRange", "_c", "_m", "_k", "_gC", "_fragPower", "_fragPowerRandom", + "_manObjects", "_objects", "_crew", "_fragCount", "_fragArcs", "_doRandom", "_target", "_boundingBox", + "_targetPos", "_distance", "_add", "_bbX", "_bbY", "_bbZ", "_cubic", "_targetVel", "_baseVec", "_dir", + "_currentCount", "_count", "_vecVar", "_i", "_vec", "_fp", "_vel", "_fragType", "_fragObj", "_randomCount", "_sectorSize", "_sectorOffset", "_randomDir"]; - - + + _round = _this select 0; _lastPos = _this select 1; _lastVel = _this select 2; @@ -108,8 +108,8 @@ _fragArcs = []; _fragArcs set[360, 0]; #ifdef DEBUG_MODE_FULL - player sideChat format["_fragRange: %1", _fragRange]; - player sideChat format["_objects: %1", _objects]; + ACE_player sideChat format["_fragRange: %1", _fragRange]; + ACE_player sideChat format["_objects: %1", _objects]; #endif _doRandom = false; if(_isArmed && (count _objects) > 0) then { @@ -127,16 +127,16 @@ if(_isArmed && (count _objects) > 0) then { _cubic = _bbX*_bbY*_bbZ; if(_cubic > 1) then { _doRandom = true; - + _targetVel = (velocity _target); - - + + _targetPos set[0, (_targetPos select 0)+((_targetVel select 0)*(_distance/_fragPower))]; _targetPos set[1, (_targetPos select 1)+((_targetVel select 1)*(_distance/_fragPower))]; _targetPos set[2, (_targetPos select 2)+_add]; - + _baseVec = _lastPos vectorFromTo _targetPos; - + _dir = floor(_baseVec call CBA_fnc_vectDir); _currentCount = _fragArcs select _dir; if(isNil "_currentCount") then { @@ -153,18 +153,18 @@ if(_isArmed && (count _objects) > 0) then { }; for "_i" from 1 to _count do { _vec = +_baseVec; - + _vec set[0, (_vec select 0)-(_vecVar/2)+(random _vecVar)]; _vec set[1, (_vec select 1)-(_vecVar/2)+(random _vecVar)]; _vec set[2, (_vec select 2)-(_vecVar/2)+(random _vecVar)]; - + _fp = (_fragPower-(random (_fragPowerRandom))); _vel = [ (_vec select 0)*_fp, (_vec select 1)*_fp, (_vec select 2)*_fp ]; - + _fragType = round (random ((count _fragTypes)-1)); _fragObj = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; // diag_log text format["fp: %1 %2", _fp, typeOf _fragObj]; @@ -176,7 +176,7 @@ if(_isArmed && (count _objects) > 0) then { GVAR(traceFrags) = true; #endif if(GVAR(traceFrags)) then { - [player, _fragObj, [1,0,0,1]] call FUNC(addTrack); + [ACE_player, _fragObj, [1,0,0,1]] call FUNC(addTrack); }; _fragCount = _fragCount + 1; _currentCount = _currentCount + 1; @@ -198,15 +198,15 @@ if(_isArmed && (count _objects) > 0) then { _sectorOffset = 360 * (_i - 1) / (_randomCount max 1); _randomDir = random(_sectorSize); _vec = [cos(_sectorOffset + _randomDir), sin(_sectorOffset + _randomDir), sin(30 - (random 45))]; - + _fp = (_fragPower-(random (_fragPowerRandom))); - + _vel = [ (_vec select 0)*_fp, (_vec select 1)*_fp, (_vec select 2)*_fp ]; - + _fragType = round (random ((count _fragTypes)-1)); _fragObj = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; _fragObj setPosASL _lastPos; @@ -217,14 +217,14 @@ if(_isArmed && (count _objects) > 0) then { GVAR(traceFrags) = true; #endif if(GVAR(traceFrags)) then { - [player, _fragObj, [1,0.5,0,1]] call FUNC(addTrack); + [ACE_player, _fragObj, [1,0.5,0,1]] call FUNC(addTrack); }; _fragCount = _fragCount + 1; }; }; }; // #ifdef DEBUG_MODE_FULL - // player sideChat format["total frags: %1", GVAR(TOTALFRAGS)]; - // player sideChat format["tracks: %1", (count GVAR(trackedObjects))]; + // ACE_player sideChat format["total frags: %1", GVAR(TOTALFRAGS)]; + // ACE_player sideChat format["tracks: %1", (count GVAR(trackedObjects))]; // #endif // _endTime = diag_tickTime; diff --git a/addons/frag/functions/fnc_trackFragRound.sqf b/addons/frag/functions/fnc_trackFragRound.sqf index 586bbc0166..4358448188 100644 --- a/addons/frag/functions/fnc_trackFragRound.sqf +++ b/addons/frag/functions/fnc_trackFragRound.sqf @@ -15,11 +15,11 @@ if (!alive _round) then { [_this select 1] call cba_fnc_removePerFrameHandler; if(_time != time && {_round in GVAR(trackedObjects)} && {!(_round in GVAR(blackList))}) then { GVAR(trackedObjects) = GVAR(trackedObjects) - [_round]; - _skip = getNumber (configFile >> "CfgAmmo" >> _type >> "ACE_FRAG_SKIP"); + _skip = getNumber (configFile >> "CfgAmmo" >> _type >> QGVAR(skip)); if(_skip == 0) then { _explosive = getNumber (configFile >> "CfgAmmo" >> _type >> "explosive"); _indirectRange = getNumber (configFile >> "CfgAmmo" >> _type >> "indirectHitRange"); - _force = getNumber (configFile >> "CfgAmmo" >> _type >> "ACE_FRAG_FORCE"); + _force = getNumber (configFile >> "CfgAmmo" >> _type >> QGVAR(force)); _fragPower = getNumber(configFile >> "CfgAmmo" >> _type >> "indirecthit")*(sqrt(_indirectRange)); if((_explosive > 0.5 && {_indirectRange >= 4.5} && {_fragPower >= 35}) || {_force == 1} ) then { [QGVAR(frag_eh), _params] call ace_common_fnc_serverEvent; diff --git a/addons/goggles/stringtable.xml b/addons/goggles/stringtable.xml index 16fd227b11..ce337760d7 100644 --- a/addons/goggles/stringtable.xml +++ b/addons/goggles/stringtable.xml @@ -1,5 +1,4 @@  - diff --git a/addons/grenades/CfgAmmo.hpp b/addons/grenades/CfgAmmo.hpp index 0f86230784..0c74f33940 100644 --- a/addons/grenades/CfgAmmo.hpp +++ b/addons/grenades/CfgAmmo.hpp @@ -82,7 +82,7 @@ class CfgAmmo { SmokeShellSoundHit3[] = {"A3\Sounds_F\weapons\smokeshell\smoke_3",1.25893,1,100}; SmokeShellSoundLoop1[] = {"A3\Sounds_F\weapons\smokeshell\smoke_loop1",0.125893,1,70}; SmokeShellSoundLoop2[] = {"A3\Sounds_F\weapons\smokeshell\smoke_loop2",0.125893,1,70}; - timeToLive = 60; + timeToLive = 6; fuseDistance = 2.3; model = PATHTOF(models\ACE_m84_thrown.p3d); }; diff --git a/addons/grenades/functions/fnc_flashbangExplosionEH.sqf b/addons/grenades/functions/fnc_flashbangExplosionEH.sqf index 67fb2ded9c..9be24bcc47 100644 --- a/addons/grenades/functions/fnc_flashbangExplosionEH.sqf +++ b/addons/grenades/functions/fnc_flashbangExplosionEH.sqf @@ -56,7 +56,7 @@ _affected = _grenade nearEntities ["CAManBase", 20]; }; } forEach [[0,0,0], [0,0,0.2], [0.1, 0.1, 0.1], [-0.1, -0.1, 0.1]]; TRACE_1("Line of sight count (out of 4)",_losCount); - if (_losCount == 0) then { + if (_losCount <= 1) then { _strength = _strength / 10; }; diff --git a/addons/grenades/stringtable.xml b/addons/grenades/stringtable.xml index b5c3a6a35b..b4dccdf587 100644 --- a/addons/grenades/stringtable.xml +++ b/addons/grenades/stringtable.xml @@ -1,5 +1,4 @@  - diff --git a/addons/hearing/CfgEventHandlers.hpp b/addons/hearing/CfgEventHandlers.hpp index 94b1ab0703..ce968ed2ca 100644 --- a/addons/hearing/CfgEventHandlers.hpp +++ b/addons/hearing/CfgEventHandlers.hpp @@ -1,4 +1,3 @@ - class Extended_PreInit_EventHandlers { class ADDON { init = QUOTE(call COMPILE_FILE(XEH_preInit) ); @@ -20,9 +19,9 @@ class Extended_Init_EventHandlers { }; class Extended_FiredNear_EventHandlers { - class CAManBase { + class AllVehicles { class GVAR(FiredNear) { - clientFiredNear = QUOTE( if (GVAR(enableCombatDeafness) && {_this select 0 == ACE_player}) then {_this call FUNC(firedNear)}; ); + clientFiredNear = QUOTE(_this call FUNC(firedNear);); }; }; }; diff --git a/addons/hearing/XEH_postInit.sqf b/addons/hearing/XEH_postInit.sqf index adb7827ce7..7b584f8397 100644 --- a/addons/hearing/XEH_postInit.sqf +++ b/addons/hearing/XEH_postInit.sqf @@ -1,7 +1,14 @@ #include "script_component.hpp" +if (!hasInterface) exitWith {}; + GVAR(currentDeafness) = 0; GVAR(newStrength) = 0; +GVAR(playerVehAttenuation) = 1; // Spawn volume updating process [FUNC(updateVolume), 0.1, [] ] call CBA_fnc_addPerFrameHandler; + +//Update veh attunation when player veh changes +["playerVehicleChanged", {_this call FUNC(updatePlayerVehAttenuation);}] call EFUNC(common,addEventHandler); +["playerTurretChanged", {_this call FUNC(updatePlayerVehAttenuation);}] call EFUNC(common,addEventHandler); diff --git a/addons/hearing/XEH_preInit.sqf b/addons/hearing/XEH_preInit.sqf index 0785a32aff..16b9f35f80 100644 --- a/addons/hearing/XEH_preInit.sqf +++ b/addons/hearing/XEH_preInit.sqf @@ -10,6 +10,7 @@ PREP(hasEarPlugsIn); PREP(moduleHearing); PREP(putInEarPlugs); PREP(removeEarPlugs); +PREP(updatePlayerVehAttenuation); PREP(updateVolume); ADDON = true; diff --git a/addons/hearing/functions/fnc_firedNear.sqf b/addons/hearing/functions/fnc_firedNear.sqf index 7e9472e72a..6a603c3c3a 100644 --- a/addons/hearing/functions/fnc_firedNear.sqf +++ b/addons/hearing/functions/fnc_firedNear.sqf @@ -21,18 +21,19 @@ */ #include "script_component.hpp" -private ["_unit", "_firer", "_distance", "_weapon", "_muzzle", "_mode", "_ammo", "_silencer", "_audibleFireCoef", "_loudness", "_strength", "_audibleFire", "_audibleFireTime", "_audibleFireTimeCoef"]; +private ["_silencer", "_audibleFireCoef", "_loudness", "_strength", "_vehAttenuation"]; -_unit = _this select 0; -_firer = _this select 1; -_distance = (_this select 2) max 1; -_weapon = _this select 3; -_muzzle = _this select 4; -_mode = _this select 5; -_ammo = _this select 6; +PARAMS_7(_object,_firer,_distance,_weapon,_muzzle,_mode,_ammo); -if (toLower _weapon in ["throw", "put"]) exitWith {}; -if (_unit != vehicle _unit && {!([_unit] call EFUNC(common,isTurnedOut))}) exitWith {}; +//Only run if combatDeafness enabled: +if (!GVAR(enableCombatDeafness)) exitWith {}; +//Only run if firedNear object is player or player's vehicle: +if ((ACE_player != _object) && {(vehicle ACE_player) != _object}) exitWith {}; +if (_weapon in ["Throw", "Put"]) exitWith {}; + +_vehAttenuation = if ((ACE_player == (vehicle ACE_player)) || {isTurnedOut ACE_player}) then {1} else {GVAR(playerVehAttenuation)}; + +if (_distance < 1) then {_distance = 1;}; _silencer = switch (_weapon) do { case (primaryWeapon _firer) : {(primaryWeaponItems _firer) select 0}; @@ -42,18 +43,15 @@ _silencer = switch (_weapon) do { }; _audibleFireCoef = 1; -//_audibleFireTimeCoef = 1; if (_silencer != "") then { _audibleFireCoef = getNumber (configFile >> "CfgWeapons" >> _silencer >> "ItemInfo" >> "AmmoCoef" >> "audibleFire"); - //_audibleFireTimeCoef = getNumber (configFile >> "CfgWeapons" >> _silencer >> "ItemInfo" >> "AmmoCoef" >> "audibleFireTime"); }; _audibleFire = getNumber (configFile >> "CfgAmmo" >> _ammo >> "audibleFire"); -//_audibleFireTime = getNumber (configFile >> "CfgAmmo" >> _ammo >> "audibleFireTime"); _loudness = _audibleFireCoef * _audibleFire / 64; -_strength = _loudness - (_loudness/50 * _distance); // linear drop off +_strength = _vehAttenuation * (_loudness - (_loudness/50 * _distance)); // linear drop off if (_strength < 0.01) exitWith {}; -[{_this call FUNC(earRinging)}, [_unit, _strength], 0.2, 0] call EFUNC(common,waitAndExecute); +[{_this call FUNC(earRinging)}, [ACE_player, _strength], 0.2, 0] call EFUNC(common,waitAndExecute); diff --git a/addons/hearing/functions/fnc_updatePlayerVehAttenuation.sqf b/addons/hearing/functions/fnc_updatePlayerVehAttenuation.sqf new file mode 100644 index 0000000000..a7285d5e2b --- /dev/null +++ b/addons/hearing/functions/fnc_updatePlayerVehAttenuation.sqf @@ -0,0 +1,57 @@ +/* + * Author: PabstMirror + * Gets the sound attenuation of a player to the outside. + * + * Arguments: + * None + * + * Return Value: + * Ammount that unit can hear outside + * + * Example: + * [] call ace_hearing_fnc_updatePlayerVehAttenuation + * + * Public: No + */ +#include "script_component.hpp" + +_vehicle = vehicle ACE_player; + +if (isNull _vehicle) exitWith {}; + +_newAttenuation = 1; +if (ACE_player != _vehicle) then { + _effectType = ""; + _turretPath = [ACE_player] call EFUNC(common,getTurretIndex); + _effectType = getText (configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "attenuationEffectType"); + + if (!(_turretPath isEqualTo [])) then { + _turretConfig = [(configFile >> "CfgVehicles" >> (typeOf _vehicle)), _turretPath] call EFUNC(common,getTurretConfigPath); + + if ((getNumber (_turretConfig >> "disableSoundAttenuation")) == 1) then { + _effectType = ""; + } else { + if (isText (_turretConfig >> "soundAttenuationTurret")) then { + _effectType = getText (_turretConfig >> "soundAttenuationTurret"); + }; + }; + }; + + _newAttenuation = switch (true) do { + case (_effectType == ""): {1}; + case (_effectType == "CarAttenuation"): {0.5}; + case (_effectType == "RHS_CarAttenuation"): {0.5}; + case (_effectType == "OpenCarAttenuation"): {1}; + case (_effectType == "TankAttenuation"): {0.1}; + case (_effectType == "HeliAttenuation"): {0.3}; + case (_effectType == "OpenHeliAttenuation"): {0.9}; + case (_effectType == "SemiOpenHeliAttenuation"): {0.6}; + case (_effectType == "HeliAttenuationGunner"): {0.85}; + case (_effectType == "HeliAttenuationRamp"): {0.85}; + default {1}; + }; +}; + +TRACE_2("New vehicle attenuation",_vehicle,_newAttenuation); + +GVAR(playerVehAttenuation) = _newAttenuation; diff --git a/addons/interact_menu/XEH_clientInit.sqf b/addons/interact_menu/XEH_clientInit.sqf index b8a8fc899b..faabf773f4 100644 --- a/addons/interact_menu/XEH_clientInit.sqf +++ b/addons/interact_menu/XEH_clientInit.sqf @@ -3,6 +3,8 @@ if (!hasInterface) exitWith {}; +GVAR(ParsedTextCached) = []; + //Setup text/shadow color matrix [] call FUNC(setupTextColors); ["SettingChanged", { diff --git a/addons/interact_menu/XEH_preInit.sqf b/addons/interact_menu/XEH_preInit.sqf index 65d5dd4305..7e86646b79 100644 --- a/addons/interact_menu/XEH_preInit.sqf +++ b/addons/interact_menu/XEH_preInit.sqf @@ -8,6 +8,7 @@ PREP(compileMenu); PREP(compileMenuSelfAction); PREP(collectActiveActionTree); PREP(createAction); +PREP(ctrlSetParsedTextCached); PREP(findActionNode); PREP(handlePlayerChanged); PREP(isSubPath); diff --git a/addons/interact_menu/functions/fnc_compileMenu.sqf b/addons/interact_menu/functions/fnc_compileMenu.sqf index 7983c493e1..bd2023a90d 100644 --- a/addons/interact_menu/functions/fnc_compileMenu.sqf +++ b/addons/interact_menu/functions/fnc_compileMenu.sqf @@ -53,7 +53,9 @@ _recurseFnc = { if (_condition == "") then {_condition = "true"}; // Add canInteract (including exceptions) and canInteractWith to condition - _condition = _condition + format [QUOTE( && {[ARR_3(ACE_player, _target, %1)] call EFUNC(common,canInteractWith)} ), getArray (_entryCfg >> "exceptions")]; + if ((configName _entryCfg) != "ACE_MainActions") then { + _condition = _condition + format [QUOTE( && {[ARR_3(ACE_player, _target, %1)] call EFUNC(common,canInteractWith)} ), getArray (_entryCfg >> "exceptions")]; + }; _insertChildren = compile (getText (_entryCfg >> "insertChildren")); _modifierFunction = compile (getText (_entryCfg >> "modifierFunction")); diff --git a/addons/interact_menu/functions/fnc_ctrlSetParsedTextCached.sqf b/addons/interact_menu/functions/fnc_ctrlSetParsedTextCached.sqf new file mode 100644 index 0000000000..b5d6a4e967 --- /dev/null +++ b/addons/interact_menu/functions/fnc_ctrlSetParsedTextCached.sqf @@ -0,0 +1,15 @@ +// by commy2 +#include "script_component.hpp" + +private ["_ctrl", "_index", "_text"]; + +_ctrl = _this select 0; +_index = _this select 1; +_text = _this select 2; + +//systemChat str (_text != ARR_SELECT(GVAR(ParsedTextCached),_index,"-1")); + +if (_text != ARR_SELECT(GVAR(ParsedTextCached),_index,"-1")) then { + GVAR(ParsedTextCached) set [_index, _text]; + _ctrl ctrlSetStructuredText parseText _text; +}; diff --git a/addons/interact_menu/functions/fnc_keyDown.sqf b/addons/interact_menu/functions/fnc_keyDown.sqf index 1bd4d04474..37e5bc3797 100644 --- a/addons/interact_menu/functions/fnc_keyDown.sqf +++ b/addons/interact_menu/functions/fnc_keyDown.sqf @@ -30,6 +30,7 @@ if (_menuType == 0) then { GVAR(keyDownTime) = diag_tickTime; GVAR(openedMenuType) = _menuType; GVAR(lastTimeSearchedActions) = -1000; +GVAR(ParsedTextCached) = []; GVAR(useCursorMenu) = (vehicle ACE_player != ACE_player) || visibleMap || diff --git a/addons/interact_menu/functions/fnc_render.sqf b/addons/interact_menu/functions/fnc_render.sqf index b9afa75616..01a550eb91 100644 --- a/addons/interact_menu/functions/fnc_render.sqf +++ b/addons/interact_menu/functions/fnc_render.sqf @@ -119,6 +119,7 @@ if(!_foundTarget && GVAR(actionSelected)) then { }; for "_i" from GVAR(iconCount) to (count GVAR(iconCtrls))-1 do { ctrlDelete (GVAR(iconCtrls) select _i); + GVAR(ParsedTextCached) set [_i, ""]; }; GVAR(iconCtrls) resize GVAR(iconCount); GVAR(iconCount) = 0; diff --git a/addons/interact_menu/functions/fnc_renderIcon.sqf b/addons/interact_menu/functions/fnc_renderIcon.sqf index 9107b6d998..32e8aa1a63 100644 --- a/addons/interact_menu/functions/fnc_renderIcon.sqf +++ b/addons/interact_menu/functions/fnc_renderIcon.sqf @@ -27,7 +27,6 @@ if(GVAR(iconCount) > (count GVAR(iconCtrls))-1) then { GVAR(iconCtrls) pushBack ((findDisplay _displayNum) ctrlCreate ["RscStructuredText", 54021+GVAR(iconCount)]); }; _ctrl = GVAR(iconCtrls) select GVAR(iconCount); -GVAR(iconCount) = GVAR(iconCount) + 1; if(_icon == "") then { _icon = DEFAULT_ICON; }; @@ -38,8 +37,11 @@ _text = if (GVAR(UseListMenu)) then { format ["
%5", _icon, _iconColor, _textColor, _shadowColor, "ace_breakLine" callExtension _text]; }; -_ctrl ctrlSetStructuredText (parseText _text); -_text = if (GVAR(UseListMenu)) then { +//_ctrl ctrlSetStructuredText parseText _text; +[_ctrl, GVAR(iconCount), _text] call FUNC(ctrlSetParsedTextCached); +GVAR(iconCount) = GVAR(iconCount) + 1; + +if (GVAR(UseListMenu)) then { _ctrl ctrlSetPosition [(_sPos select 0)-(0.0095*SafeZoneW), (_sPos select 1)-(0.0095*SafeZoneW), 0.20*SafeZoneW, 0.035*SafeZoneW]; } else { _ctrl ctrlSetPosition [(_sPos select 0)-(0.0750*SafeZoneW), (_sPos select 1)-(0.0095*SafeZoneW), 0.15*SafeZoneW, 0.100*SafeZoneW]; diff --git a/addons/interact_menu/functions/fnc_renderSelector.sqf b/addons/interact_menu/functions/fnc_renderSelector.sqf index 5afcf63cc6..7d5a3359f7 100644 --- a/addons/interact_menu/functions/fnc_renderSelector.sqf +++ b/addons/interact_menu/functions/fnc_renderSelector.sqf @@ -22,14 +22,14 @@ if(GVAR(iconCount) > (count GVAR(iconCtrls))-1) then { private "_ctrl"; _ctrl = GVAR(iconCtrls) select GVAR(iconCount); -GVAR(iconCount) = GVAR(iconCount) + 1; if (GVAR(UseListMenu)) then { - _ctrl ctrlSetStructuredText (parseText format ["", _icon]); + [_ctrl, GVAR(iconCount), format ["", _icon]] call FUNC(ctrlSetParsedTextCached); _ctrl ctrlSetPosition [(_sPos select 0)-(0.014*SafeZoneW), (_sPos select 1)-(0.014*SafeZoneW), 0.05*SafeZoneW, 0.035*SafeZoneW]; } else { - _ctrl ctrlSetStructuredText (parseText format ["", _icon]); + [_ctrl, GVAR(iconCount), format ["", _icon]] call FUNC(ctrlSetParsedTextCached); _ctrl ctrlSetPosition [(_sPos select 0)-(0.050*SafeZoneW), (_sPos select 1)-(0.014*SafeZoneW), 0.1*SafeZoneW, 0.035*SafeZoneW]; }; //_ctrl ctrlSetBackgroundColor [1, 0, 0, 0.1]; +GVAR(iconCount) = GVAR(iconCount) + 1; _ctrl ctrlCommit 0; diff --git a/addons/interact_menu/stringtable.xml b/addons/interact_menu/stringtable.xml index 264bc6c645..4c8bf10819 100644 --- a/addons/interact_menu/stringtable.xml +++ b/addons/interact_menu/stringtable.xml @@ -17,6 +17,8 @@ Mostrar siempre el cursor para la interacción Toujours afficher le curseur pour les interactions Mostra sempre il cursore per le interazioni + Zawsze wyświetlaj kursor dla interakcji + Immer den Cursor für Fremd-Interaktionen anzeigen
Display interaction menus as lists @@ -73,19 +75,31 @@ Interaction - Text Max - Interacción - Ampliar texto + Interakcja - Tekst max + Interaction -Texte Max + Interaktionstextfarbe Max + Interazioni - Testo Massimo Interaction - Text Min - Interacción - Reducir texto + Interakcja - Tekst min + Interaction - Texte Min + Interaktionstextfarbe Min + Interazioni - Testo Minimo Interaction - Shadow Max - Interacción - Ampliar sombra + Interakcja - Cień max + Interaction - Ombre Max + Interaktionstextschatten Max + Interazioni - Ombra Massima Interaction - Shadow Min - Interacción - Reducir sombra + Interakcja - Cień min + Interaction - Ombre Min + Interaktionstextschatten Min + Interazioni - Ombra Minima
\ No newline at end of file diff --git a/addons/interaction/CfgVehicles.hpp b/addons/interaction/CfgVehicles.hpp index 0408192919..f6f39808b9 100644 --- a/addons/interaction/CfgVehicles.hpp +++ b/addons/interaction/CfgVehicles.hpp @@ -35,7 +35,7 @@ class CfgVehicles { class ACE_TeamManagement { displayName = "$STR_ACE_Interaction_TeamManagement"; - condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player} && {GVAR(EnableTeamManagement)}); + condition = QUOTE([ARR_2(_player,_target)] call DFUNC(canJoinTeam) && {GVAR(EnableTeamManagement)}); statement = ""; showDisabled = 0; priority = 3.2; @@ -44,7 +44,7 @@ class CfgVehicles { class ACE_JoinTeamRed { displayName = "$STR_ACE_Interaction_JoinTeamRed"; - condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player}); + condition = QUOTE([ARR_2(_player,_target)] call DFUNC(canJoinTeam)); statement = QUOTE([ARR_2(_target,'RED')] call DFUNC(joinTeam)); showDisabled = 1; icon = PATHTOF(UI\team\team_red_ca.paa); @@ -53,7 +53,7 @@ class CfgVehicles { }; class ACE_JoinTeamGreen { displayName = "$STR_ACE_Interaction_JoinTeamGreen"; - condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player}); + condition = QUOTE([ARR_2(_player,_target)] call DFUNC(canJoinTeam)); statement = QUOTE([ARR_2(_target,'GREEN')] call DFUNC(joinTeam)); showDisabled = 1; icon = PATHTOF(UI\team\team_green_ca.paa); @@ -62,7 +62,7 @@ class CfgVehicles { }; class ACE_JoinTeamBlue { displayName = "$STR_ACE_Interaction_JoinTeamBlue"; - condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player}); + condition = QUOTE([ARR_2(_player,_target)] call DFUNC(canJoinTeam)); statement = QUOTE([ARR_2(_target,'BLUE')] call DFUNC(joinTeam)); showDisabled = 1; icon = PATHTOF(UI\team\team_blue_ca.paa); @@ -71,7 +71,7 @@ class CfgVehicles { }; class ACE_JoinTeamYellow { displayName = "$STR_ACE_Interaction_JoinTeamYellow"; - condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player}); + condition = QUOTE([ARR_2(_player,_target)] call DFUNC(canJoinTeam)); statement = QUOTE([ARR_2(_target,'YELLOW')] call DFUNC(joinTeam)); showDisabled = 1; icon = PATHTOF(UI\team\team_yellow_ca.paa); @@ -81,7 +81,7 @@ class CfgVehicles { class ACE_LeaveTeam { displayName = "$STR_ACE_Interaction_LeaveTeam"; - condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player} && {assignedTeam _player != 'MAIN'}); + condition = QUOTE([ARR_2(_player,_target)] call DFUNC(canJoinTeam) && {assignedTeam _player != 'MAIN'}); statement = QUOTE([ARR_2(_target,'MAIN')] call DFUNC(joinTeam)); showDisabled = 1; icon = PATHTOF(UI\team\team_white_ca.paa); @@ -92,8 +92,8 @@ class CfgVehicles { class ACE_JoinGroup { displayName = "$STR_ACE_Interaction_JoinGroup"; - condition = QUOTE(side group _player == side group _target && {group _player != group _target}); - statement = QUOTE([_player] joinSilent group _target;); + condition = QUOTE([ARR_2(_player,_target)] call DFUNC(canJoinGroup)); + statement = QUOTE([_player] joinSilent group _target); showDisabled = 0; priority = 2.6; icon = PATHTOF(UI\team\team_management_ca.paa); @@ -223,7 +223,7 @@ class CfgVehicles { displayName = "$STR_ACE_Interaction_JoinTeamBlue"; condition = QUOTE(true); exceptions[] = {"isNotInside"}; - statement = QUOTE([ARR_2(_player,'BLUE')] call FUNC(joinTeam)); + statement = QUOTE([ARR_2(_player,'BLUE')] call DFUNC(joinTeam)); showDisabled = 1; priority = 2.2; icon = PATHTOF(UI\team\team_blue_ca.paa); @@ -233,7 +233,7 @@ class CfgVehicles { displayName = "$STR_ACE_Interaction_JoinTeamYellow"; condition = QUOTE(true); exceptions[] = {"isNotInside"}; - statement = QUOTE([ARR_2(_player,'YELLOW')] call FUNC(joinTeam)); + statement = QUOTE([ARR_2(_player,'YELLOW')] call DFUNC(joinTeam)); showDisabled = 1; priority = 2.1; icon = PATHTOF(UI\team\team_yellow_ca.paa); @@ -244,7 +244,7 @@ class CfgVehicles { displayName = "$STR_ACE_Interaction_LeaveTeam"; condition = QUOTE(assignedTeam _player != 'MAIN'); exceptions[] = {"isNotInside"}; - statement = QUOTE([ARR_2(_player,'MAIN')] call FUNC(joinTeam)); + statement = QUOTE([ARR_2(_player,'MAIN')] call DFUNC(joinTeam)); showDisabled = 1; priority = 2.5; icon = PATHTOF(UI\team\team_white_ca.paa); @@ -252,9 +252,9 @@ class CfgVehicles { }; class ACE_BecomeLeader { displayName = "$STR_ACE_Interaction_BecomeLeader"; - condition = QUOTE(_this call FUNC(canBecomeLeader)); + condition = QUOTE(_this call DFUNC(canBecomeLeader)); exceptions[] = {"isNotInside"}; - statement = QUOTE(_this call FUNC(doBecomeLeader)); + statement = QUOTE(_this call DFUNC(doBecomeLeader)); showDisabled = 1; priority = 1.0; icon = PATHTOF(UI\team\team_white_ca.paa); @@ -405,7 +405,7 @@ class CfgVehicles { displayName = "$STR_ACE_Interaction_Passengers"; condition = "true"; statement = ""; - insertChildren = QUOTE(_this call FUNC(addPassengersActions)); + insertChildren = QUOTE(_this call DFUNC(addPassengersActions)); }; }; }; @@ -423,7 +423,7 @@ class CfgVehicles { displayName = "$STR_ACE_Interaction_Passengers"; condition = "true"; statement = ""; - insertChildren = QUOTE(_this call FUNC(addPassengersActions)); + insertChildren = QUOTE(_this call DFUNC(addPassengersActions)); }; }; }; @@ -443,7 +443,7 @@ class CfgVehicles { displayName = "$STR_ACE_Interaction_Passengers"; condition = "true"; statement = ""; - insertChildren = QUOTE(_this call FUNC(addPassengersActions)); + insertChildren = QUOTE(_this call DFUNC(addPassengersActions)); }; }; }; @@ -461,7 +461,7 @@ class CfgVehicles { displayName = "$STR_ACE_Interaction_Passengers"; condition = "true"; statement = ""; - insertChildren = QUOTE(_this call FUNC(addPassengersActions)); + insertChildren = QUOTE(_this call DFUNC(addPassengersActions)); }; }; }; @@ -479,7 +479,7 @@ class CfgVehicles { displayName = "$STR_ACE_Interaction_Push"; distance = 6; condition = QUOTE(getMass _target < 1000 && {alive _target}); - statement = QUOTE([ARR_2(_target, [ARR_3(2 * (vectorDir _player select 0), 2 * (vectorDir _player select 1), 0.5)])] call FUNC(push);); + statement = QUOTE([ARR_2(_target, [ARR_3(2 * (vectorDir _player select 0), 2 * (vectorDir _player select 1), 0.5)])] call DFUNC(push);); showDisabled = 0; priority = -1; }; @@ -490,7 +490,7 @@ class CfgVehicles { displayName = "$STR_ACE_Interaction_Passengers"; condition = "true"; statement = ""; - insertChildren = QUOTE(_this call FUNC(addPassengersActions)); + insertChildren = QUOTE(_this call DFUNC(addPassengersActions)); }; }; }; @@ -509,7 +509,7 @@ class CfgVehicles { displayName = "$STR_ACE_Interaction_Passengers"; condition = "true"; statement = ""; - insertChildren = QUOTE(_this call FUNC(addPassengersActions)); + insertChildren = QUOTE(_this call DFUNC(addPassengersActions)); }; }; }; diff --git a/addons/interaction/XEH_preInit.sqf b/addons/interaction/XEH_preInit.sqf index 6f10a4e834..34c225c8f0 100644 --- a/addons/interaction/XEH_preInit.sqf +++ b/addons/interaction/XEH_preInit.sqf @@ -8,6 +8,8 @@ PREP(addSelectableItem); PREP(applyButtons); PREP(canBecomeLeader); PREP(canInteractWithCivilian); +PREP(canJoinGroup); +PREP(canJoinTeam); PREP(canTapShoulder); PREP(doBecomeLeader); PREP(getDoor); diff --git a/addons/interaction/functions/fnc_canJoinGroup.sqf b/addons/interaction/functions/fnc_canJoinGroup.sqf new file mode 100644 index 0000000000..d299524925 --- /dev/null +++ b/addons/interaction/functions/fnc_canJoinGroup.sqf @@ -0,0 +1,12 @@ +// by commy2 +#include "script_component.hpp" + +private ["_unit", "_target"]; + +_unit = _this select 0; +_target = _this select 1; + +alive _target +&& {!(_target getVariable ["ACE_isUnconscious", false])} +&& {side group _unit == side group _target} +&& {group _unit != group _target} diff --git a/addons/interaction/functions/fnc_canJoinTeam.sqf b/addons/interaction/functions/fnc_canJoinTeam.sqf new file mode 100644 index 0000000000..45f96393a9 --- /dev/null +++ b/addons/interaction/functions/fnc_canJoinTeam.sqf @@ -0,0 +1,12 @@ +// by commy2 +#include "script_component.hpp" + +private ["_unit", "_target"]; + +_unit = _this select 0; +_target = _this select 1; + +alive _target +&& {!(_target getVariable ["ACE_isUnconscious", false])} +&& {!([_target] call EFUNC(common,isPlayer))} +&& {_target in units group _unit} diff --git a/addons/kestrel4500/stringtable.xml b/addons/kestrel4500/stringtable.xml index a71c2dc094..cc0776610c 100644 --- a/addons/kestrel4500/stringtable.xml +++ b/addons/kestrel4500/stringtable.xml @@ -20,6 +20,7 @@ Station météo portable Kestrel 4500 Estación meteorológica Kestrel 4500 Kestrel 4500 Taschenwettermessgerät + Kestrel 4500 Indicatore Meteorologico Tascabile
Open Kestrel 4500 diff --git a/addons/laserpointer/stringtable.xml b/addons/laserpointer/stringtable.xml index 6ef8be6a57..bd1eb773ad 100644 --- a/addons/laserpointer/stringtable.xml +++ b/addons/laserpointer/stringtable.xml @@ -53,6 +53,7 @@ Лазер Laser Láser + Laser IR Laser @@ -61,6 +62,7 @@ ИК-лазер Laser IR Láser IR + Laser IR Switch Laser / IR Laser diff --git a/addons/logistics_wirecutter/stringtable.xml b/addons/logistics_wirecutter/stringtable.xml index 129075f001..f0149f2454 100644 --- a/addons/logistics_wirecutter/stringtable.xml +++ b/addons/logistics_wirecutter/stringtable.xml @@ -10,6 +10,7 @@ Štípací kleště Nożyce do cięcia drutu Drótvágó + Pinze da Taglio Wirecutter @@ -20,6 +21,7 @@ Służą do cięcia drutu i płotów Pince coupante Drótok, huzalok, és kábelek vágására alkalmas olló. + Pinze da Taglio Cut Fence @@ -58,4 +60,4 @@ Забор разрезан
-
+
\ No newline at end of file diff --git a/addons/magazinerepack/stringtable.xml b/addons/magazinerepack/stringtable.xml index c78f71ef89..9a8fa95755 100644 --- a/addons/magazinerepack/stringtable.xml +++ b/addons/magazinerepack/stringtable.xml @@ -1,5 +1,4 @@  - @@ -108,4 +107,4 @@ %1 pieno e %2 parziale - \ No newline at end of file + diff --git a/addons/main/script_macros.hpp b/addons/main/script_macros.hpp index fce9ec526a..d4b6739918 100644 --- a/addons/main/script_macros.hpp +++ b/addons/main/script_macros.hpp @@ -1,6 +1,11 @@ #include "\x\cba\addons\main\script_macros_common.hpp" #include "\x\cba\addons\xeh\script_xeh.hpp" +//Faster Array Unwraping (skips the IS_ARRAY check normaly found in EXPLODE_1_SYS) +#undef EXPLODE_2_SYS +#define EXPLODE_1_SYS_FAST(ARRAY,A) A =(ARRAY) select 0 +#define EXPLODE_2_SYS(ARRAY,A,B) EXPLODE_1_SYS_FAST(ARRAY,A); B = (ARRAY) select 1 + // Default versioning level #define DEFAULT_VERSIONING_LEVEL 2 diff --git a/addons/map/stringtable.xml b/addons/map/stringtable.xml index e3e2a6fe93..4423bbcfb4 100644 --- a/addons/map/stringtable.xml +++ b/addons/map/stringtable.xml @@ -1,5 +1,4 @@  - diff --git a/addons/medical/ACE_Medical_Actions.hpp b/addons/medical/ACE_Medical_Actions.hpp index a7b76fef44..70e286f7d8 100644 --- a/addons/medical/ACE_Medical_Actions.hpp +++ b/addons/medical/ACE_Medical_Actions.hpp @@ -66,13 +66,13 @@ class ACE_Head { EXCEPTIONS }; class CheckResponse: CheckPulse { - displayName = "Check Response"; + displayName = "$STR_ACE_MEDICAL_CHECK_RESPONSE"; condition = QUOTE([ARR_4(_player, _target, 'head', 'CheckResponse')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'head', 'CheckResponse')] call DFUNC(treatment)); EXCEPTIONS }; class Diagnose: CheckPulse { - displayName = "Diagnose"; + displayName = "$STR_ACE_MEDICAL_ACTIONS_Diagnose"; condition = QUOTE([ARR_4(_player, _target, 'head', 'Diagnose')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'head', 'Diagnose')] call DFUNC(treatment)); EXCEPTIONS @@ -111,7 +111,7 @@ class ACE_Torso { enableInside = 1; }; class TriageCard { - displayName = "Triage Card"; + displayName = "$STR_ACE_MEDICAL_ACTIONS_TriageCard"; distance = 2.0; condition = "true"; statement = QUOTE([ARR_2(_target, true)] call DFUNC(displayTriageCard)); @@ -158,21 +158,21 @@ class ACE_Torso { icon = PATHTOF(UI\icons\bandage.paa); }; class SurgicalKit: fieldDressing { - displayName = "Use Surgical Kit"; + displayName = "$STR_ACE_MEDICAL_USE_SURGICALKIT"; condition = QUOTE([ARR_4(_player, _target, 'body', 'SurgicalKit')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'body', 'SurgicalKit')] call DFUNC(treatment)); EXCEPTIONS icon = PATHTOF(UI\icons\surgicalKit.paa); }; class PersonalAidKit: fieldDressing { - displayName = "Use Personal Aid Kit"; + displayName = "$STR_ACE_MEDICAL_USE_AID_KIT"; condition = QUOTE([ARR_4(_player, _target, 'body', 'PersonalAidKit')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'body', 'PersonalAidKit')] call DFUNC(treatment)); EXCEPTIONS icon = ""; }; class CPR: fieldDressing { - displayName = "CPR"; + displayName = "$STR_ACE_MEDICAL_ACTIONS_CPR"; condition = QUOTE([ARR_4(_player, _target, 'body', 'CPR')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'body', 'CPR')] call DFUNC(treatment)); EXCEPTIONS diff --git a/addons/medical/ACE_Medical_Treatments.hpp b/addons/medical/ACE_Medical_Treatments.hpp index 03b9def612..85bcab9616 100644 --- a/addons/medical/ACE_Medical_Treatments.hpp +++ b/addons/medical/ACE_Medical_Treatments.hpp @@ -72,8 +72,8 @@ class ACE_Medical_Actions { litter[] = {}; }; class Diagnose: Bandage { - displayName = "Diagnose"; - displayNameProgress = "Diagnosing..."; + displayName = "$STR_ACE_MEDICAL_ACTIONS_Diagnose"; + displayNameProgress = "$STR_ACE_MEDICAL_ACTIONS_Diagnosing"; treatmentLocations[] = {"All"}; requiredMedic = 0; treatmentTime = 1; @@ -250,8 +250,8 @@ class ACE_Medical_Actions { condition = QUOTE([ARR_2(_this select 1, _this select 2)] call FUNC(hasTourniquetAppliedTo)); }; class CPR: fieldDressing { - displayName = "CPR"; - displayNameProgress = "Performing CPR"; + displayName = "$STR_ACE_MEDICAL_ACTIONS_CPR"; + displayNameProgress = "$STR_ACE_MEDICAL_ACTIONS_PerformingCPR"; treatmentLocations[] = {"All"}; requiredMedic = 0; treatmentTime = 15; @@ -297,23 +297,26 @@ class ACE_Medical_Advanced { // Source: Scarle // Also called scrapes, they occur when the skin is rubbed away by friction against another rough surface (e.g. rope burns and skinned knees). class Abrasion { - name = "Scrape"; + name = "$STR_ACE_Medical_Wounds_Abrasion"; selections[] = {"All"}; bleedingRate = 0.0001; pain = 0.01; causes[] = {"falling", "ropeburn", "vehiclecrash", "unknown"}; minDamage = 0.01; class Minor { + name = "$STR_ACE_Medical_Wounds_Abrasion_Minor"; minDamage = 0.01; maxDamage = 0.2; bleedingRate = 0.0001; }; class Medium { + name = "$STR_ACE_Medical_Wounds_Abrasion_Medium"; minDamage = 0.2; maxDamage = 0.3; bleedingRate = 0.00015; }; class Large { + name = "$STR_ACE_Medical_Wounds_Abrasion_Large"; minDamage = 0.3; bleedingRate = 0.0002; }; @@ -321,23 +324,26 @@ class ACE_Medical_Advanced { // Occur when an entire structure or part of it is forcibly pulled away, such as the loss of a permanent tooth or an ear lobe. Explosions, gunshots, and animal bites may cause avulsions. class Avulsions { - name = "Avulsion"; + name = "$STR_ACE_Medical_Wounds_Avulsion"; selections[] = {"All"}; bleedingRate = 0.01; pain = 0.3; causes[] = {"explosive", "vehiclecrash", "grenade", "shell", "bullet", "backblast", "bite"}; minDamage = 0.2; class Minor { + name = "$STR_ACE_Medical_Wounds_Avulsion_Minor"; minDamage = 0.2; maxDamage = 0.3; bleedingRate = 0.01; }; class Medium { + name = "$STR_ACE_Medical_Wounds_Avulsion_Medium"; minDamage = 0.3; maxDamage = 0.6; bleedingRate = 0.02; }; class Large { + name = "$STR_ACE_Medical_Wounds_Avulsion_Large"; minDamage = 0.5; bleedingRate = 0.05; }; @@ -345,22 +351,25 @@ class ACE_Medical_Advanced { // Also called bruises, these are the result of a forceful trauma that injures an internal structure without breaking the skin. Blows to the chest, abdomen, or head with a blunt instrument (e.g. a football or a fist) can cause contusions. class Contusion { - name = "Bruise"; + name = "$STR_ACE_Medical_Wounds_Contusion"; selections[] = {"All"}; bleedingRate = 0.0; pain = 0.05; - causes[] = {"bullet", "backblast", "punch","vehiclecrash","falling"}; + causes[] = {"bullet", "backblast", "punch", "vehiclecrash", "falling"}; minDamage = 0.01; maxDamage = 0.1; class Minor { + name = "$STR_ACE_Medical_Wounds_Contusion_Minor"; minDamage = 0.01; maxDamage = 0.1; }; class Medium { + name = "$STR_ACE_Medical_Wounds_Contusion_Medium"; minDamage = 0.1; maxDamage = 0.15; }; class Large { + name = "$STR_ACE_Medical_Wounds_Contusion_Large"; minDamage = 0.15; maxDamage = 0.2; }; @@ -368,23 +377,26 @@ class ACE_Medical_Advanced { // Occur when a heavy object falls onto a person, splitting the skin and shattering or tearing underlying structures. class CrushWound { - name = "Crushed tissue"; + name = "$STR_ACE_Medical_Wounds_Crush"; selections[] = {"All"}; bleedingRate = 0.01; pain = 0.1; causes[] = {"falling", "vehiclecrash", "punch", "unknown"}; minDamage = 0.1; class Minor { + name = "$STR_ACE_Medical_Wounds_Crush_Minor"; minDamage = 0.1; maxDamage = 0.45; bleedingRate = 0.005; }; class Medium { + name = "$STR_ACE_Medical_Wounds_Crush_Medium"; minDamage = 0.4; maxDamage = 0.7; bleedingRate = 0.007; }; class Large { + name = "$STR_ACE_Medical_Wounds_Crush_Large"; minDamage = 0.6; bleedingRate = 0.0095; }; @@ -392,23 +404,26 @@ class ACE_Medical_Advanced { // Slicing wounds made with a sharp instrument, leaving even edges. They may be as minimal as a paper cut or as significant as a surgical incision. class Cut { - name = "Cut"; + name = "$STR_ACE_Medical_Wounds_Cut"; selections[] = {"All"}; bleedingRate = 0.01; pain = 0.075; causes[] = {"vehiclecrash", "grenade", "explosive", "shell", "backblast", "stab", "unknown"}; minDamage = 0.1; class Minor { + name = "$STR_ACE_Medical_Wounds_Cut_Minor"; minDamage = 0.1; maxDamage = 0.3; bleedingRate = 0.005; }; class Medium { + name = "$STR_ACE_Medical_Wounds_Cut_Medium"; minDamage = 0.3; maxDamage = 0.65; bleedingRate = 0.02; }; class Large { + name = "$STR_ACE_Medical_Wounds_Cut_Large"; minDamage = 0.65; bleedingRate = 0.05; }; @@ -416,23 +431,26 @@ class ACE_Medical_Advanced { // Also called tears, these are separating wounds that produce ragged edges. They are produced by a tremendous force against the body, either from an internal source as in childbirth, or from an external source like a punch. class Laceration { - name = "Tear"; + name = "$STR_ACE_Medical_Wounds_Laceration"; selections[] = {"All"}; bleedingRate = 0.01; pain = 0.075; causes[] = {"vehiclecrash", "punch"}; minDamage = 0.01; class Minor { + name = "$STR_ACE_Medical_Wounds_Laceration_Minor"; minDamage = 0.1; maxDamage = 0.5; bleedingRate = 0.005; }; class Medium { + name = "$STR_ACE_Medical_Wounds_Laceration_Medium"; minDamage = 0.5; maxDamage = 0.7; bleedingRate = 0.01; }; class Large { + name = "$STR_ACE_Medical_Wounds_Laceration_Large"; minDamage = 0.7; bleedingRate = 0.03; }; @@ -440,22 +458,25 @@ class ACE_Medical_Advanced { // Also called velocity wounds, they are caused by an object entering the body at a high speed, typically a bullet or small peices of shrapnel. class velocityWound { - name = "Velocity Wound"; + name = "$STR_ACE_Medical_Wounds_VelocityWound"; selections[] = {"All"}; bleedingRate = 0.01; pain = 0.2; causes[] = {"bullet", "grenade","explosive", "shell", "unknown"}; minDamage = 0.15; class Minor { + name = "$STR_ACE_Medical_Wounds_VelocityWound_Minor"; minDamage = 0.15; maxDamage = 0.3; bleedingRate = 0.025; }; class Medium { + name = "$STR_ACE_Medical_Wounds_VelocityWound_Medium"; minDamage = 0.3; bleedingRate = 0.05; }; class Large { + name = "$STR_ACE_Medical_Wounds_VelocityWound_Large"; minDamage = 0.75; bleedingRate = 0.1; }; @@ -463,23 +484,26 @@ class ACE_Medical_Advanced { // Deep, narrow wounds produced by sharp objects such as nails, knives, and broken glass. class punctureWound { - name = "Puncture Wound"; + name = "$STR_ACE_Medical_Wounds_PunctureWound"; selections[] = {"All"}; bleedingRate = 0.01; pain = 0.075; causes[] = {"stab", "grenade"}; minDamage = 0.01; class Minor { + name = "$STR_ACE_Medical_Wounds_PunctureWound_Minor"; minDamage = 0.01; maxDamage = 0.5; bleedingRate = 0.01; }; class Medium { + name = "$STR_ACE_Medical_Wounds_PunctureWound_Medium"; minDamage = 0.5; maxDamage = 0.75; bleedingRate = 0.03; }; class Large { + name = "$STR_ACE_Medical_Wounds_PunctureWound_Large"; minDamage = 0.65; bleedingRate = 0.08; }; @@ -487,7 +511,7 @@ class ACE_Medical_Advanced { }; class fractures { class Femur { - name = "Broken Femur"; + name = "$STR_ACE_Medical_Wounds_Femur"; selections[] = {"Head", "Torso"}; pain = 0.2; causes[] = {"Bullet", "VehicleCrash", "Backblast", "Explosive", "Shell", "Grenade"}; diff --git a/addons/medical/CfgWeapons.hpp b/addons/medical/CfgWeapons.hpp index 8fd58e2571..8c45b6906c 100644 --- a/addons/medical/CfgWeapons.hpp +++ b/addons/medical/CfgWeapons.hpp @@ -33,9 +33,6 @@ class CfgWeapons { }; class ACE_packingBandage: ACE_ItemCore { scope = 2; - value = 1; - count = 1; - type = 16; displayName = $STR_ACE_MEDICAL_PACKING_BANDAGE_DISPLAY; picture = QUOTE(PATHTOF(ui\items\packingBandage_x_ca.paa)); model = QUOTE(PATHTOF(data\packingbandage.p3d)); @@ -47,9 +44,6 @@ class CfgWeapons { }; class ACE_elasticBandage: ACE_ItemCore { scope = 2; - value = 1; - count = 1; - type = 16; displayName = $STR_ACE_MEDICAL_BANDAGE_ELASTIC_DISPLAY; picture = QUOTE(PATHTOF(ui\items\elasticBandage_x_ca.paa)); model = "\A3\Structures_F_EPA\Items\Medical\Bandage_F.p3d"; @@ -61,9 +55,6 @@ class CfgWeapons { }; class ACE_tourniquet: ACE_ItemCore { scope = 2; - value = 1; - count = 1; - type = 16; displayName = $STR_ACE_MEDICAL_TOURNIQUET_DISPLAY; picture = QUOTE(PATHTOF(ui\items\tourniquet_x_ca.paa)); model = QUOTE(PATHTOF(data\tourniquet.p3d)); @@ -75,9 +66,6 @@ class CfgWeapons { }; class ACE_morphine: ACE_ItemCore { scope = 2; - value = 1; - count = 1; - type = 16; displayName = $STR_ACE_MEDICAL_MORPHINE_DISPLAY; picture = QUOTE(PATHTOF(ui\items\morphine_x_ca.paa)); model = QUOTE(PATHTOF(data\morphine.p3d)); @@ -89,9 +77,6 @@ class CfgWeapons { }; class ACE_atropine: ACE_ItemCore { scope = 2; - value = 1; - count = 1; - type = 16; displayName = $STR_ACE_MEDICAL_ATROPINE_DISPLAY; picture = QUOTE(PATHTOF(ui\items\atropine_x_ca.paa)); model = QUOTE(PATHTOF(data\atropine.p3d)); @@ -104,9 +89,6 @@ class CfgWeapons { }; class ACE_epinephrine: ACE_ItemCore { scope = 2; - value = 1; - count = 1; - type = 16; displayName = $STR_ACE_MEDICAL_EPINEPHRINE_DISPLAY; picture = QUOTE(PATHTOF(ui\items\epinephrine_x_ca.paa)); model = QUOTE(PATHTOF(data\epinephrine.p3d)); @@ -118,8 +100,6 @@ class CfgWeapons { }; class ACE_plasmaIV: ACE_ItemCore { scope = 2; - value = 1; - count = 1; displayName = $STR_ACE_MEDICAL_PLASMA_IV; picture = QUOTE(PATHTOF(ui\items\plasmaIV_x_ca.paa)); descriptionShort = $STR_ACE_MEDICAL_PLASMA_IV_DESC_SHORT; @@ -142,8 +122,6 @@ class CfgWeapons { }; class ACE_bloodIV: ACE_ItemCore { scope = 2; - value = 1; - count = 1; model = "\A3\Structures_F_EPA\Items\Medical\BloodBag_F.p3d"; displayName = $STR_ACE_MEDICAL_BLOOD_IV; picture = QUOTE(PATHTOF(ui\items\bloodIV_x_ca.paa)); @@ -167,8 +145,6 @@ class CfgWeapons { }; class ACE_salineIV: ACE_ItemCore { scope = 2; - value = 1; - count = 1; displayName = $STR_ACE_MEDICAL_SALINE_IV; picture = QUOTE(PATHTOF(ui\items\salineIV_x_ca.paa)); descriptionShort = $STR_ACE_MEDICAL_SALINE_IV_DESC_SHORT; @@ -191,9 +167,6 @@ class CfgWeapons { }; class ACE_quikclot: ACE_ItemCore { scope = 2; - value = 1; - count = 1; - type = 16; displayName = $STR_ACE_MEDICAL_QUIKCLOT_DISPLAY; picture = QUOTE(PATHTOF(ui\items\quickclot_x_ca.paa)); descriptionShort = $STR_ACE_MEDICAL_QUIKCLOT_DESC_SHORT; @@ -204,9 +177,6 @@ class CfgWeapons { }; class ACE_personalAidKit: ACE_ItemCore { scope = 2; - value = 1; - count = 1; - type = 16; displayName = $STR_ACE_MEDICAL_AID_KIT_DISPLAY; picture = QUOTE(PATHTOF(ui\items\personal_aid_kit_x_ca.paa)); descriptionShort = $STR_ACE_MEDICAL_AID_KIT_DESC_SHORT; diff --git a/addons/medical/config.cpp b/addons/medical/config.cpp index 4dca8bdeca..de99778c11 100644 --- a/addons/medical/config.cpp +++ b/addons/medical/config.cpp @@ -2,7 +2,7 @@ class CfgPatches { class ADDON { - units[] = {"ACE_medicalSupplyCrate", "ACE_fieldDressingItem", "ACE_packingBandageItem", "ACE_elasticBandageItem", "ACE_tourniquetItem", "ACE_morphineItem", "ACE_atropineItem", "ACE_epinephrineItem", "ACE_plasmaIVItem", "ACE_bloodIVItem", "ACE_salineIVItem", "ACE_quikclotItem", "ACE_personalAidKitItem", "ACE_surgicalKitItem", "ACE_bodyBagItem", "ACE_bodyBagObject"}; + units[] = {"ACE_medicalSupplyCrate", "ACE_medicalSupplyCrate_advanced", "ACE_fieldDressingItem", "ACE_packingBandageItem", "ACE_elasticBandageItem", "ACE_tourniquetItem", "ACE_morphineItem", "ACE_atropineItem", "ACE_epinephrineItem", "ACE_plasmaIVItem", "ACE_bloodIVItem", "ACE_salineIVItem", "ACE_quikclotItem", "ACE_personalAidKitItem", "ACE_surgicalKitItem", "ACE_bodyBagItem", "ACE_bodyBagObject"}; weapons[] = {"ACE_fieldDressing", "ACE_packingBandage", "ACE_elasticBandage", "ACE_tourniquet", "ACE_morphine", "ACE_atropine", "ACE_epinephrine", "ACE_plasmaIV", "ACE_plasmaIV_500", "ACE_plasmaIV_250", "ACE_bloodIV", "ACE_bloodIV_500", "ACE_bloodIV_250", "ACE_salineIV", "ACE_salineIV_500", "ACE_salineIV_250", "ACE_quikclot", "ACE_personalAidKit", "ACE_surgicalKit", "ACE_bodyBag"}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_interaction","ace_modules"}; diff --git a/addons/medical/functions/fnc_actionCheckBloodPressureLocal.sqf b/addons/medical/functions/fnc_actionCheckBloodPressureLocal.sqf index 28ed10c83c..a9228d1760 100644 --- a/addons/medical/functions/fnc_actionCheckBloodPressureLocal.sqf +++ b/addons/medical/functions/fnc_actionCheckBloodPressureLocal.sqf @@ -33,20 +33,20 @@ if ([_caller] call FUNC(isMedic)) then { } else { if (_bloodPressureHigh > 20) then { _output = "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_OUTPUT_2"; - _logOutPut = "Low"; + _logOutPut = localize "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_LOW"; if (_bloodPressureHigh > 100) then { _output = "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_OUTPUT_3"; - _logOutPut = "Normal"; + _logOutPut = localize "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_NORMAL"; if (_bloodPressureHigh > 160) then { _output = "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_OUTPUT_4"; - _logOutPut = "High"; + _logOutPut = localize "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_HIGH"; }; }; } else { if (random(10) > 3) then { _output = "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_OUTPUT_5"; - _logOutPut = "No Blood Pressure"; + _logOutPut = localize "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_NOBLOODPRESSURE"; } else { _output = "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_OUTPUT_6"; }; @@ -56,5 +56,5 @@ if ([_caller] call FUNC(isMedic)) then { ["displayTextStructured", [_caller], [[_output, [_target] call EFUNC(common,getName), round(_bloodPressureHigh),round(_bloodPressureLow)], 1.75, _caller]] call EFUNC(common,targetEvent); if (_logOutPut != "") then { - [_target,"activity", "%1 checked Blood Pressure: %2", [[_caller] call EFUNC(common,getName), _logOutPut]] call FUNC(addToLog); + [_target,"activity", localize "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_LOG", [[_caller] call EFUNC(common,getName), _logOutPut]] call FUNC(addToLog); }; diff --git a/addons/medical/functions/fnc_actionCheckPulseLocal.sqf b/addons/medical/functions/fnc_actionCheckPulseLocal.sqf index 73d1d07190..dcb098c925 100644 --- a/addons/medical/functions/fnc_actionCheckPulseLocal.sqf +++ b/addons/medical/functions/fnc_actionCheckPulseLocal.sqf @@ -33,14 +33,14 @@ if (_heartRate > 1.0) then { } else { // non medical personel will only find a pulse/HR _heartRateOutput = "STR_ACE_MEDICAL_CHECK_PULSE_OUTPUT_2"; - _logOutPut = "Weak"; + _logOutPut = localize "STR_ACE_MEDICAL_CHECK_PULSE_WEAK"; if (_heartRate > 60) then { if (_heartRate > 100) then { _heartRateOutput = "STR_ACE_MEDICAL_CHECK_PULSE_OUTPUT_3"; - _logOutPut = "Strong"; + _logOutPut = localize "STR_ACE_MEDICAL_CHECK_PULSE_STRONG"; } else { _heartRateOutput = "STR_ACE_MEDICAL_CHECK_PULSE_OUTPUT_4"; - _logOutPut = "Normal"; + _logOutPut = localize "STR_ACE_MEDICAL_CHECK_PULSE_NORMAL"; }; }; }; @@ -49,5 +49,5 @@ if (_heartRate > 1.0) then { ["displayTextStructured", [_caller], [[_heartRateOutput, [_unit] call EFUNC(common,getName), round(_heartRate)], 1.5, _caller]] call EFUNC(common,targetEvent); if (_logOutPut != "") then { - [_unit,"activity","%1 checked Heart Rate: %2",[[_caller] call EFUNC(common,getName),_logOutPut]] call FUNC(addToLog); + [_unit,"activity", localize "STR_ACE_MEDICAL_CHECK_PULSE_LOG",[[_caller] call EFUNC(common,getName),_logOutPut]] call FUNC(addToLog); }; diff --git a/addons/medical/functions/fnc_displayPatientInformation.sqf b/addons/medical/functions/fnc_displayPatientInformation.sqf index 65c98c4b85..1fc1051efa 100644 --- a/addons/medical/functions/fnc_displayPatientInformation.sqf +++ b/addons/medical/functions/fnc_displayPatientInformation.sqf @@ -186,7 +186,7 @@ if (_show) then { _lbCtrl lbSetColor [_foreachIndex + _amountOfGeneric, _x select 1]; }foreach _allInjuryTexts; if (count _allInjuryTexts == 0) then { - _lbCtrl lbAdd "No injuries on this bodypart.."; + _lbCtrl lbAdd (localize "STR_ACE_Medical_NoInjuriesBodypart"); }; _logCtrl = (_display displayCtrl 302); diff --git a/addons/medical/functions/fnc_displayTriageCard.sqf b/addons/medical/functions/fnc_displayTriageCard.sqf index 5feb209b44..8e9660a3d5 100644 --- a/addons/medical/functions/fnc_displayTriageCard.sqf +++ b/addons/medical/functions/fnc_displayTriageCard.sqf @@ -58,7 +58,7 @@ if (_show) then { }foreach _log; if (count _triageCardTexts == 0) then { - _lbCtrl lbAdd "No entries on this triage card.."; + _lbCtrl lbAdd (localize "STR_ACE_MEDICAL_TriageCard_NoEntry"); }; { _lbCtrl lbAdd _x; diff --git a/addons/medical/functions/fnc_setUnconscious.sqf b/addons/medical/functions/fnc_setUnconscious.sqf index c5809f8c8e..86f9425d23 100644 --- a/addons/medical/functions/fnc_setUnconscious.sqf +++ b/addons/medical/functions/fnc_setUnconscious.sqf @@ -26,7 +26,7 @@ if !(_set) exitwith { _unit setvariable ["ACE_isUnconscious", false, true]; }; -if !(!(isNull _unit) && {(_unit isKindOf "CaManBase") && ([_unit] call EFUNC(common,isAwake))}) exitwith{}; +if !(!(isNull _unit) && {(_unit isKindOf "CAManBase") && ([_unit] call EFUNC(common,isAwake))}) exitwith{}; if (!local _unit) exitwith { [[_unit], QUOTE(DFUNC(setUnconscious)), _unit, false] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ @@ -86,4 +86,7 @@ _startingTime = time; [DFUNC(unconsciousPFH), 0.1, [_unit,_animState, _originalPos, _startingTime, _minWaitingTime, false, vehicle _unit isKindOf "ParachuteBase"] ] call CBA_fnc_addPerFrameHandler; +// unconscious can't talk +[_unit, "isUnconscious"] call EFUNC(common,muteUnit); + ["medical_onUnconscious", [_unit, true]] call EFUNC(common,globalEvent); diff --git a/addons/medical/functions/fnc_unconsciousPFH.sqf b/addons/medical/functions/fnc_unconsciousPFH.sqf index 1d7558e5fc..fc60c2bb02 100644 --- a/addons/medical/functions/fnc_unconsciousPFH.sqf +++ b/addons/medical/functions/fnc_unconsciousPFH.sqf @@ -31,6 +31,8 @@ if (!alive _unit) exitwith { [_unit, false] call EFUNC(common,disableAI); //_unit setUnitPos _originalPos; _unit setUnconscious false; + + [_unit, "isUnconscious"] call EFUNC(common,unmuteUnit); ["medical_onUnconscious", [_unit, false]] call EFUNC(common,globalEvent); [(_this select 1)] call cba_fnc_removePerFrameHandler; @@ -71,6 +73,8 @@ if !(_unit getvariable ["ACE_isUnconscious",false]) exitwith { _unit setUnconscious false; + [_unit, "isUnconscious"] call EFUNC(common,unmuteUnit); + // ensure this statement runs only once _args set [5, true]; }; diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index a96f2bb887..f7d271798e 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -1,15 +1,37 @@  + + INJURIES + VERLETZUNGEN + LESIONI + ТРАВМЫ + BLESSURES + OBRAŻENIA + + + No injuries on this bodypart ... + Körperteil nicht verletzt ... + Non ci sono lesioni in questa parte del corpo ... + Данная часть тела не повреждена ... + Aucune blessures sur cette partie du corps + Brak obrażeń na tej części ciała ... + Litter Simulation Detail Detale zużytych medykamentów Detalle de simulación de basura + Количество мусора от медицины + Dettagli Simulazione Rifiuti + Niveau de simulation des détritus Litter simulation detail level sets the number of litter items which will be locally spawned in the client. Excessive amounts in local areas could cause FPS lag, so this is a client only setting. Opcja ta ustawia liczbę zużytych medykamentów, jakie pojawiają się lokalnie wokół gracza. Ich zbyt duża ilość może spowodować spadki FPS, dlatego jest to ustawienie tylko po stronie klienta. Detalle simulación de basura establece el número de artículos de basura que se generan a nivel local en el cliente. Las cantidades excesivas en áreas locales podrían causar caída de rendimiento, así que esto es un ajuste de cliente únicamente. + Устанавливает количество мусора, который появляется после использования мед. препаратов. Большое количество мусора может уменьшить производительность, поэтому данная настройка локальна для клиента. + Il livello di dettagli della simulazione dei rifiuti indica il numero di rifiuti che verranno creati localmente nel client. La creazione di troppi rifiuti in aree locali potrebbe causare lag e calo di FPS. Questo è un settaggio client. + Le nieau de simulation des détritus règle la quantité de déchets qui vont être créer localement dans le client. Des quantitées excessive dans certaines zones locales aurait pu causer des chutes D'IPS, donc c'est une option client uniquement. Inject Atropine @@ -41,7 +63,7 @@ Wstrzyknij morfinę Aplikovat morfin Ввести морфин - Morphine + Injecter de la morphine Morfium beadása Injetar Morfina Inietta Morfina @@ -82,7 +104,7 @@ Apply Tourniquet - Aderpresse anwenden + Tourniquet anwenden Aplicar torniquete Aplikovat škrtidlo Załóż stazę @@ -257,7 +279,7 @@ Applying Tourniquet ... - Setze Aderpresse an ... + Setze Tourniquet an ... Aplicando torniquete ... Aplikuji škrtidlo Zakładanie stazy ... @@ -328,7 +350,7 @@ Проверить пульс Zkontrolovat pulz Sprawdź tętno - Vérifier les pulsations + Vérifier le pouls Pulzus ellenőrzése Controlla il polso @@ -345,7 +367,7 @@
Triage Card - Verletztenanhängekarte + Triagekarte Tarjeta de triaje Медкарта Karta segregacyjna @@ -354,28 +376,68 @@ Orvosi lap Triage Card + + No entries on this triage card. + Keine Einträge auf der Triagekarte + Nessuna voce sulla Triage Card + Нет записей. + Aucune entrée sur cette carte de triage + Brak wpisów w tej karcie segregacyjnej. + Tourniquet - Aderpresse + Tourniquet Torniquete Жгут Škrtidlo Staza - Garrot + Tourniquet Érszorító Laccio emostatico Remove Tourniquet - Aderpresse entfernen + Tourniquet entfernen Quitar torniquete Снять жгут Sundat škrtidlo Zdejmij stazę - Enlever le garrot + Enlever le Tourniquet Érszorító leszedése Rimuovi laccio emostatico + + Diagnose + Diagnose + Diagnosi + Диагностика + Diagnostiquer + Diagnoza + + + Diagnosing ... + Diagnostizieren ... + Diagnosi in corso... + Диагностика ... + Diagnostic en cours + Diagnozowanie ... + + + CPR + HLW + RCP + Сердечно-легочная реанимация + RPC + RKO + + + Performing CPR ... + HLW durchführen ... + Eseguendo RCP... + Сердечно-легочная реанимация ... + RPC en cours + Przeprowadzanie RKO ... + Give Blood IV (1000ml) Bluttransfusion IV (1000ml) @@ -444,7 +506,7 @@ Give Saline IV (1000ml) - Kochsaltzlösung IV (1000ml) + Kochsalzlösung IV (1000ml) Dar Salino IV (1000ml) Перелить пакет физраствора (1000 мл) Podaj sól fizjologiczną IV (1000ml) @@ -455,7 +517,7 @@ Give Saline IV (500ml) - Kochsaltzlösung IV (500ml) + Kochsalzlösung IV (500ml) Dar Salino IV (500ml) Перелить пакет физраствора (500 мл) Podaj sól fizjologiczną IV (500ml) @@ -466,7 +528,7 @@ Give Saline IV (250ml) - Kochsaltzlösung IV (250ml) + Kochsalzlösung IV (250ml) Dar Salino IV (250ml) Перелить пакет физраствора (250 мл) Podaj sól fizjologiczną IV (250ml) @@ -481,7 +543,7 @@ Menor Несрочная помощь Normalny - Léger + Mineur Minimální Enyhe Minore @@ -609,10 +671,10 @@ Tourniquet [CAT] - Aderpresse [CAT] + Tourniquet [CAT] Жгут Torniquete [CAT] - Garrot [CAT] + Tourniquet [CAT] Staza [typ. CAT] Škrtidlo [CAT] Érszorító [CAT] @@ -658,7 +720,7 @@ Bandage fait d'un matériel spécial utilisé pour couvrir une blessure, qui peut etre appliqué dès que le saignement a été stoppé. Opatrunek materiałowy, używany do przykrywania ran, zakładany na ranę po zatamowaniu krwawienia. Egy különleges anyagú kötszer sebek betakarására, amelyet a vérzés elállítása után helyeznek fel. - Una benda apposta, utilizzata per coprire una ferita, la quale è applicato sopra di essa una volta fermata l'emorragia. + Una benda apposita, utilizzata per coprire una ferita, la quale è applicata sopra di essa una volta fermata l'emorragia. Packing Bandage @@ -672,7 +734,7 @@ Used to pack medium to large wounds and stem the bleeding - Verwendet, um mittlere bis große Wunden abzudecken und Blutungen zu stoppen + Wird verwendet, um mittlere bis große Wunden abzudecken und Blutungen zu stoppen Для тампонирования ран среднего и большого размера и остановки кровотечения. Se utiliza para vendar heridas medianas o grandes y detener el sangrado Utilisé pour couvrir des blessures de taille moyenne à grande. Arrête l'hémorragies @@ -687,7 +749,8 @@ Bandage servant à recouvrir les blessures pour arrêter les hémmoragies et faciliter la guérisson. Recouvrir une blessure est optionnel dans le cas de blessures polytraumatiques Opatrunek stosowany w celu zatrzymania krwawienia i osłony większych ran. Egy kötszerfajta, melyet a sebek nyomására használnak a vérzés elállítása és sebgyógyulás érdekében. A nyomókötés egy lehetőség nagyobb polytraumatikus sérülések esetén. - Un bendaggio usato per bendare ferite con emorragie e facilitare la guarigione. Bendare una ferita è una opzione su ferite di vario tipo. + Un bendaggio usato per coprire la ferita, fermare il sanguinamento e facilitarne la guarigione. Questa tecnica è opzionale su ferite multiple. + Ein Verband, um die Wunde abzudecken und die Wundheilung zu fördern. Wunden abdecken ist eine Option bei größeren Polytraumen Bandage (Elastic) @@ -712,7 +775,7 @@ Allows an even compression and extra support to the injured area. - + Ermöglicht eine gleichmäßige Kompression und zusätzliche Unterstützung für den verletzten Bereich. Давящая повязка обеспечивает равномерное сжатие и дополнительную поддержку поврежденной области Ce bandage peut être utilisé pour compresser la plaie afin de ralentir le saignement et assurer la tenue du bandage lors de mouvement. Elastyczna opaska podtrzymująca opatrunek oraz usztywniająca okolice stawów. @@ -722,10 +785,10 @@ Tourniquet (CAT) - Aderpresse (CAT) + Tourniquet [CAT] Жгут Torniquete (CAT) - Garrot (CAT) + Tourniquet (CAT) Staza (typ. CAT) Škrtidlo (CAT) Érszorító (CAT) @@ -830,7 +893,7 @@ Aumenta la frecuencia cardiaca y contraresta los efectos de las reacciones alérgicas Augmente la fréquence cadiaque et annule les effets d'une réaction anaphylactique Adrenalina. Zwiększa puls i przeciwdziała efektom wywołanym przez reakcje alergiczne - Steigert die Herzfrequenz, um den Effekt von allergischen Reaktionen zu bekämpfen + Steigert die Herzfrequenz und bekämpft Symptome von allergischen Reaktionen. Növeli a szívverést és ellenzi az allergiás reakciók hatásait Aumenta il battito cardiaco e combatte gli effetti di reazioni allergiche. @@ -841,6 +904,7 @@ Medicament qui fonctionne sur le système nerveux sympathique créant une dilatation des bronches, augmente la fréquence cardiaque et annule les effets d'une réaction allergique (anaphylaxie). Utilisé lors d'arrêt cardio-respiratoire pour augmenter les chances de retrouver un pouls. EpiPen z adrenaliną ma działanie sympatykomimetyczne, tj. pobudza receptory alfa- i beta-adrenergiczne. Pobudzenie układu współczulnego prowadzi do zwiększenia częstotliwości pracy serca, zwiększenia pojemności wyrzutowej serca i przyśpieszenia krążenia wieńcowego. Pobudzenie oskrzelowych receptorów beta-adrenergicznych wywołuje rozkurcz mięśni gładkich oskrzeli, co w efekcie zmniejsza towarzyszące oddychaniu świsty i duszności. Una sostanza che permette di dilatare i bronchi, aumentare il battito cardiaco e combattere effetti di reazioni allergiche. Usato anche in casi di arresto cardiaco. + Ein Medikament, dass die Bronchien erweitert, die Herzfrequenz erhöht und Symptome von allergischen Reaktionen(Anaphylaxie) bekämpft. Wird bei plötzlichem Herzstillstand verabreicht.
Plasma IV (1000ml) @@ -860,6 +924,7 @@ Składnik krwi, używany do zwiększenia jej objętości. Egy térfogatnövelő vérkiegészítmény. Aiuta ad aumentare il volume sanguigno. + Volumenerweiterungsmittel (künstliches Blutvolumen) A volume-expanding blood supplement. @@ -869,6 +934,7 @@ Składnik krwi, używany do zwiększenia jej objętości. Egy térfogatnövelő vérkiegészítmény. Aiuta ad aumentare il volume sanguigno. + Volumenerweiterungsmittel (künstliches Blutvolumen) Plasma IV (500ml) @@ -908,6 +974,7 @@ Krew IV, używana do uzupełnienia krwi u pacjenta, trzymać w warunkach chłodniczych Vér-infúzió, intravénás bejuttatásra egy páciensnek (hidegen tárolandó) Sangue usato per ripristinare pazienti in cui si è verificata una perdita di sangue (conservare al fresco) + Blut IV, Bluthaushalt des Patienten wiederherstellen. (Kühl halten) O Negative infusion blood used in strict and rare events to replenish blood supply usually conducted in the transport phase of medical care. @@ -916,6 +983,7 @@ Utilice sólo durante gran pérdida de sangre para reemplazar el volumen de sangre perdida. Uso habitual durante el transporte de heridos. Sangue 0 negativo usato per ripristinare sangue in pazienti in cui si è verificata una perdita di sangue. Cullot sanguin O- utilisé dans de rares et stricts cas pour compléter une perte de sang importante. Administré normalement lors d'un MEDEVAC + O Negative Blutinfusion wird nur in seltenen Fällen verwendet, um den Bluthaushalt des Patienten zu ergänzen. Wird in der Regel wärend der Transportphase durchgeführt. Blood IV (500ml) @@ -955,6 +1023,7 @@ Sól fizjologiczna, podawana dożylnie (IV), używana w celu uzupełnienia krwi u pacjenta 0,9%-os sósvíz-infúzió, a páciens vérmennyiségének helyreállítására Soluzione salina, usata per ripristinare sangue nei pazienti. + Kochsalzlösung, ein medizinisches Volumenersatzmittel A medical volume-replenishing agent introduced into the blood system through an IV infusion. @@ -964,6 +1033,7 @@ Używany w medycynie w formie płynu infuzyjnego jako środek nawadniający i uzupełniający niedobór elektrolitów, podawany dożylnie (IV). Egy orvosi térfogat-helyreállító készítmény, melyet intravénás módon lehet a szervezetbe juttatni. Una soluzione medica per ripristinare il volume del sangue introdotta tramite trasfusione IV. + Ein medizinisches Volumenersatzmittel, dass durch einen intravenösen Zugang in den Blutkreislauf verabreicht wird. Saline IV (500ml) @@ -1019,7 +1089,7 @@ Personal Aid Kit Аптечка Botiquín de primeros auxilios - Équipement de support vital + Trousse de premiers soins Apteczka osobista Persönliches Verbandpäckchen Elsősegélycsomag @@ -1036,12 +1106,18 @@ Include vario materiale medico per trattamenti avanzati. - - - - + Personal Aid Kit for in field stitching or advanced treatment W znacznym stopniu poprawia stan pacjenta - + Полевая аптчека для продвинутого лечения и зашивания ран + Persönliches Verbandspäckchen zum ambulanten Nähen und fortgeschrittener Behandlung. + Trousse de premiers soins pour coudre sur le terrain et traitements avancés. + + + Use Personal Aid Kit + Verbandpäckchen benutzen + Использовать аптечку + Utiliser la Trousse de premier soins + Użyj apteczki osobistej Surgical Kit @@ -1073,6 +1149,13 @@ Sebészeti készlet komplex orvosi feladatok terepen való ellátására Kit chirurgico per trattamenti avanzati sul campo. + + Use Surgical Kit + Operationsset benutzen + Использовать хирургический набор + Utiliser la trousse chirugicale + Zszyj rany + Bodybag Housse mortuaire @@ -1123,6 +1206,13 @@ Vérnyomás megmérése... Controllando la pressione sanguigna.. + + %1 checked Blood Pressure: %2 + %1 kontrollierte Blutdruck: %2 + %1 проверил артериальное давление: %2 + %1 à vérifié la tension: %2 + %1 sprawdził ciśnienie krwi: %2 + You checked %1 Vous diagnostiquez %1 @@ -1141,6 +1231,7 @@ A vérnyomás %2/%3 Hai riscontrato una pressione di %2/%3 Wyczuwasz ciśnienie krwi o wartości %2/%3 + Der Blutdruck liegt bei %2/%3 You find a low blood pressure @@ -1192,6 +1283,34 @@ Nem sikerült a vérnyomás megmérése Manca strumento per misurare pressione sanguigna + + Low + Niedrig + Низкое + Faible + Niskie + + + Normal + Normal + Нормальное + Normale + Normalne + + + High + Hoch + Высокое + Haute + Wysokie + + + No Blood Pressure + Kein Blutdruck + Артериальное давление отсутствует + Aucune tension + Brak ciśnienia krwi + Pulse Пульс @@ -1203,14 +1322,14 @@ Polso - Checking Heart Rate.. + Checking Heart Rate ... Vérification du rythme cardiaque ... Проверка пульса ... - Comprobando ritmo cardíaco... - Sprawdzanie tętna... - Kontrolliere Herzfrequenz + Comprobando ritmo cardíaco ... + Sprawdzanie tętna ... + Kontrolliere Herzfrequenz ... Szívverés-szám mérése... - Controllando il battito cardiaco.. + Controllando il battito cardiaco ... You checked %1 @@ -1218,13 +1337,41 @@ Vous examinez %1 Examinando a %1 Zbadałeś %1 - Kontrolliertt %1 + Kontrolliert %1 A %1 ellenőrizve Hai diagnosticato %1 + + %1 checked Heart Rate: %2 + %1 kontrollierte Herzfrequenz: %2 + %1 проверил пульс: %2 + %1 à vérifié le rythme cardiaque: %2 + %1 sprawdził tętno: %2 + + + Weak + Schwach + Слабый + Faible + Słabe + + + Normal + Normal + Нормальный + Normal + Normalne + + + Strong + Stark + Сильный + Fort + Silne + You find a Heart Rate of %2 - Rythme carquiaque de %2 + Rythme cardiaque de %2 Пульс %2 уд./мин. El ritmo cardíaco es de %2 Wyczuwasz tętno o wartości %2 @@ -1318,37 +1465,65 @@ Vous avez examiné %1 Examinas a %1 Zbadałeś %1 - Du versucht %1 anzusprechen + Du hast versucht, %1 anzusprechen Megnézted %1-t Hai controllato %1 Patient %1<br/>is %2.<br/>%3.<br/>%4 El paciente %1<br/>está %2.<br/>%3.<br/>%4 + Пациент %1<br/>%2.<br/>%3.<br/>%4 + Patient %1<br/>ist %2.<br/>%3.<br/>%4 + Patient %1<br/>est %2.<br/>%3.<br/> + Pacjent %1<br/>jest %2.<br/>%3.<br/>%4 alive - vivo + vivo + жив + lebendig + vivant + żywy dead - muerto + muerto + мертв + tot + mort + martwy He's lost some blood - Ha perdido algo de sangre + Ha perdido algo de sangre + Есть кровопотеря + Er hat etwas Blut verloren + Il à perdu du sang + Stracił trochę krwi He hasn't lost blood - No ha perdido sangre + No ha perdido sangre + Нет кровопотери + Er hat kein Blut verloren + il n'a pas perdu de sang + Nie stracił krwi He is in pain - Tiene dolor + Tiene dolor + Испытывает боль + Er hat Schmerzen + il souffre + Odczuwa ból He is not in pain - No tiene dolor + No tiene dolor + Не испытывает боли + Er hat keine Schmerzen + Il ne souffre pas + Nie odczuwa bólu Bandaged @@ -1358,6 +1533,7 @@ Zabandażowano Bekötözve Bendato + verbunden You bandage %1 (%2) @@ -1367,6 +1543,7 @@ Bandażujesz %1 (%2) Bekötözöd %1-t (%2) Stai bendando %1 (%2) + Du verbindest %1 (%2) %1 is bandaging you @@ -1376,10 +1553,12 @@ %1 bandażuje Ciebie %1 bekötöz téged %1 ti sta bendando + %1 verbindet dich - You start stitching injures from %1 (%2) + You start stitching injuries from %1 (%2) Вы зашиваете ранения от %1 (%2) + Du nähst die Wunden von %1 (%2) Vous suturez %1 (%2) Estás suturando heridas de %1 en %2 Zszywasz rany %1 (%2) @@ -1389,8 +1568,9 @@ Stitching Наложение швов - Sutures Suturando + Nähen + Sutures Szycie Összevarrás Suturando @@ -1398,8 +1578,9 @@ You treat the airway of %1 Вы интубируете раненого %1 - Vous traitez les voies respiratoires de %1 Estás intubando a %1 + Du behandelst die Atemwege von %1 + Vous traitez les voies respiratoires de %1 Udrażniasz drogi oddechowe %1 Kezeled %1 légútját Controlli le vie respiratorie di %1 @@ -1420,6 +1601,7 @@ %1 traite vos voies respiratoires %1 te está intubando %1 udrażnia Twoje drogi oddechowe + %1 behandelt deine Atemwege %1 kezeli a légútadat %1 ti sta trattando le vie respiratorie @@ -1487,6 +1669,7 @@ Unload patient Descargar al paciente Выгрузить пациента + Patient Ausladen Wyładuj pacjenta Débarquer le patient Sebesült kihúzása @@ -1496,6 +1679,7 @@ Load patient Cargar al paciente en Погрузить пациента + Patient Einladen Załaduj pacjenta Embarquer le patient Sebesült berakása @@ -1505,6 +1689,7 @@ Place body in bodybag Colocar cuerpo en bolsa para cadáveres Поместить тело в мешок для трупов + Körper in Leichesack verstauen Zapakuj ciało do worka na zwłoki Mettre le corps dans la housse mortuaire Test hullazsákba helyezése @@ -1514,6 +1699,7 @@ Placing body in bodybag Colocando cuerpo en bolsa para cadáveres Упаковка тела ... + Verstaue Körper in Leichensack Pakowanie ciała do worka na zwłoki Placement du corps dans la housse Test hullazsákba helyezése ... @@ -1523,6 +1709,7 @@ %1 has bandaged patient %1 has vendado al paciente %1 перевязал пациента + %1 hat den Patienten verbunden %1 zabandażował pacjenta %1 a pansé le patient %1 bekötözte a pácienst @@ -1531,6 +1718,7 @@ %1 used %2 %1 usó %2 + %1 benutzt %2 %1 использовал %2 %1 użył %2 %1 utilise %2 @@ -1541,6 +1729,7 @@ %1 has given an IV %1 ha puesto una IV %1 провел переливание + %1 hat eine Infusion verabreicht %1 podał IV %1 a administré une IV %1 infúziót adott @@ -1550,6 +1739,7 @@ %1 applied a tourniquet %1 aplicado torniquete %1 наложил жгут + %1 hat einen Tourniquet angelegt %1 założył stazę %1 a appliqué un garrot %1 felhelyezett egy érszorítót @@ -1663,5 +1853,236 @@ Aberración cromática Aberration chromatique + + Scrape + Kratzer + Ссадина + Eraflure + Draśnięcie + + + Minor Scrape + Kleiner Kratzer + Малая ссадина + Eraflure Mineure + Pomniejsze draśnięcie + + + Medium Scrape + Mittlerer Kratzer + Средняя ссадина + Moyenne Eraflure + Średnie draśnięcie + + + Large Scrape + Großer Kratzer + Большая ссадина + Large Eraflure + Duże draśnięcie + + + Avulsion + Avulsion + Рваная рана + Avulsion + Rana płatowa + + + Minor Avulsion + Kleine Avulsion + Малая рваная рана + Avulsion Mineure + Pomniejsza rana płatowa + + + Medium Avulsion + Mittlere Avulsion + Средняя рваная рана + Avulsion Moyenne + Średnia rana płatowa + + + Large Avulsion + Große Avulsion + Большая рваная рана + Large Avulsion + Duża rana płatowa + + + Bruise + Prellung + Ушиб + Hématome + Stłuczenie + + + Minor Bruise + Kleine Prellung + Малый ушиб + Hématome Mineur + Pomniejsze stłuczenie + + + Medium Bruise + Mittlere Prellung + Средний ушиб + Hématome Moyen + Średnie stłuczenie + + + Large Bruise + Große Prellung + Большой ушиб + Large Hématome + Duże stłuczenie + + + Crushed tissue + Quetschverletzung + Компресионная травма + Tissu écrasé + Zgniecienie tkanek miękkich + + + Minor crushed tissue + Kleine Quetschverletzung + Малая компрессионная травма + Tissu écrasé Mineur + Pomniejsze zgniecienie tkanek miękkich + + + Medium crushed tissue + Mittlere Quetschverletzung + Средняя компрессионная травма + Tissu écrasé Moyen + Średnie zgniecienie tkanek miękkich + + + Large crushed tissue + Große Quetschverletzung + Большая компрессионная травма + Tissu écrasé Large + Duże zgniecienie tkanek miękkich + + + Cut + Schnittwunde + Резаная рана + Coupure + Rana cięta + + + Small Cut + Kleine Schnittwunde + Малая резаная рана + Pomniejsza rana cięta + Petite Coupure + + + Medium Cut + Mittlere Schnittwunde + Средняя резаная рана + Średnia rana cięta + Moyenne Coupure + + + Large Cut + Große Schnittwunde + Большая резаная рана + Duża rana cięta + Large Coupure + + + Tear + Riss + Рваная рана + Rozerwanie skóry + Déchirure + + + Small Tear + Kleiner Riss + Малая рваная рана + Pomniejsze rozerwanie skóry + Petite Déchirure + + + Medium Tear + Mittlerer Riss + Средняя рваная рана + Średnie rozerwanie skóry + Moyenne Déchirure + + + Large Tear + Großer Riss + Большая рваная рана + Duże rozerwanie skóry + Large Déchirure + + + Velocity Wound + Ballistisches Trauma + Огнестрельная рана + Rana postrzałowa + Blessure de vélocité + + + Smal Velocity Wound + Kleines Ballistisches Trauma + Малая огнестрельная рана + Pomniejsza rana postrzałowa + Petite Bessure de vélocité + + + Medium Velocity Wound + Mittleres Ballistisches Trauma + Средняя огнестрельная рана + Średnia rana postrzałowa + Moyenne Blessure de vélocité + + + Large Velocity Wound + Großes Ballistisches Trauma + Большая огнестрельная рана + Duża rana postrzałowa + Large Blessure de vélocité + + + Puncture Wound + Stichwunde + Колотая рана + Rana kłuta + Blessure de perforation + + + Minor Puncture Wound + Kleine Stichwunde + Малая колотая рана + Pomniejsza rana kłuta + Blessure de perforation Mineure + + + Medium Puncture Wound + Mittlere Stichwunde + Средняя колотая рана + Średnia rana kłuta + Blessure de perforation Moyenne + + + Large Puncture Wound + Große Stichwunde + Большая колотая рана + Duża rana kłuta + Large Blessure de perforation + + + Broken Femur + Gebrochener Oberschenkelknochen + Перелом + Zkłamana kość udowa + Femur Cassé + \ No newline at end of file diff --git a/addons/medical/ui/RscTitles.hpp b/addons/medical/ui/RscTitles.hpp index 1962daec80..dece0e0a8d 100644 --- a/addons/medical/ui/RscTitles.hpp +++ b/addons/medical/ui/RscTitles.hpp @@ -60,7 +60,7 @@ class Rsctitles { font = "PuristaMedium"; colorText[] = {0.95, 0.95, 0.95, 0.75}; colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.9])"}; - text = "INJURIES"; + text = "$STR_ACE_Medical_Injuries"; }; class InjuryList: ACE_gui_listBoxBase { idc = 200; diff --git a/addons/medical/ui/triagecard.hpp b/addons/medical/ui/triagecard.hpp index f1b98f1e2d..a93440d13a 100644 --- a/addons/medical/ui/triagecard.hpp +++ b/addons/medical/ui/triagecard.hpp @@ -49,7 +49,7 @@ class GVAR(triageCard) { font = "PuristaMedium"; colorText[] = {0,0,0,1}; colorBackground[] = {0,0,0,0}; - text = "TRIAGE CARD"; + text = "$STR_ACE_MEDICAL_ACTIONS_TriageCard"; }; class TriageList: ACE_gui_listBoxBase { idc = 200; diff --git a/addons/microdagr/stringtable.xml b/addons/microdagr/stringtable.xml index 53c47314d8..d0d324b24c 100644 --- a/addons/microdagr/stringtable.xml +++ b/addons/microdagr/stringtable.xml @@ -138,7 +138,7 @@ Range: Distancia: - Reichweite: + Distanz: Дистанция: Dystans: Distance: @@ -236,7 +236,7 @@ Toggle MicroDAGR Display Mode - MicoDAGR Anzeigemodus Wechseln + MicoDAGR Anzeigemodus wechseln Cambiar modo de pantalla del MicroDAGR Сменить режим показа MicroDAGR Przełącz GUI MicroDAGR @@ -258,7 +258,7 @@ Configure MicroDAGR - MicroDAGR Konfiguriere + Konfiguriere MicroDAGR Configurar MicroDAGR Настроить MicroDAGR Konfigurovat MicroDAGR GPS @@ -279,4 +279,4 @@ Chiudi MicroDAGR - \ No newline at end of file + diff --git a/addons/missileguidance/stringtable.xml b/addons/missileguidance/stringtable.xml index 78387c65c6..5516e1e5db 100644 --- a/addons/missileguidance/stringtable.xml +++ b/addons/missileguidance/stringtable.xml @@ -1,5 +1,4 @@  - @@ -18,6 +17,8 @@ Advanced missile guidance, or AMG, provides multiple enhancements to missile locking and firing. It is also a framework required for missile weapon types. Zaawansowane namierzanie rakiet, lub ZNR, dostarcza wiele poprawek do systemu namierzania rakiet oraz dodaje nowe tryby strzału. Jest to wymagana opcja dla broni rakietowych. Guiado Avanzado de Misiles, o AMG en sus siglas en inglés, ofrece múltiples mejoras en el fijado y disparo de misiles. Es también un sistema requerido para armas de tipo misil. + Das Erweiterte Raketenlenksystem, auch AMG genannt, bietet viele Verbesserungen zum Aufschalten und Feuern mittels gelenkten Raketen. + Le guidage avancé de missile, ou AMG en anglais, apporte de multiple améliorations au verouillage et au tir de missiles. C'est aussi un framework requis pour tout arme de type missile. Hydra-70 DAGR Missile @@ -45,8 +46,9 @@ Hydra-70 DAGR Laser Guided Missile - Misil guiado por láser Hydra-70 DAGR Missile à guidage Hydra-70 DAGR + Misil guiado por láser Hydra-70 DAGR + Missile à guidage laser Hydra-70 DAGR Laserowo naprowadzana rakieta Hydra-70 DAGR Hydra-70 DAGR lasergelenkte Rakete Hydra-70 DAGR laserem naváděná střela diff --git a/addons/mk6mortar/$PBOPREFIX$ b/addons/mk6mortar/$PBOPREFIX$ new file mode 100644 index 0000000000..a21eaf95f0 --- /dev/null +++ b/addons/mk6mortar/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\Addons\mk6mortar \ No newline at end of file diff --git a/addons/mk6mortar/CfgEventHandlers.hpp b/addons/mk6mortar/CfgEventHandlers.hpp new file mode 100644 index 0000000000..34c6ecc22c --- /dev/null +++ b/addons/mk6mortar/CfgEventHandlers.hpp @@ -0,0 +1,17 @@ +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preInit)); + }; +}; +class Extended_PostInit_EventHandlers { + class ADDON { + clientInit = QUOTE( call COMPILE_FILE(XEH_clientInit) ); + }; +}; +class Extended_FiredBIS_EventHandlers { + class Mortar_01_base_F { + class ADDON { + firedBIS = QUOTE(_this call FUNC(handleFired)); + }; + }; +}; diff --git a/addons/mk6mortar/CfgVehicles.hpp b/addons/mk6mortar/CfgVehicles.hpp new file mode 100644 index 0000000000..1c90842d5f --- /dev/null +++ b/addons/mk6mortar/CfgVehicles.hpp @@ -0,0 +1,83 @@ +class CfgVehicles { + class Man; + class CAManBase: Man { + class ACE_SelfActions { + class ACE_Equipment { + class GVAR(rangetable) { + displayName = "$STR_ACE_MK6MORTAR_rangetable_action"; + condition = QUOTE(_this call FUNC(rangeTableCanUse)); + statement = QUOTE(_this call FUNC(rangeTableOpen)); + priority = 0; + icon = QUOTE(PATHTOF(UI\icon_rangeTable.paa)); + exceptions[] = {"notOnMap", "isNotInside"}; + }; + }; + }; + }; + + class LandVehicle; + class StaticWeapon: LandVehicle { + class Turrets { + class MainTurret; + }; + }; + class StaticMortar: StaticWeapon { + class Turrets: Turrets { + class MainTurret: MainTurret { + }; + }; + }; + class Mortar_01_base_F: StaticMortar { + class Turrets: Turrets { + class MainTurret: MainTurret { + turretInfoType = "ACE_Mk6_RscWeaponRangeArtillery"; + }; + }; + class ACE_SelfActions { + class GVAR(toggleMils) { + displayName = "Toggle MILS"; + condition = QUOTE(true); + statement = QUOTE(_this call FUNC(toggleMils)); + exceptions[] = {}; + }; + }; + }; + + class Logic; + class Module_F: Logic { + class ModuleDescription {}; + }; + class GVAR(module): Module_F { + author = "$STR_ACE_Common_ACETeam"; + category = "ACE"; + displayName = "MK6 Settings"; + function = QFUNC(moduleInit); + scope = 2; + isGlobal = 0; + icon = QUOTE(PATHTOF(UI\Icon_Module_mk6_ca.paa)); + functionPriority = 0; + class Arguments { + class airResistanceEnabled { + displayName = "Air Resitance"; + description = "For Player Shots, Model Air Restiance and Wind Effects"; + typeName = "BOOL"; + defaultValue = 1; + }; + class allowComputerRangefinder { + displayName = "Allow MK6 Computer"; + description = "Show the Computer and Rangefinder (these NEED to be removed if you enable air resistance)"; + typeName = "BOOL"; + defaultValue = 0; + }; + class allowCompass { + displayName = "Allow MK6 Compass"; + description = "Show the MK6 Digital Compass"; + typeName = "BOOL"; + defaultValue = 1; + }; + }; + class ModuleDescription: ModuleDescription { + description = ""; + }; + }; +}; diff --git a/addons/mk6mortar/CfgWeapons.hpp b/addons/mk6mortar/CfgWeapons.hpp new file mode 100644 index 0000000000..7d5153e9ad --- /dev/null +++ b/addons/mk6mortar/CfgWeapons.hpp @@ -0,0 +1,15 @@ +class CfgWeapons { + class ACE_ItemCore; + class InventoryItem_Base_F; + + class ACE_RangeTable_82mm: ACE_ItemCore { + author = "$STR_ACE_Common_ACETeam"; + scope = 2; + displayName = "$STR_ACE_MK6MORTAR_rangetable_name"; + descriptionShort = "$STR_ACE_MK6MORTAR_rangetable_description"; + picture = QUOTE(PATHTOF(UI\icon_rangeTable.paa)); + class ItemInfo: InventoryItem_Base_F { + mass = 0.5; + }; + }; +}; diff --git a/addons/mk6mortar/README.md b/addons/mk6mortar/README.md new file mode 100644 index 0000000000..84c7a6e984 --- /dev/null +++ b/addons/mk6mortar/README.md @@ -0,0 +1,10 @@ +ace_mk6mortar +========== + +Tweaks the mk6 mortar from Arma3 + +## Maintainers + +The people responsible for merging changes to this component or answering potential questions. + +- [PabstMirror](https://github.com/PabstMirror) diff --git a/addons/mk6mortar/RscInGameUI.hpp b/addons/mk6mortar/RscInGameUI.hpp new file mode 100644 index 0000000000..102362216a --- /dev/null +++ b/addons/mk6mortar/RscInGameUI.hpp @@ -0,0 +1,44 @@ +class RscInGameUI { + class RscWeaponRangeArtillery { + class CA_IGUI_elements_group: RscControlsGroup {}; + }; + class ACE_Mk6_RscWeaponRangeArtillery: RscWeaponRangeArtillery { + onLoad = QUOTE(uiNamespace setVariable [ARR_2('ACE_Mk6_RscWeaponRangeArtillery',(_this select 0))]; _this call FUNC(turretDisplayLoaded);); + controls[] = {"ACE_MILS_GROUP", "CA_IGUI_elements_group","CA_RangeElements_group"}; + class ACE_MILS_GROUP: CA_IGUI_elements_group { + idc = 80170; + class controls { + class CA_Heading_MILS: RscText { + idc = 80156; + style = 2; + colorText[] = {0.706,0.0745,0.0196,1}; + sizeEx = "0.028*SafezoneH"; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "015"; + x = "25.0 * (0.01875 * SafezoneH)"; + y = "6.3 * (0.025 * SafezoneH)"; + w = "3.3333 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; + }; + class CA_Elev_MILS: RscText { + idc = 80175; + style = 1; + sizeEx = "0.038*SafezoneH"; + colorText[] = {0.706,0.0745,0.0196,1}; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "80.5"; + x = "36.8 * (0.01875 * SafezoneH)"; + y = "29.3 * (0.025 * SafezoneH)"; + w = "5.2 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; + }; + class CA_Elev_Need_MILS: CA_Elev_MILS { + idc = 80176; + y = "30.8 * (0.025 * SafezoneH)"; + }; + }; + }; + }; +}; diff --git a/addons/mk6mortar/RscRangeTable.hpp b/addons/mk6mortar/RscRangeTable.hpp new file mode 100644 index 0000000000..6bf0e51619 --- /dev/null +++ b/addons/mk6mortar/RscRangeTable.hpp @@ -0,0 +1,87 @@ +class ACE_82mm_RangeTable_Dialog { + idd = -1; + movingEnable = 1; + onLoad = "uiNamespace setVariable ['ACE_82mm_RangeTable_Dialog', _this select 0];"; + objects[] = {}; + + class ControlsBackground { + class TableBackground: RscPicture { + idc = -1; + text = QUOTE(PATHTOF(UI\RangeTable_background.paa)); + x = "18 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; + y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; + w = "16.2634559672906 * (safeZoneH / 40)"; + h = "23 * ((safeZoneH / 1.2) / 25)"; + colorBackground[] = {1,1,1,1}; + }; + class ChargeBackground: RscText { + idc = -1; + x = "14 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; + y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; + w = "4 * (safeZoneH / 40)"; + h = "5 * ((safeZoneH / 1.2) / 25)"; + colorBackground[] = {0,0,0,1}; + }; + }; + class controls { + class TheTable: RscListNBox { + idc = 20001; + // style = ST_CENTER + ST_MULTI + LB_TEXTURES; + // style = ST_LEFT + ST_MULTI + LB_TEXTURES; + // style = LB_MULTI + ST_LEFT; // Style + x = "18 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; + y = "3.76 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; + w = "16.2634559672906 * (safeZoneH / 40)"; + h = "20.24 * ((safeZoneH / 1.2) / 25)"; + columns[] = {(10/867),(86/867),(171/867),(238/867),(320/867),(405/867), + (485/867),(546/867),(607/867),(668/867),(729/867),(790/867)}; + rowHeight = 0.015 * safeZoneH; + sizeEx = "0.014 * safeZoneH"; + font = "EtelkaMonospacePro"; + drawSideArrows = 1; + idcLeft = 14124; + idcRight = 412343243; + colorText[] = {0, 0, 0, 1}; + shadow = "0"; + // colorBorder[] = {1,0,0,1}; + // colorBackground[] = {1, 0, 0, 1}; + colorSelectBackground[] = {0, 0, 0, 0.025}; + colorSelectBackground2[] = {0, 0, 0, 0.025}; + colorScrollbar[] = {0.95,0,0.95,1}; + class ListScrollBar: ScrollBar{ + color[] = {0,0,0,0.6}; + }; + }; + class ChargeListBox: RscListbox { + idc = 1501; + style = ST_RIGHT; + x = "14 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; + y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; + w = "4 * (safeZoneH / 40)"; + h = "5 * ((safeZoneH / 1.2) / 25)"; + onLBSelChanged = QUOTE(_this call FUNC(rangeTablePageChange)); + }; + class CloseBackground: RscText { + idc = -1; + x = "33.7634559672906 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; + y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; + w = "0.5 * (safeZoneH / 40)"; + h = "0.5 * ((safeZoneH / 1.2) / 25)"; + colorBackground[] = {0,0,0,0.5}; + }; + class CloseActiveText: RscActiveText { + idc = -1; + style = 48; + color[] = {1,1,1,0.7}; + text = "A3\Ui_f\data\GUI\Rsc\RscDisplayArcadeMap\icon_exit_cross_ca.paa"; + x = "33.7634559672906 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; + y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; + w = "0.5 * (safeZoneH / 40)"; + h = "0.5 * ((safeZoneH / 1.2) / 25)"; + colorText[] = {1,1,1,0.7}; + colorActive[] = {1,1,1,1}; + tooltip = "Close"; + onButtonClick = "closeDialog 0"; + }; + }; +}; diff --git a/addons/mk6mortar/UI/Icon_Module_mk6_ca.paa b/addons/mk6mortar/UI/Icon_Module_mk6_ca.paa new file mode 100644 index 0000000000..8abfb4bdd3 Binary files /dev/null and b/addons/mk6mortar/UI/Icon_Module_mk6_ca.paa differ diff --git a/addons/mk6mortar/UI/RangeTable_background.paa b/addons/mk6mortar/UI/RangeTable_background.paa new file mode 100644 index 0000000000..bf4b5ee044 Binary files /dev/null and b/addons/mk6mortar/UI/RangeTable_background.paa differ diff --git a/addons/mk6mortar/UI/icon_rangeTable.paa b/addons/mk6mortar/UI/icon_rangeTable.paa new file mode 100644 index 0000000000..9273b849d7 Binary files /dev/null and b/addons/mk6mortar/UI/icon_rangeTable.paa differ diff --git a/addons/mk6mortar/UI/ui_charges.paa b/addons/mk6mortar/UI/ui_charges.paa new file mode 100644 index 0000000000..7041c654e0 Binary files /dev/null and b/addons/mk6mortar/UI/ui_charges.paa differ diff --git a/addons/mk6mortar/XEH_clientInit.sqf b/addons/mk6mortar/XEH_clientInit.sqf new file mode 100644 index 0000000000..973772c96a --- /dev/null +++ b/addons/mk6mortar/XEH_clientInit.sqf @@ -0,0 +1,5 @@ +#include "script_component.hpp" + +if (!hasInterface) exitWith {}; + +["playerVehicleChanged", {_this call FUNC(handlePlayerVehicleChanged);}] call EFUNC(common,addEventHandler); diff --git a/addons/mk6mortar/XEH_preInit.sqf b/addons/mk6mortar/XEH_preInit.sqf new file mode 100644 index 0000000000..9af89ccb35 --- /dev/null +++ b/addons/mk6mortar/XEH_preInit.sqf @@ -0,0 +1,21 @@ +#include "script_component.hpp" + +ADDON = false; + +PREP(dev_buildTable); +PREP(dev_formatNumber); +PREP(dev_simulateCalcRangeTableLine); +PREP(dev_simulateFindSolution); +PREP(dev_simulateShot); + +PREP(handleFired); +PREP(handlePlayerVehicleChanged); +PREP(moduleInit); +PREP(rangeTableCanUse); +PREP(rangeTableOpen); +PREP(rangeTablePageChange); +PREP(rangeTablePreCalculatedValues); +PREP(toggleMils); +PREP(turretDisplayLoaded); + +ADDON = true; diff --git a/addons/mk6mortar/config.cpp b/addons/mk6mortar/config.cpp new file mode 100644 index 0000000000..6751cea5fb --- /dev/null +++ b/addons/mk6mortar/config.cpp @@ -0,0 +1,47 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {"ACE_RangeTable_82mm"}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_interaction"}; + author[] = {"PabstMirror"}; + authorUrl = "https://github.com/acemod"; + VERSION_CONFIG; + }; +}; + +#include "CfgEventHandlers.hpp" +#include "CfgVehicles.hpp" +#include "CfgWeapons.hpp" + +class RscText; +class RscListbox; +class RscListNBox; +class RscPicture; +class RscControlsGroup; +class ScrollBar; +class RscActiveText; + +#include "RscInGameUI.hpp" +#include "RscRangeTable.hpp" + +class ACE_Settings { + //These settings effect gameplay difficutly: defaults will leave the mortar the same as vanilla + class GVAR(airResistanceEnabled) { + value = 0; + typeName = "BOOL"; + isClientSetable = 0; + }; + class GVAR(allowComputerRangefinder) { + value = 1; + typeName = "BOOL"; + isClientSetable = 0; + }; + class GVAR(allowCompass) { + value = 1; + typeName = "BOOL"; + isClientSetable = 0; + }; +}; diff --git a/addons/mk6mortar/functions/fnc_dev_buildTable.sqf b/addons/mk6mortar/functions/fnc_dev_buildTable.sqf new file mode 100644 index 0000000000..7a60e91e68 --- /dev/null +++ b/addons/mk6mortar/functions/fnc_dev_buildTable.sqf @@ -0,0 +1,87 @@ +/* + * Author: PabstMirror + * DEV function to build mortar tables, very cpu intensive (never used durring normal gameplay) + * + * Arguments: + * 0: Muzzle Velocity + * 1: Air Friction + * + * Return Value: + * + * + * Example: + * [100, -0.0001] spawn ace_mk6mortar_fnc_dev_buildTable; //spawn (scheduled) is slower + * [100, -0.0001] call ace_mk6mortar_fnc_dev_buildTable; //faster, but will lock while processing + * + * Public: No + */ +#include "script_component.hpp" + + +private ["_muzzleVelocity", "_airFriction", "_stillInRange", "_currentRange", "_increasePerRow", "_outputArray", "_rangeToHit", "_lineElevation", "_lineHeightElevation", "_lineTimeOfFlight", "_lineCrosswindDeg", "_lineHeadwindMeters", "_lineTailWindMeters", "_lineTempDec", "_lineTempInc", "_lineAirDensDec", "_lineAirDensInc", "_result", "_outputString"]; + +_muzzleVelocity = _this select 0; +_airFriction = _this select 1; +_stillInRange = true; +_currentRange = 100; +_increasePerRow = 50; +_outputArray = []; + + +//[_rangeToHit, _lineElevation, _lineHeightElevation, _lineHeightTimeDelta, _lineTimeOfFlight, _lineCrosswindDeg, _lineHeadwindMeters, _lineTailWindMeters, _lineTempDec, _lineTempInc, _lineAirDensDec, _lineAirDensInc] + +while {_stillInRange} do { + _result = [_muzzleVelocity, _currentRange, _airFriction] call FUNC(dev_simulateCalcRangeTableLine); + if (_result isEqualTo []) then { + _stillInRange = false; + } else { + if (_airFriction == 0) then { + _result set [4, 0]; + _result set [5, 0]; + _result set [6, 0]; + _result set [7, 0]; + _result set [8, 0]; + _result set [9, 0]; + _result set [10, 0]; + }; + if ((_result select 1) < 88) then { + _outputArray pushBack [ + ([(_result select 0), "meters", false] call FUNC(dev_formatNumber)), + ([(_result select 1), "mil", true] call FUNC(dev_formatNumber)), + ([(_result select 2), "mil", true] call FUNC(dev_formatNumber)), + ([(_result select 3), "sec", false] call FUNC(dev_formatNumber)), + ([(_result select 4), "sec", false] call FUNC(dev_formatNumber)), + ([(_result select 5), "milPrecise", true] call FUNC(dev_formatNumber)), + ([(_result select 6), "metersprecise", false] call FUNC(dev_formatNumber)), + ([(_result select 7), "metersprecise", false] call FUNC(dev_formatNumber)), + ([(_result select 8), "metersprecise", false] call FUNC(dev_formatNumber)), + ([(_result select 9), "metersprecise", false] call FUNC(dev_formatNumber)), + ([(_result select 10), "metersprecise", false] call FUNC(dev_formatNumber)), + ([(_result select 11), "metersprecise", false] call FUNC(dev_formatNumber)) + ]; + }; + _currentRange = _currentRange + _increasePerRow; + }; + hintSilent str _currentRange; +}; + +//handle floating point rounding errors +_outputString = format ["case ((abs(_muzzleVelocity - %1) < 0.00001) && {(abs(_airFriction - %2) < 0.00001)}): { +[ +", _muzzleVelocity, _airFriction]; + +{ + if (_forEachIndex < ((count _outputArray) - 1)) then { + _outputString = _outputString + format ["%1, + ", _x]; + } else { + _outputString = _outputString + format ["%1 + ] + };", _x]; + }; +} forEach _outputArray; + +copyToClipboard _outputString; +rangeTableOutput = _outputString; + +hint "done"; \ No newline at end of file diff --git a/addons/mk6mortar/functions/fnc_dev_formatNumber.sqf b/addons/mk6mortar/functions/fnc_dev_formatNumber.sqf new file mode 100644 index 0000000000..f89c3a1b8f --- /dev/null +++ b/addons/mk6mortar/functions/fnc_dev_formatNumber.sqf @@ -0,0 +1,80 @@ +/* +Author: Pabst Mirror + +Description: +Converts numbers into nicely formated strings. + +Parameters: +0: NUMBER - Input number +1: STRING - Output type (see case statement) +2: BOOL - If output type is mil, convert input type from deg->mil + +Returns: +STRING - Formatted number + +Example: +[45, "mil4", true] call ace_mk6mortar_fnc_dev_formatNumber = "0800" + */ +#include "script_component.hpp" + +private ["_theNumber", "_inputType", "_convertToMils", "_decimalPlaces", "_integerPlaces", "_prefix", "_return"]; + +_theNumber = _this select 0; +_inputType = _this select 1; +_convertToMils = _this select 2; + +_decimalPlaces = -1; +_integerPlaces = -1; + +switch (toLower _inputType) do { +case ("meters"): { + _decimalPlaces = 0; + _integerPlaces = 1; + }; +case ("metersprecise"): { + _decimalPlaces = 1; + _integerPlaces = 1; + }; +case ("meters4"): { + _decimalPlaces = 0; + _integerPlaces = 4; + }; +case ("deg3precise"): { + _decimalPlaces = 2; + _integerPlaces = 3; + }; +case ("mil"): { + _decimalPlaces = 0; + _integerPlaces = 1; + if (_convertToMils) then { + _theNumber = _theNumber * (6400 / 360); + }; + }; +case ("mil4"): { + _decimalPlaces = 0; + _integerPlaces = 4; + if (_convertToMils) then { + _theNumber = _theNumber * (6400 / 360); + }; + }; +case ("milprecise"): { + _decimalPlaces = 1; + _integerPlaces = 1; + if (_convertToMils) then { + _theNumber = _theNumber * (6400 / 360); + }; + }; +case ("sec"): { + _decimalPlaces = 1; + _integerPlaces = 1; + }; + default {systemChat format ["badtype %1", _inputType];}; +}; + +//CBA_fnc_formatNumber is silly: [-9.58545, 1, 1, false] call CBA_fnc_formatNumber == "-9.-6" + +_prefix = if (_theNumber < 0) then {"-"} else {""}; + +_return = [abs (_theNumber), _integerPlaces, _decimalPlaces, false] call CBA_fnc_formatNumber; + +(_prefix + _return) diff --git a/addons/mk6mortar/functions/fnc_dev_simulateCalcRangeTableLine.sqf b/addons/mk6mortar/functions/fnc_dev_simulateCalcRangeTableLine.sqf new file mode 100644 index 0000000000..d1e0a8dd05 --- /dev/null +++ b/addons/mk6mortar/functions/fnc_dev_simulateCalcRangeTableLine.sqf @@ -0,0 +1,79 @@ +/* +Author: Pabst Mirror + +Description: +Builds a rangeTable line for a certian range, given muzzle velocity and air friction, returns [] if out of range. + +Parameters: +0: NUMBER - Muzzle Velocity +1: NUMBER - Air Friction +2: NUMBER - Range To Hit + +Returns: +ARRAY - Range Table Line Data (see return line) + +Example: +[300, -0.0001, 3000] call ace_mk6mortar_fnc_simulateCalcRangeTableLine + */ +#include "script_component.hpp" + +#define TIME_STEP (1/50) + +private ["_startTime", "_muzzleVelocity", "_rangeToHit", "_airFriction", "_vacElevation", "_radicand", "_maxElev", "_minElev", "_error", "_solutionElevation", "_lastTestResult", "_numberOfAttempts", "_lineElevation", "_lineTimeOfFlight", "_lineHeightElevation", "_lineHeightTimeDelta", "_lineCrosswindDeg", "_lineHeadwindMeters", "_lineTailWindMeters", "_result"]; + +_startTime = diag_tickTime; + +_muzzleVelocity = _this select 0; +_rangeToHit = _this select 1; +_airFriction = _this select 2; + +//Run Binary search for correct elevation +_solution = [_rangeToHit, 0, _muzzleVelocity, _airFriction, TIME_STEP] call FUNC(dev_simulateFindSolution); +if (_solution isEqualTo []) exitWith {[]}; + +//Real Elevation +_lineElevation = _solution select 0; + +//Time Of Flight: +_lineTimeOfFlight = _solution select 1; + +//Height Adjustment for -100m (another binary search) +_solution = [_rangeToHit, -100, _muzzleVelocity, _airFriction, TIME_STEP] call FUNC(dev_simulateFindSolution); +if (_solution isEqualTo []) exitWith {[]};//should never be triggered (lower elevation easier to hit) + +_lineHeightElevation = ((_solution select 0) - _lineElevation); +_lineHeightTimeDelta = (_solution select 1) - _lineTimeOfFlight; + +//Compute for 10x and divide to minimize rounding errors + +//Crosswind +_lastTestResult = [_lineElevation, _muzzleVelocity, _airFriction, 15, 1, 0, 10, 0, TIME_STEP] call FUNC(dev_simulateShot); +_lineCrosswindDeg = (_lastTestResult select 2) / 10; + +//Headwind: +_lastTestResult = [_lineElevation, _muzzleVelocity, _airFriction, 15, 1, -10, 0, 0, TIME_STEP] call FUNC(dev_simulateShot); +_lineHeadwindMeters = (_rangeToHit - (_lastTestResult select 0)) / 10; + +//TailWind: +_lastTestResult = [_lineElevation, _muzzleVelocity, _airFriction, 15, 1, 10, 0, 0, TIME_STEP] call FUNC(dev_simulateShot); +_lineTailWindMeters = (_rangeToHit - (_lastTestResult select 0)) / 10; + +//Air Temp Dec +_lastTestResult = [_lineElevation, _muzzleVelocity, _airFriction, (15 - 10), 1, 0, 0, 0, TIME_STEP] call FUNC(dev_simulateShot); +_lineTempDec = (_rangeToHit - (_lastTestResult select 0)) / 10; + +//Air Temp Inc +_lastTestResult = [_lineElevation, _muzzleVelocity, _airFriction, (15 + 10), 1, 0, 0, 0, TIME_STEP] call FUNC(dev_simulateShot); +_lineTempInc = (_rangeToHit - (_lastTestResult select 0)) / 10; + +//Air Density Dec +_lastTestResult = [_lineElevation, _muzzleVelocity, _airFriction, 15, 0.9, 0, 0, 0, TIME_STEP] call FUNC(dev_simulateShot); +_lineAirDensDec = (_rangeToHit - (_lastTestResult select 0)) / 10; + +//Air Density Inc +_lastTestResult = [_lineElevation, _muzzleVelocity, _airFriction, 15, 1.1, 0, 0, 0, TIME_STEP] call FUNC(dev_simulateShot); +_lineAirDensInc = (_rangeToHit - (_lastTestResult select 0)) / 10; + +// systemChat format ["debug: Range %1 - in %2 sec", _rangeToHit, (diag_tickTime - _startTime)]; + +[_rangeToHit, _lineElevation, _lineHeightElevation, _lineHeightTimeDelta, _lineTimeOfFlight, _lineCrosswindDeg, _lineHeadwindMeters, _lineTailWindMeters, _lineTempDec, _lineTempInc, _lineAirDensDec, _lineAirDensInc] diff --git a/addons/mk6mortar/functions/fnc_dev_simulateFindSolution.sqf b/addons/mk6mortar/functions/fnc_dev_simulateFindSolution.sqf new file mode 100644 index 0000000000..a45c415b40 --- /dev/null +++ b/addons/mk6mortar/functions/fnc_dev_simulateFindSolution.sqf @@ -0,0 +1,55 @@ +/* + * Author: PabstMirror + * DEV to find a firing solution for a given range + * + * Arguments: + * 0: Range to Hit (Meters) + * 1: Height To Hit (Meters) + * 2: Muzzle Velocity (M/S) + * 3: Air Friction + * 4: Time Step (seconds) (eg 1/50 will simulate 50 cycles per second) + * + * Return Value: + * ARRAY - [NUMBER - Elevation In Degrees, NUMBER - Shot Durration] + * + * Example: + * [_rangeToHit, _heightToHit, _muzzleVelocity, _airFriction, TIME_STEP] call FUNC(simulateFindSolution); + * + * Public: No + */ +#include "script_component.hpp" + +private ["_rangeToHit", "_heightToHit", "_muzzleVelocity", "_airFriction", "_maxElev", "_minElev", "_error", "_solutionElevation", "_lastTestResult", "_numberOfAttempts"]; + +#define MAX_ATTEMPTS 22 + +_rangeToHit = _this select 0; +_heightToHit = _this select 1; +_muzzleVelocity = _this select 2; +_airFriction = _this select 3; +_timeStep = _this select 4; + +_maxElev = 90; +_minElev = 45; //todo - Low Angle Howitzers??? + +_error = 10000; +_solutionElevation = -1; +_lastTestResult = []; +_numberOfAttempts = 0; + +//(binary search) +while {(_numberOfAttempts < MAX_ATTEMPTS) && {(abs _error) > 0.2}} do { + _numberOfAttempts = _numberOfAttempts + 1; + _solutionElevation = (_maxElev + _minElev) / 2; + _lastTestResult = [_solutionElevation, _muzzleVelocity, _airFriction, 15, 1, 0, 0, _heightToHit, _timeStep] call FUNC(dev_simulateShot); + _error = _rangeToHit - (_lastTestResult select 0); + if (_error > 0) then { + _maxElev = _solutionElevation; //test range was short + } else { + _minElev = _solutionElevation; //test range was long + }; +}; +if (_numberOfAttempts >= MAX_ATTEMPTS) exitWith {[]}; + +//return the elevation and time required +[_solutionElevation, (_lastTestResult select 1)] diff --git a/addons/mk6mortar/functions/fnc_dev_simulateShot.sqf b/addons/mk6mortar/functions/fnc_dev_simulateShot.sqf new file mode 100644 index 0000000000..0e53807a6b --- /dev/null +++ b/addons/mk6mortar/functions/fnc_dev_simulateShot.sqf @@ -0,0 +1,73 @@ +/* + * Author: PabstMirror + * DEV function to build mortar tables, very cpu intensive (never used durring normal gameplay) + * + * Arguments: + * 0: Shot Angle (degrees) + * 1: Muzzle Velocity (m/s) + * 2: Air Friction + * 3: Tempeture (degres celcius) + * 4: Relative Air Denisty + * 5: Tail Wind (m/s) + * 6: Cross Wind (m/s) + * 7: Height Of Target (M) + * 8: Time Step (fraction of a second) + * + * Return Value: + * [Distance Traveled, Shot Time, Offset (degrees)] + * + * Example: + * [45, 180, -0.0001, 15, 1, 10, 0, 0, 1/50] call ace_mk6mortar_fnc_dev_simulateShot; + * + * Public: No + */ +#include "script_component.hpp" + +private ["_angleDeg", "_muzzleVelocity", "_airFriction", "_temp", "_relDensity", "_tailWind", "_crosswind", "_heightOfTarget", "_timeStep", "_wind", "_gravity", "_currentPos", "_currentVelocity", "_currentTime", "_lastPos", "_kCoefficent", "_aparentWind", "_changeInVelocity", "_linConversion", "_middlePos", "_middlePosOld", "_middleTotalTravelTime", "_offsetDeg"]; + +_angleDeg = _this select 0; +_muzzleVelocity = _this select 1; +_airFriction = _this select 2; +_temp = _this select 3; +_relDensity = _this select 4; +_tailWind = _this select 5; +_crosswind = _this select 6; +_heightOfTarget = _this select 7; +_timeStep = _this select 8; + +_wind = [_crosswind, _tailWind, 0]; +_gravity = [0,0,-9.8]; + +_currentPos = [0,0,0]; +_muzzleVelocity = _muzzleVelocity * (((_temp + 273.13) / 288.13 - 1) / 40 + 1); +_currentVelocity = [0, (_muzzleVelocity * cos _angleDeg), (_muzzleVelocity * sin _angleDeg)]; + +_currentTime = 0; +_lastPos = _currentPos; + +_kCoefficent = -1 * _relDensity * _airFriction; //save time in the loop and compute once + +while {((_currentVelocity select 2) > 0) || ((_currentPos select 2) >= _heightOfTarget)} do { + _lastPos = _currentPos; + + _aparentWind = _wind vectorDiff _currentVelocity; + _changeInVelocity = _gravity vectorAdd (_aparentWind vectorMultiply ((vectorMagnitude _aparentWind) * _kCoefficent)); + + _currentVelocity = _currentVelocity vectorAdd (_changeInVelocity vectorMultiply _timeStep); + + _currentPos = _currentPos vectorAdd (_currentVelocity vectorMultiply _timeStep); + _currentTime = _currentTime + _timeStep; +}; + +//Uses linearConversion to get a weighted average betwen points before and after dropping below target height +_linConversion = linearConversion [(_lastPos select 2), (_currentPos select 2), _heightOfTarget, 0, 1, true]; +_middlePos = (_lastPos vectorMultiply (1 - _linConversion)) vectorAdd (_currentPos vectorMultiply (_linConversion)); +// _middlePosOld = (_lastPos vectorAdd _currentPos) vectorMultiply 0.5; + +//Same to find travel time +_middleTotalTravelTime = _currentTime - (_timeStep * (1-_linConversion)); + +//Find shot offset (from crosswind), in degrees +_offsetDeg = (_middlePos select 0) aTan2 (_middlePos select 1); + +[(_middlePos select 1), _middleTotalTravelTime, _offsetDeg] diff --git a/addons/mk6mortar/functions/fnc_handleFired.sqf b/addons/mk6mortar/functions/fnc_handleFired.sqf new file mode 100644 index 0000000000..e2b440c520 --- /dev/null +++ b/addons/mk6mortar/functions/fnc_handleFired.sqf @@ -0,0 +1,89 @@ +/* + * Author: PabstMirror + * Called when the mortar is fired. + * + * Arguments: + * 0: mortar - Object the event handler is assigned to + * 1: weapon - Fired weapon + * 2: muzzle - Muzzle that was used + * 3: mode - Current mode of the fired weapon + * 4: ammo - Ammo used + * 5: magazine - magazine name which was used + * 6: projectile - Object of the projectile that was shot + * + * Return Value: + * Nothing + * + * Example: + * [clientFiredBIS-XEH] call ace_mk6mortar_fnc_handleFired + * + * Public: No + */ +#include "script_component.hpp" + +private ["_shooterMan", "_bisAirFriction", "_temperature", "_newMuzzleVelocityCoefficent", "_bulletVelocity", "_bulletSpeed", "_muzzleVelocity", "_muzzleVelocityShift"]; + +disableSerialization; + +PARAMS_7(_vehicle,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); + +if (!GVAR(airResistanceEnabled)) exitWith {}; +// Large enough distance to not simulate any wind deflection +if (_vehicle distance ACE_player > 8000) exitWith {false}; + +//AI will have no clue how to use: +_shooterMan = gunner _vehicle; +if (!([_shooterMan] call EFUNC(common,isPlayer))) exitWith {false}; + +//Should be zero, just make sure: +_bisAirFriction = getNumber (configFile >> "CfgAmmo" >> _ammo >> "airFriction"); +if (_bisAirFriction != 0) exitWith {ERROR("Non zero base airFriction");}; + + +//Calculate air density: +_altitude = (getPosASL _vehicle) select 2; +#define GET_TEMPERATURE_AT_HEIGHT(h) (EGVAR(weather,currentTemperature) - 0.0065 * (h)) +_temperature = GET_TEMPERATURE_AT_HEIGHT(_altitude); +_pressure = _altitude call EFUNC(weather,calculateBarometricPressure); +_relativeHumidity = EGVAR(weather,currentHumidity); +_airDensity = [_temperature, _pressure, _relativeHumidity] call EFUNC(weather,calculateAirDensity); +_relativeDensity = _airDensity / 1.225; + +TRACE_5("FiredWeather",_temperature,_pressure,_relativeHumidity,_airDensity,_relativeDensity); + +//powder effects: +_newMuzzleVelocityCoefficent = (((_temperature + 273.13) / 288.13 - 1) / 40 + 1); +if (_newMuzzleVelocityCoefficent != 1) then { + _bulletVelocity = velocity _projectile; + _bulletSpeed = vectorMagnitude _bulletVelocity; + _bulletVelocity = (vectorNormalized _bulletVelocity) vectorMultiply (_bulletSpeed * _newMuzzleVelocityCoefficent); + _projectile setVelocity _bulletVelocity; + _muzzleVelocity = _muzzleVelocity + _muzzleVelocityShift; +}; + + +[{ + private ["_deltaT", "_bulletVelocity", "_bulletSpeed", "_trueVelocity", "_trueSpeed", "_dragRef", "_accelRef", "_drag", "_accel"]; + PARAMS_2(_args,_pfID); + EXPLODE_4_PVT(_args,_shell,_airFriction,_time,_relativeDensity); + + if (isNull _shell || {!alive _shell}) exitwith { + [_pfID] call cba_fnc_removePerFrameHandler; + }; + + _deltaT = time - _time; + _args set[2, time]; + + _bulletVelocity = velocity _shell; + _bulletSpeed = vectorMagnitude _bulletVelocity; + + _trueVelocity = _bulletVelocity vectorDiff ACE_wind; + _trueSpeed = vectorMagnitude _trueVelocity; + + _drag = _deltaT * _airFriction * _trueSpeed * _relativeDensity; + _accel = _trueVelocity vectorMultiply (_drag); + _bulletVelocity = _bulletVelocity vectorAdd _accel; + + _shell setVelocity _bulletVelocity; + +}, 0, [_projectile, MK6_82mm_AIR_FRICTION, time, _relativeDensity]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf b/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf new file mode 100644 index 0000000000..91657fdbe2 --- /dev/null +++ b/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf @@ -0,0 +1,108 @@ +/* + * Author: PabstMirror + * Handles player getting into new vehicle. Loads PFEG for mortar display if it is a mortar. + * + * Arguments: + * 0:Player + * 1: New Vehicle + * + * Return Value: + * No + * + * Example: + * [bob, mortar] call ace_mk6mortar_fnc_handlePlayerVehicleChanged; + * + * Public: No + */ +#include "script_component.hpp" + +private ["_chargeText", "_xPos", "_yPos", "_wPos", "_hPos", "_tubeWeaponName", "_fireModes"]; + +PARAMS_2(_player,_newVehicle); + +if (isNull _newVehicle) exitWith {}; +if (!(_newVehicle isKindOf "Mortar_01_base_F")) exitWith {}; + +_chargeText = (findDisplay 46) ctrlCreate ["RscStructuredText", 80085]; + +_xPos = (profilenamespace getvariable ["IGUI_GRID_WEAPON_X", ((safezoneX + safezoneW) - (12.4 * (((safezoneW / safezoneH) min 1.2) / 40)) - 0.5 * (((safezoneW / safezoneH) min 1.2) / 40))]); +_yPos = 2.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (profilenamespace getvariable ["IGUI_GRID_WEAPON_Y", (safezoneY + 0.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25))]); +_wPos = 10 * (((safezoneW / safezoneH) min 1.2) / 40); +_hPos = 1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25); + +_chargeText ctrlSetPosition [_xPos, _yPos, _wPos, _hPos]; +_chargeText ctrlCommit 0; + +_tubeWeaponName = (weapons _newVehicle) select 0; +_fireModes = getArray (configFile >> "CfgWeapons" >> _tubeWeaponName >> "modes"); + +[{ + PARAMS_2(_args,_pfID); + EXPLODE_3_PVT(_args,_mortarVeh,_chargeText,_fireModes); + + if ((vehicle ACE_player) != _mortarVeh) then { + [_pfID] call CBA_fnc_removePerFrameHandler; + ctrlDelete _chargeText; + } else { + + _useMils = _mortarVeh getVariable [QGVAR(useMils), true]; + + //Compute: 'charge' from weaponstate + _currentFireMode = (weaponState [_mortarVeh, [0]]) select 2; + _currentChargeMode = _fireModes find _currentFireMode; + + _text = format ["%1: %2 ", (localize "STR_ACE_MK6MORTAR_rangetable_charge"), _currentChargeMode, QUOTE(PATHTOF(UI\ui_charges.paa))]; + _chargeText ctrlSetStructuredText parseText _text; + if (shownArtilleryComputer && {!GVAR(allowComputerRangefinder)}) then { + //Don't like this solution, but it works + closeDialog 0; + [parseText "Computer Disabled"] call EFUNC(common,displayTextStructured); + }; + + _display = uiNamespace getVariable ["ACE_Mk6_RscWeaponRangeArtillery", displayNull]; + if (isNull _display) exitWith {}; //It may be null for the first frame + + //Hud should hidden in 3rd person + _notGunnerView = cameraView != "GUNNER"; + + //Update CurrentElevation Display: + if (_notGunnerView) then { + (_display displayCtrl 80175) ctrlSetText ""; + } else { + _elevDeg = parseNumber ctrlText (_display displayCtrl 175); + if (_useMils) then { + (_display displayCtrl 80175) ctrlSetText str round (_elevDeg * 6400 / 360); + } else { + (_display displayCtrl 80175) ctrlSetText str _elevDeg; + }; + }; + + //Update ElevationNeeded Display: + if (_notGunnerView || (!GVAR(allowComputerRangefinder))) then { + (_display displayCtrl 80176) ctrlSetText ""; + } else { + _elevDeg = parseNumber ctrlText (_display displayCtrl 176); + if (_elevDeg <= 0) then { //Bad data means "----" out of range + (_display displayCtrl 80176) ctrlSetText (ctrlText (_display displayCtrl 176)); + } else { + if (_useMils) then { + (_display displayCtrl 80176) ctrlSetText str round (_elevDeg * 6400 / 360); + } else { + (_display displayCtrl 80176) ctrlSetText str _elevDeg; + }; + }; + }; + + //Update Heading Display: + if (_notGunnerView || (!GVAR(allowCompass))) then { + (_display displayCtrl 80156) ctrlSetText ""; + } else { + _rotationDegrees = ((getDir _mortarVeh) + (((-180 / PI) * (_mortarVeh animationPhase "mainTurret")) + 360)) % 360; + if (_useMils) then { + (_display displayCtrl 80156) ctrlSetText str round (_rotationDegrees * 6400 / 360); + } else { + (_display displayCtrl 80156) ctrlSetText (ctrlText (_display displayCtrl 156)); + }; + }; + }; +}, 0, [_newVehicle, _chargeText,_fireModes]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/mk6mortar/functions/fnc_moduleInit.sqf b/addons/mk6mortar/functions/fnc_moduleInit.sqf new file mode 100644 index 0000000000..75bab4cee9 --- /dev/null +++ b/addons/mk6mortar/functions/fnc_moduleInit.sqf @@ -0,0 +1,27 @@ +/* + * Author: PabstMirror + * Loads settings from the module. + * + * Arguments: + * 0: The Module Logic Object + * 1: synced objects + * 2: Activated + * + * Return Value: + * None + * + * Example: + * [fromModule] call ace_mk6mortar_fnc_moduleInit + * + * Public: No + */ +#include "script_component.hpp" + +PARAMS_3(_logic,_syncedUnits,_activated); + +if (!_activated) exitWith {WARNING("Module - placed but not active");}; +if (!isServer) exitWith {}; + +[_logic, QGVAR(airResistanceEnabled), "airResistanceEnabled"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(allowComputerRangefinder), "allowComputerRangefinder"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(allowCompass), "allowCompass"] call EFUNC(common,readSettingFromModule); diff --git a/addons/mk6mortar/functions/fnc_rangeTableCanUse.sqf b/addons/mk6mortar/functions/fnc_rangeTableCanUse.sqf new file mode 100644 index 0000000000..04ca9c3278 --- /dev/null +++ b/addons/mk6mortar/functions/fnc_rangeTableCanUse.sqf @@ -0,0 +1,21 @@ +/* + * Author: PabstMirror + * Can player open 82mm rangetable. + * + * Arguments: + * 0: Vehicle + * 1: Player + * + * Return Value: + * Can Open + * + * Example: + * [bob, bob] call ace_mk6mortar_fnc_rangeTableCanUse + * + * Public: No + */ +#include "script_component.hpp" + +PARAMS_2(_vehicle,_player); + +"ACE_RangeTable_82mm" in (items _player); \ No newline at end of file diff --git a/addons/mk6mortar/functions/fnc_rangeTableOpen.sqf b/addons/mk6mortar/functions/fnc_rangeTableOpen.sqf new file mode 100644 index 0000000000..dfb53842ab --- /dev/null +++ b/addons/mk6mortar/functions/fnc_rangeTableOpen.sqf @@ -0,0 +1,48 @@ +/* + * Author: PabstMirror + * Opens the rangetable and fills the charge listbox. + * + * Arguments: + * No + * + * Return Value: + * No + * + * Example: + * [] call ace_mk6mortar_fnc_rangeTableOpen + * + * Public: No + */ +#include "script_component.hpp" + +#define LIST_CHARGE ((uiNamespace getVariable "ACE_82mm_RangeTable_Dialog") displayCtrl 1501) + +private ["_weaponName", "_magazines", "_initSpeed", "_fireModes", "_muzzleVelocities", "_showToPlayer", "_artilleryCharge"]; + +_weaponName = "mortar_82mm"; //todo: work on other weapons + +createDialog "ACE_82mm_RangeTable_Dialog"; +if (isNull (uiNamespace getVariable ["ACE_82mm_RangeTable_Dialog", displayNull])) exitWith {ERROR("Dialog failed to open");}; + +//Get Magazine Types +_magazines = getArray (configFile >> "CfgWeapons" >> _weaponName >> "magazines"); + +//For now just get settings from first mag, all rounds have same flight characteristics: +if ((count _magazines) < 1) exitWith {ERROR("No Magazines for weapon");}; +_initSpeed = getNumber (configFile >> "CfgMagazines" >> (_magazines select 0) >> "initSpeed"); + +//Get Charge Modes +_fireModes = getArray (configFile >> "CfgWeapons" >> _weaponName >> "modes"); + +_muzzleVelocities = []; +{ + _showToPlayer = getNumber (configFile >> "CfgWeapons" >> _weaponName >> _x >> "showToPlayer"); + if (_showToPlayer == 1) then { + _artilleryCharge = getNumber (configFile >> "CfgWeapons" >> _weaponName >> _x >> "artilleryCharge"); + LIST_CHARGE lbAdd format ["%1: %2", (localize "STR_ACE_MK6MORTAR_rangetable_charge"), (count _muzzleVelocities)]; + LIST_CHARGE lbSetData [(count _muzzleVelocities), str (_artilleryCharge * _initSpeed)]; + _muzzleVelocities pushBack _artilleryCharge; + }; +} forEach _fireModes; + +LIST_CHARGE lbSetCurSel 0; diff --git a/addons/mk6mortar/functions/fnc_rangeTablePageChange.sqf b/addons/mk6mortar/functions/fnc_rangeTablePageChange.sqf new file mode 100644 index 0000000000..c0cc40ccdc --- /dev/null +++ b/addons/mk6mortar/functions/fnc_rangeTablePageChange.sqf @@ -0,0 +1,37 @@ +/* + * Author: PabstMirror + * Called when listbox selection changes. Updates the rangetable with new values. + * + * Arguments: + * No + * + * Return Value: + * No + * + * Example: + * [] call ace_mk6mortar_fnc_rangeTablePageChange + * + * Public: No + */ +#include "script_component.hpp" + +#define RANGE_TABLE ((uiNamespace getVariable "ACE_82mm_RangeTable_Dialog") displayCtrl 20001) +#define LIST_CHARGE ((uiNamespace getVariable "ACE_82mm_RangeTable_Dialog") displayCtrl 1501) + +private ["_listBoxData", "_muzzleVelocity", "_airFriction", "_precalcArray"]; + +_listBoxData = LIST_CHARGE lbData (lbCurSel LIST_CHARGE); +if (isNil "_listBoxData" || {_listBoxData == ""}) exitWith {ERROR("lbCurSel out of bounds or no data");}; +_muzzleVelocity = parseNumber _listBoxData; + +_airFriction = if (GVAR(airResistanceEnabled)) then {MK6_82mm_AIR_FRICTION} else {0}; + +_precalcArray = [_muzzleVelocity, _airFriction] call FUNC(rangeTablePreCalculatedValues); + +lnbClear RANGE_TABLE; +{ + RANGE_TABLE lnbAddRow _x; +} forEach _precalcArray; + +//put dummy line at end because scrolling is fucked and can't see last line +RANGE_TABLE lnbAddRow ["", "", "", "", "", "", "", "", "", "", ""]; diff --git a/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf b/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf new file mode 100644 index 0000000000..d775b87365 --- /dev/null +++ b/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf @@ -0,0 +1,271 @@ +/* + * Author: PabstMirror + * Simple Lookup Table for various muzzle velocities and air frictions. + * Use ace_mk6mortar_fnc_dev_buildTable to build + * + * Arguments: + * 0: Muzzle Velocity + * 1: Air Friction + * + * Return Value: + * + * + * Example: + * [200, 0] call ace_mk6mortar_fnc_rangeTablePreCalculatedValues + * + * Public: No + */ +#include "script_component.hpp" + +PARAMS_2(_muzzleVelocity,_airFriction); + +switch (true) do { + +case ((abs(_muzzleVelocity - 70) < 0.00001) && {(abs(_airFriction - -0.0001) < 0.00001)}): { + [ + ["100","1493","9","1.4","14.0","3.7","0.4","-0.3","0.0","-0.0","-0.0","0.0"], + ["150","1438","14","1.4","13.9","2.5","0.4","-0.4","0.0","-0.0","-0.1","0.0"], + ["200","1381","20","1.4","13.8","1.9","0.5","-0.4","0.0","-0.0","-0.1","0.1"], + ["250","1321","27","1.5","13.6","1.5","0.5","-0.4","0.0","-0.0","-0.1","0.1"], + ["300","1256","36","1.6","13.3","1.3","0.6","-0.5","0.0","-0.1","-0.1","0.1"], + ["350","1183","49","1.7","12.9","1.1","0.6","-0.5","0.1","-0.1","-0.1","0.1"], + ["400","1097","70","1.9","12.4","0.9","0.6","-0.5","0.1","-0.1","-0.2","0.1"], + ["450","979","113","2.3","11.6","0.8","0.6","-0.5","0.1","-0.1","-0.2","0.2"] + ] + }; +case ((abs(_muzzleVelocity - 140) < 0.00001) && {(abs(_airFriction - -0.0001) < 0.00001)}): { + [ + ["150","1556","1","0.8","27.2","16.3","2.5","-2.4","0.0","-0.0","-0.2","0.2"], + ["200","1541","1","0.8","27.2","12.3","2.5","-2.4","0.0","-0.0","-0.3","0.2"], + ["250","1527","2","0.8","27.2","9.9","2.6","-2.4","0.0","-0.0","-0.3","0.3"], + ["300","1512","2","0.8","27.2","8.3","2.7","-2.4","0.1","-0.0","-0.4","0.4"], + ["350","1497","3","0.8","27.1","7.1","2.7","-2.5","0.0","-0.1","-0.5","0.4"], + ["400","1482","3","0.8","27.1","6.2","2.7","-2.5","0.1","-0.1","-0.5","0.5"], + ["450","1467","3","0.8","27.0","5.6","2.8","-2.5","0.1","-0.1","-0.6","0.6"], + ["500","1451","4","0.8","27.0","5.0","2.9","-2.6","0.1","-0.1","-0.6","0.6"], + ["550","1436","4","0.8","26.9","4.6","2.9","-2.6","0.1","-0.1","-0.7","0.7"], + ["600","1420","5","0.8","26.8","4.2","3.0","-2.7","0.1","-0.1","-0.8","0.8"], + ["650","1404","5","0.8","26.8","3.9","3.0","-2.7","0.1","-0.1","-0.9","0.8"], + ["700","1388","6","0.8","26.7","3.6","3.1","-2.8","0.1","-0.1","-0.9","0.9"], + ["750","1372","6","0.8","26.6","3.4","3.2","-2.8","0.1","-0.1","-1.0","1.0"], + ["800","1355","7","0.8","26.5","3.2","3.2","-2.9","0.1","-0.1","-1.1","1.1"], + ["850","1338","8","0.8","26.4","3.0","3.3","-2.9","0.1","-0.1","-1.1","1.1"], + ["900","1321","8","0.8","26.2","2.8","3.4","-3.0","0.1","-0.1","-1.2","1.2"], + ["950","1303","9","0.9","26.1","2.7","3.4","-3.1","0.1","-0.2","-1.3","1.2"], + ["1000","1285","10","0.9","26.0","2.6","3.5","-3.1","0.2","-0.1","-1.4","1.3"], + ["1050","1266","11","0.9","25.8","2.4","3.5","-3.2","0.1","-0.2","-1.4","1.4"], + ["1100","1247","12","0.9","25.7","2.3","3.6","-3.3","0.1","-0.2","-1.5","1.4"], + ["1150","1228","13","0.9","25.5","2.2","3.7","-3.3","0.2","-0.2","-1.6","1.5"], + ["1200","1207","14","1.0","25.3","2.1","3.7","-3.4","0.2","-0.2","-1.7","1.6"], + ["1250","1186","15","1.0","25.1","2.0","3.8","-3.4","0.2","-0.2","-1.7","1.7"], + ["1300","1163","17","1.0","24.8","1.9","3.8","-3.5","0.2","-0.2","-1.8","1.7"], + ["1350","1140","19","1.0","24.6","1.9","3.9","-3.5","0.2","-0.2","-1.9","1.8"], + ["1400","1115","21","1.1","24.3","1.8","3.9","-3.6","0.2","-0.2","-1.9","1.9"], + ["1450","1088","24","1.1","23.9","1.7","4.0","-3.6","0.2","-0.2","-2.0","1.9"], + ["1500","1060","27","1.2","23.6","1.6","4.0","-3.7","0.2","-0.2","-2.1","2.0"], + ["1550","1028","32","1.3","23.1","1.5","4.0","-3.7","0.2","-0.2","-2.1","2.1"], + ["1600","991","38","1.4","22.6","1.5","4.0","-3.7","0.2","-0.2","-2.2","2.1"], + ["1650","947","49","1.7","21.9","1.4","4.0","-3.7","0.2","-0.3","-2.3","2.2"], + ["1700","888","71","2.1","21.0","1.3","3.9","-3.6","0.3","-0.3","-2.3","2.2"] + ] + }; +case ((abs(_muzzleVelocity - 200) < 0.00001) && {(abs(_airFriction - -0.0001) < 0.00001)}): { + [ + ["250","1559","1","0.6","37.3","23.8","6.1","-5.9","0.0","-0.0","-0.6","0.5"], + ["300","1551","1","0.6","37.3","20.0","6.1","-5.9","0.1","-0.0","-0.7","0.7"], + ["350","1543","1","0.6","37.3","17.2","6.2","-5.9","0.0","-0.1","-0.8","0.7"], + ["400","1535","1","0.6","37.3","15.1","6.2","-5.9","0.1","-0.0","-0.9","0.9"], + ["450","1527","1","0.6","37.3","13.4","6.3","-6.0","0.1","-0.1","-1.0","1.0"], + ["500","1519","1","0.6","37.2","12.1","6.3","-6.0","0.1","-0.1","-1.1","1.1"], + ["550","1510","1","0.6","37.2","11.0","6.4","-6.0","0.1","-0.1","-1.3","1.2"], + ["600","1502","1","0.6","37.2","10.1","6.4","-6.1","0.1","-0.1","-1.4","1.3"], + ["650","1494","1","0.6","37.2","9.4","6.5","-6.1","0.1","-0.1","-1.5","1.4"], + ["700","1485","2","0.6","37.1","8.7","6.5","-6.2","0.1","-0.1","-1.6","1.5"], + ["750","1477","2","0.6","37.1","8.2","6.6","-6.2","0.1","-0.1","-1.7","1.6"], + ["800","1468","2","0.6","37.0","7.7","6.7","-6.3","0.1","-0.1","-1.8","1.8"], + ["850","1460","2","0.6","37.0","7.2","6.7","-6.3","0.1","-0.1","-2.0","1.9"], + ["900","1451","2","0.6","37.0","6.8","6.8","-6.4","0.1","-0.1","-2.1","2.0"], + ["950","1443","2","0.6","36.9","6.5","6.9","-6.4","0.1","-0.1","-2.2","2.1"], + ["1000","1434","2","0.6","36.9","6.2","6.9","-6.5","0.1","-0.1","-2.3","2.2"], + ["1050","1425","2","0.6","36.8","5.9","7.0","-6.6","0.1","-0.2","-2.5","2.3"], + ["1100","1417","3","0.6","36.8","5.6","7.1","-6.6","0.1","-0.2","-2.6","2.4"], + ["1150","1408","3","0.6","36.7","5.4","7.1","-6.7","0.2","-0.2","-2.7","2.5"], + ["1200","1399","3","0.6","36.6","5.2","7.2","-6.7","0.2","-0.2","-2.8","2.7"], + ["1250","1390","3","0.6","36.6","5.0","7.3","-6.8","0.2","-0.2","-2.9","2.8"], + ["1300","1381","3","0.6","36.5","4.8","7.4","-6.9","0.2","-0.2","-3.0","2.9"], + ["1350","1372","3","0.6","36.4","4.6","7.4","-6.9","0.2","-0.2","-3.2","3.0"], + ["1400","1362","4","0.6","36.4","4.4","7.5","-7.0","0.2","-0.2","-3.3","3.1"], + ["1450","1353","4","0.6","36.3","4.3","7.6","-7.1","0.2","-0.2","-3.4","3.2"], + ["1500","1344","4","0.6","36.2","4.2","7.7","-7.1","0.2","-0.2","-3.5","3.4"], + ["1550","1334","4","0.6","36.1","4.0","7.7","-7.2","0.2","-0.2","-3.7","3.5"], + ["1600","1324","4","0.6","36.0","3.9","7.8","-7.3","0.2","-0.2","-3.8","3.6"], + ["1650","1314","4","0.7","35.9","3.8","7.9","-7.3","0.2","-0.2","-3.9","3.7"], + ["1700","1304","5","0.7","35.8","3.7","7.9","-7.4","0.2","-0.2","-4.0","3.8"], + ["1750","1294","5","0.7","35.7","3.6","8.0","-7.5","0.2","-0.2","-4.2","3.9"], + ["1800","1284","5","0.7","35.6","3.5","8.1","-7.6","0.2","-0.3","-4.3","4.0"], + ["1850","1274","5","0.7","35.5","3.4","8.2","-7.6","0.2","-0.3","-4.4","4.2"], + ["1900","1263","6","0.7","35.4","3.3","8.2","-7.7","0.2","-0.3","-4.5","4.3"], + ["1950","1253","6","0.7","35.2","3.2","8.3","-7.8","0.2","-0.3","-4.7","4.4"], + ["2000","1242","6","0.7","35.1","3.1","8.4","-7.8","0.3","-0.3","-4.8","4.5"], + ["2050","1231","7","0.7","35.0","3.0","8.4","-7.9","0.3","-0.3","-4.9","4.7"], + ["2100","1219","7","0.7","34.8","2.9","8.5","-8.0","0.3","-0.3","-5.0","4.8"], + ["2150","1208","7","0.7","34.7","2.9","8.5","-8.0","0.3","-0.3","-5.2","4.9"], + ["2200","1196","8","0.7","34.5","2.8","8.6","-8.1","0.3","-0.3","-5.3","5.0"], + ["2250","1184","8","0.7","34.3","2.7","8.7","-8.2","0.3","-0.3","-5.4","5.1"], + ["2300","1171","9","0.8","34.2","2.7","8.7","-8.2","0.3","-0.3","-5.5","5.2"], + ["2350","1158","9","0.8","34.0","2.6","8.8","-8.3","0.3","-0.3","-5.7","5.4"], + ["2400","1145","10","0.8","33.8","2.5","8.8","-8.3","0.3","-0.3","-5.8","5.5"], + ["2450","1132","10","0.8","33.6","2.5","8.9","-8.4","0.3","-0.3","-5.9","5.6"], + ["2500","1118","11","0.8","33.3","2.4","8.9","-8.4","0.3","-0.3","-6.0","5.7"], + ["2550","1103","12","0.8","33.1","2.4","9.0","-8.5","0.3","-0.3","-6.1","5.8"], + ["2600","1088","13","0.9","32.8","2.3","9.0","-8.5","0.4","-0.3","-6.2","5.9"], + ["2650","1072","14","0.9","32.6","2.2","9.0","-8.6","0.4","-0.4","-6.4","6.0"], + ["2700","1056","15","0.9","32.3","2.2","9.0","-8.6","0.3","-0.4","-6.5","6.1"], + ["2750","1038","16","1.0","31.9","2.1","9.1","-8.6","0.4","-0.4","-6.6","6.3"], + ["2800","1020","18","1.0","31.6","2.1","9.1","-8.6","0.4","-0.4","-6.7","6.4"], + ["2850","1000","20","1.1","31.2","2.0","9.1","-8.6","0.4","-0.4","-6.8","6.5"], + ["2900","978","22","1.1","30.8","1.9","9.0","-8.6","0.4","-0.4","-6.9","6.5"], + ["2950","954","26","1.2","30.3","1.9","9.0","-8.6","0.4","-0.4","-7.0","6.6"], + ["3000","927","31","1.4","29.7","1.8","8.9","-8.5","0.4","-0.4","-7.1","6.7"], + ["3050","894","38","1.6","29.0","1.7","8.8","-8.4","0.4","-0.4","-7.2","6.8"], + ["3100","849","54","2.0","27.9","1.6","8.5","-8.3","0.4","-0.4","-7.2","6.8"] + ] + }; +case ((abs(_muzzleVelocity - 70) < 0.00001) && {(abs(_airFriction - 0) < 0.00001)}): { + [ + ["100","1497","9","1.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["150","1445","14","1.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["200","1390","19","1.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["250","1333","26","1.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["300","1272","34","1.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["350","1204","45","1.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["400","1127","61","1.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["450","1028","91","2.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"] + ] + }; +case ((abs(_muzzleVelocity - 140) < 0.00001) && {(abs(_airFriction - 0) < 0.00001)}): { + [ + ["150","1562","1","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["200","1549","1","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["250","1536","2","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["300","1523","2","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["350","1510","2","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["400","1497","3","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["450","1484","3","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["500","1471","3","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["550","1458","4","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["600","1445","4","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["650","1431","4","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["700","1418","5","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["750","1404","5","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["800","1390","6","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["850","1376","6","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["900","1362","6","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["950","1348","7","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1000","1333","7","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1050","1318","8","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1100","1303","9","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1150","1288","9","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1200","1272","10","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1250","1256","11","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1300","1239","12","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1350","1222","13","0.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1400","1205","13","0.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1450","1187","15","0.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1500","1168","16","0.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1550","1148","18","1.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1600","1127","19","1.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1650","1105","21","1.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1700","1082","24","1.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1750","1057","27","1.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1800","1029","31","1.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1850","997","37","1.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1900","960","46","1.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1950","912","63","1.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"] + ] + }; +case ((abs(_muzzleVelocity - 200) < 0.00001) && {(abs(_airFriction - 0) < 0.00001)}): { + [ + ["300","1563","0","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["350","1556","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["400","1550","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["450","1544","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["500","1537","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["550","1531","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["600","1525","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["650","1519","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["700","1512","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["750","1506","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["800","1499","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["850","1493","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["900","1487","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["950","1480","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1000","1474","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1050","1467","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1100","1461","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1150","1454","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1200","1448","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1250","1441","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1300","1435","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1350","1428","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1400","1422","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1450","1415","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1500","1408","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1550","1402","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1600","1395","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1650","1388","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1700","1381","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1750","1374","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1800","1367","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1850","1360","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1900","1353","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1950","1346","4","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2000","1339","4","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2050","1332","4","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2100","1325","4","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["2150","1317","4","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["2200","1310","4","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2250","1302","4","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["2300","1295","5","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["2350","1287","5","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["2400","1280","5","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2450","1272","5","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2500","1264","5","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2550","1256","5","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["2600","1248","6","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["2650","1240","6","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2700","1232","6","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2750","1223","6","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["2800","1215","7","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2850","1206","7","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["2900","1197","7","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["2950","1188","7","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3000","1179","8","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["3050","1170","8","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3100","1160","8","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["3150","1151","9","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3200","1141","9","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["3250","1131","10","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3300","1120","10","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3350","1109","11","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3400","1098","11","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["3450","1087","12","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["3500","1075","13","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["3550","1062","14","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["3600","1049","15","0.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3650","1036","16","0.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["3700","1021","17","0.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3750","1006","19","1.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3800","990","21","1.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3850","971","24","1.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["3900","952","27","1.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3950","929","32","1.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["4000","900","40","1.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["4050","861","56","2.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"] + ] + }; + default { + ERROR("MuzzleVelocity not found in LUT"); + [] + }; +}; \ No newline at end of file diff --git a/addons/mk6mortar/functions/fnc_toggleMils.sqf b/addons/mk6mortar/functions/fnc_toggleMils.sqf new file mode 100644 index 0000000000..923a553f43 --- /dev/null +++ b/addons/mk6mortar/functions/fnc_toggleMils.sqf @@ -0,0 +1,24 @@ +/* + * Author: PabstMirror + * Toggles the mortart to show mils or degrees + * + * Arguments: + * 0: Vehicle + * 1: Player + * + * Return Value: + * No + * + * Example: + * [mortar,bob] call ace_mk6mortar_fnc_toggleMils; + * + * Public: No + */ +#include "script_component.hpp" + +PARAMS_2(_mortarVeh,_unit); + +private "_currentSetting"; + +_currentSetting = _mortarVeh getVariable [QGVAR(useMils), true]; +_mortarVeh setVariable [QGVAR(useMils), (!_currentSetting)]; diff --git a/addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf b/addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf new file mode 100644 index 0000000000..c81ff32132 --- /dev/null +++ b/addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf @@ -0,0 +1,67 @@ +/* + * Author: PabstMirror + * Called when the mk6's in game UI is loaded. Hides rangefinder data if it is disabled. + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * [] call ace_mk6mortar_fnc_turretDisplayLoaded + * + * Public: No + */ +#include "script_component.hpp" + +#define CTRL_CA_OPTICSPITCH (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_OPTICSPITCH") +#define CTRL_CA_OPTICSZOOM (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_OPTICSZOOM") +#define CTRL_CA_SOLUTION_TEXT (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_SOLUTION_TEXT") +#define CTRL_CA_DISTANCE_TEXT (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_DISTANCE_TEXT") +#define CTRL_CA_DISTANCE (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_DISTANCE") +#define CTRL_CA_TIME_TEXT (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_TIME_TEXT") +#define CTRL_CA_TIME (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_TIME") +#define CTRL_CA_ELEV_NEED_TEXT (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_ELEV_NEED_TEXT") +#define CTRL_CA_RANGEELEMENTS_GROUP (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_RangeElements_group") + +#define CTRL_CA_HEADING (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_Heading") +#define CTRL_CA_ELEV (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_ELEV") +#define CTRL_CA_ELEV_NEED (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_ELEV_NEED") + +private ["_display", "_fnc_hideControl"]; + +disableSerialization; + +_display = uiNamespace getVariable ["ACE_Mk6_RscWeaponRangeArtillery", displayNull]; +if (isNull _display) exitWith {}; + +_fnc_hideControl = { + private "_idc"; + PARAMS_2(_path,_hideCtrl); + _idc = getNumber (_path >> "IDC"); + _pos = []; + if (_hideCtrl) then { + _pos = [-9,-9,0,0]; + } else { + { + if (isNumber (_path >> _x)) then { + _pos pushBack (getNumber (_path >> _x)); + } else { + _pos pushBack (call compile (getText (_path >> _x))); + }; + } forEach ["x", "y", "w", "h"]; + }; + (_display displayCtrl _idc) ctrlSetPosition _pos; + (_display displayCtrl _idc) ctrlCommit 0; +}; + +{ + [_x, (!GVAR(allowComputerRangefinder))] call _fnc_hideControl; +} forEach [CTRL_CA_OPTICSPITCH, CTRL_CA_OPTICSZOOM, CTRL_CA_SOLUTION_TEXT, CTRL_CA_DISTANCE_TEXT, CTRL_CA_DISTANCE, CTRL_CA_TIME_TEXT, CTRL_CA_TIME, CTRL_CA_ELEV_NEED_TEXT, CTRL_CA_RANGEELEMENTS_GROUP]; + +//Always hide these, handled by the mil convertions PFEH in handlePlayerVehChanged +[CTRL_CA_HEADING, true] call _fnc_hideControl; +[CTRL_CA_ELEV, true] call _fnc_hideControl; +[CTRL_CA_ELEV_NEED, true] call _fnc_hideControl; + diff --git a/addons/mk6mortar/functions/script_component.hpp b/addons/mk6mortar/functions/script_component.hpp new file mode 100644 index 0000000000..9980d4fc88 --- /dev/null +++ b/addons/mk6mortar/functions/script_component.hpp @@ -0,0 +1 @@ +#include "\z\ace\addons\mk6mortar\script_component.hpp" \ No newline at end of file diff --git a/addons/mk6mortar/script_component.hpp b/addons/mk6mortar/script_component.hpp new file mode 100644 index 0000000000..cb74d552de --- /dev/null +++ b/addons/mk6mortar/script_component.hpp @@ -0,0 +1,14 @@ +#define COMPONENT mk6mortar +#include "\z\ace\Addons\main\script_mod.hpp" + +#ifdef DEBUG_ENABLED_MK6MORTAR + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_MK6MORTAR + #define DEBUG_SETTINGS DEBUG_SETTINGS_MK6MORTAR +#endif + +#include "\z\ace\Addons\main\script_macros.hpp" + +#define MK6_82mm_AIR_FRICTION -0.0001 \ No newline at end of file diff --git a/addons/mk6mortar/stringtable.xml b/addons/mk6mortar/stringtable.xml new file mode 100644 index 0000000000..1dfdd1b470 --- /dev/null +++ b/addons/mk6mortar/stringtable.xml @@ -0,0 +1,29 @@ + + + + + 82mm Rangetable + 82mm Distanztabelle + Tabela strzelnicza 82mm + table de tir 82mm + + + Range Table for the MK6 82mm Mortar + Distanztabelle für den Mk6 82mm Mortar + Tabela strzelnicza dla moździerza 82mm MK6 + Table de tir pour le mortier MK6 82mm + + + Open 82mm Rangetable + Öffne 82mm Distanztabelle + Otwórz tabelę strzelniczą 82mm + ouvrir la table de tir 82mm + + + Charge + Ladung + Charge + Ładunek + + + diff --git a/addons/modules/XEH_preInit.sqf b/addons/modules/XEH_preInit.sqf index a8b9bd061e..dfbbe2c2b9 100644 --- a/addons/modules/XEH_preInit.sqf +++ b/addons/modules/XEH_preInit.sqf @@ -3,6 +3,8 @@ ADDON = false; PREP(moduleInit); +PREP(bi_moduleProjectile); + GVAR(moduleInitCollection) = []; ADDON = true; diff --git a/addons/modules/config.cpp b/addons/modules/config.cpp index bffcec4faf..4fc3b8b60d 100644 --- a/addons/modules/config.cpp +++ b/addons/modules/config.cpp @@ -23,6 +23,9 @@ class CfgVehicles { init = QUOTE(_this call DFUNC(moduleInit)); }; }; + class ModuleOrdnance_F: Module_F { + function = "ace_modules_fnc_bi_moduleProjectile"; + }; }; #include "CfgEventHandlers.hpp" diff --git a/addons/modules/functions/fnc_bi_moduleProjectile.sqf b/addons/modules/functions/fnc_bi_moduleProjectile.sqf new file mode 100644 index 0000000000..56e3eb9883 --- /dev/null +++ b/addons/modules/functions/fnc_bi_moduleProjectile.sqf @@ -0,0 +1,191 @@ +/* + * Author: Bohemia Interactive + * Module function for spawning projectiles + * Used by Curator artillery modules etc + * + * Arguments: + * 0: The logic object + * + * Return Value: + * nil + * + * Public: No + */ + +_fnc_scriptNameParentTemp = if !(isnil '_fnc_scriptName') then {_fnc_scriptName} else {'BIS_fnc_moduleProjectile'}; +private ['_fnc_scriptNameParent']; +_fnc_scriptNameParent = _fnc_scriptNameParentTemp; +_fnc_scriptNameParentTemp = nil; + +private ['_fnc_scriptName']; +_fnc_scriptName = 'BIS_fnc_moduleProjectile'; +scriptname _fnc_scriptName; + +private ["_logic", "_units", "_activated"]; +_logic = _this select 0; +_units = _this select 1; +_activated = _this select 2; + +if ({local _x} count (objectcurators _logic) > 0) then { + //--- Reveal the circle to curators + _logic hideobject false; + _logic setpos position _logic; +}; +if !(isserver) exitwith {}; + +if (_activated) then { + _ammo = _logic getvariable ["type",gettext (configfile >> "cfgvehicles" >> typeof _logic >> "ammo")]; + if (_ammo != "") then { + _cfgAmmo = configfile >> "cfgammo" >> _ammo; + //if !(isclass _cfgAmmo) exitwith {["CfgAmmo class '%1' not found.",_ammo] call bis_fnc_error;}; + _dirVar = _fnc_scriptname + typeof _logic; + _logic setdir (missionnamespace getvariable [_dirVar,direction _logic]); //--- Restore custom direction + _pos = getposatl _logic; + _posAmmo = +_pos; + _posAmmo set [2,0]; + _dir = direction _logic; + _simulation = tolower gettext (configfile >> "cfgammo" >> _ammo >> "simulation"); + _altitude = 0; + _velocity = []; + _attach = false; + _radio = ""; + _delay = 60; + _sound = ""; + _soundSourceClass = ""; + _hint = []; + _shakeStrength = 0; + _shakeRadius = 0; + switch (_simulation) do { + case "shotshell": { + _altitude = 1000; + _velocity = [0,0,-100]; + _radio = "SentGenIncoming"; + _sounds = if (getnumber (_cfgAmmo >> "hit") < 200) then {["mortar1","mortar2"]} else {["shell1","shell2","shell3","shell4"]}; + _sound = _sounds call bis_fnc_selectrandom; + _hint = ["Curator","PlaceOrdnance"]; + _shakeStrength = 0.01; + _shakeRadius = 300; + }; + case "shotsubmunitions": { + _posAmmo = [_posAmmo,500,_dir + 180] call bis_fnc_relpos; + _altitude = 1000 - ((getterrainheightasl _posAmmo) - (getterrainheightasl _pos)); + _posAmmo set [2,_altitude]; + _velocity = [sin _dir * 68,cos _dir * 68,-100]; + _radio = "SentGenIncoming"; + _hint = ["Curator","PlaceOrdnance"]; + _shakeStrength = 0.02; + _shakeRadius = 500; + }; + case "shotilluminating": { + _altitude = 66; + _velocity = [wind select 0,wind select 1,30]; + _sound = "SN_Flare_Fired_4"; + _soundSourceClass = "SoundFlareLoop_F"; + }; + case "shotnvgmarker"; + case "shotsmokex": { + _altitude = 0; + _velocity = [0,0,0]; + _attach = true; + }; + default {["Ammo simulation '%1' is not supported",_simulation] call bis_fnc_error;}; + }; + _fnc_playRadio = { + if (_radio != "") then { + _entities = (getposatl _logic) nearentities ["All",100]; + _sides = []; + { + if (isplayer _x) then { + _side = side group _x; + if (_side in [east,west,resistance,civilian]) then { + //--- Play radio (only if it wasn't played recently) + if (time > _x getvariable ["BIS_fnc_moduleProjectile_radio",-_delay]) then { + [[_side,_radio,"side"],"bis_fnc_sayMessage",_x] call bis_fnc_mp; + _x setvariable ["BIS_fnc_moduleProjectile_radio",time + _delay]; + }; + }; + }; + } foreach _entities; + }; + }; + if (count _hint > 0) then { + [[_hint,nil,nil,nil,nil,nil,nil,true],"bis_fnc_advHint",objectcurators _logic] call bis_fnc_mp; + }; + if (count _velocity == 3) then { + _altitude = (_logic getvariable ["altitude",_altitude]) call bis_fnc_parsenumber; + _radio = _logic getvariable ["radio",_radio]; + + //--- Create projectile + _posAmmo set [2,_altitude]; + _projectile = createvehicle [_ammo,_posAmmo,[],0,"none"]; + _projectile setpos _posAmmo; + _projectile setvelocity _velocity; + if (_attach) then {_projectile attachto [_logic,[0,0,_altitude]];}; + + // This is our addition to this function + if (!isnil "ace_frag_fnc_addManualTrack") then { + [_projectile] call ace_frag_fnc_addManualTrack + }; + + //--- Play sound + if (_sound != "") then {[[_logic,_sound,"say3D"],"bis_fnc_sayMessage"] call bis_fnc_mp;}; + + //--- Create sound source + _soundSource = if (_soundSourceClass != "") then {createSoundSource [_soundSourceClass,_pos,[],0]} else {objnull}; + + //--- Play radio warning + [] call _fnc_playRadio; + + //--- Update + if (_attach) then { + waituntil { + _soundSource setposatl getposatl _projectile; + sleep 1; + isnull _projectile || isnull _logic + }; + } else { + waituntil { + _soundSource setposatl getposatl _projectile; + + if (getposatl _logic distance _pos > 0 || direction _logic != _dir) then { + _posNew = getposasl _logic; + _dirDiff = direction _logic - _dir; + _posNew = [_posNew,[getposasl _projectile,_pos] call bis_fnc_distance2d,direction _logic + 180] call bis_fnc_relpos; + _posNew set [2,getposasl _projectile select 2]; + _projectile setvelocity ([velocity _projectile,-_dirDiff] call bis_fnc_rotatevector2d); + _projectile setposasl _posNew; + _pos = getposatl _logic; + _dir = direction _logic; + missionnamespace setvariable [_dirVar,_dir]; + }; + sleep 0.1; + isnull _projectile || isnull _logic + }; + }; + deletevehicle _projectile; + deletevehicle _soundSource; + if (count objectcurators _logic > 0) then { + + //--- Delete curator spawned logic + if (_shakeStrength > 0) then { + if (_simulation == "shotsubmunitions") then {sleep 0.5;}; + [[_shakeStrength,0.7,[position _logic,_shakeRadius]],"bis_fnc_shakeCuratorCamera"] call bis_fnc_mp; + }; + deletevehicle _logic; + } else { + + //--- Repeat to achieve permanent effect + _repeat = _logic getvariable ["repeat",0] > 0; + if (_repeat) then { + [_logic,_units,_activated] call bis_fnc_moduleprojectile; + } else { + deletevehicle _logic; + }; + }; + } else { + deletevehicle _logic; + }; + } else { + ["Cannot create projectile, 'ammo' config attribute is missing in %1",typeof _logic] call bis_fnc_error; + }; +}; diff --git a/addons/nametags/stringtable.xml b/addons/nametags/stringtable.xml index db6c44256f..6da47a3c45 100644 --- a/addons/nametags/stringtable.xml +++ b/addons/nametags/stringtable.xml @@ -62,7 +62,7 @@ Show vehicle crew info Afficher les informations de l'équipage - Zeige Fahrzeugbesatzung + Fahrzeugbesatzung anzeigen Mostrar tripulantes Pokaż załogę pojazdu Zobrazit info o posádce vozidla @@ -72,7 +72,7 @@ Show name tags for AI units - Zeige Namen für KI Einheiten + Namen für KI Einheiten anzeigen Mostrar etiquetas de nombre para unidades IA Показывать имена ботов Zobrazit jména AI @@ -83,7 +83,7 @@ Show SoundWaves (requires player names) - Zeigen Schallwellen (benötigt Spielernamen) + Schallwellen anzeigen (benötigt Spielernamen) Mostrar onda sonora (requiere Mostrar nombres de jugadores) Индикатор разговора (при вкл. именах) Zobrazit SoundWaves (vyžaduje jména hráčů) @@ -104,4 +104,4 @@ Colore nametag di default (membri non del gruppo) - \ No newline at end of file + diff --git a/addons/optics/stringtable.xml b/addons/optics/stringtable.xml index 28530ecf1e..56216f2cb1 100644 --- a/addons/optics/stringtable.xml +++ b/addons/optics/stringtable.xml @@ -1,5 +1,4 @@  - diff --git a/addons/optionsmenu/stringtable.xml b/addons/optionsmenu/stringtable.xml index 2ef75b9bf2..df71dceb57 100644 --- a/addons/optionsmenu/stringtable.xml +++ b/addons/optionsmenu/stringtable.xml @@ -1,5 +1,4 @@  - @@ -27,7 +26,7 @@ Reset All - Alles Zurücksetzen + Alles zurücksetzen Reiniciar todo Полный сброс Vyresetovat vše @@ -129,7 +128,7 @@ String input. - String input. + Zeichenketteneingabe Introducir cadena de texto. Строчный ввод. Wpisywanie tekstu. @@ -150,8 +149,13 @@ Number +<<<<<<< HEAD Nummer Número +======= + Zahl + Numero +>>>>>>> acemod/master Число Číslo Cyfra @@ -183,7 +187,7 @@ Include Client Settings - Beinhalte Client-Einstellungen + Schließe Client-Einstellungen ein Incluir configuración de cliente Включить настройки клиента Zahrnout nastavení klienta @@ -218,7 +222,12 @@ Option Menu UI Scaling Menu option: taille de l'UI Skalowanie UI menu ustawień +<<<<<<< HEAD Menú de opciónes de escalado de la interfaz de usuario +======= + Opción de escalado del menú UI + UI Skalierung +>>>>>>> acemod/master \ No newline at end of file diff --git a/addons/overheating/stringtable.xml b/addons/overheating/stringtable.xml index 9fec8818c8..f326ac84a1 100644 --- a/addons/overheating/stringtable.xml +++ b/addons/overheating/stringtable.xml @@ -94,15 +94,15 @@ Sostiuisci la canna - Swapping barrel... - Lauf wird gewechselt... - Cambiando el cañón... - Wymienianie lufy... + Swapping barrel ... + Lauf wird gewechselt ... + Cambiando el cañón ... + Wymienianie lufy ... Vyměňuji hlaveň ... - Changement du canon... + Changement du canon ... Смена ствола ... - Cső kicserélése folyamatban... - Substituindo cano... + Cső kicserélése folyamatban ... + Substituindo cano ... Sto sostituendo la canna ... @@ -118,7 +118,7 @@ Canna sostituita - Check weapons temperature + Check weapon temperature Temperatur der Waffe prüfen Verificar temperatura del arma Sprawdź temperaturę broni @@ -131,13 +131,13 @@ Check weapon temperature + Waffentemperatur prüfen Verificar temperatura del arma Sprawdź temperaturę broni Zkontrolovat teplotu zbraně Vérifier la température Fegyverhő ellenőrzése Проверить температуру оружия - Waffentemperatur prüfen Checking temperature ... @@ -164,4 +164,4 @@ Температура - \ No newline at end of file + diff --git a/addons/parachute/stringtable.xml b/addons/parachute/stringtable.xml index a1de714331..c0a63755b1 100644 --- a/addons/parachute/stringtable.xml +++ b/addons/parachute/stringtable.xml @@ -1,5 +1,4 @@  - diff --git a/addons/realisticnames/CfgWeapons.hpp b/addons/realisticnames/CfgWeapons.hpp index 3cbe03f465..8eb3c04577 100644 --- a/addons/realisticnames/CfgWeapons.hpp +++ b/addons/realisticnames/CfgWeapons.hpp @@ -193,7 +193,7 @@ class CfgWeapons { }; // marksmen marksman - /*class DMR_02_base_F: Rifle_Long_Base_F { + class DMR_02_base_F: Rifle_Long_Base_F { displayName = "$STR_ACE_RealisticNames_DMR_02"; //MAR-10 .338"; }; @@ -208,7 +208,6 @@ class CfgWeapons { class srifle_DMR_02_sniper_F: srifle_DMR_02_F { displayName = "$STR_ACE_RealisticNames_srifle_DMR_02_sniper"; //MAR-10 .338 (Sand)"; }; - */ class DMR_03_base_F: Rifle_Long_Base_F { displayName = "$STR_ACE_RealisticNames_DMR_03"; //Mk-I EMR 7.62 mm"; }; @@ -236,7 +235,6 @@ class CfgWeapons { class srifle_DMR_03_spotter_F: srifle_DMR_03_F { displayName = "$STR_ACE_RealisticNames_srifle_DMR_03_spotter"; //NATO DMR (provisional) spotter"; }; - /* class DMR_04_base_F: Rifle_Long_Base_F { displayName = "$STR_ACE_RealisticNames_DMR_04"; //ASP-1 Kir 12.7 mm"; }; @@ -264,7 +262,6 @@ class CfgWeapons { class srifle_DMR_05_tan_f: srifle_DMR_05_blk_F { displayName = "$STR_ACE_RealisticNames_srifle_DMR_05_tan"; //Cyrus 9.3 mm (Tan)"; }; - */ class DMR_06_base_F: Rifle_Long_Base_F { displayName = "$STR_ACE_RealisticNames_DMR_06"; //Mk14 7.62 mm"; }; @@ -278,7 +275,6 @@ class CfgWeapons { }; // marksmen mgs - /* class MMG_01_base_F: Rifle_Long_Base_F { displayName = "$STR_ACE_RealisticNames_MMG_01"; //Navid 9.3 mm"; }; @@ -290,7 +286,6 @@ class CfgWeapons { class MMG_01_tan_F: MMG_01_hex_F { displayName = "$STR_ACE_RealisticNames_MMG_01_tan"; //Navid 9.3 mm (Tan)"; }; - */ class MMG_02_base_F: Rifle_Long_Base_F { displayName = "$STR_ACE_RealisticNames_MMG_02"; //SPMG .338"; }; diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index 4165ee1e94..4b81a459f4 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -305,7 +305,7 @@ HEMTT médico HEMTT Medyczny HEMTT Zdravotnický - HEMTT Sanitaire + HEMTT Médical HEMTT Медицинский HEMTT Médico HEMTT (egészségügyi) @@ -485,7 +485,7 @@ KamAZ médico KamAZ Medyczny KAMAZ Zdravotnický - KamAZ Sanitaire + KamAZ Médical КамАЗ Медицинский KamAZ Médico KamAZ (egészségügyi) @@ -665,7 +665,7 @@ Typhoon médico Typhoon Medyczny Typhoon zdravotnický - Typhoon Sanitaire + Typhoon Médical Тайфун Медицинский Typhoon Médico Typhoon (egészségügyi) @@ -726,7 +726,7 @@ CH-47I Chinook (nieuzbrojony) CH-47I Chinook (невооруженный) CH-47I Chinook (neozbrojený) - CH-47I Chinook (Neozbrojený) + CH-47I Chinook (non-armé) CH-47I Chinook (fegyvertelen) @@ -867,7 +867,7 @@ M18A1 Claymore Mina kierunkowa M18A1 Claymore Mina Claymore M18A1 - M18A1 Claymore Mine antipersonnel à effet dirigé + M18A1 Claymore M18A1 Клеймор M18A1 Claymore M18A1 Claymore akna @@ -891,7 +891,7 @@ Bloque de demolición M112 Ładunek burzący M112 Výbušná nálož M112 - Pétard M112 + M112 Block de Démolition M112 подрывной заряд M112 Carga de Demolição M112 romboló tömb @@ -1011,7 +1011,7 @@ Mina antipersona VS-50 Mina przeciwpiechotna VS-50 Protipěchotní mina VS-50 - VS-50 Mine antipersonnel à pression + VS-50 Mine AP VS-50 Противопехотная мина VS-50 Mina antipessoal VS-50 gyalogsági taposóakna @@ -1023,7 +1023,7 @@ Mina antipersona M26 Mina przeciwpiechotna M26 Šrapnelová mina M26 - M26 Mine antipersonnel bondissante + M26 Mine AP bondissante M26 Противопехотная мина M26 Mina saltadora antipessoal M26 gyalogsági ugróakna @@ -1035,7 +1035,7 @@ Mina antipersona de alambre PMR-3 Mina przeciwpiechotna PMR-3 Nástražná mina PMR-3 - PMR-3 Mine antipersonnel à traction + PMR-3 Mine AP à traction PMR-3 Противопехотная мина PMR-3 Mina antipessoal (armadilha) PMR-3 botlódrótos gyalogsági akna @@ -1062,14 +1062,14 @@ МР-443 "Грач" - ACP-C2 - ACP-C2 - ACP-C2 - ACP-C2 - ACP-C2 - ACP-C2 - ACP-C2 - ACP-C2 + Custom Covert II + Custom Covert II + Custom Covert II + Custom Covert II + Custom Covert II + Custom Covert II + Custom Covert II + Custom Covert II FNX-45 Tactical @@ -1136,7 +1136,7 @@ Mini-Spike (PALR) Mini-Spike (PT) Mini-Spike (AT) - Mini-Spike (AT) + Mini-Spike (AC) Mini-Spike (Tankelhárító) Mini-Spike (AT) Mini-Spike (AT) @@ -1156,7 +1156,7 @@ MX (Schwarz) MX (Czarny) MX (černý) - MX ( Noir) + MX (Noir) MX (Fekete) MX (Negro) MX (черный) @@ -1196,7 +1196,7 @@ MX 3GL (Schwarz) MX 3GL (Czarny) MX 3GL (černý) - MX 3 GL (Noir) + MX 3GL (Noir) MX 3GL (Fekete) MX 3GL (Negro) MX 3GL (черный) @@ -1242,34 +1242,34 @@ MXM (черный) - KT2002 Katiba - KT2002 Katiba - KT2002 Katiba - KT2002 Katiba - KT2002 Katiba - KT2002 Katiba - KT2002 Katiba - KT2002 Катиба + KH2002 Sama + KH2002 Sama + KH2002 Sama + KH2002 Sama + KH2002 Sama + KH2002 Sama + KH2002 Sama + KH2002 Сама - KT2002C Katiba - KT2002C Katiba - KT2002C Katiba - KT2002C Katiba - KT2002C Katiba - KT2002C Katiba - KT2002C Katiba - KT2002C Катиба + KH2002C Sama + KH2002C Sama + KH2002C Sama + KH2002C Sama + KH2002C Sama + KH2002C Sama + KH2002C Sama + KH2002C Сама - KT2002 Katiba KGL - KT2002 Katiba KGL - KT2002 Katiba KGL - KT2002 Katiba KGL - KT2002 Katiba KGL - KT2002 Katiba KGL - KT2002 Katiba KGL - KT2002 Катиба KGL + KH2002 Sama KGL + KH2002 Sama KGL + KH2002 Sama KGL + KH2002 Sama KGL + KH2002 Sama KGL + KH2002 Sama KGL + KH2002 Sama KGL + KH2002 Сама KGL F2000 (Camo) @@ -1482,200 +1482,256 @@ VS-121 - TODO: MAR-10 .338 - TODO: MAR-10 .338 - MAR-10 .338 - TODO: MAR-10 .338 - TODO: MAR-10 .338 + Noreen "Bad News" ULR + Noreen "Bad News" ULR + Noreen "Bad News" ULR + Noreen "Bad News" ULR + Noreen "Bad News" ULR + Noreen "Bad News" ULR + Noreen "Bad News" ULR - TODO: MAR-10 .338 (Black) - TODO: MAR-10 .338 (Black) - MAR-10 .338 (Noir) - TODO: MAR-10 .338 (Negro) - TODO: MAR-10 .338 (черный) + Noreen "Bad News" ULR (Black) + Noreen "Bad News" ULR (Black) + Noreen "Bad News" ULR (Noir) + Noreen "Bad News" ULR (Negro) + Noreen "Bad News" ULR (черный) + Noreen "Bad News" ULR (Schwarz) + Noreen "Bad News" ULR (czarny) - TODO: MAR-10 .338 (Camo) - TODO: MAR-10 .338 (Camo) - MAR-10 .338 (Camo) - TODO: MAR-10 .338 (Camuflaje) - TODO: MAR-10 .338 (камо) + Noreen "Bad News" ULR (Camo) + Noreen "Bad News" ULR (Camo) + Noreen "Bad News" ULR (Camo) + Noreen "Bad News" ULR (Camuflaje) + Noreen "Bad News" ULR (камо) + Noreen "Bad News" ULR (Camo) + Noreen "Bad News" ULR (kamuflaż) - TODO: MAR-10 .338 (Sand) - TODO: MAR-10 .338 (Sand) - MAR-10 .338 (Beige) - TODO: MAR-10 .338 (Arena) - TODO: MAR-10 .338 (песочный) + Noreen "Bad News" ULR (Sand) + Noreen "Bad News" ULR (Sand) + Noreen "Bad News" ULR (Beige) + Noreen "Bad News" ULR (Arena) + Noreen "Bad News" ULR (песочный) + Noreen "Bad News" ULR (Sand) + Noreen "Bad News" ULR (piaskowy) - SG 556 7.62 mm - SG 556 7.62 mm - SG 556 7.62 mm - SG 556 7.62 mm - SG 556 7.62 мм + SIG 556 + SIG 556 + SIG 556 + SIG 556 + SIG 556 + SIG 556 + SIG 556 - SG 556 7.62 mm (Black) - SG 556 7.62 mm (Black) - SG 556 7.62 mm (Noir) - SG 556 7.62 mm (Negro) - SG 556 7.62 мм (черный) + SIG 556 (Black) + SIG 556 (Black) + SIG 556 (Noir) + SIG 556 (Negro) + SIG 556 (черный) + SIG 556 (czarny) + SIG 556 (Schwarz) - SG 556 7.62 mm (Khaki) - SG 556 7.62 mm (Khaki) - SG 556 7.62 mm (Kaki) - SG 556 7.62 mm (Caqui) - SG 556 7.62 мм (хаки) + SIG 556 (Khaki) + SIG 556 (Khaki) + SIG 556 (Kaki) + SIG 556 (Caqui) + SIG 556 (хаки) + SIG 556 (khaki) + SIG 556 (Khaki) - SG 556 7.62 mm (Sand) - SG 556 7.62 mm (Sand) - SG 556 7.62 mm (Beige) - SG 556 7.62 mm (Arena) - SG 556 7.62 мм (песочный) + SIG 556 (Sand) + SIG 556 (Sand) + SIG 556 (Beige) + SIG 556 (Arena) + SIG 556 (песочный) + SIG 556 (piaskowy) + SIG 556 (Sand) - SG 556 7.62 mm (Camo) - SG 556 7.62 mm (Camo) - SG 556 7.62 mm (Camo) - SG 556 7.62 mm (Camuflaje) - SG 556 7.62 мм (камо) + SIG 556 (Camo) + SIG 556 (Camo) + SIG 556 (Camo) + SIG 556 (Camuflaje) + SIG 556 (камо) + SIG 556 (kamuflaż) + SIG 556 (Camo) - SG 556 7.62 mm (Woodland) - SG 556 7.62 mm (Woodland) - SG 556 7.62 mm (Woodland) - SG 556 7.62 mm (Bosque) - SG 556 7.62 мм (лесной) + SIG 556 (Woodland) + SIG 556 (Woodland) + SIG 556 (Woodland) + SIG 556 (Bosque) + SIG 556 (лесной) + SIG 556 (leśny) + SIG 556 (Woodland) - SG 556 7.62 mm (provisional) spotter - SG 556 7.62 mm (provisional) spotter - SG 556 7.62 mm (provisoire) Observateur - SG 556 7.62 mm (provisional) observador - SG 556 7.62 мм (provisional) корректировщик + SIG 556 (provisional) spotter + SIG 556 (provisional) spotter + SIG 556 (provisoire) Observateur + SIG 556 (provisional) observador + SIG 556 (provisional) корректировщик + SIG 556 (prowizoryczny) obserwator + SIG 556 (provisorisch) Beobachter - TODO: ASP-1 Kir 12.7 mm - TODO: ASP-1 Kir 12.7 mm - ASP-1 Kir 12.7 mm - TODO: ASP-1 Kir 12.7 mm - TODO: ASP-1 Kir 12.7 мм + ASP-1 Kir + ASP-1 Kir + ASP-1 Kir + ASP-1 Kir + ASP-1 Kir + ASP-1 Kir + ASP-1 Kir - TODO: ASP-1 Kir 12.7 mm (Black) - TODO: ASP-1 Kir 12.7 mm (Black) - ASP-1 Kir 12.7 mm (Noir) - TODO: ASP-1 Kir 12.7 mm (Negro) - TODO: ASP-1 Kir 12.7 мм (черный) + ASP-1 Kir (Black) + ASP-1 Kir (Black) + ASP-1 Kir (Noir) + ASP-1 Kir (Negro) + ASP-1 Kir (черный) + ASP-1 Kir (Schwarz) + ASP-1 Kir (czarny) - TODO: ASP-1 Kir 12.7 mm (Tan) - TODO: ASP-1 Kir 12.7 mm (Tan) - ASP-1 Kir 12.7 mm (Tan) - TODO: ASP-1 Kir 12.7 mm (Tan) - TODO: ASP-1 Kir 12.7 мм (бронзовый) + ASP-1 Kir (Tan) + ASP-1 Kir (Tan) + ASP-1 Kir (Tan) + ASP-1 Kir (Tan) + ASP-1 Kir (бронзовый) + ASP-1 Kir (Hellbraun) + ASP-1 Kir (Tan) - TODO: Cyrus 9.3 mm - TODO: Cyrus 9.3 mm - Cyrus 9.3 mm - TODO: Cyrus 9.3 mm - TODO: Cyrus 9.3 мм + Cyrus + Cyrus + Cyrus + Cyrus + Cyrus + Cyrus + Cyrus - TODO: Cyrus 9.3 mm (Black) - TODO: Cyrus 9.3 mm (Black) - Cyrus 9.3 mm (Noir) - TODO: Cyrus 9.3 mm (Negro) - TODO: Cyrus 9.3 мм (черный) + Cyrus (Black) + Cyrus (Black) + Cyrus (Noir) + Cyrus (Negro) + Cyrus (черный) + Cyrus (Schwarz) + Cyrus (czarny) - TODO: Cyrus 9.3 mm (Hex) - TODO: Cyrus 9.3 mm (Hex) - Cyrus 9.3 mm (Hex) - TODO: Cyrus 9.3 mm (Hex) - TODO: Cyrus 9.3 мм (гекс) + Cyrus (Hex) + Cyrus (Hex) + Cyrus (Hex) + Cyrus (Hex) + Cyrus (гекс) + Cyrus (Hex) + Cyrus (hex) - TODO: Cyrus 9.3 mm (Tan) - TODO: Cyrus 9.3 mm (Tan) - Cyrus 9.3 mm (Tan) - TODO: Cyrus 9.3 mm (Tan) - TODO: Cyrus 9.3 мм (бронза) + Cyrus (Tan) + Cyrus (Tan) + Cyrus (Tan) + Cyrus (Tan) + Cyrus (бронза) + Cyrus (Hellbraun) + Cyrus (podpalany) - M14 7.62 mm - M14 7.62 mm - M14 7.62 mm - M14 7.62 mm - M14 7.62 мм + M14 + M14 + M14 + M14 + M14 + M14 + M14 - M14 7.62 mm (Camo) - M14 7.62 mm (Camo) - M14 7.62 mm (Camo) - M14 7.62 mm (Camuflaje) - M14 7.62 мм (Камо) + M14 (Camo) + M14 (Camo) + M14 (Camo) + M14 (Camuflaje) + M14 (Камо) + M14 (kamuflaż) + M14 (Camo) - M14 7.62 mm (Olive) - M14 7.62 mm (Olive) - M14 7.62 mm (Olive) - M14 7.62 mm (Oliva) - M14 7.62 мм (Олива) + M14 (Olive) + M14 (Olive) + M14 (Olive) + M14 (Oliva) + M14 (Олива) + M14 (oliwkowy) + M14 (Olive) - TODO: Navid 9.3 mm - TODO: Navid 9.3 mm - Navid 9.3 mm - TODO: Navid 9.3 mm - TODO: Navid 9.3 мм + HK121 + HK121 + HK121 + HK121 + HK121 + HK121 + HK121 - TODO: Navid 9.3 mm (Hex) - TODO: Navid 9.3 mm (Hex) - Navid 9.3 mm (Hex) - TODO: Navid 9.3 mm (Hex) - TODO: Navid 9.3 мм (гекс) + HK121 (Hex) + HK121 (Hex) + HK121 (Hex) + HK121 (Hex) + HK121 (гекс) + HK121 (Hex) + HK121 (hex) - TODO: Navid 9.3 mm (Tan) - TODO: Navid 9.3 mm (Tan) - Navid 9.3 mm (Tan) - TODO: Navid 9.3 mm (Tan) - TODO: Navid 9.3 мм (бронза) + HK121 (Tan) + HK121 (Tan) + HK121 (Tan) + HK121 (Tan) + HK121 (бронза) + HK121 (Hellbraun) + HK121 (podpalany) - LWMMG .338 - LWMMG .338 - LWMMG .338 - LWMMG .338 - LWMMG .338 + LWMMG + LWMMG + LWMMG + LWMMG + LWMMG + LWMMG + LWMMG - LWMMG .338 (MTP) - LWMMG .338 (MTP) - LWMMG .338 (MTP) - LWMMG .338 (MTP) - LWMMG .338 (MTP) + LWMMG (MTP) + LWMMG (MTP) + LWMMG (MTP) + LWMMG (MTP) + LWMMG (MTP) + LWMMG (MTP) + LWMMG (MTP) - LWMMG .338 (Black) - LWMMG .338 (Black) - LWMMG .338 (Noir) - LWMMG .338 (Negro) - LWMMG .338 (Черный) + LWMMG (Black) + LWMMG (Black) + LWMMG (Noir) + LWMMG (Negro) + LWMMG (Черный) + LWMMG (czarny) + LWMMG (Schwarz) - LWMMG .338 (Sand) - LWMMG .338 (Sand) - SPMG .338 (Beige) - LWMMG .338 (Arena) - LWMMG .338 (Песочный) + LWMMG (Sand) + LWMMG (Sand) + SPMG (Beige) + LWMMG (Arena) + LWMMG (Песочный) + LWMMG (piaskowy) + LWMMG (Sand) - \ No newline at end of file + diff --git a/addons/recoil/CfgEventHandlers.hpp b/addons/recoil/CfgEventHandlers.hpp new file mode 100644 index 0000000000..60fc3892fc --- /dev/null +++ b/addons/recoil/CfgEventHandlers.hpp @@ -0,0 +1,14 @@ + +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preInit)); + }; +}; + +class Extended_FiredBIS_EventHandlers { + class CAManBase { + class ADDON { + clientFiredBIS = QUOTE(if (_this select 0 == ACE_player) then {_this call FUNC(camshake)};); + }; + }; +}; diff --git a/addons/recoil/CfgMoves.hpp b/addons/recoil/CfgMoves.hpp new file mode 100644 index 0000000000..ecad382cb5 --- /dev/null +++ b/addons/recoil/CfgMoves.hpp @@ -0,0 +1,85 @@ + +// Completely disable BI's camshake on fire. +#define ACE_CAMSHAKEFIRE_BASE 0 +#define ACE_CAMSHAKEFIRE_LESS 0 +#define ACE_CAMSHAKEFIRE_MORE 0 + +// Go through all modes that have a camshakefire defined and change it to ours. +class CfgMovesBasic { + class Default { + camShakeFire = ACE_CAMSHAKEFIRE_NORMAL; + }; +}; + +class CfgMovesMaleSdr: CfgMovesBasic { + class States { + class AmovPercMstpSlowWrflDnon; + class AmovPknlMstpSlowWrflDnon: AmovPercMstpSlowWrflDnon { + camShakeFire = ACE_CAMSHAKEFIRE_LESS; + }; + + class AmovPercMstpSrasWrflDnon; + class AmovPpneMstpSrasWrflDnon: AmovPercMstpSrasWrflDnon { + camShakeFire = ACE_CAMSHAKEFIRE_LESS; + }; + + class AmovPknlMstpSrasWlnrDnon: Default { + camShakeFire = ACE_CAMSHAKEFIRE_LESS; + }; + + class AmovPknlMrunSlowWrflDf; + class AmovPknlMtacSlowWrflDf: AmovPknlMrunSlowWrflDf { + camShakeFire = ACE_CAMSHAKEFIRE_MORE; + }; + + class AmovPknlMrunSlowWrflDfl; + class AmovPknlMtacSlowWrflDfl: AmovPknlMrunSlowWrflDfl { + camShakeFire = ACE_CAMSHAKEFIRE_MORE; + }; + + class AmovPknlMrunSlowWrflDl; + class AmovPknlMtacSlowWrflDl: AmovPknlMrunSlowWrflDl { + camShakeFire = ACE_CAMSHAKEFIRE_MORE; + }; + + class AmovPknlMrunSlowWrflDbl; + class AmovPknlMtacSlowWrflDbl: AmovPknlMrunSlowWrflDbl { + camShakeFire = ACE_CAMSHAKEFIRE_MORE; + }; + + class AmovPknlMrunSlowWrflDb; + class AmovPknlMtacSlowWrflDb: AmovPknlMrunSlowWrflDb { + camShakeFire = ACE_CAMSHAKEFIRE_MORE; + }; + + class AmovPknlMrunSlowWrflDbr; + class AmovPknlMtacSlowWrflDbr: AmovPknlMrunSlowWrflDbr { + camShakeFire = ACE_CAMSHAKEFIRE_MORE; + }; + + class AmovPknlMrunSlowWrflDr; + class AmovPknlMtacSlowWrflDr: AmovPknlMrunSlowWrflDr { + camShakeFire = ACE_CAMSHAKEFIRE_MORE; + }; + + class AmovPknlMrunSlowWrflDfr; + class AmovPknlMtacSlowWrflDfr: AmovPknlMrunSlowWrflDfr { + camShakeFire = ACE_CAMSHAKEFIRE_MORE; + }; + + class AmovPknlMstpSrasWrflDnon; + class AmovPknlMwlkSrasWrflDf: AmovPknlMstpSrasWrflDnon { + camShakeFire = ACE_CAMSHAKEFIRE_NORMAL; + }; + + class AmovPknlMrunSrasWrflDf; + class AmovPknlMtacSrasWrflDf: AmovPknlMrunSrasWrflDf { + camShakeFire = ACE_CAMSHAKEFIRE_MORE; + }; + + class AmovPknlMwlkSrasWpstDf; + class AmovPknlMtacSrasWpstDf: AmovPknlMwlkSrasWpstDf { + camShakeFire = ACE_CAMSHAKEFIRE_MORE; + }; + }; +}; diff --git a/addons/recoil/CfgRecoils.hpp b/addons/recoil/CfgRecoils.hpp index 56a28f1dc1..4b473919d5 100644 --- a/addons/recoil/CfgRecoils.hpp +++ b/addons/recoil/CfgRecoils.hpp @@ -1,11 +1,11 @@ -#define KICKBACK 1.6 +#define KICKBACK 1.4 -#define MUZZLETEMP 1 -#define MUZZLEPERM 0.1 +#define MUZZLETEMP 1.2 +#define MUZZLEPERM 0.4 #define MUZZLECLIMB_POS 1 -#define MUZZLERIGHT_POS 0.4 +#define MUZZLERIGHT_POS 0.2 #define MUZZLECLIMB_MAG 1 #define MUZZLERIGHT_MAG 1 @@ -70,7 +70,7 @@ class CfgRecoils { class recoil_sw: recoil_default { muzzleOuter[] = {0.3*MUZZLERIGHT_POS,0.8*MUZZLECLIMB_POS,0.5*MUZZLERIGHT_MAG,0.2*MUZZLECLIMB_MAG}; kickBack[] = {0.02*KICKBACK,0.04*KICKBACK}; - temporary = 0.005*MUZZLETEMP; + temporary = 0.01*MUZZLETEMP; //0.005*MUZZLETEMP; }; class recoil_mxm: recoil_default { @@ -178,13 +178,13 @@ class CfgRecoils { class recoil_mk200: recoil_default { muzzleOuter[] = {0.4*MUZZLERIGHT_POS,0.6*MUZZLECLIMB_POS,0.6*MUZZLERIGHT_MAG,0.2*MUZZLECLIMB_MAG}; kickBack[] = {0.03*KICKBACK,0.06*KICKBACK}; - temporary = 0.005*MUZZLETEMP; + temporary = 0.01*MUZZLETEMP; //0.005*MUZZLETEMP; }; class recoil_zafir: recoil_default { muzzleOuter[] = {0.5*MUZZLERIGHT_POS,1*MUZZLECLIMB_POS,0.7*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG}; kickBack[] = {0.02*KICKBACK,0.08*KICKBACK}; - temporary = 0.005*MUZZLETEMP; + temporary = 0.01*MUZZLETEMP; //0.005*MUZZLETEMP; }; class recoil_m320: recoil_default { @@ -244,12 +244,12 @@ class CfgRecoils { class recoil_mmg_01: recoil_default { muzzleOuter[] = {0.6*MUZZLERIGHT_POS,1.5*MUZZLECLIMB_POS,0.8*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG}; kickBack[] = {0.02*KICKBACK,0.08*KICKBACK}; - temporary = 0.005*MUZZLETEMP; + temporary = 0.01*MUZZLETEMP; //0.005*MUZZLETEMP; }; class recoil_mmg_02: recoil_default { muzzleOuter[] = {0.5*MUZZLERIGHT_POS,1.5*MUZZLECLIMB_POS,0.6*MUZZLERIGHT_MAG,0.4*MUZZLECLIMB_MAG}; kickBack[] = {0.04*KICKBACK,0.08*KICKBACK}; - temporary = 0.005*MUZZLETEMP; + temporary = 0.01*MUZZLETEMP; //0.005*MUZZLETEMP; }; }; diff --git a/addons/recoil/XEH_preInit.sqf b/addons/recoil/XEH_preInit.sqf new file mode 100644 index 0000000000..f6d04886c1 --- /dev/null +++ b/addons/recoil/XEH_preInit.sqf @@ -0,0 +1,8 @@ +// by commy2 +#include "script_component.hpp" + +ADDON = false; + +PREP(camshake); + +ADDON = true; diff --git a/addons/recoil/config.cpp b/addons/recoil/config.cpp index 1e2ce69fae..5b8002bc37 100644 --- a/addons/recoil/config.cpp +++ b/addons/recoil/config.cpp @@ -12,4 +12,12 @@ class CfgPatches { }; }; +#include "CfgEventHandlers.hpp" + +#include "CfgMoves.hpp" #include "CfgRecoils.hpp" + +class CfgCameraShake { + // What does this do, really? It seems like the engine no longer respects it. + defaultCaliberCoefWeaponFire = 0; +}; diff --git a/addons/recoil/functions/fnc_camshake.sqf b/addons/recoil/functions/fnc_camshake.sqf new file mode 100644 index 0000000000..806d48760b --- /dev/null +++ b/addons/recoil/functions/fnc_camshake.sqf @@ -0,0 +1,67 @@ +// TMR: Small Arms - Recoil initialization and functions +// (C) 2013 Ryan Schultz. See LICENSE. +// Edited prefixes for compatability in AGM_Realism by KoffeinFlummi +// Edited by commy2 +#include "script_component.hpp" + +#define BASE_POWER 0.40 +#define BASE_TIME 0.19 +#define BASE_FREQ 13 +#define RECOIL_COEF 40 + +private ["_unit", "_weapon", "_muzzle"]; + +_unit = _this select 0; +_weapon = _this select 1; +_muzzle = _this select 2; + +if (toLower _weapon in ["throw", "put"]) exitWith {}; + +private ["_powerMod", "_timeMod", "_freqMod"]; + +_powerMod = ([0, -0.1, -0.1, 0, -0.2] select (["STAND", "CROUCH", "PRONE", "UNDEFINED", ""] find stance _unit)) + ([0, -1, 0, -1] select (["INTERNAL", "EXTERNAL", "GUNNER", "GROUP"] find cameraView)); +_timeMod = 0; +_freqMod = 0; + +// to get camshake read kickback +private ["_config", "_recoil"]; + +_config = configFile >> "CfgWeapons" >> _weapon; +_recoil = if (_muzzle == _weapon) then { + getText (_config >> "recoil") +} else { + getText (_config >> _muzzle >> "recoil") +}; + +if (isClass (configFile >> "CfgRecoils" >> _recoil)) then { + _recoil = getArray (configFile >> "CfgRecoils" >> _recoil >> "kickBack"); + if (count _recoil < 2) then { + _recoil = [0, 0]; + }; +} else { + _recoil = [0, 0]; +}; + +// parse numbers +_recoil set [0, call compile format ["%1", _recoil select 0]]; +_recoil set [1, call compile format ["%1", _recoil select 1]]; + +private "_powerCoef"; +_powerCoef = RECOIL_COEF * linearConversion [0, 1, random 1, _recoil select 0, _recoil select 1, false]; + +if (isWeaponRested _unit) then {_powerMod = _powerMod - 0.07}; +if (isWeaponDeployed _unit) then {_powerMod = _powerMod - 0.11}; + +private "_camshake"; +_camshake = [ + _powerCoef * (BASE_POWER + _powerMod) max 0, + BASE_TIME + _timeMod max 0, + BASE_FREQ + _freqMod max 0 +]; + +/* + systemChat str _camshake; + copyToClipboard format ["addCamShake %1;", _camshake]; +*/ + +addCamShake _camshake; diff --git a/addons/recoil/functions/script_component.hpp b/addons/recoil/functions/script_component.hpp new file mode 100644 index 0000000000..24cb1ba776 --- /dev/null +++ b/addons/recoil/functions/script_component.hpp @@ -0,0 +1 @@ +#include "\z\ace\addons\recoil\script_component.hpp" \ No newline at end of file diff --git a/addons/reloadlaunchers/stringtable.xml b/addons/reloadlaunchers/stringtable.xml index 7716050334..bb949040d0 100644 --- a/addons/reloadlaunchers/stringtable.xml +++ b/addons/reloadlaunchers/stringtable.xml @@ -1,5 +1,4 @@  - diff --git a/addons/respawn/functions/fnc_module.sqf b/addons/respawn/functions/fnc_module.sqf index 4f22bdfcd4..3f1ef89a1f 100644 --- a/addons/respawn/functions/fnc_module.sqf +++ b/addons/respawn/functions/fnc_module.sqf @@ -1,19 +1,19 @@ /* - Name: ACE_Respawn_fnc_module + Name: ACE_Respawn_fnc_module - Author(s): - KoffeinFlummi, bux578, esteldunedain, commy2 + Author(s): + KoffeinFlummi, bux578, esteldunedain, commy2 - Description: - initializes the respawn module + Description: + initializes the respawn module - Parameters: - 0: OBJECT - logic - 1: ARRAY - synced units - 2: BOOLEAN - activated + Parameters: + 0: OBJECT - logic + 1: ARRAY - synced units + 2: BOOLEAN - activated - Returns: - VOID + Returns: + VOID */ #include "script_component.hpp" @@ -31,21 +31,17 @@ GVAR(Module) = true; if (isServer) then { if (GVAR(RemoveDeadBodiesDisconnected)) then { - private "_fnc_deleteDisconnected"; - _fnc_deleteDisconnected = { - _this spawn { + addMissionEventHandler ["HandleDisconnect", { + [{ PARAMS_1(_unit); - sleep 4; - if (!alive _unit) then { deleteVehicle _unit; }; - }; + }, + _this, 4, 1] call EFUNC(common,waitAndExecute); false - }; - - addMissionEventHandler ["HandleDisconnect", _fnc_deleteDisconnected]; + }]; }; }; diff --git a/addons/respawn/functions/fnc_moveRallypoint.sqf b/addons/respawn/functions/fnc_moveRallypoint.sqf index 2453c68344..da9054e6aa 100644 --- a/addons/respawn/functions/fnc_moveRallypoint.sqf +++ b/addons/respawn/functions/fnc_moveRallypoint.sqf @@ -1,47 +1,51 @@ /* - Name: ACE_Respawn_fnc_moveRallypoint - - Author(s): - commy2 - - Description: - Moves a rallypoint to the player's location - - Parameters: - 0: OBJECT - unit - 1: OBJECT - side - - Returns: - VOID + Name: ACE_Respawn_fnc_moveRallypoint + + Author(s): + commy2 + + Description: + Moves a rallypoint to the player's location + + Parameters: + 0: OBJECT - unit + 1: OBJECT - side + + Returns: + VOID */ #include "script_component.hpp" -_this spawn { - PARAMS_2(_unit,_side); - - private ["_rallypoint", "_position"]; - - // rallypoint names are defined in CfgVehicles.hpp +PARAMS_2(_unit,_side); - _rallypoint = [ - objNull, - missionNamespace getVariable ["ACE_Rallypoint_West", objNull], - missionNamespace getVariable ["ACE_Rallypoint_East", objNull], - missionNamespace getVariable ["ACE_Rallypoint_Independent", objNull] - ] select ([west, east, independent] find _side) + 1; +private ["_rallypoint", "_position"]; - if (isNull _rallypoint) exitWith {}; +// rallypoint names are defined in CfgVehicles.hpp - _position = getPosATL _unit; - _position = _position findEmptyPosition [0, 2, typeOf _rallypoint]; - if (count _position == 0) then {_position = getPosATL _unit}; +_rallypoint = [ + objNull, + missionNamespace getVariable ["ACE_Rallypoint_West", objNull], + missionNamespace getVariable ["ACE_RallypointExit_East", objNull], + missionNamespace getVariable ["ACE_RallypointExit_Independent", objNull] +] select ([west, east, independent] find _side) + 1; - _position set [2, 0]; +if (isNull _rallypoint) exitWith {}; - [localize "STR_ACE_Respawn_Deploy"] call EFUNC(common,displayTextStructured); +_position = getPosATL _unit; +_position = _position findEmptyPosition [0, 2, typeOf _rallypoint]; +if (count _position == 0) then {_position = getPosATL _unit}; + +_position set [2, 0]; + +[localize "STR_ACE_Respawn_Deploy"] call EFUNC(common,displayTextStructured); + +[{ + _rallypoint = _this select 0; + _unit = _this select 1; + _position = _this select 2; + _rallypoint = _this select 3; - sleep 5; _rallypoint setPosATL _position; _unit reveal _rallypoint; @@ -50,4 +54,5 @@ _this spawn { ["rallypointMoved", [_rallypoint, _side, _position]] call EFUNC(common,globalEvent); [localize "STR_ACE_Respawn_Deployed"] call EFUNC(common,displayTextStructured); -}; +}, +[_rallypoint, _unit, _position, _rallypoint], 5, 1] call EFUNC(common,waitAndExecute); diff --git a/addons/respawn/functions/fnc_removeBody.sqf b/addons/respawn/functions/fnc_removeBody.sqf index 5c3ed14988..e00f633e6c 100644 --- a/addons/respawn/functions/fnc_removeBody.sqf +++ b/addons/respawn/functions/fnc_removeBody.sqf @@ -1,22 +1,22 @@ /* Name: ACE_Respawn_fnc_removeBody - + Author(s): bux578 - + Description: removes a given body - + Parameters: 0: OBJECT - body 1: BOOLEAN - forceRemove // not used atm - + Returns: VOID */ #include "script_component.hpp" - + private ["_body", "_forceRemove", "_bodyRemoveTimer"]; _body = _this select 0; @@ -29,9 +29,8 @@ if (_forceRemove) then { _bodyRemoveTimer = 2; }; -[_body, _bodyRemoveTimer] spawn { - sleep (_this select 1); +[{ // hideBody takes ~20s till body is fully underground // a better hideBody would make this more aesthetic - deleteVehicle (_this select 0); -}; + deleteVehicle _this; +}, _body, _bodyRemoveTimer, 1] call EFUNC(common,waitAndExecute); diff --git a/addons/scopes/CfgWeapons.hpp b/addons/scopes/CfgWeapons.hpp index 6ca522ced7..526282a1b6 100644 --- a/addons/scopes/CfgWeapons.hpp +++ b/addons/scopes/CfgWeapons.hpp @@ -71,4 +71,18 @@ class CfgWeapons { }; }; }; + + class optic_KHS_old : ItemCore { + ACE_ScopeAdjust_Vertical[] = { -4, 30 }; + ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; + ACE_ScopeAdjust_Increment = 0.1; + class ItemInfo : InventoryOpticsItem_Base_F { + class OpticsModes { + class KHS { + discreteDistance[] = { 100 }; + discreteDistanceInitIndex = 0; + }; + }; + }; + }; }; diff --git a/addons/vector/stringtable.xml b/addons/vector/stringtable.xml index 05289d189f..edef7a7bea 100644 --- a/addons/vector/stringtable.xml +++ b/addons/vector/stringtable.xml @@ -1,18 +1,17 @@  - - Vector IV - Vector IV - Vector IV - Vector IV - Vector IV - Vector IV - Vector IV - Vector IV - Vector IV - Vector IV + Vector 21 + Vector 21 + Vector 21 + Vector 21 + Vector 21 + Vector 21 + Vector 21 + Vector 21 + Vector 21 + Vector 21 Rangefinder diff --git a/addons/vehicles/stringtable.xml b/addons/vehicles/stringtable.xml index 2312ce6027..603f2563dc 100644 --- a/addons/vehicles/stringtable.xml +++ b/addons/vehicles/stringtable.xml @@ -1,5 +1,4 @@  - diff --git a/addons/weather/ACE_Settings.hpp b/addons/weather/ACE_Settings.hpp new file mode 100644 index 0000000000..d4b5a716cf --- /dev/null +++ b/addons/weather/ACE_Settings.hpp @@ -0,0 +1,38 @@ +class ACE_Settings { + class GVAR(enableServerController) { + displayName = "Weather propagation"; + description = "Enables sever side weather propagation"; + typeName = "BOOL"; + value = 1; + }; + class GVAR(useACEWeather) { + displayName = "ACE Weather"; + description = "Overrides the default weather (editor, mission settings) with ACE weather (map based)"; + typeName = "BOOL"; + value = 1; + }; + class GVAR(syncRain) { + displayName = "Sync Rain"; + description = "Synchronizes rain"; + typeName = "BOOL"; + value = 1; + }; + class GVAR(syncWind) { + displayName = "Sync Wind"; + description = "Synchronizes wind"; + typeName = "BOOL"; + value = 1; + }; + class GVAR(syncMisc) { + displayName = "Sync Misc"; + description = "Synchronizes lightnings, rainbow, fog, ..."; + typeName = "BOOL"; + value = 1; + }; + class GVAR(serverUpdateInterval) { + displayName = "Update Interval"; + description = "Defines the interval (seconds) between weather updates"; + typeName = "SCALAR"; + value = 60; + }; +}; diff --git a/addons/weather/CfgVehicles.hpp b/addons/weather/CfgVehicles.hpp new file mode 100644 index 0000000000..3de925e446 --- /dev/null +++ b/addons/weather/CfgVehicles.hpp @@ -0,0 +1,52 @@ +class CfgVehicles { + class ACE_Module; + class GVAR(ModuleSettings): ACE_Module { + scope = 2; + displayName = "Weather"; + icon = QUOTE(PATHTOF(UI\Icon_Module_Wind_ca.paa)); + category = "ACE"; + function = QUOTE(DFUNC(initModuleSettings)); + functionPriority = 1; + isGlobal = 1; + isTriggerActivated = 0; + author = "$STR_ACE_Common_ACETeam"; + class Arguments { + class enableServerController { + displayName = "Weather propagation"; + description = "Enables sever side weather propagation"; + typeName = "BOOL"; + defaultValue = 1; + }; + class useACEWeather { + displayName = "ACE Weather"; + description = "Overrides the default weather (editor, mission settings) with ACE weather (map based)"; + typeName = "BOOL"; + defaultValue = 1; + }; + class syncRain { + displayName = "Sync Rain"; + description = "Synchronizes rain"; + typeName = "BOOL"; + defaultValue = 1; + }; + class syncWind { + displayName = "Sync Wind"; + description = "Synchronizes wind"; + typeName = "BOOL"; + defaultValue = 1; + }; + class syncMisc { + displayName = "Sync Misc"; + description = "Synchronizes lightnings, rainbow, fog, ..."; + typeName = "BOOL"; + defaultValue = 1; + }; + class serverUpdateInterval { + displayName = "Update Interval"; + description = "Defines the interval (seconds) between weather updates"; + typeName = "NUMBER"; + defaultValue = 60; + }; + }; + }; +}; diff --git a/addons/weather/UI/Icon_Module_Wind_ca.paa b/addons/weather/UI/Icon_Module_Wind_ca.paa new file mode 100644 index 0000000000..176fe700a7 Binary files /dev/null and b/addons/weather/UI/Icon_Module_Wind_ca.paa differ diff --git a/addons/weather/XEH_postInit.sqf b/addons/weather/XEH_postInit.sqf index 05cd29c093..1427ff59b1 100644 --- a/addons/weather/XEH_postInit.sqf +++ b/addons/weather/XEH_postInit.sqf @@ -1,5 +1,10 @@ #include "script_component.hpp" +// Randomization +GVAR(temperatureShift) = 3 - random 6; +GVAR(badWeatherShift) = (random 1) ^ 2 * 10; +GVAR(humidityShift) = (5 - random 10) / 100; + GVAR(wind_period_start_time) = time; GVAR(rain_period_start_time) = time; diff --git a/addons/weather/XEH_postServerInit.sqf b/addons/weather/XEH_postServerInit.sqf index 67d536b996..5704212b79 100644 --- a/addons/weather/XEH_postServerInit.sqf +++ b/addons/weather/XEH_postServerInit.sqf @@ -1,10 +1,5 @@ #include "script_component.hpp" -// Randomization -GVAR(temperatureShift) = 3 - random 6; -GVAR(badWeatherShift) = (random 1) ^ 2 * 10; -GVAR(humidityShift) = (5 - random 10) / 100; - // Rain GVAR(rain_next_period) = -1; GVAR(rain_period_count) = 0; @@ -14,7 +9,4 @@ GVAR(rain_current_range) = -1+(random 2); // Wind call FUNC(initWind); -GVAR(overcast_multiplier) = 1; -GVAR(serverUpdateInterval) = 60; - [FUNC(serverController), GVAR(serverUpdateInterval)] call cba_fnc_addPerFrameHandler; diff --git a/addons/weather/XEH_preInit.sqf b/addons/weather/XEH_preInit.sqf index 401ae155c1..0f49226432 100644 --- a/addons/weather/XEH_preInit.sqf +++ b/addons/weather/XEH_preInit.sqf @@ -8,21 +8,15 @@ PREP(calculateBarometricPressure); PREP(displayWindInfo); PREP(getMapData); PREP(getWind); +PREP(initModuleSettings); PREP(initWind); PREP(serverController); +PREP(updateAceWeather); PREP(updateHumidity); PREP(updateRain); PREP(updateTemperature); PREP(updateWind); -// Control server side weather propagation -GVAR(enableServerController) = true; - -// Control client side weather effects -GVAR(syncRain) = true; -GVAR(syncWind) = true; // Wind, Gusts, Waves -GVAR(syncMisc) = true; // Lightnings, Rainbow, Fog - // Make sure this data is read before client/server postInit call FUNC(getMapData); diff --git a/addons/weather/config.cpp b/addons/weather/config.cpp index 13e5a0cab2..39cf223518 100644 --- a/addons/weather/config.cpp +++ b/addons/weather/config.cpp @@ -3,7 +3,7 @@ class CfgPatches { class ADDON { units[] = {}; - weapons[] = {};// "ACE_Kestrel4500" }; + weapons[] = {}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_common"}; author[] = {"q1184", "Rocko", "esteldunedain","Ruthberg"}; @@ -14,3 +14,5 @@ class CfgPatches { #include "CfgEventhandlers.hpp" #include "CfgWorlds.hpp" #include "RscTitles.hpp" +#include "CfgVehicles.hpp" +#include "ACE_Settings.hpp" \ No newline at end of file diff --git a/addons/weather/functions/fnc_initModuleSettings.sqf b/addons/weather/functions/fnc_initModuleSettings.sqf new file mode 100644 index 0000000000..eb0eaafc31 --- /dev/null +++ b/addons/weather/functions/fnc_initModuleSettings.sqf @@ -0,0 +1,39 @@ +/* + * Author: Glowbal, Ruthberg + * Module for adjusting the wind deflection settings + * + * Arguments: + * 0: The module logic + * 1: units + * 2: activated + * + * Return Value: + * None + * + * Public: No + */ + +#include "script_component.hpp" + +private ["_logic", "_units", "_activated"]; +_logic = _this select 0; +_units = _this select 1; +_activated = _this select 2; + +if !(_activated) exitWith {}; + +// Control server side weather propagation +[_logic, QGVAR(enableServerController), "enableServerController"] call EFUNC(common,readSettingFromModule); + +// Overrides the default weather (editor, mission settings) with ACE weather (map based) +[_logic, QGVAR(useACEWeather), "useACEWeather"] call EFUNC(common,readSettingFromModule); + +// Control client side weather effects +[_logic, QGVAR(syncRain), "syncRain"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(syncWind), "syncWind"] call EFUNC(common,readSettingFromModule); // Wind, Gusts, Waves +[_logic, QGVAR(syncMisc), "syncMisc"] call EFUNC(common,readSettingFromModule); // Lightnings, Rainbow, Fog + +// Server weather update interval +[_logic, QGVAR(serverUpdateInterval), "serverUpdateInterval"] call EFUNC(common,readSettingFromModule); + +GVAR(serverUpdateInterval) = 1 max GVAR(serverUpdateInterval) min 600; \ No newline at end of file diff --git a/addons/weather/functions/fnc_serverController.sqf b/addons/weather/functions/fnc_serverController.sqf index a9ceca3815..2cbdeb581e 100644 --- a/addons/weather/functions/fnc_serverController.sqf +++ b/addons/weather/functions/fnc_serverController.sqf @@ -1,7 +1,7 @@ /* - * Author: ACE2 Team, esteldunedain, ruthberg + * Author: Ruthberg * - * Calculate the wind and rain evolution on the server. Broadcasts the current and next values to the clients + * Gather weather parameters and broadcast them to the clients * * Argument: * None @@ -13,95 +13,21 @@ if (!GVAR(enableServerController)) exitWith {}; -private ["_lastRain", "_rainOverCast", "_transitionTime", "_windDirectionVariance", "_windSpeed", "_windSpeedChange", "_windMaxDiff", "_windMinDiff", "_windDirection", "_windDirectionChange", "_ratioMin", "_ratioMax"]; - -// Rain simulation -if (GVAR(syncRain) && GVAR(rain_period_count) > GVAR(rain_next_period)) then { - - GVAR(rain_next_period) = ceil((1 + (random 10)) / GVAR(overcast_multiplier)); - GVAR(rain_period_count) = 0; - - _lastRain = GVAR(current_rain); - - if (overcast >= 0.7) then { - _rainOverCast = (overcast - 0.7) / 0.3; - if (GVAR(current_rain) == 0) then { - // Initialize rain with a random strength depending on the current overcast value - GVAR(current_rain) = 0.25 + (random 0.25) + (random 0.5) * _rainOverCast; - }; - - GVAR(current_rain) = GVAR(current_rain) + GVAR(current_rain) * ((_rainOverCast * GVAR(overcast_multiplier)) / 8) * GVAR(rain_current_range); - GVAR(current_rain) = 0.01 max GVAR(current_rain) min 1; - - GVAR(rain_current_range) = -1 + (random 2); - } else { - _rainOverCast = 1; - - GVAR(current_rain) = 0; +if (GVAR(useACEWeather)) then { + // Use location based real world weather data + [] call FUNC(updateAceWeather); +} else { + // Simply replicate the server weather on the clients + if (GVAR(syncRain)) then { + ACE_RAIN_PARAMS = [rain, rain, GVAR(serverUpdateInterval)]; + publicVariable "ACE_RAIN_PARAMS"; + }; + if (GVAR(syncWind)) then { + ACE_WIND_PARAMS = [wind call CBA_fnc_vectDir, 0, vectorMagnitude wind, 0, GVAR(serverUpdateInterval)]; + publicVariable "ACE_WIND_PARAMS"; + }; + if (GVAR(syncMisc)) then { + ACE_MISC_PARAMS = [lightnings, rainbow, fogParams, GVAR(temperatureShift), GVAR(badWeatherShift), GVAR(humidityShift)]; + publicVariable "ACE_MISC_PARAMS"; }; - - _transitionTime = 1 + (_rainOverCast * 5) + (random (_rainOverCast * 20)); - - ACE_RAIN_PARAMS = [_lastRain, GVAR(current_rain), _transitionTime]; - TRACE_4("",_lastRain,_rainOverCast,_transitionTime,overcast); - - GVAR(rain_period_start_time) = time; - publicVariable "ACE_RAIN_PARAMS"; }; - -// Wind simulation -if (GVAR(syncWind) && GVAR(wind_period_count) > GVAR(wind_next_period)) then { - - GVAR(wind_next_period) = ceil((2 + (random 5)) / GVAR(overcast_multiplier)); - GVAR(wind_period_count) = 0; - - _windDirectionVariance = (90 - (random 180)) * (overcast ^ 2); - _windDirection = (360 + GVAR(wind_direction_reference) + _windDirectionVariance) % 360; - _windDirectionChange = _windDirection - GVAR(current_wind_direction); - if (_windDirectionChange > 180) then { - _windDirectionChange = _windDirectionChange - 360; - }; - if (_windDirectionChange < -180) then { - _windDirectionChange = 360 + _windDirectionChange; - }; - - _windMaxDiff = GVAR(mean_wind_speed) - GVAR(max_wind_speed); - _windMinDiff = GVAR(min_wind_speed) - GVAR(mean_wind_speed); - - _ratioMax = (random 1) ^ 2; - _ratioMin = (random 1) ^ 2; - - _windSpeed = GVAR(current_wind_speed); - _windSpeedChange = 0; - if ((random 1) < (0.3 max overcast)) then { - _windSpeed = GVAR(mean_wind_speed) + _windMaxDiff * _ratioMax + _windMinDiff * _ratioMin; - _windSpeedChange = _windSpeed - GVAR(current_wind_speed); - }; - - _transitionTime = GVAR(wind_next_period) * GVAR(serverUpdateInterval); - - TRACE_5("dirCur/dirNew/spdCur/spdNew/period",GVAR(current_wind_direction),_windDirection,GVAR(current_wind_speed),_windSpeed,_transitionTime); - - ACE_WIND_PARAMS = [GVAR(current_wind_direction), - _windDirectionChange, - GVAR(current_wind_speed), - _windSpeedChange, - _transitionTime]; - - GVAR(current_wind_direction) = _windDirection; - GVAR(current_wind_speed) = _windSpeed; - - GVAR(wind_period_start_time) = time; - publicVariable "ACE_WIND_PARAMS"; -}; - - -if (GVAR(syncMisc)) then { - ACE_MISC_PARAMS = [lightnings, rainbow, fogParams, GVAR(temperatureShift), GVAR(badWeatherShift), GVAR(humidityShift)]; - publicVariable "ACE_MISC_PARAMS"; -}; - -GVAR(rain_period_count) = GVAR(rain_period_count) + 1; -GVAR(wind_period_count) = GVAR(wind_period_count) + 1; - -GVAR(overcast_multiplier) = 1 max (2* overcast) min 2; // 0 (@ overcast 0), 2 (@ overcast 1) \ No newline at end of file diff --git a/addons/weather/functions/fnc_updateAceWeather.sqf b/addons/weather/functions/fnc_updateAceWeather.sqf new file mode 100644 index 0000000000..8ed0bb0d10 --- /dev/null +++ b/addons/weather/functions/fnc_updateAceWeather.sqf @@ -0,0 +1,105 @@ +/* + * Author: ACE2 Team, esteldunedain, ruthberg + * + * Updates the wind and rain evolution on the server. Broadcasts the current and next values to the clients + * + * Argument: + * None + * + * Return value: + * None + */ +#include "script_component.hpp" + +private ["_overcastMultiplier", "_lastRain", "_rainOverCast", "_transitionTime", "_windDirectionVariance", "_windSpeed", "_windSpeedChange", "_windMaxDiff", "_windMinDiff", "_windDirection", "_windDirectionChange", "_ratioMin", "_ratioMax"]; + +_overcastMultiplier = 1 max (2* overcast) min 2; // 0 (@ overcast 0), 2 (@ overcast 1) + +// Rain simulation +if (GVAR(syncRain) && GVAR(rain_period_count) > GVAR(rain_next_period)) then { + + GVAR(rain_next_period) = ceil((1 + (random 10)) / _overcastMultiplier); + GVAR(rain_period_count) = 0; + + _lastRain = GVAR(current_rain); + + if (overcast >= 0.7) then { + _rainOverCast = (overcast - 0.7) / 0.3; + if (GVAR(current_rain) == 0) then { + // Initialize rain with a random strength depending on the current overcast value + GVAR(current_rain) = 0.25 + (random 0.25) + (random 0.5) * _rainOverCast; + }; + + GVAR(current_rain) = GVAR(current_rain) + GVAR(current_rain) * ((_rainOverCast * _overcastMultiplier) / 8) * GVAR(rain_current_range); + GVAR(current_rain) = 0.01 max GVAR(current_rain) min 1; + + GVAR(rain_current_range) = -1 + (random 2); + } else { + _rainOverCast = 1; + + GVAR(current_rain) = 0; + }; + + _transitionTime = 1 + (_rainOverCast * 5) + (random (_rainOverCast * 20)); + + ACE_RAIN_PARAMS = [_lastRain, GVAR(current_rain), _transitionTime]; + TRACE_4("",_lastRain,_rainOverCast,_transitionTime,overcast); + + GVAR(rain_period_start_time) = time; + publicVariable "ACE_RAIN_PARAMS"; +}; + +// Wind simulation +if (GVAR(syncWind) && GVAR(wind_period_count) > GVAR(wind_next_period)) then { + + GVAR(wind_next_period) = ceil((2 + (random 5)) / _overcastMultiplier); + GVAR(wind_period_count) = 0; + + _windDirectionVariance = (90 - (random 180)) * (overcast ^ 2); + _windDirection = (360 + GVAR(wind_direction_reference) + _windDirectionVariance) % 360; + _windDirectionChange = _windDirection - GVAR(current_wind_direction); + if (_windDirectionChange > 180) then { + _windDirectionChange = _windDirectionChange - 360; + }; + if (_windDirectionChange < -180) then { + _windDirectionChange = 360 + _windDirectionChange; + }; + + _windMaxDiff = GVAR(mean_wind_speed) - GVAR(max_wind_speed); + _windMinDiff = GVAR(min_wind_speed) - GVAR(mean_wind_speed); + + _ratioMax = (random 1) ^ 2; + _ratioMin = (random 1) ^ 2; + + _windSpeed = GVAR(current_wind_speed); + _windSpeedChange = 0; + if ((random 1) < (0.3 max overcast)) then { + _windSpeed = GVAR(mean_wind_speed) + _windMaxDiff * _ratioMax + _windMinDiff * _ratioMin; + _windSpeedChange = _windSpeed - GVAR(current_wind_speed); + }; + + _transitionTime = GVAR(wind_next_period) * GVAR(serverUpdateInterval); + + TRACE_5("dirCur/dirNew/spdCur/spdNew/period",GVAR(current_wind_direction),_windDirection,GVAR(current_wind_speed),_windSpeed,_transitionTime); + + ACE_WIND_PARAMS = [GVAR(current_wind_direction), + _windDirectionChange, + GVAR(current_wind_speed), + _windSpeedChange, + _transitionTime]; + + GVAR(current_wind_direction) = _windDirection; + GVAR(current_wind_speed) = _windSpeed; + + GVAR(wind_period_start_time) = time; + publicVariable "ACE_WIND_PARAMS"; +}; + + +if (GVAR(syncMisc)) then { + ACE_MISC_PARAMS = [lightnings, rainbow, fogParams, GVAR(temperatureShift), GVAR(badWeatherShift), GVAR(humidityShift)]; + publicVariable "ACE_MISC_PARAMS"; +}; + +GVAR(rain_period_count) = GVAR(rain_period_count) + 1; +GVAR(wind_period_count) = GVAR(wind_period_count) + 1; \ No newline at end of file diff --git a/addons/winddeflection/ACE_Settings.hpp b/addons/winddeflection/ACE_Settings.hpp index b10b78db0c..0a0cac6b34 100644 --- a/addons/winddeflection/ACE_Settings.hpp +++ b/addons/winddeflection/ACE_Settings.hpp @@ -19,7 +19,7 @@ class ACE_Settings { }; class GVAR(simulationRadius) { displayName = "Simulation Radius"; - description = "Defines the radius (in meters) in which advanced ballistics are applied"; + description = "Defines the radius around the player (in meters) at which projectiles are wind deflected"; typeName = "SCALAR"; value = 3000; }; diff --git a/addons/winddeflection/CfgVehicles.hpp b/addons/winddeflection/CfgVehicles.hpp index 76ac0c13d3..1c24c0a386 100644 --- a/addons/winddeflection/CfgVehicles.hpp +++ b/addons/winddeflection/CfgVehicles.hpp @@ -31,7 +31,7 @@ class CfgVehicles { }; class simulationRadius { displayName = "Simulation Radius"; - description = "Defines the radius (in meters) in which advanced ballistics are applied"; + description = "Defines the radius around the player (in meters) at which projectiles are wind deflected"; typeName = "NUMBER"; defaultValue = 3000; }; diff --git a/addons/winddeflection/stringtable.xml b/addons/winddeflection/stringtable.xml index 83f6c0d589..bd34204147 100644 --- a/addons/winddeflection/stringtable.xml +++ b/addons/winddeflection/stringtable.xml @@ -31,7 +31,7 @@ Скорость: %1 м/с Rychlost: %1 m/s Vitesse %1 m/s - Geschwindigkeit: %1m/s + Geschwindigkeit: %1 m/s Sebesség: %1 m/s Velocità: %1 m/s diff --git a/documentation/README_DE.md b/documentation/README_DE.md new file mode 100644 index 0000000000..0b5ca4d0ef --- /dev/null +++ b/documentation/README_DE.md @@ -0,0 +1,48 @@ +

+ +

+

+ + ACE version + + + ACE download + + + ACE issues + + + ACE license + +

+

Benötigt eine Aktuelle Version von CBA A3 | BIF thread

+ +**ACE3** ist ein Gemeinschaftsprojekt der sich zusammengeschlossenen Moddinggruppen von **ACE2**, **AGM** und **CSE** mit dem Ziel den Realismus und die Spieltiefe von Arma 3 zu steigern. + +Da die MOD vollkommen als **open-source** Projekt gestaltet ist, steht es jedem frei Änderungen vorzuschlagen, oder seine eigene, modifizierte Version zu erstellen, solange diese ebenfalls der Öffentlichkeit zugänglich ist und mit GNU General Public License übereinstimmt. (Weitere Informationen ist der Lizenzdatei in diesem Projekt entnehmbar) + +Die Mod ist **modular gestaltet** — beinahe jede PBO kann entfernt werden, sodass jede Gemeinschaft ihre eigene Version der Mod unterhalten kann. Dies kann zum Beispiel einige Funktionalitäten ausschließen, da das Feature nicht gewünscht ist, oder es mit einer anderen MOD in Konflikt gerät etc. .Ebenfalls können viele Einstellungen vom Missionsersteller vorgenommen werden (u.a. am medizinischem System), sodass eine individuelle Erfahrung gewährleistet wird. + +### Features +* Verbessertes medizinisches System +* Logistik System: U.a. Transport und Fahrzeugreparatur +* Sprengstoffsystem mit unterschiedlichen Zündern +* Gefangenensystem +* Reale Namen für Arma 3 Fahrzeuge und Waffen +* Realistisches, ballistisches Verhalten (Wind und Luftfeuchtigkeit) +* Simulation der Rückstrahlzone +* Ein Feuerleitsystem für gepanzerte Fahrzeuge und Hubschrauber + ***und noch viel mehr...*** + +#### Anleitungen +Du hast ACE3 installiert, hast aber keine Ahnung was und wie alles funktioniert und wo sich was befindet? [Erste Schritte](https://github.com/acemod/ACE3/blob/master/documentation/user/getting-started.md). + +#### Mitwirken +Wenn du bei der Entwicklung der MOD mithelfen möchtest, so kannst du dies tun, indem du nach Fehlern Ausschau hältst, oder neue Funktionen vorschlägst. Um etwas beizutragen, "Forke" einfach dieses Archiv (bzw. repository) und erstelle deine "Pull-Request", welche von anderen Entwicklern und Beiträgern überprüft wird. Bitte trage dich dabei in "AUTHORS.txt" mit deinem Nutzernamen und einer gütligen Email-Adresse ein. + +Um einen Fehler oder ein Feature zu melden bzw. ein bereits Bestehendes zu ändern - nutze unseren [Issue Tracker](https://github.com/acemod/ACE3/issues). + +#### Testen & MOD erstellen +Wenn du die neusten Entwicklungen erleben und uns dabei helfen möchtest bestehende Fehler zu entdecken, lade dir einfach die "Master Branch" herunter. Entweder nutzt du Git - wenn die Schritte bekannt sind - oder du lädst es dir direkt über [diesen Link] (https://github.com/acemod/ACE3/archive/master.zip) herunter. + +Wie du deine eigene Entwicklungsumgebung und eine Testversion von ACE erstellst folge [dieser Anleitung](https://github.com/acemod/ACE3/blob/master/documentation/development/setting-up-the-development-environment.md). diff --git a/documentation/README_PL.md b/documentation/README_PL.md new file mode 100644 index 0000000000..d156185908 --- /dev/null +++ b/documentation/README_PL.md @@ -0,0 +1,84 @@ +

+ +

+

+ + ACE version + + + ACE download + + + ACE issues + + + BIF thread + + + ACE license + +

+

Wymaga najnowszej wersji CBA A3. Odwiedź nas na Facebook | YouTube | Twitter | Reddit

+ + +**ACE3** to efekt wspólnego wysiłku grup moderów odpowiedzialnych za **ACE2**, **AGM** oraz **CSE** w celu zwiększenia realizmu i autentyczności Arma 3. + +Projekt ten jest całkowicie **otwarty źródłowo** i wszelki wkład w rozwój jest mile widziany. Możesz bez przeszkód prowadzić swoją własną dostosowaną wersję, o ile zmiany jakie wprowadzisz będą otwarte dla publiki zgodnie z GNU General Public License ([GPLv2](https://github.com/acemod/ACE3/blob/master/LICENSE)). + +Modyfikacja ta jest **budowana modułowo**, dzięki temu prawie każdy dostarczony plik PBO może zostać łatwo usunięty z konfiguracji. Dzięki temu, grupa może prowadzić własną, dostosowaną do siebie, wersję ACE wyłączając elementy, których nie potrzebują, lub które po prostu nie działają z innymi addonami. Moduły same w sobie np. system medyczny, posiadają wiele możliwości konfiguracji, pozwalając mission designerom dostosować ogólne doświadczenie z gry. + +### Główne cechy +* Całkowicie nowy system akcji/interakcji 3D +* Wydajna i niezawodna struktura +* Skupienie na modułowości i customizacji +* Elastyczny system ustawień i konfiguracji opcji u klienta i serwera +* Ulepszony system medyczny z różnymi stopniami zaawansowania (podstawowy/rozszerzony) skupiony na grywalności i realizmowi +* Prawidłowa i spójna synchronizowana pogoda +* Balistyka oparta na warunkach pogodowych i wietrze +* Możliwość brania jeńców +* Rozszerzony system ładunków wybuchowych, włączając w to użycie różnego rodzaju zapalników +* Ulepszenia mapy - stawianie markerów i przybory mapy +* Zaawansowane naprowadzanie rakiet i wskazywanie laserem + +#### Dodatkowe cechy +* Przeciąganie i przenoszenie +* Realistyczne nazwy pojazdów i broni +* System kontroli ognia (SKO) dla pojazdów opancerzonych oraz śmigłowców +* Realistyczna balistyka/SKO obliczana w rozszerzeniach C/C++ +* Symulacja strefy backblastu i podciśnienia +* Jednorazowe wyrzutnie +* Realistyczne siły G +* Zamykanie pojazdów na kluczyk +* Realistyczne tryby termowizji oraz noktowizji +* Przepakowywanie magazynków +* Realistyczna mechanika przegrzewania broni +* Symulacja głuchoty bitewnej (tymczasowej utraty słuchu) +* Ulepszona fizyka ragdoll +* Ulepszona interakcja dla asystentów i amunicyjnych +* Regulowane celowniki snajperskie +* Usunięte animacje bezczynności z opuszczoną bronią +* Usunięte głosy awatara gracza +* Skakanie przez przeszkody, wspinanie się na ściany i przecinanie płotów +* Urządzenia Vector, MicroDAGR, Kestrel
+***i wiele wiele więcej...*** + +### Poradniki i instrukcje +Jeżeli zainstalowałeś ACE3 lecz masz problem ze zrozumieniem jak to wszystko działa, lub gdzie zacząć, zacznij od przeczytania tego: +* [Wprowadzenie](http://ace3mod.com/wiki/user/getting-started.html) + +#### Współpraca +Możesz pomóc w rozwoju addonu szukając potencjalnych bugów w naszym kodzie, lub zgłaszając nowe funkcje. Aby wnieść swój wkład do ACE, po prostu zforkuj to repozytorium na swoje konto GitHub i zgłoś swoje pull requesty do przeglądu przez innych współpracowników. Pamiętaj, aby dodać siebie do listy autorów każdego PBO jakie edytujesz oraz do pliku ['AUTHORS.txt'](https://github.com/acemod/ACE3/blob/master/AUTHORS.txt) dodając także swój adres e-mail. + +Używaj naszego [Issue Tracker-a](https://github.com/acemod/ACE3/issues) aby zgłaszać bugi, proponować nowe funkcje lub sugerować zmiany do aktualnie istniejących. Zobacz także: +* [Jak zgłosić bug-a](http://ace3mod.com/wiki/user/how-to-report-an-issue.html) +* [Jak zgłosić feature request-a](http://ace3mod.com/wiki/user/how-to-make-a-feature-request.html) + +#### Testowanie i budowanie +Aby pomóc nam w testowaniu najnowszych zmian rozwojowych, pobierz nasz master branch ([bezpośrednio](https://github.com/acemod/ACE3/archive/master.zip), lub [korzystając z git](https://help.github.com/articles/fetching-a-remote/)), a następnie złóż testowego build-a: +* [Konfiguracja środowiska do testów](http://ace3mod.com/wiki/development/setting-up-the-development-environment.html) – intrukcja krok-po-kroku jak poprawnie ustawić i zbudować wersję ACE do celów testowych. \ No newline at end of file diff --git a/documentation/development/ace3-config-entries.md b/documentation/development/ace3-config-entries.md index cc0104a8b1..78f8022856 100644 --- a/documentation/development/ace3-config-entries.md +++ b/documentation/development/ace3-config-entries.md @@ -46,17 +46,20 @@ ace_gforcecoef ace_protection ace_scopeadjust_horizontal ace_scopeadjust_vertical +ace_scopeadjust_increment ace_isusedlauncher ace_attachable ace_range ace_detonator +ace_barrelTwist +ace_twistDirection +ace_barrelLength ``` ### CfgAmmo ```c++ -ace_bulletmass ace_recoil_shakemultiplier ace_frag_skip ace_frag_force @@ -68,6 +71,17 @@ ace_frag_gurney_k ace_explodeondefuse ace_explosive ace_fcs_airburst +ace_caliber +ace_bulletlength +ace_bulletmass +ace_transonicstabilitycoef +ace_ammotempmuzzlevelocityshifts +ace_ballisticcoefficients +ace_velocityboundaries +ace_standardatmosphere +ace_dragmodel +ace_muzzlevelocities +ace_barrellengths ``` diff --git a/documentation/feature/medical-system.md b/documentation/feature/medical-system.md new file mode 100644 index 0000000000..3d756b70c8 --- /dev/null +++ b/documentation/feature/medical-system.md @@ -0,0 +1,70 @@ +--- +layout: wiki +title: Medical System +group: feature +order: 4 +parent: wiki +--- + +## 1. Overview +ACE provide users with a more realistic medical system and comes in both a basic and advanced version. This page will detail the differences between both systems and what they do. It is split into two parts; basic and advanced. Both versions have overlap but each have their own unique characteristics. + + +## 2. Basic Medical +ACE's basic medical system is quite a bit more complex than Arma's default system, but not really difficult to grasp. ACE basic medical is a mixture between the ACE2 and AGM medical systems. + +The four main elements that basic medical introduces are: + +* damage divided into different zones (head, body, left & right arm, left & right leg) +* bleeding +* unconsciousness +* pain + +All interactions in the medical system are done with the interaction menu. Non-medics can - by default - not perform all actions, and their actions take more time as when performed by trained medics. These actions are using epinephrine and blood IVs. + + +### How it works + +When hit, units start to lose blood depending on the severity of their wounds. Once the level of blood falls below a certain threshold, the unit will fall unconscious and eventually die. Units will also fall unconscious when sustaining large amounts of damage at once. + +To stop the bleeding, the combat life saver needs to bandage every wounded limb. Unconscious units can be "woken up" with Epipens. Should a unit have lost a lot of blood, it might be necessary to replace the lost blood with a blood bag before being able to wake unconscious units up. + +Should a unit be in pain, materializing itself with a chromatic aberration screen effect, he can be given morphine. + +## 3. Advanced Medical +The advanced medical system provides a more complex and detailed medical simulation and is based off the CSE/CMS medical system. It focuses on a more realistic model for injuries and treatment, thus resulting in a more important and prominent role for combat medics, and a bigger incentive to not get shot. + +The system behind advanced medical is designed to attempt to mimic important parts of the human body, as well as react to any injuries sustained and treatments applied in a realistic manner. The available treatments and supplies in advanced medical are based off the Tactical Combat Casualty Care (TCCC) guidelines, which are the same guidelines used by real-life combat medics around the world. + +Besides the 4 elements introduced by basic medical, advanced introduces the following: + +* More detailed wound system +* Accurate blood loss based upon sustained injuries +* Vitals, including heart rate and blood pressure +* Cardiac Arrest +* Various treatment methods such as CPR, different kinds of IVs and tourniquets +* A basic medication simulation + +### How it works + +Same as with basic, when hit an injury is sustained. Different though is that the type of injury and the severity of it are based upon how the damage was done and what caused it. This affects both blood loss and immediate consequences, such as being knocked out or being killed right away. When a player has sustained an injury, this will be indicated by flashing red of the screen; this means the player is bleeding. + +##### Stopping bleeding +In order to stop the bleeding, all injuries on every bodypart requires treatment. This is done by either applying a tourniquet to legs or arms as a temporarly solution, or by using bandages to stop the bleeding as a more permament fix. + +##### Vitals +While a unit is bleeding however, the blood volume decreases which will result in a change of vitals. Depending on the factors such as current blood volume, the blood loss rate, medication used, the blood pressure will start to drop. To counter this drop, also based upon the previously mentioned factors and others, the heart rate will adjust accordingly to attempt to keep blood pressure at safe levels. This means that for any patient it is required to keep an eye on the vitals. This is done through the interaction system by selecting check pulse or blood pressure on either the arms or head. + +##### Medication +To stabalize the vitals and to counter for example pain, a player/medic can use medication. Advanced medical has 3 different medications available: +* Atropine +* Morphine +* Epinephrine + +Atropine is a vagolytic and anticholinergic drug which in low dosages reduces heart rate but in high dosages increases it, countering effects of organophosphate poisoning (in NBC scenarios; anticholinesterase poisoning) and symptomatic bradycardia (in post-ROSC care and resuscitative medicine). + +Morphine is used to alleviate large amounts of pain. Has an effect similar to Heroin due to its opiate properties. Must only ever be given once, and only when bleeding has been reduced to a minimum. Morphine must never be given to a casualty with a low heart rate, as it can stop the heart. + +Epinephrine is used to increase heart rate and blood pressure and alleviate unconsciousness. Epinephrine is a synthetic form of Adrenaline, which is naturally produced in the body. It can also be applied to counter-act the effects of Atropine. Be careful though, as it may only be given once. + +_Epinephrine must never be given to a casualty with a high heart rate or blood pressure._ diff --git a/documentation/framework/fragmentation-configuration.md b/documentation/framework/fragmentation-configuration.md index 1372b2b69a..c8a64b2db4 100644 --- a/documentation/framework/fragmentation-configuration.md +++ b/documentation/framework/fragmentation-configuration.md @@ -15,15 +15,15 @@ The system for the end-developer is easy to use, and only requires minimal resea Below is an example set of explosives configuration properties for sys_frag (in this case an M67 hand grenade): ```c++ -ACE_FRAG_METAL = 210; // metal in grams -ACE_FRAG_CHARGE = 185; // explosive in grams -ACE_FRAG_GURNEY_C = 2843; // Gurney velocity constant for explosive type. See: http://en.wikipedia.org/wiki/Gurney_equations -ACE_FRAG_GURNEY_K = 3/5; // Gurney shape factor, in this case a sphere. See: http://en.wikipedia.org/wiki/Gurney_equations +ace_frag_metal = 210; // metal in grams +ace_frag_charge = 185; // explosive in grams +ace_frag_gurney_c = 2843; // Gurney velocity constant for explosive type. See: http://en.wikipedia.org/wiki/Gurney_equations +ace_frag_gurney_k = 3/5; // Gurney shape factor, in this case a sphere. See: http://en.wikipedia.org/wiki/Gurney_equations ``` -`ACE_FRAG_METAL` is the amount of metal being fragmented (generally taken as the entire weight of the warhead, though in some cases you might want to only include the fragmentation jacket or body. `ACE_FRAG_CHARGE` is the amount of explosive filler in the warhead. `ACE_FRAG_METAL` and `ACE_FRAG_CHARGE` are dimensionless values, as long as they are both in the same unit (for example kg/kg g/g lbs/lbs). +`ace_frag_metal` is the amount of metal being fragmented (generally taken as the entire weight of the warhead, though in some cases you might want to only include the fragmentation jacket or body. `ace_frag_charge` is the amount of explosive filler in the warhead. `ace_frag_metal` and `ace_frag_charge` are dimensionless values, as long as they are both in the same unit (for example kg/kg g/g lbs/lbs). -`ACE_FRAG_GURNEY_C` is the Gurney constant for explosive force. You can find a list of common explosive types below. If you can not find it here, or want more accurate numbers, just google the type of explosive and Gurney constant and you can find substantial information. This is *NOT* the detonation velocity of the explosive, do not confuse them! +`ace_frag_gurney_c` is the Gurney constant for explosive force. You can find a list of common explosive types below. If you can not find it here, or want more accurate numbers, just google the type of explosive and Gurney constant and you can find substantial information. This is *NOT* the detonation velocity of the explosive, do not confuse them! | Type | Speed | |------------------|----------| @@ -42,7 +42,7 @@ ACE_FRAG_GURNEY_K = 3/5; // Gurney shape factor, in this case a sphere. See: ht |Tritonal | 2320 m/s | -`ACE_FRAG_GURNEY_K` is the shape factor for the explosive configuration. You should choose it based on the general configuration of explosives/metal in the warhead. Most grenades for example are a sphere. Artillery and aircraft bombs are a cylinder. Mines generally a flat plate. Below is a list of the three common shapes and their factors. +`ace_frag_gurney_k` is the shape factor for the explosive configuration. You should choose it based on the general configuration of explosives/metal in the warhead. Most grenades for example are a sphere. Artillery and aircraft bombs are a cylinder. Mines generally a flat plate. Below is a list of the three common shapes and their factors. ``` Sphere = 3/5 @@ -52,7 +52,7 @@ Plate = 3/5 There are other configurations but these are the most common. If you are interested in others check out the wikipedia link given above. Most of these will not correctly function in sys_frag though due to additional variables for the equation. -In addition to these variables there are different types of fragmentation fragments to choose from, and they can be defined in the config value `ACE_FRAG_CLASSES[]`. Below are a list of the types. +In addition to these variables there are different types of fragmentation fragments to choose from, and they can be defined in the config value `ace_frag_classes[]`. Below are a list of the types. ``` ACE_frag_tiny @@ -71,6 +71,6 @@ The tinier the piece of fragmentation the shorter the distance of travel. The `_ The final information needed is a couple of entries for forcing or ignoring fragmentation for this ammo. -If you set `ACE_FRAG_SKIP` to 1 then you will skip fragmentation for ammo of this type. This is useful for things that might cause high network load, such as FFAR rockets, or possibly even 40mm grenades from AGLs. Experimentation under network conditions is required. +If you set `ace_frag_skip` to 1 then you will skip fragmentation for ammo of this type. This is useful for things that might cause high network load, such as FFAR rockets, or possibly even 40mm grenades from AGLs. Experimentation under network conditions is required. -If you set `ACE_FRAG_FORCE` to 1 it will force the fragmentation system to use frag on this ammo, ignoring sys_frags internal qualifications based on hit values. +If you set `ace_frag_force` to 1 it will force the fragmentation system to use frag on this ammo, ignoring sys_frags internal qualifications based on hit values. diff --git a/documentation/missionmaker/modules.md b/documentation/missionmaker/modules.md index 0b0f13f8d6..186e99ece4 100644 --- a/documentation/missionmaker/modules.md +++ b/documentation/missionmaker/modules.md @@ -11,8 +11,42 @@ parent: wiki ## 1. Modules -### 1.1 BlueForceTracking -*Part of: ACE_Map* +### 1.1 Advanced Ballistics +*Part of: ace_advanced_ballistics* + +This module allows to enable advanced external- and internal ballistics. + +**Settings:** + +1. **Advanced Ballistics (Boolean)
** +Enables advanced ballistics.
+`Default value: No` +2. **Always Enabled For Snipers (Boolean)
** +Always enables advanced ballistics when high power optics are used.
+`Default value: Yes` +3. **Disabled In FullAuto Mode (Boolean)
** +Disables the advanced ballistics during full auto fire.
+`Default value: No` +4. **Disabled For Non Local Players (Boolean)
** +Disables the advanced ballistics for bullets coming from other players (enable this if you encounter frame drops during heavy firefights in multiplayer).
+`Default value: Yes` +5. **Enable Ammo Temperature Simulation (Boolean)
** +Muzzle velocity varies with ammo temperature.
+`Default value: Yes` +6. **Enable Barrel Length Simulation (Boolean)
** +Muzzle velocity varies with barrel length.
+`Default value: Yes` +7. **Enable Bullet Trace Effect (Boolean)
** +Enables a bullet trace effect to high caliber bullets (only visible when looking through high power optics).
+8. **Simulation Interval (Number)
** +Defines the interval between every calculation step.
+`Default value: 0.05` +9. **Simulation Radius (Number)
** +Defines the radius around the player (in meters) at which advanced ballistics are applied to projectiles.
+`Default value: 3000` + +### 1.2 BlueForceTracking +*Part of: ace_map* When adding the "BlueForceTracking" module to your mission it adds map markers to every group on the players side and refreshes them in certain configurable interval (in seconds). The module takes the group type into account and uses the proper NATO icon for each marker. @@ -25,8 +59,8 @@ How often the markers should be refreshed (in seconds).
Hide markers for "AI only" groups.
`Default value: No` -### 1.2 Check PBOs -*Part of: ACE_Core* +### 1.3 Check PBOs +*Part of: ace_core* If you are worried that players haven't updated ACE or other mods to the version you're using on the server, you can place the "Check PBOs" module on your map. You can choose one of three posible actions that are being executed when a player joins that has a wrong version of ACE or an other mod: @@ -61,8 +95,8 @@ Example 3: @JSRS + @Blastcore-A3:
[TBD, "warfxpe","blastcore_vep"] ``` -### 1.3 Explosive System -*Part of: ACE_Explosive* +### 1.4 Explosive System +*Part of: ace_explosive* The "Explosive System" module lets you tweak the settings for the new explosive system that ACE introduces. @@ -75,17 +109,17 @@ Require explosive specialists to disable explosives.
Increase the time it takes to complete actions for non-specialists.
`Default value: Yes` -### 1.4 Fatigue System (deprecated) +### 1.5 Fatigue System (deprecated) **Warning:** *This module is deprecated and only in there not to break older missions that have used this module. It will be removed in a future update. It serves no purpose.* -### 1.5 Friendly Fire Messages -*Part of: ACE_Respawn* +### 1.6 Friendly Fire Messages +*Part of: ace_respawn* The "Friendly Fire Messages" module triggers a message when a player kills a friendly or civilian unit. This module isn't needed on servers with a low difficulty setting. -### 1.6 Interaction -*Part of: ACE_Interaction* +### 1.7 Interaction +*Part of: ace_interaction* This module allows you to tweak the settings for player names tags. @@ -95,8 +129,8 @@ This module allows you to tweak the settings for player names tags. Sets the distance (in meters) at which player name tags become visible.
`Default value: 5` -### 1.7 Medical System -*Part of: ACE_Medical* +### 1.8 Medical System +*Part of: ace_medical* When using the medical system ACE offers you probably want to fine tune some aspects of the wounding, healing or gameplay mechanics and fit them to your needs. The "Medical System" module offers a lot of settings to do just that. @@ -133,16 +167,16 @@ Use one bandage to heal the entire body.
Allow all players to use chat while unconcious? Admin can always use the chat regardless.
`Default value: No` -### 1.8 Rallypoint System -*Part of: ACE_Respawn* +### 1.9 Rallypoint System +*Part of: ace_respawn* This module was introduced with 0.94 and enables Mission Makers to specificly enable units to move a rallypoint. Every unit that is synced with that module is able to move a rallypoint. **Note:** It's important to mention that this doesn't work for player who join during a mission (JIP = Join in progress). That's something we can't change because that's the way Bohemia has implemented their module framework. To enable JIP players to move rally points have a look at [3.1 ACE Rallypoints](#31-ace-rallypoints). -### 1.9 Repair System -*Part of: ACE_Logistics* +### 1.10 Repair System +*Part of: ace_logistics* Placing the "Repair System" module makes it possible to define the time it takes for certain repair actions. @@ -161,8 +195,8 @@ Time to replace a track (in seconds).
Limits the amount of damage that can be repaired. 0 = Repair all damage, 1 = Cannot repair any damage.
`Default value: 0` -### 1.10 Respawn System -*Part of: ACE_Respawn* +### 1.11 Respawn System +*Part of: ace_respawn* The "Respawn System" module enables players to respawn with the gear they had before dying and to remove bodies of players after a configurable interval (in seconds). @@ -172,8 +206,8 @@ The "Respawn System" module enables players to respawn with the gear they had be Respawn with the gear a player had just before his death.
`Default value: No` -### 1.11 SwitchUnits System -*Part of: ACE_SwitchUnits* +### 1.12 SwitchUnits System +*Part of: ace_switchunits* The [SwitchUnits System](#32-ace-switchunits) enables players to control certain AI units on the map. @@ -199,8 +233,54 @@ The safe zone around players from a different team (in meters)
`Default value: 200` -### 1.12 LSD Vehicles -*Part of: ACE_Core* +### 1.13 LSD Vehicles +*Part of: ace_core* + +### 1.14 Weather +*Part of: ace_weather* + +This module allows you to customize the weather settings. + +**Settings:** + +1. **Weather propagation (Boolean)
** +Enables sever side weather propagation.
+`Default value: Yes` +2. **ACE Weather (Boolean)
** +Overrides the default weather (editor, mission settings) with ACE weather (map based).
+`Default value: Yes` +3. **Sync Rain (Boolean)
** +Synchronizes rain.
+`Default value: Yes` +3. **Sync Wind (Boolean)
** +Synchronizes wind.
+`Default value: Yes` +3. **Sync Misc (Boolean)
** +Synchronizes lightnings, rainbow, fog, ...
+`Default value: Yes` +4. **Update Interval (Number)
** +Defines the interval (seconds) between weather updates.
+`Default value: 60` + +### 1.15 Wind Deflection +*Part of: ace_winddeflection* + +This module allows you to define when wind deflection is active. + +**Settings:** + +1. **Wind Deflection (Boolean)
** +Enables wind deflection.
+`Default value: Yes` +2. **Vehicle Enabled (Boolean)
** +Enables wind deflection for static/vehicle gunners.
+`Default value: Yes` +3. **Simulation Interval (Number)
** +Defines the interval between every calculation step.
+`Default value: 0.05` +4. **Simulation Radius (Number)
** +Defines the radius around the player (in meters) at which projectiles are wind deflected.
+`Default value: 3000` And then there's the "LSD Vehicles" module … it does 'something' to all vehicles synced to that module. http://youtu.be/X3e0LTexEok diff --git a/documentation/user/getting-started.md b/documentation/user/getting-started.md index 5a9c3f6917..012f307445 100644 --- a/documentation/user/getting-started.md +++ b/documentation/user/getting-started.md @@ -1,20 +1,90 @@ --- layout: wiki -title: Getting Started +title: Getting started group: user order: 0 parent: wiki --- +
+
Note:
+

This page is currently under construction.

+
-**This page will get updated soon.** +Downloaded ACE3 and have no idea where to start? This page serves as a document to help new players get started with things like the medical system, or how to adjust your scope. +### Table of contents +1. [Vector 21](#vector-21) -## Table of Contents +### Vector 21 +*Part of: ace_vector* - 1. [xx](#xx) - 2. [yy](#yy) - 3. [zz](#zz) +ACE3 adds a realistic depiction of the Vector 21 rangefinder to the game. Unlike other rangefinders, it doesn't just magically show you the range to your target, but in exchange allows you to do alot of things with it that the other choices in Arma do not offer. The Vector's functions include, but are not limited to: +- Distance to a target +- Azimuth to a target +- Horizontal and vertical distance to a target +- Distance between 2 targets +- Angle between 2 targets +- Switching between feet and meters +- Switching between degrees and mils +... -## What ACE3 has to offer +The Vector is controlled with 2 keys: the azimuth key and the range key; Tab and R by default. First you bring it up like every other binocular in the game and then, while looking through it you can access all the different functions. + +The Vector 21 rangefinder has the following usage modes: + +1. Slope distance +2. Azimuth +3. Slope distance & Azimuth +4. Horizontal distance and height difference +5. Azimuth & Inclination +6. Distance between two points +7. Horizontal & vertical distance between two points +8. Horizontal distance & azimuth between two points +9. Fall of shot + +#### 1. Slope distance +Measuring Slope distance + +Press and hold the "Distance" key until the red pointing circle appears. Sight the circle on the object and release the key. + +#### 2. Azimuth +Measuring Azimuth + +Press and hold the "Azimuth" key until the red pointing circle appears. Sight the circle on the object and release the key. + +#### 3. Slope distance and Azimuth +Measuring Slope distance and Azimuth + +Press and hold both the "Distance" and "Azimuth" key until the red pointing circle appears. Sight the circle on the object and release both keys. + +#### 4. Horizontal distance and height difference +Measuring Horizontal distance and height difference + +Tap the "Distance" key once then press and hold it until the red pointing circle appears. Sight the circle on the object and release the key. + +#### 5. Azimuth and Inclination +Measuring Azimuth and Inclination + +Tap the "Azimuth" key once then press and hold it until the red pointing circle appears. Sight the circle on the object and release the key. + +#### 6. Distance between two points +Measuring Distance between two points + +Press and hold the "Distance" key until the red pointing circle appears. Sight the circle on the first object and tap the "Azimuth" key while further holding the "Distance" key. The first measurement is confirmed ("1-P" = first point). Sight the second object and release the "Distance" key. + +#### 7. Horizontal and vertical distance between two points +Measuring Horizontal and vertical distance between two points + +Tap the "Distance" key once then press and hold it until the red pointing circle appears. Sight the circle on the object and tap the "Azimuth" key once. The first measurement is confirmed ("1-P" = first point). Sight the second object and release the "Distance" key. + +#### 8. Horizontal distance and azimuth between two points +Measuring Horizontal distance and azimuth between two points + +Press and hold the "Azimuth" key until the red pointing circle appears. Sight the circle on the first object and tap the "Distance" key while further holding the "Azimuth" key. The first measurement is confirmed ("1-P" = first point). Sight the second object and release the "Azimuth" key. + +#### 9. Fall of shot +Measuring Fall of shot + +Tap the "Azimuth" key once then press and hold it until the red pointing circle appears. Sight the circle on the object and tap the "Distance" key while further holding the "Azimuth" key. The first measurement is confirmed ("1-P" = first point). Sight the Fall of shot and release the "Azimuth" key. The left digits display the left (`L`)/right (`r`) correction value in meter and the right digits display the longer (`A` = add)/shorter (`d` = drop) correction value in meter. If the "Distance" key is tapped the height correction values will be displayed (`UP` and `dn`). diff --git a/documentation/user/how-to-make-a-feature-request.md b/documentation/user/how-to-make-a-feature-request.md index bfc5401f38..7b0c52478d 100644 --- a/documentation/user/how-to-make-a-feature-request.md +++ b/documentation/user/how-to-make-a-feature-request.md @@ -6,19 +6,17 @@ order: 11 parent: wiki --- -### Before requesting +### Background +ACE2, AGM and CSE had a lot of features implemented or planned. All of them are or have been evaluated for inclusion in ACE3 itself, and we'd like to port the majority of them eventually. However, due to time constraints, we have managed to finish only a fraction of the job so far. -ACE 2, AGM and CSE had a lot of features implemented or planned. All of them are or have been evaluated for inclusion in ACE3 itself, and we'd like to port the majority of them eventually. However, due to time constraints, we have only managed to do a fraction of the job so far. - -There's really no point on making feature requests for anything included or planned for inclusion in ACE2, AGM or CSE. The majority of those things are been considered for porting or rewritting already. +Please refrain from making requests for any planned or existing features from either ACE2, AGM or CSE. Most of them are already being or have been considered for porting or a rewrite.
-
Please note:
-

Due to the pace at which development is taking place, we are establishing a feature request embargo during the first week weeks prior and posterior to the first release. Feel free to add feature requests as described below, but don't expect them to be evaluated or discussed yet. Any dev activity on the feature request thread is highly unlikely during that period.

+
Note:
+

Due to our current work load, in the period of weeks prior and posterior to the first release, new feature requests are under embargo. Feel free to submit yours now, but don't expect them to be considered just yet. Any treatment or attention by developers towards the feature request thread is highly unlikely during this time.

### Requesting a feature +In order to avoid duplicates and keep the issue tracker organized, we have created a common issue for ACE 3 Feature requests. Any and all relevant requests should be submitted there, where they will also get discussed and evaluated. Before adding a new one, make sure to check the previous entries from the thread and do a quick search for similar suggestions; please don't reiterate requests for features that had already been accepted for inclusion, or those which were disregarded earlier. -In order not to spam the issue tracker with duplicated requests, we have have created a single Issue for feature request. Any and all requests should be done there, where they will get discussed and evaluated. Before posting a new one, please make sure to check the previous entries on the thread and make a quick search; please don't reiterate requests that had already been either accepted for inclusion or disregarded. - -Accepted feature requests may be moved to a separate issue by moderators for further discussion. +Following their approval, feature requests may be moved by moderators to a separate issue for further discussion. diff --git a/documentation/user/shortcuts.md b/documentation/user/shortcuts.md new file mode 100644 index 0000000000..66e12ae76f --- /dev/null +++ b/documentation/user/shortcuts.md @@ -0,0 +1,214 @@ +--- +layout: wiki +title: Shortcuts +group: user +order: 5 +parent: wiki +--- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ShortcutActionPBO
Ctrl+⇧ Shift+KShow ProtractorACE_Advanced_Ballistics
⊞ WinInteraction menuACE_Interaction
Ctrl+⊞ WinSelf-interaction menuACE_Interaction
Ctrl+SpaceOpen/close doorACE_Interaction
Ctrl+TTap on the shoulderACE_Interaction
CtrlModifier keyACE_Logistics
Ctrl+⇧ Shift+TWipe off gogglesACE_Goggles
8Switch grenade modeACE_Grenades
CtrlShow namesACE_NameTags
Alt+Page UpNVG: Increase brightnessACE_NightVision
Alt+Page DownNVG: Decrease brightnessACE_NightVision
⇧ Shift+RClear firearm malfunctionACE_Overheating
OAltimeterACE_Parachute
Ctrl+RCheck ammunitionACE_Reload
`Safety toggleACE_SafeMode
Page UpScope: Elevation upACE_Scopes
Page DownScope: Elevation downACE_Scopes
Ctrl+Page UpScope: Windage leftACE_Scopes
Ctrl+Page DownScope: Windage rightACE_Scopes
Tab ↹Vector: Azimuth keyACE_Vector
RVector: Distance keyACE_Vector
DelSpeed limiterACE_Vehicles
1PistolACE_WeaponSelect
2RifleACE_WeaponSelect
3Grenade launcherACE_WeaponSelect
5BinocularsACE_WeaponSelect
6Frag grenadeACE_WeaponSelect
7Non-frag grenadeACE_WeaponSelect
0Holster weaponACE_WeaponSelect
2Engine onACE_WeaponSelect
1Engine offACE_WeaponSelect
3Primary weaponACE_WeaponSelect
4Machine gunACE_WeaponSelect
5MissilesACE_WeaponSelect
9Fire smoke launcherACE_WeaponSelect
Tab ↹FCS: Lase target (measure distance)ACE_FireControlSsystem
Page UpFCS: Range upACE_FireControlSsystem
Page DownFCS: Range downACE_FireControlSsystem
⇧ Shift+KShow Wind InfoACE_Weather
diff --git a/documentation/user/shourtcuts.md b/documentation/user/shourtcuts.md deleted file mode 100644 index d44dc54886..0000000000 --- a/documentation/user/shourtcuts.md +++ /dev/null @@ -1,204 +0,0 @@ ---- -layout: wiki -title: Shortcuts -group: user -order: 5 -parent: wiki ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PBOCommandShortcut
ACE_InteractionInteraction MenuWin_Left
ACE_InteractionInteraction Menu (Self)Ctrl Win_Left
ACE_InteractionOpen / Close DoorCtrl Space
ACE_InteractionTap ShoulderCtrl T
ACE_LogisticsModifier KeyCtrl_Left
ACE_GogglesWipe GogglesCtrl Shift T
ACE_GrenadesSwitch Grenade Mode8
ACE_NameTagsShow NamesCtrl_Left
ACE_NightVisionIncrease NVG BrightnessAlt Page Up
ACE_NightVisionDecrease NVG BrightnessAlt Page Down
ACE_OverheatingClear jamShift R
ACE_ParachuteShow AltimeterO
ACE_ReloadCheck AmmoCtrl R
ACE_SafeModeSafe Mode`(en) | ^(de)
ACE_ScopesAdjust Elevation UpPage Up
ACE_ScopesAdjust Elevation DownPage Down
ACE_ScopesAdjust Windage LeftCtrl Page Up
ACE_ScopesAdjust Windage RightCtrl Page Down
ACE_VectorVector - Azimuth KeyTab
ACE_VectorVector - Distance KeyR
ACE_VehiclesSpeed LimiterDel
ACE_WeaponSelectSelect Pistol1
ACE_WeaponSelectSelect Rifle2
ACE_WeaponSelectSelect Grenade Launcher3
ACE_WeaponSelectSelect Binoculars5
ACE_WeaponSelectSelect Frag Grenade6
ACE_WeaponSelectSelect Non-Frag Grenade7
ACE_WeaponSelectHolster Weapon0
ACE_WeaponSelectEngine on2
ACE_WeaponSelectEngine off1
ACE_WeaponSelectSelect Main Gun3
ACE_WeaponSelectSelect Machine Gun4
ACE_WeaponSelectSelect Missiles5
ACE_WeaponSelectFire Smoke Launcher9
ACE_FireControlSsystemLase Target / Measure DistanceTab
ACE_FireControlSsystemAdjust FCS Range (Up)Page Up
ACE_FireControlSsystemAdjust FCS Range (Down)Page Down
\ No newline at end of file diff --git a/extensions/advanced_ballistics/AdvancedBallistics.cpp b/extensions/advanced_ballistics/AdvancedBallistics.cpp index 4bc9a28933..e62a564dca 100644 --- a/extensions/advanced_ballistics/AdvancedBallistics.cpp +++ b/extensions/advanced_ballistics/AdvancedBallistics.cpp @@ -461,7 +461,7 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) if (gridHeight > position[2]) { double angle = atan((gridHeight - position[2]) / 100); - windAttenuation *= pow(cos(angle), 2); + windAttenuation *= pow(abs(cos(angle)), 2); } } } @@ -476,7 +476,7 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) if (heightAGL > 0 && heightAGL < 20) { double roughnessLength = calculateRoughnessLength(windSourceObstacles[0], windSourceObstacles[1]); - windAttenuation *= (log(heightAGL / roughnessLength) / log(20 / roughnessLength)); + windAttenuation *= abs(log(heightAGL / roughnessLength) / log(20 / roughnessLength)); } } diff --git a/extras/assets/icons/png/Icon_Module_mk6_ca.png b/extras/assets/icons/png/Icon_Module_mk6_ca.png new file mode 100644 index 0000000000..26c2966551 Binary files /dev/null and b/extras/assets/icons/png/Icon_Module_mk6_ca.png differ diff --git a/optionals/compat_rh_m4/CfgWeapons.hpp b/optionals/compat_rh_m4/CfgWeapons.hpp index 132859f778..69536e9302 100644 --- a/optionals/compat_rh_m4/CfgWeapons.hpp +++ b/optionals/compat_rh_m4/CfgWeapons.hpp @@ -1,35 +1,7 @@ -class Mode_SemiAuto; -class Mode_Burst; -class Mode_FullAuto; -class SlotInfo; -class MuzzleSlot; -class CowsSlot; -class PointerSlot; -class UnderBarrelSlot; -class asdg_SlotInfo; -class asdg_FrontSideRail; -class asdg_OpticRail; -class asdg_OpticRail1913; -class asdg_OpticRail1913_short; -class asdg_MuzzleSlot_556; -class asdg_MuzzleSlot_762; -class asdg_MuzzleSlot_9MM; -class asdg_UnderSlot; class CfgWeapons { - class Rifle; - class UGL_F; - class Rifle_Base_F: Rifle - { - }; - class ItemCore; - class ItemInfo; - class InventoryItem_Base_F; - class InventoryMuzzleItem_Base_F; - class InventoryOpticsItem_Base_F; - class InventoryFlashLightItem_Base_F; - class Zasleh2; + class Rifle_Base_F; class RH_ar10: Rifle_Base_F { ACE_barrelTwist=11.25; @@ -105,7 +77,7 @@ class CfgWeapons ACE_barrelTwist=7; ACE_barrelLength=20; }; - class RH_M16A4 : Rifle_Base_F + class RH_M16A4 : RH_M4_ris { ACE_barrelTwist=7; ACE_barrelLength=20; diff --git a/optionals/compat_rh_m4/script_component.hpp b/optionals/compat_rh_m4/script_component.hpp index 4ab887e889..167c926dd7 100644 --- a/optionals/compat_rh_m4/script_component.hpp +++ b/optionals/compat_rh_m4/script_component.hpp @@ -1,4 +1,4 @@ -#define COMPONENT rh_m4_comp +#define COMPONENT RH_m4_cfg_comp #include "\z\ace\addons\main\script_mod.hpp" diff --git a/optionals/compat_rhs_afrf3/CfgAmmo.hpp b/optionals/compat_rhs_afrf3/CfgAmmo.hpp new file mode 100644 index 0000000000..323634f02c --- /dev/null +++ b/optionals/compat_rhs_afrf3/CfgAmmo.hpp @@ -0,0 +1,125 @@ + +class CfgAmmo +{ + class BulletBase; + class B_556x45_Ball; + class rhs_B_545x39_Ball: B_556x45_Ball + { + ACE_caliber=0.220; + ACE_bulletLength=0.85; + ACE_bulletMass=52.9; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.168}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={780, 880, 920}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class rhs_B_545x39_Ball_Tracer_Green: rhs_B_545x39_Ball + { + ACE_caliber=0.220; + ACE_bulletLength=0.85; + ACE_bulletMass=49.8; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.168}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={785, 883, 925}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class B_762x51_Ball; + class rhs_B_762x54_Ball: B_762x51_Ball + { + ACE_caliber=0.312; + ACE_bulletLength=1.14; + ACE_bulletMass=152; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.4}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={700, 800, 820, 833}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class rhs_B_762x54_Ball_Tracer_Green: B_762x51_Ball + { + ACE_caliber=0.312; + ACE_bulletLength=1.14; + ACE_bulletMass=149; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.395}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={680, 750, 798, 800}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class rhs_B_762x54_7N1_Ball: rhs_B_762x54_Ball + { + ACE_caliber=0.312; + ACE_bulletLength=1.14; + ACE_bulletMass=152; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.4}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={700, 800, 820, 833}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class rhs_B_762x39_Ball: B_762x51_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=123; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.275}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={650, 716, 750}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class rhs_B_762x39_Tracer: rhs_B_762x39_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=117; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.275}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={650, 716, 750}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class B_9x21_Ball; + class rhs_B_9x19_7N21: B_9x21_Ball + { + ACE_caliber=0.355; + ACE_bulletLength=0.610; + ACE_bulletMass=80.2; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.14}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={445, 460, 480}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class rhs_B_9x18_57N181S: B_9x21_Ball + { + ACE_caliber=0.365; + ACE_bulletLength=0.610; + ACE_bulletMass=92.6; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.125}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={298, 330, 350}; + ACE_barrelLengths[]={3.8, 5, 9}; + }; +}; \ No newline at end of file diff --git a/optionals/compat_rhs_afrf3/CfgWeapons.hpp b/optionals/compat_rhs_afrf3/CfgWeapons.hpp new file mode 100644 index 0000000000..49573b164a --- /dev/null +++ b/optionals/compat_rhs_afrf3/CfgWeapons.hpp @@ -0,0 +1,67 @@ + +class CfgWeapons +{ + class hgun_Rook40_F; + class rhs_weap_pya: hgun_Rook40_F + { + ACE_barrelTwist=10; + ACE_barrelLength=4.4; + }; + class Pistol_Base_F; + class rhs_weap_makarov_pmm: rhs_weap_pya + { + ACE_barrelTwist=9.45; + ACE_barrelLength=3.68; + }; + class rhs_weap_ak74m_Base_F; + class rhs_weap_ak74m: rhs_weap_ak74m_Base_F + { + ACE_barrelTwist=7.87; + ACE_barrelLength=16.3; + }; + class rhs_weap_akm: rhs_weap_ak74m + { + ACE_barrelTwist=7.87; + ACE_barrelLength=16.3; + }; + class rhs_weap_aks74; + class rhs_weap_aks74u: rhs_weap_aks74 + { + ACE_barrelTwist=6.3; + ACE_barrelLength=8.3; + }; + class rhs_weap_svd: rhs_weap_ak74m + { + ACE_barrelTwist=9.4; + ACE_barrelLength=24.4; + }; + class rhs_weap_svdp; + class rhs_weap_svds: rhs_weap_svdp + { + ACE_barrelTwist=9.4; + ACE_barrelLength=22.2; + }; + class rhs_pkp_base; + class rhs_weap_pkp: rhs_pkp_base + { + ACE_barrelTwist=9.45; + ACE_barrelLength=25.9; + }; + class rhs_weap_pkm: rhs_weap_pkp + { + ACE_barrelTwist=9.45; + ACE_barrelLength=25.4; + }; + class rhs_weap_rpk74m: rhs_weap_pkp + { + ACE_barrelTwist=7.68; + ACE_barrelLength=23.2; + }; + + class rhs_acc_sniper_base; + class rhs_acc_pso1m2: rhs_acc_sniper_base { + ACE_ScopeAdjust_Vertical[] = { 0, 0 }; + ACE_ScopeAdjust_Horizontal[] = { -10, 10 }; + ACE_ScopeAdjust_Increment = 0.5; + }; +}; \ No newline at end of file diff --git a/optionals/compat_rhs_afrf3/config.cpp b/optionals/compat_rhs_afrf3/config.cpp new file mode 100644 index 0000000000..8b7f9d5ca4 --- /dev/null +++ b/optionals/compat_rhs_afrf3/config.cpp @@ -0,0 +1,15 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"rhs_c_weapons"}; + author[]={"Ruthberg"}; + VERSION_CONFIG; + }; +}; + +#include "CfgAmmo.hpp" +#include "CfgWeapons.hpp" diff --git a/optionals/compat_rhs_afrf3/script_component.hpp b/optionals/compat_rhs_afrf3/script_component.hpp new file mode 100644 index 0000000000..edf3963b1f --- /dev/null +++ b/optionals/compat_rhs_afrf3/script_component.hpp @@ -0,0 +1,5 @@ +#define COMPONENT rhs_c_weapons_comp + +#include "\z\ace\addons\main\script_mod.hpp" + +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/optionals/compat_rhs_usf3/CfgAmmo.hpp b/optionals/compat_rhs_usf3/CfgAmmo.hpp new file mode 100644 index 0000000000..68a8c8f7fd --- /dev/null +++ b/optionals/compat_rhs_usf3/CfgAmmo.hpp @@ -0,0 +1,97 @@ + +class CfgAmmo +{ + class BulletBase; + class rhsusf_B_300winmag: BulletBase + { + ACE_caliber=0.308; + ACE_bulletLength=1.489; + ACE_bulletMass=220; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.310}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={847, 867, 877}; + ACE_barrelLengths[]={20, 24, 26}; + }; + class B_556x45_Ball; + class rhs_ammo_556x45_Mk318_Ball: B_556x45_Ball + { + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=62; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.307}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={780, 886, 950}; + ACE_barrelLengths[]={10, 15.5, 20}; + }; + class rhs_ammo_556x45_Mk262_Ball: B_556x45_Ball + { + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=77; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.361}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={624, 816, 832, 838}; + ACE_barrelLengths[]={7.5, 14.5, 18, 20}; + }; + class rhs_ammo_762x51_M80_Ball: BulletBase + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=146; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.2}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={700, 800, 820, 833, 845}; + ACE_barrelLengths[]={10, 16, 20, 24, 26}; + }; + class rhs_ammo_762x51_M118_Special_Ball: rhs_ammo_762x51_M80_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.24; + ACE_bulletMass=175; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.243}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={750, 780, 790, 794}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class rhs_ammo_762x51_M993_Ball: rhs_ammo_762x51_M80_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.24; + ACE_bulletMass=127; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.377}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={875, 910, 930}; + ACE_barrelLengths[]={13, 16, 20}; + }; + class rhs_ammo_45ACP_MHP: BulletBase + { + ACE_caliber=0.452; + ACE_bulletLength=0.68; + ACE_bulletMass=230; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.195}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={230, 250, 285}; + ACE_barrelLengths[]={4, 5, 9}; + }; +}; \ No newline at end of file diff --git a/optionals/compat_rhs_usf3/CfgWeapons.hpp b/optionals/compat_rhs_usf3/CfgWeapons.hpp new file mode 100644 index 0000000000..a9791cd6b8 --- /dev/null +++ b/optionals/compat_rhs_usf3/CfgWeapons.hpp @@ -0,0 +1,86 @@ + +class CfgWeapons +{ + class Pistol_Base_F; + class Rifle_Base_F; + class srifle_EBR_F; + class rhs_weap_XM2010_Base_F: Rifle_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=24; + }; + class arifle_MX_Base_F; + class rhs_weap_m4_Base: arifle_MX_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=14.5; + }; + class rhs_weap_m4a1; + class rhs_weap_mk18: rhs_weap_m4a1 + { + ACE_barrelTwist=7; + ACE_barrelLength=10.3; + }; + class rhs_weap_m16a4: rhs_weap_m4_Base + { + ACE_barrelTwist=7; + ACE_barrelLength=20; + }; + class rhs_M249_base; + class rhs_weap_m249_pip: rhs_M249_base + { + ACE_barrelTwist=7; + ACE_barrelLength=16.3; + }; + class weap_m240_base; + class rhs_weap_m240B: weap_m240_base + { + ACE_barrelTwist=12; + ACE_barrelLength=24.8; + }; + class rhs_weap_m14ebrri: srifle_EBR_F + { + ACE_barrelTwist=12; + ACE_barrelLength=22; + }; + class rhs_weap_sr25: rhs_weap_m14ebrri + { + ACE_barrelTwist=11.25; + ACE_barrelLength=24; + }; + class rhs_weap_sr25_ec: rhs_weap_sr25 + { + ACE_barrelTwist=11.25; + ACE_barrelLength=20; + }; + class rhs_weap_M590_5RD: Rifle_Base_F + { + ACE_barrelTwist=0; + ACE_twistDirection=0; + ACE_barrelLength=18.5; + }; + class rhs_weap_M590_8RD: rhs_weap_M590_5RD + { + ACE_barrelTwist=0; + ACE_twistDirection=0; + ACE_barrelLength=20; + }; + class hgun_ACPC2_F; + class rhsusf_weap_m1911a1: hgun_ACPC2_F + { + ACE_barrelTwist=16; + ACE_barrelLength=5; + }; + + class rhsusf_acc_sniper_base; + class rhsusf_acc_LEUPOLDMK4: rhsusf_acc_sniper_base { + ACE_ScopeAdjust_Vertical[] = { -4, 30 }; + ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; + ACE_ScopeAdjust_Increment = 0.1; + }; + class rhsusf_acc_LEUPOLDMK4_2: rhsusf_acc_sniper_base { + ACE_ScopeAdjust_Vertical[] = { -4, 30 }; + ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; + ACE_ScopeAdjust_Increment = 0.1; + }; +}; \ No newline at end of file diff --git a/optionals/compat_rhs_usf3/config.cpp b/optionals/compat_rhs_usf3/config.cpp new file mode 100644 index 0000000000..bc4d264697 --- /dev/null +++ b/optionals/compat_rhs_usf3/config.cpp @@ -0,0 +1,15 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"rhsusf_c_weapons"}; + author[]={"Ruthberg"}; + VERSION_CONFIG; + }; +}; + +#include "CfgAmmo.hpp" +#include "CfgWeapons.hpp" diff --git a/optionals/compat_rhs_usf3/script_component.hpp b/optionals/compat_rhs_usf3/script_component.hpp new file mode 100644 index 0000000000..c0a5bbf1f4 --- /dev/null +++ b/optionals/compat_rhs_usf3/script_component.hpp @@ -0,0 +1,5 @@ +#define COMPONENT rhsusf_c_weapons_comp + +#include "\z\ace\addons\main\script_mod.hpp" + +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/tools/make.py b/tools/make.py index c7dfd2e4fb..382f8dd776 100644 --- a/tools/make.py +++ b/tools/make.py @@ -309,12 +309,12 @@ def copy_important_files(source_dir,destination_dir): "logo_ace3_ca.paa" ] - print_yellow ("source_dir: " + source_dir) - print_yellow("destination_dir: " + destination_dir) - #copy importantFiles try: print_blue("\nSearching for important files in " + source_dir) + print("Source_dir: " + source_dir) + print("Destination_dir: " + destination_dir) + for file in importantFiles: print_green("Copying file => " + os.path.join(source_dir,file)) shutil.copyfile(os.path.join(source_dir,file),os.path.join(destination_dir,file)) @@ -449,6 +449,13 @@ def build_signature_file(file_name): return True else: return False + + +def check_for_obsolete_pbos(addonspath, file): + module = file[4:-4] + if not os.path.exists(os.path.join(addonspath, module)): + return True + return False ############################################################################### @@ -759,6 +766,15 @@ See the make.cfg file for additional build options. key = os.path.join(private_key_path, key_name + ".biprivatekey") + # Remove any obsolete files. + print_blue("\nChecking for obsolete files...") + obsolete_check_path = os.path.join(module_root, release_dir, project,"addons") + for file in os.listdir(obsolete_check_path): + if (file.endswith(".pbo") and os.path.isfile(os.path.join(obsolete_check_path,file))): + if check_for_obsolete_pbos(module_root, file): + fileName = os.path.splitext(file)[0] + print_yellow("Removing obsolete file => " + file) + purge(obsolete_check_path,fileName+"\..",fileName+".*") # For each module, prep files and then build. print_blue("\nBuilding...") @@ -1044,8 +1060,6 @@ See the make.cfg file for additional build options. except: print_error("ERROR: Could not delete pboProject temp files.") - print_green("\nDone.") - copy_important_files(module_root_parent,os.path.join(release_dir, "@ace")) cleanup_optionals(optionals_modules) @@ -1087,6 +1101,9 @@ See the make.cfg file for additional build options. shutil.copytree(os.path.join(module_root, release_dir, project), os.path.join(a3_path, project)) except: print_error("Could not copy files. Is Arma 3 running?") + + print_green("\nDone.") + if __name__ == "__main__": main(sys.argv)