Merge branch 'master' into changeHearingDefaults

Conflicts:
	addons/grenades/functions/fnc_flashbangExplosionEH.sqf
This commit is contained in:
esteldunedain 2016-02-20 16:59:00 -03:00
commit 6fd8d8da04
352 changed files with 3908 additions and 2979 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

Binary file not shown.

View File

@ -9,11 +9,3 @@ class Extended_PostInit_EventHandlers {
init = QUOTE( call COMPILE_FILE(XEH_postInit) );
};
};
class Extended_FiredBIS_EventHandlers {
class CAManBase {
class ADDON {
firedBIS = QUOTE(_this call FUNC(handleFired));
};
};
};

View File

@ -22,3 +22,17 @@ if (!GVAR(extensionAvailable)) exitWith {
};
*/
[] call FUNC(initializeTerrainExtension);
if (!hasInterface) exitWith {};
["SettingsInitialized", {
//If not enabled, dont't add PFEH
if (!GVAR(enabled)) exitWith {};
// Register fire event handler
["firedPlayer", DFUNC(handleFired)] call EFUNC(common,addEventHandler);
["firedPlayerNonLocal", DFUNC(handleFired)] call EFUNC(common,addEventHandler);
[] call FUNC(updateTrajectoryPFH);
}] call EFUNC(common,addEventHandler);

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

@ -1,16 +1,10 @@
/*
* Author: Glowbal, Ruthberg
*
* Handles advanced ballistics for (BulletBase) projectiles
* Handles advanced ballistics for (BulletBase) projectiles. Called from the unified fired EH only for players.
*
* Arguments:
* 0: unit - Object the event handler is assigned to <OBJECT>
* 1: weapon - Fired weapon <STRING>
* 2: muzzle - Muzzle that was used <STRING>
* 3: mode - Current mode of the fired weapon <STRING>
* 4: ammo - Ammo used <STRING>
* 5: magazine - magazine name which was used <STRING>
* 6: projectile - Object of the projectile that was shot <OBJECT>
* None. Parameters inherited from EFUNC(common,firedEH)
*
* Return Value:
* None
@ -19,20 +13,16 @@
*/
#include "script_component.hpp"
// Early Quiting
if (!hasInterface) exitWith {};
if (!GVAR(enabled)) exitWith {};
//IGNORE_PRIVATE_WARNING ["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile", "_vehicle", "_gunner", "_turret"];
TRACE_10("firedEH:",_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile, _vehicle, _gunner, _turret);
// Parameterization
private ["_abort", "_AmmoCacheEntry", "_WeaponCacheEntry", "_opticsName", "_opticType", "_bulletTraceVisible", "_temperature", "_barometricPressure", "_bulletMass", "_bulletLength", "_muzzleVelocity", "_muzzleVelocityShift", "_bulletVelocity", "_bulletLength", "_barrelTwist", "_stabilityFactor", "_aceTimeSecond", "_barrelVelocityShift", "_ammoTemperatureVelocityShift"];
params ["_unit", "_weapon", "", "_mode", "_ammo", "_magazine", "_bullet"];
_abort = false;
if (!(_ammo isKindOf "BulletBase")) exitWith {};
if (!alive _bullet) exitWith {};
if (!([_unit] call EFUNC(common,isPlayer))) exitWith {};
if (!alive _projectile) exitWith {};
if (_unit distance ACE_player > GVAR(simulationRadius)) exitWith {};
if (underwater _unit) exitWith {};
if (!GVAR(simulateForEveryone) && !(local _unit)) then {
@ -54,7 +44,7 @@ if (GVAR(disabledInFullAutoMode) && getNumber(configFile >> "CfgWeapons" >> _wea
if (_abort || !(GVAR(extensionAvailable))) exitWith {
if (missionNamespace getVariable [QEGVAR(windDeflection,enabled), false]) then {
EGVAR(windDeflection,trackedBullets) pushBack [_bullet, getNumber(configFile >> "CfgAmmo" >> _ammo >> "airFriction")];
EGVAR(windDeflection,trackedBullets) pushBack [_projectile, getNumber(configFile >> "CfgAmmo" >> _ammo >> "airFriction")];
};
};
@ -72,7 +62,7 @@ _AmmoCacheEntry params ["_airFriction", "_caliber", "_bulletLength", "_bulletMas
_WeaponCacheEntry params ["_barrelTwist", "_twistDirection", "_barrelLength"];
_bulletVelocity = velocity _bullet;
_bulletVelocity = velocity _projectile;
_muzzleVelocity = vectorMagnitude _bulletVelocity;
_barrelVelocityShift = 0;
@ -92,7 +82,7 @@ if (GVAR(ammoTemperatureEnabled) || GVAR(barrelLengthInfluenceEnabled)) then {
if (_muzzleVelocityShift != 0) then {
_muzzleVelocity = _muzzleVelocity + _muzzleVelocityShift;
_bulletVelocity = _bulletVelocity vectorAdd ((vectorNormalized _bulletVelocity) vectorMultiply (_muzzleVelocityShift));
_bullet setVelocity _bulletVelocity;
_projectile setVelocity _bulletVelocity;
};
};
@ -114,16 +104,16 @@ if (_caliber > 0 && _bulletLength > 0 && _bulletMass > 0 && _barrelTwist > 0) th
if (isNil "_temperature") then {
_temperature = ((getPosASL _unit) select 2) call EFUNC(weather,calculateTemperatureAtHeight);
};
_barometricPressure = ((getPosASL _bullet) select 2) call EFUNC(weather,calculateBarometricPressure);
_barometricPressure = ((getPosASL _projectile) select 2) call EFUNC(weather,calculateBarometricPressure);
_stabilityFactor = [_caliber, _bulletLength, _bulletMass, _barrelTwist, _muzzleVelocity, _temperature, _barometricPressure] call FUNC(calculateStabilityFactor);
};
GVAR(currentbulletID) = (GVAR(currentbulletID) + 1) % 10000;
_aceTimeSecond = floor ACE_time;
"ace_advanced_ballistics" callExtension format["new:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:%17:%18", GVAR(currentbulletID), _airFriction, _ballisticCoefficients, _velocityBoundaries, _atmosphereModel, _dragModel, _stabilityFactor, _twistDirection, _muzzleVelocity, _transonicStabilityCoef, getPosASL _bullet, EGVAR(common,mapLatitude), EGVAR(weather,currentTemperature), EGVAR(common,mapAltitude), EGVAR(weather,currentHumidity), overcast, _aceTimeSecond, ACE_time - _aceTimeSecond];
"ace_advanced_ballistics" callExtension format["new:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:%17:%18", GVAR(currentbulletID), _airFriction, _ballisticCoefficients, _velocityBoundaries, _atmosphereModel, _dragModel, _stabilityFactor, _twistDirection, _muzzleVelocity, _transonicStabilityCoef, getPosASL _projectile, EGVAR(common,mapLatitude), EGVAR(weather,currentTemperature), EGVAR(common,mapAltitude), EGVAR(weather,currentHumidity), overcast, _aceTimeSecond, ACE_time - _aceTimeSecond];
GVAR(allBullets) pushBack [_bullet, _caliber, _bulletTraceVisible, GVAR(currentbulletID)];
GVAR(allBullets) pushBack [_projectile, _caliber, _bulletTraceVisible, GVAR(currentbulletID)];
if (isNil QGVAR(BulletPFH)) then {
GVAR(BulletPFH) = [FUNC(handleFirePFH), GVAR(simulationInterval), []] call CBA_fnc_addPerFrameHandler;

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

@ -30,7 +30,7 @@ private _sounds = [
private _position = AGLToASL (_target modelToWorldVisual (_target selectionPosition "Spine3"));
playSound3D [
_sounds select floor random count _sounds,
selectRandom _sounds,
objNull,
false,
_position,

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

@ -59,3 +59,8 @@ class Extended_Local_EventHandlers {
};
};
class Extended_FiredBIS_EventHandlers {
class All {
ADDON = QUOTE(_this call FUNC(firedEH));
};
};

View File

@ -13,7 +13,7 @@ class CfgWeapons {
};
class ACE_FakePrimaryWeapon: Rifle_Base_F {
scope = 2;
scope = 1;
scopeCurator = 1;
scopeArsenal = 1;
displayName = "";

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);
@ -47,6 +46,7 @@ PREP(execRemoteFnc);
PREP(executePersistent);
PREP(filter);
PREP(findUnloadPosition);
PREP(firedEH);
PREP(fixCollision);
PREP(fixFloating);
PREP(fixLoweredRifleAnimation);
@ -101,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);
@ -115,9 +112,7 @@ PREP(isFeatureCameraActive);
PREP(isInBuilding);
PREP(isModLoaded);
PREP(isPlayer);
PREP(isTurnedOut);
PREP(isUnderwater);
PREP(letterToCode);
PREP(lightIntensityFromObject);
PREP(loadPerson);
PREP(loadPersonLocal);
@ -169,7 +164,6 @@ PREP(setSettingFromConfig);
PREP(setVariableJIP);
PREP(setVariablePublic);
PREP(setVolume);
PREP(sortAlphabeticallyBy);
PREP(showHud);
PREP(statusEffect_addType);
PREP(statusEffect_get);
@ -189,7 +183,6 @@ PREP(toHex);
PREP(toNumber);
PREP(unhideUnit);
PREP(uniqueElements);
PREP(uniqueElementsOnly);
PREP(unloadPerson);
PREP(unloadPersonLocal);
PREP(unmuteUnit);
@ -216,8 +209,6 @@ PREP(getWeaponMuzzles);
PREP(getConfigTypeObject);
PREP(getConfigGunner);
PREP(getConfigCommander);
PREP(getHitPoints);
PREP(getHitPointsWithSelections);
PREP(getSelectionsWithoutHitPoints);
PREP(getReflectorsWithSelections);
PREP(getLightProperties);
@ -256,7 +247,8 @@ PREP(addCuratorUnloadEventhandler);
PREP(fixCrateContent);
//ACE events global variables
GVAR(events) = [[],[]];
GVAR(eventsLocation) = createLocation ["ACE_HashLocation", [-10000,-10000,-10000], 0, 0];
GVAR(eventsLocation) setText QGVAR(eventsLocation);
PREP(globalEvent);
PREP(_handleNetEvent);

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

@ -16,12 +16,9 @@ params ["_eventType", "_event"];
if (_eventType == "ACEg") then {
_event params ["_eventName", "_eventArgs"];
GVAR(events) params ["_eventNames"];
private _eventIndex = _eventNames find _eventName;
if (_eventIndex != -1) then {
private _events = (GVAR(events) select 1) select _eventIndex;
private _eventFunctions = GVAR(eventsLocation) getVariable _eventName;
if (!isNil "_eventFunctions") then {
#ifdef DEBUG_EVENTS
ACE_LOGINFO_1("* Net Event %1",_eventName);
@ -35,7 +32,7 @@ if (_eventType == "ACEg") then {
ACE_LOGINFO_1(" ID: %1",_forEachIndex);
#endif
};
} forEach _events;
} forEach _eventFunctions;
};
};

View File

@ -15,18 +15,11 @@
params ["_eventName", "_eventCode"];
GVAR(events) params ["_eventNames"];
private _eventFunctions = GVAR(eventsLocation) getVariable _eventName;
private _eventFunctions = [];
private _eventIndex = _eventNames find _eventName;
if (_eventIndex != -1) then {
_eventFunctions = (GVAR(events) select 1) select _eventIndex;
} else {
private _eventNameCount = count _eventNames;
_eventNames set [_eventNameCount, _eventName];
(GVAR(events) select 1) set [_eventNameCount, _eventFunctions];
if (isNil "_eventFunctions") then {
_eventFunctions = [];
GVAR(eventsLocation) setVariable [_eventName, _eventFunctions];
};
_eventFunctions pushBack _eventCode // Return event function count

View File

@ -16,7 +16,7 @@
params ["_unit", "_target", ["_exceptions", []]];
_exceptions = [_exceptions, {toLower _this}] call FUNC(map);
_exceptions = _exceptions apply {toLower _x};
private _owner = _target getVariable [QGVAR(owner), objNull];

View File

@ -21,8 +21,8 @@ ACE_LOGINFO_1("ACE is version %1.",_version);
//private _addons = activatedAddons; // broken with High-Command module, see #2134
private _addons = "true" configClasses (configFile >> "CfgPatches");//
_addons = [_addons, {toLower configName _this}] call FUNC(map);//
_addons = [_addons, {_this find "ace_" == 0}] call FUNC(filter);
_addons = _addons apply {toLower configName _x};//
_addons = _addons select {_x find "ace_" == 0};
{
if (getText (configFile >> "CfgPatches" >> _x >> "versionStr") != _version) then {
@ -63,7 +63,7 @@ _addons = [_addons, {_this find "ace_" == 0}] call FUNC(filter);
///////////////
if (isMultiplayer) then {
// don't check optional addons
_addons = [_addons, {getNumber (configFile >> "CfgPatches" >> _this >> "ACE_isOptional") != 1}] call FUNC(filter);
_addons = _addons select {getNumber (configFile >> "CfgPatches" >> _x >> "ACE_isOptional") != 1};
if (isServer) then {
// send servers version of ACE to all clients

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

@ -9,15 +9,16 @@
* Return Value:
* Final array
*
* Usage:
* [[0,1,2,3,4], {_this > 2}] call FUNC(filter) ==> [3,4]
*
* Public: Yes
*
* Deprecated
*/
#include "script_component.hpp"
params [["_array", [], [[]]], ["_code", {}, [{}]]];
ACE_DEPRECATED("ace_common_fnc_filter","3.7.0","select CODE");
private _result = [];
{

View File

@ -0,0 +1,68 @@
/*
* Author: esteldunedain
* Unfied handling of weapon fire
*
* Argument:
* 0: unit - Object the event handler is assigned to <OBJECT>
* 1: weapon - Fired weapon <STRING>
* 2: muzzle - Muzzle that was used <STRING>
* 3: mode - Current mode of the fired weapon <STRING>
* 4: ammo - Ammo used <STRING>
* 5: magazine - magazine name which was used <STRING>
* 6: projectile - Object of the projectile that was shot <OBJECT>
*
* Return value:
* None
*
* Public: No
*/
#include "script_component.hpp"
BEGIN_COUNTER(firedEH);
params ["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile"];
TRACE_7("firedEH:",_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile);
if (_unit isKindOf "CAManBase") then {
// The unit it on foot
if (_unit == ACE_player) then {
["firedPlayer", _this] call FUNC(localEvent);
} else {
if ([_unit] call EFUNC(common,isPlayer)) then {
["firedPlayerNonLocal", _this] call FUNC(localEvent);
} else {
["firedNonPlayer", _this] call FUNC(localEvent);
};
};
} else {
// The unit is a vehicle
private _vehicle = _unit;
// Get the gunner and turret path.
// Code based on FUNC(getGunner), extracted for efficency.
private _gunner = objNull;
private _turret = [];
{
if (_weapon in (_unit weaponsTurret _x)) exitWith {
_gunner = _unit turretUnit _x;
_turret = _x;
};
false
} count allTurrets [_unit, true];
// Ensure that at least the pilot is returned if there is no gunner
if (isManualFire _unit && {isNull _gunner}) then {
_gunner = effectiveCommander _unit;
};
if (_gunner == ACE_player) then {
["firedPlayerVehicle", _this] call FUNC(localEvent);
} else {
if ([_gunner] call EFUNC(common,isPlayer)) then {
["firedPlayerVehicleNonLocal", _this] call FUNC(localEvent);
} else {
["firedNonPlayerVehicle", _this] call FUNC(localEvent);
};
};
};
END_COUNTER(firedEH);

View File

@ -16,4 +16,4 @@ params ["_name", "_cfgClass"];
private _classes = format ["configName inheritsFrom _x == '%1'", _name] configClasses (configFile >> _cfgClass);
[_classes, {configName _this}] call FUNC(map) // return
_classes apply {configName _x} // return

View File

@ -30,7 +30,7 @@ private _gunner = objNull;
// ensure that at least the pilot is returned if there is no gunner
if (isManualFire _vehicle && {isNull _gunner}) then {
_gunner = driver _vehicle;
_gunner = effectiveCommander _vehicle;
};
_gunner

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

@ -14,4 +14,4 @@
params [["_vehicle", objNull, [objNull]]];
[crew _vehicle, {getText (configFile >> "CfgVehicles" >> typeOf _this >> "simulation") == "UAVPilot"}] call FUNC(filter) // return
crew _vehicle select {getText (configFile >> "CfgVehicles" >> typeOf _x >> "simulation") == "UAVPilot"} // return

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

@ -15,12 +15,9 @@
params ["_eventName", "_eventArgs"];
GVAR(events) params ["_eventNames", "_eventArray"];
private _eventFunctions = GVAR(eventsLocation) getVariable _eventName;
private _eventIndex = _eventNames find _eventName;
if (_eventIndex != -1) then {
private _events = _eventArray select _eventIndex;
if (!isNil "_eventFunctions") then {
#ifdef DEBUG_EVENTS
ACE_LOGINFO_1("* Local Event: %1",_eventName);
@ -35,5 +32,5 @@ if (_eventIndex != -1) then {
ACE_LOGINFO_1(" ID: %1",_forEachIndex);
#endif
};
} forEach _events;
} forEach _eventFunctions;
};

View File

@ -1,6 +1,6 @@
/*
* Author: KoffeinFlummi, commy2
* Applies given code to every element in an array, LIKE SOMETHING SQF SHOULD HAVE BY DEFAULT.
* Applies given code to every element in an array, LIKE SOMETHING SQF SHOULD HAVE BY DEFAULT. <- :kappa:
*
* Arguments:
* 0: Array to be thingied.
@ -9,15 +9,16 @@
* Return Value:
* Final array
*
* Usage:
* [["2", "gobblecock", "25"], {parseNumber _this}] call FUNC(map) ==> [2, 0, 25]
*
* Public: Yes
*
* Deprecated
*/
#include "script_component.hpp"
params [["_array", [], [[]]], ["_code", {}, [{}]]];
ACE_DEPRECATED("ace_common_fnc_map","3.7.0","apply");
// copy array to not alter the original one
_array = + _array;

View File

@ -14,11 +14,4 @@
params ["_eventName"];
GVAR(events) params ["_eventNames", "_events"];
private _eventFunctions = [];
private _eventIndex = _eventNames find _eventName;
if (_eventIndex != -1) then {
_events set [_eventIndex, []];
};
GVAR(eventsLocation) setVariable [_eventName, nil];

View File

@ -15,12 +15,9 @@
params ["_eventName", "_eventCodeIndex"];
GVAR(events) params ["_eventNames", "_events"];
private _eventFunctions = GVAR(eventsLocation) getVariable _eventName;
private _eventFunctions = [];
private _eventIndex = _eventNames find _eventName;
if (isNil "_eventFunctions") exitWith {TRACE_1("eventName not found",_eventName);};
if ((_eventCodeIndex < 0) || {(count _eventFunctions) <= _eventCodeIndex}) exitWith {TRACE_2("index out of bounds",_eventName,_eventCodeIndex);};
if (_eventIndex != -1) then {
_eventFunctions = _events select _eventIndex;
_eventFunctions set [_eventCodeIndex, nil];
};
_eventFunctions set [_eventCodeIndex, nil];

View File

@ -19,7 +19,7 @@ params [["_unit", objNull, [objNull]], ["_magazineType", "", [""]], ["_ammoCount
private _isRemoved = false;
// Check uniform
private _magazines = [magazinesAmmoCargo uniformContainer _unit, {_this select 0 == _magazineType}] call FUNC(filter);
private _magazines = magazinesAmmoCargo uniformContainer _unit select {_x select 0 == _magazineType};
private _index = _magazines find [_magazineType, _ammoCount];
if (_index > -1) exitWith {
@ -39,7 +39,7 @@ if (_index > -1) exitWith {
};
// Check vest
_magazines = [magazinesAmmoCargo vestContainer _unit, {_this select 0 == _magazineType}] call FUNC(filter);
_magazines = magazinesAmmoCargo vestContainer _unit select {_x select 0 == _magazineType};
_index = _magazines find [_magazineType, _ammoCount];
if (_index > -1) exitWith {
@ -59,7 +59,7 @@ if (_index > -1) exitWith {
};
// Check backpack
_magazines = [magazinesAmmoCargo backpackContainer _unit, {_this select 0 == _magazineType}] call FUNC(filter);
_magazines = magazinesAmmoCargo backpackContainer _unit select {_x select 0 == _magazineType};
_index = _magazines find [_magazineType, _ammoCount];
if (_index > -1) exitWith {

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

@ -0,0 +1 @@
#include "\z\ace\addons\common\script_component.hpp"

View File

@ -0,0 +1,78 @@
// ----------------------------------------------------------------------------
#define DEBUG_MODE_FULL
#include "script_component.hpp"
#ifndef TEST_DEFINED_AND_OP
if (true) exitWith {};
#endif
// ----------------------------------------------------------------------------
LOG('Testing EventHandlers');
TEST_DEFINED(QFUNC(_handleNetEvent),"");
TEST_DEFINED(QFUNC(addEventHandler),"");
TEST_DEFINED(QFUNC(localEvent),"");
TEST_DEFINED(QFUNC(targetEvent),"");
TEST_DEFINED(QFUNC(globalEvent),"");
TEST_DEFINED(QFUNC(serverEvent),"");
TEST_DEFINED(QFUNC(removeAllEventHandlers),"");
TEST_DEFINED(QFUNC(removeEventHandler),"");
private _result = ["A", {}] call ace_common_fnc_addEventHandler;
private _expected = 0;
TEST_DEFINED_AND_OP(_result,==,_expected,"Adding first A EH");
_result = ["A", {GVAR(test_A2) = _this}] call ace_common_fnc_addEventHandler;
_expected = 1;
TEST_DEFINED_AND_OP(_result,==,_expected,"Adding second A EH");
_result = ["A", {GVAR(test_A3) = _this}] call ace_common_fnc_addEventHandler;
_expected = 2;
TEST_DEFINED_AND_OP(_result,==,_expected,"Adding third A EH");
GVAR(test_A2) = -1;
["A", 11] call FUNC(localEvent);
_expected = 11;
_result = GVAR(test_A2);
TEST_DEFINED_AND_OP(_result,==,_expected,"Test Local Event");
//Remove 2nd EH
["A", 1] call FUNC(removeEventHandler);
GVAR(test_A2) = -1;
GVAR(test_A3) = -1;
["A", 22] call FUNC(localEvent);
_expected = -1;
_result = GVAR(test_A2);
TEST_DEFINED_AND_OP(_result,==,_expected,"Test 2nd (removed) EH");
_expected = 22;
_result = GVAR(test_A3);
TEST_DEFINED_AND_OP(_result,==,_expected,"Test 3rd Event");
//Remove All EH:
["A"] call FUNC(removeAllEventHandlers);
GVAR(test_A3) = -1;
["A", 77] call FUNC(localEvent);
_expected = -1;
_result = GVAR(test_A3);
TEST_DEFINED_AND_OP(_result,==,_expected,"Test 3rd is removed after removeAll");
//Much harder to test network events
TRACE_2("testing network events",isServer,isDedicated);
["B", {GVAR(test_B) = _this}] call ace_common_fnc_addEventHandler;
GVAR(test_B) = -1;
["B", 33] call FUNC(globalEvent);
_expected = 33;
_result = GVAR(test_B);
TEST_DEFINED_AND_OP(_result,==,_expected,"Test globalEvent");
GVAR(test_B) = -1;
["B", 44] call FUNC(serverEvent);
_expected = if (isServer) then {44} else {-1};
_result = GVAR(test_B);
TEST_DEFINED_AND_OP(_result,==,_expected,"Test serverEvent");

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

@ -10,14 +10,6 @@ class Extended_PostInit_EventHandlers {
};
};
class Extended_FiredBIS_EventHandlers {
class CAManBase {
class ADDON {
firedBIS = QUOTE(_this call FUNC(replaceATWeapon));
};
};
};
// handle preloaded missile
class Extended_InitPost_EventHandlers {
class CAManBase {

View File

@ -12,3 +12,8 @@ if (!hasInterface) exitWith {};
[_unit] call FUNC(takeLoadedATWeapon);
[_unit] call FUNC(updateInventoryDisplay);
}] call EFUNC(common,addEventHandler);
// Register fire event handler
// Only for the local player and for AI. Non-local players will handle it themselves
["firedPlayer", DFUNC(replaceATWeapon)] call EFUNC(common,addEventHandler);
["firedNonPlayer", DFUNC(replaceATWeapon)] call EFUNC(common,addEventHandler);

View File

@ -1,15 +1,9 @@
/*
* Author: bux, commy2
* Replace the disposable launcher with the used dummy.
* Replace the disposable launcher with the used dummy. Called from the unified fired EH.
*
* Arguments:
* 0: unit - Object the event handler is assigned to <OBJECT>
* 1: weapon - Fired weapon <STRING>
* 2: muzzle - Muzzle that was used <STRING>
* 3: mode - Current mode of the fired weapon <STRING>
* 4: ammo - Ammo used <STRING>
* 5: magazine - magazine name which was used <STRING>
* 6: projectile - Object of the projectile that was shot <OBJECT>
* None. Parameters inherited from EFUNC(common,firedEH)
*
* Return Value:
* Nothing
@ -21,8 +15,8 @@
*/
#include "script_component.hpp"
params ["_unit", "_weapon", "", "", "", "", "_projectile"];
TRACE_3("params",_unit,_weapon,_projectile);
//IGNORE_PRIVATE_WARNING ["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile", "_vehicle", "_gunner", "_turret"];
TRACE_10("firedEH:",_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile, _vehicle, _gunner, _turret);
if (!local _unit || {_weapon != secondaryWeapon _unit}) exitWith {};

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

@ -32,7 +32,6 @@ class CfgVehicles {
// ammo boxes
class ThingX;
class ReammoBox_F: ThingX {
XEH_ENABLED;
GVAR(canCarry) = 0;
GVAR(carryPosition[]) = {0,1,1};
GVAR(carryDirection) = 0;
@ -113,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

@ -19,16 +19,7 @@
params ["_unit"];
TRACE_1("params",_unit);
private ["_items", "_result", "_config"];
_items = (items _unit);
_result = [];
{
_config = ConfigFile >> "CfgWeapons" >> _x;
if (getNumber (_config >> QGVAR(Detonator)) == 1 && {!(_x in _result)}) then {
_result pushBack _x;
};
} forEach _items;
private _result = (items _unit) select {getNumber (ConfigFile >> "CfgWeapons" >> _x >> QGVAR(Detonator)) == 1};
_result = _result arrayIntersect _result;
_result

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

@ -76,36 +76,3 @@ class Extended_Respawn_EventHandlers {
};
};
};
class Extended_FiredBIS_EventHandlers {
class Tank {
class ADDON {
firedBIS = QUOTE(_this call FUNC(firedEH));
};
};
class Car {
class ADDON {
firedBIS = QUOTE(_this call FUNC(firedEH));
};
};
class Helicopter {
class ADDON {
firedBIS = QUOTE(_this call FUNC(firedEH));
};
};
class Plane {
class ADDON {
firedBIS = QUOTE(_this call FUNC(firedEH));
};
};
class Ship_F {
class ADDON {
firedBIS = QUOTE(_this call FUNC(firedEH));
};
};
class StaticWeapon {
class ADDON {
firedBIS = QUOTE(_this call FUNC(firedEH));
};
};
};

View File

@ -15,5 +15,9 @@ if (!hasInterface) exitWith {};
};
}] call EFUNC(common,addEventHandler);
// Register fire event handler
["firedPlayerVehicle", DFUNC(firedEH)] call EFUNC(common,addEventHandler);
["firedPlayerVehicleNonLocal", DFUNC(firedEH)] call EFUNC(common,addEventHandler);
// Register event for global updates
[QGVAR(forceUpdate), {[ACE_player] call FUNC(onForceUpdate)}] call EFUNC(common,addEventHandler);

View File

@ -43,10 +43,7 @@ private _turretConfig = [configFile >> "CfgVehicles" >> typeOf _vehicle, _turret
} count _muzzles;
// Fix the `in` operator being case sensitive and BI fucking up the spelling of their own classnames
private _weaponMagazinesCheck = [];
{
_weaponMagazinesCheck pushBack (toLower _x);
} forEach _weaponMagazines;
private _weaponMagazinesCheck = _weaponMagazines apply {toLower _x};
// Another BIS fix: ShotBullet simulation uses weapon initSpeed, others ignore it
if (toLower _magazine in _weaponMagazinesCheck && {_bulletSimulation == "shotBullet"}) exitWith {

View File

@ -1,9 +1,9 @@
/*
* Author: KoffeinFlummi
* Adjusts the direction of a shell.
* Adjusts the direction of a shell. Called from the unified fired EH only if the gunner is a player.
*
* Arguments:
* -> arguments of the FiredBIS EH
* None. Parameters inherited from EFUNC(common,firedEH)
*
* Return Value:
* None
@ -12,13 +12,8 @@
*/
#include "script_component.hpp"
params ["_vehicle", "_weapon", "", "", "_ammo", "_magazine", "_projectile"];
private _gunner = [_vehicle, _weapon] call EFUNC(common,getGunner);
private _turret = _gunner call EFUNC(common,getTurretIndex);
// Exit if the unit isn't a player
if !([_gunner] call EFUNC(common,isPlayer)) exitWith {};
//IGNORE_PRIVATE_WARNING ["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile", "_vehicle", "_gunner", "_turret"];
TRACE_10("firedEH:",_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile, _vehicle, _gunner, _turret);
private _FCSMagazines = _vehicle getVariable [format ["%1_%2", QGVAR(Magazines), _turret], []];
private _FCSElevation = _vehicle getVariable format ["%1_%2", QGVAR(Elevation), _turret];
@ -36,7 +31,7 @@ private _offset = 0;
[_projectile, (_vehicle getVariable format ["%1_%2", QGVAR(Azimuth), _turret]), _offset, 0] call EFUNC(common,changeProjectileDirection);
// Remove the platform velocity
// Remove the platform velocity
if (vectorMagnitude velocity _vehicle > 2) then {
private _sumVelocity = (velocity _projectile) vectorDiff (velocity _vehicle);

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

@ -1,30 +1,42 @@
class ACE_Settings {
class GVAR(Enabled) {
category = CSTRING(Module_DisplayName);
displayName = CSTRING(EnableFrag);
description = CSTRING(EnableFrag_Desc);
typeName = "BOOL";
value = 1;
};
class GVAR(SpallEnabled) {
category = CSTRING(Module_DisplayName);
displayName = CSTRING(EnableSpall);
description = CSTRING(EnableSpall_Desc);
typeName = "BOOL";
value = 0;
};
class GVAR(ReflectionsEnabled) {
category = CSTRING(Module_DisplayName);
displayName = CSTRING(EnableReflections);
description = CSTRING(EnableReflections_Desc);
typeName = "BOOL";
value = 0;
};
class GVAR(maxTrack) {
category = CSTRING(Module_DisplayName);
displayName = CSTRING(MaxTrack);
description = CSTRING(MaxTrack_Desc);
typeName = "SCALAR";
value = 500;
};
class GVAR(MaxTrackPerFrame) {
category = CSTRING(Module_DisplayName);
displayName = CSTRING(MaxTrackPerFrame);
description = CSTRING(MaxTrackPerFrame_Desc);
typeName = "SCALAR";
value = 50;
};
class GVAR(EnableDebugTrace) {
category = CSTRING(Module_DisplayName);
displayName = CSTRING(EnableDebugTrace);
description = CSTRING(EnableDebugTrace_Desc);
typeName = "BOOL";

View File

@ -9,9 +9,3 @@ class Extended_PostInit_EventHandlers {
init = QUOTE(call COMPILE_FILE(XEH_postInit));
};
};
class Extended_FiredBIS_EventHandlers {
class AllVehicles {
ADDON = QUOTE(_this call FUNC(fired));
};
};

View File

@ -9,7 +9,21 @@ if(isServer) then {
[QGVAR(frag_eh), { _this call FUNC(frago); }] call EFUNC(common,addEventHandler);
};
[FUNC(masterPFH), 0, []] call CBA_fnc_addPerFrameHandler;
["SettingsInitialized", {
//If not enabled, exit
if (!GVAR(enabled)) exitWith {};
// Register fire event handler
["firedPlayer", DFUNC(fired)] call EFUNC(common,addEventHandler);
["firedPlayerNonLocal", DFUNC(fired)] call EFUNC(common,addEventHandler);
["firedNonPlayer", DFUNC(fired)] call EFUNC(common,addEventHandler);
["firedPlayerVehicle", DFUNC(fired)] call EFUNC(common,addEventHandler);
["firedPlayerVehicleNonLocal", DFUNC(fired)] call EFUNC(common,addEventHandler);
["firedNonPlayerVehicle", DFUNC(fired)] call EFUNC(common,addEventHandler);
[FUNC(masterPFH), 0, []] call CBA_fnc_addPerFrameHandler;
}] call EFUNC(common,addEventHandler);
//Cache for ammo type configs
GVAR(cacheRoundsTypesToTrack) = createLocation ["ACE_HashLocation", [-10000,-10000,-10000], 0, 0];

View File

@ -3,6 +3,7 @@
private ["_split", "_radi", "_params", "_pos", "_explosiveInfo", "_los", "_nlos", "_zIndex", "_depth", "_indirectHitRange", "_indirectHit", "_distanceCount", "_lastPos", "_test", "_vec", "_testPos", "_buckets", "_excludes", "_bucketIndex", "_bucketPos", "_bucketList", "_c", "_index", "_blist", "_avgX", "_avgY", "_avgZ", "_bpos", "_distance", "_hitFactor", "_hit", "_range", "_refExp", "_rand", "_i", "_x", "_res", "_forEachIndex", "_explosions", "_can", "_dirvec", "_zAng"];
BEGIN_COUNTER(fnc_findReflections);
_params = _this select 0;
_pos = _params select 0;
_explosiveInfo = _params select 1;
@ -124,3 +125,4 @@ if(_zIndex < 5) then {
[DFUNC(doExplosions), 0, [_explosions, 0]] call CBA_fnc_addPerFrameHandler;
[(_this select 1)] call CBA_fnc_removePerFrameHandler;
};
END_COUNTER(fnc_findReflections);

View File

@ -1,12 +1,10 @@
/*
* Author: nou, jaynus, PabstMirror
* Called from FiredBIS event on AllVehicles
* Called from the unified fired EH for all.
* If spall is not enabled (default), then cache and only track those that will actually trigger fragmentation.
*
* Arguments:
* 0: gun - Object the event handler is assigned to <OBJECT>
* 4: type - Ammo used <STRING>
* 6: round - Object of the projectile that was shot <OBJECT>
* None. Parameters inherited from EFUNC(common,firedEH)
*
* Return Value:
* Nothing
@ -19,38 +17,39 @@
// #define DEBUG_ENABLED_FRAG
#include "script_component.hpp"
params ["_gun", "", "", "", "_type", "", "_round"];
//IGNORE_PRIVATE_WARNING ["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile", "_vehicle", "_gunner", "_turret"];
TRACE_10("firedEH:",_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile, _vehicle, _gunner, _turret);
private _shouldAdd = GVAR(cacheRoundsTypesToTrack) getVariable _type;
private _shouldAdd = GVAR(cacheRoundsTypesToTrack) getVariable _ammo;
if (isNil "_shouldAdd") then {
TRACE_1("no cache for round",_type);
TRACE_1("no cache for round",_ammo);
if (!EGVAR(common,settingsInitFinished)) exitWith {
//Just incase fired event happens before settings init, don't want to set cache wrong if spall setting changes
TRACE_1("Settings not init yet - exit without setting cache",_type);
TRACE_1("Settings not init yet - exit without setting cache",_ammo);
_shouldAdd = false;
};
if (GVAR(SpallEnabled)) exitWith {
//Always want to run whenever spall is enabled?
_shouldAdd = true;
TRACE_2("SettingCache[spallEnabled]",_type,_shouldAdd);
GVAR(cacheRoundsTypesToTrack) setVariable [_type, _shouldAdd];
TRACE_2("SettingCache[spallEnabled]",_ammo,_shouldAdd);
GVAR(cacheRoundsTypesToTrack) setVariable [_ammo, _shouldAdd];
};
//Read configs and test if it would actually cause a frag, using same logic as FUNC(pfhRound)
private _skip = getNumber (configFile >> "CfgAmmo" >> _type >> QGVAR(skip));
private _explosive = getNumber (configFile >> "CfgAmmo" >> _type >> "explosive");
private _indirectRange = getNumber (configFile >> "CfgAmmo" >> _type >> "indirectHitRange");
private _force = getNumber (configFile >> "CfgAmmo" >> _type >> QGVAR(force));
private _fragPower = getNumber(configFile >> "CfgAmmo" >> _type >> "indirecthit")*(sqrt((getNumber (configFile >> "CfgAmmo" >> _type >> "indirectHitRange"))));
private _skip = getNumber (configFile >> "CfgAmmo" >> _ammo >> QGVAR(skip));
private _explosive = getNumber (configFile >> "CfgAmmo" >> _ammo >> "explosive");
private _indirectRange = getNumber (configFile >> "CfgAmmo" >> _ammo >> "indirectHitRange");
private _force = getNumber (configFile >> "CfgAmmo" >> _ammo >> QGVAR(force));
private _fragPower = getNumber(configFile >> "CfgAmmo" >> _ammo >> "indirecthit")*(sqrt((getNumber (configFile >> "CfgAmmo" >> _ammo >> "indirectHitRange"))));
_shouldAdd = (_skip == 0) && {(_force == 1) || {_explosive > 0.5 && {_indirectRange >= 4.5} && {_fragPower >= 35}}};
TRACE_6("SettingCache[willFrag?]",_skip,_explosive,_indirectRange,_force,_fragPower,_shouldAdd);
GVAR(cacheRoundsTypesToTrack) setVariable [_type, _shouldAdd];
GVAR(cacheRoundsTypesToTrack) setVariable [_ammo, _shouldAdd];
};
if (_shouldAdd) then {
TRACE_3("Running Frag Tracking",_gun,_type,_round);
[_gun, _type, _round] call FUNC(addPfhRound);
TRACE_3("Running Frag Tracking",_unit,_ammo,_projectile);
[_unit, _ammo, _projectile] call FUNC(addPfhRound);
};

View File

@ -8,6 +8,7 @@
if(!isServer) exitWith { };
BEGIN_COUNTER(frago);
// _startTime = ACE_diagTime;
private ["_startTime", "_round", "_lastPos", "_lastVel", "_shellType", "_gun", "_fragTypes", "_warn", "_atlPos", "_isArmed", "_fuseDist", "_indirectHitRange", "_fragRange", "_c", "_m", "_k", "_gC", "_fragPower", "_fragPowerRandom", "_manObjects", "_objects", "_crew", "_fragCount", "_fragArcs", "_doRandom", "_boundingBox", "_targetPos", "_distance", "_add", "_bbX", "_bbY", "_bbZ", "_cubic", "_targetVel", "_baseVec", "_dir", "_currentCount", "_count", "_vecVar", "_vec", "_fp", "_vel", "_fragType", "_fragObj", "_randomCount", "_sectorSize", "_sectorOffset", "_i", "_randomDir", "_endTime", "_target"];
@ -108,7 +109,9 @@ _fragArcs set[360, 0];
#endif
_doRandom = true;
if(_isArmed && (count _objects) > 0) then {
[_lastPos, _shellType] call FUNC(doReflections);
if (GVAR(ReflectionsEnabled)) then {
[_lastPos, _shellType] call FUNC(doReflections);
};
{
//if(random(1) > 0.5) then {
_target = _x;
@ -212,3 +215,4 @@ if(_isArmed && (count _objects) > 0) then {
// ACE_player sideChat format["tracks: %1", (count GVAR(trackedObjects))];
// #endif
// _endTime = ACE_diagTime;
END_COUNTER(frago);

View File

@ -1,6 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="Frag">
<Key ID="STR_ACE_Frag_Module_DisplayName">
<English>Fragmentation Simulation</English>
<Polish>Symulacja fragmentacji</Polish>
<Spanish>Simulación de fragmentación</Spanish>
<German>Splittersimulation</German>
<Czech>Simulace fragmentů</Czech>
<Portuguese>Simulação de fragmentação</Portuguese>
<French>Simulation de la fragmentation</French>
<Hungarian>Repesz-szimuláció</Hungarian>
<Russian>Симуляция осколков</Russian>
</Key>
<Key ID="STR_ACE_Frag_EnableFrag">
<English>Fragmentation Simulation</English>
<Polish>Symulacja fragmentacji</Polish>
@ -11,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>
@ -22,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>
@ -33,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>
@ -44,6 +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>
@ -55,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>
@ -66,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>
@ -77,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>
@ -88,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>
@ -99,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>
@ -110,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

@ -19,14 +19,6 @@ class Extended_Killed_EventHandlers {
};
};
class Extended_FiredBIS_EventHandlers {
class CAManBase {
class ADDON {
clientFiredBIS = QUOTE(if (local (_this select 0)) then {_this call FUNC(handleFired)});
};
};
};
class Extended_Explosion_EventHandlers {
class CAManBase {
class ADDON {

View File

@ -131,3 +131,6 @@ private _fnc_checkGoggles = {
END_COUNTER(goggles);
}, 0.5, []] call CBA_fnc_addPerFrameHandler;
// Register fire event handler
["firedPlayer", DFUNC(handleFired)] call EFUNC(common,addEventHandler);

View File

@ -1,10 +1,9 @@
/*
* Author: Garth 'L-H' de Wet, commy2
* Determines whether to place dust on the goggles, based on calibre of weapon fired and other requirements.
* Determines whether to place dust on the goggles, based on calibre of weapon fired and other requirements. Called from the unified fired EH only for the local player.
*
* Arguments:
* 0: Unit <OBJECT>
* 1: Weapon <STRING>
* None. Parameters inherited from EFUNC(common,firedEH)
*
* Return Value:
* Function is handled? <BOOL>
@ -13,9 +12,8 @@
*/
#include "script_component.hpp"
params ["_unit", "_weapon"];
if (_unit != ACE_player) exitWith {true};
//IGNORE_PRIVATE_WARNING ["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile", "_vehicle", "_gunner", "_turret"];
TRACE_10("firedEH:",_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile, _vehicle, _gunner, _turret);
// no dust in rain
if (rain > 0.1) exitWith {true};

View File

@ -10,11 +10,3 @@ class Extended_PostInit_EventHandlers {
init = QUOTE(call COMPILE_FILE(XEH_postInit));
};
};
class Extended_FiredBIS_EventHandlers {
class CAManBase {
class ADDON {
firedBIS = QUOTE(_this call FUNC(throwGrenade));
};
};
};

View File

@ -22,3 +22,9 @@ GVAR(flashbangPPEffectCC) ppEffectForceInNVG true;
},
{false},
[9, [false, false, false]], false] call CBA_fnc_addKeybind; //8 Key
// Register fire event handler
["firedPlayer", DFUNC(throwGrenade)] call EFUNC(common,addEventHandler);
["firedPlayerNonLocal", DFUNC(throwGrenade)] call EFUNC(common,addEventHandler);
["firedNonPlayer", DFUNC(throwGrenade)] call EFUNC(common,addEventHandler);

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 {
[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

@ -1,15 +1,9 @@
/*
* Author: commy2
* Adjust the grenades throwing direction and speed to the selected throwing mode.
* Adjust the grenades throwing direction and speed to the selected throwing mode. Called from the unified fired EH only for CAManBase
*
* Arguments:
* 0: unit - Object the event handler is assigned to <OBJECT>
* 1: weapon - Fired weapon <STRING>
* 2: muzzle - Muzzle that was used <STRING>
* 3: mode - Current mode of the fired weapon <STRING>
* 4: ammo - Ammo used <STRING>
* 5: magazine - magazine name which was used <STRING>
* 6: projectile - Object of the projectile that was shot <OBJECT>
* None. Parameters inherited from EFUNC(common,firedEH)
*
* Return Value:
* None
@ -21,7 +15,8 @@
*/
#include "script_component.hpp"
params ["_unit", "_weapon", "", "", "_ammo", "", "_projectile"];
//IGNORE_PRIVATE_WARNING ["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile", "_vehicle", "_gunner", "_turret"];
TRACE_10("firedEH:",_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile, _vehicle, _gunner, _turret);
if (_weapon != "Throw") exitWith {};

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

@ -122,6 +122,7 @@
<French>Audition</French>
<Hungarian>Hallás</Hungarian>
<Russian>Слух</Russian>
<Italian>Udito</Italian>
</Key>
<Key ID="STR_ACE_Hearing_EnableCombatDeafness_DisplayName">
<English>Enable Combat Deafness</English>
@ -133,15 +134,17 @@
<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_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>
@ -153,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>
@ -162,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>
@ -171,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

@ -9,11 +9,3 @@ class Extended_PostInit_EventHandlers {
init = QUOTE( call COMPILE_FILE(XEH_postInit) );
};
};
class Extended_FiredBIS_EventHandlers {
class CAManBase {
class ADDON {
clientFiredBIS = QUOTE(_this call FUNC(handleFired));
};
};
};

View File

@ -7,3 +7,8 @@ GVAR(TI) = 0;
GVAR(cur_cam) = 0;
GVAR(ROTATE) = 0;
GVAR(ELEVAT) = 0.01;
// Register fire event handler
// Don't run for non players, as they are too dumb to launch huntirs anyway
["firedPlayer", DFUNC(handleFired)] call EFUNC(common,addEventHandler);
["firedPlayerNonLocal", DFUNC(handleFired)] call EFUNC(common,addEventHandler);

View File

@ -1,16 +1,10 @@
/*
* Author: Norrin, Rocko, Ruthberg
*
* Handles HuntIR projectiles
* Handles HuntIR projectiles. Called from the unified fired EH for all CAManBase.
*
* Arguments:
* 0: unit - Object the event handler is assigned to <OBJECT>
* 1: weapon - Fired weapon <STRING>
* 2: muzzle - Muzzle that was used <STRING>
* 3: mode - Current mode of the fired weapon <STRING>
* 4: ammo - Ammo used <STRING>
* 5: magazine - magazine name which was used <STRING>
* 6: projectile - Object of the projectile that was shot <OBJECT>
* None. Parameters inherited from EFUNC(common,firedEH)
*
* Return Value:
* None
@ -19,10 +13,13 @@
*/
#include "script_component.hpp"
params ["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile"];
//IGNORE_PRIVATE_WARNING ["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile", "_vehicle", "_gunner", "_turret"];
TRACE_10("firedEH:",_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile, _vehicle, _gunner, _turret);
if (_ammo != "F_HuntIR") exitWith {};
if (!hasInterface) exitWith {};
[{
params ["_projectile"];

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

@ -76,28 +76,3 @@ GVAR(ParsedTextCached) = [];
if (GVAR(menuBackground)==1) then {[QGVAR(menuBackground), false] call EFUNC(common,blurScreen);};
if (GVAR(menuBackground)==2) then {(uiNamespace getVariable [QGVAR(menuBackground), displayNull]) closeDisplay 0;};
}] call EFUNC(common,addEventHandler);
//Debug to help end users identify mods that break CBA's XEH
[{
private _badClassnames = [];
{
//Only check Land objects (WeaponHolderSimulated show up in `vehicles` for some reason)
if ((_x isKindOf "Land") && {(isNil (format [QGVAR(Act_%1), typeOf _x])) || {isNil (format [QGVAR(SelfAct_%1), typeOf _x])}}) then {
if (!((typeOf _x) in _badClassnames)) then {
_badClassnames pushBack (typeOf _x);
ACE_LOGERROR_3("Compile checks bad for (classname: %1)(addon: %2) %3", (typeOf _x), (unitAddons (typeOf _x)), _x);
};
};
} forEach (allUnits + allDeadMen + vehicles);
if ((count _badClassnames) == 0) then {
ACE_LOGINFO("All compile checks passed");
} else {
ACE_LOGERROR_1("%1 Classnames failed compile check!!! (bad XEH / missing cba_enable_auto_xeh.pbo)", (count _badClassnames));
//Only show visual error if they are actually missing the pbo:
#define SUPMON configFile>>"CfgSettings">>"CBA">>"XEH">>"supportMonitor"
if ((!isNumber(SUPMON)) || {getNumber(SUPMON) != 1}) then {
["ACE Interaction failed to compile for some units (try adding cba_enable_auto_xeh.pbo)"] call BIS_fnc_error;
};
};
}, [], 5] call EFUNC(common,waitAndExecute); //ensure CBASupMon has time to run first

View File

@ -41,8 +41,8 @@ if ((GVAR(openedMenuType) == 0) && {vehicle ACE_player == ACE_player} && {isNull
if (_distanceToBasePoint > _distance) exitWith {true};
if ((_distanceToBasePoint > 1.5) && {!(_params select 4)}) exitWith {
// If distance to action is greater than 1.5 m and check isn't disabled in params, check LOS
if ((_distanceToBasePoint > 1.2) && {!(_params select 4)}) exitWith {
// If distance to action is greater than 1.2 m and check isn't disabled in params, check LOS
lineIntersects [AGLtoASL _headPos, AGLtoASL _pos, _object, ACE_player]
};
false

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>

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