Merge branch 'master' of https://github.com/acemod/ACE3 into delayUnconCaptiv

# Conflicts:
#	addons/medical/functions/fnc_setUnconscious.sqf
This commit is contained in:
jokoho48 2016-02-23 15:31:38 +01:00
commit b2d2bec2cf
1364 changed files with 15934 additions and 9335 deletions

View File

@ -2,7 +2,7 @@
## Before reporting ## 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. 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 ## 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: 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.
```
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.*
```
A video of the issue might be helpful in resolving it faster. 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 # Feature Requests
## Background ## 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. 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. 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

@ -14,7 +14,8 @@ Garth "L-H" de Wet <garthofhearts@gmail.com>
Giallustio Giallustio
Glowbal Glowbal
Janus Janus
jokoho482 <jokoho482@gmail.com>` jokoho482 <jokoho482@gmail.com>
Jonpas <jonpas33@gmail.com>
Kieran Kieran
NouberNou NouberNou
PabstMirror <pabstmirror@gmail.com> PabstMirror <pabstmirror@gmail.com>
@ -39,6 +40,7 @@ Alganthe <alganthe@live.fr>
Anthariel <Contact@storm-simulation.com> Anthariel <Contact@storm-simulation.com>
Arkhir <wonsz666@gmail.com > Arkhir <wonsz666@gmail.com >
Asgar Serran <piechottaf@web.de> Asgar Serran <piechottaf@web.de>
BaerMitUmlaut
Bamse <bamsis@gmail.com> Bamse <bamsis@gmail.com>
Bla1337 Bla1337
BlackPixxel <blackpixxel96@gmail.com> BlackPixxel <blackpixxel96@gmail.com>
@ -53,6 +55,7 @@ Coren <coren4@gmail.com>
Crusty Crusty
Dharma Bellamkonda <dharma.bellamkonda@gmail.com> Dharma Bellamkonda <dharma.bellamkonda@gmail.com>
Dimaslg <dimaslg@telecable.es> Dimaslg <dimaslg@telecable.es>
dixon13 <dixonbegay@gmail.com>
Drill <drill87@gmail.com> Drill <drill87@gmail.com>
Dudakov aka [OMCB]Kaban <dudakov.s@gmail.com> Dudakov aka [OMCB]Kaban <dudakov.s@gmail.com>
Dslyecxi <dslyecxi@gmail.com> Dslyecxi <dslyecxi@gmail.com>
@ -63,11 +66,13 @@ Falke75
Ferenczi Ferenczi
Ferenzi Ferenzi
Filip Basara <filip.basara93@googlemail.com> Filip Basara <filip.basara93@googlemail.com>
fr89k <kaschitoku@web.de>
FreeZbe <freeseb@gmail.com> FreeZbe <freeseb@gmail.com>
geraldbolso1899 geraldbolso1899
Ghost Ghost
Gianmarco Varriale (TeamNuke) <admin@forhost.org> Gianmarco Varriale (TeamNuke) <admin@forhost.org>
GieNkoV <gienkov.grzegorz@gmail.com> GieNkoV <gienkov.grzegorz@gmail.com>
GitHawk <githawk@gmx.net>
gpgpgpgp gpgpgpgp
Grzegorz Grzegorz
Hamburger SV Hamburger SV
@ -75,7 +80,6 @@ Harakhti <shadowdragonphd@gmail.com>
havena <silveredenis@gmail.com> havena <silveredenis@gmail.com>
Hawkins Hawkins
Head <brobergsebastian@gmail.com> Head <brobergsebastian@gmail.com>
Jonpas <jonpas33@gmail.com>
Karneck <dschultz26@hotmail.com> Karneck <dschultz26@hotmail.com>
Kavinsky <nmunozfernandez@gmail.com> Kavinsky <nmunozfernandez@gmail.com>
Kllrt <kllrtik@gmail.com> Kllrt <kllrtik@gmail.com>
@ -103,6 +107,7 @@ Robert Boklahánics <bokirobi@gmail.com>
ruPaladin <happyworm24@rambler.ru> ruPaladin <happyworm24@rambler.ru>
simon84 <badguy360th@gmail.com> simon84 <badguy360th@gmail.com>
Sniperwolf572 <tenga6@gmail.com> Sniperwolf572 <tenga6@gmail.com>
System98
SzwedzikPL <szwedzikpl@gmail.com> SzwedzikPL <szwedzikpl@gmail.com>
Tachi <zaveruha007@gmail.com> Tachi <zaveruha007@gmail.com>
Toaster <jonathan.pereira@gmail.com> Toaster <jonathan.pereira@gmail.com>
@ -113,3 +118,4 @@ voiper
VyMajoris(W-Cephei)<vycanismajoriscsa@gmail.com> VyMajoris(W-Cephei)<vycanismajoriscsa@gmail.com>
Winter <simon@agius-muscat.net> Winter <simon@agius-muscat.net>
zGuba zGuba
Grey-Soldierman <gungamer101@hotmail.com>

View File

@ -1,12 +1,12 @@
<p align="center"> <p align="center">
<img src="https://github.com/acemod/ACE3/blob/master/extras/assets/logo/black/ACE3-Logo.jpg" width="480"> <img src="https://github.com/acemod/ACE3/raw/master/extras/assets/logo/black/ACE3-Logo.jpg" width="480">
</p> </p>
<p align="center"> <p align="center">
<a href="https://github.com/acemod/ACE3/releases"> <a href="https://github.com/acemod/ACE3/releases">
<img src="https://img.shields.io/badge/Version-3.4.1-blue.svg?style=flat-square" alt="ACE3 Version"> <img src="https://img.shields.io/badge/Version-3.4.2-blue.svg?style=flat-square" alt="ACE3 Version">
</a> </a>
<a href="https://github.com/acemod/ACE3/releases/download/v3.4.1/ace3_3.4.1.zip"> <a href="https://github.com/acemod/ACE3/releases/download/v3.4.2/ace3_3.4.2.zip">
<img src="https://img.shields.io/badge/Download-72.6_MB-green.svg?style=flat-square" alt="ACE3 Download"> <img src="https://img.shields.io/badge/Download-72.6_MB-green.svg?style=flat-square" alt="ACE3 Download">
</a> </a>
<a href="https://github.com/acemod/ACE3/issues"> <a href="https://github.com/acemod/ACE3/issues">
@ -64,7 +64,6 @@ The mod is **built modularly**, so almost any included PBO can be easily removed
- Magazine repacking - Magazine repacking
- Realistic weapon overheating mechanic - Realistic weapon overheating mechanic
- Combat deafness (temporary loss of hearing) simulation - Combat deafness (temporary loss of hearing) simulation
- Improved ragdoll physics
- Improved interactions for AARs and ammo bearers - Improved interactions for AARs and ammo bearers
- Adjustable sniper scopes - Adjustable sniper scopes
- No idle animation with lowered weapon - No idle animation with lowered weapon

Binary file not shown.

Binary file not shown.

View File

@ -1,3 +1,10 @@
class Extended_PreStart_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_preStart));
};
};
class Extended_PreInit_EventHandlers { class Extended_PreInit_EventHandlers {
class ADDON { class ADDON {
init = QUOTE( call COMPILE_FILE(XEH_preInit) ); init = QUOTE( call COMPILE_FILE(XEH_preInit) );
@ -9,11 +16,3 @@ class Extended_PostInit_EventHandlers {
init = QUOTE( call COMPILE_FILE(XEH_postInit) ); init = QUOTE( call COMPILE_FILE(XEH_postInit) );
}; };
}; };
class Extended_FiredBIS_EventHandlers {
class CAManBase {
class ADDON {
firedBIS = QUOTE(_this call FUNC(handleFired));
};
};
};

View File

@ -0,0 +1,14 @@
PREP(calculateAmmoTemperatureVelocityShift);
PREP(calculateAtmosphericCorrection);
PREP(calculateBarrelLengthVelocityShift);
PREP(calculateRetardation);
PREP(calculateStabilityFactor);
PREP(diagnoseWeapons);
PREP(displayProtractor);
PREP(handleFired);
PREP(initializeTerrainExtension);
PREP(initModuleSettings);
PREP(readAmmoDataFromConfig);
PREP(readWeaponDataFromConfig);
PREP(handleFirePFH);

View File

@ -22,3 +22,19 @@ if (!GVAR(extensionAvailable)) exitWith {
}; };
*/ */
[] call FUNC(initializeTerrainExtension); [] 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 EFUNC(common,addEventHandler);
#ifdef DEBUG_MODE_FULL
call FUNC(diagnoseWeapons);
#endif

View File

@ -2,16 +2,6 @@
ADDON = false; ADDON = false;
PREP(calculateAmmoTemperatureVelocityShift); #include "XEH_PREP.hpp"
PREP(calculateAtmosphericCorrection);
PREP(calculateBarrelLengthVelocityShift);
PREP(calculateRetardation);
PREP(calculateStabilityFactor);
PREP(displayProtractor);
PREP(handleFired);
PREP(initializeTerrainExtension);
PREP(initModuleSettings);
PREP(readAmmoDataFromConfig);
PREP(readWeaponDataFromConfig);
PREP(handleFirePFH);
ADDON = true; ADDON = true;

View File

@ -0,0 +1,3 @@
#include "script_component.hpp"
#include "XEH_PREP.hpp"

View File

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

View File

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

View File

@ -28,7 +28,7 @@ if (currentWeapon ACE_player != primaryWeapon ACE_player) exitWith { false };
2 cutText ["", "PLAIN"]; 2 cutText ["", "PLAIN"];
EGVAR(weather,WindInfo) = false; EGVAR(weather,WindInfo) = false;
0 cutText ["", "PLAIN"]; (["RscWindIntuitive"] call BIS_fnc_rscLayer) cutText ["", "PLAIN"];
GVAR(Protractor) = true; GVAR(Protractor) = true;
[{ [{

View File

@ -1,16 +1,10 @@
/* /*
* Author: Glowbal, Ruthberg * 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: * Arguments:
* 0: unit - Object the event handler is assigned to <OBJECT> * None. Parameters inherited from EFUNC(common,firedEH)
* 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: * Return Value:
* None * None
@ -19,20 +13,16 @@
*/ */
#include "script_component.hpp" #include "script_component.hpp"
// Early Quiting //IGNORE_PRIVATE_WARNING ["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile", "_vehicle", "_gunner", "_turret"];
if (!hasInterface) exitWith {}; TRACE_10("firedEH:",_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile, _vehicle, _gunner, _turret);
if (!GVAR(enabled)) exitWith {};
// Parameterization // Parameterization
private ["_abort", "_AmmoCacheEntry", "_WeaponCacheEntry", "_opticsName", "_opticType", "_bulletTraceVisible", "_temperature", "_barometricPressure", "_bulletMass", "_bulletLength", "_muzzleVelocity", "_muzzleVelocityShift", "_bulletVelocity", "_bulletLength", "_barrelTwist", "_stabilityFactor", "_aceTimeSecond", "_barrelVelocityShift", "_ammoTemperatureVelocityShift"]; 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; _abort = false;
if (!(_ammo isKindOf "BulletBase")) exitWith {}; if (!(_ammo isKindOf "BulletBase")) exitWith {};
if (!alive _bullet) exitWith {}; if (!alive _projectile) exitWith {};
if (!([_unit] call EFUNC(common,isPlayer))) exitWith {};
if (_unit distance ACE_player > GVAR(simulationRadius)) exitWith {}; if (_unit distance ACE_player > GVAR(simulationRadius)) exitWith {};
if (underwater _unit) exitWith {}; if (underwater _unit) exitWith {};
if (!GVAR(simulateForEveryone) && !(local _unit)) then { if (!GVAR(simulateForEveryone) && !(local _unit)) then {
@ -54,7 +44,7 @@ if (GVAR(disabledInFullAutoMode) && getNumber(configFile >> "CfgWeapons" >> _wea
if (_abort || !(GVAR(extensionAvailable))) exitWith { if (_abort || !(GVAR(extensionAvailable))) exitWith {
if (missionNamespace getVariable [QEGVAR(windDeflection,enabled), false]) then { 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"]; _WeaponCacheEntry params ["_barrelTwist", "_twistDirection", "_barrelLength"];
_bulletVelocity = velocity _bullet; _bulletVelocity = velocity _projectile;
_muzzleVelocity = vectorMagnitude _bulletVelocity; _muzzleVelocity = vectorMagnitude _bulletVelocity;
_barrelVelocityShift = 0; _barrelVelocityShift = 0;
@ -92,7 +82,7 @@ if (GVAR(ammoTemperatureEnabled) || GVAR(barrelLengthInfluenceEnabled)) then {
if (_muzzleVelocityShift != 0) then { if (_muzzleVelocityShift != 0) then {
_muzzleVelocity = _muzzleVelocity + _muzzleVelocityShift; _muzzleVelocity = _muzzleVelocity + _muzzleVelocityShift;
_bulletVelocity = _bulletVelocity vectorAdd ((vectorNormalized _bulletVelocity) vectorMultiply (_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 { if (isNil "_temperature") then {
_temperature = ((getPosASL _unit) select 2) call EFUNC(weather,calculateTemperatureAtHeight); _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); _stabilityFactor = [_caliber, _bulletLength, _bulletMass, _barrelTwist, _muzzleVelocity, _temperature, _barometricPressure] call FUNC(calculateStabilityFactor);
}; };
GVAR(currentbulletID) = (GVAR(currentbulletID) + 1) % 10000; GVAR(currentbulletID) = (GVAR(currentbulletID) + 1) % 10000;
_aceTimeSecond = floor ACE_time; _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 { if (isNil QGVAR(BulletPFH)) then {
GVAR(BulletPFH) = [FUNC(handleFirePFH), GVAR(simulationInterval), []] call CBA_fnc_addPerFrameHandler; GVAR(BulletPFH) = [FUNC(handleFirePFH), GVAR(simulationInterval), []] call CBA_fnc_addPerFrameHandler;

View File

@ -24,6 +24,7 @@
*/ */
#include "script_component.hpp" #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"]; private ["_ammo", "_airFriction", "_caliber", "_bulletLength", "_bulletMass", "_transonicStabilityCoef", "_dragModel", "_ballisticCoefficients", "_velocityBoundaries", "_atmosphereModel", "_ammoTempMuzzleVelocityShifts", "_muzzleVelocityTable", "_barrelLengthTable", "_result"];
_ammoConfig = configFile >> "CfgAmmo" >> _this; _ammoConfig = configFile >> "CfgAmmo" >> _this;
@ -49,6 +50,42 @@ _ammoTempMuzzleVelocityShifts = getArray(_ammoConfig >> "ACE_ammoTempMuzzleVeloc
_muzzleVelocityTable = getArray(_ammoConfig >> "ACE_muzzleVelocities"); _muzzleVelocityTable = getArray(_ammoConfig >> "ACE_muzzleVelocities");
_barrelLengthTable = getArray(_ammoConfig >> "ACE_barrelLengths"); _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]; _result = [_airFriction, _caliber, _bulletLength, _bulletMass, _transonicStabilityCoef, _dragModel, _ballisticCoefficients, _velocityBoundaries, _atmosphereModel, _ammoTempMuzzleVelocityShifts, _muzzleVelocityTable, _barrelLengthTable];
uiNamespace setVariable [format[QGVAR(%1), _this], _result]; uiNamespace setVariable [format[QGVAR(%1), _this], _result];

View File

@ -1,6 +1,11 @@
#define COMPONENT advanced_ballistics #define COMPONENT advanced_ballistics
#include "\z\ace\addons\main\script_mod.hpp" #include "\z\ace\addons\main\script_mod.hpp"
// #define DEBUG_MODE_FULL
// #define DISABLE_COMPILE_CACHE
// #define CBA_DEBUG_SYNCHRONOUS
// #define ENABLE_PERFORMANCE_COUNTERS
#ifdef DEBUG_ENABLED_ADVANCEDBALLISTICS #ifdef DEBUG_ENABLED_ADVANCEDBALLISTICS
#define DEBUG_MODE_FULL #define DEBUG_MODE_FULL
#endif #endif

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project name="ACE"> <Project name="ACE">
<Package name="Advanced_Ballistics"> <Package name="Advanced_Ballistics">
<Key ID="STR_ACE_Advanced_Ballistics_WindInfoKey"> <Key ID="STR_ACE_Advanced_Ballistics_WindInfoKey">
@ -10,7 +10,7 @@
<Spanish>Mostrar información del viento</Spanish> <Spanish>Mostrar información del viento</Spanish>
<German>Windinformationen anzeigen</German> <German>Windinformationen anzeigen</German>
<Hungarian>Széladatok mutatása</Hungarian> <Hungarian>Széladatok mutatása</Hungarian>
<Czech>Zobrazit informace o větru</Czech> <Czech>Zobrazit údaje o větru</Czech>
<Portuguese>Mostrar Informação do Vento</Portuguese> <Portuguese>Mostrar Informação do Vento</Portuguese>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_ProtractorKey"> <Key ID="STR_ACE_Advanced_Ballistics_ProtractorKey">
@ -35,6 +35,7 @@
<French>Balistique avancée</French> <French>Balistique avancée</French>
<Hungarian>Fejlett ballisztika</Hungarian> <Hungarian>Fejlett ballisztika</Hungarian>
<Russian>Продвинутая баллистика</Russian> <Russian>Продвинутая баллистика</Russian>
<Italian>Balistica Avanzata</Italian>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_enabled_DisplayName"> <Key ID="STR_ACE_Advanced_Ballistics_enabled_DisplayName">
<English>Advanced Ballistics</English> <English>Advanced Ballistics</English>
@ -46,6 +47,7 @@
<French>Balistique avancée</French> <French>Balistique avancée</French>
<Hungarian>Fejlett ballisztika</Hungarian> <Hungarian>Fejlett ballisztika</Hungarian>
<Russian>Продвинутая баллистика</Russian> <Russian>Продвинутая баллистика</Russian>
<Italian>Balistica Avanzata</Italian>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_enabled_Description"> <Key ID="STR_ACE_Advanced_Ballistics_enabled_Description">
<English>Enables advanced ballistics</English> <English>Enables advanced ballistics</English>
@ -57,6 +59,7 @@
<French>Activer la balistique avancée</French> <French>Activer la balistique avancée</French>
<Hungarian>Engedélyezi a fejlett ballisztikát</Hungarian> <Hungarian>Engedélyezi a fejlett ballisztikát</Hungarian>
<Russian>Включает продвинутую баллистику</Russian> <Russian>Включает продвинутую баллистику</Russian>
<Italian>Abilita Balistica Avanzata</Italian>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulateForSnipers_DisplayName"> <Key ID="STR_ACE_Advanced_Ballistics_simulateForSnipers_DisplayName">
<English>Enabled For Snipers</English> <English>Enabled For Snipers</English>
@ -68,17 +71,19 @@
<French>Activer pour les snipers</French> <French>Activer pour les snipers</French>
<Hungarian>Mesterlövészeknek engedélyezve</Hungarian> <Hungarian>Mesterlövészeknek engedélyezve</Hungarian>
<Russian>Включена для снайперов</Russian> <Russian>Включена для снайперов</Russian>
<Italian>Abilita per Tiratori Scelti</Italian>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulateForSnipers_Description"> <Key ID="STR_ACE_Advanced_Ballistics_simulateForSnipers_Description">
<English>Enables advanced ballistics for non local snipers (when using high power optics)</English> <English>Enables advanced ballistics for non local snipers (when using high power optics)</English>
<Spanish>Activa la balística avanzada para francotiradores no locales (cuando se usa una mira telescópica)</Spanish> <Spanish>Activa la balística avanzada para francotiradores no locales (cuando se usa una mira telescópica)</Spanish>
<Polish>Aktywuje zaawansowaną balistykę dla nielokalnych snajperów (kiedy używają optyki)</Polish> <Polish>Aktywuje zaawansowaną balistykę dla nielokalnych snajperów (kiedy używają optyki)</Polish>
<German>Aktiviert die erweiterte Ballistik für nicht lokale Scharfschützen (bei Benutzung von Optiken mit starker Vergrößerung)</German> <German>Aktiviert die erweiterte Ballistik für nicht lokale Scharfschützen (bei Benutzung von Optiken mit starker Vergrößerung)</German>
<Czech>Aktivuje pokročilou balistiku pro nelokální odstřelovače (když používá výkonnou optiku)</Czech> <Czech>Aktivuje pokročilou balistiku pro nelokální odstřelovače (při použití optiky)</Czech>
<Portuguese>Ativa balística avançada para caçadores não locais (quando usando miras telescópicas)</Portuguese> <Portuguese>Ativa balística avançada para caçadores não locais (quando usando miras telescópicas)</Portuguese>
<French>Active la balistique avancée pour les snipers non locaux (en utilisant les optiques avancées)</French> <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> <Hungarian>Engedélyezi a fejlett ballisztikát nem-helyi mesterlövészeknek (nagy-teljesítményű optika használatakor)</Hungarian>
<Russian>Включает продвинутую баллистику для нелокальных снайперов (при использовании мощной оптики)</Russian> <Russian>Включает продвинутую баллистику для нелокальных снайперов (при использовании мощной оптики)</Russian>
<Italian>Abilita Balistica Avanzata per Tiratori Scelti non locali (con ottiche ad alto potenziale)</Italian>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulateForGroupMembers_DisplayName"> <Key ID="STR_ACE_Advanced_Ballistics_simulateForGroupMembers_DisplayName">
<English>Enabled For Group Members</English> <English>Enabled For Group Members</English>
@ -90,6 +95,7 @@
<French>Activer pour les membres groupés</French> <French>Activer pour les membres groupés</French>
<Hungarian>Csoporttagoknak engedélyezve</Hungarian> <Hungarian>Csoporttagoknak engedélyezve</Hungarian>
<Russian>Включена для группы</Russian> <Russian>Включена для группы</Russian>
<Italian>Abilita per Membri del Gruppo</Italian>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulateForGroupMembers_Description"> <Key ID="STR_ACE_Advanced_Ballistics_simulateForGroupMembers_Description">
<English>Enables advanced ballistics for non local group members</English> <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> <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> <Hungarian>Engedélyezi a fejlett ballisztikát nem-helyi csoporttagoknak</Hungarian>
<Russian>Включает продвинутую баллистику для нелокальных членов группы</Russian> <Russian>Включает продвинутую баллистику для нелокальных членов группы</Russian>
<Italian>Abilita Balistica Avanzata per Membri non locali del Gruppo</Italian>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulateForEveryone_DisplayName"> <Key ID="STR_ACE_Advanced_Ballistics_simulateForEveryone_DisplayName">
<English>Enabled For Everyone</English> <English>Enabled For Everyone</English>
@ -112,17 +119,19 @@
<French>Activer pour tout le monde</French> <French>Activer pour tout le monde</French>
<Hungarian>Mindenkinek engedélyezve</Hungarian> <Hungarian>Mindenkinek engedélyezve</Hungarian>
<Russian>Включена для всех</Russian> <Russian>Включена для всех</Russian>
<Italian>Abilita per tutti</Italian>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulateForEveryone_Description"> <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> <English>Enables advanced ballistics for all non local players (enabling this may degrade performance during heavy firefights in multiplayer)</English>
<Spanish>Activada la balística avanzada para todos los jugadores no locales (activarlo puede degradar el rendimiento durante grandes tiroteos en multijugador).</Spanish> <Spanish>Activada la balística avanzada para todos los jugadores no locales (activarlo puede degradar el rendimiento durante grandes tiroteos en multijugador).</Spanish>
<Polish>Aktywuje zaawansowaną balistykę dla wszystkich nielokalnych graczy (aktywacja tej opcji może spodowować spory spadek wydajności podczas ciężkiej wymiany ognia)</Polish> <Polish>Aktywuje zaawansowaną balistykę dla wszystkich nielokalnych graczy (aktywacja tej opcji może spodowować spory spadek wydajności podczas ciężkiej wymiany ognia)</Polish>
<German>Aktiviert die erweiterte Ballistik für alle nicht lokalen Spieler (das Aktivieren dieser Funktion kann zur Beeinträchtigung des Spielerlebnisses im Multiplayer führen)</German> <German>Aktiviert die erweiterte Ballistik für alle nicht lokalen Spieler (das Aktivieren dieser Funktion kann zur Beeinträchtigung des Spielerlebnisses im Multiplayer führen)</German>
<Czech>Aktivovat pokročilou balistiku pro všechny nelokální hráče (aktivace této možnosti způsobuje pokles snímu za sekundu během těžké přestřelky v multiplayeru)</Czech> <Czech>Aktivuje pokročilou balistiku pro všechny nelokální hráče (aktivace této možnosti způsobuje pokles FPS během velké přestřelky v multiplayeru)</Czech>
<Portuguese>Ativa balística avançada para todos os jogadores não locais (ativando isso pode degradar a performance durante troca de tiros intensas no multiplayer)</Portuguese> <Portuguese>Ativa balística avançada para todos os jogadores não locais (ativando isso pode degradar a performance durante troca de tiros intensas no multiplayer)</Portuguese>
<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> <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> <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> <Russian>Включает продвинутую баллистику для всех нелокальных игроков (включение этой опции может снизить производительность при массовых перестрелках в мультиплеере)</Russian>
<Italian>Abilita Balistica Avanzata per tutti i giocatori non locali (abilitare questo parametro potrebbe degradare le prestazioni durante scontri intensi in multiplayer)</Italian>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_alwaysSimulateForGroupMembers_DisplayName"> <Key ID="STR_ACE_Advanced_Ballistics_alwaysSimulateForGroupMembers_DisplayName">
<English>Always Enabled For Group Members</English> <English>Always Enabled For Group Members</English>
@ -134,6 +143,7 @@
<French>Toujours activer pour les membres groupés</French> <French>Toujours activer pour les membres groupés</French>
<Hungarian>Mindig engedélyezve csoporttagoknak</Hungarian> <Hungarian>Mindig engedélyezve csoporttagoknak</Hungarian>
<Russian>Всегда включена для членов группы</Russian> <Russian>Всегда включена для членов группы</Russian>
<Italian>Sempre abilitato per Membri del Gruppo</Italian>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_alwaysSimulateForGroupMembers_Description"> <Key ID="STR_ACE_Advanced_Ballistics_alwaysSimulateForGroupMembers_Description">
<English>Always enables advanced ballistics when a group member fires</English> <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> <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> <Hungarian>Mindig engedélyezi a fejlett ballisztikát, ha egy csoporttag tüzel</Hungarian>
<Russian>Всегда включает продвинутую баллистику когда стреляет член группы</Russian> <Russian>Всегда включает продвинутую баллистику когда стреляет член группы</Russian>
<Italian>Abilita sempre Balistica Avanzata quando un Membro del Gruppo spara</Italian>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_disabledInFullAutoMod_DisplayName"> <Key ID="STR_ACE_Advanced_Ballistics_disabledInFullAutoMod_DisplayName">
<English>Disabled In FullAuto Mode</English> <English>Disabled In FullAuto Mode</English>
@ -156,6 +167,7 @@
<French>Désactiver en mode rafale libre</French> <French>Désactiver en mode rafale libre</French>
<Hungarian>Automata módban letiltva</Hungarian> <Hungarian>Automata módban letiltva</Hungarian>
<Russian>Выкл. для автомат. режима</Russian> <Russian>Выкл. для автомат. режима</Russian>
<Italian>Disabilita in modalità di fuoco automatico</Italian>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_disabledInFullAutoMod_Description"> <Key ID="STR_ACE_Advanced_Ballistics_disabledInFullAutoMod_Description">
<English>Disables the advanced ballistics during full auto fire</English> <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> <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> <Hungarian>Letiltja a fejlett ballisztikát automata tüzelés folyamán</Hungarian>
<Russian>Выключает продвинутую баллистику при стрельбе в полностью автоматическом режиме</Russian> <Russian>Выключает продвинутую баллистику при стрельбе в полностью автоматическом режиме</Russian>
<Italian>Disabilita Balistica Avanzata durante fuoco automatico</Italian>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_ammoTemperatureEnabled_DisplayName"> <Key ID="STR_ACE_Advanced_Ballistics_ammoTemperatureEnabled_DisplayName">
<English>Enable Ammo Temperature Simulation</English> <English>Enable Ammo Temperature Simulation</English>
@ -178,6 +191,7 @@
<French>Activer la simulation de la température</French> <French>Activer la simulation de la température</French>
<Hungarian>Lőszer-hő szimuláció engedélyezése</Hungarian> <Hungarian>Lőszer-hő szimuláció engedélyezése</Hungarian>
<Russian>Симуляция температуры для боеприпасов</Russian> <Russian>Симуляция температуры для боеприпасов</Russian>
<Italian>Abilita simulazione della temperatura delle munizioni</Italian>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_ammoTemperatureEnabled_Description"> <Key ID="STR_ACE_Advanced_Ballistics_ammoTemperatureEnabled_Description">
<English>Muzzle velocity varies with ammo temperature</English> <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> <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> <Hungarian>A kezdősebesség a lőszer hőmérsékletétől függően változó</Hungarian>
<Russian>Начальная скорость пули зависит от температуры</Russian> <Russian>Начальная скорость пули зависит от температуры</Russian>
<Italian>Velocità alla volata varia con la temperatura delle munizioni</Italian>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_barrelLengthInfluenceEnabled_DisplayName"> <Key ID="STR_ACE_Advanced_Ballistics_barrelLengthInfluenceEnabled_DisplayName">
<English>Enable Barrel Length Simulation</English> <English>Enable Barrel Length Simulation</English>
@ -200,6 +215,7 @@
<French>Activer la simulation de la longueur de canon</French> <French>Activer la simulation de la longueur de canon</French>
<Hungarian>Csőhossz-szimuláció engedélyezése</Hungarian> <Hungarian>Csőhossz-szimuláció engedélyezése</Hungarian>
<Russian>Симуляция длины ствола</Russian> <Russian>Симуляция длины ствола</Russian>
<Italian>Abilita simulazione della lunghezza della canna</Italian>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_barrelLengthInfluenceEnabled_Description"> <Key ID="STR_ACE_Advanced_Ballistics_barrelLengthInfluenceEnabled_Description">
<English>Muzzle velocity varies with barrel length</English> <English>Muzzle velocity varies with barrel length</English>
@ -211,6 +227,7 @@
<French>La longueur du canon influe sur la vélocité initale</French> <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> <Hungarian>A kezdősebesség a cső hosszától függően változó</Hungarian>
<Russian>Начальная скорость пули зависит от длины ствола</Russian> <Russian>Начальная скорость пули зависит от длины ствола</Russian>
<Italian>Velocità alla volata varia con la lunghezza della canna</Italian>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_bulletTraceEnabled_DisplayName"> <Key ID="STR_ACE_Advanced_Ballistics_bulletTraceEnabled_DisplayName">
<English>Enable Bullet Trace Effect</English> <English>Enable Bullet Trace Effect</English>
@ -222,6 +239,7 @@
<French>Activer l'effet traçante</French> <French>Activer l'effet traçante</French>
<Hungarian>Nyomkövető-effekt engedélyezése</Hungarian> <Hungarian>Nyomkövető-effekt engedélyezése</Hungarian>
<Russian>Следы пуль</Russian> <Russian>Следы пуль</Russian>
<Italian>Abilita effetto di tracciatura dei proiettili</Italian>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_bulletTraceEnabled_Description"> <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> <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> <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> <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> <Russian>Включает эффект следов пуль для больших калибров (видны только через мощную оптику)</Russian>
<Italian>Abilita effetto di tracciatura per proiettili di alto calibro (visibile solo attraverso ottiche ad alto potenziale)</Italian>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulationInterval_DisplayName"> <Key ID="STR_ACE_Advanced_Ballistics_simulationInterval_DisplayName">
<English>Simulation Interval</English> <English>Simulation Interval</English>
@ -244,6 +263,7 @@
<French>Intervalle de simulation</French> <French>Intervalle de simulation</French>
<Hungarian>Szimuláció intervalluma</Hungarian> <Hungarian>Szimuláció intervalluma</Hungarian>
<Russian>Интервал симуляции</Russian> <Russian>Интервал симуляции</Russian>
<Italian>Intervallo Simulazione</Italian>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulationInterval_Description"> <Key ID="STR_ACE_Advanced_Ballistics_simulationInterval_Description">
<English>Defines the interval between every calculation step</English> <English>Defines the interval between every calculation step</English>
@ -255,6 +275,7 @@
<French>Défini un intervalle de calcul entre deux simulations</French> <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> <Hungarian>Meghatározza a számítási lépések közötti időintervallumot</Hungarian>
<Russian>Определяет временной интервал между вычислениями</Russian> <Russian>Определяет временной интервал между вычислениями</Russian>
<Italian>Definisce l'intervallo tra ogni step di calcolo</Italian>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulationRadius_DisplayName"> <Key ID="STR_ACE_Advanced_Ballistics_simulationRadius_DisplayName">
<English>Simulation Radius</English> <English>Simulation Radius</English>
@ -266,6 +287,7 @@
<French>Rayon de simulation</French> <French>Rayon de simulation</French>
<Hungarian>Szimuláció hatóköre</Hungarian> <Hungarian>Szimuláció hatóköre</Hungarian>
<Russian>Радиус симуляции</Russian> <Russian>Радиус симуляции</Russian>
<Italian>Raggio Simulazione</Italian>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulationRadius_Description"> <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> <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> <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> <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> <Russian>Определяет радиус вокруг игрока (в метрах), в котором продвинутая баллистика применяется к снарядам</Russian>
<Italian>Definisce il raggio attorno al giocatore (in metri) per cui la Balistica Avanzata è applicata ai proiettili</Italian>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Ballistics_Description"> <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> <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> <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> <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> <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> <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> <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> <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 della Balistica Avanzata - cioè la traiettoria dei proiettili è influenzata da variabili come la temperatura dell'aria, pressione atmosferica, umidità, gravità, il tipo di munizione e l'arma da cui è sparata</Italian>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -1,6 +1,11 @@
#define COMPONENT ai #define COMPONENT ai
#include "\z\ace\addons\main\script_mod.hpp" #include "\z\ace\addons\main\script_mod.hpp"
// #define DEBUG_MODE_FULL
// #define DISABLE_COMPILE_CACHE
// #define CBA_DEBUG_SYNCHRONOUS
// #define ENABLE_PERFORMANCE_COUNTERS
#ifdef DEBUG_ENABLED_AI #ifdef DEBUG_ENABLED_AI
#define DEBUG_MODE_FULL #define DEBUG_MODE_FULL
#endif #endif

View File

@ -1,6 +1,11 @@
#define COMPONENT aircraft #define COMPONENT aircraft
#include "\z\ace\addons\main\script_mod.hpp" #include "\z\ace\addons\main\script_mod.hpp"
// #define DEBUG_MODE_FULL
// #define DISABLE_COMPILE_CACHE
// #define CBA_DEBUG_SYNCHRONOUS
// #define ENABLE_PERFORMANCE_COUNTERS
#ifdef DEBUG_ENABLED_AIRCRAFT #ifdef DEBUG_ENABLED_AIRCRAFT
#define DEBUG_MODE_FULL #define DEBUG_MODE_FULL
#endif #endif

View File

@ -1,7 +0,0 @@
/*
class Extended_PreInit_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_preInit));
};
};
*/

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -11,5 +11,3 @@ class CfgPatches {
VERSION_CONFIG; VERSION_CONFIG;
}; };
}; };
#include "CfgEventHandlers.hpp"

View File

@ -0,0 +1,75 @@
ambient[]={1,1,1,1};
diffuse[]={2,2,2,0};
forcedDiffuse[]={0,0,0,0};
emmisive[]={0,0,0,1};
specular[]={0.054000214,0.054000214,0.058000047,0};
specularPower=50.700001;
PixelShaderID="Super";
VertexShaderID="Super";
class Stage1
{
texture="z\ace\addons\apl\data\entrchtool_nohq.paa";
uvSource="tex";
class uvTransform
{
aside[]={1,0,0};
up[]={0,1,0};
dir[]={0,0,0};
pos[]={0,0,0};
};
};
class Stage2
{
texture="#(argb,8,8,3)color(0.5,0.5,0.5,1,DT)";
uvSource="tex";
class uvTransform
{
aside[]={4,0,0};
up[]={0,6,0};
dir[]={0,0,2};
pos[]={0,0,0};
};
Filter="Anizotropic";
};
class Stage3
{
texture="#(argb,8,8,3)color(0,0,0,0,MC)";
uvSource="tex";
class uvTransform
{
aside[]={1,0,0};
up[]={0,1,0};
dir[]={0,0,0};
pos[]={0,0,0};
};
Filter="Anizotropic";
};
class Stage4
{
texture="z\ace\addons\apl\data\entrchtool_as.paa";
uvSource="tex";
class uvTransform
{
aside[]={1,0,0};
up[]={0,1,0};
dir[]={0,0,0};
pos[]={0,0,0};
};
};
class Stage5
{
texture="z\ace\addons\apl\data\entrchtool_smdi.paa";
uvSource="tex";
class uvTransform
{
aside[]={1,0,0};
up[]={0,1,0};
dir[]={0,0,0};
pos[]={0,0,0};
};
};
class Stage6
{
texture="a3\data_f\env_co.paa";
uvSource="none";
};

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,6 +1,11 @@
#define COMPONENT APL #define COMPONENT APL
#include "\z\ace\addons\main\script_mod.hpp" #include "\z\ace\addons\main\script_mod.hpp"
// #define DEBUG_MODE_FULL
// #define DISABLE_COMPILE_CACHE
// #define CBA_DEBUG_SYNCHRONOUS
// #define ENABLE_PERFORMANCE_COUNTERS
#ifdef DEBUG_ENABLED_APL #ifdef DEBUG_ENABLED_APL
#define DEBUG_MODE_FULL #define DEBUG_MODE_FULL
#endif #endif

View File

@ -1,3 +1,10 @@
class Extended_PreStart_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_preStart));
};
};
class Extended_PreInit_EventHandlers { class Extended_PreInit_EventHandlers {
class ADDON { class ADDON {
init = QUOTE( call COMPILE_FILE(XEH_preInit) ); init = QUOTE( call COMPILE_FILE(XEH_preInit) );

View File

@ -0,0 +1,67 @@
PREP(add_new_gun);
PREP(calculate_range_card);
PREP(calculate_solution);
PREP(calculate_target_range_assist);
PREP(calculate_target_solution);
PREP(calculate_target_speed_assist);
PREP(can_show);
PREP(change_gun);
PREP(change_target_slot);
PREP(clear_user_data);
PREP(create_dialog);
PREP(cycle_gun_list);
PREP(cycle_image_size_units);
PREP(cycle_num_ticks_units);
PREP(cycle_range_card_columns);
PREP(cycle_scope_unit);
PREP(cycle_target_size_units);
PREP(cycle_target_speed_direction);
PREP(delete_gun);
PREP(init);
PREP(parse_input);
PREP(reset_relative_click_memory);
PREP(restore_atmo_default);
PREP(restore_user_data);
PREP(save_gun);
PREP(show_add_new_gun);
PREP(show_atmo_env_data);
PREP(show_gun_ammo_data);
PREP(show_gun_list);
PREP(show_main_page);
PREP(show_range_card);
PREP(show_range_card_setup);
PREP(show_solution_setup);
PREP(show_target_data);
PREP(show_target_range_assist);
PREP(show_target_speed_assist);
PREP(show_target_speed_assist_timer);
PREP(sord);
PREP(store_user_data);
PREP(target_speed_assist_timer);
PREP(toggle_atmo_env_data);
PREP(toggle_gun_ammo_data);
PREP(toggle_gun_list);
PREP(toggle_range_card);
PREP(toggle_range_card_setup);
PREP(toggle_solution_setup);
PREP(toggle_target_data);
PREP(toggle_target_range_assist);
PREP(toggle_target_speed_assist);
PREP(update_atmosphere);
PREP(update_atmo_env_data);
PREP(update_atmo_selection);
PREP(update_gun);
PREP(update_gun_ammo_data);
PREP(update_inclination_angle);
PREP(update_range_card);
PREP(update_relative_click_memory);
PREP(update_result);
PREP(update_scope_unit);
PREP(update_solution_setup);
PREP(update_target);
PREP(update_target_data);
PREP(update_target_selection);
PREP(update_unit_selection);
PREP(update_zero_range);
PREP(on_close_dialog);

View File

@ -2,71 +2,6 @@
ADDON = false; ADDON = false;
PREP(add_new_gun); #include "XEH_PREP.hpp"
PREP(calculate_range_card);
PREP(calculate_solution);
PREP(calculate_target_range_assist);
PREP(calculate_target_solution);
PREP(calculate_target_speed_assist);
PREP(can_show);
PREP(change_gun);
PREP(change_target_slot);
PREP(clear_user_data);
PREP(create_dialog);
PREP(cycle_gun_list);
PREP(cycle_image_size_units);
PREP(cycle_num_ticks_units);
PREP(cycle_range_card_columns);
PREP(cycle_scope_unit);
PREP(cycle_target_size_units);
PREP(cycle_target_speed_direction);
PREP(delete_gun);
PREP(init);
PREP(parse_input);
PREP(reset_relative_click_memory);
PREP(restore_atmo_default);
PREP(restore_user_data);
PREP(save_gun);
PREP(show_add_new_gun);
PREP(show_atmo_env_data);
PREP(show_gun_ammo_data);
PREP(show_gun_list);
PREP(show_main_page);
PREP(show_range_card);
PREP(show_range_card_setup);
PREP(show_solution_setup);
PREP(show_target_data);
PREP(show_target_range_assist);
PREP(show_target_speed_assist);
PREP(show_target_speed_assist_timer);
PREP(sord);
PREP(store_user_data);
PREP(target_speed_assist_timer);
PREP(toggle_atmo_env_data);
PREP(toggle_gun_ammo_data);
PREP(toggle_gun_list);
PREP(toggle_range_card);
PREP(toggle_range_card_setup);
PREP(toggle_solution_setup);
PREP(toggle_target_data);
PREP(toggle_target_range_assist);
PREP(toggle_target_speed_assist);
PREP(update_atmosphere);
PREP(update_atmo_env_data);
PREP(update_atmo_selection);
PREP(update_gun);
PREP(update_gun_ammo_data);
PREP(update_inclination_angle);
PREP(update_range_card);
PREP(update_relative_click_memory);
PREP(update_result);
PREP(update_scope_unit);
PREP(update_solution_setup);
PREP(update_target);
PREP(update_target_data);
PREP(update_target_selection);
PREP(update_unit_selection);
PREP(update_zero_range);
PREP(on_close_dialog);
ADDON = true; ADDON = true;

View File

@ -0,0 +1,3 @@
#include "script_component.hpp"
#include "XEH_PREP.hpp"

View File

@ -1,6 +1,11 @@
#define COMPONENT atragmx #define COMPONENT atragmx
#include "\z\ace\addons\main\script_mod.hpp" #include "\z\ace\addons\main\script_mod.hpp"
// #define DEBUG_MODE_FULL
// #define DISABLE_COMPILE_CACHE
// #define CBA_DEBUG_SYNCHRONOUS
// #define ENABLE_PERFORMANCE_COUNTERS
#ifdef DEBUG_ENABLED_ATRAGMX #ifdef DEBUG_ENABLED_ATRAGMX
#define DEBUG_MODE_FULL #define DEBUG_MODE_FULL
#endif #endif

View File

@ -1,3 +1,10 @@
class Extended_PreStart_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_preStart));
};
};
class Extended_PreInit_EventHandlers { class Extended_PreInit_EventHandlers {
class ADDON { class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_preInit)); init = QUOTE(call COMPILE_FILE(XEH_preInit));

View File

@ -0,0 +1,10 @@
PREP(attach);
PREP(canAttach);
PREP(canDetach);
PREP(detach);
PREP(getChildrenAttachActions);
PREP(handleGetIn);
PREP(handleGetOut);
PREP(handleKilled);
PREP(placeApprove);

View File

@ -2,14 +2,6 @@
ADDON = false; ADDON = false;
PREP(attach); #include "XEH_PREP.hpp"
PREP(canAttach);
PREP(canDetach);
PREP(detach);
PREP(getChildrenAttachActions);
PREP(handleGetIn);
PREP(handleGetOut);
PREP(handleKilled);
PREP(placeApprove);
ADDON = true; ADDON = true;

View File

@ -0,0 +1,3 @@
#include "script_component.hpp"
#include "XEH_PREP.hpp"

View File

@ -49,7 +49,7 @@ if (_unit == _attachToVehicle) then { //Self Attachment
} else { } else {
GVAR(placeAction) = PLACE_WAITING; GVAR(placeAction) = PLACE_WAITING;
[_unit, QGVAR(vehAttach), true] call EFUNC(common,setForceWalkStatus); [_unit, "forceWalk", "ACE_Attach", true] call EFUNC(common,statusEffect_set);
[{[localize LSTRING(PlaceAction), ""] call EFUNC(interaction,showMouseHint)}, []] call EFUNC(common,execNextFrame); [{[localize LSTRING(PlaceAction), ""] call EFUNC(interaction,showMouseHint)}, []] call EFUNC(common,execNextFrame);
_unit setVariable [QGVAR(placeActionEH), [_unit, "DefaultAction", {true}, {GVAR(placeAction) = PLACE_APPROVE;}] call EFUNC(common,AddActionEventHandler)]; _unit setVariable [QGVAR(placeActionEH), [_unit, "DefaultAction", {true}, {GVAR(placeAction) = PLACE_APPROVE;}] call EFUNC(common,AddActionEventHandler)];
@ -88,7 +88,7 @@ if (_unit == _attachToVehicle) then { //Self Attachment
{!([_attachToVehicle, _unit, _itemClassname] call FUNC(canAttach))}) then { {!([_attachToVehicle, _unit, _itemClassname] call FUNC(canAttach))}) then {
[_idPFH] call CBA_fnc_removePerFrameHandler; [_idPFH] call CBA_fnc_removePerFrameHandler;
[_unit, QGVAR(vehAttach), false] call EFUNC(common,setForceWalkStatus); [_unit, "forceWalk", "ACE_Attach", false] call EFUNC(common,statusEffect_set);
[] call EFUNC(interaction,hideMouseHint); [] call EFUNC(interaction,hideMouseHint);
[_unit, "DefaultAction", (_unit getVariable [QGVAR(placeActionEH), -1])] call EFUNC(common,removeActionEventHandler); [_unit, "DefaultAction", (_unit getVariable [QGVAR(placeActionEH), -1])] call EFUNC(common,removeActionEventHandler);
_unit removeAction _actionID; _unit removeAction _actionID;

View File

@ -1,6 +1,11 @@
#define COMPONENT attach #define COMPONENT attach
#include "\z\ace\addons\main\script_mod.hpp" #include "\z\ace\addons\main\script_mod.hpp"
// #define DEBUG_MODE_FULL
// #define DISABLE_COMPILE_CACHE
// #define CBA_DEBUG_SYNCHRONOUS
// #define ENABLE_PERFORMANCE_COUNTERS
#ifdef DEBUG_ENABLED_ATTACH #ifdef DEBUG_ENABLED_ATTACH
#define DEBUG_MODE_FULL #define DEBUG_MODE_FULL
#endif #endif

View File

@ -7,7 +7,7 @@
<Spanish>Acoplar objeto &gt;&gt;</Spanish> <Spanish>Acoplar objeto &gt;&gt;</Spanish>
<Polish>Przyczep &gt;&gt;</Polish> <Polish>Przyczep &gt;&gt;</Polish>
<French>Attacher l'objet &gt;&gt;</French> <French>Attacher l'objet &gt;&gt;</French>
<Czech>Připnout předmět &gt;&gt;</Czech> <Czech>Připnout &gt;&gt;</Czech>
<Portuguese>Fixar item &gt;&gt;</Portuguese> <Portuguese>Fixar item &gt;&gt;</Portuguese>
<Italian>Attacca l'oggetto &gt;&gt;</Italian> <Italian>Attacca l'oggetto &gt;&gt;</Italian>
<Hungarian>Tárgy hozzácsatolása &gt;&gt;</Hungarian> <Hungarian>Tárgy hozzácsatolása &gt;&gt;</Hungarian>
@ -115,7 +115,7 @@
<Spanish>Sin espacio en inventario</Spanish> <Spanish>Sin espacio en inventario</Spanish>
<Polish>Brak miejsca w ekwipunku</Polish> <Polish>Brak miejsca w ekwipunku</Polish>
<French>Pas de place dans l'inventaire</French> <French>Pas de place dans l'inventaire</French>
<Czech>Není místo v inventáři</Czech> <Czech>Nedostatek místa v inventáři</Czech>
<Portuguese>Sem espaço no inventário</Portuguese> <Portuguese>Sem espaço no inventário</Portuguese>
<Italian>Non hai più spazio</Italian> <Italian>Non hai più spazio</Italian>
<Hungarian>Nincs több hely</Hungarian> <Hungarian>Nincs több hely</Hungarian>
@ -175,7 +175,7 @@
<German>Befestigen fehlgeschlagen</German> <German>Befestigen fehlgeschlagen</German>
<Russian>Не удалось присоединить</Russian> <Russian>Не удалось присоединить</Russian>
<Spanish>Error al acoplar</Spanish> <Spanish>Error al acoplar</Spanish>
<Czech>Připnutí selhalo</Czech> <Czech>Připnout přesmět se nezdařilo</Czech>
<Portuguese>Erro ao fixar</Portuguese> <Portuguese>Erro ao fixar</Portuguese>
<Polish>Przyczepianie nie powiodło się</Polish> <Polish>Przyczepianie nie powiodło się</Polish>
<Hungarian>Hozzácsatolás sikertelen</Hungarian> <Hungarian>Hozzácsatolás sikertelen</Hungarian>
@ -187,7 +187,7 @@
<Spanish>%1&lt;br/&gt;acoplada</Spanish> <Spanish>%1&lt;br/&gt;acoplada</Spanish>
<Polish>Przyczepiono&lt;br/&gt;%1</Polish> <Polish>Przyczepiono&lt;br/&gt;%1</Polish>
<French>%1&lt;br/&gt;attachée</French> <French>%1&lt;br/&gt;attachée</French>
<Czech>%1&lt;br/&gt;Připnutý</Czech> <Czech>%1&lt;br/&gt;Připnuto</Czech>
<Portuguese>%1&lt;br/&gt;Fixada</Portuguese> <Portuguese>%1&lt;br/&gt;Fixada</Portuguese>
<Italian>%1&lt;br/&gt;attaccata</Italian> <Italian>%1&lt;br/&gt;attaccata</Italian>
<Hungarian>%1&lt;br/&gt;hozzácsatolva</Hungarian> <Hungarian>%1&lt;br/&gt;hozzácsatolva</Hungarian>
@ -199,7 +199,7 @@
<Spanish>%1&lt;br/&gt;quitada</Spanish> <Spanish>%1&lt;br/&gt;quitada</Spanish>
<Polish>Odczepiono&lt;br/&gt;%1</Polish> <Polish>Odczepiono&lt;br/&gt;%1</Polish>
<French>%1&lt;br/&gt;détachée</French> <French>%1&lt;br/&gt;détachée</French>
<Czech>%1&lt;br/&gt;Odepnutý</Czech> <Czech>%1&lt;br/&gt;Odepnuto</Czech>
<Portuguese>%1&lt;br/&gt;Separada</Portuguese> <Portuguese>%1&lt;br/&gt;Separada</Portuguese>
<Italian>%1&lt;br/&gt;staccata</Italian> <Italian>%1&lt;br/&gt;staccata</Italian>
<Hungarian>%1&lt;br/&gt;lecsatolva</Hungarian> <Hungarian>%1&lt;br/&gt;lecsatolva</Hungarian>

View File

@ -1,4 +1,10 @@
class Extended_PreStart_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_preStart));
};
};
class Extended_PreInit_EventHandlers { class Extended_PreInit_EventHandlers {
class ADDON { class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_preInit)); init = QUOTE(call COMPILE_FILE(XEH_preInit));

View File

@ -0,0 +1,4 @@
PREP(backpackOpened);
PREP(isBackpack);
PREP(onOpenInventory);

View File

@ -2,8 +2,6 @@
ADDON = false; ADDON = false;
PREP(backpackOpened); #include "XEH_PREP.hpp"
PREP(isBackpack);
PREP(onOpenInventory);
ADDON = true; ADDON = true;

View File

@ -0,0 +1,3 @@
#include "script_component.hpp"
#include "XEH_PREP.hpp"

View File

@ -17,27 +17,20 @@
params ["_target", "_backpack"]; params ["_target", "_backpack"];
// do cam shake if the target is the player // do cam shake if the target is the player
if ([_target] call EFUNC(common,isPlayer)) then { if (_target call EFUNC(common,isPlayer)) then {
addCamShake [4, 0.5, 5]; addCamShake [4, 0.5, 5];
}; };
// play a zipper sound effect // play a zipper sound effect
private ["_sounds", "_position"]; private _sounds = [
_sounds = [
/*"a3\sounds_f\characters\ingame\AinvPknlMstpSlayWpstDnon_medic.wss",
"a3\sounds_f\characters\ingame\AinvPknlMstpSlayWrflDnon_medic.wss",
"a3\sounds_f\characters\ingame\AinvPpneMstpSlayWpstDnon_medic.wss",
"a3\sounds_f\characters\ingame\AinvPpneMstpSlayWrflDnon_medic.wss"*/
QUOTE(PATHTO_R(sounds\zip_in.wav)), QUOTE(PATHTO_R(sounds\zip_in.wav)),
QUOTE(PATHTO_R(sounds\zip_out.wav)) QUOTE(PATHTO_R(sounds\zip_out.wav))
]; ];
_position = AGLToASL (_target modelToWorldVisual (_target selectionPosition "Spine3")); private _position = AGLToASL (_target modelToWorldVisual (_target selectionPosition "Spine3"));
playSound3D [ playSound3D [
_sounds select floor random count _sounds, selectRandom _sounds,
objNull, objNull,
false, false,
_position, _position,

View File

@ -12,13 +12,12 @@
*/ */
#include "script_component.hpp" #include "script_component.hpp"
params ["_backpack"]; params [["_backpack", objNull, [objNull]]];
if (_backpack isEqualType objNull) then { if (_backpack isEqualType objNull) then {
_backpack = typeOf _backpack; _backpack = typeOf _backpack;
}; };
private "_config"; private _config = configFile >> "CfgVehicles" >> _backpack;
_config = configFile >> "CfgVehicles" >> _backpack;
getText (_config >> "vehicleClass") == "backpacks" && {getNumber (_config >> "maximumLoad") > 0} // return getText (_config >> "vehicleClass") == "backpacks" && {getNumber (_config >> "maximumLoad") > 0} // return

View File

@ -16,11 +16,10 @@
params ["_unit", "_backpack"]; params ["_unit", "_backpack"];
// exit if the target is not a real backpack, i.e. parachute, static weapon bag etc. // exit if the target is not a real backpack, i.e. parachute, static weapon bag etc.
if !([_backpack] call FUNC(isBackpack)) exitWith {false}; if !(_backpack call FUNC(isBackpack)) exitWith {false};
// get the unit that wears the backpack object // get the unit that wears the backpack object
private "_target"; private _target = objectParent _backpack;
_target = objectParent _backpack;
if (isNull _target) exitWith {false}; if (isNull _target) exitWith {false};

View File

@ -1,6 +1,11 @@
#define COMPONENT backpacks #define COMPONENT backpacks
#include "\z\ace\addons\main\script_mod.hpp" #include "\z\ace\addons\main\script_mod.hpp"
// #define DEBUG_MODE_FULL
// #define DISABLE_COMPILE_CACHE
// #define CBA_DEBUG_SYNCHRONOUS
// #define ENABLE_PERFORMANCE_COUNTERS
#ifdef DEBUG_ENABLED_BACKPACKS #ifdef DEBUG_ENABLED_BACKPACKS
#define DEBUG_MODE_FULL #define DEBUG_MODE_FULL
#endif #endif

View File

@ -14,7 +14,6 @@ class CfgWeapons {
class MMG_02_base_F; class MMG_02_base_F;
class Rifle_Base_F; class Rifle_Base_F;
class Rifle_Long_Base_F; class Rifle_Long_Base_F;
class WeaponSlotsInfo;
class MuzzleSlot; class MuzzleSlot;
/* Long Rifles */ /* Long Rifles */
@ -74,22 +73,12 @@ class CfgWeapons {
}; };
class DMR_01_base_F: Rifle_Long_Base_F { class DMR_01_base_F: Rifle_Long_Base_F {
class WeaponSlotsInfo: WeaponSlotsInfo {
class MuzzleSlot: MuzzleSlot {
compatibleItems[] += {"ACE_muzzle_mzls_B"};
};
};
class Single: Mode_SemiAuto { class Single: Mode_SemiAuto {
dispersion = 0.0004; // radians. Equal to 1.375 MOA. dispersion = 0.0004; // radians. Equal to 1.375 MOA.
}; };
}; };
class EBR_base_F: Rifle_Long_Base_F { class EBR_base_F: Rifle_Long_Base_F {
class WeaponSlotsInfo: WeaponSlotsInfo {
class MuzzleSlot: MuzzleSlot {
compatibleItems[] += {"ACE_muzzle_mzls_B"};
};
};
class Single: Mode_SemiAuto { class Single: Mode_SemiAuto {
dispersion = 0.00029; // radians. Equal to 1.00 MOA. dispersion = 0.00029; // radians. Equal to 1.00 MOA.
}; };
@ -101,13 +90,7 @@ class CfgWeapons {
/* MX */ /* MX */
class arifle_MX_Base_F: Rifle_Base_F { class arifle_MX_Base_F: Rifle_Base_F {};
class WeaponSlotsInfo: WeaponSlotsInfo {
class MuzzleSlot: MuzzleSlot {
compatibleItems[] += {"ACE_muzzle_mzls_H"};
};
};
};
class arifle_MX_SW_F: arifle_MX_Base_F { class arifle_MX_SW_F: arifle_MX_Base_F {
magazines[] = { magazines[] = {
"100Rnd_65x39_caseless_mag_Tracer", "100Rnd_65x39_caseless_mag_Tracer",
@ -120,13 +103,6 @@ class CfgWeapons {
initSpeed = -1.0; initSpeed = -1.0;
ACE_barrelTwist=228.6; ACE_barrelTwist=228.6;
ACE_barrelLength=406.4; ACE_barrelLength=406.4;
class WeaponSlotsInfo: WeaponSlotsInfo {
class MuzzleSlot: MuzzleSlot {
// Shit is broken again
//compatibleItems[] += {"ACE_muzzle_mzls_H"};
compatibleItems[] = {"muzzle_snds_H","muzzle_snds_H_SW","ACE_muzzle_mzls_H"};
};
};
}; };
class arifle_MXM_F: arifle_MX_Base_F { class arifle_MXM_F: arifle_MX_Base_F {
magazines[] = { magazines[] = {
@ -150,13 +126,7 @@ class CfgWeapons {
/* Katiba */ /* Katiba */
class arifle_katiba_Base_F: Rifle_Base_F { class arifle_katiba_Base_F: Rifle_Base_F {};
class WeaponSlotsInfo: WeaponSlotsInfo {
class MuzzleSlot: MuzzleSlot {
compatibleItems[] += {"ACE_muzzle_mzls_H"};
};
};
};
/* Other */ /* Other */
@ -167,42 +137,16 @@ class CfgWeapons {
"ACE_200Rnd_65x39_cased_Box_Tracer_Dim" "ACE_200Rnd_65x39_cased_Box_Tracer_Dim"
}; };
initSpeed = -0.9763; initSpeed = -0.9763;
class WeaponSlotsInfo: WeaponSlotsInfo {
class MuzzleSlot: MuzzleSlot {
compatibleItems[] += {"ACE_muzzle_mzls_H"};
};
};
ACE_barrelTwist=177.8; ACE_barrelTwist=177.8;
ACE_barrelLength=317.5; ACE_barrelLength=317.5;
}; };
class LMG_Zafir_F: Rifle_Long_Base_F { class LMG_Zafir_F: Rifle_Long_Base_F {
initSpeed = -1.0; initSpeed = -1.0;
class WeaponSlotsInfo: WeaponSlotsInfo {
class MuzzleSlot: MuzzleSlot {
compatibleItems[] += {"ACE_muzzle_mzls_B"};
};
};
ACE_barrelTwist=304.8; ACE_barrelTwist=304.8;
ACE_barrelLength=459.74; ACE_barrelLength=459.74;
}; };
class Tavor_base_F: Rifle_Base_F {};
class mk20_base_F: Rifle_Base_F {};
/* Assault Rifles */
class Tavor_base_F: Rifle_Base_F {
class WeaponSlotsInfo: WeaponSlotsInfo {
class MuzzleSlot: MuzzleSlot {
compatibleItems[] += {"ACE_muzzle_mzls_L"};
};
};
};
class mk20_base_F: Rifle_Base_F {
class WeaponSlotsInfo: WeaponSlotsInfo {
class MuzzleSlot: MuzzleSlot {
compatibleItems[] += {"ACE_muzzle_mzls_L"};
};
};
};
/* SMGs */ /* SMGs */
class SDAR_base_F: Rifle_Base_F { class SDAR_base_F: Rifle_Base_F {
@ -219,93 +163,43 @@ class CfgWeapons {
dispersion = 0.0008727; // radians. Equal to 3 MOA. dispersion = 0.0008727; // radians. Equal to 3 MOA.
}; };
}; };
class pdw2000_base_F: Rifle_Base_F { class pdw2000_base_F: Rifle_Base_F {};
class WeaponSlotsInfo: WeaponSlotsInfo { class SMG_01_Base: Rifle_Base_F {};
class MuzzleSlot: MuzzleSlot { class SMG_02_base_F: Rifle_Base_F {};
compatibleItems[] += {"ACE_muzzle_mzls_smg_02"};
};
};
};
class SMG_01_Base: Rifle_Base_F {
class WeaponSlotsInfo: WeaponSlotsInfo {
class MuzzleSlot: MuzzleSlot {
compatibleItems[] += {"ACE_muzzle_mzls_smg_01"};
};
};
};
class SMG_02_base_F: Rifle_Base_F {
class WeaponSlotsInfo: WeaponSlotsInfo {
class MuzzleSlot: MuzzleSlot {
compatibleItems[] += {"ACE_muzzle_mzls_smg_02"};
};
};
};
/* Pistols */ /* Pistols */
class Pistol; class Pistol;
class Pistol_Base_F: Pistol { class Pistol_Base_F: Pistol {};
class WeaponSlotsInfo;
};
class hgun_P07_F: Pistol_Base_F { class hgun_P07_F: Pistol_Base_F {
initSpeed = -0.9778; initSpeed = -0.9778;
ACE_barrelTwist=254.0; ACE_barrelTwist=254.0;
ACE_barrelLength=101.6; ACE_barrelLength=101.6;
class WeaponSlotsInfo: WeaponSlotsInfo {
class MuzzleSlot: MuzzleSlot {
linkProxy = "\A3\data_f\proxies\weapon_slots\MUZZLE";
compatibleItems[] += {"ACE_muzzle_mzls_smg_02"};
};
};
}; };
class hgun_Rook40_F: Pistol_Base_F { class hgun_Rook40_F: Pistol_Base_F {
initSpeed = -1.0; initSpeed = -1.0;
ACE_barrelTwist=254.0; ACE_barrelTwist=254.0;
ACE_barrelLength=111.76; ACE_barrelLength=111.76;
class WeaponSlotsInfo: WeaponSlotsInfo {
class MuzzleSlot: MuzzleSlot {
linkProxy = "\A3\data_f\proxies\weapon_slots\MUZZLE";
compatibleItems[] += {"ACE_muzzle_mzls_smg_02"};
};
};
}; };
class hgun_ACPC2_F: Pistol_Base_F { class hgun_ACPC2_F: Pistol_Base_F {
initSpeed = -1.0; initSpeed = -1.0;
ACE_barrelTwist=406.4; ACE_barrelTwist=406.4;
ACE_barrelLength=127.0; ACE_barrelLength=127.0;
class WeaponSlotsInfo: WeaponSlotsInfo {
class MuzzleSlot: MuzzleSlot {
compatibleItems[] += {"ACE_muzzle_mzls_smg_01"};
};
};
}; };
class hgun_Pistol_heavy_01_F: Pistol_Base_F { class hgun_Pistol_heavy_01_F: Pistol_Base_F {
initSpeed = -0.96; initSpeed = -0.96;
ACE_barrelTwist=406.4; ACE_barrelTwist=406.4;
ACE_barrelLength=114.3; ACE_barrelLength=114.3;
class WeaponSlotsInfo: WeaponSlotsInfo {
class MuzzleSlot: MuzzleSlot {
compatibleItems[] += {"ACE_muzzle_mzls_smg_01"};
};
};
}; };
class hgun_Pistol_heavy_02_F: Pistol_Base_F { class hgun_Pistol_heavy_02_F: Pistol_Base_F {
initSpeed = -0.92; initSpeed = -0.92;
ACE_barrelTwist=406.4; ACE_barrelTwist=406.4;
ACE_barrelLength=76.2; ACE_barrelLength=76.2;
/*
class WeaponSlotsInfo: WeaponSlotsInfo {
class MuzzleSlot {
linkProxy = "\A3\data_f\proxies\weapon_slots\MUZZLE";
compatibleItems[] += {"ACE_muzzle_mzls_smg_01"};
};
};
*/
}; };
class hgun_PDW2000_F: pdw2000_base_F { class hgun_PDW2000_F: pdw2000_base_F {
initSpeed = -1.157; initSpeed = -1.157;

View File

@ -1,6 +1,11 @@
#define COMPONENT ballistics #define COMPONENT ballistics
#include "\z\ace\addons\main\script_mod.hpp" #include "\z\ace\addons\main\script_mod.hpp"
// #define DEBUG_MODE_FULL
// #define DISABLE_COMPILE_CACHE
// #define CBA_DEBUG_SYNCHRONOUS
// #define ENABLE_PERFORMANCE_COUNTERS
#ifdef DEBUG_ENABLED_BALLISTICS #ifdef DEBUG_ENABLED_BALLISTICS
#define DEBUG_MODE_FULL #define DEBUG_MODE_FULL
#endif #endif

View File

@ -33,7 +33,7 @@
<Spanish>Calibre: 6,5x39mm Trazadoras IR-DIM&lt;br /&gt;Balas: 30&lt;br /&gt;Se usa en: MX/C/M/SW/3GL</Spanish> <Spanish>Calibre: 6,5x39mm Trazadoras IR-DIM&lt;br /&gt;Balas: 30&lt;br /&gt;Se usa en: MX/C/M/SW/3GL</Spanish>
<French>Calibre: 6,5x39mm Traçantes IR-DIM&lt;br /&gt;Cartouches: 30&lt;br /&gt;Utilisé avec: MX/C/M/SW/3GL</French> <French>Calibre: 6,5x39mm Traçantes IR-DIM&lt;br /&gt;Cartouches: 30&lt;br /&gt;Utilisé avec: MX/C/M/SW/3GL</French>
<Polish>Kaliber: 6,5x39mm Smugacz IR-DIM&lt;br /&gt;Pociski: 30&lt;br /&gt;Używane w: MX/C/M/SW/3GL</Polish> <Polish>Kaliber: 6,5x39mm Smugacz IR-DIM&lt;br /&gt;Pociski: 30&lt;br /&gt;Używane w: MX/C/M/SW/3GL</Polish>
<Czech>Ráže: 6.5x39mm Svítící IR-DIM&lt;br /&gt;Munice: 30&lt;br /&gt;Použití: MX/C/M/SW/3GL</Czech> <Czech>Ráže: 6.5x39mm Svítící IR-DIM&lt;br /&gt;Nábojů: 30&lt;br /&gt;Použití u: MX</Czech>
<Portuguese>Calibre: 6,5x39mm Traçante IR-DIM&lt;br /&gt;Projéteis: 30&lt;br /&gt;Usado em: MX/C/M/SW/3GL</Portuguese> <Portuguese>Calibre: 6,5x39mm Traçante IR-DIM&lt;br /&gt;Projéteis: 30&lt;br /&gt;Usado em: MX/C/M/SW/3GL</Portuguese>
<Italian>Calibro: 6.5x39mm Traccianti IR-DIM &lt;br /&gt;Munizioni: 30&lt;br /&gt;In uso su: MX/C/M/SW/3GL</Italian> <Italian>Calibro: 6.5x39mm Traccianti IR-DIM &lt;br /&gt;Munizioni: 30&lt;br /&gt;In uso su: MX/C/M/SW/3GL</Italian>
<Russian>Калибр: 6,5x39 мм ИК-трассирующие&lt;br /&gt;Патронов: 30&lt;br /&gt;Используются с: MX/C/M/SW/3GL</Russian> <Russian>Калибр: 6,5x39 мм ИК-трассирующие&lt;br /&gt;Патронов: 30&lt;br /&gt;Используются с: MX/C/M/SW/3GL</Russian>
@ -69,7 +69,7 @@
<Spanish>Calibre: 6,5x39mm SD&lt;br /&gt;Balas: 30&lt;br /&gt;Se usa en: MX/C/M/SW/3GL</Spanish> <Spanish>Calibre: 6,5x39mm SD&lt;br /&gt;Balas: 30&lt;br /&gt;Se usa en: MX/C/M/SW/3GL</Spanish>
<French>Calibre: 6,5x39mm SD&lt;br /&gt;Cartouches: 30&lt;br /&gt;Utilisé avec: MX/C/M/SW/3GL</French> <French>Calibre: 6,5x39mm SD&lt;br /&gt;Cartouches: 30&lt;br /&gt;Utilisé avec: MX/C/M/SW/3GL</French>
<Polish>Kaliber: 6,5x39mm SD&lt;br /&gt;Pociski: 30&lt;br /&gt;Używane w: MX/C/M/SW/3GL</Polish> <Polish>Kaliber: 6,5x39mm SD&lt;br /&gt;Pociski: 30&lt;br /&gt;Używane w: MX/C/M/SW/3GL</Polish>
<Czech>Ráže: 6.5x39mm SD&lt;br /&gt;Munice: 30&lt;br /&gt;Použití: MX/C/M/SW/3GL</Czech> <Czech>Ráže: 6.5x39mm SD&lt;br /&gt;Nábojů: 30&lt;br /&gt;Použití u: MX</Czech>
<Portuguese>Calibre: 6,5x39mm SD&lt;br /&gt;Projéteis: 30&lt;br /&gt;Usado em: MX/C/M/SW/3GL</Portuguese> <Portuguese>Calibre: 6,5x39mm SD&lt;br /&gt;Projéteis: 30&lt;br /&gt;Usado em: MX/C/M/SW/3GL</Portuguese>
<Italian>Calibro: 6.5x39mm Sil.&lt;br /&gt;Munizioni: 30&lt;br /&gt;In uso su: MX/C/M/SW/3GL </Italian> <Italian>Calibro: 6.5x39mm Sil.&lt;br /&gt;Munizioni: 30&lt;br /&gt;In uso su: MX/C/M/SW/3GL </Italian>
<Russian>Калибр: 6,5x39 мм дозвуковые&lt;br /&gt;Патронов: 30&lt;br /&gt;Используются с: MX/C/M/SW/3GL</Russian> <Russian>Калибр: 6,5x39 мм дозвуковые&lt;br /&gt;Патронов: 30&lt;br /&gt;Используются с: MX/C/M/SW/3GL</Russian>
@ -105,7 +105,7 @@
<Spanish>Calibre: 6,5x39mm AP&lt;br /&gt;Balas: 30&lt;br /&gt;Se usa en: MX/C/M/SW/3GL</Spanish> <Spanish>Calibre: 6,5x39mm AP&lt;br /&gt;Balas: 30&lt;br /&gt;Se usa en: MX/C/M/SW/3GL</Spanish>
<French>Calibre: 6,5x39mm AP&lt;br /&gt;Cartouches: 30&lt;br /&gt;Utilisé avec: MX/C/M/SW/3GL</French> <French>Calibre: 6,5x39mm AP&lt;br /&gt;Cartouches: 30&lt;br /&gt;Utilisé avec: MX/C/M/SW/3GL</French>
<Polish>Kaliber: 6,5x39mm AP&lt;br /&gt;Pociski: 30&lt;br /&gt;Używane w: MX/C/M/SW/3GL</Polish> <Polish>Kaliber: 6,5x39mm AP&lt;br /&gt;Pociski: 30&lt;br /&gt;Używane w: MX/C/M/SW/3GL</Polish>
<Czech>Ráže: 6.5x39mm AP&lt;br /&gt;Munice: 30&lt;br /&gt;Použití: MX/C/M/SW/3GL</Czech> <Czech>Ráže: 6.5x39mm AP&lt;br /&gt;Nábojů: 30&lt;br /&gt;Použití u: MX</Czech>
<Portuguese>Calibre: 6,5x39mm AP&lt;br /&gt;Projéteis: 30&lt;br /&gt;Usado em: MX/C/M/SW/3GL</Portuguese> <Portuguese>Calibre: 6,5x39mm AP&lt;br /&gt;Projéteis: 30&lt;br /&gt;Usado em: MX/C/M/SW/3GL</Portuguese>
<Italian>Calibro: 6.5x39mm AP&lt;br /&gt;Munizioni: 30&lt;br /&gt;In uso su: MX/C/M/SW/3GL</Italian> <Italian>Calibro: 6.5x39mm AP&lt;br /&gt;Munizioni: 30&lt;br /&gt;In uso su: MX/C/M/SW/3GL</Italian>
<Russian>Калибр: 6,5x39 мм бронебойные&lt;br /&gt;Патронов: 30&lt;br /&gt;Используются с: MX/C/M/SW/3GL</Russian> <Russian>Калибр: 6,5x39 мм бронебойные&lt;br /&gt;Патронов: 30&lt;br /&gt;Используются с: MX/C/M/SW/3GL</Russian>
@ -142,7 +142,7 @@
<Spanish>Calibre: 6,5x39mm Trazadoras IR-DIM&lt;br /&gt;Balas: 30&lt;br /&gt;Se usa en: Katiba</Spanish> <Spanish>Calibre: 6,5x39mm Trazadoras IR-DIM&lt;br /&gt;Balas: 30&lt;br /&gt;Se usa en: Katiba</Spanish>
<French>Calibre: 6,5x39mm Traçantes IR-DIM&lt;br /&gt;Cartouches: 30&lt;br /&gt;Utilisé avec: Katiba</French> <French>Calibre: 6,5x39mm Traçantes IR-DIM&lt;br /&gt;Cartouches: 30&lt;br /&gt;Utilisé avec: Katiba</French>
<Polish>Kaliber: 6,5x39mm Smugacz IR-DIM&lt;br /&gt;Pociski: 30&lt;br /&gt;Używane w: Katiba</Polish> <Polish>Kaliber: 6,5x39mm Smugacz IR-DIM&lt;br /&gt;Pociski: 30&lt;br /&gt;Używane w: Katiba</Polish>
<Czech>Ráže: 6.5x39mm Svítící IR-DIM&lt;br /&gt;Munice: 30&lt;br /&gt;Použití: Katiba</Czech> <Czech>Ráže: 6.5x39mm Svítící IR-DIM&lt;br /&gt;Nábojů: 30&lt;br /&gt;Použití u: KH 2002 Sama</Czech>
<Portuguese>Calibre: 6,5x39mm Traçante IR-DIM&lt;br /&gt;Projéteis: 30&lt;br /&gt;Usado em: Katiba</Portuguese> <Portuguese>Calibre: 6,5x39mm Traçante IR-DIM&lt;br /&gt;Projéteis: 30&lt;br /&gt;Usado em: Katiba</Portuguese>
<Italian>Calibro: 6.5x39mm Tracciant IR-DIM&lt;br /&gt;Munizioni: 30&lt;br /&gt;In uso su: Katiba</Italian> <Italian>Calibro: 6.5x39mm Tracciant IR-DIM&lt;br /&gt;Munizioni: 30&lt;br /&gt;In uso su: Katiba</Italian>
<Russian>Калибр: 6,5x39 мм ИК-трассирующие&lt;br /&gt;Патронов: 30&lt;br /&gt;Используются с: Katiba</Russian> <Russian>Калибр: 6,5x39 мм ИК-трассирующие&lt;br /&gt;Патронов: 30&lt;br /&gt;Используются с: Katiba</Russian>
@ -178,7 +178,7 @@
<Spanish>Calibre: 6,5x39mm SD&lt;br /&gt;Balas: 30&lt;br /&gt;Se usa en: Katiba</Spanish> <Spanish>Calibre: 6,5x39mm SD&lt;br /&gt;Balas: 30&lt;br /&gt;Se usa en: Katiba</Spanish>
<French>Calibre: 6,5x39mm SD&lt;br /&gt;Cartouches: 30&lt;br /&gt;Utilisé avec: Katiba</French> <French>Calibre: 6,5x39mm SD&lt;br /&gt;Cartouches: 30&lt;br /&gt;Utilisé avec: Katiba</French>
<Polish>Kaliber: 6,5x39mm SD&lt;br /&gt;Naboje: 30&lt;br /&gt;Używane w: Katiba</Polish> <Polish>Kaliber: 6,5x39mm SD&lt;br /&gt;Naboje: 30&lt;br /&gt;Używane w: Katiba</Polish>
<Czech>Ráže: 6.5x39mm SD&lt;br /&gt;Munice: 30&lt;br /&gt;Použití: Katiba</Czech> <Czech>Ráže: 6.5x39mm SD&lt;br /&gt;Nábojů: 30&lt;br /&gt;Použití u: KH 2002 Sama</Czech>
<Portuguese>Calibre: 6,5x39mm SD&lt;br /&gt;Projéteis: 30&lt;br /&gt;Usado em: Katiba</Portuguese> <Portuguese>Calibre: 6,5x39mm SD&lt;br /&gt;Projéteis: 30&lt;br /&gt;Usado em: Katiba</Portuguese>
<Italian>Calibro: 6.5x39mm Sil.&lt;br /&gt;Munizioni: 30&lt;br /&gt;In uso su: Katiba</Italian> <Italian>Calibro: 6.5x39mm Sil.&lt;br /&gt;Munizioni: 30&lt;br /&gt;In uso su: Katiba</Italian>
<Russian>Калибр: 6,5x39 мм дозвуковые&lt;br /&gt;Патронов: 30&lt;br /&gt;Используются с: Katiba</Russian> <Russian>Калибр: 6,5x39 мм дозвуковые&lt;br /&gt;Патронов: 30&lt;br /&gt;Используются с: Katiba</Russian>
@ -214,7 +214,7 @@
<Spanish>Calibre: 6,5x39mm AP&lt;br /&gt;Balas: 30&lt;br /&gt;Se usa en: Katiba</Spanish> <Spanish>Calibre: 6,5x39mm AP&lt;br /&gt;Balas: 30&lt;br /&gt;Se usa en: Katiba</Spanish>
<French>Calibre: 6,5x39mm AP&lt;br /&gt;Cartouches: 30&lt;br /&gt;Utilisé avec: Katiba</French> <French>Calibre: 6,5x39mm AP&lt;br /&gt;Cartouches: 30&lt;br /&gt;Utilisé avec: Katiba</French>
<Polish>Kaliber: 6,5x39mm AP&lt;br /&gt;Pociski: 30&lt;br /&gt;Używane w: Katiba</Polish> <Polish>Kaliber: 6,5x39mm AP&lt;br /&gt;Pociski: 30&lt;br /&gt;Używane w: Katiba</Polish>
<Czech>Ráže: 6.5x39mm AP&lt;br /&gt;Munice: 30&lt;br /&gt;Použití: Katiba</Czech> <Czech>Ráže: 6.5x39mm AP&lt;br /&gt;Nábojů: 30&lt;br /&gt;Použití u: KH 2002 Sama</Czech>
<Portuguese>Calibre: 6,5x39mm AP&lt;br /&gt;Projéteis: 30&lt;br /&gt;Usado em: Katiba</Portuguese> <Portuguese>Calibre: 6,5x39mm AP&lt;br /&gt;Projéteis: 30&lt;br /&gt;Usado em: Katiba</Portuguese>
<Italian>Calibro: 6.5x39mm AP&lt;br /&gt;Munizioni: 30&lt;br /&gt;In uso su: Katiba</Italian> <Italian>Calibro: 6.5x39mm AP&lt;br /&gt;Munizioni: 30&lt;br /&gt;In uso su: Katiba</Italian>
<Russian>Калибр: 6,5x39 мм бронебойные&lt;br /&gt;Патронов: 30&lt;br /&gt;Используются с: Katiba</Russian> <Russian>Калибр: 6,5x39 мм бронебойные&lt;br /&gt;Патронов: 30&lt;br /&gt;Используются с: Katiba</Russian>
@ -251,7 +251,7 @@
<Spanish>Calibre: 5,56x45mm Trazadoras IR-DIM&lt;br /&gt;Balas: 30&lt;br /&gt;Se usa en: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Spanish> <Spanish>Calibre: 5,56x45mm Trazadoras IR-DIM&lt;br /&gt;Balas: 30&lt;br /&gt;Se usa en: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Spanish>
<French>Calibre: 5,56x45mm Traçantes IR-DIM&lt;br /&gt;Cartouches: 30&lt;br /&gt;Utilisé avec: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</French> <French>Calibre: 5,56x45mm Traçantes IR-DIM&lt;br /&gt;Cartouches: 30&lt;br /&gt;Utilisé avec: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</French>
<Polish>Kaliber: 5,56x45mm Smugacz IR-DIM&lt;br /&gt;Pociski: 30&lt;br /&gt;Używane w: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Polish> <Polish>Kaliber: 5,56x45mm Smugacz IR-DIM&lt;br /&gt;Pociski: 30&lt;br /&gt;Używane w: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Polish>
<Czech>Ráže: 5.56x45mm Svítící IR-DIM&lt;br /&gt;Munice: 30&lt;br /&gt;Použití: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Czech> <Czech>Ráže: 5.56x45mm Svítící IR-DIM&lt;br /&gt;Nábojů: 30&lt;br /&gt;Použití u: CTAR-21, TAR-21, F2000, RFB SDAR</Czech>
<Portuguese>Calibre: 5,56x45mm Traçante IR-DIM&lt;br /&gt;Projéteis: 30&lt;br /&gt;Usado em: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Portuguese> <Portuguese>Calibre: 5,56x45mm Traçante IR-DIM&lt;br /&gt;Projéteis: 30&lt;br /&gt;Usado em: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Portuguese>
<Italian>Calibro: 5.56x45mm Traccianti IR-DIM&lt;br /&gt;Munizioni: 30&lt;br /&gt;In uso su: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Italian> <Italian>Calibro: 5.56x45mm Traccianti IR-DIM&lt;br /&gt;Munizioni: 30&lt;br /&gt;In uso su: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Italian>
<Russian>Калибр: 5,56x45 мм ИК-трассирующие&lt;br /&gt;Патронов: 30&lt;br /&gt;Используются с: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Russian> <Russian>Калибр: 5,56x45 мм ИК-трассирующие&lt;br /&gt;Патронов: 30&lt;br /&gt;Используются с: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Russian>
@ -288,7 +288,7 @@
<Spanish>Calibre: 7,62x51mm Trazadora&lt;br /&gt;Balas: 20&lt;br /&gt;Se usa en: Mk18 ABR</Spanish> <Spanish>Calibre: 7,62x51mm Trazadora&lt;br /&gt;Balas: 20&lt;br /&gt;Se usa en: Mk18 ABR</Spanish>
<French>Calibre: 7,62x51mm Traçantes&lt;br /&gt;Cartouches: 20&lt;br /&gt;Utilisé avec: EBR</French> <French>Calibre: 7,62x51mm Traçantes&lt;br /&gt;Cartouches: 20&lt;br /&gt;Utilisé avec: EBR</French>
<Polish>Kaliber: 7,62x51mm Smugacz&lt;br /&gt;Pociski: 20&lt;br /&gt;Używane w: Mk18 ABR</Polish> <Polish>Kaliber: 7,62x51mm Smugacz&lt;br /&gt;Pociski: 20&lt;br /&gt;Używane w: Mk18 ABR</Polish>
<Czech>Ráže: 7.62x51mm Svítící&lt;br /&gt;Munice: 20&lt;br /&gt;Použití: Mk18 ABR</Czech> <Czech>Ráže: 7.62x51mm Svítící&lt;br /&gt;Nábojů: 20&lt;br /&gt;Použití u: Mk14 Mod 1 EBR</Czech>
<Portuguese>Calibre: 7,62x51mm Traçante&lt;br /&gt;Projéteis: 20&lt;br /&gt;Usado em: Mk18 ABR</Portuguese> <Portuguese>Calibre: 7,62x51mm Traçante&lt;br /&gt;Projéteis: 20&lt;br /&gt;Usado em: Mk18 ABR</Portuguese>
<Italian>Calibro: 7.62x51mm Traccianti&lt;br /&gt;Munizioni: 20&lt;br /&gt;In uso su: Mk18 ABR</Italian> <Italian>Calibro: 7.62x51mm Traccianti&lt;br /&gt;Munizioni: 20&lt;br /&gt;In uso su: Mk18 ABR</Italian>
<Russian>Калибр: 7,62x51 мм трассирующие&lt;br /&gt;Патронов: 20&lt;br /&gt;Используются с: Mk18 ABR</Russian> <Russian>Калибр: 7,62x51 мм трассирующие&lt;br /&gt;Патронов: 20&lt;br /&gt;Используются с: Mk18 ABR</Russian>
@ -324,7 +324,7 @@
<Spanish>Calibre: 7,62x51mm Trazadoras IR-DIM&lt;br /&gt;Balas: 20&lt;br /&gt;Se usa en: Mk18 ABR</Spanish> <Spanish>Calibre: 7,62x51mm Trazadoras IR-DIM&lt;br /&gt;Balas: 20&lt;br /&gt;Se usa en: Mk18 ABR</Spanish>
<French>Calibre: 7,62x51mm Traçantes IR-DIM&lt;br /&gt;Cartouches: 20&lt;br /&gt;Utilisé avec: EBR</French> <French>Calibre: 7,62x51mm Traçantes IR-DIM&lt;br /&gt;Cartouches: 20&lt;br /&gt;Utilisé avec: EBR</French>
<Polish>Kaliber: 7,62x51mm Smugacz IR-DIM&lt;br /&gt;Pociski: 20&lt;br /&gt;Używane w: Mk18 ABR</Polish> <Polish>Kaliber: 7,62x51mm Smugacz IR-DIM&lt;br /&gt;Pociski: 20&lt;br /&gt;Używane w: Mk18 ABR</Polish>
<Czech>Ráže: 7.62x51mm Svítící IR-DIM&lt;br /&gt;Munice: 20&lt;br /&gt;Použití: Mk18 ABR</Czech> <Czech>Ráže: 7.62x51mm Svítící IR-DIM&lt;br /&gt;Nábojů: 20&lt;br /&gt;Použití u: Mk14 Mod 1 EBR</Czech>
<Portuguese>Calibre: 7,62x51mm Traçante IR-DIM&lt;br /&gt;Projéteis: 20&lt;br /&gt;Usado em: Mk18 ABR</Portuguese> <Portuguese>Calibre: 7,62x51mm Traçante IR-DIM&lt;br /&gt;Projéteis: 20&lt;br /&gt;Usado em: Mk18 ABR</Portuguese>
<Italian>Calibro: 7.62x51mm Traccianti IR-DIM&lt;br /&gt;Munizioni: 20&lt;br /&gt;In uso su: Mk18 ABR</Italian> <Italian>Calibro: 7.62x51mm Traccianti IR-DIM&lt;br /&gt;Munizioni: 20&lt;br /&gt;In uso su: Mk18 ABR</Italian>
<Russian>Калибр: 7,62x51 мм ИК-трассирующие&lt;br /&gt;Патронов: 20&lt;br /&gt;Используются с: Mk18 ABR</Russian> <Russian>Калибр: 7,62x51 мм ИК-трассирующие&lt;br /&gt;Патронов: 20&lt;br /&gt;Используются с: Mk18 ABR</Russian>
@ -360,7 +360,7 @@
<Spanish>Calibre: 7,62x51mm SD&lt;br /&gt;Balas: 20&lt;br /&gt;Se usa en: Mk18 ABR</Spanish> <Spanish>Calibre: 7,62x51mm SD&lt;br /&gt;Balas: 20&lt;br /&gt;Se usa en: Mk18 ABR</Spanish>
<French>Calibre: 7,62x51mm SD&lt;br /&gt;Cartouches: 20&lt;br /&gt;Utilisé avec: EBR</French> <French>Calibre: 7,62x51mm SD&lt;br /&gt;Cartouches: 20&lt;br /&gt;Utilisé avec: EBR</French>
<Polish>Kaliber: 7,62x51mm SD&lt;br /&gt;Pociski: 20&lt;br /&gt;Używane w: Mk18 ABR</Polish> <Polish>Kaliber: 7,62x51mm SD&lt;br /&gt;Pociski: 20&lt;br /&gt;Używane w: Mk18 ABR</Polish>
<Czech>Ráže: 7.62x51mm SD&lt;br /&gt;Munice: 20&lt;br /&gt;Použití: Mk18 ABR</Czech> <Czech>Ráže: 7.62x51mm SD&lt;br /&gt;Nábojů: 20&lt;br /&gt;Použití u: Mk14 Mod 1 EBR</Czech>
<Portuguese>Calibre: 7,62x51mm SD&lt;br /&gt;Projéteis: 20&lt;br /&gt;Usado em: Mk18 ABR</Portuguese> <Portuguese>Calibre: 7,62x51mm SD&lt;br /&gt;Projéteis: 20&lt;br /&gt;Usado em: Mk18 ABR</Portuguese>
<Italian>Calibro: 7.62x51mm Sil.&lt;br /&gt;Munizioni: 20&lt;br /&gt;In uso su: Mk18 ABR</Italian> <Italian>Calibro: 7.62x51mm Sil.&lt;br /&gt;Munizioni: 20&lt;br /&gt;In uso su: Mk18 ABR</Italian>
<Russian>Калибр: 7,62x51 мм дозвуковые&lt;br /&gt;Патронов: 20&lt;br /&gt;Используются с: Mk18 ABR</Russian> <Russian>Калибр: 7,62x51 мм дозвуковые&lt;br /&gt;Патронов: 20&lt;br /&gt;Используются с: Mk18 ABR</Russian>
@ -398,7 +398,7 @@
<Spanish>Calibre: .338 Norma Magnum trazadora&lt;br /&gt;Balas: 130&lt;br /&gt;Se usa en: SPMG</Spanish> <Spanish>Calibre: .338 Norma Magnum trazadora&lt;br /&gt;Balas: 130&lt;br /&gt;Se usa en: SPMG</Spanish>
<Russian>Калибр: .338 Norma Magnum трассирующие&lt;br /&gt;Патронов: 130&lt;br /&gt;Используются в: SPMG</Russian> <Russian>Калибр: .338 Norma Magnum трассирующие&lt;br /&gt;Патронов: 130&lt;br /&gt;Используются в: SPMG</Russian>
<Italian>Calibro: .338 Norma Magnum Tracciante&lt;br /&gt;Munizioni: 130&lt;br /&gt;In uso su: SPMG</Italian> <Italian>Calibro: .338 Norma Magnum Tracciante&lt;br /&gt;Munizioni: 130&lt;br /&gt;In uso su: SPMG</Italian>
<Czech>Ráže: .338 Noma Magnum Svítící&lt;br /&gt;Munice: 130&lt;br /&gt;Použití: SPMG</Czech> <Czech>Ráže: .338 Noma Magnum Svítící&lt;br /&gt;Nábojů: 130&lt;br /&gt;Použití u: LWMMG</Czech>
<Portuguese>Calibre: .338 Norma Magnum Traçante&lt;br /&gt;Cartuchos: 130&lt;br /&gt;Usado em: SPMG</Portuguese> <Portuguese>Calibre: .338 Norma Magnum Traçante&lt;br /&gt;Cartuchos: 130&lt;br /&gt;Usado em: SPMG</Portuguese>
<Hungarian>Kaliber: .338 Norma Magnum nyomkövető&lt;br /&gt;Lövedékek: 130&lt;br /&gt;Használható: SPMG</Hungarian> <Hungarian>Kaliber: .338 Norma Magnum nyomkövető&lt;br /&gt;Lövedékek: 130&lt;br /&gt;Használható: SPMG</Hungarian>
</Key> </Key>
@ -434,7 +434,7 @@
<Spanish>Calibre: .338 Norma Magnum trazadora IR-DIM&lt;br /&gt;Balas: 130&lt;br /&gt;Se usa en: SPMG</Spanish> <Spanish>Calibre: .338 Norma Magnum trazadora IR-DIM&lt;br /&gt;Balas: 130&lt;br /&gt;Se usa en: SPMG</Spanish>
<Russian>Калибр: .338 Norma Magnum ИК-трассирующие&lt;br /&gt;Патронов: 130&lt;br /&gt;Используются с: SPMG</Russian> <Russian>Калибр: .338 Norma Magnum ИК-трассирующие&lt;br /&gt;Патронов: 130&lt;br /&gt;Используются с: SPMG</Russian>
<Italian>Calibro: .338 Norma Magnum Tracciante IR-DIM&lt;br /&gt;Munizioni: 130&lt;br /&gt;In uso su: SPMG</Italian> <Italian>Calibro: .338 Norma Magnum Tracciante IR-DIM&lt;br /&gt;Munizioni: 130&lt;br /&gt;In uso su: SPMG</Italian>
<Czech>Ráže: .338 Noma Magnum Svítící IR-DIM&lt;br /&gt;Munice: 130&lt;br /&gt;Použití: SPMG</Czech> <Czech>Ráže: .338 Noma Magnum Svítící IR-DIM&lt;br /&gt;Nábojů: 130&lt;br /&gt;Použití u: LWMMG</Czech>
<Portuguese>Calibre: .338 Norma Magnum Traçante IR-DIM&lt;br /&gt;Cartuchos: 130&lt;br /&gt;Usado em: SPMG</Portuguese> <Portuguese>Calibre: .338 Norma Magnum Traçante IR-DIM&lt;br /&gt;Cartuchos: 130&lt;br /&gt;Usado em: SPMG</Portuguese>
<Hungarian>Kaliber: .338 Norma Magnum infravörös nyomkövető&lt;br /&gt;Lövedékek: 130&lt;br /&gt;Használható: SPMG</Hungarian> <Hungarian>Kaliber: .338 Norma Magnum infravörös nyomkövető&lt;br /&gt;Lövedékek: 130&lt;br /&gt;Használható: SPMG</Hungarian>
</Key> </Key>
@ -470,7 +470,7 @@
<Spanish>Calibre: .338 Norma Magnum AP&lt;br /&gt;Balas: 130&lt;br /&gt;Se usa en: SPMG</Spanish> <Spanish>Calibre: .338 Norma Magnum AP&lt;br /&gt;Balas: 130&lt;br /&gt;Se usa en: SPMG</Spanish>
<Russian>Калибр: .338 Norma Magnum бронебойные&lt;br /&gt;Патронов: 130&lt;br /&gt;Используются с: SPMG</Russian> <Russian>Калибр: .338 Norma Magnum бронебойные&lt;br /&gt;Патронов: 130&lt;br /&gt;Используются с: SPMG</Russian>
<Italian>Calibro: .338 Norma Magnum AP&lt;br /&gt;Munizioni: 130&lt;br /&gt;In uso su: SPMG</Italian> <Italian>Calibro: .338 Norma Magnum AP&lt;br /&gt;Munizioni: 130&lt;br /&gt;In uso su: SPMG</Italian>
<Czech>Ráže: .338 Noma Magnum AP&lt;br /&gt;Munice: 130&lt;br /&gt;Použití: SPMG</Czech> <Czech>Ráže: .338 Noma Magnum AP&lt;br /&gt;Nábojů: 130&lt;br /&gt;Použití u: LWMMG</Czech>
<Portuguese>Calibre: .338 Norma Magnum AP&lt;br /&gt;Cartuchos: 130&lt;br /&gt;Usado em: SPMG</Portuguese> <Portuguese>Calibre: .338 Norma Magnum AP&lt;br /&gt;Cartuchos: 130&lt;br /&gt;Usado em: SPMG</Portuguese>
<Hungarian>Kaliber: .338 Norma Magnum páncéltörő&lt;br /&gt;Lövedékek: 130&lt;br /&gt;Használható: SPMG</Hungarian> <Hungarian>Kaliber: .338 Norma Magnum páncéltörő&lt;br /&gt;Lövedékek: 130&lt;br /&gt;Használható: SPMG</Hungarian>
</Key> </Key>
@ -507,7 +507,7 @@
<Spanish>Calibre: 9.3x64mm trazadora&lt;br /&gt;Balas: 10&lt;br /&gt;Se usa en: Cyrus</Spanish> <Spanish>Calibre: 9.3x64mm trazadora&lt;br /&gt;Balas: 10&lt;br /&gt;Se usa en: Cyrus</Spanish>
<Russian>Калибр: 9,3x64 мм трассирующие&lt;br /&gt;Патронов: 10&lt;br /&gt;Используются с: Cyrus</Russian> <Russian>Калибр: 9,3x64 мм трассирующие&lt;br /&gt;Патронов: 10&lt;br /&gt;Используются с: Cyrus</Russian>
<Italian>Calibro: 9.3x64mm Tracer&lt;br /&gt;Munizioni: 10&lt;br /&gt;In uso su: Cyrus</Italian> <Italian>Calibro: 9.3x64mm Tracer&lt;br /&gt;Munizioni: 10&lt;br /&gt;In uso su: Cyrus</Italian>
<Czech>Ráže: 9.3x64mm Svítící&lt;br /&gt;Munice: 10&lt;br /&gt;Použití: Cyrus</Czech> <Czech>Ráže: 9.3x64mm Svítící&lt;br /&gt;Nábojů: 10&lt;br /&gt;Použití u: Cyrus</Czech>
<Portuguese>Calibre: 9.3x64mm Traçante&lt;br /&gt;Cartuchos: 10&lt;br /&gt;Usado em: Cyrus</Portuguese> <Portuguese>Calibre: 9.3x64mm Traçante&lt;br /&gt;Cartuchos: 10&lt;br /&gt;Usado em: Cyrus</Portuguese>
<Hungarian>Kaliber: 9,3x64mm nyomkövető&lt;br /&gt;Lövedékek: 10&lt;br /&gt;Használható: Cyrus</Hungarian> <Hungarian>Kaliber: 9,3x64mm nyomkövető&lt;br /&gt;Lövedékek: 10&lt;br /&gt;Használható: Cyrus</Hungarian>
</Key> </Key>
@ -543,7 +543,7 @@
<Spanish>Calibre: 9.3x64mm trazadora IR-DIM&lt;br /&gt;Balas: 10&lt;br /&gt;Se usa en: Cyrus</Spanish> <Spanish>Calibre: 9.3x64mm trazadora IR-DIM&lt;br /&gt;Balas: 10&lt;br /&gt;Se usa en: Cyrus</Spanish>
<Russian>Калибр: 9,3x64 мм ИК-трассирующие&lt;br /&gt;Патронов: 10&lt;br /&gt;Используются с: Cyrus</Russian> <Russian>Калибр: 9,3x64 мм ИК-трассирующие&lt;br /&gt;Патронов: 10&lt;br /&gt;Используются с: Cyrus</Russian>
<Italian>Calibro: 9.3x64mm Tracciante IR-DIM&lt;br /&gt;Munizioni: 10&lt;br /&gt;In uso su: Cyrus</Italian> <Italian>Calibro: 9.3x64mm Tracciante IR-DIM&lt;br /&gt;Munizioni: 10&lt;br /&gt;In uso su: Cyrus</Italian>
<Czech>Ráže: 9.3x64mm Svítící IR-DIM&lt;br /&gt;Munice: 10&lt;br /&gt;Použití: Cyrus</Czech> <Czech>Ráže: 9.3x64mm Svítící IR-DIM&lt;br /&gt;Nábojů: 10&lt;br /&gt;Použití u: Cyrus</Czech>
<Portuguese>Calibre: 9.3x64mm Traçante IR-DIM&lt;br /&gt;Cartuchos: 10&lt;br /&gt;Usado em: Cyrus</Portuguese> <Portuguese>Calibre: 9.3x64mm Traçante IR-DIM&lt;br /&gt;Cartuchos: 10&lt;br /&gt;Usado em: Cyrus</Portuguese>
<Hungarian>Kaliber: 9,3x64mm infravörös nyomkövető&lt;br /&gt;Lövedékek: 10&lt;br /&gt; Használható: Cyrus</Hungarian> <Hungarian>Kaliber: 9,3x64mm infravörös nyomkövető&lt;br /&gt;Lövedékek: 10&lt;br /&gt; Használható: Cyrus</Hungarian>
</Key> </Key>
@ -580,7 +580,7 @@
<Spanish>Calibre: 9.3x64mm trazadora&lt;br /&gt;Balas: 150&lt;br /&gt;Se usa en: Navid</Spanish> <Spanish>Calibre: 9.3x64mm trazadora&lt;br /&gt;Balas: 150&lt;br /&gt;Se usa en: Navid</Spanish>
<Russian>Калибр: 9,3x64 мм трассирующие&lt;br /&gt;Патронов: 150&lt;br /&gt;Используются с: Навид</Russian> <Russian>Калибр: 9,3x64 мм трассирующие&lt;br /&gt;Патронов: 150&lt;br /&gt;Используются с: Навид</Russian>
<Italian>Calibro: 9.3x64mm Tracciante&lt;br /&gt;Munizioni: 150&lt;br /&gt;In uso su: Navid</Italian> <Italian>Calibro: 9.3x64mm Tracciante&lt;br /&gt;Munizioni: 150&lt;br /&gt;In uso su: Navid</Italian>
<Czech>Ráže: 9.3x64mm Svítící&lt;br /&gt;Munice: 150&lt;br /&gt;Použití: Navid</Czech> <Czech>Ráže: 9.3x64mm Svítící&lt;br /&gt;Nábojů: 150&lt;br /&gt;Použití u: HK121</Czech>
<Portuguese>Calibre: 9.3x64mm Traçante&lt;br /&gt;Cartuchos: 150&lt;br /&gt;Usado em: Navid</Portuguese> <Portuguese>Calibre: 9.3x64mm Traçante&lt;br /&gt;Cartuchos: 150&lt;br /&gt;Usado em: Navid</Portuguese>
<Hungarian>Kaliber: 9,3x64mm nyomkövető&lt;br /&gt;Lövedékek: 150&lt;br /&gt;Használható: Navid</Hungarian> <Hungarian>Kaliber: 9,3x64mm nyomkövető&lt;br /&gt;Lövedékek: 150&lt;br /&gt;Használható: Navid</Hungarian>
</Key> </Key>
@ -616,7 +616,7 @@
<Spanish>Calibre: 9.3x64mm trazadora IR-DIM&lt;br /&gt;Balas: 150&lt;br /&gt;Se usa en: Navid</Spanish> <Spanish>Calibre: 9.3x64mm trazadora IR-DIM&lt;br /&gt;Balas: 150&lt;br /&gt;Se usa en: Navid</Spanish>
<Russian>Калибр: 9,3x64 мм ИК-трассирующие&lt;br /&gt;Патронов: 150&lt;br /&gt;Используются с: Навид</Russian> <Russian>Калибр: 9,3x64 мм ИК-трассирующие&lt;br /&gt;Патронов: 150&lt;br /&gt;Используются с: Навид</Russian>
<Italian>Calibro: 9.3x64mm Tracciante IR-DIM&lt;br /&gt;Munizioni: 150&lt;br /&gt;In uso su: Navid</Italian> <Italian>Calibro: 9.3x64mm Tracciante IR-DIM&lt;br /&gt;Munizioni: 150&lt;br /&gt;In uso su: Navid</Italian>
<Czech>Ráže: 9.3x64mm Svítící IR-DIM&lt;br /&gt;Munice: 150&lt;br /&gt;Použití: Navid</Czech> <Czech>Ráže: 9.3x64mm Svítící IR-DIM&lt;br /&gt;Nábojů: 150&lt;br /&gt;Použití u: HK121</Czech>
<Portuguese>Calibre: 9.3x64mm Traçante IR-DIM&lt;br /&gt;Cartuchos: 150&lt;br /&gt;Usado em: Navid</Portuguese> <Portuguese>Calibre: 9.3x64mm Traçante IR-DIM&lt;br /&gt;Cartuchos: 150&lt;br /&gt;Usado em: Navid</Portuguese>
<Hungarian>Kaliber: 9,3x64mm infravörös nyomkövető&lt;br /&gt;Lövedékek: 150&lt;br /&gt;Használható: Navid</Hungarian> <Hungarian>Kaliber: 9,3x64mm infravörös nyomkövető&lt;br /&gt;Lövedékek: 150&lt;br /&gt;Használható: Navid</Hungarian>
</Key> </Key>
@ -652,7 +652,7 @@
<Spanish>Calibre: 9.3x64mm AP&lt;br /&gt;Balas: 150&lt;br /&gt;Se usa en: Navid</Spanish> <Spanish>Calibre: 9.3x64mm AP&lt;br /&gt;Balas: 150&lt;br /&gt;Se usa en: Navid</Spanish>
<Russian>Калибр: 9,3x64 мм бронебойные&lt;br /&gt;Патронов: 150&lt;br /&gt;Используются с: Навид</Russian> <Russian>Калибр: 9,3x64 мм бронебойные&lt;br /&gt;Патронов: 150&lt;br /&gt;Используются с: Навид</Russian>
<Italian>Calibro: 9.3x64mm AP&lt;br /&gt;Munizioni: 150&lt;br /&gt;In uso su: Navid</Italian> <Italian>Calibro: 9.3x64mm AP&lt;br /&gt;Munizioni: 150&lt;br /&gt;In uso su: Navid</Italian>
<Czech>Ráže: 9.3x64mm AP&lt;br /&gt;Munice: 150&lt;br /&gt;Použití: Navid</Czech> <Czech>Ráže: 9.3x64mm AP&lt;br /&gt;Nábojů: 150&lt;br /&gt;Použití u: HK121</Czech>
<Portuguese>Calibre: 9.3x64mm AP&lt;br /&gt;Cartuchos: 150&lt;br /&gt;Usado em: Navid</Portuguese> <Portuguese>Calibre: 9.3x64mm AP&lt;br /&gt;Cartuchos: 150&lt;br /&gt;Usado em: Navid</Portuguese>
<Hungarian>Kaliber: 9,3x64mm páncéltörő&lt;br /&gt;Lövedékek: 150&lt;br /&gt;Használható: Navid</Hungarian> <Hungarian>Kaliber: 9,3x64mm páncéltörő&lt;br /&gt;Lövedékek: 150&lt;br /&gt;Használható: Navid</Hungarian>
</Key> </Key>
@ -796,7 +796,7 @@
<Russian>Магазин из 100 6,5 мм ИК-трассирующих</Russian> <Russian>Магазин из 100 6,5 мм ИК-трассирующих</Russian>
<German>6,5mm 100-Patronen-Magazin IR-DIM Leuchtspur&lt;br /&gt;Patronen: 100&lt;br /&gt;Eingesetzt von: MXLSW</German> <German>6,5mm 100-Patronen-Magazin IR-DIM Leuchtspur&lt;br /&gt;Patronen: 100&lt;br /&gt;Eingesetzt von: MXLSW</German>
<Italian>6.5mm 100Rnd Tracer IR-DIM Mag&lt;br /&gt;Munizioni: 100&lt;br /&gt;In uso su: MX LSW</Italian> <Italian>6.5mm 100Rnd Tracer IR-DIM Mag&lt;br /&gt;Munizioni: 100&lt;br /&gt;In uso su: MX LSW</Italian>
<Czech>6.5mm 100náb. Svítící IR-DIM Zásobník&lt;br /&gt;Munice: 100&lt;br /&gt;Použití: MX LSW</Czech> <Czech>6.5mm 100náb. Svítící IR-DIM Zásobník&lt;br /&gt;Nábojů: 100&lt;br /&gt;Použití u: MX LSW</Czech>
<Portuguese>Carregador 6.5mm 100 Cartuchos Traçantes IR-DIM&lt;br /&gt;Cartuchos: 100&lt;br /&gt;Usado em: MX LSW</Portuguese> <Portuguese>Carregador 6.5mm 100 Cartuchos Traçantes IR-DIM&lt;br /&gt;Cartuchos: 100&lt;br /&gt;Usado em: MX LSW</Portuguese>
<Hungarian>6.5mm 100-lövedékes infravörös nyomkövető tár&lt;br /&gt;Lövedékek: 100&lt;br /&gt;Használható: MX LSW</Hungarian> <Hungarian>6.5mm 100-lövedékes infravörös nyomkövető tár&lt;br /&gt;Lövedékek: 100&lt;br /&gt;Használható: MX LSW</Hungarian>
</Key> </Key>
@ -832,7 +832,7 @@
<Russian>Магазин из 200-т 6,5 мм ИК-трассирующих</Russian> <Russian>Магазин из 200-т 6,5 мм ИК-трассирующих</Russian>
<German>6,5mm 200-Patronen-Gurt IR-DIM Leuchtspur&lt;br /&gt;Patronen: 200&lt;br /&gt;Eingesetzt von: Stoner 99 LMG</German> <German>6,5mm 200-Patronen-Gurt IR-DIM Leuchtspur&lt;br /&gt;Patronen: 200&lt;br /&gt;Eingesetzt von: Stoner 99 LMG</German>
<Italian>6.5mm 200Rnd Tracer IR-DIM Belt&lt;br /&gt;Munizioni: 200&lt;br /&gt;In uso su: Stoner 99 LMG</Italian> <Italian>6.5mm 200Rnd Tracer IR-DIM Belt&lt;br /&gt;Munizioni: 200&lt;br /&gt;In uso su: Stoner 99 LMG</Italian>
<Czech>6.5mm 200náb. Svítící IR-DIM Pás&lt;br /&gt;Munice: 200&lt;br /&gt;Použití: Stoner 99 LMG</Czech> <Czech>6.5mm 200náb. Svítící IR-DIM Pás&lt;br /&gt;Nábojů: 200&lt;br /&gt;Použití u: Stoner 99 LMG</Czech>
<Portuguese>Cinto de munição traçante 6.5mm IR-DIM com 200 cartuchos&lt;br /&gt;Cartuchos: 200&lt;br /&gt;Usado em: Stoner 99 LMG</Portuguese> <Portuguese>Cinto de munição traçante 6.5mm IR-DIM com 200 cartuchos&lt;br /&gt;Cartuchos: 200&lt;br /&gt;Usado em: Stoner 99 LMG</Portuguese>
<Hungarian>6.5mm 200-lövedékes infravörös nyomkövető heveder&lt;br /&gt;Lövedékek: 200&lt;br /&gt;Használható: Stoner 99 LMG</Hungarian> <Hungarian>6.5mm 200-lövedékes infravörös nyomkövető heveder&lt;br /&gt;Lövedékek: 200&lt;br /&gt;Használható: Stoner 99 LMG</Hungarian>
</Key> </Key>
@ -868,7 +868,7 @@
<Russian>Калибр: 5,56x45 мм NATO (Mk262)&lt;br /&gt;Патронов: 30</Russian> <Russian>Калибр: 5,56x45 мм NATO (Mk262)&lt;br /&gt;Патронов: 30</Russian>
<German>Kaliber: 5,56x45mm NATO (Mk262)&lt;br /&gt;Patronen: 30</German> <German>Kaliber: 5,56x45mm NATO (Mk262)&lt;br /&gt;Patronen: 30</German>
<Italian>Calibro: 5.56x45 mm NATO (Mk262)&lt;br /&gt;Munizioni: 30</Italian> <Italian>Calibro: 5.56x45 mm NATO (Mk262)&lt;br /&gt;Munizioni: 30</Italian>
<Czech>Ráže: 5.56x45mm NATO (Mk262)&lt;br /&gt;Munice: 30</Czech> <Czech>Ráže: 5.56x45mm NATO (Mk262)&lt;br /&gt;Nábojů: 30</Czech>
<Portuguese>Calibre: 5.56x45mm NATO (Mk262)&lt;br/&gt;Cartuchos: 30</Portuguese> <Portuguese>Calibre: 5.56x45mm NATO (Mk262)&lt;br/&gt;Cartuchos: 30</Portuguese>
<Hungarian>Kaliber: 5,56x45mm NATO (Mk262)&lt;br /&gt;Lövedékek: 30</Hungarian> <Hungarian>Kaliber: 5,56x45mm NATO (Mk262)&lt;br /&gt;Lövedékek: 30</Hungarian>
</Key> </Key>
@ -904,7 +904,7 @@
<Russian>Калибр: 5,56x45 мм NATO (Mk318)&lt;br /&gt;Патронов: 30</Russian> <Russian>Калибр: 5,56x45 мм NATO (Mk318)&lt;br /&gt;Патронов: 30</Russian>
<German>Kaliber: 5,56x45mm NATO (Mk318)&lt;br /&gt;Patronen: 30</German> <German>Kaliber: 5,56x45mm NATO (Mk318)&lt;br /&gt;Patronen: 30</German>
<Italian>Calibro: 5.56x45 mm NATO (Mk318)&lt;br /&gt;Munizioni: 30</Italian> <Italian>Calibro: 5.56x45 mm NATO (Mk318)&lt;br /&gt;Munizioni: 30</Italian>
<Czech>Ráže: 5.56x45mm NATO (Mk318)&lt;br /&gt;Munice: 30</Czech> <Czech>Ráže: 5.56x45mm NATO (Mk318)&lt;br /&gt;Nábojů: 30</Czech>
<Portuguese>Calibre: 5.56x45mm NATO (Mk318)&lt;br/&gt;Cartuchos: 30</Portuguese> <Portuguese>Calibre: 5.56x45mm NATO (Mk318)&lt;br/&gt;Cartuchos: 30</Portuguese>
<Hungarian>Kaliber: 5,56x45mm NATO (Mk318)&lt;br /&gt;Lövedékek: 30</Hungarian> <Hungarian>Kaliber: 5,56x45mm NATO (Mk318)&lt;br /&gt;Lövedékek: 30</Hungarian>
</Key> </Key>
@ -940,7 +940,7 @@
<Russian>Калибр: 5,56x45 мм NATO (M995 бронебойные)&lt;br /&gt;Патронов: 30</Russian> <Russian>Калибр: 5,56x45 мм NATO (M995 бронебойные)&lt;br /&gt;Патронов: 30</Russian>
<German>Kaliber: 5,56x45mm NATO (M995 AP)&lt;br /&gt;Patronen: 30</German> <German>Kaliber: 5,56x45mm NATO (M995 AP)&lt;br /&gt;Patronen: 30</German>
<Italian>Calibro: 5.56x45 mm NATO (M995 AP)&lt;br /&gt;Munizioni: 30</Italian> <Italian>Calibro: 5.56x45 mm NATO (M995 AP)&lt;br /&gt;Munizioni: 30</Italian>
<Czech>Ráže: 5.56x45mm NATO (M995 AP)&lt;br /&gt;Munice: 30</Czech> <Czech>Ráže: 5.56x45mm NATO (M995 AP)&lt;br /&gt;Nábojů: 30</Czech>
<Portuguese>Calibre: 5.56x45mm NATO (M995 AP)&lt;br/&gt;Cartuchos: 30</Portuguese> <Portuguese>Calibre: 5.56x45mm NATO (M995 AP)&lt;br/&gt;Cartuchos: 30</Portuguese>
<Hungarian>Kaliber: 5,56x45mm NATO (M995 páncéltörő)&lt;br /&gt;Lövedékek: 30</Hungarian> <Hungarian>Kaliber: 5,56x45mm NATO (M995 páncéltörő)&lt;br /&gt;Lövedékek: 30</Hungarian>
</Key> </Key>
@ -976,7 +976,7 @@
<Russian>Калибр: 7,62x51 мм NATO (M118LR)&lt;br /&gt;Патронов: 10</Russian> <Russian>Калибр: 7,62x51 мм NATO (M118LR)&lt;br /&gt;Патронов: 10</Russian>
<German>Kaliber: 7,62x51mm NATO (M118LR)&lt;br /&gt;Patronen: 10</German> <German>Kaliber: 7,62x51mm NATO (M118LR)&lt;br /&gt;Patronen: 10</German>
<Italian>Calibro: 7.62x51 mm NATO (M118LR)&lt;br /&gt;Munizioni: 10</Italian> <Italian>Calibro: 7.62x51 mm NATO (M118LR)&lt;br /&gt;Munizioni: 10</Italian>
<Czech>Ráže: 7.62x51mm NATO (M118LR)&lt;br /&gt;Munice: 10</Czech> <Czech>Ráže: 7.62x51mm NATO (M118LR)&lt;br /&gt;Nábojů: 10</Czech>
<Portuguese>Calibre: 7.26x51mm NATO (M118LR)&lt;br/&gt;Cartuchos: 10</Portuguese> <Portuguese>Calibre: 7.26x51mm NATO (M118LR)&lt;br/&gt;Cartuchos: 10</Portuguese>
<Hungarian>Kaliber: 7,62x51mm NATO (M118LR)&lt;br /&gt;Lövedékek: 10</Hungarian> <Hungarian>Kaliber: 7,62x51mm NATO (M118LR)&lt;br /&gt;Lövedékek: 10</Hungarian>
</Key> </Key>
@ -1012,7 +1012,7 @@
<Russian>Калибр: 7,62x51 мм NATO (M118LR)&lt;br /&gt;Патронов: 20</Russian> <Russian>Калибр: 7,62x51 мм NATO (M118LR)&lt;br /&gt;Патронов: 20</Russian>
<German>Kaliber: 7,62x51mm NATO (M118LR)&lt;br /&gt;Patronen: 20</German> <German>Kaliber: 7,62x51mm NATO (M118LR)&lt;br /&gt;Patronen: 20</German>
<Italian>Calibro: 7.62x51 mm NATO (M118LR)&lt;br /&gt;Munizioni: 20</Italian> <Italian>Calibro: 7.62x51 mm NATO (M118LR)&lt;br /&gt;Munizioni: 20</Italian>
<Czech>Ráže: 7.62x51mm NATO (M118LR)&lt;br /&gt;Munice: 20</Czech> <Czech>Ráže: 7.62x51mm NATO (M118LR)&lt;br /&gt;Nábojů: 20</Czech>
<Portuguese>Calibre: 7.26x51mm NATO (M118LR)&lt;br/&gt;Cartuchos: 20</Portuguese> <Portuguese>Calibre: 7.26x51mm NATO (M118LR)&lt;br/&gt;Cartuchos: 20</Portuguese>
<Hungarian>Kaliber: 7,62x51mm NATO (M118LR)&lt;br /&gt;Lövedékek: 20</Hungarian> <Hungarian>Kaliber: 7,62x51mm NATO (M118LR)&lt;br /&gt;Lövedékek: 20</Hungarian>
</Key> </Key>
@ -1048,7 +1048,7 @@
<Russian>Калибр: 7,62x51 мм NATO (Mk316 Mod 0)&lt;br /&gt;Патронов: 10</Russian> <Russian>Калибр: 7,62x51 мм NATO (Mk316 Mod 0)&lt;br /&gt;Патронов: 10</Russian>
<German>Kaliber: 7,62x51mm NATO (Mk316 Mod 0)&lt;br /&gt;Patronen: 10</German> <German>Kaliber: 7,62x51mm NATO (Mk316 Mod 0)&lt;br /&gt;Patronen: 10</German>
<Italian>Calibro: 7.62x51 mm NATO (Mk316 Mod 0)&lt;br /&gt;Munizioni: 10</Italian> <Italian>Calibro: 7.62x51 mm NATO (Mk316 Mod 0)&lt;br /&gt;Munizioni: 10</Italian>
<Czech>Ráže: 7.62x51mm NATO (Mk316 Mod 0)&lt;br /&gt;Munice: 10</Czech> <Czech>Ráže: 7.62x51mm NATO (Mk316 Mod 0)&lt;br /&gt;Nábojů: 10</Czech>
<Portuguese>Calibre: 7.26x51mm NATO (Mk316 Mod 0)&lt;br/&gt;Cartuchos: 10</Portuguese> <Portuguese>Calibre: 7.26x51mm NATO (Mk316 Mod 0)&lt;br/&gt;Cartuchos: 10</Portuguese>
<Hungarian>Kaliber: 7,62x51mm NATO (Mk316 Mod 0)&lt;br /&gt;Lövedékek: 10</Hungarian> <Hungarian>Kaliber: 7,62x51mm NATO (Mk316 Mod 0)&lt;br /&gt;Lövedékek: 10</Hungarian>
</Key> </Key>
@ -1084,7 +1084,7 @@
<Russian>Калибр: 7,62x51 мм NATO (Mk316 Mod 0)&lt;br /&gt;Патронов: 20</Russian> <Russian>Калибр: 7,62x51 мм NATO (Mk316 Mod 0)&lt;br /&gt;Патронов: 20</Russian>
<German>Kaliber: 7,62x51mm NATO (Mk316 Mod 0)&lt;br /&gt;Patronen: 20</German> <German>Kaliber: 7,62x51mm NATO (Mk316 Mod 0)&lt;br /&gt;Patronen: 20</German>
<Italian>Calibro: 7.62x51 mm NATO (Mk316 Mod 0)&lt;br /&gt;Munizioni: 20</Italian> <Italian>Calibro: 7.62x51 mm NATO (Mk316 Mod 0)&lt;br /&gt;Munizioni: 20</Italian>
<Czech>Ráže: 7.62x51mm NATO (Mk316 Mod 0)&lt;br /&gt;Munice: 20</Czech> <Czech>Ráže: 7.62x51mm NATO (Mk316 Mod 0)&lt;br /&gt;Nábojů: 20</Czech>
<Portuguese>Calibre: 7.26x51mm NATO (Mk316 Mod 0)&lt;br/&gt;Cartuchos: 20</Portuguese> <Portuguese>Calibre: 7.26x51mm NATO (Mk316 Mod 0)&lt;br/&gt;Cartuchos: 20</Portuguese>
<Hungarian>Kaliber: 7,62x51mm NATO (Mk316 Mod 0)&lt;br /&gt;Lövedékek: 20</Hungarian> <Hungarian>Kaliber: 7,62x51mm NATO (Mk316 Mod 0)&lt;br /&gt;Lövedékek: 20</Hungarian>
</Key> </Key>
@ -1120,7 +1120,7 @@
<Russian>Калибр: 7,62x51 мм NATO (Mk319 Mod 0)&lt;br /&gt;Патронов: 10</Russian> <Russian>Калибр: 7,62x51 мм NATO (Mk319 Mod 0)&lt;br /&gt;Патронов: 10</Russian>
<German>Kaliber: 7,62x51mm NATO (Mk319 Mod 0)&lt;br /&gt;Patronen: 10</German> <German>Kaliber: 7,62x51mm NATO (Mk319 Mod 0)&lt;br /&gt;Patronen: 10</German>
<Italian>Calibro: 7.62x51 mm NATO (Mk319 Mod 0)&lt;br /&gt;Munizioni: 10</Italian> <Italian>Calibro: 7.62x51 mm NATO (Mk319 Mod 0)&lt;br /&gt;Munizioni: 10</Italian>
<Czech>Ráže: 7.62x51mm NATO (Mk319 Mod 0)&lt;br /&gt;Munice: 10</Czech> <Czech>Ráže: 7.62x51mm NATO (Mk319 Mod 0)&lt;br /&gt;Nábojů: 10</Czech>
<Portuguese>Calibre: 7.26x51mm NATO (Mk319 Mod 0)&lt;br/&gt;Cartuchos: 10</Portuguese> <Portuguese>Calibre: 7.26x51mm NATO (Mk319 Mod 0)&lt;br/&gt;Cartuchos: 10</Portuguese>
<Hungarian>Kaliber: 7,62x51mm NATO (Mk319 Mod 0)&lt;br /&gt;Lövedékek: 10</Hungarian> <Hungarian>Kaliber: 7,62x51mm NATO (Mk319 Mod 0)&lt;br /&gt;Lövedékek: 10</Hungarian>
</Key> </Key>
@ -1156,7 +1156,7 @@
<Russian>Калибр: 7,62x51 мм NATO (Mk319 Mod 0)&lt;br /&gt;Патронов: 20</Russian> <Russian>Калибр: 7,62x51 мм NATO (Mk319 Mod 0)&lt;br /&gt;Патронов: 20</Russian>
<German>Kaliber: 7,62x51mm NATO (Mk319 Mod 0)&lt;br /&gt;Patronen: 20</German> <German>Kaliber: 7,62x51mm NATO (Mk319 Mod 0)&lt;br /&gt;Patronen: 20</German>
<Italian>Calibro: 7.62x51 mm NATO (Mk319 Mod 0)&lt;br /&gt;Munizioni: 20</Italian> <Italian>Calibro: 7.62x51 mm NATO (Mk319 Mod 0)&lt;br /&gt;Munizioni: 20</Italian>
<Czech>Ráže: 7.62x51mm NATO (Mk319 Mod 0)&lt;br /&gt;Munice: 20</Czech> <Czech>Ráže: 7.62x51mm NATO (Mk319 Mod 0)&lt;br /&gt;Nábojů: 20</Czech>
<Portuguese>Calibre: 7.26x51mm NATO (Mk319 Mod 0)&lt;br/&gt;Cartuchos: 20</Portuguese> <Portuguese>Calibre: 7.26x51mm NATO (Mk319 Mod 0)&lt;br/&gt;Cartuchos: 20</Portuguese>
<Hungarian>Kaliber: 7,62x51mm NATO (Mk319 Mod 0)&lt;br /&gt;Lövedékek: 20</Hungarian> <Hungarian>Kaliber: 7,62x51mm NATO (Mk319 Mod 0)&lt;br /&gt;Lövedékek: 20</Hungarian>
</Key> </Key>
@ -1192,7 +1192,7 @@
<Russian>Калибр: 7,62x51 мм NATO (M993 бронебойные)&lt;br /&gt;Патронов: 10</Russian> <Russian>Калибр: 7,62x51 мм NATO (M993 бронебойные)&lt;br /&gt;Патронов: 10</Russian>
<German>Kaliber: 7,62x51mm NATO (M993 AP)&lt;br /&gt;Patronen: 10</German> <German>Kaliber: 7,62x51mm NATO (M993 AP)&lt;br /&gt;Patronen: 10</German>
<Italian>Calibro: 7.62x51 mm NATO (M993 AP)&lt;br /&gt;Munizioni: 10</Italian> <Italian>Calibro: 7.62x51 mm NATO (M993 AP)&lt;br /&gt;Munizioni: 10</Italian>
<Czech>Ráže: 7.62x51mm NATO (M993 AP)&lt;br /&gt;Munice: 10</Czech> <Czech>Ráže: 7.62x51mm NATO (M993 AP)&lt;br /&gt;Nábojů: 10</Czech>
<Portuguese>Calibre: 7.26x51mm NATO (M993 AP)&lt;br/&gt;Cartuchos: 10</Portuguese> <Portuguese>Calibre: 7.26x51mm NATO (M993 AP)&lt;br/&gt;Cartuchos: 10</Portuguese>
<Hungarian>Kaliber: 7,62x51mm NATO (M993 páncéltörő)&lt;br /&gt;Lövedékek: 10</Hungarian> <Hungarian>Kaliber: 7,62x51mm NATO (M993 páncéltörő)&lt;br /&gt;Lövedékek: 10</Hungarian>
</Key> </Key>
@ -1228,7 +1228,7 @@
<German>Kaliber: 7,62x51mm NATO (M993 AP)&lt;br /&gt;Patronen: 20</German> <German>Kaliber: 7,62x51mm NATO (M993 AP)&lt;br /&gt;Patronen: 20</German>
<Italian>Calibro: 7.62x51 mm NATO (M993 AP)&lt;br /&gt;Munizioni: 20</Italian> <Italian>Calibro: 7.62x51 mm NATO (M993 AP)&lt;br /&gt;Munizioni: 20</Italian>
<Spanish>Calibre: 7.62x51 mm NATO (M993 AP)&lt;br /&gt;Balas: 20</Spanish> <Spanish>Calibre: 7.62x51 mm NATO (M993 AP)&lt;br /&gt;Balas: 20</Spanish>
<Czech>Ráže: 7.62x51mm NATO (M993 AP)&lt;br /&gt;Munice: 20</Czech> <Czech>Ráže: 7.62x51mm NATO (M993 AP)&lt;br /&gt;Nábojů: 20</Czech>
<Portuguese>Calibre: 7.26x51mm NATO (M993 AP)&lt;br/&gt;Cartuchos: 20</Portuguese> <Portuguese>Calibre: 7.26x51mm NATO (M993 AP)&lt;br/&gt;Cartuchos: 20</Portuguese>
<Hungarian>Kaliber: 7,62x51mm NATO (M993 páncéltörő)&lt;br /&gt;Lövedékek: 20</Hungarian> <Hungarian>Kaliber: 7,62x51mm NATO (M993 páncéltörő)&lt;br /&gt;Lövedékek: 20</Hungarian>
</Key> </Key>
@ -1264,7 +1264,7 @@
<Russian>Калибр: 7,62x67 мм NATO (Mk248 Mod 0)&lt;br /&gt;Патронов: 20</Russian> <Russian>Калибр: 7,62x67 мм NATO (Mk248 Mod 0)&lt;br /&gt;Патронов: 20</Russian>
<German>Kaliber: 7,62x51mm NATO (Mk248 Mod 0)&lt;br /&gt;Patronen: 20</German> <German>Kaliber: 7,62x51mm NATO (Mk248 Mod 0)&lt;br /&gt;Patronen: 20</German>
<Italian>Calibro: 7.62x67 mm NATO (Mk248 Mod 0)&lt;br /&gt;Munizioni: 20</Italian> <Italian>Calibro: 7.62x67 mm NATO (Mk248 Mod 0)&lt;br /&gt;Munizioni: 20</Italian>
<Czech>Ráže: 7.62x67mm NATO (Mk248 Mod 0)&lt;br /&gt;Munice: 20</Czech> <Czech>Ráže: 7.62x67mm NATO (Mk248 Mod 0)&lt;br /&gt;Nábojů: 20</Czech>
<Portuguese>Calibre: 7.26x67mm NATO (Mk248 Mod 0)&lt;br/&gt;Cartuchos: 20</Portuguese> <Portuguese>Calibre: 7.26x67mm NATO (Mk248 Mod 0)&lt;br/&gt;Cartuchos: 20</Portuguese>
<Hungarian>Kaliber: 7,62x51mm NATO (Mk248 Mod 0)&lt;br /&gt;Lövedékek: 20</Hungarian> <Hungarian>Kaliber: 7,62x51mm NATO (Mk248 Mod 0)&lt;br /&gt;Lövedékek: 20</Hungarian>
</Key> </Key>
@ -1300,7 +1300,7 @@
<Russian>Калибр: 7,62x67 мм NATO (Mk248 Mod 1)&lt;br /&gt;Патронов: 20</Russian> <Russian>Калибр: 7,62x67 мм NATO (Mk248 Mod 1)&lt;br /&gt;Патронов: 20</Russian>
<German>Kaliber: 7,62x51mm NATO (Mk248 Mod 1)&lt;br /&gt;Patronen: 20</German> <German>Kaliber: 7,62x51mm NATO (Mk248 Mod 1)&lt;br /&gt;Patronen: 20</German>
<Italian>Calibro: 7.62x67 mm NATO (Mk248 Mod 1)&lt;br /&gt;Munizioni: 20</Italian> <Italian>Calibro: 7.62x67 mm NATO (Mk248 Mod 1)&lt;br /&gt;Munizioni: 20</Italian>
<Czech>Ráže: 7.62x67mm NATO (Mk248 Mod 1)&lt;br /&gt;Munice: 20</Czech> <Czech>Ráže: 7.62x67mm NATO (Mk248 Mod 1)&lt;br /&gt;Nábojů: 20</Czech>
<Portuguese>Calibre: 7.26x67mm NATO (Mk248 Mod 1)&lt;br/&gt;Cartuchos: 20</Portuguese> <Portuguese>Calibre: 7.26x67mm NATO (Mk248 Mod 1)&lt;br/&gt;Cartuchos: 20</Portuguese>
<Hungarian>Kaliber: 7,62x51mm NATO (Mk248 Mod 1)&lt;br /&gt;Lövedékek: 20</Hungarian> <Hungarian>Kaliber: 7,62x51mm NATO (Mk248 Mod 1)&lt;br /&gt;Lövedékek: 20</Hungarian>
</Key> </Key>
@ -1336,7 +1336,7 @@
<Russian>Калибр: 7,62x67 мм NATO (Berger Hybrid OTM)&lt;br /&gt;Патронов: 20</Russian> <Russian>Калибр: 7,62x67 мм NATO (Berger Hybrid OTM)&lt;br /&gt;Патронов: 20</Russian>
<German>Kaliber: 7,62x67mm NATO (Berger Hybrid OTM)&lt;br /&gt;Patronen: 20</German> <German>Kaliber: 7,62x67mm NATO (Berger Hybrid OTM)&lt;br /&gt;Patronen: 20</German>
<Italian>Calibro: 7.62x67 mm NATO (Berger Hybrid OTM)&lt;br /&gt;Munizioni: 20</Italian> <Italian>Calibro: 7.62x67 mm NATO (Berger Hybrid OTM)&lt;br /&gt;Munizioni: 20</Italian>
<Czech>Ráže: 7.62x67mm NATO (Berger Hybrid OTM)&lt;br /&gt;Munice: 20</Czech> <Czech>Ráže: 7.62x67mm NATO (Berger Hybrid OTM)&lt;br /&gt;Nábojů: 20</Czech>
<Portuguese>Calibre: 7.26x67mm NATO (Berger Hybrid OTM)&lt;br/&gt;Cartuchos: 20</Portuguese> <Portuguese>Calibre: 7.26x67mm NATO (Berger Hybrid OTM)&lt;br/&gt;Cartuchos: 20</Portuguese>
<Hungarian>Kaliber: 7,62x67mm NATO (Berger Hybrid OTM)&lt;br /&gt;Lövedékek: 20</Hungarian> <Hungarian>Kaliber: 7,62x67mm NATO (Berger Hybrid OTM)&lt;br /&gt;Lövedékek: 20</Hungarian>
</Key> </Key>
@ -1372,7 +1372,7 @@
<Russian>Калибр: 6,5x47 мм (экспансивные Scenar)&lt;br /&gt;Патронов: 30&lt;br /&gt;Используются с: MXM</Russian> <Russian>Калибр: 6,5x47 мм (экспансивные Scenar)&lt;br /&gt;Патронов: 30&lt;br /&gt;Используются с: MXM</Russian>
<German>Kaliber: 6,5x47mm (HPBT Scenar)&lt;br /&gt;Patronen: 30&lt;br /&gt;Eingesetzt von: MXM</German> <German>Kaliber: 6,5x47mm (HPBT Scenar)&lt;br /&gt;Patronen: 30&lt;br /&gt;Eingesetzt von: MXM</German>
<Italian>Calibro: 6.5x47mm (HPBT Scenar)&lt;br /&gt;Munizioni: 30&lt;br /&gt;In uso su: MXM</Italian> <Italian>Calibro: 6.5x47mm (HPBT Scenar)&lt;br /&gt;Munizioni: 30&lt;br /&gt;In uso su: MXM</Italian>
<Czech>Ráže: 6.5x47mm (HPBT Scenar)&lt;br /&gt;Munice: 30&lt;br /&gt;Použití: MXM</Czech> <Czech>Ráže: 6.5x47mm (HPBT Scenar)&lt;br /&gt;Nábojů: 30&lt;br /&gt;Použití u: MXM</Czech>
<Portuguese>Calibre: 6.5x47mm (HPBT Scenar)&lt;br/&gt;Cartuchos: 30&lt;br/&gt;Usado em: MXM</Portuguese> <Portuguese>Calibre: 6.5x47mm (HPBT Scenar)&lt;br/&gt;Cartuchos: 30&lt;br/&gt;Usado em: MXM</Portuguese>
<Hungarian>Kaliber: 6,5x47mm (HPBT Scenar)&lt;br /&gt;Lövedékek: 30&lt;br /&gt;Használható: MXM</Hungarian> <Hungarian>Kaliber: 6,5x47mm (HPBT Scenar)&lt;br /&gt;Lövedékek: 30&lt;br /&gt;Használható: MXM</Hungarian>
</Key> </Key>
@ -1408,7 +1408,7 @@
<Italian>Calibro: 6.5mm Creedmor&lt;br /&gt;Munizioni: 30&lt;br /&gt;In uso su: MXM</Italian> <Italian>Calibro: 6.5mm Creedmor&lt;br /&gt;Munizioni: 30&lt;br /&gt;In uso su: MXM</Italian>
<Spanish>Calibre: 6.5mm Creedmor&lt;br /&gt;Balas: 30&lt;br /&gt;Se usa en: MXM</Spanish> <Spanish>Calibre: 6.5mm Creedmor&lt;br /&gt;Balas: 30&lt;br /&gt;Se usa en: MXM</Spanish>
<Russian>Калибр: 6,5x47мм Creedmor&lt;br /&gt;Патронов: 30&lt;br /&gt;Используются c: MXM</Russian> <Russian>Калибр: 6,5x47мм Creedmor&lt;br /&gt;Патронов: 30&lt;br /&gt;Используются c: MXM</Russian>
<Czech>Ráže: 6.5x47mm Creedmor&lt;br /&gt;Munice: 30&lt;br /&gt;Použití: MXM</Czech> <Czech>Ráže: 6.5x47mm Creedmor&lt;br /&gt;Nábojů: 30&lt;br /&gt;Použití u: MXM</Czech>
<Portuguese>Calibre: 6.5x47mm Creedmor&lt;br/&gt;Cartuchos: 30&lt;br/&gt;Usado em: MXM</Portuguese> <Portuguese>Calibre: 6.5x47mm Creedmor&lt;br/&gt;Cartuchos: 30&lt;br/&gt;Usado em: MXM</Portuguese>
<Hungarian>Kaliber: 6,5x47mm Creedmor&lt;br /&gt;Lövedékek: 30&lt;br /&gt;Használható: MXM</Hungarian> <Hungarian>Kaliber: 6,5x47mm Creedmor&lt;br /&gt;Lövedékek: 30&lt;br /&gt;Használható: MXM</Hungarian>
</Key> </Key>
@ -1444,7 +1444,7 @@
<Russian>Калибр: 8,6x70mm (300 гран Sierra MatchKing экспансивные)&lt;br /&gt;Патронов: 10</Russian> <Russian>Калибр: 8,6x70mm (300 гран Sierra MatchKing экспансивные)&lt;br /&gt;Патронов: 10</Russian>
<German>Kaliber: 8,6x70mm (300gr Sierra MatchKing HPBT)&lt;br /&gt;Patronen: 10</German> <German>Kaliber: 8,6x70mm (300gr Sierra MatchKing HPBT)&lt;br /&gt;Patronen: 10</German>
<Italian>Calibro: 8.6x70mm (300gr Sierra MatchKing HPBT)&lt;br /&gt;Munizioni: 10</Italian> <Italian>Calibro: 8.6x70mm (300gr Sierra MatchKing HPBT)&lt;br /&gt;Munizioni: 10</Italian>
<Czech>Ráže: 8.6x70mm (300gr Sierra MatchKing HPBT)&lt;br /&gt;Munice: 10</Czech> <Czech>Ráže: 8.6x70mm (300gr Sierra MatchKing HPBT)&lt;br /&gt;Nábojů: 10</Czech>
<Portuguese>Calibre: 8.6x70mm (300gr Sierra MatchKing HPBT)&lt;br/&gt;Cartuchos: 10</Portuguese> <Portuguese>Calibre: 8.6x70mm (300gr Sierra MatchKing HPBT)&lt;br/&gt;Cartuchos: 10</Portuguese>
<Hungarian>Kaliber: 8,6x70mm (300gr Sierra MatchKing HPBT)&lt;br /&gt;Lövedékek: 10</Hungarian> <Hungarian>Kaliber: 8,6x70mm (300gr Sierra MatchKing HPBT)&lt;br /&gt;Lövedékek: 10</Hungarian>
</Key> </Key>
@ -1480,7 +1480,7 @@
<Russian>Калибр: 8,6x70 мм (API526)&lt;br /&gt;Патронов: 10</Russian> <Russian>Калибр: 8,6x70 мм (API526)&lt;br /&gt;Патронов: 10</Russian>
<German>Kaliber: 8,6x70mm (API526)&lt;br /&gt;Patronen: 10</German> <German>Kaliber: 8,6x70mm (API526)&lt;br /&gt;Patronen: 10</German>
<Italian>Calibro: 8.6x70mm (API526)&lt;br /&gt;Munizioni: 10</Italian> <Italian>Calibro: 8.6x70mm (API526)&lt;br /&gt;Munizioni: 10</Italian>
<Czech>Ráže: 8.6x70mm (API526)&lt;br /&gt;Munice: 10</Czech> <Czech>Ráže: 8.6x70mm (API526)&lt;br /&gt;Nábojů: 10</Czech>
<Portuguese>Calibre: 8.6x70mm (API526)&lt;br/&gt;Cartuchos: 10</Portuguese> <Portuguese>Calibre: 8.6x70mm (API526)&lt;br/&gt;Cartuchos: 10</Portuguese>
<Hungarian>Kaliber: 8,6x70mm (API526)&lt;br /&gt;Lövedékek: 10</Hungarian> <Hungarian>Kaliber: 8,6x70mm (API526)&lt;br /&gt;Lövedékek: 10</Hungarian>
</Key> </Key>
@ -1516,7 +1516,7 @@
<Russian>Калибр: 12,7x99 мм&lt;br /&gt;Патронов: 5</Russian> <Russian>Калибр: 12,7x99 мм&lt;br /&gt;Патронов: 5</Russian>
<German>Kaliber: 12,7x99mm&lt;br /&gt;Patronen: 5</German> <German>Kaliber: 12,7x99mm&lt;br /&gt;Patronen: 5</German>
<Italian>Calibro: 12.7x99mm&lt;br /&gt;Munizioni: 5</Italian> <Italian>Calibro: 12.7x99mm&lt;br /&gt;Munizioni: 5</Italian>
<Czech>Ráže: 12.7x99mm&lt;br /&gt;Munice: 5</Czech> <Czech>Ráže: 12.7x99mm&lt;br /&gt;Nábojů: 5</Czech>
<Portuguese>Calibre: 12.7x99mm&lt;br/&gt;Cartuchos: 5</Portuguese> <Portuguese>Calibre: 12.7x99mm&lt;br/&gt;Cartuchos: 5</Portuguese>
<Hungarian>Kaliber: 12,7x99mm&lt;br /&gt;Lövedékek: 5</Hungarian> <Hungarian>Kaliber: 12,7x99mm&lt;br /&gt;Lövedékek: 5</Hungarian>
</Key> </Key>
@ -1552,7 +1552,7 @@
<Russian>Калибр: 12,7x99 мм бронебойно-зажигательные&lt;br /&gt;Патронов: 5</Russian> <Russian>Калибр: 12,7x99 мм бронебойно-зажигательные&lt;br /&gt;Патронов: 5</Russian>
<German>Kaliber:12,7x99mm API&lt;br /&gt;Patronen: 5</German> <German>Kaliber:12,7x99mm API&lt;br /&gt;Patronen: 5</German>
<Italian>Calibro: 12.7x99mm API&lt;br /&gt;Munizioni: 5</Italian> <Italian>Calibro: 12.7x99mm API&lt;br /&gt;Munizioni: 5</Italian>
<Czech>Ráže: 12.7x99mm API&lt;br /&gt;Munice: 5</Czech> <Czech>Ráže: 12.7x99mm API&lt;br /&gt;Nábojů: 5</Czech>
<Portuguese>Calibre: 12.7x99mm API&lt;br/&gt;Cartuchos: 5</Portuguese> <Portuguese>Calibre: 12.7x99mm API&lt;br/&gt;Cartuchos: 5</Portuguese>
<Hungarian>Kaliber: 12,7x99mm API&lt;br /&gt;Lövedékek: 5</Hungarian> <Hungarian>Kaliber: 12,7x99mm API&lt;br /&gt;Lövedékek: 5</Hungarian>
</Key> </Key>
@ -1588,7 +1588,7 @@
<Russian>Калибр: 12,7x99 мм (A-MAX)&lt;br /&gt;Патронов: 5</Russian> <Russian>Калибр: 12,7x99 мм (A-MAX)&lt;br /&gt;Патронов: 5</Russian>
<Italian>Calibro: 12.7x99mm (AMAX)&lt;br /&gt;Munizioni: 5</Italian> <Italian>Calibro: 12.7x99mm (AMAX)&lt;br /&gt;Munizioni: 5</Italian>
<German>Kaliber:12,7x99mm (AMAX)&lt;br /&gt;Patronen: 5</German> <German>Kaliber:12,7x99mm (AMAX)&lt;br /&gt;Patronen: 5</German>
<Czech>Ráže: 12.7x99mm (AMAX)&lt;br /&gt;Munice: 5</Czech> <Czech>Ráže: 12.7x99mm (AMAX)&lt;br /&gt;Nábojů: 5</Czech>
<Portuguese>Calibre: 12.7x99mm (AMAX)&lt;br/&gt;Cartuchos: 5</Portuguese> <Portuguese>Calibre: 12.7x99mm (AMAX)&lt;br/&gt;Cartuchos: 5</Portuguese>
<Hungarian>Kaliber: 12,7x99mm (AMAX)&lt;br /&gt;Lövedékek: 5</Hungarian> <Hungarian>Kaliber: 12,7x99mm (AMAX)&lt;br /&gt;Lövedékek: 5</Hungarian>
</Key> </Key>
@ -1602,6 +1602,7 @@
<French>[ACE] Caisse de munitions</French> <French>[ACE] Caisse de munitions</French>
<Hungarian>[ACE] Lőszeres láda</Hungarian> <Hungarian>[ACE] Lőszeres láda</Hungarian>
<Russian>[ACE] Ящик с боеприпасами</Russian> <Russian>[ACE] Ящик с боеприпасами</Russian>
<Italian>[ACE] Cassa munizioni</Italian>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -0,0 +1,30 @@
class Cfg3DEN {
class Object {
class AttributeCategories {
class ace_attributes {
class Attributes {
class ace_isHandcuffed {
property = QUOTE(ace_isHandcuffed);
control = "Checkbox";
displayName = CSTRING(ModuleHandcuffed_DisplayName);
tooltip = CSTRING(ModuleHandcuffed_Description);
expression = QUOTE([ARR_2(_this,_value)]call FUNC(setHandcuffed));
typeName = "BOOL";
condition = "objectBrain";
defaultValue = false;
};
class ace_isSurrendered {
property = QUOTE(ace_isSurrendered);
control = "Checkbox";
displayName = CSTRING(ModuleSurrender_DisplayName);
tooltip = CSTRING(ModuleSurrender_Description);
expression = QUOTE([ARR_2(_this,_value)]call FUNC(setSurrendered));
typeName = "BOOL";
condition = "objectBrain";
defaultValue = false;
};
};
};
};
};
};

View File

@ -1,3 +1,10 @@
class Extended_PreStart_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_preStart));
};
};
class Extended_PreInit_EventHandlers { class Extended_PreInit_EventHandlers {
class ADDON { class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_preInit)); init = QUOTE(call COMPILE_FILE(XEH_preInit));
@ -9,6 +16,13 @@ class Extended_PostInit_EventHandlers {
init = QUOTE(call COMPILE_FILE(XEH_postInit)); init = QUOTE(call COMPILE_FILE(XEH_postInit));
}; };
}; };
class Extended_DisplayUnload_EventHandlers {
class RscDisplayCurator {
ADDON = QUOTE(call FUNC(handleZeusDisplayChanged));
};
};
//release escorted captive when entering a vehicle //release escorted captive when entering a vehicle
class Extended_GetIn_EventHandlers { class Extended_GetIn_EventHandlers {
class All { class All {

View File

@ -0,0 +1,30 @@
PREP(canApplyHandcuffs);
PREP(canEscortCaptive);
PREP(canFriskPerson);
PREP(canLoadCaptive);
PREP(canRemoveHandcuffs);
PREP(canStopEscorting);
PREP(canSurrender);
PREP(canUnloadCaptive);
PREP(doApplyHandcuffs);
PREP(doEscortCaptive);
PREP(doFriskPerson);
PREP(doLoadCaptive);
PREP(doRemoveHandcuffs);
PREP(doUnloadCaptive);
PREP(findEmptyNonFFVCargoSeat);
PREP(handleGetIn);
PREP(handleGetOut);
PREP(handleOnUnconscious);
PREP(handlePlayerChanged);
PREP(handleRespawn);
PREP(handleUnitInitPost);
PREP(handleZeusDisplayChanged);
PREP(moduleHandcuffed);
PREP(moduleSettings);
PREP(moduleSurrender);
PREP(setHandcuffed);
PREP(setSurrendered);
PREP(vehicleCaptiveMoveIn);
PREP(vehicleCaptiveMoveOut);

View File

@ -18,7 +18,6 @@ if (isServer) then {
}]; }];
}; };
["zeusDisplayChanged", {_this call FUNC(handleZeusDisplayChanged)}] call EFUNC(common,addEventHandler);
["playerChanged", {_this call FUNC(handlePlayerChanged)}] call EFUNC(common,addEventhandler); ["playerChanged", {_this call FUNC(handlePlayerChanged)}] call EFUNC(common,addEventhandler);
["MoveInCaptive", {_this call FUNC(vehicleCaptiveMoveIn)}] call EFUNC(common,addEventHandler); ["MoveInCaptive", {_this call FUNC(vehicleCaptiveMoveIn)}] call EFUNC(common,addEventHandler);
["MoveOutCaptive", {_this call FUNC(vehicleCaptiveMoveOut)}] call EFUNC(common,addEventHandler); ["MoveOutCaptive", {_this call FUNC(vehicleCaptiveMoveOut)}] call EFUNC(common,addEventHandler);
@ -34,3 +33,10 @@ if (!hasInterface) exitWith {};
["isNotEscorting", {!(GETVAR(_this select 0,GVAR(isEscorting),false))}] call EFUNC(common,addCanInteractWithCondition); ["isNotEscorting", {!(GETVAR(_this select 0,GVAR(isEscorting),false))}] call EFUNC(common,addCanInteractWithCondition);
["isNotHandcuffed", {!(GETVAR(_this select 0,GVAR(isHandcuffed),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); ["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

@ -2,34 +2,8 @@
ADDON = false; ADDON = false;
PREP(canApplyHandcuffs); #include "XEH_PREP.hpp"
PREP(canEscortCaptive);
PREP(canFriskPerson); GVAR(captivityEnabled) = false;
PREP(canLoadCaptive);
PREP(canRemoveHandcuffs);
PREP(canStopEscorting);
PREP(canSurrender);
PREP(canUnloadCaptive);
PREP(doApplyHandcuffs);
PREP(doEscortCaptive);
PREP(doFriskPerson);
PREP(doLoadCaptive);
PREP(doRemoveHandcuffs);
PREP(doUnloadCaptive);
PREP(findEmptyNonFFVCargoSeat);
PREP(handleGetIn);
PREP(handleGetOut);
PREP(handleOnUnconscious);
PREP(handlePlayerChanged);
PREP(handleRespawn);
PREP(handleUnitInitPost);
PREP(handleZeusDisplayChanged);
PREP(moduleHandcuffed);
PREP(moduleSettings);
PREP(moduleSurrender);
PREP(setHandcuffed);
PREP(setSurrendered);
PREP(vehicleCaptiveMoveIn);
PREP(vehicleCaptiveMoveOut);
ADDON = true; ADDON = true;

View File

@ -0,0 +1,3 @@
#include "script_component.hpp"
#include "XEH_PREP.hpp"

View File

@ -17,3 +17,4 @@ class CfgPatches {
#include "CfgMoves.hpp" #include "CfgMoves.hpp"
#include "CfgVehicles.hpp" #include "CfgVehicles.hpp"
#include "CfgWeapons.hpp" #include "CfgWeapons.hpp"
#include "CfgEden.hpp"

View File

@ -40,12 +40,12 @@ if (_respawn > 3) then {
if (_unit getVariable [QGVAR(isHandcuffed), false]) then { if (_unit getVariable [QGVAR(isHandcuffed), false]) then {
[_unit, false] call FUNC(setHandcuffed); [_unit, false] call FUNC(setHandcuffed);
}; };
[_unit, QGVAR(Handcuffed), false] call EFUNC(common,setCaptivityStatus); [_unit, "setCaptive", QGVAR(Handcuffed), false] call EFUNC(common,statusEffect_set);
if (_unit getVariable [QGVAR(isSurrendering), false]) then { if (_unit getVariable [QGVAR(isSurrendering), false]) then {
[_unit, false] call FUNC(setSurrendered); [_unit, false] call FUNC(setSurrendered);
}; };
[_unit, QGVAR(Surrendered), false] call EFUNC(common,setCaptivityStatus); [_unit, "setCaptive", QGVAR(Surrendered), false] call EFUNC(common,statusEffect_set);
if (_oldUnit getVariable [QGVAR(isEscorting), false]) then { if (_oldUnit getVariable [QGVAR(isEscorting), false]) then {
_oldUnit setVariable [QGVAR(isEscorting), false, true]; _oldUnit setVariable [QGVAR(isEscorting), false, true];

View File

@ -17,15 +17,10 @@
*/ */
#include "script_component.hpp" #include "script_component.hpp"
params ["_unit","_zeusIsOpen"]; if ((ACE_player getVariable [QGVAR(isHandcuffed), false]) || {ACE_player getVariable [QGVAR(isSurrendering), false]}) then {
TRACE_1("Player Change (showHUD false)",ACE_player);
//set showHUD based on unit status: ["captive", [false, false, false, false, false, false, false, false]] call EFUNC(common,showHud);
if (!_zeusIsOpen) then { } else {
if ((_unit getVariable [QGVAR(isHandcuffed), false]) || {_unit getVariable [QGVAR(isSurrendering), false]}) then { TRACE_1("Player Change (showHUD true)",ACE_player);
TRACE_1("Player Change (showHUD false)",_unit); ["captive", []] call EFUNC(common,showHud); //same as showHud true;
["captive", [false, false, false, false, false, false, false, false]] call EFUNC(common,showHud);
} else {
TRACE_1("Player Change (showHUD true)",_unit);
["captive", []] call EFUNC(common,showHud); //same as showHud true;
};
}; };

View File

@ -22,13 +22,25 @@ TRACE_2("params",_unit,_state);
if (!local _unit) exitWith { if (!local _unit) exitWith {
ERROR("running setHandcuffed on remote unit"); 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 { if ((_unit getVariable [QGVAR(isHandcuffed), false]) isEqualTo _state) exitWith {
ERROR("setHandcuffed: current state same as new"); ERROR("setHandcuffed: current state same as new");
}; };
if (_state) then { if (_state) then {
_unit setVariable [QGVAR(isHandcuffed), true, true]; _unit setVariable [QGVAR(isHandcuffed), true, true];
[_unit, QGVAR(Handcuffed), true] call EFUNC(common,setCaptivityStatus); [_unit, "setCaptive", QGVAR(Handcuffed), true] call EFUNC(common,statusEffect_set);
if (_unit getVariable [QGVAR(isSurrendering), false]) then { //If surrendering, stop if (_unit getVariable [QGVAR(isSurrendering), false]) then { //If surrendering, stop
[_unit, false] call FUNC(setSurrendered); [_unit, false] call FUNC(setSurrendered);
@ -89,7 +101,7 @@ if (_state) then {
}, [_unit], 0.01] call EFUNC(common,waitAndExecute); }, [_unit], 0.01] call EFUNC(common,waitAndExecute);
} else { } else {
_unit setVariable [QGVAR(isHandcuffed), false, true]; _unit setVariable [QGVAR(isHandcuffed), false, true];
[_unit, QGVAR(Handcuffed), false] call EFUNC(common,setCaptivityStatus); [_unit, "setCaptive", QGVAR(Handcuffed), false] call EFUNC(common,statusEffect_set);
//remove AnimChanged EH //remove AnimChanged EH
private _animChangedEHID = _unit getVariable [QGVAR(handcuffAnimEHID), -1]; private _animChangedEHID = _unit getVariable [QGVAR(handcuffAnimEHID), -1];

View File

@ -23,6 +23,17 @@ if (!local _unit) exitWith {
ERROR("running surrender on remote unit"); 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 { if ((_unit getVariable [QGVAR(isSurrendering), false]) isEqualTo _state) exitWith {
ERROR("Surrender: current state same as new"); ERROR("Surrender: current state same as new");
}; };
@ -33,7 +44,7 @@ if (_state) then {
_unit setVariable [QGVAR(isSurrendering), true, true]; _unit setVariable [QGVAR(isSurrendering), true, true];
[_unit, QGVAR(Surrendered), true] call EFUNC(common,setCaptivityStatus); [_unit, "setCaptive", QGVAR(Surrendered), true] call EFUNC(common,statusEffect_set);
if (_unit == ACE_player) then { if (_unit == ACE_player) then {
["captive", [false, false, false, false, false, false, false, false]] call EFUNC(common,showHud); ["captive", [false, false, false, false, false, false, false, false]] call EFUNC(common,showHud);
@ -65,7 +76,7 @@ if (_state) then {
}, [_unit], 0.01] call EFUNC(common,waitAndExecute); }, [_unit], 0.01] call EFUNC(common,waitAndExecute);
} else { } else {
_unit setVariable [QGVAR(isSurrendering), false, true]; _unit setVariable [QGVAR(isSurrendering), false, true];
[_unit, QGVAR(Surrendered), false] call EFUNC(common,setCaptivityStatus); [_unit, "setCaptive", QGVAR(Surrendered), false] call EFUNC(common,statusEffect_set);
//remove AnimChanged EH //remove AnimChanged EH
private _animChangedEHID = _unit getVariable [QGVAR(surrenderAnimEHID), -1]; private _animChangedEHID = _unit getVariable [QGVAR(surrenderAnimEHID), -1];

View File

@ -2,6 +2,9 @@
#include "\z\ace\addons\main\script_mod.hpp" #include "\z\ace\addons\main\script_mod.hpp"
// #define DEBUG_MODE_FULL // #define DEBUG_MODE_FULL
// #define DISABLE_COMPILE_CACHE
// #define CBA_DEBUG_SYNCHRONOUS
// #define ENABLE_PERFORMANCE_COUNTERS
#ifdef DEBUG_ENABLED_CAPTIVES #ifdef DEBUG_ENABLED_CAPTIVES
#define DEBUG_MODE_FULL #define DEBUG_MODE_FULL

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project name="ACE"> <Project name="ACE">
<Package name="Captives"> <Package name="Captives">
<Key ID="STR_ACE_Captives_SetCaptive"> <Key ID="STR_ACE_Captives_SetCaptive">
@ -7,7 +7,7 @@
<Spanish>Tomar prisionero</Spanish> <Spanish>Tomar prisionero</Spanish>
<French>Capturer le prisonnier</French> <French>Capturer le prisonnier</French>
<Polish>Aresztuj</Polish> <Polish>Aresztuj</Polish>
<Czech>Zajmout Osobu</Czech> <Czech>Zajmout osobu</Czech>
<Italian>Arresta il prigioniero</Italian> <Italian>Arresta il prigioniero</Italian>
<Portuguese>Tomar Prisioneiro</Portuguese> <Portuguese>Tomar Prisioneiro</Portuguese>
<Hungarian>Foglyul ejtés</Hungarian> <Hungarian>Foglyul ejtés</Hungarian>
@ -19,7 +19,7 @@
<Spanish>Liberar prisionero</Spanish> <Spanish>Liberar prisionero</Spanish>
<Polish>Wypuść więźnia</Polish> <Polish>Wypuść więźnia</Polish>
<French>Libérer le prisonnier</French> <French>Libérer le prisonnier</French>
<Czech>Osvobodit Zajatce</Czech> <Czech>Osvobodit zajatce</Czech>
<Italian>Libera il prigioniero</Italian> <Italian>Libera il prigioniero</Italian>
<Portuguese>Libertar Prisioneiro</Portuguese> <Portuguese>Libertar Prisioneiro</Portuguese>
<Hungarian>Fogoly szabadon engedése</Hungarian> <Hungarian>Fogoly szabadon engedése</Hungarian>
@ -31,7 +31,7 @@
<Spanish>Escoltar prisionero</Spanish> <Spanish>Escoltar prisionero</Spanish>
<Polish>Eskortuj więźnia</Polish> <Polish>Eskortuj więźnia</Polish>
<French>Escorter le prisonnier</French> <French>Escorter le prisonnier</French>
<Czech>Eskortovat Zajatce</Czech> <Czech>Eskortovat zajatce</Czech>
<Italian>Scorta il Prigioniero</Italian> <Italian>Scorta il Prigioniero</Italian>
<Portuguese>Escoltar Prisioneiro</Portuguese> <Portuguese>Escoltar Prisioneiro</Portuguese>
<Hungarian>Fogoly kísérése</Hungarian> <Hungarian>Fogoly kísérése</Hungarian>
@ -43,7 +43,7 @@
<Spanish>Soltar prisionero</Spanish> <Spanish>Soltar prisionero</Spanish>
<Polish>Anuluj eskortowanie</Polish> <Polish>Anuluj eskortowanie</Polish>
<French>Relâcher le prisonnier</French> <French>Relâcher le prisonnier</French>
<Czech>Uvolnit Zajatce</Czech> <Czech>Uvolnit zajatce</Czech>
<Italian>Rilascia il Prigioniero</Italian> <Italian>Rilascia il Prigioniero</Italian>
<Portuguese>Largar Prisioneiro</Portuguese> <Portuguese>Largar Prisioneiro</Portuguese>
<Hungarian>Fogoly elengedése</Hungarian> <Hungarian>Fogoly elengedése</Hungarian>
@ -91,7 +91,7 @@
<Polish>Opaska zaciskowa</Polish> <Polish>Opaska zaciskowa</Polish>
<Spanish>Precinto</Spanish> <Spanish>Precinto</Spanish>
<French>Serflex</French> <French>Serflex</French>
<Czech>Stahovací Pásek</Czech> <Czech>Stahovací pásek</Czech>
<Portuguese>Algema Plástica</Portuguese> <Portuguese>Algema Plástica</Portuguese>
<Italian>Fascietta</Italian> <Italian>Fascietta</Italian>
<Hungarian>Gyorskötöző</Hungarian> <Hungarian>Gyorskötöző</Hungarian>
@ -167,6 +167,7 @@
<French>Faire capituler l'unité</French> <French>Faire capituler l'unité</French>
<Hungarian>Egység kapitulálása</Hungarian> <Hungarian>Egység kapitulálása</Hungarian>
<Russian>Заставить юнита сдаться</Russian> <Russian>Заставить юнита сдаться</Russian>
<Italian>Fai arrendere l'unità</Italian>
</Key> </Key>
<Key ID="STR_ACE_Captives_ModuleSurrender_Description"> <Key ID="STR_ACE_Captives_ModuleSurrender_Description">
<English>Sync a unit to make them surrender.&lt;br /&gt;Source: ace_captives</English> <English>Sync a unit to make them surrender.&lt;br /&gt;Source: ace_captives</English>
@ -178,20 +179,25 @@
<French>Synchronise une unité pour la rendre captive. &lt;br/&gt;Source: ace_captives</French> <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> <Hungarian>Egység szinkronizálása, hogy kapituláljon.&lt;br /&gt;Forrás: ace_captives</Hungarian>
<Russian>Синхронизируйте с юнитами, чтобы заставить их сдаться в плен.&lt;br /&gt;Источник: ace_captives</Russian> <Russian>Синхронизируйте с юнитами, чтобы заставить их сдаться в плен.&lt;br /&gt;Источник: ace_captives</Russian>
<Italian>Sincronizza una unità per farla arrendere.&lt;br/&gt;Fonte: ace_captives</Italian>
</Key> </Key>
<Key ID="STR_ACE_Captives_ModuleHandcuffed_DisplayName"> <Key ID="STR_ACE_Captives_ModuleHandcuffed_DisplayName">
<English>Make Unit Handcuffed</English> <English>Make Unit Handcuffed</English>
<German>Einheit in Handschellen legen</German>
<Polish>Skuj jednostkę</Polish> <Polish>Skuj jednostkę</Polish>
<Portuguese>Fazer unidade algemada</Portuguese> <Portuguese>Fazer unidade algemada</Portuguese>
<Russian>Связать юнита</Russian> <Russian>Связать юнита</Russian>
<Czech>Spoutat jednotku</Czech> <Czech>Spoutat jednotku</Czech>
<Italian>Metti manette all'unità</Italian>
</Key> </Key>
<Key ID="STR_ACE_Captives_ModuleHandcuffed_Description"> <Key ID="STR_ACE_Captives_ModuleHandcuffed_Description">
<English>Sync a unit to make them handcuffed.&lt;br /&gt;Source: ace_captives</English> <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> <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> <Portuguese>Sincronizar uma unidade para deixá-la algemada.&lt;br/&gt;Source: ace_captives</Portuguese>
<Russian>Синхронизируйте с юнитами, чтобы сделать их связанными.&lt;br /&gt;Источник: ace_captives</Russian> <Russian>Синхронизируйте с юнитами, чтобы сделать их связанными.&lt;br /&gt;Источник: ace_captives</Russian>
<Czech>Synchronizovat s jednotkou, která má být v poutech.&lt;br /&gt;Zdroj: ace_captives</Czech> <Czech>Synchronizovat s jednotkou, která má být v poutech.&lt;br /&gt;Zdroj: ace_captives</Czech>
<Italian>Sincronizza un'unità per metterle le manette.&lt;br/&gt;Fonte: ace_captives</Italian>
</Key> </Key>
<Key ID="STR_ACE_Captives_ModuleSettings_DisplayName"> <Key ID="STR_ACE_Captives_ModuleSettings_DisplayName">
<English>Captives Settings</English> <English>Captives Settings</English>
@ -203,6 +209,7 @@
<French>Options de capitulation</French> <French>Options de capitulation</French>
<Hungarian>Fogoly-beállítások</Hungarian> <Hungarian>Fogoly-beállítások</Hungarian>
<Russian>Настройки пленения</Russian> <Russian>Настройки пленения</Russian>
<Italian>Impostazioni Prigionieri</Italian>
</Key> </Key>
<Key ID="STR_ACE_Captives_ModuleSettings_Description"> <Key ID="STR_ACE_Captives_ModuleSettings_Description">
<English>Controls settings for surrender and cable ties</English> <English>Controls settings for surrender and cable ties</English>
@ -214,6 +221,7 @@
<French>Contrôle les paramètres de la rédition et des Serflex</French> <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> <Hungarian>Szabályozza a kapituláció és bilincselés beállításait</Hungarian>
<Russian>Управляет настройками сдачи в плен и связывания</Russian> <Russian>Управляет настройками сдачи в плен и связывания</Russian>
<Italian>Controlla le impostazioni per la resa e le manette</Italian>
</Key> </Key>
<Key ID="STR_ACE_Captives_ModuleSettings_handcuffSide_name"> <Key ID="STR_ACE_Captives_ModuleSettings_handcuffSide_name">
<English>Can handcuff own side</English> <English>Can handcuff own side</English>
@ -225,6 +233,7 @@
<French>Peut libérer sa propre faction</French> <French>Peut libérer sa propre faction</French>
<Hungarian>Saját oldal megbilincselhető</Hungarian> <Hungarian>Saját oldal megbilincselhető</Hungarian>
<Russian>Связать союзника</Russian> <Russian>Связать союзника</Russian>
<Italian>Puoi ammanettare unità alleate</Italian>
</Key> </Key>
<Key ID="STR_ACE_Captives_ModuleSettings_handcuffSide_description"> <Key ID="STR_ACE_Captives_ModuleSettings_handcuffSide_description">
<English>Can players cabletie units on their own side</English> <English>Can players cabletie units on their own side</English>
@ -236,6 +245,7 @@
<French>Les joueurs peuvent utiliser les Serflex sur leur propre camp</French> <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> <Hungarian>A játékosok megkötözhetik-e a saját oldalukon lévő egységeket</Hungarian>
<Russian>Разрешить игрокам связывать юнитов своей стороны</Russian> <Russian>Разрешить игрокам связывать юнитов своей стороны</Russian>
<Italian>I giocatori possono ammanettare unità alleate</Italian>
</Key> </Key>
<Key ID="STR_ACE_Captives_ModuleSettings_allowSurrender_name"> <Key ID="STR_ACE_Captives_ModuleSettings_allowSurrender_name">
<English>Allow surrendering</English> <English>Allow surrendering</English>
@ -247,6 +257,7 @@
<French>Permettre la capitulation</French> <French>Permettre la capitulation</French>
<Hungarian>Kapituláció engedélyezése</Hungarian> <Hungarian>Kapituláció engedélyezése</Hungarian>
<Russian>Сдаться в плен</Russian> <Russian>Сдаться в плен</Russian>
<Italian>Permetti Resa</Italian>
</Key> </Key>
<Key ID="STR_ACE_Captives_ModuleSettings_allowSurrender_description"> <Key ID="STR_ACE_Captives_ModuleSettings_allowSurrender_description">
<English>Players can surrender after holstering their weapon</English> <English>Players can surrender after holstering their weapon</English>
@ -258,6 +269,7 @@
<French>Les joueurs peuvent se rendre après avoir rangé leur arme</French> <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> <Hungarian>A játékosok megadhatják magukat a fegyverük elrakása után</Hungarian>
<Russian>Игроки могут сдаться в плен после того, как уберут оружие</Russian> <Russian>Игроки могут сдаться в плен после того, как уберут оружие</Russian>
<Italian>I giocatori possono arrendersi dopo aver messo via le proprie armi</Italian>
</Key> </Key>
<Key ID="STR_ACE_Captives_ModuleSettings_requireSurrender_name"> <Key ID="STR_ACE_Captives_ModuleSettings_requireSurrender_name">
<English>Require surrendering</English> <English>Require surrendering</English>
@ -267,6 +279,7 @@
<Russian>Требовать пленения</Russian> <Russian>Требовать пленения</Russian>
<Spanish>Requiere rendición</Spanish> <Spanish>Requiere rendición</Spanish>
<Czech>Vzdávání vyžadováno</Czech> <Czech>Vzdávání vyžadováno</Czech>
<Italian>Richiedi Resa</Italian>
</Key> </Key>
<Key ID="STR_ACE_Captives_ModuleSettings_requireSurrender_description"> <Key ID="STR_ACE_Captives_ModuleSettings_requireSurrender_description">
<English>Require Players to surrender before they can be arrested</English> <English>Require Players to surrender before they can be arrested</English>
@ -276,6 +289,7 @@
<Russian>Требуется, чтобы игрок сдался в плен прежде, чем его можно будет связать</Russian> <Russian>Требуется, чтобы игрок сдался в плен прежде, чем его можно будет связать</Russian>
<Spanish>Requiere que los Jugadores se rindan antes de arrestarlos</Spanish> <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> <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>
<Key ID="STR_ACE_Captives_SurrenderOnly"> <Key ID="STR_ACE_Captives_SurrenderOnly">
<English>Surrendering only</English> <English>Surrendering only</English>
@ -285,6 +299,7 @@
<Russian>Только сдавшийся в плен</Russian> <Russian>Только сдавшийся в плен</Russian>
<Spanish>Solo rendición</Spanish> <Spanish>Solo rendición</Spanish>
<Czech>Pouze vzdávání</Czech> <Czech>Pouze vzdávání</Czech>
<Italian>Solo Resa</Italian>
</Key> </Key>
<Key ID="STR_ACE_Captives_SurrenderOrNoWeapon"> <Key ID="STR_ACE_Captives_SurrenderOrNoWeapon">
<English>Surrendering or No weapon</English> <English>Surrendering or No weapon</English>
@ -294,6 +309,7 @@
<Russian>Сдавшийся или безоружный</Russian> <Russian>Сдавшийся или безоружный</Russian>
<Spanish>Rendición o desarme</Spanish> <Spanish>Rendición o desarme</Spanish>
<Czech>Vzdávání nebo beze zbraně</Czech> <Czech>Vzdávání nebo beze zbraně</Czech>
<Italian>Resa o senza armi</Italian>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -1,3 +1,10 @@
class Extended_PreStart_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_preStart));
};
};
class Extended_PreInit_EventHandlers { class Extended_PreInit_EventHandlers {
class ADDON { class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_preInit)); init = QUOTE(call COMPILE_FILE(XEH_preInit));
@ -12,7 +19,9 @@ class Extended_PostInit_EventHandlers {
class Extended_Killed_EventHandlers { class Extended_Killed_EventHandlers {
class All { class All {
init = QUOTE(call FUNC(handleDestroyed)); class ADDON {
serverKilled = QUOTE(call FUNC(handleDestroyed));
};
}; };
}; };
@ -93,4 +102,9 @@ class Extended_InitPost_EventHandlers {
init = QUOTE(_this call DFUNC(initObject)); init = QUOTE(_this call DFUNC(initObject));
}; };
}; };
class Land_PortableLight_single_F {
class ADDON {
init = QUOTE(_this call DFUNC(initObject));
};
};
}; };

View File

@ -1,5 +1,9 @@
class CfgVehicles { class CfgVehicles {
class ACE_Module; class Logic;
class Module_F: Logic {
class ModuleDescription;
};
class ACE_Module: Module_F {};
class ACE_moduleCargoSettings: ACE_Module { class ACE_moduleCargoSettings: ACE_Module {
scope = 2; scope = 2;
displayName = CSTRING(SettingsModule_DisplayName); displayName = CSTRING(SettingsModule_DisplayName);
@ -26,6 +30,33 @@ class CfgVehicles {
sync[] = {}; sync[] = {};
}; };
}; };
class GVAR(makeLoadable): ACE_Module {
scope = 2;
displayName = CSTRING(makeLoadable_displayName);
icon = QUOTE(PATHTOF(UI\Icon_Module_makeLoadable_ca.paa));
category = "ACE_Logistics";
function = QFUNC(moduleMakeLoadable);
isGlobal = 1;
isTriggerActivated = 0;
author = ECSTRING(common,ACETeam);
class Arguments {
class canLoad {
displayName = CSTRING(makeLoadable_displayName);
description = CSTRING(MakeLoadable_description);
typeName = "BOOL";
defaultValue = 1;
};
class setSize {
displayName = CSTRING(makeLoadable_setSize_displayName);
typeName = "NUMBER";
defaultValue = 1;
};
};
class ModuleDescription: ModuleDescription {
description = CSTRING(makeLoadable_description);
sync[] = {"AnyStaticObject"};
};
};
class LandVehicle; class LandVehicle;
class Car: LandVehicle { class Car: LandVehicle {
@ -178,7 +209,7 @@ class CfgVehicles {
GVAR(space) = 0; GVAR(space) = 0;
GVAR(hasCargo) = 0; GVAR(hasCargo) = 0;
}; };
// boats // boats
class Ship; class Ship;
class Ship_F: Ship { class Ship_F: Ship {
@ -237,6 +268,13 @@ class CfgVehicles {
GVAR(size) = 6; 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 // objects
class RoadCone_F: ThingX { class RoadCone_F: ThingX {
GVAR(size) = 1; GVAR(size) = 1;
@ -245,7 +283,7 @@ class CfgVehicles {
class RoadBarrier_F: RoadCone_F { class RoadBarrier_F: RoadCone_F {
GVAR(size) = 2; GVAR(size) = 2;
}; };
class Scrapyard_base_F; class Scrapyard_base_F;
class Land_PaperBox_closed_F: Scrapyard_base_F { class Land_PaperBox_closed_F: Scrapyard_base_F {
@ -454,4 +492,10 @@ class CfgVehicles {
}; };
}; };
}; };
class Lamps_base_F;
class Land_PortableLight_single_F: Lamps_base_F {
GVAR(size) = 1;
GVAR(canLoad) = 1;
};
}; };

Binary file not shown.

20
addons/cargo/XEH_PREP.hpp Normal file
View File

@ -0,0 +1,20 @@
PREP(addCargoItem);
PREP(canLoad);
PREP(canLoadItemIn);
PREP(canUnloadItem);
PREP(findNearestVehicle);
PREP(getCargoSpaceLeft);
PREP(getSizeItem);
PREP(handleDestroyed);
PREP(initObject);
PREP(initVehicle);
PREP(loadItem);
PREP(makeLoadable);
PREP(moduleMakeLoadable);
PREP(moduleSettings);
PREP(onMenuOpen);
PREP(startLoadIn);
PREP(startUnload);
PREP(unloadItem);
PREP(validateCargoSpace);

View File

@ -4,14 +4,14 @@
["LoadCargo", { ["LoadCargo", {
(_this select 0) params ["_item","_vehicle"]; (_this select 0) params ["_item","_vehicle"];
private ["_loaded", "_hint", "_itemName", "_vehicleName"]; TRACE_2("LoadCargo EH",_item,_vehicle);
_loaded = [_item, _vehicle] call FUNC(loadItem); private _loaded = [_item, _vehicle] call FUNC(loadItem);
// Show hint as feedback // Show hint as feedback
_hint = [LSTRING(LoadingFailed), LSTRING(LoadedItem)] select _loaded; private _hint = [LSTRING(LoadingFailed), LSTRING(LoadedItem)] select _loaded;
_itemName = getText (configFile >> "CfgVehicles" >> typeOf _item >> "displayName"); private _itemName = getText (configFile >> "CfgVehicles" >> typeOf _item >> "displayName");
_vehicleName = getText (configFile >> "CfgVehicles" >> typeOf _vehicle >> "displayName"); private _vehicleName = getText (configFile >> "CfgVehicles" >> typeOf _vehicle >> "displayName");
["displayTextStructured", [[_hint, _itemName, _vehicleName], 3.0]] call EFUNC(common,localEvent); ["displayTextStructured", [[_hint, _itemName, _vehicleName], 3.0]] call EFUNC(common,localEvent);
@ -22,17 +22,17 @@
}] call EFUNC(common,addEventHandler); }] call EFUNC(common,addEventHandler);
["UnloadCargo", { ["UnloadCargo", {
(_this select 0) params ["_item","_vehicle"]; (_this select 0) params ["_item","_vehicle", ["_unloader", objNull]];
private ["_unloaded", "_itemClass", "_hint", "_itemName", "_vehicleName"]; TRACE_3("UnloadCargo EH",_item,_vehicle,_unloader);
private _unloaded = [_item, _vehicle, _unloader] call FUNC(unloadItem); //returns true if sucessful
_unloaded = [_item, _vehicle] call FUNC(unloadItem); private _itemClass = if (_item isEqualType "") then {_item} else {typeOf _item};
_itemClass = if (_item isEqualType "") then {_item} else {typeOf _item};
// Show hint as feedback // Show hint as feedback
_hint = [LSTRING(UnloadingFailed), LSTRING(UnloadedItem)] select _unloaded; private _hint = [LSTRING(UnloadingFailed), LSTRING(UnloadedItem)] select _unloaded;
_itemName = getText (configFile >> "CfgVehicles" >> _itemClass >> "displayName"); private _itemName = getText (configFile >> "CfgVehicles" >> _itemClass >> "displayName");
_vehicleName = getText (configFile >> "CfgVehicles" >> typeOf _vehicle >> "displayName"); private _vehicleName = getText (configFile >> "CfgVehicles" >> typeOf _vehicle >> "displayName");
["displayTextStructured", [[_hint, _itemName, _vehicleName], 3.0]] call EFUNC(common,localEvent); ["displayTextStructured", [[_hint, _itemName, _vehicleName], 3.0]] call EFUNC(common,localEvent);

View File

@ -2,24 +2,9 @@
ADDON = false; ADDON = false;
PREP(addCargoItem); #include "XEH_PREP.hpp"
PREP(canLoad);
PREP(canLoadItemIn);
PREP(canUnloadItem);
PREP(findNearestVehicle);
PREP(getCargoSpaceLeft);
PREP(getSizeItem);
PREP(handleDestroyed);
PREP(initObject);
PREP(initVehicle);
PREP(loadItem);
PREP(moduleSettings);
PREP(onMenuOpen);
PREP(startLoadIn);
PREP(startUnload);
PREP(unloadItem);
PREP(validateCargoSpace);
GVAR(initializedItemClasses) = []; GVAR(initializedItemClasses) = [];
GVAR(initializedVehicleClasses) = [];
ADDON = true; ADDON = true;

View File

@ -0,0 +1,3 @@
#include "script_component.hpp"
#include "XEH_PREP.hpp"

View File

@ -18,7 +18,7 @@
*/ */
#include "script_component.hpp" #include "script_component.hpp"
params ["_itemClass", "_vehicle", ["_amount", 1], ["_showHint", false, [false]] ]; params ["_itemClass", "_vehicle", ["_amount", 1], ["_showHint", false, [false]]];
TRACE_3("params",_itemClass,_vehicle,_amount); TRACE_3("params",_itemClass,_vehicle,_amount);
for "_i" from 1 to _amount do { for "_i" from 1 to _amount do {

View File

@ -17,11 +17,11 @@
#include "script_component.hpp" #include "script_component.hpp"
params ["_player", "_object"]; params ["_player", "_object"];
TRACE_2("params",_player,_object);
if (!([_player, _object, []] call EFUNC(common,canInteractWith))) exitWith {false}; if (!([_player, _object, []] call EFUNC(common,canInteractWith))) exitWith {false};
private ["_nearestVehicle"]; private _nearestVehicle = [_player] call FUNC(findNearestVehicle);
_nearestVehicle = [_player] call FUNC(findNearestVehicle);
if (_nearestVehicle isKindOf "Cargo_Base_F" || isNull _nearestVehicle) then { if (_nearestVehicle isKindOf "Cargo_Base_F" || isNull _nearestVehicle) then {
{ {

View File

@ -18,11 +18,10 @@
params [["_item", "", [objNull,""]], "_vehicle"]; params [["_item", "", [objNull,""]], "_vehicle"];
if (speed _vehicle > 1 || (((getPos _vehicle) select 2) > 3)) exitWith {false}; if (speed _vehicle > 1 || {((getPos _vehicle) select 2) > 3}) exitWith {TRACE_1("vehicle not stable",_vehicle); false};
private ["_itemSize", "_validItem"];
_itemSize = [_item] call FUNC(getSizeItem);
private _itemSize = [_item] call FUNC(getSizeItem);
private _validItem = false;
if (_item isEqualType "") then { if (_item isEqualType "") then {
_validItem = _validItem =
isClass (configFile >> "CfgVehicles" >> _item) && isClass (configFile >> "CfgVehicles" >> _item) &&

View File

@ -5,6 +5,7 @@
* Arguments: * Arguments:
* 0: loaded Object <OBJECT> * 0: loaded Object <OBJECT>
* 1: Object <OBJECT> * 1: Object <OBJECT>
* 2: Unloader (player) <OPTIONAL><OBJECT>
* *
* Return value: * Return value:
* Can be unloaded <BOOL> * Can be unloaded <BOOL>
@ -16,30 +17,14 @@
*/ */
#include "script_component.hpp" #include "script_component.hpp"
params ["_item", "_vehicle"]; params ["_item", "_vehicle", ["_unloader", objNull]];
private ["_loaded", "_itemClass", "_validVehiclestate", "_emptyPos"]; TRACE_2("params",_item,_vehicle);
_loaded = _vehicle getVariable [QGVAR(loaded), []]; private _loaded = _vehicle getVariable [QGVAR(loaded), []];
if !(_item in _loaded) exitWith {false}; if !(_item in _loaded) exitWith {false};
_itemClass = if (_item isEqualType "") then {_item} else {typeOf _item}; private _itemClass = if (_item isEqualType "") then {_item} else {typeOf _item};
_validVehiclestate = true; private _emptyPos = [_vehicle, _itemClass, _unloader] call EFUNC(common,findUnloadPosition);
_emptyPos = [];
if (_vehicle isKindOf "Ship" ) then {
if !(speed _vehicle <1 && {(((getPosATL _vehicle) select 2) < 2)}) then {_validVehiclestate = false};
_emptyPos = ((getPosASL _vehicle) call EFUNC(common,ASLtoPosition) findEmptyPosition [0, 15, _itemClass]); // TODO: if spot is underwater pick another spot.
} else {
if (_vehicle isKindOf "Air" ) then {
if !(speed _vehicle <1 && {isTouchingGround _vehicle}) then {_validVehiclestate = false};
_emptyPos = (getPosASL _vehicle) call EFUNC(common,ASLtoPosition);
_emptyPos = [(_emptyPos select 0) + random(5), (_emptyPos select 1) + random(5), _emptyPos select 2 ];
} else {
if !(speed _vehicle <1 && {(((getPosATL _vehicle) select 2) < 2)}) then {_validVehiclestate = false};
_emptyPos = ((getPosASL _vehicle) call EFUNC(common,ASLtoPosition) findEmptyPosition [0, 15, _itemClass]);
};
};
if (!_validVehiclestate) exitWith {false}; (count _emptyPos) == 3
(count _emptyPos != 0)

View File

@ -15,23 +15,21 @@
*/ */
#include "script_component.hpp" #include "script_component.hpp"
private ["_loadCar", "_loadHelicopter", "_loadTank", "_loadShip", "_loadContainer"];
params ["_unit"]; params ["_unit"];
_loadCar = nearestObject [_unit, "car"]; private _loadCar = nearestObject [_unit, "car"];
if (_unit distance _loadCar <= MAX_LOAD_DISTANCE) exitWith {_loadCar}; if (_unit distance _loadCar <= MAX_LOAD_DISTANCE) exitWith {_loadCar};
_loadHelicopter = nearestObject [_unit, "air"]; private _loadHelicopter = nearestObject [_unit, "air"];
if (_unit distance _loadHelicopter <= MAX_LOAD_DISTANCE) exitWith {_loadHelicopter}; if (_unit distance _loadHelicopter <= MAX_LOAD_DISTANCE) exitWith {_loadHelicopter};
_loadTank = nearestObject [_unit, "tank"]; private _loadTank = nearestObject [_unit, "tank"];
if (_unit distance _loadTank <= MAX_LOAD_DISTANCE) exitWith {_loadTank}; if (_unit distance _loadTank <= MAX_LOAD_DISTANCE) exitWith {_loadTank};
_loadShip = nearestObject [_unit, "ship"]; private _loadShip = nearestObject [_unit, "ship"];
if (_unit distance _loadShip <= MAX_LOAD_DISTANCE) exitWith {_loadShip}; if (_unit distance _loadShip <= MAX_LOAD_DISTANCE) exitWith {_loadShip};
_loadContainer = nearestObject [_unit,"Cargo_base_F"]; private _loadContainer = nearestObject [_unit,"Cargo_base_F"];
if (_unit distance _loadContainer <= MAX_LOAD_DISTANCE) exitWith {_loadContainer}; if (_unit distance _loadContainer <= MAX_LOAD_DISTANCE) exitWith {_loadContainer};
objNull objNull

View File

@ -16,5 +16,6 @@
#include "script_component.hpp" #include "script_component.hpp"
params ["_object"]; params ["_object"];
// TRACE_1("params",_object);
_object getVariable [QGVAR(space), getNumber (configFile >> "CfgVehicles" >> typeOf _object >> QGVAR(space))] _object getVariable [QGVAR(space), getNumber (configFile >> "CfgVehicles" >> typeOf _object >> QGVAR(space))]

View File

@ -16,22 +16,23 @@
#include "script_component.hpp" #include "script_component.hpp"
params ["_item"]; params ["_item"];
private ["_isVirtual","_itemClass","_config"];
scopeName "return"; scopeName "return";
_isVirtual = (_item isEqualType ""); private _isVirtual = (_item isEqualType "");
_itemClass = if (_isVirtual) then {_item} else {typeOf _item}; private _itemClass = if (_isVirtual) then {_item} else {typeOf _item};
_config = (configFile >> "CfgVehicles" >> _itemClass >> QGVAR(size)); private _config = (configFile >> "CfgVehicles" >> _itemClass >> QGVAR(size));
if (_isVirtual) then { if (_isVirtual) then {
if (isNumber _config) then { if (isNumber _config) then {
(getNumber _config) breakOut "return"; (getNumber _config) breakOut "return";
}; };
} else { } else {
_config = (configFile >> "CfgVehicles" >> typeOf _item >> QGVAR(size)); if (!isNil {_item getVariable QGVAR(size)}) then {
(_item getVariable QGVAR(size)) breakOut "return";
};
if (isNumber _config) then { if (isNumber _config) then {
(_item getVariable [QGVAR(size), getNumber _config]) breakOut "return"; (getNumber _config) breakOut "return";
}; };
}; };

View File

@ -1,6 +1,6 @@
/* /*
* Author: Glowbal * Author: Glowbal
* Handle object being destroyed. * Handle object being destroyed. Only runs on server.
* *
* Arguments: * Arguments:
* 0: Object <OBJECT> * 0: Object <OBJECT>
@ -16,10 +16,9 @@
#include "script_component.hpp" #include "script_component.hpp"
params ["_vehicle"]; params ["_vehicle"];
TRACE_1("params",_vehicle);
private["_loaded"]; private _loaded = _vehicle getVariable [QGVAR(loaded), []];
_loaded = _vehicle getVariable [QGVAR(loaded), []];
if (_loaded isEqualTo []) exitWith {}; if (_loaded isEqualTo []) exitWith {};
{ {
@ -27,6 +26,7 @@ if (_loaded isEqualTo []) exitWith {};
if (_x isEqualType objNull) then { if (_x isEqualType objNull) then {
deleteVehicle _x; deleteVehicle _x;
}; };
nil
} count _loaded; } count _loaded;
[_vehicle] call FUNC(validateCargoSpace); [_vehicle] call FUNC(validateCargoSpace);

View File

@ -16,15 +16,31 @@
#include "script_component.hpp" #include "script_component.hpp"
params ["_object"]; params ["_object"];
private _type = typeOf _object;
TRACE_2("params",_object,_type);
if (getNumber (configFile >> "CfgVehicles" >> typeOf _object >> QGVAR(canLoad)) != 1) exitWith {}; if ((_object getVariable [QGVAR(canLoad), getNumber (configFile >> "CfgVehicles" >> _type >> QGVAR(canLoad))]) != 1) exitWith {};
private ["_type", "_action"];
_type = typeOf _object;
// do nothing if the class is already initialized // do nothing if the class is already initialized
if (_type in GVAR(initializedItemClasses)) exitWith {}; if (_type in GVAR(initializedItemClasses)) exitWith {};
GVAR(initializedItemClasses) pushBack _type; GVAR(initializedItemClasses) pushBack _type;
_action = [QGVAR(load), localize LSTRING(loadObject), QUOTE(PATHTOF(UI\Icon_load.paa)), {[_player, _target] call FUNC(startLoadIn)}, {GVAR(enable) && {[_player, _target] call FUNC(canLoad)}}] call EFUNC(interact_menu,createAction); TRACE_1("Adding load cargo action to class", _type);
private _condition = {
GVAR(enable) &&
{(_target getVariable [QGVAR(canLoad), getNumber (configFile >> "CfgVehicles" >> (typeOf _target) >> QGVAR(canLoad))]) == 1} &&
{locked _target < 2} &&
{alive _target} &&
{[_player, _target, []] call EFUNC(common,canInteractWith)}
};
private _statement = {
params ["_target", "_player"];
[_player, _target] call FUNC(startLoadIn);
};
private _text = localize LSTRING(loadObject);
private _icon = QUOTE(PATHTOF(UI\Icon_load.paa));
private _action = [QGVAR(load), _text, _icon, _statement, _condition] call EFUNC(interact_menu,createAction);
[_type, 0, ["ACE_MainActions"], _action] call EFUNC(interact_menu,addActionToClass); [_type, 0, ["ACE_MainActions"], _action] call EFUNC(interact_menu,addActionToClass);

View File

@ -18,9 +18,7 @@
params ["_vehicle"]; params ["_vehicle"];
TRACE_1("params", _vehicle); TRACE_1("params", _vehicle);
private ["_type", "_initializedClasses"]; private _type = typeOf _vehicle;
_type = typeOf _vehicle;
_initializedClasses = GETMVAR(GVAR(initializedClasses),[]);
if (isServer) then { if (isServer) then {
{ {
@ -35,21 +33,24 @@ if (isServer) then {
}; };
// do nothing if the class is already initialized // do nothing if the class is already initialized
if (_type in _initializedClasses) exitWith {}; if (_type in GVAR(initializedVehicleClasses)) exitWith {};
// set class as initialized // set class as initialized
_initializedClasses pushBack _type; GVAR(initializedVehicleClasses) pushBack _type;
SETMVAR(GVAR(initializedClasses),_initializedClasses);
if (!hasInterface) exitWith {};
if (getNumber (configFile >> "CfgVehicles" >> _type >> QGVAR(hasCargo)) != 1) exitWith {}; if (getNumber (configFile >> "CfgVehicles" >> _type >> QGVAR(hasCargo)) != 1) exitWith {};
private ["_text", "_condition", "_statement", "_icon", "_action"]; TRACE_1("Adding unload cargo action to class", _type);
_condition = {
params ["_target", "_player"];
GVAR(enable) && {locked _target < 2} && {alive _target} && {[_player, _target, []] call EFUNC(common,canInteractWith)}
};
_text = localize LSTRING(openMenu);
_statement = {GVAR(interactionVehicle) = _target; createDialog QGVAR(menu);};
_icon = "";
_action = [QGVAR(openMenu), _text, _icon, _statement, _condition] call EFUNC(interact_menu,createAction); private _condition = {
GVAR(enable) && {locked _target < 2} && {alive _target} && {[_player, _target, ["isNotSwimming"]] call EFUNC(common,canInteractWith)}
};
private _statement = {
GVAR(interactionVehicle) = _target;
createDialog QGVAR(menu);
};
private _text = localize LSTRING(openMenu);
private _icon = "";
private _action = [QGVAR(openMenu), _text, _icon, _statement, _condition] call EFUNC(interact_menu,createAction);
[_type, 0, ["ACE_MainActions"], _action] call EFUNC(interact_menu,addActionToClass); [_type, 0, ["ACE_MainActions"], _action] call EFUNC(interact_menu,addActionToClass);

View File

@ -6,7 +6,6 @@
* Arguments: * Arguments:
* 0: Item <OBJECT or STRING> * 0: Item <OBJECT or STRING>
* 1: Vehicle <OBJECT> * 1: Vehicle <OBJECT>
* 2: Show Hint <BOOL> (default: true)
* *
* Return value: * Return value:
* Object loaded <BOOL> * Object loaded <BOOL>
@ -19,18 +18,18 @@
#include "script_component.hpp" #include "script_component.hpp"
params [["_item","",[objNull,""]], ["_vehicle",objNull,[objNull]]]; params [["_item","",[objNull,""]], ["_vehicle",objNull,[objNull]]];
private ["_loaded", "_space", "_itemSize"]; TRACE_2("params",_item,_vehicle);
if !([_item, _vehicle] call FUNC(canLoadItemIn)) exitWith {false}; if !([_item, _vehicle] call FUNC(canLoadItemIn)) exitWith {TRACE_2("cannot load",_item,_vehicle); false};
_loaded = _vehicle getVariable [QGVAR(loaded), []]; private _loaded = _vehicle getVariable [QGVAR(loaded), []];
_loaded pushBack _item; _loaded pushBack _item;
_vehicle setVariable [QGVAR(loaded), _loaded, true]; _vehicle setVariable [QGVAR(loaded), _loaded, true];
TRACE_1("added to loaded array",_loaded); TRACE_1("added to loaded array",_loaded);
_space = [_vehicle] call FUNC(getCargoSpaceLeft); private _space = [_vehicle] call FUNC(getCargoSpaceLeft);
_itemSize = [_item] call FUNC(getSizeItem); private _itemSize = [_item] call FUNC(getSizeItem);
_vehicle setVariable [QGVAR(space), _space - _itemSize, true]; _vehicle setVariable [QGVAR(space), _space - _itemSize, true];
if (_item isEqualType objNull) then { if (_item isEqualType objNull) then {

View File

@ -0,0 +1,47 @@
/*
* Author: PabstMirror
* Makes any object loadable. Needs to be called on all machines.
*
* Arguments:
* 0: Object <OBJECT>
* 1: Set as loadable (default: true) <BOOL><SCALAR>
* 2: Size. (default: 1) <NUMBER>
*
* Return value:
* None
*
* Example:
* [cursorTarget, true, 1] call ace_cargo_fnc_makeLoadable
*
* Public: Yes
*/
#include "script_component.hpp"
params [["_object", objNull, [objNull]], ["_canLoad", true, [false, 0]], ["_setSize", 1, [0]]];
TRACE_3("params",_object,_canLoad,_setSize);
if (isNull _object) exitWith {TRACE_1("null",_object);};
private _type = typeOf _object;
private _cfgCanLoad = getNumber (configFile >> "CfgVehicles" >> _type >> QGVAR(canLoad));
private _curSize = [_object] call FUNC(getSizeItem);
_canLoad = [0, 1] select _canLoad; //convert true/false to scalar
if ((_canLoad == 1) && {_setSize <= 0}) exitWith {
ACE_LOGERROR("ace_cargo_fnc_makeLoadable (size <= 0) when making loadable");
};
TRACE_2("setVar if different from config",_canLoad,_cfgCanLoad);
if (_canLoad != _cfgCanLoad) then {
_object setVariable [QGVAR(canLoad), _canLoad];
};
TRACE_2("setVar if different from config",_setSize,_curSize);
if (_setSize != _curSize) then {
_object setVariable [QGVAR(size), _setSize];
};
//Add the load actions to the object class if not already added
[_object] call FUNC(initObject);
nil

View File

@ -0,0 +1,34 @@
/*
* Author: PabstMirror
* Module to make an object loadable.
*
* Arguments:
* 0: The module logic <OBJECT>
* 1: Synchronized units <ARRAY>
* 2: Activated <BOOL>
*
* Return Value:
* None
*
* Example:
* [logic, [box], true] call ace_cargo_fnc_moduleMakeLoadable
*
* Public: No
*/
#include "script_component.hpp"
params ["_logic", "_objects", "_activated"];
TRACE_3("params",_logic,_objects,_activated);
if ((isNull _logic) || {!_activated}) exitWith {};
if (_objects isEqualTo []) exitWith {
ACE_LOGWARNING_1("ace_cargo_fnc_moduleMakeLoadable has no synced objects [%1]", _logic);
};
private _canLoad = _logic getVariable ["canLoad", true];
private _setSize = _logic getVariable ["setSize", 1];
TRACE_2("settings",_canLoad,_setSize);
{
[_x, _canLoad, _setSize] call FUNC(makeLoadable);
} forEach _objects;

View File

@ -19,7 +19,7 @@
if (!isServer) exitWith {}; if (!isServer) exitWith {};
params ["_logic", "_units", "_activated"]; params ["_logic", "", "_activated"];
if (!_activated) exitWith {}; if (!_activated) exitWith {};

View File

@ -22,25 +22,24 @@ params ["_display"];
uiNamespace setVariable [QGVAR(menuDisplay), _display]; uiNamespace setVariable [QGVAR(menuDisplay), _display];
[{ [{
private ["_display","_loaded", "_ctrl", "_class", "_label"];
disableSerialization; disableSerialization;
_display = uiNamespace getVariable QGVAR(menuDisplay); private _display = uiNamespace getVariable QGVAR(menuDisplay);
if (isnil "_display") exitWith { if (isnil "_display") exitWith {
[_this select 1] call CBA_fnc_removePerFrameHandler; [_this select 1] call CBA_fnc_removePerFrameHandler;
}; };
if (isNull GVAR(interactionVehicle) || ACE_player distance GVAR(interactionVehicle) >= 10) exitWith { if (isNull GVAR(interactionVehicle) || {ACE_player distance GVAR(interactionVehicle) >= 10}) exitWith {
closeDialog 0; closeDialog 0;
[_this select 1] call CBA_fnc_removePerFrameHandler; [_this select 1] call CBA_fnc_removePerFrameHandler;
}; };
_loaded = GVAR(interactionVehicle) getVariable [QGVAR(loaded), []]; private _loaded = GVAR(interactionVehicle) getVariable [QGVAR(loaded), []];
_ctrl = _display displayCtrl 100; private _ctrl = _display displayCtrl 100;
_label = _display displayCtrl 2; private _label = _display displayCtrl 2;
lbClear _ctrl; lbClear _ctrl;
{ {
_class = if (_x isEqualType "") then {_x} else {typeOf _x}; private _class = if (_x isEqualType "") then {_x} else {typeOf _x};
_ctrl lbAdd (getText(configfile >> "CfgVehicles" >> _class >> "displayName")); _ctrl lbAdd (getText(configfile >> "CfgVehicles" >> _class >> "displayName"));
true true
} count _loaded; } count _loaded;

View File

@ -3,38 +3,46 @@
* Start load item. * Start load item.
* *
* Arguments: * Arguments:
* 0: Object <OBJECT> * 0: Player <OBJECT>
* 1: Object <OBJECT>
* *
* Return value: * Return value:
* Object loaded <BOOL> * Load ProgressBar Started <BOOL>
* *
* Example: * Example:
* [object] call ace_cargo_fnc_starLoadIn * [player, cursorTarget] call ace_cargo_fnc_startLoadIn
* *
* Public: No * Public: No
*/ */
#include "script_component.hpp" #include "script_component.hpp"
params ["_player", "_object"]; params ["_player", "_object"];
private ["_vehicle", "_size", "_displayName"]; TRACE_2("params",_player,_object);
_vehicle = [_player] call FUNC(findNearestVehicle); private _vehicle = [_player] call FUNC(findNearestVehicle);
if (isNull _vehicle || _vehicle isKindOf "Cargo_Base_F") then { if ((isNull _vehicle) || {_vehicle isKindOf "Cargo_Base_F"}) then {
{ {
if ([_object, _x] call FUNC(canLoadItemIn)) exitWith {_vehicle = _x}; if ([_object, _x] call FUNC(canLoadItemIn)) exitWith {_vehicle = _x};
} forEach (nearestObjects [_player, ["Cargo_base_F", "Land_PaperBox_closed_F"], MAX_LOAD_DISTANCE]); } forEach (nearestObjects [_player, ["Cargo_base_F", "Land_PaperBox_closed_F"], MAX_LOAD_DISTANCE]);
}; };
if (isNull _vehicle) exitWith {false}; if (isNull _vehicle) exitWith {
TRACE_3("Could not find vehicle",_player,_object,_vehicle);
false
};
private _return = false;
// Start progress bar // Start progress bar
if ([_object, _vehicle] call FUNC(canLoadItemIn)) then { if ([_object, _vehicle] call FUNC(canLoadItemIn)) then {
_size = [_object] call FUNC(getSizeItem); private _size = [_object] call FUNC(getSizeItem);
[5 * _size, [_object,_vehicle], "LoadCargo", {}, localize LSTRING(LoadingItem)] call EFUNC(common,progressBar); [5 * _size, [_object,_vehicle], "LoadCargo", {}, localize LSTRING(LoadingItem)] call EFUNC(common,progressBar);
_return = true;
} else { } else {
_displayName = getText (configFile >> "CfgVehicles" >> typeOf _object >> "displayName"); private _displayName = getText (configFile >> "CfgVehicles" >> typeOf _object >> "displayName");
["displayTextStructured", [[LSTRING(LoadingFailed), _displayName], 3.0]] call EFUNC(common,localEvent); ["displayTextStructured", [[LSTRING(LoadingFailed), _displayName], 3.0]] call EFUNC(common,localEvent);
}; };
_return

View File

@ -15,34 +15,29 @@
*/ */
#include "script_component.hpp" #include "script_component.hpp"
private ["_display", "_loaded", "_ctrl", "_selected", "_item"];
disableSerialization; disableSerialization;
_display = uiNamespace getVariable QGVAR(menuDisplay); private _display = uiNamespace getVariable QGVAR(menuDisplay);
if (isNil "_display") exitWith {}; if (isNil "_display") exitWith {};
_loaded = GVAR(interactionVehicle) getVariable [QGVAR(loaded), []]; private _loaded = GVAR(interactionVehicle) getVariable [QGVAR(loaded), []];
if (count _loaded == 0) exitWith {}; if (_loaded isEqualTo []) exitWith {};
_ctrl = _display displayCtrl 100; private _ctrl = _display displayCtrl 100;
_selected = (lbCurSel _ctrl) max 0; private _selected = (lbCurSel _ctrl) max 0;
if (count _loaded <= _selected) exitWith {}; if (count _loaded <= _selected) exitWith {};
_item = _loaded select _selected; private _item = _loaded select _selected; //This can be an object or a classname string
// Start progress bar // Start progress bar
private ["_size", "_itemClass", "_displayName"]; if ([_item, GVAR(interactionVehicle), ACE_player] call FUNC(canUnloadItem)) then {
private _size = [_item] call FUNC(getSizeItem);
if ([_item, GVAR(interactionVehicle)] call FUNC(canUnloadItem)) then { [5 * _size, [_item, GVAR(interactionVehicle), ACE_player], "UnloadCargo", {}, localize LSTRING(UnloadingItem), {true}, ["isNotSwimming"]] call EFUNC(common,progressBar);
_size = [_item] call FUNC(getSizeItem);
[5 * _size, [_item, GVAR(interactionVehicle)], "UnloadCargo", {}, localize LSTRING(UnloadingItem)] call EFUNC(common,progressBar);
} else { } else {
_itemClass = if (_item isEqualType "") then {_item} else {typeOf _item}; private _itemClass = if (_item isEqualType "") then {_item} else {typeOf _item};
_displayName = getText (configFile >> "CfgVehicles" >> _itemClass >> "displayName"); private _displayName = getText (configFile >> "CfgVehicles" >> _itemClass >> "displayName");
["displayTextStructured", [[LSTRING(UnloadingFailed), _displayName], 3.0]] call EFUNC(common,localEvent); ["displayTextStructured", [[LSTRING(UnloadingFailed), _displayName], 3.0]] call EFUNC(common,localEvent);
}; };

View File

@ -16,53 +16,45 @@
*/ */
#include "script_component.hpp" #include "script_component.hpp"
params ["_item", "_vehicle"]; params ["_item", "_vehicle", ["_unloader", objNull]];
private ["_loaded", "_space", "_itemSize", "_emptyPos", "_validVehiclestate"]; TRACE_3("params",_item,_vehicle,_unloader);
if !([_item, _vehicle] call FUNC(canUnloadItem)) exitWith { private _itemClass = if (_item isEqualType "") then {_item} else {typeOf _item};
//This covers testing vehicle stability and finding a safe position
private _emptyPosAGL = [_vehicle, _itemClass, _unloader] call EFUNC(common,findUnloadPosition);
TRACE_1("findUnloadPosition",_emptyPosAGL);
if ((count _emptyPosAGL) != 3) exitWith {
TRACE_4("Could not find unload pos",_vehicle,getPosASL _vehicle,isTouchingGround _vehicle,speed _vehicle);
if ((!isNull _unloader) && {_unloader == ACE_player}) then {
//display text saying there are no safe places to exit the vehicle
["displayTextStructured", [localize ELSTRING(common,NoRoomToUnload)]] call EFUNC(common,localEvent);
};
false false
}; };
_itemClass = if (_item isEqualType "") then {_item} else {typeOf _item}; private _loaded = _vehicle getVariable [QGVAR(loaded), []];
_validVehiclestate = true; if !(_item in _loaded) exitWith {
_emptyPos = []; ACE_LOGERROR_3("Tried to unload item [%1] not in vehicle[%2] cargo[%3]", _item, _vehicle, _loaded);
if (_vehicle isKindOf "Ship" ) then { false
if !(speed _vehicle <1 && {(((getPosATL _vehicle) select 2) < 2)}) then {_validVehiclestate = false};
TRACE_1("SHIP Ground Check", getPosATL _vehicle );
_emptyPos = ((getPosASL _vehicle) call EFUNC(common,ASLtoPosition) findEmptyPosition [0, 15, _itemClass]); // TODO: if spot is underwater pick another spot.
} else {
if (_vehicle isKindOf "Air" ) then {
if !(speed _vehicle <1 && {isTouchingGround _vehicle}) then {_validVehiclestate = false};
TRACE_1("Vehicle Ground Check", isTouchingGround _vehicle);
_emptyPos = (getPosASL _vehicle) call EFUNC(common,ASLtoPosition);
_emptyPos = [(_emptyPos select 0) + random(5), (_emptyPos select 1) + random(5), _emptyPos select 2 ];
} else {
if !(speed _vehicle <1 && {(((getPosATL _vehicle) select 2) < 2)}) then {_validVehiclestate = false};
TRACE_1("Vehicle Ground Check", isTouchingGround _vehicle);
_emptyPos = ((getPosASL _vehicle) call EFUNC(common,ASLtoPosition) findEmptyPosition [0, 13, _itemClass]);
};
}; };
TRACE_1("getPosASL Vehicle Check", getPosASL _vehicle);
if (!_validVehiclestate) exitWith {false};
if (count _emptyPos == 0) exitWith {false};
_loaded = _vehicle getVariable [QGVAR(loaded), []];
_loaded deleteAt (_loaded find _item); _loaded deleteAt (_loaded find _item);
_vehicle setVariable [QGVAR(loaded), _loaded, true]; _vehicle setVariable [QGVAR(loaded), _loaded, true];
_space = [_vehicle] call FUNC(getCargoSpaceLeft); private _space = [_vehicle] call FUNC(getCargoSpaceLeft);
_itemSize = [_item] call FUNC(getSizeItem); private _itemSize = [_item] call FUNC(getSizeItem);
_vehicle setVariable [QGVAR(space), (_space + _itemSize), true]; _vehicle setVariable [QGVAR(space), (_space + _itemSize), true];
if (_item isEqualType objNull) then { if (_item isEqualType objNull) then {
detach _item; detach _item;
_item setPosASL (_emptyPos call EFUNC(common,PositiontoASL)); _item setPosASL (AGLtoASL _emptyPosAGL);
["hideObjectGlobal", [_item, false]] call EFUNC(common,serverEvent); ["hideObjectGlobal", [_item, false]] call EFUNC(common,serverEvent);
} else { } else {
createVehicle [_item, _emptyPos, [], 0, ""]; private _newItem = createVehicle [_item, _emptyPosAGL, [], 0, ""];
_newItem setPosASL (AGLtoASL _emptyPosAGL);
}; };
true true

View File

@ -15,14 +15,13 @@
*/ */
#include "script_component.hpp" #include "script_component.hpp"
private ["_loaded", "_newLoaded", "_totalSpaceOccupied"];
params ["_vehicle"]; params ["_vehicle"];
TRACE_1("params",_vehicle);
_loaded = _vehicle getVariable [QGVAR(loaded), []]; private _loaded = _vehicle getVariable [QGVAR(loaded), []];
_newLoaded = []; private _newLoaded = [];
_totalSpaceOccupied = 0; private _totalSpaceOccupied = 0;
{ {
if ((_x isEqualType "") || {!isNull _x}) then { if ((_x isEqualType "") || {!isNull _x}) then {
_newLoaded pushback _x; _newLoaded pushback _x;

View File

@ -2,6 +2,9 @@
#include "\z\ace\addons\main\script_mod.hpp" #include "\z\ace\addons\main\script_mod.hpp"
// #define DEBUG_MODE_FULL // #define DEBUG_MODE_FULL
// #define DISABLE_COMPILE_CACHE
// #define CBA_DEBUG_SYNCHRONOUS
// #define ENABLE_PERFORMANCE_COUNTERS
#ifdef DEBUG_ENABLED_CARGO #ifdef DEBUG_ENABLED_CARGO
#define DEBUG_MODE_FULL #define DEBUG_MODE_FULL

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