Merge branch 'master' into overheatingSilencers

This commit is contained in:
esteldunedain 2016-02-20 17:25:26 -03:00
commit 2d2e95fddc
251 changed files with 3295 additions and 1009 deletions

View File

@ -2,7 +2,7 @@
## Before reporting
If you have found an issue with ACE3 please make sure that ACE3 is really the cause of the problem. To do this try to reproduce the issue with using only `@CBA_A3` and `@ace` on a newly created mission.
If you have found an issue with ACE3 please make sure that ACE3 really is the cause of the problem. To do this try to reproduce the issue with using only `@CBA_A3` and `@ace` on a newly created mission.
Indicate if the issue appears on stable or development version. In case it is the development version, please also include the commit SHA-1 hash.
@ -14,38 +14,10 @@ Indicate if the issue appears on stable or development version. In case it is th
## Reporting the issue
Head over to the [ACE3 GitHub issue tracker](https://github.com/acemod/ACE3/issues) and press the [New issue](https://github.com/acemod/ACE3/issues/new) button in the top right corner. Add a descriptive title and copy the following issue template in to the text area:
```
ACE3 Version: 3.x.x
(indicate if stable or dev, if dev indicate the commit the version is based on)
**Mods:**
* `@CBA_A3`
* `@ace`
**Placed ACE3 Modules:**
* *Add the list of modules you have placed on the map. Use 'None' if the error occurs without using any modules.*
* You can also press the `Debug to` button in the ACE3 option menu (escape -> ACE3 options -> Debug to) and add a link (pastebin.com) to the results.
**Description:**
* Add a detailed description of the error. This makes it easier for us to fix the issue.*
**Steps to reproduce:**
* *Add the steps needed to reproduce the issue.*
**Where did the issue occur?**
* A possible answer might be "Multiplayer", "Editor" or "Singleplayer"*
**RPT log file:**
* Add a link (pastebin.com) to the client or server RPT file.*
```
Head over to the [ACE3 GitHub issue tracker](https://github.com/acemod/ACE3/issues) and press the [New issue](https://github.com/acemod/ACE3/issues/new) button in the top right corner. Add a descriptive title and complete the issue template.
A video of the issue might be helpful in resolving it faster.
GitHub uses [Markdown](http://daringfireball.net/projects/markdown/syntax) to style the output. If you want to know more about it (e.g. how to [turn text bold](https://help.github.com/articles/markdown-basics/#styling-text), how to denote [code blocks](https://help.github.com/articles/markdown-basics/#inline-formats) or [inline code](https://help.github.com/articles/markdown-basics/#multiple-lines)) have a look at the [GitHub Markdown Documentation](https://help.github.com/articles/github-flavored-markdown).
# Feature Requests
## Background
@ -57,8 +29,3 @@ Please refrain from making requests for any planned or existing features from ei
In order to avoid duplicates and keep the issue tracker organized, we have created a common issue for [ACE3 Feature requests](https://github.com/acemod/ACE3/issues/414). 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.
Following their approval, feature requests may be moved by moderators to a separate issue for further discussion.
# Regarding Pull Requests (PRs)
- You want to help but don't know where to start? Check the wiki entry for [setting up the development environment](http://ace3mod.com/wiki/development/setting-up-the-development-environment.html)
- [Make sure to respect the file structure](http://ace3mod.com/wiki/development/modularity-and-pbo-structure.html)
- [Make sure to respect the coding guidelines](http://ace3mod.com/wiki/development/coding-guidelines.html)

25
.github/ISSUE_TEMPLATE.md vendored Normal file
View File

@ -0,0 +1,25 @@
**Arma 3 Version:** `x.xx`
*(indicate if stable, rc or dev*)
**ACE3 Version:** `3.x.x`
*(indicate if stable or dev, if dev indicate the commit the version is based on)*
**Mods:**
* `@CBA_A3`
* `@ace`
* ...
**Placed Modules:**
* *Add the list of modules you have placed on the map. Use 'None' if the error occurs without using any modules.*
**Description:**
* *Add a detailed description of the error. This makes it easier for us to fix the issue.*
**Steps to reproduce:**
* *Add the steps needed to reproduce the issue.*
**Where did the issue occur?**
* *A possible answer might be "Dedicated Server", "Local Multiplayer", "Editor", or "Singleplayer"*
**RPT log file:**
* *Add a link (pastebin.com) to the client and/or server RPT file. An instruction to find your RPT files can be [found here](https://community.bistudio.com/wiki/Crash_Files#Arma_3)*

10
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View File

@ -0,0 +1,10 @@
### When merged this pull request will:
1. *Describe what this pull request will do*
2. *Each change in a seperate line*
---
*Delete this line and everything below*
- [Make sure to respect the file structure](http://ace3mod.com/wiki/development/modularity-and-pbo-structure.html)
- [Make sure to respect the coding guidelines](http://ace3mod.com/wiki/development/coding-guidelines.html)

View File

@ -39,6 +39,7 @@ Alganthe <alganthe@live.fr>
Anthariel <Contact@storm-simulation.com>
Arkhir <wonsz666@gmail.com >
Asgar Serran <piechottaf@web.de>
BaerMitUmlaut
Bamse <bamsis@gmail.com>
Bla1337
BlackPixxel <blackpixxel96@gmail.com>

View File

@ -64,7 +64,6 @@ The mod is **built modularly**, so almost any included PBO can be easily removed
- 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

View File

@ -36,3 +36,7 @@ if (!hasInterface) exitWith {};
[] call FUNC(updateTrajectoryPFH);
}] call EFUNC(common,addEventHandler);
#ifdef DEBUG_MODE_FULL
call FUNC(diagnoseWeapons);
#endif

View File

@ -7,6 +7,7 @@ PREP(calculateAtmosphericCorrection);
PREP(calculateBarrelLengthVelocityShift);
PREP(calculateRetardation);
PREP(calculateStabilityFactor);
PREP(diagnoseWeapons);
PREP(displayProtractor);
PREP(handleFired);
PREP(initializeTerrainExtension);

View File

@ -22,6 +22,7 @@ private ["_muzzleVelocityTableCount", "_barrelLengthTableCount", "_lowerDataInde
"_upperDataIndex", "_lowerBarrelLength", "_upperBarrelLength", "_lowerMuzzleVelocity",
"_upperMuzzleVelocity", "_interpolationRatio"];
params ["_barrelLength", "_muzzleVelocityTable", "_barrelLengthTable", "_muzzleVelocity"];
TRACE_4("params",_barrelLength,_muzzleVelocityTable,_barrelLengthTable,_muzzleVelocity);
// If barrel length is not defined, then there is no point in calculating muzzle velocity
if (_barrelLength == 0) exitWith { 0 };

View File

@ -0,0 +1,59 @@
/*
* Author: esteldunedain
*
* This function diagnoses all primary weapons to find cases in which the initial
* velocity of shots with and without AB significantly mismatch
*
* Arguments:
* None. Parameters inherited from EFUNC(common,firedEH)
*
* Return Value:
* None
*
* Public: No
*/
#define DEBUG_MODE_FULL
#include "script_component.hpp"
private _cfgWeapons = configFile >> "CfgWeapons";
for "_i" from 0 to (count _cfgWeapons)-1 do {
private _weaponConfig = _cfgWeapons select _i;
if (isClass _weaponConfig) then {
private _weapon = configName _weaponConfig;
private _weaponType = getNumber (_weaponConfig >> "Type");
if (_weaponType == 1) then {
// The weapon is a primary weapon
private _weaponInitSpeed = getNumber (_weaponConfig >> "initSpeed");
private _magazines = getArray (_weaponConfig >> "magazines");
{
private _magazine = _x;
private _magazineInitSpeed = getNumber (configFile >> "CfgMagazines" >> _magazine >> "initSpeed");
private _ammo = getText (configFile >> "CfgMagazines" >> _magazine >> "ammo");
// Vanilla initial speed --------------------------
private _vanillaInitialSpeed = _magazineInitSpeed;
if (_weaponInitSpeed > 0) then {
_vanillaInitialSpeed = _weaponInitSpeed;
} else {
if (_weaponInitSpeed < 0) then {
_vanillaInitialSpeed = _vanillaInitialSpeed * (-_weaponInitSpeed);
};
};
// --------------------------------------------------
// AB initial speed --------------------------------
// Get Weapon and Ammo Configurations
private _AmmoCacheEntry = _ammo call FUNC(readAmmoDataFromConfig);
private _WeaponCacheEntry = _weapon call FUNC(readWeaponDataFromConfig);
_AmmoCacheEntry params ["_airFriction", "_caliber", "_bulletLength", "_bulletMass", "_transonicStabilityCoef", "_dragModel", "_ballisticCoefficients", "_velocityBoundaries", "_atmosphereModel", "_ammoTempMuzzleVelocityShifts", "_muzzleVelocityTable", "_barrelLengthTable"];
_WeaponCacheEntry params ["_barrelTwist", "_twistDirection", "_barrelLength"];
private _barrelVelocityShift = [_barrelLength, _muzzleVelocityTable, _barrelLengthTable, _vanillaInitialSpeed] call FUNC(calculateBarrelLengthVelocityShift);
private _abInitialSpeed = _vanillaInitialSpeed + _barrelVelocityShift;
// --------------------------------------------------
diag_log text format ["ABDiagnose,%1,%2,%3,%4,%5,%6,%7",_weapon,_magazine,_ammo,_magazineInitSpeed,_weaponInitSpeed,_vanillaInitialSpeed,_abInitialSpeed];
} forEach _magazines;
};
};
};

View File

@ -24,6 +24,7 @@
*/
#include "script_component.hpp"
TRACE_1("Reading Ammo Config",_this);
private ["_ammo", "_airFriction", "_caliber", "_bulletLength", "_bulletMass", "_transonicStabilityCoef", "_dragModel", "_ballisticCoefficients", "_velocityBoundaries", "_atmosphereModel", "_ammoTempMuzzleVelocityShifts", "_muzzleVelocityTable", "_barrelLengthTable", "_result"];
_ammoConfig = configFile >> "CfgAmmo" >> _this;
@ -49,6 +50,42 @@ _ammoTempMuzzleVelocityShifts = getArray(_ammoConfig >> "ACE_ammoTempMuzzleVeloc
_muzzleVelocityTable = getArray(_ammoConfig >> "ACE_muzzleVelocities");
_barrelLengthTable = getArray(_ammoConfig >> "ACE_barrelLengths");
//Handle subsonic ammo that would have a huge muzzle velocity shift (when ballistic configs not explicitly defined)
private _typicalSpeed = getNumber (_ammoConfig >> "typicalSpeed");
if ((_typicalSpeed > 0) && {_typicalSpeed < 360}) then {
private _inheritedBarrelConfig = (!(_muzzleVelocityTable isEqualTo [])) && {(configProperties [_ammoConfig, "(configName _x) == 'ACE_muzzleVelocities'", false]) isEqualTo []};
private _inheritedTempConfig = (!(_ammoTempMuzzleVelocityShifts isEqualTo [])) && {(configProperties [_ammoConfig, "(configName _x) == 'ACE_ammoTempMuzzleVelocityShifts'", false]) isEqualTo []};
TRACE_3("subsonic",_typicalSpeed,_inheritedBarrelConfig,_inheritedTempConfig);
if (_inheritedBarrelConfig || _inheritedTempConfig) then {
private _parentConfig = inheritsFrom _ammoConfig;
private _parentSpeed = getNumber (_parentConfig >> "typicalSpeed");
ACE_LOGWARNING_4("Subsonic Ammo %1 (%2 m/s) missing `ACE_muzzleVelocities` or `ACE_ammoTempMuzzleVelocityShifts` configs, attempting to use parent %3 (%4m/s)",_this,_typicalSpeed,configName _parentConfig, _parentSpeed);
if (_parentSpeed <= 0) exitWith {//Handle weird or null parent
_muzzleVelocityTable = [];
_ammoTempMuzzleVelocityShifts = [];
};
private _linearMuliplier = _typicalSpeed / _parentSpeed;
if (_inheritedBarrelConfig) then {
if (!((configProperties [_parentConfig, "(configName _x) == 'ACE_muzzleVelocities'", false]) isEqualTo [])) then {
TRACE_2("Parent Has Defined Barrel MV",_linearMuliplier,_muzzleVelocityTable);
{ _muzzleVelocityTable set [_forEachIndex, (_x * _linearMuliplier)]; } forEach _muzzleVelocityTable;
} else {
TRACE_2("Parent DOES NOT Have Defined Barrel MV",_linearMuliplier,_muzzleVelocityTable);
_muzzleVelocityTable = [];
};
};
if (_inheritedTempConfig) then {
if (!((configProperties [_parentConfig, "(configName _x) == 'ACE_ammoTempMuzzleVelocityShifts'", false]) isEqualTo [])) then {
TRACE_2("Parent Has Defined Ammo Temp Shifts",_linearMuliplier,_muzzleVelocityTable);
{ _ammoTempMuzzleVelocityShifts set [_forEachIndex, (_x * _linearMuliplier)]; } forEach _ammoTempMuzzleVelocityShifts;
} else {
TRACE_2("Parent DOES NOT Have Defined Ammo Temp Shifts",_linearMuliplier,_muzzleVelocityTable);
_ammoTempMuzzleVelocityShifts = [];
};
};
};
};
_result = [_airFriction, _caliber, _bulletLength, _bulletMass, _transonicStabilityCoef, _dragModel, _ballisticCoefficients, _velocityBoundaries, _atmosphereModel, _ammoTempMuzzleVelocityShifts, _muzzleVelocityTable, _barrelLengthTable];
uiNamespace setVariable [format[QGVAR(%1), _this], _result];

View File

@ -35,6 +35,7 @@
<French>Balistique avancée</French>
<Hungarian>Fejlett ballisztika</Hungarian>
<Russian>Продвинутая баллистика</Russian>
<Italian>Balistica avanzata</Italian>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_enabled_DisplayName">
<English>Advanced Ballistics</English>
@ -46,6 +47,7 @@
<French>Balistique avancée</French>
<Hungarian>Fejlett ballisztika</Hungarian>
<Russian>Продвинутая баллистика</Russian>
<Italian>Balistica avanzata</Italian>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_enabled_Description">
<English>Enables advanced ballistics</English>
@ -57,6 +59,7 @@
<French>Activer la balistique avancée</French>
<Hungarian>Engedélyezi a fejlett ballisztikát</Hungarian>
<Russian>Включает продвинутую баллистику</Russian>
<Italian>Abilita la balistica avanzata</Italian>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulateForSnipers_DisplayName">
<English>Enabled For Snipers</English>
@ -68,6 +71,7 @@
<French>Activer pour les snipers</French>
<Hungarian>Mesterlövészeknek engedélyezve</Hungarian>
<Russian>Включена для снайперов</Russian>
<Italian>Attiva per cecchini</Italian>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulateForSnipers_Description">
<English>Enables advanced ballistics for non local snipers (when using high power optics)</English>
@ -79,6 +83,7 @@
<French>Active la balistique avancée pour les snipers non locaux (en utilisant les optiques avancées)</French>
<Hungarian>Engedélyezi a fejlett ballisztikát nem-helyi mesterlövészeknek (nagy-teljesítményű optika használatakor)</Hungarian>
<Russian>Включает продвинутую баллистику для нелокальных снайперов (при использовании мощной оптики)</Russian>
<Italian>Abilita la balistica avanzata per cecchini non locali (quando si usano ottiche telescopiche)</Italian>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulateForGroupMembers_DisplayName">
<English>Enabled For Group Members</English>
@ -90,6 +95,7 @@
<French>Activer pour les membres groupés</French>
<Hungarian>Csoporttagoknak engedélyezve</Hungarian>
<Russian>Включена для группы</Russian>
<Italian>Attiva per membri del gruppo</Italian>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulateForGroupMembers_Description">
<English>Enables advanced ballistics for non local group members</English>
@ -101,6 +107,7 @@
<French>Active la balistique avancée pour les membres groupés non locaux</French>
<Hungarian>Engedélyezi a fejlett ballisztikát nem-helyi csoporttagoknak</Hungarian>
<Russian>Включает продвинутую баллистику для нелокальных членов группы</Russian>
<Italian>Abilita la balistica avanzata per membri di gruppi non locali</Italian>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulateForEveryone_DisplayName">
<English>Enabled For Everyone</English>
@ -112,6 +119,7 @@
<French>Activer pour tout le monde</French>
<Hungarian>Mindenkinek engedélyezve</Hungarian>
<Russian>Включена для всех</Russian>
<Italian>Attiva per tutti</Italian>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulateForEveryone_Description">
<English>Enables advanced ballistics for all non local players (enabling this may degrade performance during heavy firefights in multiplayer)</English>
@ -123,6 +131,7 @@
<French>Active la balistique avancé pour tous les joueurs non locaux (activer cette option peut avoir un impact sur les performance en multi durant les grands échanges de tirs)</French>
<Hungarian>Engedélyezi a fejlett ballisztikát az összes nem-helyi játékosnak (ez a funkció leronthatja a teljesítményt intenzív többjátékos tűzharcok alatt)</Hungarian>
<Russian>Включает продвинутую баллистику для всех нелокальных игроков (включение этой опции может снизить производительность при массовых перестрелках в мультиплеере)</Russian>
<Italian>Abilita la balistica avanzata per tutti i giocatori non locali (attivarlo può degradare le performance in combattimenti intensivi in multiplayer)</Italian>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_alwaysSimulateForGroupMembers_DisplayName">
<English>Always Enabled For Group Members</English>
@ -134,6 +143,7 @@
<French>Toujours activer pour les membres groupés</French>
<Hungarian>Mindig engedélyezve csoporttagoknak</Hungarian>
<Russian>Всегда включена для членов группы</Russian>
<Italian>Sempre attiva per membri del gruppo</Italian>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_alwaysSimulateForGroupMembers_Description">
<English>Always enables advanced ballistics when a group member fires</English>
@ -145,6 +155,7 @@
<French>Active tout le temps la balistique avancée quand un membre du groupe ouvre le feu</French>
<Hungarian>Mindig engedélyezi a fejlett ballisztikát, ha egy csoporttag tüzel</Hungarian>
<Russian>Всегда включает продвинутую баллистику когда стреляет член группы</Russian>
<Italian>Abilita sempre la balistica avanzata quando spara un membro del gruppo</Italian>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_disabledInFullAutoMod_DisplayName">
<English>Disabled In FullAuto Mode</English>
@ -156,6 +167,7 @@
<French>Désactiver en mode rafale libre</French>
<Hungarian>Automata módban letiltva</Hungarian>
<Russian>Выкл. для автомат. режима</Russian>
<Italian>Inattivo in fuoco automatico</Italian>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_disabledInFullAutoMod_Description">
<English>Disables the advanced ballistics during full auto fire</English>
@ -167,6 +179,7 @@
<French>Désactive la balistique avancée pour les tirs en rafale libre</French>
<Hungarian>Letiltja a fejlett ballisztikát automata tüzelés folyamán</Hungarian>
<Russian>Выключает продвинутую баллистику при стрельбе в полностью автоматическом режиме</Russian>
<Italian>Disabilita la balistica avanzata in fuoco automatico</Italian>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_ammoTemperatureEnabled_DisplayName">
<English>Enable Ammo Temperature Simulation</English>
@ -178,6 +191,7 @@
<French>Activer la simulation de la température</French>
<Hungarian>Lőszer-hő szimuláció engedélyezése</Hungarian>
<Russian>Симуляция температуры для боеприпасов</Russian>
<Italian>Abilita la simulazione della temperature delle munizioni</Italian>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_ammoTemperatureEnabled_Description">
<English>Muzzle velocity varies with ammo temperature</English>
@ -189,6 +203,7 @@
<French>La température de la munition influe sur la vélocité intiale</French>
<Hungarian>A kezdősebesség a lőszer hőmérsékletétől függően változó</Hungarian>
<Russian>Начальная скорость пули зависит от температуры</Russian>
<Italian>La velocità iniziale del proiettile varia con la temperatura</Italian>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_barrelLengthInfluenceEnabled_DisplayName">
<English>Enable Barrel Length Simulation</English>
@ -200,6 +215,7 @@
<French>Activer la simulation de la longueur de canon</French>
<Hungarian>Csőhossz-szimuláció engedélyezése</Hungarian>
<Russian>Симуляция длины ствола</Russian>
<Italian>Abilita la simulazione della lunghezza della canna</Italian>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_barrelLengthInfluenceEnabled_Description">
<English>Muzzle velocity varies with barrel length</English>
@ -211,6 +227,7 @@
<French>La longueur du canon influe sur la vélocité initale</French>
<Hungarian>A kezdősebesség a cső hosszától függően változó</Hungarian>
<Russian>Начальная скорость пули зависит от длины ствола</Russian>
<Italian>La velocità iniziale del proiettile varia con la lunghezza della canna</Italian>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_bulletTraceEnabled_DisplayName">
<English>Enable Bullet Trace Effect</English>
@ -222,6 +239,7 @@
<French>Activer l'effet traçante</French>
<Hungarian>Nyomkövető-effekt engedélyezése</Hungarian>
<Russian>Следы пуль</Russian>
<Italian>Abilita l'effetto tracciante</Italian>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_bulletTraceEnabled_Description">
<English>Enables a bullet trace effect to high caliber bullets (only visible when looking through high power optics)</English>
@ -233,6 +251,7 @@
<French>Active une tracante pour les munitions de gros calibre (seulement visible en utilisant des optiques avancées)</French>
<Hungarian>Engedélyezi a nagy kaliberű lövedékek nyomának vizuális követését (csak nagy teljesítményű optikán keresztül látható)</Hungarian>
<Russian>Включает эффект следов пуль для больших калибров (видны только через мощную оптику)</Russian>
<Italian>Attiva un effetto tracciante per proiettili di alto calibro (visibile solamente quando si guarda attraverso un'ottica telescopica)</Italian>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulationInterval_DisplayName">
<English>Simulation Interval</English>
@ -244,6 +263,7 @@
<French>Intervalle de simulation</French>
<Hungarian>Szimuláció intervalluma</Hungarian>
<Russian>Интервал симуляции</Russian>
<Italian>Intervallo di simulazione</Italian>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulationInterval_Description">
<English>Defines the interval between every calculation step</English>
@ -255,6 +275,7 @@
<French>Défini un intervalle de calcul entre deux simulations</French>
<Hungarian>Meghatározza a számítási lépések közötti időintervallumot</Hungarian>
<Russian>Определяет временной интервал между вычислениями</Russian>
<Italian>Definisce l'intervallo di tempo tra ogni calcolo</Italian>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulationRadius_DisplayName">
<English>Simulation Radius</English>
@ -266,6 +287,7 @@
<French>Rayon de simulation</French>
<Hungarian>Szimuláció hatóköre</Hungarian>
<Russian>Радиус симуляции</Russian>
<Italian>Raggio della simulazione</Italian>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulationRadius_Description">
<English>Defines the radius around the player (in meters) at which advanced ballistics are applied to projectiles</English>
@ -277,9 +299,11 @@
<French>Défini le rayon autour du joueur (en mètres) d'application de la balistique avancée</French>
<Hungarian>Meghatározza a játékos körüli hatókört (méterben), ahol a lövedékek fejlett ballisztikát használnak</Hungarian>
<Russian>Определяет радиус вокруг игрока (в метрах), в котором продвинутая баллистика применяется к снарядам</Russian>
<Italian>Definisce il raggio intorno al giocatore (in metri) per il quale la balistica avanzata viene applicata ai proiettili</Italian>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_Description">
<English>This module enables advanced ballistics simulation - meaning the trajectory of projectiles is influenced by variables like air temperature, atmospheric pressure, humidity, gravity, the type of ammunition and the weapon from which it was fired.</English>
<German>Dieses Modul aktiviert die Erweiterte Ballisitk. Die Flugbahn eines Geschosses wird nun von Einflüssen wie z.B Temperatur, Luftdruck, Luftfeuchtigkeit, Schwerkraft, Geschossart sowie der Waffe aus dem es gefeuert wird, beeinflusst.</German>
<Polish>Moduł ten pozwala aktywować zaawansowaną balistykę biorącą przy obliczeniach trajektorii lotu pocisku pod uwagę takie rzeczy jak temperatura powietrza, ciśnienie atmosferyczne, wilgotność powietrza, siły Coriolisa i Eotvosa, grawitację a także broń z jakiej wykonywany jest strzał oraz rodzaj amunicji. Wszystko to sprowadza się na bardzo dokładne odwzorowanie balistyki.</Polish>
<Czech>Tento modul umožňuje aktivovat pokročilou balistiku, která vypočítává trajektorii kulky a bere do úvahy věci jako je teplota vzduchu, atmosférický tlak, vlhkost vzduchu, gravitaci, typ munice a zbraň, ze které je náboj vystřelen. To vše přispívá k velmi přesné balistice.</Czech>
<Portuguese>Este módulo permite que você ative cálculos de balística avançada, fazendo a trajetória do projétil levar em consideração coisas como temperatura do ar, pressão atmosférica, umidade, força de Coriolis, a gravidade, o modelo da arma no qual o disparo é realizado e o tipo de munição. Tudo isso acrescenta-se a um balística muito precisa.</Portuguese>
@ -287,6 +311,7 @@
<Hungarian>Ez a modul engedélyezi a fejlett ballisztikai szimulációt - a lövedékek röppályáját befolyásolni fogja a levegő hőmérséklete, légnyomás, páratartalom, gravitáció, a lövedék fajtája, valamint a fegyver, amiből kilőtték a lövedéket.</Hungarian>
<Russian>Этот модуль включает симуляцию продвинутой баллистики - при этом на траекторию полета снаряда влияют различные параметры, такие как температура воздуха, атмосферное давление, влажность, гравитация, тип боеприпаса и оружия, из которого произвели выстрел.</Russian>
<Spanish>Este módulo permite la simulación balística avanzada - es decir, la trayectoria de los proyectiles está influenciada por variables como la temperatura del aire, la presión atmosférica, la humedad, la gravedad, el tipo de municiones y el arma desde el que fue disparada.</Spanish>
<Italian>Questo modulo abilita la simulazione di balistica avanzata - significa che la traiettoria del proiettile viene infulenzata da variabili come la temperatura dell'aria, pressione atmosferica, umitidà, gravità, il tipo di munizioni e l'arma dalla quale vengono sparate.</Italian>
</Key>
</Package>
</Project>
</Project>

View File

@ -1602,6 +1602,7 @@
<French>[ACE] Caisse de munitions</French>
<Hungarian>[ACE] Lőszeres láda</Hungarian>
<Russian>[ACE] Ящик с боеприпасами</Russian>
<Italian>[ACE] Cassa munizioni</Italian>
</Key>
</Package>
</Project>

View File

@ -34,3 +34,10 @@ if (!hasInterface) exitWith {};
["isNotEscorting", {!(GETVAR(_this select 0,GVAR(isEscorting),false))}] call EFUNC(common,addCanInteractWithCondition);
["isNotHandcuffed", {!(GETVAR(_this select 0,GVAR(isHandcuffed),false))}] call EFUNC(common,addCanInteractWithCondition);
["isNotSurrendering", {!(GETVAR(_this select 0,GVAR(isSurrendering),false))}] call EFUNC(common,addCanInteractWithCondition);
["SettingsInitialized", {
// Hold on a little bit longer to ensure anims will work
[{
GVAR(captivityEnabled) = true;
}, [], 0.05] call EFUNC(common,waitAndExecute);
}] call EFUNC(common,addEventHandler);

View File

@ -32,4 +32,6 @@ PREP(setSurrendered);
PREP(vehicleCaptiveMoveIn);
PREP(vehicleCaptiveMoveOut);
GVAR(captivityEnabled) = false;
ADDON = true;

View File

@ -22,6 +22,18 @@ TRACE_2("params",_unit,_state);
if (!local _unit) exitWith {
ERROR("running setHandcuffed on remote unit");
};
if !(missionNamespace getVariable [QGVAR(captivityEnabled), false]) exitWith {
// It's to soon to call this function, delay it
if (EGVAR(common,settingsInitFinished)) then {
// Settings are already initialized, but the small wait isn't over
[DFUNC(setHandCuffed), _this, 0.05] call EFUNC(common,waitAndExecute);
} else {
// Settings are not initialized yet
[DFUNC(setHandCuffed), _this] call EFUNC(common,runAfterSettingsInit);
};
};
if ((_unit getVariable [QGVAR(isHandcuffed), false]) isEqualTo _state) exitWith {
ERROR("setHandcuffed: current state same as new");
};

View File

@ -23,6 +23,17 @@ if (!local _unit) exitWith {
ERROR("running surrender on remote unit");
};
if !(missionNamespace getVariable [QGVAR(captivityEnabled), false]) exitWith {
// It's to soon to call this function, delay it
if (EGVAR(common,settingsInitFinished)) then {
// Settings are already initialized, but the small wait isn't over
[DFUNC(setSurrendered), _this, 0.05] call EFUNC(common,waitAndExecute);
} else {
// Settings are not initialized yet
[DFUNC(setSurrendered), _this] call EFUNC(common,runAfterSettingsInit);
};
};
if ((_unit getVariable [QGVAR(isSurrendering), false]) isEqualTo _state) exitWith {
ERROR("Surrender: current state same as new");
};

View File

@ -167,6 +167,7 @@
<French>Faire capituler l'unité</French>
<Hungarian>Egység kapitulálása</Hungarian>
<Russian>Заставить юнита сдаться</Russian>
<Italian>Permette alle unità di arrendersi</Italian>
</Key>
<Key ID="STR_ACE_Captives_ModuleSurrender_Description">
<English>Sync a unit to make them surrender.&lt;br /&gt;Source: ace_captives</English>
@ -178,9 +179,11 @@
<French>Synchronise une unité pour la rendre captive. &lt;br/&gt;Source: ace_captives</French>
<Hungarian>Egység szinkronizálása, hogy kapituláljon.&lt;br /&gt;Forrás: ace_captives</Hungarian>
<Russian>Синхронизируйте с юнитами, чтобы заставить их сдаться в плен.&lt;br /&gt;Источник: ace_captives</Russian>
<Italian>Sincronizza una unità per farla arrendere.&lt;br/&gt;Fonte: ace_captives</Italian>
</Key>
<Key ID="STR_ACE_Captives_ModuleHandcuffed_DisplayName">
<English>Make Unit Handcuffed</English>
<German>Einheit in Handschellen legen</German>
<Polish>Skuj jednostkę</Polish>
<Portuguese>Fazer unidade algemada</Portuguese>
<Russian>Связать юнита</Russian>
@ -188,6 +191,7 @@
</Key>
<Key ID="STR_ACE_Captives_ModuleHandcuffed_Description">
<English>Sync a unit to make them handcuffed.&lt;br /&gt;Source: ace_captives</English>
<German>Synchronisiere eine Einheit um sie in Handschellen zu legen.&lt;br /&gt;Quelle: ace_captives</German>
<Polish>Zsynchronizuj z jednostką, aby została skuta.&lt;br /&gt;Źródło: ace_captives</Polish>
<Portuguese>Sincronizar uma unidade para deixá-la algemada.&lt;br/&gt;Source: ace_captives</Portuguese>
<Russian>Синхронизируйте с юнитами, чтобы сделать их связанными.&lt;br /&gt;Источник: ace_captives</Russian>
@ -203,6 +207,7 @@
<French>Options de capitulation</French>
<Hungarian>Fogoly-beállítások</Hungarian>
<Russian>Настройки пленения</Russian>
<Italian>Impostazioni prigioneri</Italian>
</Key>
<Key ID="STR_ACE_Captives_ModuleSettings_Description">
<English>Controls settings for surrender and cable ties</English>
@ -214,6 +219,7 @@
<French>Contrôle les paramètres de la rédition et des Serflex</French>
<Hungarian>Szabályozza a kapituláció és bilincselés beállításait</Hungarian>
<Russian>Управляет настройками сдачи в плен и связывания</Russian>
<Italian>Regola i parametri per la resa e le fascette</Italian>
</Key>
<Key ID="STR_ACE_Captives_ModuleSettings_handcuffSide_name">
<English>Can handcuff own side</English>
@ -225,6 +231,7 @@
<French>Peut libérer sa propre faction</French>
<Hungarian>Saját oldal megbilincselhető</Hungarian>
<Russian>Связать союзника</Russian>
<Italian>Si possono arrestare i compagni</Italian>
</Key>
<Key ID="STR_ACE_Captives_ModuleSettings_handcuffSide_description">
<English>Can players cabletie units on their own side</English>
@ -236,6 +243,7 @@
<French>Les joueurs peuvent utiliser les Serflex sur leur propre camp</French>
<Hungarian>A játékosok megkötözhetik-e a saját oldalukon lévő egységeket</Hungarian>
<Russian>Разрешить игрокам связывать юнитов своей стороны</Russian>
<Italian>I giocatori posso arrestare le unità della propria fazione</Italian>
</Key>
<Key ID="STR_ACE_Captives_ModuleSettings_allowSurrender_name">
<English>Allow surrendering</English>
@ -247,6 +255,7 @@
<French>Permettre la capitulation</French>
<Hungarian>Kapituláció engedélyezése</Hungarian>
<Russian>Сдаться в плен</Russian>
<Italian>Permetti la resa</Italian>
</Key>
<Key ID="STR_ACE_Captives_ModuleSettings_allowSurrender_description">
<English>Players can surrender after holstering their weapon</English>
@ -258,6 +267,7 @@
<French>Les joueurs peuvent se rendre après avoir rangé leur arme</French>
<Hungarian>A játékosok megadhatják magukat a fegyverük elrakása után</Hungarian>
<Russian>Игроки могут сдаться в плен после того, как уберут оружие</Russian>
<Italian>I giocatori possono arrendersi dopo aver messo l'arma nella fondina</Italian>
</Key>
<Key ID="STR_ACE_Captives_ModuleSettings_requireSurrender_name">
<English>Require surrendering</English>
@ -267,6 +277,7 @@
<Russian>Требовать пленения</Russian>
<Spanish>Requiere rendición</Spanish>
<Czech>Vzdávání vyžadováno</Czech>
<Italian>Richiede arrendersi</Italian>
</Key>
<Key ID="STR_ACE_Captives_ModuleSettings_requireSurrender_description">
<English>Require Players to surrender before they can be arrested</English>
@ -276,6 +287,7 @@
<Russian>Требуется, чтобы игрок сдался в плен прежде, чем его можно будет связать</Russian>
<Spanish>Requiere que los Jugadores se rindan antes de arrestarlos</Spanish>
<Czech>Vyžaduje, aby se hráč nejdříve vzdal, poté může být spoután</Czech>
<Italian>I giocatori devono arrendersi prima che possano essere arrestati</Italian>
</Key>
<Key ID="STR_ACE_Captives_SurrenderOnly">
<English>Surrendering only</English>
@ -285,6 +297,7 @@
<Russian>Только сдавшийся в плен</Russian>
<Spanish>Solo rendición</Spanish>
<Czech>Pouze vzdávání</Czech>
<Italian>Solo arrendersi</Italian>
</Key>
<Key ID="STR_ACE_Captives_SurrenderOrNoWeapon">
<English>Surrendering or No weapon</English>
@ -294,6 +307,7 @@
<Russian>Сдавшийся или безоружный</Russian>
<Spanish>Rendición o desarme</Spanish>
<Czech>Vzdávání nebo beze zbraně</Czech>
<Italian>Arrendersi o no armi</Italian>
</Key>
</Package>
</Project>
</Project>

View File

@ -95,4 +95,9 @@ class Extended_InitPost_EventHandlers {
init = QUOTE(_this call DFUNC(initObject));
};
};
class Land_PortableLight_single_F {
class ADDON {
init = QUOTE(_this call DFUNC(initObject));
};
};
};

View File

@ -45,7 +45,7 @@ class CfgVehicles {
description = CSTRING(MakeLoadable_description);
typeName = "BOOL";
defaultValue = 1;
};
};
class setSize {
displayName = CSTRING(makeLoadable_setSize_displayName);
typeName = "NUMBER";
@ -268,6 +268,13 @@ class CfgVehicles {
GVAR(size) = 6;
};
class Slingload_base_F: ReammoBox_F {};
class CargoNet_01_base_F: Slingload_base_F { //Slingload pallets
GVAR(size) = 6;
};
class Slingload_01_Base_F: Slingload_base_F { //Huron 20ft containers
GVAR(canLoad) = 0;
};
// objects
class RoadCone_F: ThingX {
GVAR(size) = 1;
@ -485,4 +492,10 @@ class CfgVehicles {
};
};
};
class Lamps_base_F;
class Land_PortableLight_single_F: Lamps_base_F {
GVAR(size) = 1;
GVAR(canLoad) = 1;
};
};

View File

@ -9,6 +9,7 @@
<Russian>Загрузить</Russian>
<Czech>Naložit</Czech>
<Spanish>Cargar</Spanish>
<Italian>Carica</Italian>
</Key>
<Key ID="STR_ACE_Cargo_unloadObject">
<English>Unload</English>
@ -18,6 +19,7 @@
<Russian>Выгрузить</Russian>
<Czech>Vyložit</Czech>
<Spanish>Descargar</Spanish>
<Italian>Scarica</Italian>
</Key>
<Key ID="STR_ACE_Cargo_openMenu">
<English>Cargo</English>
@ -27,6 +29,7 @@
<Russian>Грузовой отсек</Russian>
<Czech>Náklad</Czech>
<Spanish>Carga</Spanish>
<Italian>Carico</Italian>
</Key>
<Key ID="STR_ACE_Cargo_cargoMenu">
<English>Cargo Menu</English>
@ -36,6 +39,7 @@
<Russian>Грузовой отсек</Russian>
<Czech>Menu nákladu</Czech>
<Spanish>Menu de carga</Spanish>
<Italian>Menu carico</Italian>
</Key>
<Key ID="STR_ACE_Cargo_labelSpace">
<English>Cargo space left: %1</English>
@ -45,6 +49,7 @@
<Russian>Осталось мест: %1</Russian>
<Czech>Zbývající prostor: %1</Czech>
<Spanish>Espacio de carga restante: %1</Spanish>
<Italian>Carico rimasto:%1</Italian>
</Key>
<Key ID="STR_ACE_Cargo_ModuleSettings_enable">
<English>Enable Cargo</English>
@ -54,6 +59,7 @@
<Russian>Включить модуль перевозки грузов</Russian>
<Czech>Povolit náklad</Czech>
<Spanish>Habilitar carga</Spanish>
<Italian>Abilita carico</Italian>
</Key>
<Key ID="STR_ACE_Cargo_ModuleSettings_enable_Description">
<English>Enable the load in cargo module</English>
@ -63,6 +69,7 @@
<Russian>Включает модуль погрузки и перевозки грузов</Russian>
<Spanish>Habilitar la carga en el módulo de carga</Spanish>
<Czech>Umožňuje naložit předměty do nákladového prostoru vozidla</Czech>
<Italian>Attiva il modulo per caricare</Italian>
</Key>
<Key ID="STR_ACE_Cargo_SettingsModule_DisplayName">
<English>Cargo Settings</English>
@ -72,6 +79,7 @@
<Russian>Перевозка грузов</Russian>
<Czech>Nastavení nákladu</Czech>
<Spanish>Ajustes de carga</Spanish>
<Italian>Impostazioni cargo</Italian>
</Key>
<Key ID="STR_ACE_Cargo_SettingsModule_Description">
<English>Configure the cargo module settings</English>
@ -81,6 +89,7 @@
<Russian>Конфигурирует настройки модуля перевозки грузов</Russian>
<Spanish>Configure los ajustes del módulo de carga</Spanish>
<Czech>Konfigurace nákladního modulu</Czech>
<Italian>Configura le impostazioni del module per il carico</Italian>
</Key>
<Key ID="STR_ACE_Cargo_LoadedItem">
<English>%1&lt;br/&gt;loaded into&lt;br/&gt;%2</English>
@ -108,6 +117,7 @@
</Key>
<Key ID="STR_ACE_Cargo_LoadingItem">
<English>Loading Cargo</English>
<German>Belade</German>
<Portuguese>Carregando carga</Portuguese>
<Polish>Ładowanie cargo</Polish>
<Czech>Nakládám</Czech>
@ -115,6 +125,7 @@
</Key>
<Key ID="STR_ACE_Cargo_UnloadingItem">
<English>Unloading Cargo</English>
<German>Entlade</German>
<Portuguese>Descarregando carga</Portuguese>
<Polish>Rozładowywanie cargo</Polish>
<Czech>Vykládám</Czech>
@ -122,6 +133,7 @@
</Key>
<Key ID="STR_ACE_Cargo_LoadingFailed">
<English>%1&lt;br/&gt;could not be loaded</English>
<German>%1&lt;br/&gt;konnte nicht eingeladen werden</German>
<Portuguese>%1&lt;br/&gt;não pode ser carregado</Portuguese>
<Polish>%1&lt;br/&gt;nie mógł zostać załadowany</Polish>
<Czech>%1&lt;br/&gt;nemůže být naloženo</Czech>
@ -129,6 +141,7 @@
</Key>
<Key ID="STR_ACE_Cargo_UnloadingFailed">
<English>%1&lt;br/&gt;could not be unloaded</English>
<German>%1&lt;br/&gt;konnte nicht entladen werden</German>
<Portuguese>%1&lt;br/&gt;não pode ser descarregado</Portuguese>
<Polish>%1&lt;br/&gt;nie mógł zostać rozładowany</Polish>
<Czech>%1&lt;br/&gt;nemůže být vyloženo</Czech>
@ -136,12 +149,17 @@
</Key>
<Key ID="STR_ACE_Cargo_makeLoadable_displayName">
<English>Make Object Loadable</English>
<German>Füge Objekt zum Frachtsystem hinzu</German>
<Polish>Ustaw jako ładowalny</Polish>
</Key>
<Key ID="STR_ACE_Cargo_makeLoadable_description">
<English>Sets the synced object as loadable by the cargo system.</English>
<German>Das synchronisierte Objekt wird dem Frachtsystem hinzugefügt und ist be- und entladbar.</German>
<Polish>Ustawia zsynchronizowany obiekt jako możliwy do załadowania poprzez system cargo</Polish>
</Key>
<Key ID="STR_ACE_Cargo_makeLoadable_setSize_displayName">
<English>Object's Size</English>
<Polish>Rozmiar obiektu</Polish>
</Key>
</Package>
</Project>
</Project>

11
addons/common/CfgEden.hpp Normal file
View File

@ -0,0 +1,11 @@
class Cfg3DEN {
class Object {
class AttributeCategories {
class ace_attributes {
displayName = CSTRING(Options);
collapsed = 1;
class Attributes {};
};
};
};
};

View File

@ -251,7 +251,7 @@ call FUNC(checkFiles);
// Publish all settings data after all configs and modules are read
publicVariable QGVAR(settings);
};
// Load user settings from profile
if (hasInterface) then {
call FUNC(loadSettingsFromProfile);
@ -476,6 +476,8 @@ if (!isNil QGVAR(PreInit_playerChanged_PFHID)) then {
};
}] call FUNC(addEventhandler);
["useItem", DFUNC(useItem)] call FUNC(addEventHandler);
//////////////////////////////////////////////////
// Add various canInteractWith conditions

View File

@ -21,7 +21,6 @@ PREP(changeProjectileDirection);
PREP(checkFiles);
PREP(checkPBOs);
PREP(claim);
PREP(codeToLetter);
PREP(codeToString);
PREP(createOrthonormalReference);
PREP(currentChannel);
@ -102,12 +101,9 @@ PREP(hasItem);
PREP(hasMagazine);
PREP(headBugFix);
PREP(hideUnit);
PREP(inheritsFrom);
PREP(insertionSort);
PREP(interpolateFromArray);
PREP(inTransitionAnim);
PREP(inWater);
PREP(isAlive);
PREP(isAutoWind);
PREP(isAwake);
PREP(isEngineer);
@ -116,9 +112,7 @@ PREP(isFeatureCameraActive);
PREP(isInBuilding);
PREP(isModLoaded);
PREP(isPlayer);
PREP(isTurnedOut);
PREP(isUnderwater);
PREP(letterToCode);
PREP(lightIntensityFromObject);
PREP(loadPerson);
PREP(loadPersonLocal);
@ -170,7 +164,6 @@ PREP(setSettingFromConfig);
PREP(setVariableJIP);
PREP(setVariablePublic);
PREP(setVolume);
PREP(sortAlphabeticallyBy);
PREP(showHud);
PREP(statusEffect_addType);
PREP(statusEffect_get);
@ -190,7 +183,6 @@ PREP(toHex);
PREP(toNumber);
PREP(unhideUnit);
PREP(uniqueElements);
PREP(uniqueElementsOnly);
PREP(unloadPerson);
PREP(unloadPersonLocal);
PREP(unmuteUnit);
@ -217,8 +209,6 @@ PREP(getWeaponMuzzles);
PREP(getConfigTypeObject);
PREP(getConfigGunner);
PREP(getConfigCommander);
PREP(getHitPoints);
PREP(getHitPointsWithSelections);
PREP(getSelectionsWithoutHitPoints);
PREP(getReflectorsWithSelections);
PREP(getLightProperties);

View File

@ -24,6 +24,7 @@ class CfgPatches {
#include "CfgMoves.hpp"
#include "CfgVoice.hpp"
#include "CfgUnitInsignia.hpp"
#include "CfgEden.hpp"
class ACE_Rsc_Display_Base {
idd = -1;
@ -79,7 +80,7 @@ class CfgUIGrids {
displayName = "ACE Hint";
description = "Textual in game feedback to the player.";
preview = "\a3\Ui_f\data\GUI\Cfg\UIGrids\grid_hint_ca.paa";
saveToProfile[] = {0,1};
saveToProfile[] = {0,1};
};
};
};

View File

@ -1,19 +0,0 @@
/*
* Author: commy2
* Converts some keys to an Arma Dik Code.
*
* Arguments:
* 0: Key <STRING>
*
* Return Value:
* Dik Code <NUMBER>
*
* Public: Yes
*
* Deprecated
*/
#include "script_component.hpp"
ACE_DEPRECATED("ace_common_fnc_codeToLetter","3.5.0","-");
["", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"] select ([2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 30, 48, 46, 32, 18, 33, 34, 35, 23, 36, 37, 38, 50, 49, 24, 25, 16, 19, 31, 20, 22, 47, 17, 45, 44, 21] find (_this select 0)) + 1

View File

@ -17,6 +17,8 @@
*/
#include "script_component.hpp"
ACE_DEPRECATED("ace_common_fnc_execPersistentFnc","3.7.0","ace_common_fnc_globalEvent");
GVAR(remoteFnc) = _this;
params ["_arguments", "_function", "_unit", "_name"];

View File

@ -20,6 +20,8 @@
*/
#include "script_component.hpp"
ACE_DEPRECATED("ace_common_fnc_execRemoteFnc","3.7.0","ace_common_fnc_globalEvent");
GVAR(remoteFnc) = _this;
params ["_arguments", "_function", ["_unit", 2]];

View File

@ -1,28 +0,0 @@
/*
* Author: commy2
* Returns all hitpoints and their selections of any vehicle. Might contain duplicates if the turrets contain non unique hitpoints with different selection names.
*
* Arguments:
* 0: Vehicle <OBJECT>
*
* Return Value:
* Hitpoints <ARRAY>
*
* Public: Yes
*
* Deprecated
*/
#include "script_component.hpp"
ACE_DEPRECATED("ace_common_fnc_getHitPoints","3.5.0","getAllHitPointsDamage");
params ["_vehicle"];
private _hitPointsWithSelections = getAllHitPointsDamage _vehicle;
// get correct format on vehicles without any hitpoints
if (_hitPointsWithSelections isEqualTo []) then {
_hitPointsWithSelections = [[],[],[]];
};
(_hitPointsWithSelections select 0) - [""]

View File

@ -1,31 +0,0 @@
/*
* Author: commy2
* Returns all hitpoints and their respective selections of any vehicle. Might contain duplicates for non unique hitpoints in turrets.
*
* Arguments:
* 0: Vehicle <OBJECT>
*
* Return Value:
* 0: Hitpoints <ARRAY>
* 1: Selections <ARRAY>
*
* Public: Yes
*
* Deprecated
*/
#include "script_component.hpp"
ACE_DEPRECATED("ace_common_fnc_getHitPointsWithSelections","3.5.0","getAllHitPointsDamage");
params ["_vehicle"];
private _hitPointsWithSelections = getAllHitPointsDamage _vehicle;
// get correct format on vehicles without any hitpoints
if (_hitPointsWithSelections isEqualTo []) then {
_hitPointsWithSelections = [[],[],[]];
};
_hitPointsWithSelections resize 2;
_hitPointsWithSelections

View File

@ -1,19 +0,0 @@
/*
* Author: Glowbal
* Check if unit's head is underwater
*
* Arguments:
* 0: Unit <OBJECT>
*
* Return Value:
* If unit's head is underwater <BOOL>
*
* Public: Yes
*
* Deprecated
*/
#include "script_component.hpp"
ACE_DEPRECATED("ace_common_fnc_inWater","3.5.0","ace_common_fnc_isUnderwater");
_this call FUNC(isUnderwater)

View File

@ -1,37 +0,0 @@
/*
* Author: Ruthberg
* Checks whether a given configuration name appears in the inheritance tree of a specific configuration entry.
*
* Arguments:
* 0: configEntry (CONFIG)
* 1: configname (STING)
*
* Return Value:
* BOOLEAN
*
* Public: Yes
*
* Note: Not to be confused with the inheritsFrom scripting command.
*
* Deprecated
*/
#include "script_component.hpp"
ACE_DEPRECATED("ace_common_fnc_inheritsFrom","3.5.0","inheritsFrom ARRAY");
params ["_configEntry", "_configMatch"];
if (configName _configEntry == _configMatch) exitWith {true};
if (configName _configEntry == ",") exitWith {false};
private _match = false;
while {configName _configEntry != ""} do {
if (configName _configEntry == _configMatch) exitWith {
_match = true;
};
_configEntry = inheritsFrom _configEntry;
};
_match

View File

@ -1,21 +0,0 @@
/*
* Author: commy2
* Check if the object still exists and is alive. This function exists because 'alive objNull' actually returns true.
*
* Argument:
* 0: Any object <OBJECT>
*
* Return value:
* The object exists and is alive <BOOL>.
*
* Public: Yes
*
* Deprecated
*/
#include "script_component.hpp"
ACE_DEPRECATED("ace_common_fnc_isAlive","3.5.0","alive");
params ["_unit"];
!isNull _unit && {alive _unit} // return

View File

@ -1,21 +0,0 @@
/*
* Author: commy2
* Check if the unit is in a vehicle and turned out.
*
* Arguments:
* 0: Unit, not the vehicle <OBJECT>
*
* Return Value:
* Is the unit turned out or not? Will return false if there is no option to turn out in the first place. <BOOL>
*
* Public: Yes
*
* Deprecated
*/
#include "script_component.hpp"
ACE_DEPRECATED("ace_common_fnc_isTurnedOut","3.5.0","isTurnedOut");
params ["_unit"];
isTurnedOut _unit // return

View File

@ -1,19 +0,0 @@
/*
* Author: commy2
* Converts some Arma Dik Codes to a key.
*
* Arguments:
* 0: Dik Code <NUMBER>
*
* Return Value:
* Key <STRING>
*
* Public: Yes
*
* Deprecated
*/
#include "script_component.hpp"
ACE_DEPRECATED("ace_common_fnc_letterToCode","3.5.0","-");
[-1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 30, 48, 46, 32, 18, 33, 34, 35, 23, 36, 37, 38, 50, 49, 24, 25, 16, 19, 31, 20, 22, 47, 17, 45, 44, 21] select (["1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"] find toUpper (_this select 0)) + 1

View File

@ -1,49 +0,0 @@
/*
* Author: Glowbal
* ?
*
* Arguments:
* ?
*
* Return Value:
* ?
*
* Public: Yes
*
* Deprecated
*/
#include "script_component.hpp"
ACE_DEPRECATED("ace_common_fnc_sortAlphabeticallyBy","3.5.0","sort");
params ["_array", "_elementN"];
private _indices = [];
private _elements = [];
{
private _theElement = toArray (_x select _elementN);
_indices pushBack _forEachIndex;
_elements pushBack _theElement;
} forEach _array;
for "_i" from 1 to (count _elements) - 1 do {
private _tmp = _elements select _i;
private _tempIndex = _indices select _i;
_j = _i;
while {_j >= 1 && {_tmp < _elements select (_j - 1)}} do {
_elements set [_j, _elements select (_j - 1)];
_indices set [_j, _indices select (_j - 1)];
_j = _j - 1;
};
_elements set[_j, _tmp];
_indices set [_j, _tempIndex];
};
private _returnArray = [];
{
_returnArray pushBack (_array select _x);
} forEach _indices;
_returnArray

View File

@ -1,19 +0,0 @@
/*
* Author: Glowbal
* Make a copy of an array with only the unique elements.
*
* Arguments:
* 0: array <ARRAY>
*
* Return Value:
* Copy of original array <ARRAY>
*
* Public: Yes
*
* Deprecated
*/
#include "script_component.hpp"
ACE_DEPRECATED("ace_common_fnc_uniqueElementsOnly","3.5.0","ace_common_fnc_uniqueElements");
_this call FUNC(uniqueElements)

View File

@ -480,6 +480,7 @@
<French>Vérifier les PBOs</French>
<Hungarian>PBO-k ellenőrzése</Hungarian>
<Russian>Проверка аддонов</Russian>
<Italian>Verifica i PBO</Italian>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Description">
<English>Check addon integrity with server and do selected action if an addon is missing.</English>
@ -490,6 +491,7 @@
<Portuguese>Este módulo verifica a integridade dos addons quando iniciamos a simulação</Portuguese>
<Russian>Выполняет проверку версий аддонов ACE у подключаемых игроков</Russian>
<French>Ce module contrôle si les PBOs de chaque joueur sont corrects</French>
<Italian>Verifica l'integrità dei singoli file nei mod</Italian>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Action_DisplayName">
<English>Action</English>
@ -501,6 +503,7 @@
<French>Action</French>
<Hungarian>Cselekvés</Hungarian>
<Russian>Действие</Russian>
<Italian>Azione</Italian>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Action_Description">
<English>What to do with people who do not have the right PBOs?</English>
@ -512,6 +515,7 @@
<French>Que faire avec les personnes n'ayant pas les bon PBOs</French>
<Hungarian>Mi legyen azokkal a személyekkel, akiknek nincsenek meg a helyes PBO-k?</Hungarian>
<Russian>Что делать с игроками с неправильными аддонами?</Russian>
<Italian>Cosa fare quando i giocatori non hanno i PBO verificati?</Italian>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Action_WarnOnce">
<English>Warn once</English>
@ -523,6 +527,7 @@
<French>Avertir une fois</French>
<Hungarian>Egyszeri figyelmeztetés</Hungarian>
<Russian>Предупредить один раз</Russian>
<Italian>Avvisa una volta</Italian>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Action_WarnPerm">
<English>Warn (permanent)</English>
@ -534,6 +539,7 @@
<French>Avertir (permanent)</French>
<Hungarian>Figyelmeztetés (tartós)</Hungarian>
<Russian>Предупреждать (постоянно)</Russian>
<Italian>Mostra un avviso permanente</Italian>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Action_Kick">
<English>Kick</English>
@ -545,6 +551,7 @@
<French>Ejecter</French>
<Hungarian>Kirúgás</Hungarian>
<Russian>Кикнуть</Russian>
<Italian>Espelli</Italian>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_CheckAll_DisplayName">
<English>Check all addons</English>
@ -556,6 +563,7 @@
<French>Vérifier tous les addons</French>
<Hungarian>Összes bővítmény ellenőrzése</Hungarian>
<Russian>Проверять все аддоны</Russian>
<Italian>Controlla tutti i mod</Italian>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_CheckAll_Description">
<English>Check all addons instead of only those of ACE?</English>
@ -567,6 +575,7 @@
<French>Vérifie tous les addons, même ceux qui ne sont pas liés à ACE</French>
<Hungarian>Az összes bővítmény ellenőrzése, csak az ACE helyett?</Hungarian>
<Russian>Проверять все аддоны, а не только ACE?</Russian>
<Italian>Verifica tutti i mod oppure solamente ACE?</Italian>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Whitelist_DisplayName">
<English>Whitelist</English>
@ -578,6 +587,7 @@
<French>Liste blanche</French>
<Hungarian>Fehérlista</Hungarian>
<Russian>Вайтлист доп. аддонов</Russian>
<Italian>Whitelist</Italian>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Whitelist_Description">
<English>What addons are allowed regardless?</English>
@ -589,6 +599,7 @@
<French>Quels addons sont tolérés</French>
<Hungarian>Milyen bővítmények vannak feltétlenül engedélyezve?</Hungarian>
<Russian>Какие аддоны дополнительно разрешены?</Russian>
<Italian>Quali mod sono comunque permessi?</Italian>
</Key>
<Key ID="STR_ACE_Common_LSDVehicles_DisplayName">
<English>LSD Vehicles</English>
@ -600,6 +611,7 @@
<French>LSD - Véhicules</French>
<Hungarian>LSD járművek</Hungarian>
<Russian>Транспорт под LSD</Russian>
<Italian>Veicoli LSD</Italian>
</Key>
<Key ID="STR_ACE_Common_LSDVehicles_Description">
<English>Adds LSD effect to synchronized vehicle</English>
@ -611,6 +623,7 @@
<French>Ajoute l'effet LSD aux véhicules synchronisés</French>
<Hungarian>LSD-effekt hozzáadása a szinkronizált járművekhez</Hungarian>
<Russian>Добавляет эффект LSD (мигание всеми цветами радуги) синхронизированным транспортным средствам</Russian>
<Italian>Agguinge effetto LSD ai veicoli sincronizzati</Italian>
</Key>
<Key ID="STR_ACE_Common_toggleHandheldDevice">
<English>Toggle Handheld Device</English>
@ -622,6 +635,7 @@
<French>Allumer l'ordinateur de poche</French>
<Hungarian>Kézi eszköz kapcsolása</Hungarian>
<Russian>Включить портативное устройство</Russian>
<Italian>Seleziona il palmare</Italian>
</Key>
<Key ID="STR_ACE_Common_closeHandheldDevice">
<English>Close Handheld Device</English>
@ -633,6 +647,7 @@
<French>Fermer l'ordinateur de poche</French>
<Hungarian>Kézi eszköz bezárása</Hungarian>
<Russian>Закрыть портативное устройство</Russian>
<Italian>Chiudi il palmare</Italian>
</Key>
<Key ID="STR_ACE_Common_cycleHandheldDevices">
<English>Cycle Handheld Devices</English>
@ -644,6 +659,7 @@
<French>Changer (cycle) d'ordinateur de poche</French>
<Hungarian>Kézi eszköz váltása</Hungarian>
<Russian>Следующее портативное устройство</Russian>
<Italian>Cambia il palmare</Italian>
</Key>
<Key ID="STR_ACE_Common_Disabled">
<English>Disabled</English>
@ -699,6 +715,7 @@
<Russian>Только в транспорте</Russian>
<Czech>Pouze vozidla</Czech>
<Spanish>Solo vehículos</Spanish>
<Italian>Solo veicoli</Italian>
</Key>
<Key ID="STR_ACE_Common_DoNotForce">
<English>Do Not Force</English>
@ -708,6 +725,7 @@
<Czech>Nevynucovat</Czech>
<Portuguese>Não forçar</Portuguese>
<Russian>Не обязывать</Russian>
<Italian>Non forzare</Italian>
</Key>
<Key ID="STR_ACE_Common_ACEKeybindCategoryEquipment">
<English>ACE3 Equipment</English>
@ -716,6 +734,7 @@
<Russian>ACE3 Снаряжение</Russian>
<Czech>ACE3 Vybavení</Czech>
<Spanish>ACE3 Equipo</Spanish>
<Italian>ACE3 Equipaggiamento</Italian>
</Key>
<Key ID="STR_ACE_Common_ACEKeybindCategoryCommon">
<English>ACE3 Common</English>
@ -725,6 +744,7 @@
<Russian>ACE3 Общие</Russian>
<Spanish>ACE3 Común</Spanish>
<Czech>ACE3 Obecné</Czech>
<Italian>ACE3 Generico</Italian>
</Key>
<Key ID="STR_ACE_Common_ACEKeybindCategoryWeapons">
<English>ACE3 Weapons</English>
@ -734,6 +754,7 @@
<Russian>ACE3 Оружие</Russian>
<Czech>ACE3 Zbraně</Czech>
<Spanish>ACE3 Armas</Spanish>
<Italian>ACE3 Armi</Italian>
</Key>
<Key ID="STR_ACE_Common_ACEKeybindCategoryMovement">
<English>ACE3 Movement</English>
@ -743,6 +764,7 @@
<Russian>ACE3 Перемещение</Russian>
<Spanish>ACE3 Movimiento</Spanish>
<Czech>ACE3 Pohyb</Czech>
<Italian>ACE3 Movimento</Italian>
</Key>
<Key ID="STR_ACE_Common_ACEKeybindCategoryScopeAdjustment">
<English>ACE3 Scope Adjustment</English>
@ -752,6 +774,7 @@
<Russian>ACE3 Прицелы</Russian>
<Czech>ACE3 Nastavení optiky</Czech>
<Spanish>ACE3 Ajuste de miras</Spanish>
<Italian>ACE3 Aggiustamento Mirino</Italian>
</Key>
<Key ID="STR_ACE_Common_ACEKeybindCategoryVehicles">
<English>ACE3 Vehicles</English>
@ -761,9 +784,12 @@
<Russian>ACE3 Транспорт</Russian>
<Czech>ACE3 Vozidla</Czech>
<Spanish>ACE3 Vehículos</Spanish>
<Italian>ACE3 Veicoli</Italian>
</Key>
<Key ID="STR_ACE_Common_NoRoomToUnload">
<English>No Room to unload</English>
<German>Kein Platz zum Entladen</German>
<Polish>Brak miejsca na rozładunek</Polish>
</Key>
</Package>
</Project>
</Project>

View File

@ -9,7 +9,7 @@
<Spanish>Alambre de espino</Spanish>
<French>Fill barbelé</French>
<Czech>Ostnatý drát</Czech>
<Italian>Concertina wire</Italian>
<Italian>Filo spinato di concertina</Italian>
<Hungarian>Concertina wire</Hungarian>
<Portuguese>Arame farpado</Portuguese>
</Key>
@ -21,7 +21,7 @@
<Spanish>Bobina de alambre de espino</Spanish>
<French>Bobine de fil barbelé</French>
<Czech>Svitek ostnatého drátu</Czech>
<Italian>Concertina wire coil</Italian>
<Italian>Bobina di concertina</Italian>
<Hungarian>Concertina wire coil</Hungarian>
<Portuguese>Bobina de arame farpado</Portuguese>
</Key>
@ -33,7 +33,7 @@
<Spanish>Desmontar alambre de espino</Spanish>
<French>Descendre le fil barbelé</French>
<Czech>Svinout ostnatý drát</Czech>
<Italian>Dismount Concertina wire</Italian>
<Italian>Smonta la concertina</Italian>
<Hungarian>Dismount Concertina wire</Hungarian>
<Portuguese>Desmontar arame farpado</Portuguese>
</Key>
@ -45,7 +45,7 @@
<Spanish>Desplegar alambre de espino</Spanish>
<French>Mettre en place le fil barbelé</French>
<Czech>Rozvinout ostnatý drát</Czech>
<Italian>Deploy Concertina wire</Italian>
<Italian>Posa il filo di concertina</Italian>
<Hungarian>Deploy Concertina wire</Hungarian>
<Portuguese>Colocar arame farpado</Portuguese>
</Key>

View File

@ -9,6 +9,7 @@
<Russian>DAGR</Russian>
<Portuguese>DAGR</Portuguese>
<Czech>DAGR</Czech>
<Italian>DAGR</Italian>
</Key>
<Key ID="STR_ACE_DAGR_ConfigureDAGR">
<English>Configure DAGR</English>
@ -18,6 +19,7 @@
<Russian>Настроить DAGR</Russian>
<Portuguese>Configurar DAGR</Portuguese>
<Czech>Konfigurovat DAGR</Czech>
<Italian>Configura il DAGR</Italian>
</Key>
<Key ID="STR_ACE_DAGR_ToggleDAGR">
<English>Toggle DAGR</English>
@ -27,6 +29,7 @@
<Russian>Вкл./выкл. DAGR</Russian>
<Portuguese>Mostrar DAGR</Portuguese>
<Czech>Přepnout DAGR</Czech>
<Italian>Mostra il DAGR</Italian>
</Key>
<Key ID="STR_ACE_DAGR_Description">
<English>Defense Advanced GPS Receiver</English>
@ -36,6 +39,7 @@
<Russian>Военный многофункциональный GPS-приёмник</Russian>
<Portuguese>Defense Advanced GPS Receiver</Portuguese>
<Czech>Defense Advanced GPS Receiver</Czech>
<Italian>Defense Advanced GPS Receiver</Italian>
</Key>
</Package>
</Project>
</Project>

View File

@ -27,6 +27,11 @@ class Extended_Init_EventHandlers {
init = QUOTE(_this call DFUNC(initObject));
};
};
class Land_PortableLight_single_F {
class ADDON {
init = QUOTE(_this call DFUNC(initObject));
};
};
};
class Extended_Killed_EventHandlers {

View File

@ -112,4 +112,15 @@ class CfgVehicles {
GVAR(carryPosition[]) = {0,1,1};
GVAR(carryDirection) = 0;
};
class Lamps_base_F;
class Land_PortableLight_single_F: Lamps_base_F {
GVAR(canCarry) = 1;
GVAR(carryPosition[]) = {0,1.2,0};
GVAR(carryDirection) = 180;
GVAR(canDrag) = 1;
GVAR(dragPosition[]) = {0,1.2,0};
GVAR(dragDirection) = 180;
};
};

View File

@ -56,6 +56,7 @@
<Portuguese>Levantar/Abaixar</Portuguese>
<Russian>Поднять/Опустить</Russian>
<Czech>Zvýšit/Snížit</Czech>
<Italian>Solleva/Abbassa</Italian>
</Key>
</Package>
</Project>

View File

@ -51,22 +51,103 @@ _explosivesList = [];
};
};
} forEach _result;
// Add action to detonate all explosives tied to the detonator
if (count _explosivesList > 0) then {
_children pushBack [
if (_detonator != "ACE_DeadManSwitch") then {
// Add action to detonate all explosives tied to the detonator
if (count _explosivesList > 0) then {
_children pushBack [
[
"Explosive_All",
localize LSTRING(DetonateAll),
localize LSTRING(DetonateAll),
getText(ConfigFile >> "CfgWeapons" >> _detonator >> "picture"),
{(_this select 2) call FUNC(detonateExplosiveAll);},
{true},
{},
[_unit,_range,_explosivesList]
] call EFUNC(interact_menu,createAction),
[],
_unit
] call EFUNC(interact_menu,createAction),
[],
_unit
];
};
} else {
//Add action to detonate all explosives (including the inventory explosive):
_children pushBack [
[
"Explosive_All_Deadman",
localize LSTRING(DetonateAll),
getText(ConfigFile >> "CfgWeapons" >> _detonator >> "picture"),
{[_player] call FUNC(onIncapacitated)},
{true}
] call EFUNC(interact_menu,createAction),
[],
_unit
];
//Adds actions for the explosives you can connect to the deadman switch.
private _connectedInventoryExplosive = _unit getVariable [QGVAR(deadmanInvExplosive), ""];
if ((_connectedInventoryExplosive != "") && {!(_connectedInventoryExplosive in (magazines _unit))}) then {
TRACE_1("set, but missing in inventory",_connectedInventoryExplosive);
_unit setVariable [QGVAR(deadmanInvExplosive), "", true];
};
_connectedInventoryExplosive = _unit getVariable [QGVAR(deadmanInvExplosive), ""];
if (_connectedInventoryExplosive != "") then {
//Add the disconect action
private _magConfig = configFile >> "CfgMagazines" >> _connectedInventoryExplosive;
private _name = if ((getText (_magConfig >> "displayNameShort")) != "") then {
getText (_magConfig >> "displayNameShort")
} else {
getText(_magConfig >> "displayName")
};
private _picture = getText (_magConfig >> "picture");
_children pushBack [
([
"Deadman_disconnect",
format ["%1 %2", localize "str_disp_disconnect", _name],
_picture,
{
params ["_player"];
TRACE_1("clear",_player);
_player setVariable [QGVAR(deadmanInvExplosive), "", true];
},
{true}
] call EFUNC(interact_menu,createAction)), [], _unit];
} else {
//Add all magazines that would work with the deadman switch
private _procressedMags = [];
{
private _mag = _x;
if (!(_mag in _procressedMags)) then {
_procressedMags pushBack _x;
private _magConfig = configFile >> "CfgMagazines" >> _mag;
private _supportedTriggers = getArray (_magConfig >> "ACE_Triggers" >> "SupportedTriggers");
if (({_x == "DeadmanSwitch"} count _supportedTriggers) == 1) then { //case insensitive search
private _name = if ((getText (_magConfig >> "displayNameShort")) != "") then {
getText (_magConfig >> "displayNameShort")
} else {
getText(_magConfig >> "displayName")
};
private _picture = getText (_magConfig >> "picture");
_children pushBack [
([
format ["Deadman_exp_%1", _mag],
format [localize LSTRING(connectInventoryExplosiveToDeadman), _name],
_picture,
{
params ["_player", "", "_mag"];
TRACE_2("set new",_player,_mag);
_player setVariable [QGVAR(deadmanInvExplosive), _mag, true];
},
{(_this select 2) in (magazines _player)},
{},
(_mag)
] call EFUNC(interact_menu,createAction)), [], _unit];
};
};
} forEach (magazines _unit);
};
};
_children

View File

@ -25,3 +25,24 @@ _deadman = [_unit, "DeadManSwitch"] call FUNC(getPlacedExplosives);
{
[_unit, -1, _x, true] call FUNC(detonateExplosive);
} forEach _deadman;
//Handle deadman connected to explosive in inventory
private _connectedInventoryExplosive = _unit getVariable [QGVAR(deadmanInvExplosive), ""];
if (_connectedInventoryExplosive != "") then {
if (!(_connectedInventoryExplosive in (magazines _unit))) exitWith {};
//Remove mag and reset variable
_unit removeMagazine _connectedInventoryExplosive;
_unit setVariable [QGVAR(deadmanInvExplosive), "", true];
private _ammo = getText (configFile >> "CfgMagazines" >> _connectedInventoryExplosive >> "ammo");
TRACE_2("deadman inventory",_connectedInventoryExplosive,_ammo);
private _magazineTrigger = configFile >> "CfgMagazines" >> _connectedInventoryExplosive >> "ACE_Triggers" >> "DeadmanSwitch";
if (isText (_magazineTrigger >> "ammo")) then {
_ammo = getText (_magazineTrigger >> "ammo");
};
private _explosive = createVehicle [_ammo, (getPos _unit), [], 0, "NONE"];
_explosive setPosASL (getPosASL _unit);
[_unit, -1, [_explosive, -1]] call FUNC(detonateExplosive); //Explode, ignoring range, with a random 0-1 second delay
};

View File

@ -43,6 +43,7 @@
<Spanish>Detonar Todo</Spanish>
<Russian>Подрыв всех</Russian>
<Czech>Odpálit VŠE</Czech>
<Polish>Detonuj wszystkie</Polish>
</Key>
<Key ID="STR_ACE_Explosives_DetonateCode">
<English>Explosive code: %1</English>
@ -87,6 +88,7 @@
<Russian>Заблокировано</Russian>
<Czech>Blokováno</Czech>
<Polish>Zablokowany</Polish>
<Italian>Bloccato</Italian>
</Key>
<Key ID="STR_ACE_Explosives_CancelAction">
<English>Cancel</English>
@ -542,6 +544,7 @@
<French>Module explosifs</French>
<Hungarian>Robbanóanyag-rendszer</Hungarian>
<Russian>Взрывные устройства</Russian>
<Italian>Sistema esplosivi</Italian>
</Key>
<Key ID="STR_ACE_Explosives_RequireSpecialist_DisplayName">
<English>Require specialists?</English>
@ -553,6 +556,7 @@
<French>Requiert un spécialiste?</French>
<Hungarian>Specialisták igénylése?</Hungarian>
<Russian>Требуется специалист?</Russian>
<Italian>Richiede lo specialista?</Italian>
</Key>
<Key ID="STR_ACE_Explosives_RequireSpecialist_Description">
<English>Require explosive specialists to disable explosives? Default: No</English>
@ -564,6 +568,7 @@
<French>Le désarmoçage d'explosif requiert un spécialiste? Défaut: non</French>
<Hungarian>Szükséges-e egy specialista a robbanóanyagok hatástalanításához? Alapértelmezett: Nem</Hungarian>
<Russian>Требуется ли специалист по минному делу для обезвреживания взрывчатки? По-умолчанию: Нет</Russian>
<Italian>Si richiede lo specialista esplosivi per disabilitare esplosivi? Default: No</Italian>
</Key>
<Key ID="STR_ACE_Explosives_PunishNonSpecialists_DisplayName">
<English>Punish non-specialists?</English>
@ -575,6 +580,7 @@
<French>Punir les non-spécialistes?</French>
<Hungarian>Nem-specialisták büntetése?</Hungarian>
<Russian>Штраф не-специалистам?</Russian>
<Italian>Penalizza i non-specialisti?</Italian>
</Key>
<Key ID="STR_ACE_Explosives_PunishNonSpecialists_Description">
<English>Increase the time it takes to complete actions for non-specialists? Default: Yes</English>
@ -586,6 +592,7 @@
<French>Augmenter le temps nécessaire au désarmoçage pour les non-spécialistes? Défaut: oui</French>
<Hungarian>Nem-specialisták esetén több ideig tartson a cselekvés befejezése? Alapértelmezett: Igen</Hungarian>
<Russian>Увеличивать время завершения действий для не-специалистов? По-умолчанию: Нет</Russian>
<Italian>Aumenta il tempo necessario per completare le azioni per i non-specialisti? Default:Sì</Italian>
</Key>
<Key ID="STR_ACE_Explosives_ExplodeOnDefuse_DisplayName">
<English>Explode on defusal?</English>
@ -597,6 +604,7 @@
<French>Explosion si désamorçage?</French>
<Hungarian>Robbanás hatástalanításkor?</Hungarian>
<Russian>Взрыв при разминир.?</Russian>
<Italian>Esplode al disinnesco?</Italian>
</Key>
<Key ID="STR_ACE_Explosives_ExplodeOnDefuse_Description">
<English>Enable certain explosives to explode on defusal? Default: Yes</English>
@ -608,6 +616,7 @@
<French>Permet à certains explosifs d'exploser au désamorçage? Défaut: oui</French>
<Hungarian>Meghatározott robbanóanyagok felrobbanjanak-e hatástalanításkor? Alapértelmezett: Igen</Hungarian>
<Russian>Разрешить определенным взрывным устройствам взрываться при разминировании? По-умолчанию: Да</Russian>
<Italian>Abilita certi esplosivi ad esplodere al disinnesco? Default:Sì</Italian>
</Key>
<Key ID="STR_ACE_Explosives_Module_Description">
<English>This module adjusts the settings related to explosives.</English>
@ -619,28 +628,31 @@
<Hungarian>Ez a modul a robbanóanyagokhoz kötött beállításokat szabályozza.</Hungarian>
<Russian>Этот модуль управляет настройками, связанными со взрывными устройствами</Russian>
<Spanish>Este módulo ajusta las configuraciones relacionadas con explosivos.</Spanish>
<Italian>Questo modulo permette di personlalizzare i parametri del modulo esplosivi.</Italian>
</Key>
<Key ID="STR_ACE_Explosives_Module_SLAMBottomAttack_DisplayName">
<English>M6 SLAM Mine (Bottom Attack)</English>
<!-- <Czech>Mina M6 SLAM</Czech> -->
<!-- <French>Mine M6 SLAM</French> -->
<!-- <German>M6-SLAM-Mine</German> -->
<!-- <Italian>Mina M6 SLAM</Italian> -->
<!-- <Polish>Mina M6 SLAM</Polish> -->
<!-- <Portuguese>Mina SLAM M6</Portuguese> -->
<!-- <Russian>ПТ-мина M6 SLAM</Russian> -->
<!-- <Spanish>Mina M6 SLAM</Spanish> -->
<English>M6 SLAM Mine (Bottom Attack)</English>
<!-- <Czech>Mina M6 SLAM</Czech> -->
<!-- <French>Mine M6 SLAM</French> -->
<!-- <German>M6-SLAM-Mine</German> -->
<!-- <Italian>Mina M6 SLAM</Italian> -->
<!-- <Polish>Mina M6 SLAM</Polish> -->
<!-- <Portuguese>Mina SLAM M6</Portuguese> -->
<!-- <Russian>ПТ-мина M6 SLAM</Russian> -->
<!-- <Spanish>Mina M6 SLAM</Spanish> -->
<Polish>Mina M6 SLAM (atak od dołu)</Polish>
</Key>
<Key ID="STR_ACE_Explosives_Module_SLAMSideAttack_DisplayName">
<English>M6 SLAM Mine (Side Attack)</English>
<!-- <Czech>Mina M6 SLAM</Czech> -->
<!-- <French>Mine M6 SLAM</French> -->
<!-- <German>M6-SLAM-Mine</German> -->
<!-- <Italian>Mina M6 SLAM</Italian> -->
<!-- <Polish>Mina M6 SLAM</Polish> -->
<!-- <Portuguese>Mina SLAM M6</Portuguese> -->
<!-- <Russian>ПТ-мина M6 SLAM</Russian> -->
<!-- <Spanish>Mina M6 SLAM</Spanish> -->
<English>M6 SLAM Mine (Side Attack)</English>
<!-- <Czech>Mina M6 SLAM</Czech> -->
<!-- <French>Mine M6 SLAM</French> -->
<!-- <German>M6-SLAM-Mine</German> -->
<!-- <Italian>Mina M6 SLAM</Italian> -->
<!-- <Polish>Mina M6 SLAM</Polish> -->
<!-- <Portuguese>Mina SLAM M6</Portuguese> -->
<!-- <Russian>ПТ-мина M6 SLAM</Russian> -->
<!-- <Spanish>Mina M6 SLAM</Spanish> -->
<Polish>Mina M6 SLAM (atak od boku)</Polish>
</Key>
<Key ID="STR_ACE_Explosives_Module_IEDUrbanBig_Range_DisplayName">
<English>Large IED (Urban, Pressure Plate)</English>
@ -652,6 +664,7 @@
<!-- <Portuguese>AEI grande (urbano)</Portuguese> -->
<!-- <Russian>Большое СВУ (городское)</Russian> -->
<!-- <Spanish>IED grande (Urbano)</Spanish> -->
<Polish>Duży IED (miejski, płyta naciskowa)</Polish>
</Key>
<Key ID="STR_ACE_Explosives_Module_IEDLandBig_Range_DisplayName">
<English>Large IED (Dug-in, Pressure Plate)</English>
@ -663,6 +676,7 @@
<!-- <Portuguese>AEI grande (entrincheirado)</Portuguese> -->
<!-- <Russian>Большое СВУ (зарытое)</Russian> -->
<!-- <Spanish>IED grande (Enterrado)</Spanish> -->
<Polish>Duży IED (zakopany, płyta naciskowa)</Polish>
</Key>
<Key ID="STR_ACE_Explosives_Module_IEDUrbanSmall_Range_DisplayName">
<English>Small IED (Urban, Pressure Plate)</English>
@ -674,6 +688,7 @@
<!-- <Portuguese>AEI pequeno (urbano)</Portuguese> -->
<!-- <Russian>Малое СВУ (городское)</Russian> -->
<!-- <Spanish>IED pequeño (Urbano)</Spanish> -->
<Polish>Mały IED (miejski, płyta naciskowa)</Polish>
</Key>
<Key ID="STR_ACE_Explosives_Module_IEDLandSmall_Range_DisplayName">
<English>Small IED (Dug-in, Pressure Plate)</English>
@ -685,6 +700,19 @@
<!-- <Portuguese>AEI pequeno (entrincheirado)</Portuguese> -->
<!-- <Russian>Малое СВУ (зарытое)</Russian> -->
<!-- <Spanish>IED pequeño (Enterrado)</Spanish> -->
<Polish>Mały IED (zakopany, płyta naciskowa)</Polish>
</Key>
<Key ID="STR_ACE_Explosives_connectInventoryExplosiveToDeadman">
<English>Connect to %1</English>
<Spanish>Conectar a %1</Spanish>
<Russian>Подключиться к %1</Russian>
<German>Verbinde mit %1</German>
<Czech>Připojit k %1</Czech>
<Polish>Podłącz do %1</Polish>
<French>Connecter %1</French>
<Hungarian>Csatlakozás %1</Hungarian>
<Italian>Collega a %1</Italian>
<Portuguese>Conectar à %1</Portuguese>
</Key>
</Package>
</Project>

View File

@ -10,6 +10,7 @@
<Portuguese>Mostrar indicador para si mesmo</Portuguese>
<Spanish>Mostrar el indicador de señalado a uno mismo</Spanish>
<Czech>Zobrazit ukázání směru pro sebe</Czech>
<Italian>Mostra l'indicatore a se stessi</Italian>
</Key>
<Key ID="STR_ACE_finger_indicatorForSelf_description">
<English>Render the indicator for the pointing player. This option doesn't affect whether the other players would see the indicator</English>
@ -20,6 +21,7 @@
<Portuguese>Renderizar o indicador para o jogador que está apontando. Esta opção não afeta se os outros jogadores verão ou não o indicador</Portuguese>
<Spanish>Muestra el indicador para el jugador que apunta. Esta opción no afecta si los otros jugadores verían el indicador</Spanish>
<Czech>Zobrazit infikátor, když ukážete prstem. Tato volba nemá vliv, zda ostatní hráči uvidí indikátor nebo ne.</Czech>
<Italian>Mostra l'indicatore al giocatore che sta puntando. Questa opzione non influenza se gli altri giocatori vedranno o no l'indicatore.</Italian>
</Key>
<Key ID="STR_ACE_finger_indicatorColor_name">
<English>Pointing indicator</English>
@ -30,6 +32,7 @@
<Portuguese>Indicador de apontamento</Portuguese>
<Spanish>Indicador de señalado</Spanish>
<Czech>Ukazování směru</Czech>
<Italian>Indicatore di puntamento</Italian>
</Key>
<Key ID="STR_ACE_finger_indicatorColor_description">
<English>Color of the pointing indicator circle</English>
@ -40,6 +43,7 @@
<Portuguese>Cor do círculo de indicação</Portuguese>
<Spanish>Color del círculo indicador que señala</Spanish>
<Czech>Barva kruhu pro ukázání směru</Czech>
<Italian>Colore del cerchio dell'inidicatore di puntamento</Italian>
</Key>
<Key ID="STR_ACE_finger_keyComb">
<English>Action "point a finger at"</English>
@ -50,6 +54,7 @@
<Portuguese>Ação "Apontar um dedo para"</Portuguese>
<Spanish>Acción "apuntar con el dedo a"</Spanish>
<Czech>Akce "ukázat prstem na"</Czech>
<Italian>Azione "punta il dito a"</Italian>
</Key>
<Key ID="STR_ACE_finger_keyComb_description">
<English>Points, and shows a virtual marker of where you are looking to nearby units. Can be held down.</English>
@ -60,6 +65,7 @@
<Russian>Показывает пальцем и рисует виртуальный маркер в направлении взгляда ближайшим игрокам. Можно удерживать.</Russian>
<Spanish>Señala y muestra un marcador virtual donde ustás apuntando para las unidades cercanas. Puede ser mantenido.</Spanish>
<Czech>Ukazuje virtuální značku kruhu ve směru, kterým se díváte pro všechny blízké jednotky.</Czech>
<Italian>Punta e mostra un evidenziatore virtuale di dove stai guardando alle unità vicine. Può essere tenuto a lungo.</Italian>
</Key>
<Key ID="STR_ACE_finger_moduleSettings_displayName">
<English>Pointing Settings</English>
@ -70,6 +76,7 @@
<Russian>Настройки указания пальцем</Russian>
<Spanish>Ajustes de señalado</Spanish>
<Czech>Nastavení ukázování směru</Czech>
<Italian>Impostazioni indicatore</Italian>
</Key>
<Key ID="STR_ACE_finger_enabled_displayName">
<English>Pointing Enabled</English>
@ -80,6 +87,7 @@
<Russian>Указание пальцем включено</Russian>
<Spanish>Señalado habilitado</Spanish>
<Czech>Ukazování povoleno</Czech>
<Italian>Indicatore abilitato</Italian>
</Key>
<Key ID="STR_ACE_finger_maxRange_displayName">
<English>Pointing Max Range</English>
@ -90,6 +98,7 @@
<Russian>Макс. дальность</Russian>
<Spanish>Distancia máxima de señalado</Spanish>
<Czech>Maximální dosah pro ukazování směru</Czech>
<Italian>Massima distanza del puntatore</Italian>
</Key>
<Key ID="STR_ACE_finger_maxRange_description">
<English>Max range between players to show the pointing indicator [default: 4 meters]</English>
@ -100,6 +109,7 @@
<Russian>Максимальная дальность между игроками для отображения индикатора указания пальцем [по-умолчанию: 4 метра]</Russian>
<Spanish>Distancia máxima entre los jugadores para mostrar el indicador que señala [por defecto: 4 metros]</Spanish>
<Czech>Maximální vzdálenost mezi hráči pro ukázání směru [výchozí: 4 metry]</Czech>
<Italian>Massima distanza delle unità a cui mostrare l'indicatore [default: 4 metri]</Italian>
</Key>
</Package>
</Project>

View File

@ -3,51 +3,63 @@
<Package name="Flashlights">
<Key ID="STR_ACE_Flashlights_MX991_DisplayName">
<English>Fulton MX-991</English>
<German>Fulton MX-991</German>
<Polish>Fulton MX-991</Polish>
<Portuguese>Fulton MX-991</Portuguese>
<Russian>Fulton MX-991</Russian>
<Czech>Fulton MX-991</Czech>
<Spanish>Fulton MX-991</Spanish>
<Italian>Fulton MX-911</Italian>
</Key>
<Key ID="STR_ACE_Flashlights_MX991_Description">
<English>Flashlight with red filter. For use on map.</English>
<German>Taschenlampe mit rotem Filter zum Kartenlesen.</German>
<Polish>Latarka z czerwonym filtrem. Używana do podświetlania mapy.</Polish>
<Portuguese>Lanterna com filtro vermelho. Para uso no mapa.</Portuguese>
<Russian>Фонарь с красным светофильтром. Для использования на карте.</Russian>
<Czech>Svítilna s červeným filtrem. Pro nahlédnutí do mapy.</Czech>
<Spanish>Linterna con filtro rojo. Para su uso en el mapa.</Spanish>
<Italian>Torcia con filtro rosso. Da usare sulla mappa.</Italian>
</Key>
<Key ID="STR_ACE_Flashlights_XL50_DisplayName">
<English>Maglite XL50</English>
<German>Maglite XL50</German>
<Polish>Maglite XL50</Polish>
<Portuguese>Maglite XL50</Portuguese>
<Russian>Maglite XL50</Russian>
<Czech>Maglite XL50</Czech>
<Spanish>Maglite XL50</Spanish>
<Italian>Maglite XL50</Italian>
</Key>
<Key ID="STR_ACE_Flashlights_XL50_Description">
<English>White mini flashlight. For use on map.</English>
<German>Mini-Taschenlampe mit weißem Licht zum Kartenlesen.</German>
<Polish>Mini latarka. Światło białe. Używana do podświetlania mapy.</Polish>
<Portuguese>Mini lanterna branca. Para uso no mapa.</Portuguese>
<Russian>Небольшой фонарик белого света. Для использования на карте.</Russian>
<Czech>Bílá mini svítilna. Pro nahlédnutí do mapy.</Czech>
<Spanish>Mini linterna blanca. Para su uso en el mapa.</Spanish>
<Italian>Torcia bianca. Da usare sulla mappa.</Italian>
</Key>
<Key ID="STR_ACE_Flashlights_KSF1_DisplayName">
<English>KSF-1</English>
<German>KSF-1</German>
<Polish>KSF-1</Polish>
<Portuguese>KSF-1</Portuguese>
<Russian>KSF-1</Russian>
<Czech>KSF-1</Czech>
<Spanish>KSF-1</Spanish>
<Italian>KSF-1</Italian>
</Key>
<Key ID="STR_ACE_Flashlights_KSF1_Description">
<English>Flashlight with red filter. For use on map.</English>
<German>Tachenlampe mit rotem Filter zum Kartenlesen.</German>
<Polish>Latarka z czerwonym filtrem. Używana do podświetlania mapy.</Polish>
<Portuguese>Lanterna com filtro vermelho. Para uso no mapa.</Portuguese>
<Russian>Фонарь с красным светофильтром. Для использования на карте.</Russian>
<Czech>Svítilna s červeným filtrem. Pro nahlédnutí do mapy.</Czech>
<Spanish>Linterna con filtro rojo. Para su uso en el mapa.</Spanish>
<Italian>Torcia con filtro rosso. Da usare sulla mappa.</Italian>
</Key>
</Package>
</Project>

View File

@ -22,6 +22,7 @@
<French>Simulation de la fragmentation</French>
<Hungarian>Repesz-szimuláció</Hungarian>
<Russian>Симуляция осколков</Russian>
<Italian>Simulazione della frammentazione</Italian>
</Key>
<Key ID="STR_ACE_Frag_EnableFrag_Desc">
<English>Enable the ACE Fragmentation Simulation</English>
@ -33,6 +34,7 @@
<French>Active la simulation ACE de la fragmentation</French>
<Hungarian>Az ACE repesz-szimuláció engedélyezése</Hungarian>
<Russian>Включить симуляцию осколков ACE</Russian>
<Italian>Attiva la simulazione della frammentazione di ACE</Italian>
</Key>
<Key ID="STR_ACE_Frag_EnableSpall">
<English>Spalling Simulation</English>
@ -44,6 +46,7 @@
<French>Simulation d'éclat</French>
<Hungarian>Pattogzás-szimuláció</Hungarian>
<Russian>Симуляция обломков</Russian>
<Italian>Simulazione delle scheggiature</Italian>
</Key>
<Key ID="STR_ACE_Frag_EnableSpall_Desc">
<English>Enable the ACE Spalling Simulation</English>
@ -55,12 +58,15 @@
<French>Active la simulation d'éclat ACE</French>
<Hungarian>Az ACE pattogzás-szimuláció engedélyezése</Hungarian>
<Russian>Включить симуляцию обломков ACE</Russian>
<Italian>Attiva la simulazione delle scheggiature di ACE</Italian>
</Key>
<Key ID="STR_ACE_Frag_EnableReflections">
<English>Explosion Reflections Simulation</English>
<Polish>Symulacja odbicia eksplozji</Polish>
</Key>
<Key ID="STR_ACE_Frag_EnableReflections_Desc">
<English>Enable the ACE Explosion Reflection Simulation</English>
<Polish>Włącz symulację odbicia eksplozji ACE</Polish>
</Key>
<Key ID="STR_ACE_Frag_MaxTrack">
<English>Maximum Projectiles Tracked</English>
@ -72,6 +78,7 @@
<French>Nombre maximum de projectile suivis</French>
<Hungarian>Maximum követett repeszek</Hungarian>
<Russian>Макс. количество отслеживаемых снарядов</Russian>
<Italian>Massimo numero di proiettili tracciati</Italian>
</Key>
<Key ID="STR_ACE_Frag_MaxTrack_Desc">
<English>This setting controls the maximum amount of projectiles the fragmentation and spalling system will track at any given time. If more projectiles are fired, they will not be tracked. Lower this setting if you do not want FPS drops at high-count projectile scenarios ( &gt;200 rounds in the air at once)</English>
@ -83,6 +90,7 @@
<French>Cette option controle le nombre maximum de projectile et d'éclat résultant de la fragmentation que le système suivra à un moment T. Si plus de projectiles sont générés, ils ne seront pas pris en compte. Baisser cette option si vous ne voulez pas de baisse de FPS en cas d'un nombre important de projectiles (&gt;200 éclats en même temps)</French>
<Hungarian>Ez a beállítás szabályozza a repeszeződés és pattogzás által kilőtt objektumok követett számát. Ha több ez a szám, ezek az objektumok nem lesznek követve. Csökkentsd ezt a beállítást, ha nem akarsz lassulásokat magas-törmelékmennyiségű helyzetekben (200+ repesz a levegőben egyszerre)</Hungarian>
<Russian>Эта настройка контролирует максимальное количество снарядов, которок отслеживает система осколков и обломков в каждый момент времени. Снаряды, выстреленные сверх этого числа, отслеживаться не будут. Уменьшите это значение, если вы не хотите падения FPS при большом количестве снарядов в одной перестрелке (&gt; 200 одновременно летящих снарядов)</Russian>
<Italian>Questa impostazione controlla l'ammontare massimo di proiettili che verranno tracciati ad ogni istante dai sistemi di frammentazione e scheggiatura. Abbasa questa impostazione se non vuoi cali di FPS in scenari con altri numeri di proiettili (più di 200 colpi in aria per volta)</Italian>
</Key>
<Key ID="STR_ACE_Frag_MaxTrackPerFrame">
<English>Maximum Projectiles Per Frame</English>
@ -94,6 +102,7 @@
<French>Nombre maximal de projectile par image</French>
<Hungarian>Maximum repesz/képkocka</Hungarian>
<Russian>Макс. количество снарядов за кадр</Russian>
<Italian>Massimo numero di proiettili per frame</Italian>
</Key>
<Key ID="STR_ACE_Frag_MaxTrackPerFrame_Desc">
<English>The number of spall track calculations to perform in any given frame. This helps spread the FPS impact of tracking spall rounds across multiple frames, limiting its impact even further.</English>
@ -105,6 +114,7 @@
<French>Le nombre d'éclat à calculer dans chaque images. Ceci permet de diffuser l'impact sur les FPS dans de multiples images, le limitant d'autant plus.</French>
<Hungarian>A lepattogzási útvonalak számításának darabjai képkockánként. Ez eloszlatja az FPS-megszakadást több képkockára, ezzel csökkentve a súlyosságát.</Hungarian>
<Russian>Число обрабатываемых осколков за кадр. Это позволяет распределить нагрузку по отслеживанию осколков между несколькими кадрами, чтобы предотвратить падение FPS.</Russian>
<Italian>Il numero di calcoli da eseguire per tracciare le scheggiature in ogni frame. Questo aiuta a dispensare l'impatto sugli FPS delle scheggiature su più frame multipli, limitandone maggiormente l'impatto.</Italian>
</Key>
<Key ID="STR_ACE_Frag_EnableDebugTrace">
<English>(SP Only) Frag/Spall Debug Tracing</English>
@ -116,6 +126,7 @@
<French>(SP uniquement) Fragmentation/éclat debug</French>
<Hungarian>(Csak SP) Repesz/Pattogzás debug követés</Hungarian>
<Russian>(Только для одиночной игры) Отслеживаение/отладка осколков</Russian>
<Italian>(Solo SP) debug delle frammentazioni e scheggiature</Italian>
</Key>
<Key ID="STR_ACE_Frag_EnableDebugTrace_Desc">
<English>(SP Only) Requires a mission/editor restart. Enables visual tracing of fragmentation and spalling rounds in SP game mode only.</English>
@ -127,6 +138,7 @@
<French>(SP seulement) Requiert un redémarrage de mission ou de l'éditeur. Active les traceurs visuels de fragmentation et d'éclats en mode solo seulement</French>
<Hungarian>(Csak SP) Küldetés/Editor újraindítás szükséges. Engedélyezi a repeszek és pattogzó lövedékek vizuális nyomkövetését, csak egyjátékos módok alatt.</Hungarian>
<Russian>(Только для одиночной игры) Требует перезапуска миссии/редактора. Включает визуальные следы от осколков и обломков в режиме одиночной игры.</Russian>
<Italian>(Solo SP) Richiede un riavvio della missione/editor. Abilia una traccia visiva della frammentazione e scheggiatura solo in modalità SP.</Italian>
</Key>
</Package>
</Project>
</Project>

View File

@ -113,11 +113,12 @@
<Key ID="STR_ACE_Gestures_stop">
<English>Stop</English>
<French>Stop</French>
<German>Stop</German>
<German>Halt</German>
<Polish>Stop</Polish>
<Russian>Стоп</Russian>
<Portuguese>Parar</Portuguese>
<Czech>Stop</Czech>
<Italian>Stop</Italian>
</Key>
<!-- COVER -->
<Key ID="STR_ACE_Gestures_cover">
@ -155,6 +156,7 @@
<!-- ENGAGE -->
<Key ID="STR_ACE_Gestures_engage">
<English>Engage</English>
<German>Angriff</German>
<French>Engager</French>
<Polish>Atak</Polish>
<Russian>Открыть огонь</Russian>
@ -217,19 +219,27 @@
</Key>
<Key ID="STR_ACE_Gestures_showOnInteractionMenu_displayName">
<English>Show Gestures On Interaction Menu</English>
<German>Zeige Gesten im Interaktionsmenü</German>
<Czech>Zobrazit posunky v interakčním menu</Czech>
<Polish>Pokaż gesty w menu interakcji</Polish>
</Key>
<Key ID="STR_ACE_Gestures_showOnInteractionMenu_description">
<English>Show gestures on the self interaction menu, or just use keybinds, or disable completely</English>
<German>Zeige Gesten im Selbst-Interkationsmenü, lege sie auf Schnelltasten, oder deaktiviere sie vollständig.</German>
<Czech>Zobrazit posunky pro vlastní interakční menu, nebo prostě použít klávesové zkratky, nebo to zakázat úplně</Czech>
<Polish>Pokaż listę gestów w menu własnej interakcji, użyj tylko skrótów na klawiaturze lub wyłącz całkowicie</Polish>
</Key>
<Key ID="STR_ACE_Gestures_justKeybinds">
<English>Just Keybinds</English>
<German>Nur Schnelltasten</German>
<Czech>Pouze klávesové zkratky</Czech>
<Polish>Tylko skróty klaw.</Polish>
</Key>
<Key ID="STR_ACE_Gestures_keysAndInteractionMenu">
<English>Keybinds + Interaction Menu</English>
<German>Schnelltasten+ Interaktionsmenü</German>
<Czech>Klávesové zkratky + interakční menu</Czech>
<Polish>Skróty klaw. + menu interakcji</Polish>
</Key>
</Package>
</Project>
</Project>

View File

@ -18,105 +18,124 @@
params ["_grenadePosASL"];
TRACE_1("params",_grenadePosASL);
private _affected = (ASLtoAGL _grenadePosASL) nearEntities ["CAManBase", 20];
// Create flash to illuminate environment
if (hasInterface) then {
private _light = "#lightpoint" createVehicleLocal ASLtoAGL _grenadePosASL;
_light setPosASL _grenadePosASL;
_light setLightBrightness 20;
_light setLightAmbient [1,1,1];
_light setLightColor [1,1,1];
_light setLightDayLight true;
// Reduce the light after 0.1 seconds
[{
params ["_light"];
_light setLightBrightness 5;
// Delete the light after 0.2 more seconds
[{
params ["_light"];
deleteVehicle _light;
}, [_light], 0.2] call EFUNC(common,waitAndExecute);
}, [_light], 0.1] call EFUNC(common,waitAndExecute);
};
// Affect local AI
// @todo: Affect units in static weapons, turned out, etc
private _affected = (ASLtoAGL _grenadePosASL) nearEntities ["CAManBase", 20];
_affected = _affected - [ACE_player];
{
if (local _x && {alive _x}) then {
private _strength = 1 - (((getPosASL _x) vectorDistance _grenadePosASL) min 15) / 15;
private _strength = 1 - (((getPosASL _x) vectorDistance _grenadePosASL) min 20) / 20;
TRACE_3("FlashBangEffect Start",_x,((getPosASL _x) vectorDistance _grenadePosASL),_strength);
if (_x != ACE_player) then {
//must be AI
[_x, true] call EFUNC(common,disableAI);
[_x, true] call EFUNC(common,disableAI);
_x setSkill (skill _x / 50);
_x setSkill (skill _x / 50);
[{
params ["_unit"];
//Make sure we don't enable AI for unconscious units
if !(_unit getVariable ["ace_isUnconscious", false]) then {
[_unit, false] call EFUNC(common,disableAI);
};
_unit setSkill (skill _unit * 50);
}, [_x], 7 * _strength] call EFUNC(common,waitAndExecute);
} else {
//Do effects for player
// is there line of sight to the grenade?
private _eyePos = eyePos ACE_player; //PositionASL
_posGrenade set [2, (_posGrenade select 2) + 0.2]; // compensate for grenade glitching into ground
//Check for line of sight (check 4 points in case grenade is stuck in an object or underground)
private _losCount = {
!lineIntersects [_grenadePosASL vectorAdd _x, _eyePos, ACE_player]
} count [[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 <= 1) then {
_strength = _strength / 10;
};
// add ace_hearing ear ringing sound effect
if (isClass (configFile >> "CfgPatches" >> "ACE_Hearing") && {_strength > 0}) then {
[_x, 20 * _strength] call EFUNC(hearing,earRinging);
};
// account for people looking away by slightly
// reducing the effect for visual effects.
private _eyeDir = (positionCameraToWorld [0,0,1] vectorDiff positionCameraToWorld [0,0,0]);
private _dirToUnitVector = _eyePos vectorFromTo _posGrenade;
private _angleDiff = acos (_eyeDir vectorDotProduct _dirToUnitVector);
// from 0-45deg, full effect
if (_angleDiff > 45) then {
_strength = _strength - _strength * ((_angleDiff - 45) / 120);
};
TRACE_1("Final strength for player",_strength);
// add ace_medical pain effect:
if (isClass (configFile >> "CfgPatches" >> "ACE_Medical") && {_strength > 0.1}) then {
[ACE_player, _strength / 2] call EFUNC(medical,adjustPainLevel);
};
// create flash to illuminate environment
private _light = "#lightpoint" createVehicleLocal _grenadePosASL;
_light setPosASL _grenadePosASL;
_light setLightBrightness 200;
_light setLightAmbient [1,1,1];
_light setLightColor [1,1,1];
_light setLightDayLight true;
// delete the light after 0.1 seconds
[{
params ["_light"];
deleteVehicle _light;
}, [_light], 0.1] call EFUNC(common,waitAndExecute);
// blind player
if (hasInterface && {_strength > 0.1}) then {
GVAR(flashbangPPEffectCC) ppEffectEnable true;
GVAR(flashbangPPEffectCC) ppEffectAdjust [1,1,(0.8 + _strength) min 1,[1,1,1,0],[0,0,0,1],[0,0,0,0]];
GVAR(flashbangPPEffectCC) ppEffectCommit 0.01;
//PARTIALRECOVERY - start decreasing effect over time
[{
params ["_strength"];
GVAR(flashbangPPEffectCC) ppEffectAdjust [1,1,0,[1,1,1,0],[0,0,0,1],[0,0,0,0]];
GVAR(flashbangPPEffectCC) ppEffectCommit (10 * _strength);
}, [_strength], 7 * _strength] call EFUNC(common,waitAndExecute);
//FULLRECOVERY - end effect
[{
GVAR(flashbangPPEffectCC) ppEffectEnable false;
}, [], 17 * _strength] call EFUNC(common,waitAndExecute);
};
if (_strength > 0.2) then {
_x setVectorDir ((getPosASL _x) vectorDiff _grenadePosASL);
};
[{
params ["_unit"];
//Make sure we don't enable AI for unconscious units
if !(_unit getVariable ["ace_isUnconscious", false]) then {
[_unit, false] call EFUNC(common,disableAI);
};
_unit setSkill (skill _unit * 50);
}, [_x], 7 * _strength] call EFUNC(common,waitAndExecute);
};
true
} count _affected;
// Affect local player, independently of distance
if (hasInterface && {!isNull ACE_player} && {alive ACE_player}) then {
// Do effects for player
// is there line of sight to the grenade?
private _eyePos = eyePos ACE_player; //PositionASL
_grenadePosASL set [2, (_grenadePosASL select 2) + 0.2]; // compensate for grenade glitching into ground
private _strength = 1 - ((_eyePos vectorDistance _grenadePosASL) min 20) / 20;
// Check for line of sight (check 4 points in case grenade is stuck in an object or underground)
private _losCoefficient = 1;
private _losCount = {
!lineIntersects [_grenadePosASL vectorAdd _x, _eyePos, ACE_player]
} count [[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 <= 1) then {
_losCoefficient = 0.1;
};
_strength = _strength * _losCoefficient;
// Add ace_hearing ear ringing sound effect
if (isClass (configFile >> "CfgPatches" >> "ACE_Hearing") && {_strength > 0}) then {
[40 * _strength] call EFUNC(hearing,earRinging);
};
// add ace_medical pain effect:
if (isClass (configFile >> "CfgPatches" >> "ACE_Medical") && {_strength > 0.1}) then {
[ACE_player, _strength / 2] call EFUNC(medical,adjustPainLevel);
};
// Effect on vision has a wider range, with a higher falloff
_strength = 1 - (((_eyePos vectorDistance _grenadePosASL) min 25) / 25) ^ 0.4;
_strength = _strength * _losCoefficient;
// Account for people looking away by slightly reducing the effect for visual effects.
private _eyeDir = ((AGLtoASL positionCameraToWorld [0,0,1]) vectorDiff (AGLtoASL positionCameraToWorld [0,0,0]));
private _dirToUnitVector = _eyePos vectorFromTo _grenadePosASL;
private _angleDiff = acos (_eyeDir vectorDotProduct _dirToUnitVector);
TRACE_2("",_angleDiff,((1 - (_angleDiff - 45) / (120 - 45)) max 0));
// from 0-45deg, full effect
if (_angleDiff > 45) then {
_strength = _strength * ((1 - (_angleDiff - 45) / (120 - 45)) max 0);
};
// Blind player
if (_strength > 0.1) then {
GVAR(flashbangPPEffectCC) ppEffectEnable true;
GVAR(flashbangPPEffectCC) ppEffectAdjust [1,1,(0.8 + _strength) min 1,[1,1,1,0],[0,0,0,1],[0,0,0,0]];
GVAR(flashbangPPEffectCC) ppEffectCommit 0.01;
//PARTIALRECOVERY - start decreasing effect over time
[{
params ["_strength"];
GVAR(flashbangPPEffectCC) ppEffectAdjust [1,1,0,[1,1,1,0],[0,0,0,1],[0,0,0,0]];
GVAR(flashbangPPEffectCC) ppEffectCommit (10 * _strength);
}, [_strength], 7 * _strength] call EFUNC(common,waitAndExecute);
//FULLRECOVERY - end effect
[{
GVAR(flashbangPPEffectCC) ppEffectEnable false;
}, [], 17 * _strength] call EFUNC(common,waitAndExecute);
};
if (_strength > 0.2) then {
ACE_player setVectorDir (_eyePos vectorDiff _grenadePosASL);
};
};
true

View File

@ -21,8 +21,5 @@ TRACE_1("params",_projectile);
if (alive _projectile) then {
playSound3D ["A3\Sounds_F\weapons\Explosion\explosion_mine_1.wss", _projectile, false, getPosASL _projectile, 5, 1.2, 400];
private _affected = _projectile nearEntities ["CAManBase", 20];
TRACE_2("people hit",_affected,getPosASL _projectile);
["flashbangExplosion", _affected, [getPosASL _projectile]] call EFUNC(common,targetEvent);
["flashbangExplosion", [getPosASL _projectile]] call EFUNC(common,globalEvent);
};

View File

@ -4,30 +4,37 @@
<Key ID="STR_ACE_Headless_Module">
<English>Headless</English>
<German>Headless</German>
<Polish>Headless</Polish>
</Key>
<Key ID="STR_ACE_Headless_ModuleDesc">
<English>This module allows you to setup automatic transferring of AI to Headless Clients. (Default: No)</English>
<German>Dieses Modul erlaubt es dir, die KI automatisch auf einen Headless Client zu transferieren. (Standard: Nein) </German>
<Polish>Moduł ten pozwala ustawić automatyczne przenoszenie AI do Headless Clientów. (Domyślnie: Nie)</Polish>
</Key>
<Key ID="STR_ACE_Headless_EnabledDesc">
<English>Enables transferring of AI to Headless Clients.</English>
<German>Aktiviert denTransfer der KI auf Headless Clients.</German>
<German>Aktiviert den Transfer der KI auf Headless Clients.</German>
<Polish>Aktywuje przenoszenie AI do Headless Clientów</Polish>
</Key>
<Key ID="STR_ACE_Headless_Delay">
<English>Delay</English>
<German>Verzögerung</German>
<Polish>Opóźnienie</Polish>
</Key>
<Key ID="STR_ACE_Headless_DelayDesc">
<English>Minimal delay between transfers, in seconds. (Default: 15)</English>
<German>Minimale Verzögerung zwischen Transfers in Sekunden. (Standard: 15)</German>
<Polish>Minimalne opóźnienie w sekundach pomiędzy transferami. (Domyślnie: 15)</Polish>
</Key>
<Key ID="STR_ACE_Headless_Log">
<English>Log</English>
<German>Protokolldatei anlegen</German>
<Polish>Dziennik</Polish>
</Key>
<Key ID="STR_ACE_Headless_LogDesc">
<English>Log transfer statistics and Headless Client (dis)connections to RPT. (Default: No)</English>
<German>Zeichnet Transferstatistiken, Verbindungen und Verbindungsabbrüche in einer RPT-Datei auf. (Standard: Nein)</German>
<Polish>Zapisuj statystyki transferów oraz status Headless Clienta do RPT. (Domyślnie: Nie)</Polish>
</Key>
</Package>
</Project>
</Project>

View File

@ -1,31 +1,38 @@
class ACE_Settings {
class GVAR(EnableCombatDeafness) {
category = CSTRING(Module_DisplayName);
value = 1;
typeName = "BOOL";
displayName = CSTRING(CombatDeafness_DisplayName);
description = CSTRING(CombatDeafness_Description);
displayName = CSTRING(EnableCombatDeafness_DisplayName);
description = CSTRING(EnableCombatDeafness_Description);
};
class GVAR(EarplugsVolume) {
category = CSTRING(Module_DisplayName);
value = 0.5;
typeName = "SCALAR";
};
class GVAR(UnconsciousnessVolume) {
category = CSTRING(Module_DisplayName);
value = 0.4;
typeName = "SCALAR";
};
class GVAR(DisableEarRinging) {
category = CSTRING(Module_DisplayName);
value = 0;
typeName = "BOOL";
isClientSettable = 1;
displayName = CSTRING(DisableEarRinging);
displayName = CSTRING(DisableEarRinging_DisplayName);
description = CSTRING(DisableEarRinging_Description);
};
class GVAR(enabledForZeusUnits) {
category = CSTRING(Module_DisplayName);
value = 1;
typeName = "BOOL";
displayName = CSTRING(enabledForZeusUnits_DisplayName);
description = CSTRING(enabledForZeusUnits_Description);
};
class GVAR(autoAddEarplugsToUnits) {
category = CSTRING(Module_DisplayName);
value = 1;
typeName = "BOOL";
displayName = CSTRING(autoAddEarplugsToUnits_DisplayName);

View File

@ -11,9 +11,21 @@ class CfgSounds {
sound[] = {QUOTE(PATHTOF(sounds\ACE_earringing_heavy.wav)),8,1.7};
titles[] = {};
};
class ACE_Combat_Deafness {
class ACE_Combat_Deafness_Heavy {
sound[] = {QUOTE(PATHTOF(sounds\deafness.ogg)),8,1};
titles[] = {};
};
class ACE_Combat_Deafness_Medium {
sound[] = {QUOTE(PATHTOF(sounds\deafness.ogg)),3,1};
titles[] = {};
};
class ACE_Combat_Deafness_Heavy_NoRing {
sound[] = {QUOTE(PATHTOF(sounds\deafness_noring.ogg)),8,1};
titles[] = {};
};
class ACE_Combat_Deafness_Medium_NoRing {
sound[] = {QUOTE(PATHTOF(sounds\deafness_noring.ogg)),3,1};
titles[] = {};
};
class ACE_Ring_Backblast {
sound[] = {QUOTE(PATHTOF(sounds\backblast_ring.ogg)),1,1};

View File

@ -103,13 +103,14 @@ class CfgVehicles {
icon = PATHTOF(UI\Icon_Module_Hearing_ca.paa);
class Arguments {
class EnableCombatDeafness {
displayName = CSTRING(CombatDeafness_DisplayName);
description = CSTRING(CombatDeafness_Description);
displayName = CSTRING(EnableCombatDeafness_DisplayName);
description = CSTRING(EnableCombatDeafness_Description);
typeName = "BOOL";
defaultValue = 1;
};
class DisableEarRinging {
displayName = CSTRING(DisableEarRinging);
displayName = CSTRING(DisableEarRinging_DisplayName);
description = CSTRING(DisableEarRinging_Description);
typeName = "NUMBER";
class values {
class DoNotForce {

View File

@ -2,38 +2,40 @@
if (!hasInterface) exitWith {};
GVAR(cacheAmmoLoudness) = createLocation ["ACE_HashLocation", [-10000,-10000,-10000], 0, 0];
GVAR(cacheAmmoLoudness) setText QGVAR(cacheAmmoLoudness);
GVAR(cacheAmmoLoudness) = call CBA_fnc_createNamespace;
GVAR(deafnessDV) = 0;
GVAR(deafnessPrior) = 0;
GVAR(volume) = 1;
GVAR(playerVehAttenuation) = 1;
GVAR(beep) = false;
GVAR(beep2) = false;
GVAR(time2) = 0;
GVAR(time3) = 0;
GVAR(time4) = 0;
GVAR(damageCoefficent) = 1;
GVAR(volumeAttenuation) = 1;
["SettingsInitialized", {
TRACE_1("settingInit",GVAR(EnableCombatDeafness));
// Only run PFEH and install event handlers if combat deafness is enabled
if (!GVAR(EnableCombatDeafness)) exitWith {};
// Update hearing protection now:
[] call FUNC(updateHearingProtection);
// Spawn volume updating process
[FUNC(updateVolume), 1, [false]] 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);
// Reset deafness on respawn (or remote control player switch)
["playerChanged", {
GVAR(deafnessDV) = 0;
GVAR(deafnessPrior) = 0;
ACE_player setVariable [QGVAR(deaf), false];
GVAR(time3) = 0;
[] call FUNC(updateHearingProtection);
}] call EFUNC(common,addEventhandler);
// Update protection on possible helmet change
["playerInventoryChanged", {[] call FUNC(updateHearingProtection);}] call EFUNC(common,addEventhandler);
}] call EFUNC(common,addEventHandler);
//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);
//Reset deafness on respawn (or remote control player switch)
["playerChanged", {
GVAR(deafnessDV) = 0;
GVAR(deafnessPrior) = 0;
ACE_player setVariable [QGVAR(deaf), false];
GVAR(beep) = false;
GVAR(beep2) = false;
GVAR(time2) = 0;
GVAR(time3) = 0;
GVAR(time4) = 0;
}] call EFUNC(common,addEventhandler);

View File

@ -11,6 +11,7 @@ PREP(hasEarPlugsIn);
PREP(moduleHearing);
PREP(putInEarPlugs);
PREP(removeEarPlugs);
PREP(updateHearingProtection);
PREP(updatePlayerVehAttenuation);
PREP(updateVolume);

View File

@ -1,39 +1,25 @@
/*
* Author: KoffeinFlummi, commy2, Rocko, Rommel, Ruthberg
* Ear ringing PFH
* Handle new sound souce near ace_player and apply hearing damage
*
* Arguments:
* 0: unit <OBJECT>
* 1: strength of ear ringing (Number between 0 and 1) <NUMBER>
* 0: strength of ear ringing <NUMBER>
*
* Return Value:
* None
*
* Example:
* [_unit, _strength] call ace_hearing_fnc_earRinging
* [_strength] call ace_hearing_fnc_earRinging
*
* Public: No
*/
#include "script_component.hpp"
params ["_unit", "_strength"];
params ["_strength"];
if (_unit != ACE_player) exitWith {};
if (_strength < 0.05) exitWith {};
if (!isNull curatorCamera) exitWith {};
if ((!GVAR(enabledForZeusUnits)) && {player != ACE_player}) exitWith {};
if (_unit getVariable ["ACE_hasEarPlugsin", false]) then {
_strength = _strength / 4;
};
TRACE_2("adding",_strength * GVAR(damageCoefficent),GVAR(deafnessDV));
//headgear hearing protection
if(headgear _unit != "") then {
private _protection = (getNumber (configFile >> "CfgWeapons" >> (headgear _unit) >> QGVAR(protection))) min 1;
if(_protection > 0) then {
_strength = _strength * (1 - _protection);
};
};
TRACE_2("adding",_strength,GVAR(deafnessDV));
GVAR(deafnessDV) = GVAR(deafnessDV) + _strength;
GVAR(deafnessDV) = GVAR(deafnessDV) + (_strength * GVAR(damageCoefficent));

View File

@ -16,8 +16,8 @@
*/
#include "script_component.hpp"
//Only run if deafness or ear ringing is enabled:
if ((!GVAR(enableCombatDeafness)) && GVAR(DisableEarRinging)) exitWith {};
// Only run if combat deafness is enabled
if (!GVAR(EnableCombatDeafness)) exitWith {};
params ["_unit", "_damage"];
@ -29,4 +29,5 @@ private ["_strength"];
_strength = (0 max _damage) * 30;
if (_strength < 0.01) exitWith {};
[{_this call FUNC(earRinging)}, [_unit, _strength], 0.2] call EFUNC(common,waitAndExecute);
// Call inmediately, as it will get pick up later anyway by the update thread
[_strength] call FUNC(earRinging);

View File

@ -22,8 +22,8 @@
*/
#include "script_component.hpp"
//Only run if deafness or ear ringing is enabled:
if ((!GVAR(enableCombatDeafness)) && GVAR(DisableEarRinging)) exitWith {};
// Only run if combat deafness is enabled
if (!GVAR(EnableCombatDeafness)) exitWith {};
params ["_object", "_firer", "_distance", "_weapon", "", "", "_ammo"];
@ -97,4 +97,5 @@ TRACE_1("result",_strength);
if (_strength < 0.01) exitWith {};
[{_this call FUNC(earRinging)}, [ACE_player, _strength], 0.2] call EFUNC(common,waitAndExecute);
// Call inmediately, as it will get pick up later anyway by the update thread
[_strength] call FUNC(earRinging);

View File

@ -12,13 +12,12 @@
params ["_logic"];
[_logic, QGVAR(enableCombatDeafness), "EnableCombatDeafness"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(EnableCombatDeafness), "EnableCombatDeafness"] call EFUNC(common,readSettingFromModule);
// Do Not Force - read module setting only non-default is set due to using SCALAR
if ((_logic getVariable "DisableEarRinging") != -1) then {
[_logic, QGVAR(DisableEarRinging), "DisableEarRinging"] call EFUNC(common,readSettingFromModule);
};
[_logic, QGVAR(enabledForZeusUnits), "enabledForZeusUnits"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(autoAddEarplugsToUnits), "autoAddEarplugsToUnits"] call EFUNC(common,readSettingFromModule);
ACE_LOGINFO("Hearing Module Initialized.");

View File

@ -29,3 +29,5 @@ _player setVariable ["ACE_hasEarPlugsIn", true, true];
/*// No Earplugs in inventory, telling user
[localize LSTRING(NoPlugs)] call EFUNC(common,displayTextStructured);*/
[] call FUNC(updateHearingProtection);

View File

@ -30,3 +30,5 @@ _player setVariable ["ACE_hasEarPlugsIn", false, true];
//Force an immediate fast volume update:
[[true]] call FUNC(updateVolume);
[] call FUNC(updateHearingProtection);

View File

@ -0,0 +1,36 @@
/*
* Author: PabstMirror
* Updates the hearing protection and volume attenuation for player on earbuds/helmet change
*
* Arguments:
* None
*
* Return Value:
* None
*
* Example:
* [] call ace_hearing_fnc_updateHearingProtection
*
* Public: No
*/
#include "script_component.hpp"
TRACE_1("params",_this);
if (isNull ACE_player) exitWith {
GVAR(damageCoefficent) = 0;
GVAR(volumeAttenuation) = 1;
};
// Handle Earplugs
private _hasEarPlugsIn = [ACE_player] call FUNC(hasEarPlugsIn);
GVAR(damageCoefficent) = [1, 0.25] select _hasEarPlugsIn;
GVAR(volumeAttenuation) = [1, GVAR(EarplugsVolume)] select _hasEarPlugsIn;
// Handle Headgear
if (headgear ACE_player != "") then {
private _protection = (getNumber (configFile >> "CfgWeapons" >> (headgear ACE_player) >> QGVAR(protection))) min 1;
GVAR(damageCoefficent) = GVAR(damageCoefficent) * (1 - _protection);
private _attenuation = (getNumber (configFile >> "CfgWeapons" >> (headgear ACE_player) >> QGVAR(lowerVolume))) min 1;
GVAR(volumeAttenuation) = GVAR(volumeAttenuation) * (1 - _attenuation);
};

View File

@ -16,75 +16,38 @@
*/
#include "script_component.hpp"
//Only run if deafness or ear ringing is enabled:
if ((!GVAR(enableCombatDeafness)) && GVAR(DisableEarRinging)) exitWith {};
(_this select 0) params ["_justUpdateVolume"];
GVAR(deafnessDV) = (GVAR(deafnessDV) min 20) max 0;
GVAR(volume) = (1 - (GVAR(deafnessDV) / 20)) max 0;
GVAR(volume) = (1 - (GVAR(deafnessDV) / 20)) max 0.05;
TRACE_3("",GVAR(volume),GVAR(deafnessDV),GVAR(deafnessDV) - GVAR(deafnessPrior));
if (!_justUpdateVolume) then {
//If we got a big increase in the last second:
if ((GVAR(deafnessDV) - GVAR(deafnessPrior)) > 2) then {
if (ACE_time > GVAR(time3)) then {
GVAR(beep2) = false;
};
if ((!GVAR(DisableEarRinging)) && {!GVAR(beep2)}) then {
playSound "ACE_Combat_Deafness";
GVAR(beep2) = true;
GVAR(time3) = ACE_time + 5;
// Ring if we got a big increase in the last second or enough accumulated damage
if (GVAR(deafnessDV) - GVAR(deafnessPrior) > 1 ||
GVAR(deafnessDV) > 10) then {
if (ACE_time - GVAR(time3) < 3) exitWith {};
GVAR(time3) = ACE_time;
if (GVAR(deafnessDV) > 19.75) then {
playSound (["ACE_Combat_Deafness_Heavy", "ACE_Combat_Deafness_Heavy_NoRing"] select GVAR(DisableEarRinging));
} else {
playSound (["ACE_Combat_Deafness_Medium", "ACE_Combat_Deafness_Medium_NoRing"] select GVAR(DisableEarRinging));
};
};
GVAR(deafnessPrior) = GVAR(deafnessDV);
if (GVAR(deafnessDV) > 19.75) then {
ACE_player setVariable [QGVAR(deaf), true];
if ((!GVAR(DisableEarRinging)) && {ACE_time > GVAR(time4)}) then {
playSound "ACE_Combat_Deafness";
GVAR(beep2) = true;
GVAR(time3) = ACE_time + 10;
GVAR(time4) = ACE_time + 30;
};
} else {
ACE_player setVariable [QGVAR(deaf), false];
};
if (GVAR(deafnessDV) > 10) then {
//check if the ringing is already being played
if (ACE_time > GVAR(time2)) then {
GVAR(beep) = false;
};
if ((!GVAR(DisableEarRinging)) && {!GVAR(beep)}) then {
playSound "ACE_Ring_Backblast";
GVAR(time2) = ACE_time + 22;
GVAR(beep) = true;
};
};
// Hearing takes longer to return to normal after it hits rock bottom
GVAR(deafnessDV) = (GVAR(deafnessDV) - (0.5 * (GVAR(volume) max 0.1))) max 0;
};
if ((missionNameSpace getVariable [QGVAR(disableVolumeUpdate), false]) || {!GVAR(enableCombatDeafness)}) exitWith {};
if (missionNameSpace getVariable [QGVAR(disableVolumeUpdate), false]) exitWith {};
private _volume = GVAR(volume);
// Earplugs reduce hearing 50%
if ([ACE_player] call FUNC(hasEarPlugsIn)) then {
_volume = _volume min GVAR(EarplugsVolume);
};
// Headgear can reduce hearing
if(headgear ACE_player != "") then {
private ["_lowerVolume"];
_lowerVolume = (getNumber (configFile >> "CfgWeapons" >> (headgear ACE_player) >> QGVAR(lowerVolume))) min 1;
if(_lowerVolume > 0) then {
_volume = _volume min (1 - _lowerVolume);
};
};
// Earplugs and headgear can attenuate hearing
_volume = _volume min GVAR(volumeAttenuation);
// Reduce volume if player is unconscious
if (ACE_player getVariable ["ACE_isUnconscious", false]) then {

Binary file not shown.

View File

@ -97,7 +97,7 @@
<Hungarian>Nincs több hely</Hungarian>
<Russian>Нет места в инвентаре</Russian>
</Key>
<Key ID="STR_ACE_Hearing_DisableEarRinging">
<Key ID="STR_ACE_Hearing_DisableEarRinging_DisplayName">
<English>Disable ear ringing</English>
<French>Désactiver le bourdonnement</French>
<Spanish>Desactivar zumbido de oídos</Spanish>
@ -109,6 +109,9 @@
<Italian>Disabilita i fischi nelle orecchie</Italian>
<Portuguese>Desabilitar zumbido de ouvidos</Portuguese>
</Key>
<Key ID="STR_ACE_Hearing_DisableEarRinging_Description">
<English>Remove tinnitus effect when the player takes hearing damage</English>
</Key>
<Key ID="STR_ACE_Hearing_Module_DisplayName">
<English>Hearing</English>
<Polish>Słuch</Polish>
@ -119,26 +122,29 @@
<French>Audition</French>
<Hungarian>Hallás</Hungarian>
<Russian>Слух</Russian>
<Italian>Udito</Italian>
</Key>
<Key ID="STR_ACE_Hearing_CombatDeafness_DisplayName">
<English>Combat Deafness</English>
<Key ID="STR_ACE_Hearing_EnableCombatDeafness_DisplayName">
<English>Enable Combat Deafness</English>
<Polish>Wł. głuchotę bojową</Polish>
<Spanish>¿Habilitar sordera de combate?</Spanish>
<Spanish>Habilitar sordera de combate</Spanish>
<German>Aktiviere Taubheit im Gefecht?</German>
<Czech>Povolit ztrátu sluchu?</Czech>
<Portuguese>Ativar surdez em combate?</Portuguese>
<French>Activer la surdité au combat?</French>
<Hungarian>Harci süketség engedélyezése?</Hungarian>
<Russian>Оглушение</Russian>
<Italian>Sordità in combattimento</Italian>
</Key>
<Key ID="STR_ACE_Hearing_CombatDeafness_Description">
<Key ID="STR_ACE_Hearing_EnableCombatDeafness_Description">
<English>Reduces the hearing ability as the player takes hearing damage</English>
<Polish>Możliwość chwilowej utraty słuchu przy głośnych wystrzałach i jednoczesnym braku włożonych stoperów</Polish>
<Spanish>Habilita la sordera de combate</Spanish>
<German>Aktiviere Taubheit im Gefecht?</German>
<German>Verringert das Hörvermögen wenn der Spieler einen Hörschaden davonträg</German>
<Czech>Snižuje schopnost sluchu pokud dojde k jeho poškození hlasitou a blízkou střelbou</Czech>
<Portuguese>Ativar surdez em combate?</Portuguese>
<Russian>Уменьшает возможность игрока слышать звуки при повреждении органов слуха</Russian>
<Italian>Riduce la capacità audio quando il giocatore riceve danni all'udito</Italian>
</Key>
<Key ID="STR_ACE_Hearing_Module_Description">
<English>Controls combat deafness and ear ringing. When activated, players can be deafened when a gun is fired in their vicinity or an explosion takes place without hearing protection</English>
@ -150,6 +156,7 @@
<Portuguese>Este módulo ativa / desativa surdez em combate. Quando ativado, os jogadores podem ficar surdos quando uma arma é disparada ao seu redor ou uma explosão ocorre sem proteção auditiva.</Portuguese>
<French>Ce module active / désactivé la surdité au combat. Si active, des joueurs peuvent devenir sourds sans protection d'oreille, si une arme est utilisée ou une explosion a lieu à proximité</French>
<Spanish>Controles de sordera de combate y zumbido en los oídos. Al activarlo, los jugadores pueden ser ensordecidos cuando un arma se dispara cerca o una explosión tiene lugar sin protección auditiva</Spanish>
<Italian>Controlla la sordità in combattimento e il tintinnio all'orecchio. I giocatori possono essere assordati quando una pistola viene sparata nelle vicinanze oppure capita una esplosione senza protezione audio.</Italian>
</Key>
<Key ID="STR_ACE_Hearing_enabledForZeusUnits_DisplayName">
<English>Effect Zeus RC</English>
@ -159,6 +166,7 @@
<Portuguese>Afeta Zeus CR</Portuguese>
<Spanish>Efecto Zeus RC</Spanish>
<Czech>Vliv na Zeus RC</Czech>
<Italian>Effetto Zeus RC</Italian>
</Key>
<Key ID="STR_ACE_Hearing_enabledForZeusUnits_Description">
<English>Allow zeus remote controlled units to be able to take hearing damage.</English>
@ -168,20 +176,25 @@
<Portuguese>Permite que unidades remotamente controladas pelo Zeus sejam atingidas por danos auditivos.</Portuguese>
<Spanish>Permitir a las unidades por control remoto de zeus que puedan tener daños auditivos.</Spanish>
<Czech>Aktivovat efekt ztráty sluchu pro vzdáleně ovládané jednotky.</Czech>
<Italian>Abilita le unità controllate remotamente da Zeus a ricevere danni auditivi.</Italian>
</Key>
<Key ID="STR_ACE_Hearing_autoAddEarplugsToUnits_DisplayName">
<English>Add earplugs to units</English>
<German>Füge Ohrenstöpsel zu Einheiten hinzu</German>
<Polish>Dodaj stopery dla jednostek</Polish>
<Russian>Добавлять юнитам беруши</Russian>
<Portuguese>Adiciona protetores de ouvido as unidades</Portuguese>
<Czech>Přidat špunty jednotce</Czech>
<Italian>Aggiunge i tappi auricolari</Italian>
</Key>
<Key ID="STR_ACE_Hearing_autoAddEarplugsToUnits_Description">
<English>Add the `ACE_EarPlugs` item to all units that have loud weapons. Can disable if using custom loadouts.</English>
<German>Fügt die "ACE_EarPlugs" zu allen Einheiten mit lauten Waffen hinzu. Wird deaktiviert wenn eine eigene Inventarkonfiguration vorgenommen wurde.</German>
<Polish>Dodaje `ACE_EarPlugs` - stopery - do wszystkich jednostek, które posiadają głośną broń. Można wyłaczyć w przypadku korzystania z niestandardowych loadoutów.</Polish>
<Russian>Добавляет предмет `ACE_EarPlugs` всем юнитам, которые имеют громкое оружие. Можно отключить при ручной настройке снаряжения.</Russian>
<Portuguese>Adicionar o item `ACE_EarPlugs` a todas as unidades que tenham armas barulhentas. Pode ser desabilitado com carregamentos customizados.</Portuguese>
<Czech>Přidat `ACE_EarPlugs` všem jednotkám které mají zbraň. Můžete vypnout, pokud používáte vlastní výbavu.</Czech>
<Italian>Le unità in possesso di armi assordanti ricevono gli `ACE_EarPlugs`. Si può disabilitare in caso di equipaggiamenti personalizzati.</Italian>
</Key>
</Package>
</Project>
</Project>

View File

@ -171,7 +171,7 @@
</Key>
<Key ID="STR_ACE_HUNTIR_HELP_RES">
<English>R - Reset camera</English>
<German>R - Reset</German>
<German>R - Kamera zurücksetzen</German>
<Spanish>R - Reiniciar camara</Spanish>
<Czech>R - Reset kamery</Czech>
<Russian>R - Сбросить настройки камеры</Russian>
@ -194,4 +194,4 @@
<Portuguese>Esc - Sai do Ajuda</Portuguese>
</Key>
</Package>
</Project>
</Project>

View File

@ -3,14 +3,14 @@
<Package name="Interact_Menu">
<Key ID="STR_ACE_Interact_Menu_AlwaysUseCursorSelfInteraction">
<English>Always display cursor for self interaction</English>
<German>Immer den Cursor für Selbst-Interaktionen anzeigen.</German>
<German>Immer den Mauszeiger für Selbst-Interaktionen anzeigen.</German>
<Spanish>Mostrar siempre el cursor para la interacción propia</Spanish>
<Russian>Показывать курсор (взаимодействия с собой)</Russian>
<Czech>Zobrazit kurzor v menu pro vlastní interakci</Czech>
<Polish>Zawsze wyświetlaj kursor dla własnej interakcji</Polish>
<French>Toujours afficher le curseur pour les interactions sur soi-même</French>
<Hungarian>Mindig legyen a saját cselekvés kurzorja látható</Hungarian>
<Italian>Mostra sempre il cursore per le interazioni su se stessi</Italian>
<Italian>Mostra sempre il cursore delle autointerazioni</Italian>
<Portuguese>Sempre mostrar cursor para interação pessoal</Portuguese>
</Key>
<Key ID="STR_ACE_Interact_Menu_AlwaysUseCursorInteraction">
@ -21,7 +21,7 @@
<Polish>Zawsze wyświetlaj kursor dla interakcji</Polish>
<Russian>Показывать курсор (взаимодействие)</Russian>
<Czech>Zobrazit kurzor v menu pro interakci</Czech>
<German>Immer den Cursor für Fremd-Interaktionen anzeigen</German>
<German>Immer den Mauszeiger für Fremd-Interaktionen anzeigen</German>
<Hungarian>Mindig legyen a cselekvés kurzorja látható</Hungarian>
<Portuguese>Sempre mostrar cursor para interação</Portuguese>
</Key>
@ -87,6 +87,7 @@
</Key>
<Key ID="STR_ACE_Interact_Menu_ZeusActionsRoot">
<English>Zeus Actions</English>
<German>Zeus-Aktionen</German>
<Polish>Akcje Zeusa</Polish>
<Czech>Akce Zeuse</Czech>
<Spanish>Acciones Zeus</Spanish>
@ -94,6 +95,7 @@
<Hungarian>Zeus cselekvések</Hungarian>
<Portuguese>Ações do Zeus</Portuguese>
<Russian>Действия Зевса</Russian>
<Italian>Azioni Zeus</Italian>
</Key>
<Key ID="STR_ACE_Interact_Menu_ColorTextMax">
<English>Interaction - Text Max</English>
@ -147,7 +149,7 @@
<English>Keep cursor centered</English>
<French>Garder le curseur au centre</French>
<Russian>Центрировать курсор</Russian>
<German>Cursor zentriert halten</German>
<German>Mauszeiger zentriert halten</German>
<Hungarian>Kurzor középen tartása</Hungarian>
<Polish>Utrzymaj kursor wyśrodkowany</Polish>
<Spanish>Mantener el cursor centrado</Spanish>
@ -160,7 +162,7 @@
<Czech>Udržuje kurzor na středu. Užitečné, pokud je velikost obrazovky omezena.</Czech>
<French>Garde le curseur au milieu et dispose le menu des options autour. Utile si la taille de l'écran est limitée.</French>
<Russian>Центрирует курсор и двигает само меню опций. Полезно при ограниченном размере экрана.</Russian>
<German>Hält den Cursor zentriert und verschiebt das Menü beim Bewegen. Nützlich bei kleinen Bildschirmen.</German>
<German>Hält den Mauszeiger zentriert und verschiebt das Menü beim Bewegen. Nützlich bei kleinen Bildschirmen.</German>
<Hungarian>Középen tartja a kurzort, és a menüelemeket mozgatja. Hasznos lehetőség korlátozott képméretnél.</Hungarian>
<Polish>Utrzymuje kursor na środku ekranu, zamiast tego ruch myszą powoduje przesuwanie menu interakcji. Użyteczne w przypadku kiedy rozmiar ekranu jest ograniczony.</Polish>
<Spanish>Mantiene el cursor centrado y despliega los menús alrededor. Útil si el tamaño de la pantalla es limitado.</Spanish>
@ -237,6 +239,7 @@
<French>Arrière plan du menu d'interaction</French>
<Hungarian>Cselekvő menü háttere</Hungarian>
<Russian>Фон меню взаимодействия</Russian>
<Italian>Sfondo del menu interazioni</Italian>
</Key>
<Key ID="STR_ACE_Interact_Menu_blurScreenDesc">
<English>Blur the background while the interaction menu is open.</English>
@ -248,6 +251,7 @@
<French>Flouter l'arrière plan durant l'ouverture du menu d'interaction</French>
<Hungarian>A háttér elmosása a cselekvő menü használata alatt.</Hungarian>
<Russian>Размыть фон, пока открыто меню взаимодействия.</Russian>
<Italian>Sfoca lo sfondo mentre il menu interazioni è aperto.</Italian>
</Key>
<Key ID="STR_ACE_Interact_Menu_backgroundBlur">
<English>Blur screen</English>
@ -259,6 +263,7 @@
<French>Flouter l'écran</French>
<Hungarian>Kép elmosása</Hungarian>
<Russian>Размытый</Russian>
<Italian>Sfoca lo schermo</Italian>
</Key>
<Key ID="STR_ACE_Interact_Menu_backgroundBlack">
<English>Black</English>
@ -270,9 +275,11 @@
<French>Noir</French>
<Hungarian>Fekete</Hungarian>
<Russian>Черный</Russian>
<Italian>Nero</Italian>
</Key>
<Key ID="STR_ACE_Interact_Menu_addBuildingActions">
<English>Show actions for buildings</English>
<German>Zeige Aktionen für Gebäude</German>
<Polish>Pokazuj akcje dla budynków</Polish>
<Czech>Zobrazit akci pro budovy</Czech>
<Spanish>Mostrar acciones para edificios</Spanish>
@ -280,9 +287,11 @@
<Hungarian>Cselekvések mutatása épületeknél</Hungarian>
<Portuguese>Mostrar ações para edifícios</Portuguese>
<Russian>Показывать действия для зданий</Russian>
<Italian>Mostra azioni per edifici</Italian>
</Key>
<Key ID="STR_ACE_Interact_Menu_addBuildingActionsDescription">
<English>Adds interaction actions for opening doors and mounting ladders on buildings. (Note: There is a performance cost when opening interaction menu, especially in towns)</English>
<German>Fügt Aktionen zum Türöffnen oder für eine Leiter zum Besteigen von Gebäuden hinzu. (Hinweis: Verschlechtert die Leistung wenn das Interaktionsmenü geöffnet wird. Insbesondere in Städten) </German>
<Polish>Dodaje opcje interakcji dla otwierania drzwi oraz wchodzenia po drabinach do budynków. Uwaga: Użycie tej opcji może spowodować spadek wydajności menu interakcji, szczególnie w dużych miastach.</Polish>
<Czech>Přidá možnost interakce pro otevření dvěří a umistňovat žebříky na budovy. (Poznámka: Použití této možnosti snižuje výkon při otevírání pomocí interakčního menu, zejména ve velkých městech.) </Czech>
<Spanish>Añade las acciones de interacción para la apertura de puertas y montaje de escaleras en los edificios. (Nota: Hay un coste de rendimiento al abrir el menú de interacción, especialmente en las ciudades)</Spanish>
@ -290,17 +299,21 @@
<Hungarian>Cselekvéseket engedélyez ajtók kinyitására és létrák mászására. (Figyelem: ez teljesítményvesztéssel járhat a menü megnyitásakor, főleg városokban)</Hungarian>
<Portuguese>Adiciona ações de interações para abrir portas e montar escadas em edifícios. (Nota: Existe um custo de performance quando aberto o menu de interação, especialmente em cidades)</Portuguese>
<Russian>Добавляет действия открывания дверей и залезания на лестницы для зданий. (Примечание: возможно падение производительности при открытии меню взаимодействия, особенно в городах)</Russian>
<Italian>Aggiunge azioni di interazioni per aprire porte e montare scale agli edifici. (Nota: c'è un costo in performance quando si apre il menu, specialmente nei paesi)</Italian>
</Key>
<Key ID="STR_ACE_Interact_Menu_Category_InteractionMenu">
<English>Interaction Menu</English>
<German>Interaktionsmenü</German>
<Polish>Menu interakcji</Polish>
<Portuguese>Menu de interação</Portuguese>
<Russian>Меню взаимодействия</Russian>
<Czech>Menu interakce</Czech>
<Spanish>Menú de interacción</Spanish>
<Italian>Menu interazione</Italian>
</Key>
<Key ID="STR_ACE_Interact_Menu_menuAnimationSpeed">
<English>Interaction Animation Speed</English>
<German>Interaktionsmenü Animationsgeschwindigkeit</German>
<Polish>Szybkość animacji interakcji</Polish>
<Russian>Скорость анимации меню взаимодействия</Russian>
<Portuguese>Velocidade da animação de interação</Portuguese>
@ -308,10 +321,11 @@
</Key>
<Key ID="STR_ACE_Interact_Menu_menuAnimationSpeed_Description">
<English>Makes menu animations faster and decreases the time needed to hover to show sub actions</English>
<German>Beschleunigt die Menüanmimationen und folglich das Öffnen eines Submenüs. </German>
<Polish>Przyśpiesza animacje menu interakcji oraz czas wymagany do pokazania podmenu</Polish>
<Russian>Ускоряет анимацию меню и уменьшает задержку при наведении мыши для раскрытия подменю</Russian>
<Portuguese>Faz com que as animações do menu de interação sejam mais rápidas, dimiuindo a necessidade de esperar para mostrar as ações</Portuguese>
<Czech>Zrychlí animaci menu a sníží tak čas potřebný pro plné zobrazení podmenu</Czech>
</Key>
</Package>
</Project>
</Project>

View File

@ -1,4 +1,3 @@
class CfgVehicles {
class ACE_Module;
class ACE_ModuleInteraction: ACE_Module {
@ -10,7 +9,6 @@ class CfgVehicles {
isGlobal = 1;
isSingular = 1;
icon = PATHTOF(UI\Icon_Module_Interaction_ca.paa);
class Arguments {
class EnableTeamManagement {
displayName = CSTRING(EnableTeamManagement_DisplayName);
@ -19,7 +17,6 @@ class CfgVehicles {
defaultValue = 1;
};
};
class ModuleDescription {
description = CSTRING(Module_Description);
};
@ -540,6 +537,41 @@ class CfgVehicles {
class ACE_SelfActions {};
};
class Lamps_base_F;
class Land_PortableLight_single_F: Lamps_base_F {
scope = 2;
XEH_ENABLED;
class ACE_Actions {
class ACE_MainActions {
displayName = CSTRING(MainAction);
selection = "";
distance = 2;
condition = "true";
class ACE_LampTurnOn {
displayName = CSTRING(TurnOn);
condition = QUOTE(alive _target && !(_target getVariable [ARR_2('ACE_lampOn',true)]));
statement = QUOTE(_target call DFUNC(switchLamp));
selection = "";
distance = 2;
};
class ACE_LampTurnOff {
displayName = CSTRING(TurnOff);
condition = QUOTE(alive _target && _target getVariable [ARR_2('ACE_lampOn',true)]);
statement = QUOTE(_target call DFUNC(switchLamp));
selection = "";
distance = 2;
};
};
};
};
class Land_PortableLight_single_off_F: Land_PortableLight_single_F {
scope = 1;
};
class Land_PortableLight_double_F: Land_PortableLight_single_F {};
class Land_PortableLight_double_off_F: Land_PortableLight_double_F {
scope = 1;
};
class RoadCone_F: ThingX {
class ACE_Actions {
class ACE_MainActions {

View File

@ -18,6 +18,16 @@ ACE_Modifier = 0;
_unit doMove _position;
}] call EFUNC(common,addEventHandler);
["lampTurnOn", {
params ["_lamp", "_hitPointsDamage", "_disabledLampDMG"];
{if((_x select 1) == _disabledLampDMG) then {_lamp setHit [_x select 0, 0];};nil} count _hitPointsDamage;
}] call EFUNC(common,addEventHandler);
["lampTurnOff", {
params ["_lamp", "_hitPointsDamage", "_disabledLampDMG"];
{_lamp setHit [_x select 0, (_x select 1) max _disabledLampDMG];nil} count _hitPointsDamage;
}] call EFUNC(common,addEventHandler);
if (!hasInterface) exitWith {};
GVAR(isOpeningDoor) = false;
@ -61,7 +71,7 @@ GVAR(isOpeningDoor) = false;
//Tap whichever shoulder is closest
private _shoulderNum = [0, 1] select (([cursorTarget, ACE_player] call BIS_fnc_relativeDirTo) > 180);
// Statement
[ACE_player, cursorTarget, _shoulderNum] call FUNC(tapShoulder);
true

View File

@ -38,4 +38,7 @@ PREP(openDoor);
// interaction with boats
PREP(push);
PREP(switchLamp);
ADDON = true;

View File

@ -0,0 +1,38 @@
/*
* Author: SzwedzikPL
* Turn on/off lamp
*
* Arguments:
* 0: Lamp <OBJECT>
*
* Return value:
* None
*
* Example:
* lamp call ace_interaction_fnc_switchLamp
*
* Public: No
*/
#include "script_component.hpp"
#define DISABLED_LAMP_DMG 0.95
params ["_lamp"];
_isOn = _lamp getVariable ["ACE_lampOn", true];
private _reflectors = "true" configClasses (configfile >> "CfgVehicles" >> (typeof _lamp) >> "Reflectors");
private _hitPointsDamage = [];
{
private _hitPoint = getText (_x >> "hitpoint");
_hitPointsDamage pushback [_hitPoint, _lamp getHit _hitPoint];
nil
} count _reflectors;
//if lamp is on turn it off
private _eventName = ["lampTurnOn", "lampTurnOff"] select _isOn;
if(local _lamp) then {
[_eventName, [_lamp, _hitPointsDamage, DISABLED_LAMP_DMG]] call EFUNC(common,localEvent);
} else {
[_eventName, [_lamp], [_lamp, _hitPointsDamage, DISABLED_LAMP_DMG]] call EFUNC(common,targetEvent);
};
_lamp setVariable ["ACE_lampOn", !_isOn, true];

View File

@ -351,6 +351,7 @@
</Key>
<Key ID="STR_ACE_Interaction_GetOut">
<English>Get Out</English>
<Polish>Wyjdź</Polish>
</Key>
<Key ID="STR_ACE_Interaction_TeamManagement">
<English>Team Management</English>
@ -649,6 +650,7 @@
<Hungarian>Nyitás</Hungarian>
<Portuguese>Abrir</Portuguese>
<Russian>Открыть</Russian>
<Italian>Apri</Italian>
</Key>
<Key ID="STR_ACE_Interaction_Module_DisplayName">
<English>Interaction System</English>
@ -660,6 +662,7 @@
<French>Système d'interaction</French>
<Hungarian>Interakciós rendszer</Hungarian>
<Portuguese>Sistema de interação</Portuguese>
<Italian>Sistema di interazioni</Italian>
</Key>
<Key ID="STR_ACE_Interaction_EnableTeamManagement_DisplayName">
<English>Enable Team Management</English>
@ -671,6 +674,7 @@
<French>Active la gestion d'équipe</French>
<Hungarian>Csapatkezelés engedélyezése</Hungarian>
<Portuguese>Habilitar gestão de equipes</Portuguese>
<Italian>Abilita la gestione del team</Italian>
</Key>
<Key ID="STR_ACE_Interaction_EnableTeamManagement_Description">
<English>Should players be allowed to use the Team Management Menu? Default: Yes</English>
@ -682,6 +686,7 @@
<French>Permettre aux joueurs d'utiliser la gestion de groupe? Défaut: oui</French>
<Hungarian>A játékosoknak engedélyezve legyen a csapatkezelő menü? Alapértelmezett: Igen</Hungarian>
<Portuguese>Devem os jogadores ter permissão de usar o menu de gestão de equipes? Padrão: Sim</Portuguese>
<Italian>Possono i giocatori usare il menu di gestione del team? Default: Sì</Italian>
</Key>
<Key ID="STR_ACE_Interaction_Module_Description">
<English>Team management allows color allocation for team members, taking team command and joining/leaving teams.</English>
@ -693,6 +698,15 @@
<Hungarian>A csapatkezelés engedélyezi a tagok színének meghatározását, a vezetés átvételét, és csapatoknál be-és kilépést.</Hungarian>
<Portuguese>O módulo de gestão de equipe é composto por: a atribuição de cores para os membros da equipe, comando das equipes, juntando-se / deixando equipes.</Portuguese>
<Russian>Управление группами позволяет назначать цвета членам групп, брать командование, вступать в группы или покидать их.</Russian>
<Italian>La gestione del team permette di cambiare colori ai membri, prendere il comando e lasciare o unirsi ai team.</Italian>
</Key>
<Key ID="STR_ACE_Interaction_TurnOn">
<English>Turn on</English>
<Polish>Włącz</Polish>
</Key>
<Key ID="STR_ACE_Interaction_TurnOff">
<English>Turn off</English>
<Polish>Wyłącz</Polish>
</Key>
<Key ID="STR_ACE_Interaction_PassMagazine">
<English>Pass magazine</English>
@ -735,4 +749,4 @@
<Czech>Zobrazit "interakci "podat zásobník"</Czech>
</Key>
</Package>
</Project>
</Project>

View File

@ -29,36 +29,43 @@
<English>Backpacks</English>
<German>Rucksäcke</German>
<Czech>Batohy</Czech>
<Polish>Plecaki</Polish>
</Key>
<Key ID="STR_ACE_Inventory_Headgear">
<English>Headgear</English>
<German>Kopfbedeckungen</German>
<Czech>Pokrývka hlavy</Czech>
<Polish>Hełmy</Polish>
</Key>
<Key ID="STR_ACE_Inventory_Glasses">
<English>Glasses</English>
<German>Brillen</German>
<Czech>Brýle</Czech>
<Polish>Gogle</Polish>
</Key>
<Key ID="STR_ACE_Inventory_Uniforms">
<English>Uniforms</English>
<German>Uniformen</German>
<Czech>Uniformy</Czech>
<Polish>Uniformy</Polish>
</Key>
<Key ID="STR_ACE_Inventory_Vests">
<English>Vests</English>
<German>Westen</German>
<Czech>Vesty</Czech>
<Polish>Kamizelki</Polish>
</Key>
<Key ID="STR_ACE_Inventory_Grenades">
<English>Grenades</English>
<German>Granaten</German>
<Czech>Granáty</Czech>
<Polish>Granaty</Polish>
</Key>
<Key ID="STR_ACE_Inventory_Medical">
<English>Medical</English>
<German>Sanimaterial</German>
<German>Sanitätsmaterial</German>
<Czech>Lékařské vybavení</Czech>
<Polish>Medyczne</Polish>
</Key>
</Package>
</Project>
</Project>

View File

@ -17,18 +17,18 @@ class CfgVehicles {
class B_Heli_Attack_01_F: Heli_Attack_01_base_F {
class Turrets: Turrets {
class MainTurret: MainTurret {
GVAR(Enabled) = 1; // Enable laser self-designation
GVAR(Enabled) = 0; // Enable laser self-designation
};
};
};
class Plane: Air {};
class Plane_Base_F: Plane {
class Turrets {
class CopilotTurret;
};
};
/* @TODO: LGB GBU
class Plane_CAS_01_base_F: Plane_Base_F {
class Turrets: Turrets {

View File

@ -3,28 +3,21 @@
* Handler function for laser network code.
*
* Argument:
* 0: Emitter
* 1: Owner
*
* Return value:
* [position, direction]
* 0: Emitter <OBJECT>
*
* Return Value:
* 0: position <ARRAY>
* 1: direction <ARRAY>
*
* Public: No
*/
//findLaserSource.sqf
//#define DEBUG_MODE_FULL
#include "script_component.hpp"
private["_emmiter", "_owner", "_gunnerInfo", "_turretInfo", "_povPos", "_povDir"];
_emmiter = _this select 0;
_owner = _this select 1;
private["_gunnerInfo", "_turretInfo"];
params ["_emmiter"];
_gunnerInfo = [_emmiter, (currentWeapon _emmiter)] call CBA_fnc_getFirer;
_turretInfo = [_emmiter, _gunnerInfo select 1] call EFUNC(common,getTurretDirection);
_povPos = _turretInfo select 0;
_povDir = _turretInfo select 1;
_turretInfo params [["_povPos", -1], ["_povDir", -1]];
if(!isNil "_povPos" && !isNil "_povDir") exitWith {
[_povPos, _povDir]
};
[-1,-1]
[_povPos, _povDir]

View File

@ -2,15 +2,17 @@
* Author: esteldunedain
* Initializes the actions for turning on/off the laser for vehicles that have them
*
* Argument:
* Arguments:
* 0: Vehicle <OBJECT>
*
* Return value:
* NONE.
* Return Value:
* None
*
* Public: No
*/
#include "script_component.hpp"
EXPLODE_1_PVT(_this,_vehicle);
params ["_vehicle"];
// Add action to class if it is not already done
private ["_type", "_initializedClasses"];

View File

@ -6,15 +6,14 @@
* 0: Shooter, player shooting the laser
* 1: LaserUUID, the UUID of the laser returned by EFUNC(laser,laserOn)
* 2: Local laser target, unused.
*
* Return value:
* true
*
* Return Value:
* True <BOOL>
*/
#include "script_component.hpp"
if( (count _this) > 2) then {
EXPLODE_3_PVT(_this,_shooter,_laserUuid,_localLaserTarget);
params ["", "_laserUuid"];
[_laserUuid] call EFUNC(laser,laserOff);
// @TODO: Nou gets to field all tickets about missing lasers.
//deleteVehicle _localLaserTarget;
@ -27,4 +26,4 @@ if(!isNil QGVAR(selfDesignateHandle)) then {
GVAR(selfDesignateHandle) = nil;
};
true
true

View File

@ -3,12 +3,14 @@
* Turns on laser self designation from this vehicle based on the turret.
* There are no arguments, because it is all strictly based on the users vehicle.
*
* Argument:
* Arguments:
* None
*
* Return value:
* N/A
* Return Value:
* None
*
* Public: No
*/
//#define DEBUG_MODE_FULL
#include "script_component.hpp"
TRACE_1("enter", _this);
@ -17,20 +19,18 @@ TRACE_1("enter", _this);
FUNC(laserHudDesignatePFH) = {
private["_strongestResultPos", "_args", "_localLaserTarget", "_laserResultPosition", "_laserResult", "_shooter", "_vehicle", "_weapon", "_gunnerInfo", "_turretInfo", "_pov", "_gunBeg", "_gunEnd", "_povPos", "_povDir", "_result", "_resultPositions", "_firstResult", "_forceUpdateTime"];
_args = _this select 0;
_shooter = _args select 0;
_localLaserTarget = _args select 2;
params ["_args"];
_args params ["_shooter", "_localLaserTarget"];
_vehicle = vehicle _shooter;
TRACE_1("", _args);
if((vehicle _shooter) == _shooter || {!alive _shooter} || {isNull _vehicle} || {!GVAR(active)} ) exitWith {
if((vehicle _shooter) == _shooter || {!alive _shooter} || {isNull _vehicle} || {!GVAR(active)} ) exitWith {
_args call FUNC(laserHudDesignateOff);
};
if(!([_shooter] call FUNC(unitTurretHasDesignator)) ) exitWith {
_args call FUNC(laserHudDesignateOff);
};
if( (count _args) < 4) then {
_args set[3, ACE_diagTime + FCS_UPDATE_DELAY];
};
@ -38,15 +38,15 @@ FUNC(laserHudDesignatePFH) = {
// @TODO: We don't have anything here we need to do the calculations for right now
/*
_gunnerInfo = [_vehicle, (currentWeapon _vehicle)] call CBA_fnc_getFirer;
_turretInfo = [_vehicle, _gunnerInfo select 1] call EFUNC(common,getTurretDirection);
_povPos = _turretInfo select 0;
_laserCode = (vehicle ACE_player) getVariable["ace_laser_code", ACE_DEFAULT_LASER_CODE];
_waveLength = (vehicle ACE_player) getVariable["ace_laser_waveLength", ACE_DEFAULT_LASER_WAVELENGTH];
_laserResult = [_povPos, [_waveLength,_waveLength], _laserCode] call EFUNC(laser,seekerFindLaserSpot);
_laserResultPosition = _laserResult select 0;
TRACE_1("Search", _laserResult);
@ -56,12 +56,12 @@ FUNC(laserHudDesignatePFH) = {
//_localLaserTarget setPosASL _laserResultPosition;
};
*/
if(ACE_diagTime > _forceUpdateTime) then {
["ace_fcs_forceUpdate", []] call ace_common_fnc_localEvent;
_args set[3, ACE_diagTime + FCS_UPDATE_DELAY];
};
_this set[0, _args];
};
@ -69,23 +69,22 @@ private ["_laserTarget", "_handle", "_vehicle", "_laserUuid", "_waveLength", "_b
if(!GVAR(active)) then {
GVAR(active) = true;
TRACE_1("Activating laser", "");
// Get the self-designation variables, or use defaults
_laserCode = (vehicle ACE_player) getVariable["ace_laser_code", ACE_DEFAULT_LASER_CODE];
_waveLength = (vehicle ACE_player) getVariable["ace_laser_waveLength", ACE_DEFAULT_LASER_WAVELENGTH];
_beamSpread = (vehicle ACE_player) getVariable["ace_laser_beamSpread", ACE_DEFAULT_LASER_BEAMSPREAD];
_laserUuid = [(vehicle ACE_player), ACE_player, QFUNC(findLaserSource), _waveLength, _laserCode, _beamSpread] call EFUNC(laser,laserOn);
// @TODO: Create the local target for the players side
// @TODO: Nou gets to field all tickets about missing lasers.
//_localLaserTarget = "LaserTargetW" createVehicleLocal (getpos ACE_player);
GVAR(selfDesignateHandle) = [FUNC(laserHudDesignatePFH), 0.1, [ACE_player, _laserUuid, nil]] call CBA_fnc_addPerFrameHandler;
} else {
[] call FUNC(laserHudDesignateOff);
[] call FUNC(laserHudDesignateOn);
};

View File

@ -2,15 +2,17 @@
* Author: esteldunedain
* Checks if the turret occupied by the given unit has a laser designator
*
* Argument:
* Arguments:
* 0: Unit <OBJECT>
*
* Return value:
* Has designator? <BOOL>
* Return Value:
* Has unit designator <BOOL>
*
* Public: No
*/
#include "script_component.hpp"
EXPLODE_1_PVT(_this,_unit);
params ["_unit"];
// Get the player turret path
private ["_turret","_config","_turretConfig"];

View File

@ -8,7 +8,7 @@
<French>Réorganiser les chargeurs</French>
<Polish>Przepakuj magazynki</Polish>
<Czech>Přepáskovat zásobníky</Czech>
<Italian>Ricarica caricatori</Italian>
<Italian>Riempi i caricatori</Italian>
<Portuguese>Reorganizar Carregadores</Portuguese>
<Hungarian>Újratárazás </Hungarian>
<Russian>Перепаковать магазины</Russian>
@ -44,7 +44,7 @@
<French>Réorganisation des chargeurs ...</French>
<Polish>Przepakowywanie magazynków ...</Polish>
<Czech>Přepáskovávám zásobník ...</Czech>
<Italian>Sto ricaricando le munizioni ...</Italian>
<Italian>Sto riempendo i caricatori ...</Italian>
<Portuguese>Reorganizando Carregadores ...</Portuguese>
<Hungarian>Újratárazás ...</Hungarian>
<Russian>Перепаковка магазинов ...</Russian>
@ -56,7 +56,7 @@
<French>Chargeurs réorganisés</French>
<Polish>Magazynki przepakowane</Polish>
<Czech>Přepáskované zásobníky</Czech>
<Italian>Caricatore ricaricato</Italian>
<Italian>Caricatore riempito</Italian>
<Portuguese>Carregadores Reorganizados</Portuguese>
<Hungarian>Újratárazott tárak</Hungarian>
<Russian>Магазины перепакованы</Russian>
@ -68,7 +68,7 @@
<French>%1 chargeur(s) plein(s) et %2 cartouche(s) en rab</French>
<Polish>Pełnych magazynków: %1.&lt;br/&gt;Dodatkowych naboi: %2.</Polish>
<Czech>%1 plný zásobník(y) a %2 munice navíc</Czech>
<Italian>%1 caricatore(i) pieno e %2 munizioni extra</Italian>
<Italian>%1 caricatore(i) pieno e %2 munizione(i) extra</Italian>
<Portuguese>%1 carregador(es) cheio(s) e %2 disparo(s) a mais</Portuguese>
<Hungarian>%1 teljes tár és %2 extra lőszer</Hungarian>
<Russian>%1 полных магазина(ов) и %2 патрона(ов)</Russian>
@ -82,7 +82,7 @@
<Czech>Páskování dokončeno</Czech>
<Polish>Przepakowywanie zakończone</Polish>
<Hungarian>Újratárazás befejezve</Hungarian>
<Italian>Riempi caricatore</Italian>
<Italian>Caricatori riempiti</Italian>
<Portuguese>Reorganização Terminada</Portuguese>
</Key>
<Key ID="STR_ACE_MagazineRepack_RepackInterrupted">
@ -100,7 +100,7 @@
<Key ID="STR_ACE_MagazineRepack_RepackedMagazinesCount">
<English>%1 Full and %2 Partial</English>
<French>%1 plein(s) et %2 partiel(s)</French>
<German>%1 Vollständigen und %2 Teilweisen</German>
<German>%1 volle Magazine und 1 Magazin mit %2 Partronen</German>
<Spanish>%1 Llenos y %2 Incompletos</Spanish>
<Russian>%1 полных и %2 неполных</Russian>
<Czech>%1 plný a %2 částečně</Czech>
@ -110,4 +110,4 @@
<Portuguese>%1 Total e %2 Parcial </Portuguese>
</Key>
</Package>
</Project>
</Project>

View File

@ -5,7 +5,7 @@
#define MAJOR 3
#define MINOR 4
#define PATCHLVL 2
#define PATCHLVL 3
#define BUILD 0
#define VERSION MAJOR.MINOR.PATCHLVL.BUILD

View File

@ -9,6 +9,7 @@
<Russian>ACE: логистика</Russian>
<Czech>ACE Logistika</Czech>
<Spanish>ACE Logística</Spanish>
<Italian>Logistica ACE</Italian>
</Key>
</Package>
</Project>

View File

@ -11,6 +11,7 @@
<French>Carte</French>
<Hungarian>Térkép</Hungarian>
<Russian>Карта</Russian>
<Italian>Mappa</Italian>
</Key>
<Key ID="STR_ACE_Map_MapIllumination_DisplayName">
<English>Map illumination?</English>
@ -22,6 +23,7 @@
<French>Luminosité</French>
<Hungarian>Térkép megvilágítása?</Hungarian>
<Russian>Освещение карты?</Russian>
<Italian>Illuminazione della mappa</Italian>
</Key>
<Key ID="STR_ACE_Map_MapIllumination_Description">
<English>Simulate map lighting based on ambient lighting and player's items?</English>
@ -32,6 +34,7 @@
<Portuguese>Simular a luz do mapa baseado em luz ambiente e itens do jogador?</Portuguese>
<Spanish>Simular iluminación de mapa basada en la iluminación ambiente y los elementos de los jugadores?</Spanish>
<Czech>Simulovat nasvícení mapy v závisloti na okolí a předmětů hráče?</Czech>
<Italian>Simula la illuminazione sulla mappa in base alla luce ambientale e oggetti del giocatore?</Italian>
</Key>
<Key ID="STR_ACE_Map_MapGlow_DisplayName">
<English>Map flashlight glow?</English>
@ -51,6 +54,7 @@
<Portuguese>Adicionar brilho externo para jogadores que usam lanterna no mapa?</Portuguese>
<Spanish>Añadir resplandor externo a los jugadores que utilizan la linterna en el mapa?</Spanish>
<Czech>Přidat externí záři hráči který používá baterku v mapě?</Czech>
<Italian>Aggiunge un bagliore al giocatore che usa una lampada tascabile sulla mappa?</Italian>
</Key>
<Key ID="STR_ACE_Map_MapShake_DisplayName">
<English>Map shake?</English>
@ -62,6 +66,7 @@
<French>Tremblement de la carte?</French>
<Hungarian>Térkép-rázkódás?</Hungarian>
<Russian>Тряска карты?</Russian>
<Italian>Tremore della mappa?</Italian>
</Key>
<Key ID="STR_ACE_Map_MapShake_Description">
<English>Make map shake when walking?</English>
@ -73,6 +78,7 @@
<French>La carte tremble lors d'un déplacement ?</French>
<Hungarian>Rázkódjon-e a térkép mozgáskor?</Hungarian>
<Russian>Заставлять карту трястись при ходьбе?</Russian>
<Italian>Fa ballare la mappa camminando?</Italian>
</Key>
<Key ID="STR_ACE_Map_MapLimitZoom_DisplayName">
<English>Limit map zoom?</English>
@ -84,6 +90,7 @@
<French>Limiter le zoom de la carte?</French>
<Hungarian>Térkép-nagyítás korlátozása?</Hungarian>
<Russian>Ограничить приближение карты?</Russian>
<Italian>Limita zoom della mappa?</Italian>
</Key>
<Key ID="STR_ACE_Map_MapLimitZoom_Description">
<English>Limit the amount of zoom available for the map?</English>
@ -95,6 +102,7 @@
<French>Limite le zoom maximum pour la carte?</French>
<Hungarian>Korlátozva legyen-e a nagyítás mennyisége a térképnél?</Hungarian>
<Russian>Ограничить максимальное приближение, доступное на карте?</Russian>
<Italian>Limita l'ammontare di zoom disponibile per la mappa?</Italian>
</Key>
<Key ID="STR_ACE_Map_MapShowCursorCoordinates_DisplayName">
<English>Show cursor coordinates?</English>
@ -106,6 +114,7 @@
<French>Afficher les coordonnées sur le curseur ?</French>
<Hungarian>Kurzor-koordináták mutatása?</Hungarian>
<Russian>Показывать координаты курсора?</Russian>
<Italian>Mostra le coordinate nel cursore?</Italian>
</Key>
<Key ID="STR_ACE_Map_MapShowCursorCoordinates_Description">
<English>Show the grid coordinates on the mouse pointer?</English>
@ -117,6 +126,7 @@
<French>Affiche les coordonnées à coté du curseur ?</French>
<Hungarian>Mutatva legyen-e a kurzornál található rész rácskoordinátája?</Hungarian>
<Russian>Показывать координаты около курсора мыши?</Russian>
<Italian>Mostra le coordinate nel puntatore del mouse?</Italian>
</Key>
<Key ID="STR_ACE_Map_Module_Description">
<English>This module allows you to customize the map screen.</English>
@ -128,6 +138,7 @@
<Hungarian>Ez a modul lehetővé teszi a térképnézet testreszabását.</Hungarian>
<Russian>Этот модуль позволяет настроить отображение карты.</Russian>
<Spanish>Este módulo permite personalizar la pantalla del mapa.</Spanish>
<Italian>Questo modulo permette di regolare lo schermo della mappa.</Italian>
</Key>
<Key ID="STR_ACE_Map_BFT_Module_DisplayName">
<English>Blue Force Tracking</English>
@ -139,6 +150,7 @@
<French>Blue Force Tracking</French>
<Hungarian>Blue Force követés</Hungarian>
<Russian>Система слежения Blue Force Tracking</Russian>
<Italian>Segue le forze alleate</Italian>
</Key>
<Key ID="STR_ACE_Map_BFT_Enabled_DisplayName">
<English>BFT Enable</English>
@ -150,6 +162,7 @@
<French>Activer le Suivi des Forces Alliées</French>
<Hungarian>BFT engedélyezése</Hungarian>
<Russian>Включить BFT</Russian>
<Italian>Attiva BFT</Italian>
</Key>
<Key ID="STR_ACE_Map_BFT_Enabled_Description">
<English>Enable Blue Force Tracking. Default: No</English>
@ -161,6 +174,7 @@
<French>Activer le SFA. Défaut: non</French>
<Hungarian>Blue Force követés engedélyezése. Alapértelmezett: Nem</Hungarian>
<Russian>Включает систему служения BFT. По-умолчанию: Нет</Russian>
<Italian>Abilita a seguire le forze alleate (BFT). Predefinito:No</Italian>
</Key>
<Key ID="STR_ACE_Map_BFT_Interval_DisplayName">
<English>Interval</English>
@ -172,6 +186,7 @@
<French>Intervalle</French>
<Hungarian>Intervallum</Hungarian>
<Russian>Интервал</Russian>
<Italian>Intervallo</Italian>
</Key>
<Key ID="STR_ACE_Map_BFT_Interval_Description">
<English>How often the markers should be refreshed (in seconds)</English>
@ -183,6 +198,7 @@
<French>Fréquence de rafraîchissement des marqueurs ?</French>
<Hungarian>Milyen gyakran frissüljenek a jelölők (másodpercben)</Hungarian>
<Russian>Как часто должны обновляться маркеры (в секундах)</Russian>
<Italian>Quanto spesso i marker devono essere aggiornati (in secondi)</Italian>
</Key>
<Key ID="STR_ACE_Map_BFT_HideAiGroups_DisplayName">
<English>Hide AI groups?</English>
@ -194,6 +210,7 @@
<French>Cacher les groupes IA ?</French>
<Hungarian>AI csoportok elrejtése?</Hungarian>
<Russian>Скрыть группы ботов?</Russian>
<Italian>Nascondi le AI?</Italian>
</Key>
<Key ID="STR_ACE_Map_BFT_HideAiGroups_Description">
<English>Hide markers for 'AI only' groups?</English>
@ -205,6 +222,7 @@
<French>Cacher les marqueurs pour les groupes d'IA seulement ?</French>
<Hungarian>Jelölők elrejtése "csak AI" csoportoknál?</Hungarian>
<Russian>Скрыть маркеры групп, которые состоят полностью из ботов?</Russian>
<Italian>Nascondi i marker dei gruppi 'Solo AI' ?</Italian>
</Key>
<Key ID="STR_ACE_Map_BFT_Module_Description">
<English>This module allows the tracking of allied units with BFT map markers.</English>
@ -216,6 +234,7 @@
<Hungarian>Ez a modul lehetővé teszi a szövetséges egységek követését BFT térképjelzőjkkel.</Hungarian>
<Russian>Этот модуль позволяет отслеживать перемещение союзных войск по карте при помощи маркеров BFT.</Russian>
<Spanish>Este módulo permite el seguimiento de las unidades aliadas con marcadores de mapa BFT.</Spanish>
<Italian>Questo modulo permette di seguire le truppe alleate con i marker di mappa BFT.</Italian>
</Key>
<Key ID="STR_ACE_Map_Action_Flashlights">
<English>Flashlights</English>
@ -226,6 +245,7 @@
<Russian>Фонари</Russian>
<Czech>Svítilny</Czech>
<Spanish>Linternas</Spanish>
<Italian>Torcia elettrica</Italian>
</Key>
<Key ID="STR_ACE_Map_Action_NVG">
<English>NVG</English>
@ -236,6 +256,7 @@
<Russian>ПНВ</Russian>
<Czech>NVG</Czech>
<Spanish>NVG</Spanish>
<Italian>Visore notturno</Italian>
</Key>
<Key ID="STR_ACE_Map_Action_NVGOn">
<English>On</English>
@ -246,6 +267,7 @@
<Russian>Вкл.</Russian>
<Czech>Zapnout</Czech>
<Spanish>Encendido</Spanish>
<Italian>Acceso</Italian>
</Key>
<Key ID="STR_ACE_Map_Action_NVGOff">
<English>Off</English>
@ -256,6 +278,7 @@
<Russian>Выкл.</Russian>
<Czech>Vypnout</Czech>
<Spanish>Apagado</Spanish>
<Italian>Spento</Italian>
</Key>
<Key ID="STR_ACE_Map_Action_NVGUp">
<English>Increase Brightness</English>
@ -266,6 +289,7 @@
<Russian>Увеличить яркость</Russian>
<Czech>Zvýšit jas</Czech>
<Spanish>Aumentar brillo</Spanish>
<Italian>Aumenta la luminosità</Italian>
</Key>
<Key ID="STR_ACE_Map_Action_NVGDown">
<English>Decrease Brightness</English>
@ -276,6 +300,7 @@
<Russian>Уменьшить яркость</Russian>
<Czech>Snížit jas</Czech>
<Spanish>Reducir brillo</Spanish>
<Italian>Diminuisce la luminosità</Italian>
</Key>
<Key ID="STR_ACE_Map_turnLightOn">
<English>Turn On %1</English>

View File

@ -0,0 +1,48 @@
class Cfg3DEN {
class Object {
class AttributeCategories {
class ace_attributes {
class Attributes {
class ace_isMedic {
property = QUOTE(ace_isMedic);
value = 0;
control = "Combo";
displayName = CSTRING(AssignMedicRoles_role_DisplayName);
tooltip = CSTRING(Attributes_isMedic_Description);
expression = QUOTE(_this setVariable [ARR_2(QUOTE(QGVAR(medicClass)),_value)];);
typeName = "NUMBER";
condition = "objectBrain";
defaultValue = 0;
class values {
class none {name = CSTRING(AssignMedicRoles_role_none); value = 0; default = 1;};
class medic {name = CSTRING(AssignMedicRoles_role_medic); value = 1; default = 0;};
class doctor {name = CSTRING(AssignMedicRoles_role_doctor); value = 2; default = 0;};
};
};
class ace_isMedicalVehicle {
property = QUOTE(ace_isMedicalVehicle);
value = 0;
control = "CheckboxNumber";
displayName = CSTRING(AssignMedicVehicle_enabled_DisplayName);
tooltip = CSTRING(Attributes_isMedicalVehicle_Description);
expression = QUOTE(_this setVariable [ARR_2(QUOTE(QGVAR(medicClass)),_value)];);
typeName = "NUMBER";
condition = "objectVehicle";
defaultValue = 0;
};
class ace_isMedicalFacility {
property = QUOTE(ace_isMedicalFacility);
value = 0;
control = "Checkbox";
displayName = CSTRING(AssignMedicalFacility_enabled_DisplayName);
tooltip = CSTRING(AssignMedicalFacility_enabled_Description);
expression = QUOTE(_this setVariable [ARR_2(QUOTE(QGVAR(isMedicalFacility)),_value)];);
typeName = "BOOL";
condition = "(1 - objectBrain) * (1 - objectVehicle)";
defaultValue = "false";
};
};
};
};
};
};

View File

@ -11,8 +11,27 @@ GVAR(heartBeatSounds_Slow) = ["ACE_heartbeat_slow_1", "ACE_heartbeat_slow_2"];
["interactMenuClosed", {[objNull, false] call FUNC(displayPatientInformation); }] call EFUNC(common,addEventHandler);
//Treatment EventHandlers:
["medical_advMedication", FUNC(treatmentAdvanced_medicationLocal)] call EFUNC(common,addEventHandler);
["actionCheckBloodPressureLocal", DFUNC(actionCheckBloodPressureLocal)] call EFUNC(common,addEventHandler);
["actionCheckPulseLocal", DFUNC(actionCheckPulseLocal)] call EFUNC(common,addEventHandler);
["addToInjuredCollection", DFUNC(addToInjuredCollection)] call EFUNC(common,addEventHandler);
["addToMedicalLog", DFUNC(addToLog)] call EFUNC(common,addEventHandler);
["addToTriageList", DFUNC(addToTriageList)] call EFUNC(common,addEventHandler);
["setDead", DFUNC(setDead)] call EFUNC(common,addEventHandler);
["setHitPointDamage", DFUNC(setHitPointDamage)] call EFUNC(common,addEventHandler);
["setUnconscious", DFUNC(setUnconscious)] call EFUNC(common,addEventHandler);
["treatmentAdvanced_bandageLocal", DFUNC(treatmentAdvanced_bandageLocal)] call EFUNC(common,addEventHandler);
["treatmentAdvanced_CPRLocal", DFUNC(treatmentAdvanced_CPRLocal)] call EFUNC(common,addEventHandler);
["treatmentAdvanced_fullHealLocal", DFUNC(treatmentAdvanced_fullHealLocal)] call EFUNC(common,addEventHandler);
["treatmentAdvanced_medicationLocal", DFUNC(treatmentAdvanced_medicationLocal)] call EFUNC(common,addEventHandler);
["treatmentBasic_bandageLocal", DFUNC(treatmentBasic_bandageLocal)] call EFUNC(common,addEventHandler);
["treatmentBasic_bloodbagLocal", DFUNC(treatmentBasic_bloodbagLocal)] call EFUNC(common,addEventHandler);
["treatmentBasic_morphineLocal", DFUNC(treatmentBasic_morphineLocal)] call EFUNC(common,addEventHandler);
["treatmentIVLocal", DFUNC(treatmentIVLocal)] call EFUNC(common,addEventHandler);
["treatmentTourniquetLocal", DFUNC(treatmentTourniquetLocal)] call EFUNC(common,addEventHandler);
["actionPlaceInBodyBag", FUNC(actionPlaceInBodyBag)] call EFUNC(common,addEventHandler);
//Handle Deleting Bodies on Server:
if (isServer) then {["placedInBodyBag", FUNC(serverRemoveBody)] call EFUNC(common,addEventHandler);};
["medical_onUnconscious", {
params ["_unit", "_status"];

View File

@ -66,6 +66,7 @@ PREP(onPropagateWound);
PREP(parseConfigForInjuries);
PREP(playInjuredSound);
PREP(selectionNameToNumber);
PREP(serverRemoveBody);
PREP(setCardiacArrest);
PREP(setDead);
PREP(setHitPointDamage);

View File

@ -18,8 +18,8 @@ class CfgPatches {
#include "CfgVehicles.hpp"
#include "CfgWeapons.hpp"
#include "CfgSounds.hpp"
#include "CfgEden.hpp"
#include "ACE_Medical_Treatments.hpp"
#include "ACE_Settings.hpp"
#include "UI\RscTitles.hpp"
#include "UI\triagecard.hpp"

View File

@ -15,4 +15,8 @@
#include "script_component.hpp"
params ["_caller", "_target", "_selectionName"];
[[_caller, _target, _selectionName], QUOTE(DFUNC(actionCheckBloodPressureLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */
if (local _target) then {
["actionCheckBloodPressureLocal", [_caller, _target, _selectionName]] call EFUNC(common,localEvent);
} else {
["actionCheckBloodPressureLocal", _target, [_caller, _target, _selectionName]] call EFUNC(common,targetEvent);
};

View File

@ -15,5 +15,8 @@
#include "script_component.hpp"
params ["_caller","_target", "_selectionName"];
[[_caller, _target, _selectionName], QUOTE(DFUNC(actionCheckPulseLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */
if (local _target) then {
["actionCheckPulseLocal", [_caller, _target, _selectionName]] call EFUNC(common,localEvent);
} else {
["actionCheckPulseLocal", _target, [_caller, _target, _selectionName]] call EFUNC(common,targetEvent);
};

View File

@ -7,35 +7,46 @@
* 1: The patient <OBJECT>
*
* Return Value:
* body bag <OBJECT>
* body bag (will return objNull when run where target is not local) <OBJECT>
*
* Example:
* [player, cursorTarget] call ace_medical_fnc_actionPlaceInBodyBag
*
* Public: Yes
*/
#include "script_component.hpp"
private ["_position", "_headPos", "_spinePos", "_dirVect", "_direction", "_bodyBag"];
params ["_caller", "_target"];
TRACE_2("params",_caller,_target);
if (!local _target) exitWith {
TRACE_1("running where local",local _target);
["actionPlaceInBodyBag", [_target], [_caller, _target]] call EFUNC(common,targetEvent);
objNull
};
if (alive _target) then {
TRACE_1("manually killing with setDead",_target);
[_target, true] call FUNC(setDead);
};
_position = (getPosASL _target) vectorAdd [0, 0, 0.2];
private _position = (getPosASL _target) vectorAdd [0, 0, 0.2];
_headPos = _target modelToWorldVisual (_target selectionPosition "head");
_spinePos = _target modelToWorldVisual (_target selectionPosition "Spine3");
_dirVect = _headPos vectorFromTo _spinePos;
_direction = _dirVect call CBA_fnc_vectDir;
private _headPos = _target modelToWorldVisual (_target selectionPosition "head");
private _spinePos = _target modelToWorldVisual (_target selectionPosition "Spine3");
private _dirVect = _headPos vectorFromTo _spinePos;
private _direction = _dirVect call CBA_fnc_vectDir;
_bodyBag = createVehicle ["ACE_bodyBagObject", _position, [], 0, "CAN_COLLIDE"];
//move the body away now, so it won't physX the bodyBag object (this setPos seems to need to be called where object is local)
_target setPosASL [-5000, -5000, 0];
["placedInBodyBag", [_target, _bodyBag]] call EFUNC(common,globalEvent);
deleteVehicle _target;
private _bodyBag = createVehicle ["ACE_bodyBagObject", _position, [], 0, ""];
// prevent body bag from flipping
_bodyBag setPosASL _position;
_bodyBag setDir _direction;
["placedInBodyBag", [_target, _bodyBag]] call EFUNC(common,globalEvent); //hide and delete body on server
_bodyBag

View File

@ -44,7 +44,7 @@ TRACE_2("meds",_part,_delayedMedications);
_x params ["", "", "_medPartNum"];
if (_part == _medPartNum) then {
TRACE_1("delayed medication call after tourniquet removeal",_x);
["medical_advMedication", [_target], _x] call EFUNC(common,targetEvent);
["treatmentAdvanced_medicationLocal", [_target], _x] call EFUNC(common,targetEvent);
_delayedMedications set [_forEachIndex, -1];
_updatedArray = true;
};

View File

@ -18,7 +18,7 @@ params ["_unit", ["_force", false]];
if ([_unit] call FUNC(hasMedicalEnabled) || _force) then {
if !(local _unit) exitWith {
[[_unit, _force], QUOTE(DFUNC(addToInjuredCollection)), _unit] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */
["addToInjuredCollection", _unit, [_unit, _force]] call EFUNC(common,targetEvent);
};
if ((_unit getVariable[QGVAR(addedToUnitLoop),false] || !alive _unit) && !_force) exitWith{};

View File

@ -20,7 +20,7 @@ private ["_moment", "_logVarName", "_log","_newLog", "_logs"];
params ["_unit", "_type", "_message", "_arguments"];
if (!local _unit) exitWith {
[_this, QFUNC(addToLog), _unit] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */
["addToMedicalLog", _unit, _this] call EFUNC(common,targetEvent);
};
date params ["", "", "", "_hour", "_minute"];

View File

@ -18,7 +18,7 @@ private ["_log", "_inList", "_amount"];
params ["_unit", "_newItem"];
if (!local _unit) exitWith {
[_this, QUOTE(DFUNC(addToTriageCard)), _unit] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */
["addToTriageList", _unit, _this] call EFUNC(common,targetEvent);
};
_log = _unit getVariable [QGVAR(triageCard), []];

View File

@ -101,7 +101,7 @@ if (_show) then {
// Collect the text to be displayed for this injury [ Select injury class type definition - select the classname DisplayName (6th), amount of injuries for this]
if (_amountOf >= 1) then {
// TODO localization
_allInjuryTexts pushback [format["%2x %1", (GVAR(AllWoundInjuryTypes) select _x1) select 6, _amountOf], [1,1,1,1]];
_allInjuryTexts pushback [format["%2x %1", (GVAR(AllWoundInjuryTypes) select _x1) select 6, ceil _amountOf], [1,1,1,1]];
} else {
// TODO localization
_allInjuryTexts pushback [format["Partial %1", (GVAR(AllWoundInjuryTypes) select _x1) select 6], [1,1,1,1]];
@ -122,7 +122,7 @@ if (_show) then {
if (_amountOf > 0) then {
if (_amountOf >= 1) then {
// TODO localization
_allInjuryTexts pushback [format["[B] %2x %1", (GVAR(AllWoundInjuryTypes) select (_x select 1)) select 6, _amountOf], [0.88,0.7,0.65,1]];
_allInjuryTexts pushback [format["[B] %2x %1", (GVAR(AllWoundInjuryTypes) select (_x select 1)) select 6, ceil _amountOf], [0.88,0.7,0.65,1]];
} else {
// TODO localization
_allInjuryTexts pushback [format["[B] Partial %1", (GVAR(AllWoundInjuryTypes) select (_x select 1)) select 6], [0.88,0.7,0.65,1]];

View File

@ -0,0 +1,48 @@
/*
* Author: PabstMirror
* Removes corpse. Idealy it is just deleted the next frame,
* but player bodies cannot be deleted until they respawn, so it is hidden and deleted later.
*
* Arguments:
* 0: Mr Body <OBJECT>
*
* Return Value:
* Nothing
*
* Example:
* [cursorTarget] call ace_medical_fnc_serverRemoveBody
*
* Public: No
*/
#include "script_component.hpp"
params ["_target"];
TRACE_2("",_target,isPlayer _target);
//Hide the body globaly
["hideObjectGlobal", [_target, true]] call EFUNC(common,serverEvent);
if (isNil QGVAR(bodiesToDelete)) then {GVAR(bodiesToDelete) = [];};
GVAR(bodiesToDelete) pushBack _target;
//Start up PFEH to wait for bodies to be free to delete
if ((count GVAR(bodiesToDelete)) == 1) then {
TRACE_1("starting PFEH",GVAR(bodiesToDelete));
[{
{
TRACE_2("body",_x,isPlayer _x);
if ((!isNull _x) && {!isPlayer _x}) then {deleteVehicle _x};
} forEach GVAR(bodiesToDelete);
//deleteVehicle doesn't have instant results so it won't usualy be filtered until next run
GVAR(bodiesToDelete) = GVAR(bodiesToDelete) - [objNull];
if (GVAR(bodiesToDelete) isEqualTo []) then {
TRACE_1("array emptied - rem PFEH",GVAR(bodiesToDelete));
[_this select 1] call CBA_fnc_removePerFrameHandler;
};
}, 20, []] call CBA_fnc_addPerFrameHandler;
};
nil

View File

@ -20,7 +20,7 @@ params ["_unit", ["_force", false], ["_delaySetDamage", false]];
if ((!alive _unit) || {_unit getVariable ["ACE_isDead", false]}) exitWith {true};
if (!local _unit) exitwith {
[[_unit, _force], QUOTE(DFUNC(setDead)), _unit, false] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */
["setDead", _unit, [_unit, _force]] call EFUNC(common,targetEvent);
false;
};
@ -86,7 +86,7 @@ if (isPLayer _unit) then {
["medical_onSetDead", [_unit]] call EFUNC(common,localEvent);
//Delay a frame before killing the unit via scripted damage
//Delay a frame before killing the unit via scripted damage
//to avoid triggering the "Killed" Event twice (and having the wrong killer)
if (!_delaySetDamage) then {

View File

@ -26,7 +26,7 @@ params ["_unit", "_selection", "_damage", ["_disabled", false]];
// Unit isn't local, give function to machine where it is.
if !(local _unit) exitWith {
[_this, QUOTE(DFUNC(setHitPointDamage)), _unit] call EFUNC(common,execRemoteFnc);
["setHitPointDamage", _unit, _this] call EFUNC(common,targetEvent);
};
// Check if overall damage adjustment is disabled

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