mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Merge branch 'master' of https://github.com/acemod/ACE3 into delayUnconCaptiv
# Conflicts: # addons/medical/functions/fnc_setUnconscious.sqf
This commit is contained in:
commit
b2d2bec2cf
37
CONTRIBUTING.md → .github/CONTRIBUTING.md
vendored
37
CONTRIBUTING.md → .github/CONTRIBUTING.md
vendored
@ -2,7 +2,7 @@
|
||||
|
||||
## Before reporting
|
||||
|
||||
If you have found an issue with ACE3 please make sure that ACE3 is really the cause of the problem. To do this try to reproduce the issue with using only `@CBA_A3` and `@ace` on a newly created mission.
|
||||
If you have found an issue with ACE3 please make sure that ACE3 really is the cause of the problem. To do this try to reproduce the issue with using only `@CBA_A3` and `@ace` on a newly created mission.
|
||||
|
||||
Indicate if the issue appears on stable or development version. In case it is the development version, please also include the commit SHA-1 hash.
|
||||
|
||||
@ -14,38 +14,10 @@ Indicate if the issue appears on stable or development version. In case it is th
|
||||
|
||||
## Reporting the issue
|
||||
|
||||
Head over to the [ACE3 GitHub issue tracker](https://github.com/acemod/ACE3/issues) and press the [New issue](https://github.com/acemod/ACE3/issues/new) button in the top right corner. Add a descriptive title and copy the following issue template in to the text area:
|
||||
|
||||
```
|
||||
ACE3 Version: 3.x.x
|
||||
(indicate if stable or dev, if dev indicate the commit the version is based on)
|
||||
|
||||
**Mods:**
|
||||
* `@CBA_A3`
|
||||
* `@ace`
|
||||
|
||||
**Placed ACE3 Modules:**
|
||||
* *Add the list of modules you have placed on the map. Use 'None' if the error occurs without using any modules.*
|
||||
* You can also press the `Debug to` button in the ACE3 option menu (escape -> ACE3 options -> Debug to) and add a link (pastebin.com) to the results.
|
||||
|
||||
**Description:**
|
||||
* Add a detailed description of the error. This makes it easier for us to fix the issue.*
|
||||
|
||||
**Steps to reproduce:**
|
||||
* *Add the steps needed to reproduce the issue.*
|
||||
|
||||
**Where did the issue occur?**
|
||||
* A possible answer might be "Multiplayer", "Editor" or "Singleplayer"*
|
||||
|
||||
**RPT log file:**
|
||||
* Add a link (pastebin.com) to the client or server RPT file.*
|
||||
```
|
||||
Head over to the [ACE3 GitHub issue tracker](https://github.com/acemod/ACE3/issues) and press the [New issue](https://github.com/acemod/ACE3/issues/new) button in the top right corner. Add a descriptive title and complete the issue template.
|
||||
|
||||
A video of the issue might be helpful in resolving it faster.
|
||||
|
||||
GitHub uses [Markdown](http://daringfireball.net/projects/markdown/syntax) to style the output. If you want to know more about it (e.g. how to [turn text bold](https://help.github.com/articles/markdown-basics/#styling-text), how to denote [code blocks](https://help.github.com/articles/markdown-basics/#inline-formats) or [inline code](https://help.github.com/articles/markdown-basics/#multiple-lines)) have a look at the [GitHub Markdown Documentation](https://help.github.com/articles/github-flavored-markdown).
|
||||
|
||||
|
||||
# Feature Requests
|
||||
|
||||
## Background
|
||||
@ -57,8 +29,3 @@ Please refrain from making requests for any planned or existing features from ei
|
||||
In order to avoid duplicates and keep the issue tracker organized, we have created a common issue for [ACE3 Feature requests](https://github.com/acemod/ACE3/issues/414). Any and all relevant requests should be submitted there, where they will also get discussed and evaluated. Before adding a new one, make sure to check the previous entries from the thread and do a quick search for similar suggestions; please don't reiterate requests for features that had already been accepted for inclusion, or those which were disregarded earlier.
|
||||
|
||||
Following their approval, feature requests may be moved by moderators to a separate issue for further discussion.
|
||||
|
||||
# Regarding Pull Requests (PRs)
|
||||
- You want to help but don't know where to start? Check the wiki entry for [setting up the development environment](http://ace3mod.com/wiki/development/setting-up-the-development-environment.html)
|
||||
- [Make sure to respect the file structure](http://ace3mod.com/wiki/development/modularity-and-pbo-structure.html)
|
||||
- [Make sure to respect the coding guidelines](http://ace3mod.com/wiki/development/coding-guidelines.html)
|
25
.github/ISSUE_TEMPLATE.md
vendored
Normal file
25
.github/ISSUE_TEMPLATE.md
vendored
Normal 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
10
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal 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)
|
10
AUTHORS.txt
10
AUTHORS.txt
@ -14,7 +14,8 @@ Garth "L-H" de Wet <garthofhearts@gmail.com>
|
||||
Giallustio
|
||||
Glowbal
|
||||
Janus
|
||||
jokoho482 <jokoho482@gmail.com>`
|
||||
jokoho482 <jokoho482@gmail.com>
|
||||
Jonpas <jonpas33@gmail.com>
|
||||
Kieran
|
||||
NouberNou
|
||||
PabstMirror <pabstmirror@gmail.com>
|
||||
@ -39,6 +40,7 @@ Alganthe <alganthe@live.fr>
|
||||
Anthariel <Contact@storm-simulation.com>
|
||||
Arkhir <wonsz666@gmail.com >
|
||||
Asgar Serran <piechottaf@web.de>
|
||||
BaerMitUmlaut
|
||||
Bamse <bamsis@gmail.com>
|
||||
Bla1337
|
||||
BlackPixxel <blackpixxel96@gmail.com>
|
||||
@ -53,6 +55,7 @@ Coren <coren4@gmail.com>
|
||||
Crusty
|
||||
Dharma Bellamkonda <dharma.bellamkonda@gmail.com>
|
||||
Dimaslg <dimaslg@telecable.es>
|
||||
dixon13 <dixonbegay@gmail.com>
|
||||
Drill <drill87@gmail.com>
|
||||
Dudakov aka [OMCB]Kaban <dudakov.s@gmail.com>
|
||||
Dslyecxi <dslyecxi@gmail.com>
|
||||
@ -63,11 +66,13 @@ Falke75
|
||||
Ferenczi
|
||||
Ferenzi
|
||||
Filip Basara <filip.basara93@googlemail.com>
|
||||
fr89k <kaschitoku@web.de>
|
||||
FreeZbe <freeseb@gmail.com>
|
||||
geraldbolso1899
|
||||
Ghost
|
||||
Gianmarco Varriale (TeamNuke) <admin@forhost.org>
|
||||
GieNkoV <gienkov.grzegorz@gmail.com>
|
||||
GitHawk <githawk@gmx.net>
|
||||
gpgpgpgp
|
||||
Grzegorz
|
||||
Hamburger SV
|
||||
@ -75,7 +80,6 @@ Harakhti <shadowdragonphd@gmail.com>
|
||||
havena <silveredenis@gmail.com>
|
||||
Hawkins
|
||||
Head <brobergsebastian@gmail.com>
|
||||
Jonpas <jonpas33@gmail.com>
|
||||
Karneck <dschultz26@hotmail.com>
|
||||
Kavinsky <nmunozfernandez@gmail.com>
|
||||
Kllrt <kllrtik@gmail.com>
|
||||
@ -103,6 +107,7 @@ Robert Boklahánics <bokirobi@gmail.com>
|
||||
ruPaladin <happyworm24@rambler.ru>
|
||||
simon84 <badguy360th@gmail.com>
|
||||
Sniperwolf572 <tenga6@gmail.com>
|
||||
System98
|
||||
SzwedzikPL <szwedzikpl@gmail.com>
|
||||
Tachi <zaveruha007@gmail.com>
|
||||
Toaster <jonathan.pereira@gmail.com>
|
||||
@ -113,3 +118,4 @@ voiper
|
||||
VyMajoris(W-Cephei)<vycanismajoriscsa@gmail.com>
|
||||
Winter <simon@agius-muscat.net>
|
||||
zGuba
|
||||
Grey-Soldierman <gungamer101@hotmail.com>
|
||||
|
@ -1,12 +1,12 @@
|
||||
<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 align="center">
|
||||
<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 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">
|
||||
</a>
|
||||
<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
|
||||
- Realistic weapon overheating mechanic
|
||||
- Combat deafness (temporary loss of hearing) simulation
|
||||
- Improved ragdoll physics
|
||||
- Improved interactions for AARs and ammo bearers
|
||||
- Adjustable sniper scopes
|
||||
- No idle animation with lowered weapon
|
||||
|
Binary file not shown.
BIN
ace_medical.dll
BIN
ace_medical.dll
Binary file not shown.
@ -1,3 +1,10 @@
|
||||
|
||||
class Extended_PreStart_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preStart));
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_PreInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE( call COMPILE_FILE(XEH_preInit) );
|
||||
@ -9,11 +16,3 @@ class Extended_PostInit_EventHandlers {
|
||||
init = QUOTE( call COMPILE_FILE(XEH_postInit) );
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_FiredBIS_EventHandlers {
|
||||
class CAManBase {
|
||||
class ADDON {
|
||||
firedBIS = QUOTE(_this call FUNC(handleFired));
|
||||
};
|
||||
};
|
||||
};
|
14
addons/advanced_ballistics/XEH_PREP.hpp
Normal file
14
addons/advanced_ballistics/XEH_PREP.hpp
Normal 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);
|
@ -22,3 +22,19 @@ if (!GVAR(extensionAvailable)) exitWith {
|
||||
};
|
||||
*/
|
||||
[] call FUNC(initializeTerrainExtension);
|
||||
|
||||
if (!hasInterface) exitWith {};
|
||||
|
||||
["SettingsInitialized", {
|
||||
//If not enabled, dont't add PFEH
|
||||
if (!GVAR(enabled)) exitWith {};
|
||||
|
||||
// Register fire event handler
|
||||
["firedPlayer", DFUNC(handleFired)] call EFUNC(common,addEventHandler);
|
||||
["firedPlayerNonLocal", DFUNC(handleFired)] call EFUNC(common,addEventHandler);
|
||||
|
||||
}] call EFUNC(common,addEventHandler);
|
||||
|
||||
#ifdef DEBUG_MODE_FULL
|
||||
call FUNC(diagnoseWeapons);
|
||||
#endif
|
@ -2,16 +2,6 @@
|
||||
|
||||
ADDON = false;
|
||||
|
||||
PREP(calculateAmmoTemperatureVelocityShift);
|
||||
PREP(calculateAtmosphericCorrection);
|
||||
PREP(calculateBarrelLengthVelocityShift);
|
||||
PREP(calculateRetardation);
|
||||
PREP(calculateStabilityFactor);
|
||||
PREP(displayProtractor);
|
||||
PREP(handleFired);
|
||||
PREP(initializeTerrainExtension);
|
||||
PREP(initModuleSettings);
|
||||
PREP(readAmmoDataFromConfig);
|
||||
PREP(readWeaponDataFromConfig);
|
||||
PREP(handleFirePFH);
|
||||
#include "XEH_PREP.hpp"
|
||||
|
||||
ADDON = true;
|
||||
|
3
addons/advanced_ballistics/XEH_preStart.sqf
Normal file
3
addons/advanced_ballistics/XEH_preStart.sqf
Normal file
@ -0,0 +1,3 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
#include "XEH_PREP.hpp"
|
@ -22,6 +22,7 @@ private ["_muzzleVelocityTableCount", "_barrelLengthTableCount", "_lowerDataInde
|
||||
"_upperDataIndex", "_lowerBarrelLength", "_upperBarrelLength", "_lowerMuzzleVelocity",
|
||||
"_upperMuzzleVelocity", "_interpolationRatio"];
|
||||
params ["_barrelLength", "_muzzleVelocityTable", "_barrelLengthTable", "_muzzleVelocity"];
|
||||
TRACE_4("params",_barrelLength,_muzzleVelocityTable,_barrelLengthTable,_muzzleVelocity);
|
||||
|
||||
// If barrel length is not defined, then there is no point in calculating muzzle velocity
|
||||
if (_barrelLength == 0) exitWith { 0 };
|
||||
|
59
addons/advanced_ballistics/functions/fnc_diagnoseWeapons.sqf
Normal file
59
addons/advanced_ballistics/functions/fnc_diagnoseWeapons.sqf
Normal 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;
|
||||
};
|
||||
};
|
||||
};
|
@ -28,7 +28,7 @@ if (currentWeapon ACE_player != primaryWeapon ACE_player) exitWith { false };
|
||||
|
||||
2 cutText ["", "PLAIN"];
|
||||
EGVAR(weather,WindInfo) = false;
|
||||
0 cutText ["", "PLAIN"];
|
||||
(["RscWindIntuitive"] call BIS_fnc_rscLayer) cutText ["", "PLAIN"];
|
||||
GVAR(Protractor) = true;
|
||||
|
||||
[{
|
||||
|
@ -1,16 +1,10 @@
|
||||
/*
|
||||
* Author: Glowbal, Ruthberg
|
||||
*
|
||||
* Handles advanced ballistics for (BulletBase) projectiles
|
||||
* Handles advanced ballistics for (BulletBase) projectiles. Called from the unified fired EH only for players.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: unit - Object the event handler is assigned to <OBJECT>
|
||||
* 1: weapon - Fired weapon <STRING>
|
||||
* 2: muzzle - Muzzle that was used <STRING>
|
||||
* 3: mode - Current mode of the fired weapon <STRING>
|
||||
* 4: ammo - Ammo used <STRING>
|
||||
* 5: magazine - magazine name which was used <STRING>
|
||||
* 6: projectile - Object of the projectile that was shot <OBJECT>
|
||||
* None. Parameters inherited from EFUNC(common,firedEH)
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
@ -19,20 +13,16 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
// Early Quiting
|
||||
if (!hasInterface) exitWith {};
|
||||
if (!GVAR(enabled)) exitWith {};
|
||||
//IGNORE_PRIVATE_WARNING ["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile", "_vehicle", "_gunner", "_turret"];
|
||||
TRACE_10("firedEH:",_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile, _vehicle, _gunner, _turret);
|
||||
|
||||
// Parameterization
|
||||
private ["_abort", "_AmmoCacheEntry", "_WeaponCacheEntry", "_opticsName", "_opticType", "_bulletTraceVisible", "_temperature", "_barometricPressure", "_bulletMass", "_bulletLength", "_muzzleVelocity", "_muzzleVelocityShift", "_bulletVelocity", "_bulletLength", "_barrelTwist", "_stabilityFactor", "_aceTimeSecond", "_barrelVelocityShift", "_ammoTemperatureVelocityShift"];
|
||||
|
||||
params ["_unit", "_weapon", "", "_mode", "_ammo", "_magazine", "_bullet"];
|
||||
|
||||
_abort = false;
|
||||
|
||||
if (!(_ammo isKindOf "BulletBase")) exitWith {};
|
||||
if (!alive _bullet) exitWith {};
|
||||
if (!([_unit] call EFUNC(common,isPlayer))) exitWith {};
|
||||
if (!alive _projectile) exitWith {};
|
||||
if (_unit distance ACE_player > GVAR(simulationRadius)) exitWith {};
|
||||
if (underwater _unit) exitWith {};
|
||||
if (!GVAR(simulateForEveryone) && !(local _unit)) then {
|
||||
@ -54,7 +44,7 @@ if (GVAR(disabledInFullAutoMode) && getNumber(configFile >> "CfgWeapons" >> _wea
|
||||
|
||||
if (_abort || !(GVAR(extensionAvailable))) exitWith {
|
||||
if (missionNamespace getVariable [QEGVAR(windDeflection,enabled), false]) then {
|
||||
EGVAR(windDeflection,trackedBullets) pushBack [_bullet, getNumber(configFile >> "CfgAmmo" >> _ammo >> "airFriction")];
|
||||
EGVAR(windDeflection,trackedBullets) pushBack [_projectile, getNumber(configFile >> "CfgAmmo" >> _ammo >> "airFriction")];
|
||||
};
|
||||
};
|
||||
|
||||
@ -72,7 +62,7 @@ _AmmoCacheEntry params ["_airFriction", "_caliber", "_bulletLength", "_bulletMas
|
||||
_WeaponCacheEntry params ["_barrelTwist", "_twistDirection", "_barrelLength"];
|
||||
|
||||
|
||||
_bulletVelocity = velocity _bullet;
|
||||
_bulletVelocity = velocity _projectile;
|
||||
_muzzleVelocity = vectorMagnitude _bulletVelocity;
|
||||
|
||||
_barrelVelocityShift = 0;
|
||||
@ -92,7 +82,7 @@ if (GVAR(ammoTemperatureEnabled) || GVAR(barrelLengthInfluenceEnabled)) then {
|
||||
if (_muzzleVelocityShift != 0) then {
|
||||
_muzzleVelocity = _muzzleVelocity + _muzzleVelocityShift;
|
||||
_bulletVelocity = _bulletVelocity vectorAdd ((vectorNormalized _bulletVelocity) vectorMultiply (_muzzleVelocityShift));
|
||||
_bullet setVelocity _bulletVelocity;
|
||||
_projectile setVelocity _bulletVelocity;
|
||||
};
|
||||
};
|
||||
|
||||
@ -114,16 +104,16 @@ if (_caliber > 0 && _bulletLength > 0 && _bulletMass > 0 && _barrelTwist > 0) th
|
||||
if (isNil "_temperature") then {
|
||||
_temperature = ((getPosASL _unit) select 2) call EFUNC(weather,calculateTemperatureAtHeight);
|
||||
};
|
||||
_barometricPressure = ((getPosASL _bullet) select 2) call EFUNC(weather,calculateBarometricPressure);
|
||||
_barometricPressure = ((getPosASL _projectile) select 2) call EFUNC(weather,calculateBarometricPressure);
|
||||
_stabilityFactor = [_caliber, _bulletLength, _bulletMass, _barrelTwist, _muzzleVelocity, _temperature, _barometricPressure] call FUNC(calculateStabilityFactor);
|
||||
};
|
||||
|
||||
GVAR(currentbulletID) = (GVAR(currentbulletID) + 1) % 10000;
|
||||
|
||||
_aceTimeSecond = floor ACE_time;
|
||||
"ace_advanced_ballistics" callExtension format["new:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:%17:%18", GVAR(currentbulletID), _airFriction, _ballisticCoefficients, _velocityBoundaries, _atmosphereModel, _dragModel, _stabilityFactor, _twistDirection, _muzzleVelocity, _transonicStabilityCoef, getPosASL _bullet, EGVAR(common,mapLatitude), EGVAR(weather,currentTemperature), EGVAR(common,mapAltitude), EGVAR(weather,currentHumidity), overcast, _aceTimeSecond, ACE_time - _aceTimeSecond];
|
||||
"ace_advanced_ballistics" callExtension format["new:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:%17:%18", GVAR(currentbulletID), _airFriction, _ballisticCoefficients, _velocityBoundaries, _atmosphereModel, _dragModel, _stabilityFactor, _twistDirection, _muzzleVelocity, _transonicStabilityCoef, getPosASL _projectile, EGVAR(common,mapLatitude), EGVAR(weather,currentTemperature), EGVAR(common,mapAltitude), EGVAR(weather,currentHumidity), overcast, _aceTimeSecond, ACE_time - _aceTimeSecond];
|
||||
|
||||
GVAR(allBullets) pushBack [_bullet, _caliber, _bulletTraceVisible, GVAR(currentbulletID)];
|
||||
GVAR(allBullets) pushBack [_projectile, _caliber, _bulletTraceVisible, GVAR(currentbulletID)];
|
||||
|
||||
if (isNil QGVAR(BulletPFH)) then {
|
||||
GVAR(BulletPFH) = [FUNC(handleFirePFH), GVAR(simulationInterval), []] call CBA_fnc_addPerFrameHandler;
|
||||
|
@ -24,6 +24,7 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
TRACE_1("Reading Ammo Config",_this);
|
||||
private ["_ammo", "_airFriction", "_caliber", "_bulletLength", "_bulletMass", "_transonicStabilityCoef", "_dragModel", "_ballisticCoefficients", "_velocityBoundaries", "_atmosphereModel", "_ammoTempMuzzleVelocityShifts", "_muzzleVelocityTable", "_barrelLengthTable", "_result"];
|
||||
_ammoConfig = configFile >> "CfgAmmo" >> _this;
|
||||
|
||||
@ -49,6 +50,42 @@ _ammoTempMuzzleVelocityShifts = getArray(_ammoConfig >> "ACE_ammoTempMuzzleVeloc
|
||||
_muzzleVelocityTable = getArray(_ammoConfig >> "ACE_muzzleVelocities");
|
||||
_barrelLengthTable = getArray(_ammoConfig >> "ACE_barrelLengths");
|
||||
|
||||
//Handle subsonic ammo that would have a huge muzzle velocity shift (when ballistic configs not explicitly defined)
|
||||
private _typicalSpeed = getNumber (_ammoConfig >> "typicalSpeed");
|
||||
if ((_typicalSpeed > 0) && {_typicalSpeed < 360}) then {
|
||||
private _inheritedBarrelConfig = (!(_muzzleVelocityTable isEqualTo [])) && {(configProperties [_ammoConfig, "(configName _x) == 'ACE_muzzleVelocities'", false]) isEqualTo []};
|
||||
private _inheritedTempConfig = (!(_ammoTempMuzzleVelocityShifts isEqualTo [])) && {(configProperties [_ammoConfig, "(configName _x) == 'ACE_ammoTempMuzzleVelocityShifts'", false]) isEqualTo []};
|
||||
TRACE_3("subsonic",_typicalSpeed,_inheritedBarrelConfig,_inheritedTempConfig);
|
||||
if (_inheritedBarrelConfig || _inheritedTempConfig) then {
|
||||
private _parentConfig = inheritsFrom _ammoConfig;
|
||||
private _parentSpeed = getNumber (_parentConfig >> "typicalSpeed");
|
||||
ACE_LOGWARNING_4("Subsonic Ammo %1 (%2 m/s) missing `ACE_muzzleVelocities` or `ACE_ammoTempMuzzleVelocityShifts` configs, attempting to use parent %3 (%4m/s)",_this,_typicalSpeed,configName _parentConfig, _parentSpeed);
|
||||
if (_parentSpeed <= 0) exitWith {//Handle weird or null parent
|
||||
_muzzleVelocityTable = [];
|
||||
_ammoTempMuzzleVelocityShifts = [];
|
||||
};
|
||||
private _linearMuliplier = _typicalSpeed / _parentSpeed;
|
||||
if (_inheritedBarrelConfig) then {
|
||||
if (!((configProperties [_parentConfig, "(configName _x) == 'ACE_muzzleVelocities'", false]) isEqualTo [])) then {
|
||||
TRACE_2("Parent Has Defined Barrel MV",_linearMuliplier,_muzzleVelocityTable);
|
||||
{ _muzzleVelocityTable set [_forEachIndex, (_x * _linearMuliplier)]; } forEach _muzzleVelocityTable;
|
||||
} else {
|
||||
TRACE_2("Parent DOES NOT Have Defined Barrel MV",_linearMuliplier,_muzzleVelocityTable);
|
||||
_muzzleVelocityTable = [];
|
||||
};
|
||||
};
|
||||
if (_inheritedTempConfig) then {
|
||||
if (!((configProperties [_parentConfig, "(configName _x) == 'ACE_ammoTempMuzzleVelocityShifts'", false]) isEqualTo [])) then {
|
||||
TRACE_2("Parent Has Defined Ammo Temp Shifts",_linearMuliplier,_muzzleVelocityTable);
|
||||
{ _ammoTempMuzzleVelocityShifts set [_forEachIndex, (_x * _linearMuliplier)]; } forEach _ammoTempMuzzleVelocityShifts;
|
||||
} else {
|
||||
TRACE_2("Parent DOES NOT Have Defined Ammo Temp Shifts",_linearMuliplier,_muzzleVelocityTable);
|
||||
_ammoTempMuzzleVelocityShifts = [];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
_result = [_airFriction, _caliber, _bulletLength, _bulletMass, _transonicStabilityCoef, _dragModel, _ballisticCoefficients, _velocityBoundaries, _atmosphereModel, _ammoTempMuzzleVelocityShifts, _muzzleVelocityTable, _barrelLengthTable];
|
||||
|
||||
uiNamespace setVariable [format[QGVAR(%1), _this], _result];
|
||||
|
@ -1,6 +1,11 @@
|
||||
#define COMPONENT advanced_ballistics
|
||||
#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
|
||||
#define DEBUG_MODE_FULL
|
||||
#endif
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project name="ACE">
|
||||
<Package name="Advanced_Ballistics">
|
||||
<Key ID="STR_ACE_Advanced_Ballistics_WindInfoKey">
|
||||
@ -10,7 +10,7 @@
|
||||
<Spanish>Mostrar información del viento</Spanish>
|
||||
<German>Windinformationen anzeigen</German>
|
||||
<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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Ballistics_ProtractorKey">
|
||||
@ -35,6 +35,7 @@
|
||||
<French>Balistique avancée</French>
|
||||
<Hungarian>Fejlett ballisztika</Hungarian>
|
||||
<Russian>Продвинутая баллистика</Russian>
|
||||
<Italian>Balistica Avanzata</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Ballistics_enabled_DisplayName">
|
||||
<English>Advanced Ballistics</English>
|
||||
@ -46,6 +47,7 @@
|
||||
<French>Balistique avancée</French>
|
||||
<Hungarian>Fejlett ballisztika</Hungarian>
|
||||
<Russian>Продвинутая баллистика</Russian>
|
||||
<Italian>Balistica Avanzata</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Ballistics_enabled_Description">
|
||||
<English>Enables advanced ballistics</English>
|
||||
@ -57,6 +59,7 @@
|
||||
<French>Activer la balistique avancée</French>
|
||||
<Hungarian>Engedélyezi a fejlett ballisztikát</Hungarian>
|
||||
<Russian>Включает продвинутую баллистику</Russian>
|
||||
<Italian>Abilita Balistica Avanzata</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Ballistics_simulateForSnipers_DisplayName">
|
||||
<English>Enabled For Snipers</English>
|
||||
@ -68,17 +71,19 @@
|
||||
<French>Activer pour les snipers</French>
|
||||
<Hungarian>Mesterlövészeknek engedélyezve</Hungarian>
|
||||
<Russian>Включена для снайперов</Russian>
|
||||
<Italian>Abilita per Tiratori Scelti</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Ballistics_simulateForSnipers_Description">
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<French>Active la balistique avancée pour les snipers non locaux (en utilisant les optiques avancées)</French>
|
||||
<Hungarian>Engedélyezi a fejlett ballisztikát nem-helyi mesterlövészeknek (nagy-teljesítményű optika használatakor)</Hungarian>
|
||||
<Russian>Включает продвинутую баллистику для нелокальных снайперов (при использовании мощной оптики)</Russian>
|
||||
<Italian>Abilita Balistica Avanzata per Tiratori Scelti non locali (con ottiche ad alto potenziale)</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Ballistics_simulateForGroupMembers_DisplayName">
|
||||
<English>Enabled For Group Members</English>
|
||||
@ -90,6 +95,7 @@
|
||||
<French>Activer pour les membres groupés</French>
|
||||
<Hungarian>Csoporttagoknak engedélyezve</Hungarian>
|
||||
<Russian>Включена для группы</Russian>
|
||||
<Italian>Abilita per Membri del Gruppo</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Ballistics_simulateForGroupMembers_Description">
|
||||
<English>Enables advanced ballistics for non local group members</English>
|
||||
@ -101,6 +107,7 @@
|
||||
<French>Active la balistique avancée pour les membres groupés non locaux</French>
|
||||
<Hungarian>Engedélyezi a fejlett ballisztikát nem-helyi csoporttagoknak</Hungarian>
|
||||
<Russian>Включает продвинутую баллистику для нелокальных членов группы</Russian>
|
||||
<Italian>Abilita Balistica Avanzata per Membri non locali del Gruppo</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Ballistics_simulateForEveryone_DisplayName">
|
||||
<English>Enabled For Everyone</English>
|
||||
@ -112,17 +119,19 @@
|
||||
<French>Activer pour tout le monde</French>
|
||||
<Hungarian>Mindenkinek engedélyezve</Hungarian>
|
||||
<Russian>Включена для всех</Russian>
|
||||
<Italian>Abilita per tutti</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Ballistics_simulateForEveryone_Description">
|
||||
<English>Enables advanced ballistics for all non local players (enabling this may degrade performance during heavy firefights in multiplayer)</English>
|
||||
<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>
|
||||
<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>
|
||||
<French>Active la balistique avancé pour tous les joueurs non locaux (activer cette option peut avoir un impact sur les performance en multi durant les grands échanges de tirs)</French>
|
||||
<Hungarian>Engedélyezi a fejlett ballisztikát az összes nem-helyi játékosnak (ez a funkció leronthatja a teljesítményt intenzív többjátékos tűzharcok alatt)</Hungarian>
|
||||
<Russian>Включает продвинутую баллистику для всех нелокальных игроков (включение этой опции может снизить производительность при массовых перестрелках в мультиплеере)</Russian>
|
||||
<Italian>Abilita Balistica Avanzata per tutti i giocatori non locali (abilitare questo parametro potrebbe degradare le prestazioni durante scontri intensi in multiplayer)</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Ballistics_alwaysSimulateForGroupMembers_DisplayName">
|
||||
<English>Always Enabled For Group Members</English>
|
||||
@ -134,6 +143,7 @@
|
||||
<French>Toujours activer pour les membres groupés</French>
|
||||
<Hungarian>Mindig engedélyezve csoporttagoknak</Hungarian>
|
||||
<Russian>Всегда включена для членов группы</Russian>
|
||||
<Italian>Sempre abilitato per Membri del Gruppo</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Ballistics_alwaysSimulateForGroupMembers_Description">
|
||||
<English>Always enables advanced ballistics when a group member fires</English>
|
||||
@ -145,6 +155,7 @@
|
||||
<French>Active tout le temps la balistique avancée quand un membre du groupe ouvre le feu</French>
|
||||
<Hungarian>Mindig engedélyezi a fejlett ballisztikát, ha egy csoporttag tüzel</Hungarian>
|
||||
<Russian>Всегда включает продвинутую баллистику когда стреляет член группы</Russian>
|
||||
<Italian>Abilita sempre Balistica Avanzata quando un Membro del Gruppo spara</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Ballistics_disabledInFullAutoMod_DisplayName">
|
||||
<English>Disabled In FullAuto Mode</English>
|
||||
@ -156,6 +167,7 @@
|
||||
<French>Désactiver en mode rafale libre</French>
|
||||
<Hungarian>Automata módban letiltva</Hungarian>
|
||||
<Russian>Выкл. для автомат. режима</Russian>
|
||||
<Italian>Disabilita in modalità di fuoco automatico</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Ballistics_disabledInFullAutoMod_Description">
|
||||
<English>Disables the advanced ballistics during full auto fire</English>
|
||||
@ -167,6 +179,7 @@
|
||||
<French>Désactive la balistique avancée pour les tirs en rafale libre</French>
|
||||
<Hungarian>Letiltja a fejlett ballisztikát automata tüzelés folyamán</Hungarian>
|
||||
<Russian>Выключает продвинутую баллистику при стрельбе в полностью автоматическом режиме</Russian>
|
||||
<Italian>Disabilita Balistica Avanzata durante fuoco automatico</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Ballistics_ammoTemperatureEnabled_DisplayName">
|
||||
<English>Enable Ammo Temperature Simulation</English>
|
||||
@ -178,6 +191,7 @@
|
||||
<French>Activer la simulation de la température</French>
|
||||
<Hungarian>Lőszer-hő szimuláció engedélyezése</Hungarian>
|
||||
<Russian>Симуляция температуры для боеприпасов</Russian>
|
||||
<Italian>Abilita simulazione della temperatura delle munizioni</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Ballistics_ammoTemperatureEnabled_Description">
|
||||
<English>Muzzle velocity varies with ammo temperature</English>
|
||||
@ -189,6 +203,7 @@
|
||||
<French>La température de la munition influe sur la vélocité intiale</French>
|
||||
<Hungarian>A kezdősebesség a lőszer hőmérsékletétől függően változó</Hungarian>
|
||||
<Russian>Начальная скорость пули зависит от температуры</Russian>
|
||||
<Italian>Velocità alla volata varia con la temperatura delle munizioni</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Ballistics_barrelLengthInfluenceEnabled_DisplayName">
|
||||
<English>Enable Barrel Length Simulation</English>
|
||||
@ -200,6 +215,7 @@
|
||||
<French>Activer la simulation de la longueur de canon</French>
|
||||
<Hungarian>Csőhossz-szimuláció engedélyezése</Hungarian>
|
||||
<Russian>Симуляция длины ствола</Russian>
|
||||
<Italian>Abilita simulazione della lunghezza della canna</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Ballistics_barrelLengthInfluenceEnabled_Description">
|
||||
<English>Muzzle velocity varies with barrel length</English>
|
||||
@ -211,6 +227,7 @@
|
||||
<French>La longueur du canon influe sur la vélocité initale</French>
|
||||
<Hungarian>A kezdősebesség a cső hosszától függően változó</Hungarian>
|
||||
<Russian>Начальная скорость пули зависит от длины ствола</Russian>
|
||||
<Italian>Velocità alla volata varia con la lunghezza della canna</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Ballistics_bulletTraceEnabled_DisplayName">
|
||||
<English>Enable Bullet Trace Effect</English>
|
||||
@ -222,6 +239,7 @@
|
||||
<French>Activer l'effet traçante</French>
|
||||
<Hungarian>Nyomkövető-effekt engedélyezése</Hungarian>
|
||||
<Russian>Следы пуль</Russian>
|
||||
<Italian>Abilita effetto di tracciatura dei proiettili</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Ballistics_bulletTraceEnabled_Description">
|
||||
<English>Enables a bullet trace effect to high caliber bullets (only visible when looking through high power optics)</English>
|
||||
@ -233,6 +251,7 @@
|
||||
<French>Active une tracante pour les munitions de gros calibre (seulement visible en utilisant des optiques avancées)</French>
|
||||
<Hungarian>Engedélyezi a nagy kaliberű lövedékek nyomának vizuális követését (csak nagy teljesítményű optikán keresztül látható)</Hungarian>
|
||||
<Russian>Включает эффект следов пуль для больших калибров (видны только через мощную оптику)</Russian>
|
||||
<Italian>Abilita effetto di tracciatura per proiettili di alto calibro (visibile solo attraverso ottiche ad alto potenziale)</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Ballistics_simulationInterval_DisplayName">
|
||||
<English>Simulation Interval</English>
|
||||
@ -244,6 +263,7 @@
|
||||
<French>Intervalle de simulation</French>
|
||||
<Hungarian>Szimuláció intervalluma</Hungarian>
|
||||
<Russian>Интервал симуляции</Russian>
|
||||
<Italian>Intervallo Simulazione</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Ballistics_simulationInterval_Description">
|
||||
<English>Defines the interval between every calculation step</English>
|
||||
@ -255,6 +275,7 @@
|
||||
<French>Défini un intervalle de calcul entre deux simulations</French>
|
||||
<Hungarian>Meghatározza a számítási lépések közötti időintervallumot</Hungarian>
|
||||
<Russian>Определяет временной интервал между вычислениями</Russian>
|
||||
<Italian>Definisce l'intervallo tra ogni step di calcolo</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Ballistics_simulationRadius_DisplayName">
|
||||
<English>Simulation Radius</English>
|
||||
@ -266,6 +287,7 @@
|
||||
<French>Rayon de simulation</French>
|
||||
<Hungarian>Szimuláció hatóköre</Hungarian>
|
||||
<Russian>Радиус симуляции</Russian>
|
||||
<Italian>Raggio Simulazione</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Ballistics_simulationRadius_Description">
|
||||
<English>Defines the radius around the player (in meters) at which advanced ballistics are applied to projectiles</English>
|
||||
@ -277,9 +299,11 @@
|
||||
<French>Défini le rayon autour du joueur (en mètres) d'application de la balistique avancée</French>
|
||||
<Hungarian>Meghatározza a játékos körüli hatókört (méterben), ahol a lövedékek fejlett ballisztikát használnak</Hungarian>
|
||||
<Russian>Определяет радиус вокруг игрока (в метрах), в котором продвинутая баллистика применяется к снарядам</Russian>
|
||||
<Italian>Definisce il raggio attorno al giocatore (in metri) per cui la Balistica Avanzata è applicata ai proiettili</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Ballistics_Description">
|
||||
<English>This module enables advanced ballistics simulation - meaning the trajectory of projectiles is influenced by variables like air temperature, atmospheric pressure, humidity, gravity, the type of ammunition and the weapon from which it was fired.</English>
|
||||
<German>Dieses Modul aktiviert die Erweiterte Ballisitk. Die Flugbahn eines Geschosses wird nun von Einflüssen wie z.B Temperatur, Luftdruck, Luftfeuchtigkeit, Schwerkraft, Geschossart sowie der Waffe aus dem es gefeuert wird, beeinflusst.</German>
|
||||
<Polish>Moduł ten pozwala aktywować zaawansowaną balistykę biorącą przy obliczeniach trajektorii lotu pocisku pod uwagę takie rzeczy jak temperatura powietrza, ciśnienie atmosferyczne, wilgotność powietrza, siły Coriolisa i Eotvosa, grawitację a także broń z jakiej wykonywany jest strzał oraz rodzaj amunicji. Wszystko to sprowadza się na bardzo dokładne odwzorowanie balistyki.</Polish>
|
||||
<Czech>Tento modul umožňuje aktivovat pokročilou balistiku, která vypočítává trajektorii kulky a bere do úvahy věci jako je teplota vzduchu, atmosférický tlak, vlhkost vzduchu, gravitaci, typ munice a zbraň, ze které je náboj vystřelen. To vše přispívá k velmi přesné balistice.</Czech>
|
||||
<Portuguese>Este módulo permite que você ative cálculos de balística avançada, fazendo a trajetória do projétil levar em consideração coisas como temperatura do ar, pressão atmosférica, umidade, força de Coriolis, a gravidade, o modelo da arma no qual o disparo é realizado e o tipo de munição. Tudo isso acrescenta-se a um balística muito precisa.</Portuguese>
|
||||
@ -287,6 +311,7 @@
|
||||
<Hungarian>Ez a modul engedélyezi a fejlett ballisztikai szimulációt - a lövedékek röppályáját befolyásolni fogja a levegő hőmérséklete, légnyomás, páratartalom, gravitáció, a lövedék fajtája, valamint a fegyver, amiből kilőtték a lövedéket.</Hungarian>
|
||||
<Russian>Этот модуль включает симуляцию продвинутой баллистики - при этом на траекторию полета снаряда влияют различные параметры, такие как температура воздуха, атмосферное давление, влажность, гравитация, тип боеприпаса и оружия, из которого произвели выстрел.</Russian>
|
||||
<Spanish>Este módulo permite la simulación balística avanzada - es decir, la trayectoria de los proyectiles está influenciada por variables como la temperatura del aire, la presión atmosférica, la humedad, la gravedad, el tipo de municiones y el arma desde el que fue disparada.</Spanish>
|
||||
<Italian>Questo modulo abilita la simulazione 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>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -1,6 +1,11 @@
|
||||
#define COMPONENT ai
|
||||
#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
|
||||
#define DEBUG_MODE_FULL
|
||||
#endif
|
||||
|
@ -1,6 +1,11 @@
|
||||
#define COMPONENT aircraft
|
||||
#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
|
||||
#define DEBUG_MODE_FULL
|
||||
#endif
|
||||
|
@ -1,7 +0,0 @@
|
||||
/*
|
||||
class Extended_PreInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preInit));
|
||||
};
|
||||
};
|
||||
*/
|
BIN
addons/apl/ace_entrchtool.p3d
Normal file
BIN
addons/apl/ace_entrchtool.p3d
Normal file
Binary file not shown.
BIN
addons/apl/ace_envelope_big.p3d
Normal file
BIN
addons/apl/ace_envelope_big.p3d
Normal file
Binary file not shown.
BIN
addons/apl/ace_envelope_big4.p3d
Normal file
BIN
addons/apl/ace_envelope_big4.p3d
Normal file
Binary file not shown.
BIN
addons/apl/ace_envelope_big4_nogeo.p3d
Normal file
BIN
addons/apl/ace_envelope_big4_nogeo.p3d
Normal file
Binary file not shown.
BIN
addons/apl/ace_envelope_small.p3d
Normal file
BIN
addons/apl/ace_envelope_small.p3d
Normal file
Binary file not shown.
BIN
addons/apl/ace_envelope_small4.p3d
Normal file
BIN
addons/apl/ace_envelope_small4.p3d
Normal file
Binary file not shown.
BIN
addons/apl/ace_envelope_small4_nogeo.p3d
Normal file
BIN
addons/apl/ace_envelope_small4_nogeo.p3d
Normal file
Binary file not shown.
@ -11,5 +11,3 @@ class CfgPatches {
|
||||
VERSION_CONFIG;
|
||||
};
|
||||
};
|
||||
|
||||
#include "CfgEventHandlers.hpp"
|
||||
|
75
addons/apl/data/entrchtool.rvmat
Normal file
75
addons/apl/data/entrchtool.rvmat
Normal 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";
|
||||
};
|
BIN
addons/apl/data/entrchtool_as.paa
Normal file
BIN
addons/apl/data/entrchtool_as.paa
Normal file
Binary file not shown.
BIN
addons/apl/data/entrchtool_co.paa
Normal file
BIN
addons/apl/data/entrchtool_co.paa
Normal file
Binary file not shown.
BIN
addons/apl/data/entrchtool_nohq.paa
Normal file
BIN
addons/apl/data/entrchtool_nohq.paa
Normal file
Binary file not shown.
BIN
addons/apl/data/entrchtool_smdi.paa
Normal file
BIN
addons/apl/data/entrchtool_smdi.paa
Normal file
Binary file not shown.
BIN
addons/apl/data/zr_plevel_co.paa
Normal file
BIN
addons/apl/data/zr_plevel_co.paa
Normal file
Binary file not shown.
@ -1,6 +1,11 @@
|
||||
#define COMPONENT APL
|
||||
#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
|
||||
#define DEBUG_MODE_FULL
|
||||
#endif
|
||||
|
@ -1,3 +1,10 @@
|
||||
|
||||
class Extended_PreStart_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preStart));
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_PreInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE( call COMPILE_FILE(XEH_preInit) );
|
||||
|
67
addons/atragmx/XEH_PREP.hpp
Normal file
67
addons/atragmx/XEH_PREP.hpp
Normal 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);
|
@ -2,71 +2,6 @@
|
||||
|
||||
ADDON = false;
|
||||
|
||||
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);
|
||||
#include "XEH_PREP.hpp"
|
||||
|
||||
ADDON = true;
|
||||
|
3
addons/atragmx/XEH_preStart.sqf
Normal file
3
addons/atragmx/XEH_preStart.sqf
Normal file
@ -0,0 +1,3 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
#include "XEH_PREP.hpp"
|
@ -1,6 +1,11 @@
|
||||
#define COMPONENT atragmx
|
||||
#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
|
||||
#define DEBUG_MODE_FULL
|
||||
#endif
|
||||
|
@ -1,3 +1,10 @@
|
||||
|
||||
class Extended_PreStart_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preStart));
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_PreInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preInit));
|
||||
|
10
addons/attach/XEH_PREP.hpp
Normal file
10
addons/attach/XEH_PREP.hpp
Normal file
@ -0,0 +1,10 @@
|
||||
|
||||
PREP(attach);
|
||||
PREP(canAttach);
|
||||
PREP(canDetach);
|
||||
PREP(detach);
|
||||
PREP(getChildrenAttachActions);
|
||||
PREP(handleGetIn);
|
||||
PREP(handleGetOut);
|
||||
PREP(handleKilled);
|
||||
PREP(placeApprove);
|
@ -2,14 +2,6 @@
|
||||
|
||||
ADDON = false;
|
||||
|
||||
PREP(attach);
|
||||
PREP(canAttach);
|
||||
PREP(canDetach);
|
||||
PREP(detach);
|
||||
PREP(getChildrenAttachActions);
|
||||
PREP(handleGetIn);
|
||||
PREP(handleGetOut);
|
||||
PREP(handleKilled);
|
||||
PREP(placeApprove);
|
||||
#include "XEH_PREP.hpp"
|
||||
|
||||
ADDON = true;
|
||||
|
3
addons/attach/XEH_preStart.sqf
Normal file
3
addons/attach/XEH_preStart.sqf
Normal file
@ -0,0 +1,3 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
#include "XEH_PREP.hpp"
|
@ -49,7 +49,7 @@ if (_unit == _attachToVehicle) then { //Self Attachment
|
||||
} else {
|
||||
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);
|
||||
_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 {
|
||||
|
||||
[_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);
|
||||
[_unit, "DefaultAction", (_unit getVariable [QGVAR(placeActionEH), -1])] call EFUNC(common,removeActionEventHandler);
|
||||
_unit removeAction _actionID;
|
||||
|
@ -1,6 +1,11 @@
|
||||
#define COMPONENT attach
|
||||
#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
|
||||
#define DEBUG_MODE_FULL
|
||||
#endif
|
||||
|
@ -7,7 +7,7 @@
|
||||
<Spanish>Acoplar objeto >></Spanish>
|
||||
<Polish>Przyczep >></Polish>
|
||||
<French>Attacher l'objet >></French>
|
||||
<Czech>Připnout předmět >></Czech>
|
||||
<Czech>Připnout >></Czech>
|
||||
<Portuguese>Fixar item >></Portuguese>
|
||||
<Italian>Attacca l'oggetto >></Italian>
|
||||
<Hungarian>Tárgy hozzácsatolása >></Hungarian>
|
||||
@ -115,7 +115,7 @@
|
||||
<Spanish>Sin espacio en inventario</Spanish>
|
||||
<Polish>Brak miejsca w ekwipunku</Polish>
|
||||
<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>
|
||||
<Italian>Non hai più spazio</Italian>
|
||||
<Hungarian>Nincs több hely</Hungarian>
|
||||
@ -175,7 +175,7 @@
|
||||
<German>Befestigen fehlgeschlagen</German>
|
||||
<Russian>Не удалось присоединить</Russian>
|
||||
<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>
|
||||
<Polish>Przyczepianie nie powiodło się</Polish>
|
||||
<Hungarian>Hozzácsatolás sikertelen</Hungarian>
|
||||
@ -187,7 +187,7 @@
|
||||
<Spanish>%1<br/>acoplada</Spanish>
|
||||
<Polish>Przyczepiono<br/>%1</Polish>
|
||||
<French>%1<br/>attachée</French>
|
||||
<Czech>%1<br/>Připnutý</Czech>
|
||||
<Czech>%1<br/>Připnuto</Czech>
|
||||
<Portuguese>%1<br/>Fixada</Portuguese>
|
||||
<Italian>%1<br/>attaccata</Italian>
|
||||
<Hungarian>%1<br/>hozzácsatolva</Hungarian>
|
||||
@ -199,7 +199,7 @@
|
||||
<Spanish>%1<br/>quitada</Spanish>
|
||||
<Polish>Odczepiono<br/>%1</Polish>
|
||||
<French>%1<br/>détachée</French>
|
||||
<Czech>%1<br/>Odepnutý</Czech>
|
||||
<Czech>%1<br/>Odepnuto</Czech>
|
||||
<Portuguese>%1<br/>Separada</Portuguese>
|
||||
<Italian>%1<br/>staccata</Italian>
|
||||
<Hungarian>%1<br/>lecsatolva</Hungarian>
|
||||
|
@ -1,4 +1,10 @@
|
||||
|
||||
class Extended_PreStart_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preStart));
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_PreInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preInit));
|
||||
|
4
addons/backpacks/XEH_PREP.hpp
Normal file
4
addons/backpacks/XEH_PREP.hpp
Normal file
@ -0,0 +1,4 @@
|
||||
|
||||
PREP(backpackOpened);
|
||||
PREP(isBackpack);
|
||||
PREP(onOpenInventory);
|
@ -2,8 +2,6 @@
|
||||
|
||||
ADDON = false;
|
||||
|
||||
PREP(backpackOpened);
|
||||
PREP(isBackpack);
|
||||
PREP(onOpenInventory);
|
||||
#include "XEH_PREP.hpp"
|
||||
|
||||
ADDON = true;
|
||||
|
3
addons/backpacks/XEH_preStart.sqf
Normal file
3
addons/backpacks/XEH_preStart.sqf
Normal file
@ -0,0 +1,3 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
#include "XEH_PREP.hpp"
|
@ -17,27 +17,20 @@
|
||||
params ["_target", "_backpack"];
|
||||
|
||||
// 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];
|
||||
};
|
||||
|
||||
// play a zipper sound effect
|
||||
private ["_sounds", "_position"];
|
||||
|
||||
_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"*/
|
||||
|
||||
private _sounds = [
|
||||
QUOTE(PATHTO_R(sounds\zip_in.wav)),
|
||||
QUOTE(PATHTO_R(sounds\zip_out.wav))
|
||||
];
|
||||
|
||||
_position = AGLToASL (_target modelToWorldVisual (_target selectionPosition "Spine3"));
|
||||
private _position = AGLToASL (_target modelToWorldVisual (_target selectionPosition "Spine3"));
|
||||
|
||||
playSound3D [
|
||||
_sounds select floor random count _sounds,
|
||||
selectRandom _sounds,
|
||||
objNull,
|
||||
false,
|
||||
_position,
|
||||
|
@ -12,13 +12,12 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["_backpack"];
|
||||
params [["_backpack", objNull, [objNull]]];
|
||||
|
||||
if (_backpack isEqualType objNull) then {
|
||||
_backpack = typeOf _backpack;
|
||||
};
|
||||
|
||||
private "_config";
|
||||
_config = configFile >> "CfgVehicles" >> _backpack;
|
||||
private _config = configFile >> "CfgVehicles" >> _backpack;
|
||||
|
||||
getText (_config >> "vehicleClass") == "backpacks" && {getNumber (_config >> "maximumLoad") > 0} // return
|
||||
|
@ -16,11 +16,10 @@
|
||||
params ["_unit", "_backpack"];
|
||||
|
||||
// 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
|
||||
private "_target";
|
||||
_target = objectParent _backpack;
|
||||
private _target = objectParent _backpack;
|
||||
|
||||
if (isNull _target) exitWith {false};
|
||||
|
||||
|
@ -1,6 +1,11 @@
|
||||
#define COMPONENT backpacks
|
||||
#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
|
||||
#define DEBUG_MODE_FULL
|
||||
#endif
|
||||
|
@ -14,7 +14,6 @@ class CfgWeapons {
|
||||
class MMG_02_base_F;
|
||||
class Rifle_Base_F;
|
||||
class Rifle_Long_Base_F;
|
||||
class WeaponSlotsInfo;
|
||||
class MuzzleSlot;
|
||||
|
||||
/* Long Rifles */
|
||||
@ -74,22 +73,12 @@ class CfgWeapons {
|
||||
};
|
||||
|
||||
class DMR_01_base_F: Rifle_Long_Base_F {
|
||||
class WeaponSlotsInfo: WeaponSlotsInfo {
|
||||
class MuzzleSlot: MuzzleSlot {
|
||||
compatibleItems[] += {"ACE_muzzle_mzls_B"};
|
||||
};
|
||||
};
|
||||
class Single: Mode_SemiAuto {
|
||||
dispersion = 0.0004; // radians. Equal to 1.375 MOA.
|
||||
};
|
||||
};
|
||||
|
||||
class EBR_base_F: Rifle_Long_Base_F {
|
||||
class WeaponSlotsInfo: WeaponSlotsInfo {
|
||||
class MuzzleSlot: MuzzleSlot {
|
||||
compatibleItems[] += {"ACE_muzzle_mzls_B"};
|
||||
};
|
||||
};
|
||||
class Single: Mode_SemiAuto {
|
||||
dispersion = 0.00029; // radians. Equal to 1.00 MOA.
|
||||
};
|
||||
@ -101,13 +90,7 @@ class CfgWeapons {
|
||||
|
||||
/* MX */
|
||||
|
||||
class arifle_MX_Base_F: Rifle_Base_F {
|
||||
class WeaponSlotsInfo: WeaponSlotsInfo {
|
||||
class MuzzleSlot: MuzzleSlot {
|
||||
compatibleItems[] += {"ACE_muzzle_mzls_H"};
|
||||
};
|
||||
};
|
||||
};
|
||||
class arifle_MX_Base_F: Rifle_Base_F {};
|
||||
class arifle_MX_SW_F: arifle_MX_Base_F {
|
||||
magazines[] = {
|
||||
"100Rnd_65x39_caseless_mag_Tracer",
|
||||
@ -120,13 +103,6 @@ class CfgWeapons {
|
||||
initSpeed = -1.0;
|
||||
ACE_barrelTwist=228.6;
|
||||
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 {
|
||||
magazines[] = {
|
||||
@ -150,13 +126,7 @@ class CfgWeapons {
|
||||
|
||||
|
||||
/* Katiba */
|
||||
class arifle_katiba_Base_F: Rifle_Base_F {
|
||||
class WeaponSlotsInfo: WeaponSlotsInfo {
|
||||
class MuzzleSlot: MuzzleSlot {
|
||||
compatibleItems[] += {"ACE_muzzle_mzls_H"};
|
||||
};
|
||||
};
|
||||
};
|
||||
class arifle_katiba_Base_F: Rifle_Base_F {};
|
||||
|
||||
|
||||
/* Other */
|
||||
@ -167,42 +137,16 @@ class CfgWeapons {
|
||||
"ACE_200Rnd_65x39_cased_Box_Tracer_Dim"
|
||||
};
|
||||
initSpeed = -0.9763;
|
||||
class WeaponSlotsInfo: WeaponSlotsInfo {
|
||||
class MuzzleSlot: MuzzleSlot {
|
||||
compatibleItems[] += {"ACE_muzzle_mzls_H"};
|
||||
};
|
||||
};
|
||||
ACE_barrelTwist=177.8;
|
||||
ACE_barrelLength=317.5;
|
||||
};
|
||||
class LMG_Zafir_F: Rifle_Long_Base_F {
|
||||
initSpeed = -1.0;
|
||||
class WeaponSlotsInfo: WeaponSlotsInfo {
|
||||
class MuzzleSlot: MuzzleSlot {
|
||||
compatibleItems[] += {"ACE_muzzle_mzls_B"};
|
||||
};
|
||||
};
|
||||
ACE_barrelTwist=304.8;
|
||||
ACE_barrelLength=459.74;
|
||||
};
|
||||
|
||||
|
||||
/* 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"};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class Tavor_base_F: Rifle_Base_F {};
|
||||
class mk20_base_F: Rifle_Base_F {};
|
||||
|
||||
/* SMGs */
|
||||
class SDAR_base_F: Rifle_Base_F {
|
||||
@ -219,93 +163,43 @@ class CfgWeapons {
|
||||
dispersion = 0.0008727; // radians. Equal to 3 MOA.
|
||||
};
|
||||
};
|
||||
class pdw2000_base_F: Rifle_Base_F {
|
||||
class WeaponSlotsInfo: WeaponSlotsInfo {
|
||||
class MuzzleSlot: MuzzleSlot {
|
||||
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"};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class pdw2000_base_F: Rifle_Base_F {};
|
||||
class SMG_01_Base: Rifle_Base_F {};
|
||||
class SMG_02_base_F: Rifle_Base_F {};
|
||||
|
||||
/* Pistols */
|
||||
|
||||
class Pistol;
|
||||
class Pistol_Base_F: Pistol {
|
||||
class WeaponSlotsInfo;
|
||||
};
|
||||
class Pistol_Base_F: Pistol {};
|
||||
|
||||
class hgun_P07_F: Pistol_Base_F {
|
||||
initSpeed = -0.9778;
|
||||
ACE_barrelTwist=254.0;
|
||||
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 {
|
||||
initSpeed = -1.0;
|
||||
ACE_barrelTwist=254.0;
|
||||
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 {
|
||||
initSpeed = -1.0;
|
||||
ACE_barrelTwist=406.4;
|
||||
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 {
|
||||
initSpeed = -0.96;
|
||||
ACE_barrelTwist=406.4;
|
||||
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 {
|
||||
initSpeed = -0.92;
|
||||
ACE_barrelTwist=406.4;
|
||||
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 {
|
||||
initSpeed = -1.157;
|
||||
|
@ -1,6 +1,11 @@
|
||||
#define COMPONENT ballistics
|
||||
#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
|
||||
#define DEBUG_MODE_FULL
|
||||
#endif
|
||||
|
@ -33,7 +33,7 @@
|
||||
<Spanish>Calibre: 6,5x39mm Trazadoras IR-DIM<br />Balas: 30<br />Se usa en: MX/C/M/SW/3GL</Spanish>
|
||||
<French>Calibre: 6,5x39mm Traçantes IR-DIM<br />Cartouches: 30<br />Utilisé avec: MX/C/M/SW/3GL</French>
|
||||
<Polish>Kaliber: 6,5x39mm Smugacz IR-DIM<br />Pociski: 30<br />Używane w: MX/C/M/SW/3GL</Polish>
|
||||
<Czech>Ráže: 6.5x39mm Svítící IR-DIM<br />Munice: 30<br />Použití: MX/C/M/SW/3GL</Czech>
|
||||
<Czech>Ráže: 6.5x39mm Svítící IR-DIM<br />Nábojů: 30<br />Použití u: MX</Czech>
|
||||
<Portuguese>Calibre: 6,5x39mm Traçante IR-DIM<br />Projéteis: 30<br />Usado em: MX/C/M/SW/3GL</Portuguese>
|
||||
<Italian>Calibro: 6.5x39mm Traccianti IR-DIM <br />Munizioni: 30<br />In uso su: MX/C/M/SW/3GL</Italian>
|
||||
<Russian>Калибр: 6,5x39 мм ИК-трассирующие<br />Патронов: 30<br />Используются с: MX/C/M/SW/3GL</Russian>
|
||||
@ -69,7 +69,7 @@
|
||||
<Spanish>Calibre: 6,5x39mm SD<br />Balas: 30<br />Se usa en: MX/C/M/SW/3GL</Spanish>
|
||||
<French>Calibre: 6,5x39mm SD<br />Cartouches: 30<br />Utilisé avec: MX/C/M/SW/3GL</French>
|
||||
<Polish>Kaliber: 6,5x39mm SD<br />Pociski: 30<br />Używane w: MX/C/M/SW/3GL</Polish>
|
||||
<Czech>Ráže: 6.5x39mm SD<br />Munice: 30<br />Použití: MX/C/M/SW/3GL</Czech>
|
||||
<Czech>Ráže: 6.5x39mm SD<br />Nábojů: 30<br />Použití u: MX</Czech>
|
||||
<Portuguese>Calibre: 6,5x39mm SD<br />Projéteis: 30<br />Usado em: MX/C/M/SW/3GL</Portuguese>
|
||||
<Italian>Calibro: 6.5x39mm Sil.<br />Munizioni: 30<br />In uso su: MX/C/M/SW/3GL </Italian>
|
||||
<Russian>Калибр: 6,5x39 мм дозвуковые<br />Патронов: 30<br />Используются с: MX/C/M/SW/3GL</Russian>
|
||||
@ -105,7 +105,7 @@
|
||||
<Spanish>Calibre: 6,5x39mm AP<br />Balas: 30<br />Se usa en: MX/C/M/SW/3GL</Spanish>
|
||||
<French>Calibre: 6,5x39mm AP<br />Cartouches: 30<br />Utilisé avec: MX/C/M/SW/3GL</French>
|
||||
<Polish>Kaliber: 6,5x39mm AP<br />Pociski: 30<br />Używane w: MX/C/M/SW/3GL</Polish>
|
||||
<Czech>Ráže: 6.5x39mm AP<br />Munice: 30<br />Použití: MX/C/M/SW/3GL</Czech>
|
||||
<Czech>Ráže: 6.5x39mm AP<br />Nábojů: 30<br />Použití u: MX</Czech>
|
||||
<Portuguese>Calibre: 6,5x39mm AP<br />Projéteis: 30<br />Usado em: MX/C/M/SW/3GL</Portuguese>
|
||||
<Italian>Calibro: 6.5x39mm AP<br />Munizioni: 30<br />In uso su: MX/C/M/SW/3GL</Italian>
|
||||
<Russian>Калибр: 6,5x39 мм бронебойные<br />Патронов: 30<br />Используются с: MX/C/M/SW/3GL</Russian>
|
||||
@ -142,7 +142,7 @@
|
||||
<Spanish>Calibre: 6,5x39mm Trazadoras IR-DIM<br />Balas: 30<br />Se usa en: Katiba</Spanish>
|
||||
<French>Calibre: 6,5x39mm Traçantes IR-DIM<br />Cartouches: 30<br />Utilisé avec: Katiba</French>
|
||||
<Polish>Kaliber: 6,5x39mm Smugacz IR-DIM<br />Pociski: 30<br />Używane w: Katiba</Polish>
|
||||
<Czech>Ráže: 6.5x39mm Svítící IR-DIM<br />Munice: 30<br />Použití: Katiba</Czech>
|
||||
<Czech>Ráže: 6.5x39mm Svítící IR-DIM<br />Nábojů: 30<br />Použití u: KH 2002 Sama</Czech>
|
||||
<Portuguese>Calibre: 6,5x39mm Traçante IR-DIM<br />Projéteis: 30<br />Usado em: Katiba</Portuguese>
|
||||
<Italian>Calibro: 6.5x39mm Tracciant IR-DIM<br />Munizioni: 30<br />In uso su: Katiba</Italian>
|
||||
<Russian>Калибр: 6,5x39 мм ИК-трассирующие<br />Патронов: 30<br />Используются с: Katiba</Russian>
|
||||
@ -178,7 +178,7 @@
|
||||
<Spanish>Calibre: 6,5x39mm SD<br />Balas: 30<br />Se usa en: Katiba</Spanish>
|
||||
<French>Calibre: 6,5x39mm SD<br />Cartouches: 30<br />Utilisé avec: Katiba</French>
|
||||
<Polish>Kaliber: 6,5x39mm SD<br />Naboje: 30<br />Używane w: Katiba</Polish>
|
||||
<Czech>Ráže: 6.5x39mm SD<br />Munice: 30<br />Použití: Katiba</Czech>
|
||||
<Czech>Ráže: 6.5x39mm SD<br />Nábojů: 30<br />Použití u: KH 2002 Sama</Czech>
|
||||
<Portuguese>Calibre: 6,5x39mm SD<br />Projéteis: 30<br />Usado em: Katiba</Portuguese>
|
||||
<Italian>Calibro: 6.5x39mm Sil.<br />Munizioni: 30<br />In uso su: Katiba</Italian>
|
||||
<Russian>Калибр: 6,5x39 мм дозвуковые<br />Патронов: 30<br />Используются с: Katiba</Russian>
|
||||
@ -214,7 +214,7 @@
|
||||
<Spanish>Calibre: 6,5x39mm AP<br />Balas: 30<br />Se usa en: Katiba</Spanish>
|
||||
<French>Calibre: 6,5x39mm AP<br />Cartouches: 30<br />Utilisé avec: Katiba</French>
|
||||
<Polish>Kaliber: 6,5x39mm AP<br />Pociski: 30<br />Używane w: Katiba</Polish>
|
||||
<Czech>Ráže: 6.5x39mm AP<br />Munice: 30<br />Použití: Katiba</Czech>
|
||||
<Czech>Ráže: 6.5x39mm AP<br />Nábojů: 30<br />Použití u: KH 2002 Sama</Czech>
|
||||
<Portuguese>Calibre: 6,5x39mm AP<br />Projéteis: 30<br />Usado em: Katiba</Portuguese>
|
||||
<Italian>Calibro: 6.5x39mm AP<br />Munizioni: 30<br />In uso su: Katiba</Italian>
|
||||
<Russian>Калибр: 6,5x39 мм бронебойные<br />Патронов: 30<br />Используются с: Katiba</Russian>
|
||||
@ -251,7 +251,7 @@
|
||||
<Spanish>Calibre: 5,56x45mm Trazadoras IR-DIM<br />Balas: 30<br />Se usa en: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Spanish>
|
||||
<French>Calibre: 5,56x45mm Traçantes IR-DIM<br />Cartouches: 30<br />Utilisé avec: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</French>
|
||||
<Polish>Kaliber: 5,56x45mm Smugacz IR-DIM<br />Pociski: 30<br />Używane w: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Polish>
|
||||
<Czech>Ráže: 5.56x45mm Svítící IR-DIM<br />Munice: 30<br />Použití: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Czech>
|
||||
<Czech>Ráže: 5.56x45mm Svítící IR-DIM<br />Nábojů: 30<br />Použití u: CTAR-21, TAR-21, F2000, RFB SDAR</Czech>
|
||||
<Portuguese>Calibre: 5,56x45mm Traçante IR-DIM<br />Projéteis: 30<br />Usado em: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Portuguese>
|
||||
<Italian>Calibro: 5.56x45mm Traccianti IR-DIM<br />Munizioni: 30<br />In uso su: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Italian>
|
||||
<Russian>Калибр: 5,56x45 мм ИК-трассирующие<br />Патронов: 30<br />Используются с: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Russian>
|
||||
@ -288,7 +288,7 @@
|
||||
<Spanish>Calibre: 7,62x51mm Trazadora<br />Balas: 20<br />Se usa en: Mk18 ABR</Spanish>
|
||||
<French>Calibre: 7,62x51mm Traçantes<br />Cartouches: 20<br />Utilisé avec: EBR</French>
|
||||
<Polish>Kaliber: 7,62x51mm Smugacz<br />Pociski: 20<br />Używane w: Mk18 ABR</Polish>
|
||||
<Czech>Ráže: 7.62x51mm Svítící<br />Munice: 20<br />Použití: Mk18 ABR</Czech>
|
||||
<Czech>Ráže: 7.62x51mm Svítící<br />Nábojů: 20<br />Použití u: Mk14 Mod 1 EBR</Czech>
|
||||
<Portuguese>Calibre: 7,62x51mm Traçante<br />Projéteis: 20<br />Usado em: Mk18 ABR</Portuguese>
|
||||
<Italian>Calibro: 7.62x51mm Traccianti<br />Munizioni: 20<br />In uso su: Mk18 ABR</Italian>
|
||||
<Russian>Калибр: 7,62x51 мм трассирующие<br />Патронов: 20<br />Используются с: Mk18 ABR</Russian>
|
||||
@ -324,7 +324,7 @@
|
||||
<Spanish>Calibre: 7,62x51mm Trazadoras IR-DIM<br />Balas: 20<br />Se usa en: Mk18 ABR</Spanish>
|
||||
<French>Calibre: 7,62x51mm Traçantes IR-DIM<br />Cartouches: 20<br />Utilisé avec: EBR</French>
|
||||
<Polish>Kaliber: 7,62x51mm Smugacz IR-DIM<br />Pociski: 20<br />Używane w: Mk18 ABR</Polish>
|
||||
<Czech>Ráže: 7.62x51mm Svítící IR-DIM<br />Munice: 20<br />Použití: Mk18 ABR</Czech>
|
||||
<Czech>Ráže: 7.62x51mm Svítící IR-DIM<br />Nábojů: 20<br />Použití u: Mk14 Mod 1 EBR</Czech>
|
||||
<Portuguese>Calibre: 7,62x51mm Traçante IR-DIM<br />Projéteis: 20<br />Usado em: Mk18 ABR</Portuguese>
|
||||
<Italian>Calibro: 7.62x51mm Traccianti IR-DIM<br />Munizioni: 20<br />In uso su: Mk18 ABR</Italian>
|
||||
<Russian>Калибр: 7,62x51 мм ИК-трассирующие<br />Патронов: 20<br />Используются с: Mk18 ABR</Russian>
|
||||
@ -360,7 +360,7 @@
|
||||
<Spanish>Calibre: 7,62x51mm SD<br />Balas: 20<br />Se usa en: Mk18 ABR</Spanish>
|
||||
<French>Calibre: 7,62x51mm SD<br />Cartouches: 20<br />Utilisé avec: EBR</French>
|
||||
<Polish>Kaliber: 7,62x51mm SD<br />Pociski: 20<br />Używane w: Mk18 ABR</Polish>
|
||||
<Czech>Ráže: 7.62x51mm SD<br />Munice: 20<br />Použití: Mk18 ABR</Czech>
|
||||
<Czech>Ráže: 7.62x51mm SD<br />Nábojů: 20<br />Použití u: Mk14 Mod 1 EBR</Czech>
|
||||
<Portuguese>Calibre: 7,62x51mm SD<br />Projéteis: 20<br />Usado em: Mk18 ABR</Portuguese>
|
||||
<Italian>Calibro: 7.62x51mm Sil.<br />Munizioni: 20<br />In uso su: Mk18 ABR</Italian>
|
||||
<Russian>Калибр: 7,62x51 мм дозвуковые<br />Патронов: 20<br />Используются с: Mk18 ABR</Russian>
|
||||
@ -398,7 +398,7 @@
|
||||
<Spanish>Calibre: .338 Norma Magnum trazadora<br />Balas: 130<br />Se usa en: SPMG</Spanish>
|
||||
<Russian>Калибр: .338 Norma Magnum трассирующие<br />Патронов: 130<br />Используются в: SPMG</Russian>
|
||||
<Italian>Calibro: .338 Norma Magnum Tracciante<br />Munizioni: 130<br />In uso su: SPMG</Italian>
|
||||
<Czech>Ráže: .338 Noma Magnum Svítící<br />Munice: 130<br />Použití: SPMG</Czech>
|
||||
<Czech>Ráže: .338 Noma Magnum Svítící<br />Nábojů: 130<br />Použití u: LWMMG</Czech>
|
||||
<Portuguese>Calibre: .338 Norma Magnum Traçante<br />Cartuchos: 130<br />Usado em: SPMG</Portuguese>
|
||||
<Hungarian>Kaliber: .338 Norma Magnum nyomkövető<br />Lövedékek: 130<br />Használható: SPMG</Hungarian>
|
||||
</Key>
|
||||
@ -434,7 +434,7 @@
|
||||
<Spanish>Calibre: .338 Norma Magnum trazadora IR-DIM<br />Balas: 130<br />Se usa en: SPMG</Spanish>
|
||||
<Russian>Калибр: .338 Norma Magnum ИК-трассирующие<br />Патронов: 130<br />Используются с: SPMG</Russian>
|
||||
<Italian>Calibro: .338 Norma Magnum Tracciante IR-DIM<br />Munizioni: 130<br />In uso su: SPMG</Italian>
|
||||
<Czech>Ráže: .338 Noma Magnum Svítící IR-DIM<br />Munice: 130<br />Použití: SPMG</Czech>
|
||||
<Czech>Ráže: .338 Noma Magnum Svítící IR-DIM<br />Nábojů: 130<br />Použití u: LWMMG</Czech>
|
||||
<Portuguese>Calibre: .338 Norma Magnum Traçante IR-DIM<br />Cartuchos: 130<br />Usado em: SPMG</Portuguese>
|
||||
<Hungarian>Kaliber: .338 Norma Magnum infravörös nyomkövető<br />Lövedékek: 130<br />Használható: SPMG</Hungarian>
|
||||
</Key>
|
||||
@ -470,7 +470,7 @@
|
||||
<Spanish>Calibre: .338 Norma Magnum AP<br />Balas: 130<br />Se usa en: SPMG</Spanish>
|
||||
<Russian>Калибр: .338 Norma Magnum бронебойные<br />Патронов: 130<br />Используются с: SPMG</Russian>
|
||||
<Italian>Calibro: .338 Norma Magnum AP<br />Munizioni: 130<br />In uso su: SPMG</Italian>
|
||||
<Czech>Ráže: .338 Noma Magnum AP<br />Munice: 130<br />Použití: SPMG</Czech>
|
||||
<Czech>Ráže: .338 Noma Magnum AP<br />Nábojů: 130<br />Použití u: LWMMG</Czech>
|
||||
<Portuguese>Calibre: .338 Norma Magnum AP<br />Cartuchos: 130<br />Usado em: SPMG</Portuguese>
|
||||
<Hungarian>Kaliber: .338 Norma Magnum páncéltörő<br />Lövedékek: 130<br />Használható: SPMG</Hungarian>
|
||||
</Key>
|
||||
@ -507,7 +507,7 @@
|
||||
<Spanish>Calibre: 9.3x64mm trazadora<br />Balas: 10<br />Se usa en: Cyrus</Spanish>
|
||||
<Russian>Калибр: 9,3x64 мм трассирующие<br />Патронов: 10<br />Используются с: Cyrus</Russian>
|
||||
<Italian>Calibro: 9.3x64mm Tracer<br />Munizioni: 10<br />In uso su: Cyrus</Italian>
|
||||
<Czech>Ráže: 9.3x64mm Svítící<br />Munice: 10<br />Použití: Cyrus</Czech>
|
||||
<Czech>Ráže: 9.3x64mm Svítící<br />Nábojů: 10<br />Použití u: Cyrus</Czech>
|
||||
<Portuguese>Calibre: 9.3x64mm Traçante<br />Cartuchos: 10<br />Usado em: Cyrus</Portuguese>
|
||||
<Hungarian>Kaliber: 9,3x64mm nyomkövető<br />Lövedékek: 10<br />Használható: Cyrus</Hungarian>
|
||||
</Key>
|
||||
@ -543,7 +543,7 @@
|
||||
<Spanish>Calibre: 9.3x64mm trazadora IR-DIM<br />Balas: 10<br />Se usa en: Cyrus</Spanish>
|
||||
<Russian>Калибр: 9,3x64 мм ИК-трассирующие<br />Патронов: 10<br />Используются с: Cyrus</Russian>
|
||||
<Italian>Calibro: 9.3x64mm Tracciante IR-DIM<br />Munizioni: 10<br />In uso su: Cyrus</Italian>
|
||||
<Czech>Ráže: 9.3x64mm Svítící IR-DIM<br />Munice: 10<br />Použití: Cyrus</Czech>
|
||||
<Czech>Ráže: 9.3x64mm Svítící IR-DIM<br />Nábojů: 10<br />Použití u: Cyrus</Czech>
|
||||
<Portuguese>Calibre: 9.3x64mm Traçante IR-DIM<br />Cartuchos: 10<br />Usado em: Cyrus</Portuguese>
|
||||
<Hungarian>Kaliber: 9,3x64mm infravörös nyomkövető<br />Lövedékek: 10<br /> Használható: Cyrus</Hungarian>
|
||||
</Key>
|
||||
@ -580,7 +580,7 @@
|
||||
<Spanish>Calibre: 9.3x64mm trazadora<br />Balas: 150<br />Se usa en: Navid</Spanish>
|
||||
<Russian>Калибр: 9,3x64 мм трассирующие<br />Патронов: 150<br />Используются с: Навид</Russian>
|
||||
<Italian>Calibro: 9.3x64mm Tracciante<br />Munizioni: 150<br />In uso su: Navid</Italian>
|
||||
<Czech>Ráže: 9.3x64mm Svítící<br />Munice: 150<br />Použití: Navid</Czech>
|
||||
<Czech>Ráže: 9.3x64mm Svítící<br />Nábojů: 150<br />Použití u: HK121</Czech>
|
||||
<Portuguese>Calibre: 9.3x64mm Traçante<br />Cartuchos: 150<br />Usado em: Navid</Portuguese>
|
||||
<Hungarian>Kaliber: 9,3x64mm nyomkövető<br />Lövedékek: 150<br />Használható: Navid</Hungarian>
|
||||
</Key>
|
||||
@ -616,7 +616,7 @@
|
||||
<Spanish>Calibre: 9.3x64mm trazadora IR-DIM<br />Balas: 150<br />Se usa en: Navid</Spanish>
|
||||
<Russian>Калибр: 9,3x64 мм ИК-трассирующие<br />Патронов: 150<br />Используются с: Навид</Russian>
|
||||
<Italian>Calibro: 9.3x64mm Tracciante IR-DIM<br />Munizioni: 150<br />In uso su: Navid</Italian>
|
||||
<Czech>Ráže: 9.3x64mm Svítící IR-DIM<br />Munice: 150<br />Použití: Navid</Czech>
|
||||
<Czech>Ráže: 9.3x64mm Svítící IR-DIM<br />Nábojů: 150<br />Použití u: HK121</Czech>
|
||||
<Portuguese>Calibre: 9.3x64mm Traçante IR-DIM<br />Cartuchos: 150<br />Usado em: Navid</Portuguese>
|
||||
<Hungarian>Kaliber: 9,3x64mm infravörös nyomkövető<br />Lövedékek: 150<br />Használható: Navid</Hungarian>
|
||||
</Key>
|
||||
@ -652,7 +652,7 @@
|
||||
<Spanish>Calibre: 9.3x64mm AP<br />Balas: 150<br />Se usa en: Navid</Spanish>
|
||||
<Russian>Калибр: 9,3x64 мм бронебойные<br />Патронов: 150<br />Используются с: Навид</Russian>
|
||||
<Italian>Calibro: 9.3x64mm AP<br />Munizioni: 150<br />In uso su: Navid</Italian>
|
||||
<Czech>Ráže: 9.3x64mm AP<br />Munice: 150<br />Použití: Navid</Czech>
|
||||
<Czech>Ráže: 9.3x64mm AP<br />Nábojů: 150<br />Použití u: HK121</Czech>
|
||||
<Portuguese>Calibre: 9.3x64mm AP<br />Cartuchos: 150<br />Usado em: Navid</Portuguese>
|
||||
<Hungarian>Kaliber: 9,3x64mm páncéltörő<br />Lövedékek: 150<br />Használható: Navid</Hungarian>
|
||||
</Key>
|
||||
@ -796,7 +796,7 @@
|
||||
<Russian>Магазин из 100 6,5 мм ИК-трассирующих</Russian>
|
||||
<German>6,5mm 100-Patronen-Magazin IR-DIM Leuchtspur<br />Patronen: 100<br />Eingesetzt von: MXLSW</German>
|
||||
<Italian>6.5mm 100Rnd Tracer IR-DIM Mag<br />Munizioni: 100<br />In uso su: MX LSW</Italian>
|
||||
<Czech>6.5mm 100náb. Svítící IR-DIM Zásobník<br />Munice: 100<br />Použití: MX LSW</Czech>
|
||||
<Czech>6.5mm 100náb. Svítící IR-DIM Zásobník<br />Nábojů: 100<br />Použití u: MX LSW</Czech>
|
||||
<Portuguese>Carregador 6.5mm 100 Cartuchos Traçantes IR-DIM<br />Cartuchos: 100<br />Usado em: MX LSW</Portuguese>
|
||||
<Hungarian>6.5mm 100-lövedékes infravörös nyomkövető tár<br />Lövedékek: 100<br />Használható: MX LSW</Hungarian>
|
||||
</Key>
|
||||
@ -832,7 +832,7 @@
|
||||
<Russian>Магазин из 200-т 6,5 мм ИК-трассирующих</Russian>
|
||||
<German>6,5mm 200-Patronen-Gurt IR-DIM Leuchtspur<br />Patronen: 200<br />Eingesetzt von: Stoner 99 LMG</German>
|
||||
<Italian>6.5mm 200Rnd Tracer IR-DIM Belt<br />Munizioni: 200<br />In uso su: Stoner 99 LMG</Italian>
|
||||
<Czech>6.5mm 200náb. Svítící IR-DIM Pás<br />Munice: 200<br />Použití: Stoner 99 LMG</Czech>
|
||||
<Czech>6.5mm 200náb. Svítící IR-DIM Pás<br />Nábojů: 200<br />Použití u: Stoner 99 LMG</Czech>
|
||||
<Portuguese>Cinto de munição traçante 6.5mm IR-DIM com 200 cartuchos<br />Cartuchos: 200<br />Usado em: Stoner 99 LMG</Portuguese>
|
||||
<Hungarian>6.5mm 200-lövedékes infravörös nyomkövető heveder<br />Lövedékek: 200<br />Használható: Stoner 99 LMG</Hungarian>
|
||||
</Key>
|
||||
@ -868,7 +868,7 @@
|
||||
<Russian>Калибр: 5,56x45 мм NATO (Mk262)<br />Патронов: 30</Russian>
|
||||
<German>Kaliber: 5,56x45mm NATO (Mk262)<br />Patronen: 30</German>
|
||||
<Italian>Calibro: 5.56x45 mm NATO (Mk262)<br />Munizioni: 30</Italian>
|
||||
<Czech>Ráže: 5.56x45mm NATO (Mk262)<br />Munice: 30</Czech>
|
||||
<Czech>Ráže: 5.56x45mm NATO (Mk262)<br />Nábojů: 30</Czech>
|
||||
<Portuguese>Calibre: 5.56x45mm NATO (Mk262)<br/>Cartuchos: 30</Portuguese>
|
||||
<Hungarian>Kaliber: 5,56x45mm NATO (Mk262)<br />Lövedékek: 30</Hungarian>
|
||||
</Key>
|
||||
@ -904,7 +904,7 @@
|
||||
<Russian>Калибр: 5,56x45 мм NATO (Mk318)<br />Патронов: 30</Russian>
|
||||
<German>Kaliber: 5,56x45mm NATO (Mk318)<br />Patronen: 30</German>
|
||||
<Italian>Calibro: 5.56x45 mm NATO (Mk318)<br />Munizioni: 30</Italian>
|
||||
<Czech>Ráže: 5.56x45mm NATO (Mk318)<br />Munice: 30</Czech>
|
||||
<Czech>Ráže: 5.56x45mm NATO (Mk318)<br />Nábojů: 30</Czech>
|
||||
<Portuguese>Calibre: 5.56x45mm NATO (Mk318)<br/>Cartuchos: 30</Portuguese>
|
||||
<Hungarian>Kaliber: 5,56x45mm NATO (Mk318)<br />Lövedékek: 30</Hungarian>
|
||||
</Key>
|
||||
@ -940,7 +940,7 @@
|
||||
<Russian>Калибр: 5,56x45 мм NATO (M995 бронебойные)<br />Патронов: 30</Russian>
|
||||
<German>Kaliber: 5,56x45mm NATO (M995 AP)<br />Patronen: 30</German>
|
||||
<Italian>Calibro: 5.56x45 mm NATO (M995 AP)<br />Munizioni: 30</Italian>
|
||||
<Czech>Ráže: 5.56x45mm NATO (M995 AP)<br />Munice: 30</Czech>
|
||||
<Czech>Ráže: 5.56x45mm NATO (M995 AP)<br />Nábojů: 30</Czech>
|
||||
<Portuguese>Calibre: 5.56x45mm NATO (M995 AP)<br/>Cartuchos: 30</Portuguese>
|
||||
<Hungarian>Kaliber: 5,56x45mm NATO (M995 páncéltörő)<br />Lövedékek: 30</Hungarian>
|
||||
</Key>
|
||||
@ -976,7 +976,7 @@
|
||||
<Russian>Калибр: 7,62x51 мм NATO (M118LR)<br />Патронов: 10</Russian>
|
||||
<German>Kaliber: 7,62x51mm NATO (M118LR)<br />Patronen: 10</German>
|
||||
<Italian>Calibro: 7.62x51 mm NATO (M118LR)<br />Munizioni: 10</Italian>
|
||||
<Czech>Ráže: 7.62x51mm NATO (M118LR)<br />Munice: 10</Czech>
|
||||
<Czech>Ráže: 7.62x51mm NATO (M118LR)<br />Nábojů: 10</Czech>
|
||||
<Portuguese>Calibre: 7.26x51mm NATO (M118LR)<br/>Cartuchos: 10</Portuguese>
|
||||
<Hungarian>Kaliber: 7,62x51mm NATO (M118LR)<br />Lövedékek: 10</Hungarian>
|
||||
</Key>
|
||||
@ -1012,7 +1012,7 @@
|
||||
<Russian>Калибр: 7,62x51 мм NATO (M118LR)<br />Патронов: 20</Russian>
|
||||
<German>Kaliber: 7,62x51mm NATO (M118LR)<br />Patronen: 20</German>
|
||||
<Italian>Calibro: 7.62x51 mm NATO (M118LR)<br />Munizioni: 20</Italian>
|
||||
<Czech>Ráže: 7.62x51mm NATO (M118LR)<br />Munice: 20</Czech>
|
||||
<Czech>Ráže: 7.62x51mm NATO (M118LR)<br />Nábojů: 20</Czech>
|
||||
<Portuguese>Calibre: 7.26x51mm NATO (M118LR)<br/>Cartuchos: 20</Portuguese>
|
||||
<Hungarian>Kaliber: 7,62x51mm NATO (M118LR)<br />Lövedékek: 20</Hungarian>
|
||||
</Key>
|
||||
@ -1048,7 +1048,7 @@
|
||||
<Russian>Калибр: 7,62x51 мм NATO (Mk316 Mod 0)<br />Патронов: 10</Russian>
|
||||
<German>Kaliber: 7,62x51mm NATO (Mk316 Mod 0)<br />Patronen: 10</German>
|
||||
<Italian>Calibro: 7.62x51 mm NATO (Mk316 Mod 0)<br />Munizioni: 10</Italian>
|
||||
<Czech>Ráže: 7.62x51mm NATO (Mk316 Mod 0)<br />Munice: 10</Czech>
|
||||
<Czech>Ráže: 7.62x51mm NATO (Mk316 Mod 0)<br />Nábojů: 10</Czech>
|
||||
<Portuguese>Calibre: 7.26x51mm NATO (Mk316 Mod 0)<br/>Cartuchos: 10</Portuguese>
|
||||
<Hungarian>Kaliber: 7,62x51mm NATO (Mk316 Mod 0)<br />Lövedékek: 10</Hungarian>
|
||||
</Key>
|
||||
@ -1084,7 +1084,7 @@
|
||||
<Russian>Калибр: 7,62x51 мм NATO (Mk316 Mod 0)<br />Патронов: 20</Russian>
|
||||
<German>Kaliber: 7,62x51mm NATO (Mk316 Mod 0)<br />Patronen: 20</German>
|
||||
<Italian>Calibro: 7.62x51 mm NATO (Mk316 Mod 0)<br />Munizioni: 20</Italian>
|
||||
<Czech>Ráže: 7.62x51mm NATO (Mk316 Mod 0)<br />Munice: 20</Czech>
|
||||
<Czech>Ráže: 7.62x51mm NATO (Mk316 Mod 0)<br />Nábojů: 20</Czech>
|
||||
<Portuguese>Calibre: 7.26x51mm NATO (Mk316 Mod 0)<br/>Cartuchos: 20</Portuguese>
|
||||
<Hungarian>Kaliber: 7,62x51mm NATO (Mk316 Mod 0)<br />Lövedékek: 20</Hungarian>
|
||||
</Key>
|
||||
@ -1120,7 +1120,7 @@
|
||||
<Russian>Калибр: 7,62x51 мм NATO (Mk319 Mod 0)<br />Патронов: 10</Russian>
|
||||
<German>Kaliber: 7,62x51mm NATO (Mk319 Mod 0)<br />Patronen: 10</German>
|
||||
<Italian>Calibro: 7.62x51 mm NATO (Mk319 Mod 0)<br />Munizioni: 10</Italian>
|
||||
<Czech>Ráže: 7.62x51mm NATO (Mk319 Mod 0)<br />Munice: 10</Czech>
|
||||
<Czech>Ráže: 7.62x51mm NATO (Mk319 Mod 0)<br />Nábojů: 10</Czech>
|
||||
<Portuguese>Calibre: 7.26x51mm NATO (Mk319 Mod 0)<br/>Cartuchos: 10</Portuguese>
|
||||
<Hungarian>Kaliber: 7,62x51mm NATO (Mk319 Mod 0)<br />Lövedékek: 10</Hungarian>
|
||||
</Key>
|
||||
@ -1156,7 +1156,7 @@
|
||||
<Russian>Калибр: 7,62x51 мм NATO (Mk319 Mod 0)<br />Патронов: 20</Russian>
|
||||
<German>Kaliber: 7,62x51mm NATO (Mk319 Mod 0)<br />Patronen: 20</German>
|
||||
<Italian>Calibro: 7.62x51 mm NATO (Mk319 Mod 0)<br />Munizioni: 20</Italian>
|
||||
<Czech>Ráže: 7.62x51mm NATO (Mk319 Mod 0)<br />Munice: 20</Czech>
|
||||
<Czech>Ráže: 7.62x51mm NATO (Mk319 Mod 0)<br />Nábojů: 20</Czech>
|
||||
<Portuguese>Calibre: 7.26x51mm NATO (Mk319 Mod 0)<br/>Cartuchos: 20</Portuguese>
|
||||
<Hungarian>Kaliber: 7,62x51mm NATO (Mk319 Mod 0)<br />Lövedékek: 20</Hungarian>
|
||||
</Key>
|
||||
@ -1192,7 +1192,7 @@
|
||||
<Russian>Калибр: 7,62x51 мм NATO (M993 бронебойные)<br />Патронов: 10</Russian>
|
||||
<German>Kaliber: 7,62x51mm NATO (M993 AP)<br />Patronen: 10</German>
|
||||
<Italian>Calibro: 7.62x51 mm NATO (M993 AP)<br />Munizioni: 10</Italian>
|
||||
<Czech>Ráže: 7.62x51mm NATO (M993 AP)<br />Munice: 10</Czech>
|
||||
<Czech>Ráže: 7.62x51mm NATO (M993 AP)<br />Nábojů: 10</Czech>
|
||||
<Portuguese>Calibre: 7.26x51mm NATO (M993 AP)<br/>Cartuchos: 10</Portuguese>
|
||||
<Hungarian>Kaliber: 7,62x51mm NATO (M993 páncéltörő)<br />Lövedékek: 10</Hungarian>
|
||||
</Key>
|
||||
@ -1228,7 +1228,7 @@
|
||||
<German>Kaliber: 7,62x51mm NATO (M993 AP)<br />Patronen: 20</German>
|
||||
<Italian>Calibro: 7.62x51 mm NATO (M993 AP)<br />Munizioni: 20</Italian>
|
||||
<Spanish>Calibre: 7.62x51 mm NATO (M993 AP)<br />Balas: 20</Spanish>
|
||||
<Czech>Ráže: 7.62x51mm NATO (M993 AP)<br />Munice: 20</Czech>
|
||||
<Czech>Ráže: 7.62x51mm NATO (M993 AP)<br />Nábojů: 20</Czech>
|
||||
<Portuguese>Calibre: 7.26x51mm NATO (M993 AP)<br/>Cartuchos: 20</Portuguese>
|
||||
<Hungarian>Kaliber: 7,62x51mm NATO (M993 páncéltörő)<br />Lövedékek: 20</Hungarian>
|
||||
</Key>
|
||||
@ -1264,7 +1264,7 @@
|
||||
<Russian>Калибр: 7,62x67 мм NATO (Mk248 Mod 0)<br />Патронов: 20</Russian>
|
||||
<German>Kaliber: 7,62x51mm NATO (Mk248 Mod 0)<br />Patronen: 20</German>
|
||||
<Italian>Calibro: 7.62x67 mm NATO (Mk248 Mod 0)<br />Munizioni: 20</Italian>
|
||||
<Czech>Ráže: 7.62x67mm NATO (Mk248 Mod 0)<br />Munice: 20</Czech>
|
||||
<Czech>Ráže: 7.62x67mm NATO (Mk248 Mod 0)<br />Nábojů: 20</Czech>
|
||||
<Portuguese>Calibre: 7.26x67mm NATO (Mk248 Mod 0)<br/>Cartuchos: 20</Portuguese>
|
||||
<Hungarian>Kaliber: 7,62x51mm NATO (Mk248 Mod 0)<br />Lövedékek: 20</Hungarian>
|
||||
</Key>
|
||||
@ -1300,7 +1300,7 @@
|
||||
<Russian>Калибр: 7,62x67 мм NATO (Mk248 Mod 1)<br />Патронов: 20</Russian>
|
||||
<German>Kaliber: 7,62x51mm NATO (Mk248 Mod 1)<br />Patronen: 20</German>
|
||||
<Italian>Calibro: 7.62x67 mm NATO (Mk248 Mod 1)<br />Munizioni: 20</Italian>
|
||||
<Czech>Ráže: 7.62x67mm NATO (Mk248 Mod 1)<br />Munice: 20</Czech>
|
||||
<Czech>Ráže: 7.62x67mm NATO (Mk248 Mod 1)<br />Nábojů: 20</Czech>
|
||||
<Portuguese>Calibre: 7.26x67mm NATO (Mk248 Mod 1)<br/>Cartuchos: 20</Portuguese>
|
||||
<Hungarian>Kaliber: 7,62x51mm NATO (Mk248 Mod 1)<br />Lövedékek: 20</Hungarian>
|
||||
</Key>
|
||||
@ -1336,7 +1336,7 @@
|
||||
<Russian>Калибр: 7,62x67 мм NATO (Berger Hybrid OTM)<br />Патронов: 20</Russian>
|
||||
<German>Kaliber: 7,62x67mm NATO (Berger Hybrid OTM)<br />Patronen: 20</German>
|
||||
<Italian>Calibro: 7.62x67 mm NATO (Berger Hybrid OTM)<br />Munizioni: 20</Italian>
|
||||
<Czech>Ráže: 7.62x67mm NATO (Berger Hybrid OTM)<br />Munice: 20</Czech>
|
||||
<Czech>Ráže: 7.62x67mm NATO (Berger Hybrid OTM)<br />Nábojů: 20</Czech>
|
||||
<Portuguese>Calibre: 7.26x67mm NATO (Berger Hybrid OTM)<br/>Cartuchos: 20</Portuguese>
|
||||
<Hungarian>Kaliber: 7,62x67mm NATO (Berger Hybrid OTM)<br />Lövedékek: 20</Hungarian>
|
||||
</Key>
|
||||
@ -1372,7 +1372,7 @@
|
||||
<Russian>Калибр: 6,5x47 мм (экспансивные Scenar)<br />Патронов: 30<br />Используются с: MXM</Russian>
|
||||
<German>Kaliber: 6,5x47mm (HPBT Scenar)<br />Patronen: 30<br />Eingesetzt von: MXM</German>
|
||||
<Italian>Calibro: 6.5x47mm (HPBT Scenar)<br />Munizioni: 30<br />In uso su: MXM</Italian>
|
||||
<Czech>Ráže: 6.5x47mm (HPBT Scenar)<br />Munice: 30<br />Použití: MXM</Czech>
|
||||
<Czech>Ráže: 6.5x47mm (HPBT Scenar)<br />Nábojů: 30<br />Použití u: MXM</Czech>
|
||||
<Portuguese>Calibre: 6.5x47mm (HPBT Scenar)<br/>Cartuchos: 30<br/>Usado em: MXM</Portuguese>
|
||||
<Hungarian>Kaliber: 6,5x47mm (HPBT Scenar)<br />Lövedékek: 30<br />Használható: MXM</Hungarian>
|
||||
</Key>
|
||||
@ -1408,7 +1408,7 @@
|
||||
<Italian>Calibro: 6.5mm Creedmor<br />Munizioni: 30<br />In uso su: MXM</Italian>
|
||||
<Spanish>Calibre: 6.5mm Creedmor<br />Balas: 30<br />Se usa en: MXM</Spanish>
|
||||
<Russian>Калибр: 6,5x47мм Creedmor<br />Патронов: 30<br />Используются c: MXM</Russian>
|
||||
<Czech>Ráže: 6.5x47mm Creedmor<br />Munice: 30<br />Použití: MXM</Czech>
|
||||
<Czech>Ráže: 6.5x47mm Creedmor<br />Nábojů: 30<br />Použití u: MXM</Czech>
|
||||
<Portuguese>Calibre: 6.5x47mm Creedmor<br/>Cartuchos: 30<br/>Usado em: MXM</Portuguese>
|
||||
<Hungarian>Kaliber: 6,5x47mm Creedmor<br />Lövedékek: 30<br />Használható: MXM</Hungarian>
|
||||
</Key>
|
||||
@ -1444,7 +1444,7 @@
|
||||
<Russian>Калибр: 8,6x70mm (300 гран Sierra MatchKing экспансивные)<br />Патронов: 10</Russian>
|
||||
<German>Kaliber: 8,6x70mm (300gr Sierra MatchKing HPBT)<br />Patronen: 10</German>
|
||||
<Italian>Calibro: 8.6x70mm (300gr Sierra MatchKing HPBT)<br />Munizioni: 10</Italian>
|
||||
<Czech>Ráže: 8.6x70mm (300gr Sierra MatchKing HPBT)<br />Munice: 10</Czech>
|
||||
<Czech>Ráže: 8.6x70mm (300gr Sierra MatchKing HPBT)<br />Nábojů: 10</Czech>
|
||||
<Portuguese>Calibre: 8.6x70mm (300gr Sierra MatchKing HPBT)<br/>Cartuchos: 10</Portuguese>
|
||||
<Hungarian>Kaliber: 8,6x70mm (300gr Sierra MatchKing HPBT)<br />Lövedékek: 10</Hungarian>
|
||||
</Key>
|
||||
@ -1480,7 +1480,7 @@
|
||||
<Russian>Калибр: 8,6x70 мм (API526)<br />Патронов: 10</Russian>
|
||||
<German>Kaliber: 8,6x70mm (API526)<br />Patronen: 10</German>
|
||||
<Italian>Calibro: 8.6x70mm (API526)<br />Munizioni: 10</Italian>
|
||||
<Czech>Ráže: 8.6x70mm (API526)<br />Munice: 10</Czech>
|
||||
<Czech>Ráže: 8.6x70mm (API526)<br />Nábojů: 10</Czech>
|
||||
<Portuguese>Calibre: 8.6x70mm (API526)<br/>Cartuchos: 10</Portuguese>
|
||||
<Hungarian>Kaliber: 8,6x70mm (API526)<br />Lövedékek: 10</Hungarian>
|
||||
</Key>
|
||||
@ -1516,7 +1516,7 @@
|
||||
<Russian>Калибр: 12,7x99 мм<br />Патронов: 5</Russian>
|
||||
<German>Kaliber: 12,7x99mm<br />Patronen: 5</German>
|
||||
<Italian>Calibro: 12.7x99mm<br />Munizioni: 5</Italian>
|
||||
<Czech>Ráže: 12.7x99mm<br />Munice: 5</Czech>
|
||||
<Czech>Ráže: 12.7x99mm<br />Nábojů: 5</Czech>
|
||||
<Portuguese>Calibre: 12.7x99mm<br/>Cartuchos: 5</Portuguese>
|
||||
<Hungarian>Kaliber: 12,7x99mm<br />Lövedékek: 5</Hungarian>
|
||||
</Key>
|
||||
@ -1552,7 +1552,7 @@
|
||||
<Russian>Калибр: 12,7x99 мм бронебойно-зажигательные<br />Патронов: 5</Russian>
|
||||
<German>Kaliber:12,7x99mm API<br />Patronen: 5</German>
|
||||
<Italian>Calibro: 12.7x99mm API<br />Munizioni: 5</Italian>
|
||||
<Czech>Ráže: 12.7x99mm API<br />Munice: 5</Czech>
|
||||
<Czech>Ráže: 12.7x99mm API<br />Nábojů: 5</Czech>
|
||||
<Portuguese>Calibre: 12.7x99mm API<br/>Cartuchos: 5</Portuguese>
|
||||
<Hungarian>Kaliber: 12,7x99mm API<br />Lövedékek: 5</Hungarian>
|
||||
</Key>
|
||||
@ -1588,7 +1588,7 @@
|
||||
<Russian>Калибр: 12,7x99 мм (A-MAX)<br />Патронов: 5</Russian>
|
||||
<Italian>Calibro: 12.7x99mm (AMAX)<br />Munizioni: 5</Italian>
|
||||
<German>Kaliber:12,7x99mm (AMAX)<br />Patronen: 5</German>
|
||||
<Czech>Ráže: 12.7x99mm (AMAX)<br />Munice: 5</Czech>
|
||||
<Czech>Ráže: 12.7x99mm (AMAX)<br />Nábojů: 5</Czech>
|
||||
<Portuguese>Calibre: 12.7x99mm (AMAX)<br/>Cartuchos: 5</Portuguese>
|
||||
<Hungarian>Kaliber: 12,7x99mm (AMAX)<br />Lövedékek: 5</Hungarian>
|
||||
</Key>
|
||||
@ -1602,6 +1602,7 @@
|
||||
<French>[ACE] Caisse de munitions</French>
|
||||
<Hungarian>[ACE] Lőszeres láda</Hungarian>
|
||||
<Russian>[ACE] Ящик с боеприпасами</Russian>
|
||||
<Italian>[ACE] Cassa munizioni</Italian>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
</Project>
|
30
addons/captives/CfgEden.hpp
Normal file
30
addons/captives/CfgEden.hpp
Normal 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;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
@ -1,3 +1,10 @@
|
||||
|
||||
class Extended_PreStart_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preStart));
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_PreInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preInit));
|
||||
@ -9,6 +16,13 @@ class Extended_PostInit_EventHandlers {
|
||||
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
|
||||
class Extended_GetIn_EventHandlers {
|
||||
class All {
|
||||
|
30
addons/captives/XEH_PREP.hpp
Normal file
30
addons/captives/XEH_PREP.hpp
Normal 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);
|
@ -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);
|
||||
["MoveInCaptive", {_this call FUNC(vehicleCaptiveMoveIn)}] 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);
|
||||
["isNotHandcuffed", {!(GETVAR(_this select 0,GVAR(isHandcuffed),false))}] call EFUNC(common,addCanInteractWithCondition);
|
||||
["isNotSurrendering", {!(GETVAR(_this select 0,GVAR(isSurrendering),false))}] call EFUNC(common,addCanInteractWithCondition);
|
||||
|
||||
["SettingsInitialized", {
|
||||
// Hold on a little bit longer to ensure anims will work
|
||||
[{
|
||||
GVAR(captivityEnabled) = true;
|
||||
}, [], 0.05] call EFUNC(common,waitAndExecute);
|
||||
}] call EFUNC(common,addEventHandler);
|
||||
|
@ -2,34 +2,8 @@
|
||||
|
||||
ADDON = false;
|
||||
|
||||
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);
|
||||
#include "XEH_PREP.hpp"
|
||||
|
||||
GVAR(captivityEnabled) = false;
|
||||
|
||||
ADDON = true;
|
||||
|
3
addons/captives/XEH_preStart.sqf
Normal file
3
addons/captives/XEH_preStart.sqf
Normal file
@ -0,0 +1,3 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
#include "XEH_PREP.hpp"
|
@ -17,3 +17,4 @@ class CfgPatches {
|
||||
#include "CfgMoves.hpp"
|
||||
#include "CfgVehicles.hpp"
|
||||
#include "CfgWeapons.hpp"
|
||||
#include "CfgEden.hpp"
|
@ -40,12 +40,12 @@ if (_respawn > 3) then {
|
||||
if (_unit getVariable [QGVAR(isHandcuffed), false]) then {
|
||||
[_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 {
|
||||
[_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 {
|
||||
_oldUnit setVariable [QGVAR(isEscorting), false, true];
|
||||
|
@ -17,15 +17,10 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["_unit","_zeusIsOpen"];
|
||||
|
||||
//set showHUD based on unit status:
|
||||
if (!_zeusIsOpen) then {
|
||||
if ((_unit getVariable [QGVAR(isHandcuffed), false]) || {_unit getVariable [QGVAR(isSurrendering), false]}) then {
|
||||
TRACE_1("Player Change (showHUD false)",_unit);
|
||||
["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;
|
||||
};
|
||||
if ((ACE_player getVariable [QGVAR(isHandcuffed), false]) || {ACE_player getVariable [QGVAR(isSurrendering), false]}) then {
|
||||
TRACE_1("Player Change (showHUD false)",ACE_player);
|
||||
["captive", [false, false, false, false, false, false, false, false]] call EFUNC(common,showHud);
|
||||
} else {
|
||||
TRACE_1("Player Change (showHUD true)",ACE_player);
|
||||
["captive", []] call EFUNC(common,showHud); //same as showHud true;
|
||||
};
|
||||
|
@ -22,13 +22,25 @@ TRACE_2("params",_unit,_state);
|
||||
if (!local _unit) exitWith {
|
||||
ERROR("running setHandcuffed on remote unit");
|
||||
};
|
||||
|
||||
if !(missionNamespace getVariable [QGVAR(captivityEnabled), false]) exitWith {
|
||||
// It's to soon to call this function, delay it
|
||||
if (EGVAR(common,settingsInitFinished)) then {
|
||||
// Settings are already initialized, but the small wait isn't over
|
||||
[DFUNC(setHandCuffed), _this, 0.05] call EFUNC(common,waitAndExecute);
|
||||
} else {
|
||||
// Settings are not initialized yet
|
||||
[DFUNC(setHandCuffed), _this] call EFUNC(common,runAfterSettingsInit);
|
||||
};
|
||||
};
|
||||
|
||||
if ((_unit getVariable [QGVAR(isHandcuffed), false]) isEqualTo _state) exitWith {
|
||||
ERROR("setHandcuffed: current state same as new");
|
||||
};
|
||||
|
||||
if (_state) then {
|
||||
_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
|
||||
[_unit, false] call FUNC(setSurrendered);
|
||||
@ -89,7 +101,7 @@ if (_state) then {
|
||||
}, [_unit], 0.01] call EFUNC(common,waitAndExecute);
|
||||
} else {
|
||||
_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
|
||||
private _animChangedEHID = _unit getVariable [QGVAR(handcuffAnimEHID), -1];
|
||||
|
@ -23,6 +23,17 @@ if (!local _unit) exitWith {
|
||||
ERROR("running surrender on remote unit");
|
||||
};
|
||||
|
||||
if !(missionNamespace getVariable [QGVAR(captivityEnabled), false]) exitWith {
|
||||
// It's to soon to call this function, delay it
|
||||
if (EGVAR(common,settingsInitFinished)) then {
|
||||
// Settings are already initialized, but the small wait isn't over
|
||||
[DFUNC(setSurrendered), _this, 0.05] call EFUNC(common,waitAndExecute);
|
||||
} else {
|
||||
// Settings are not initialized yet
|
||||
[DFUNC(setSurrendered), _this] call EFUNC(common,runAfterSettingsInit);
|
||||
};
|
||||
};
|
||||
|
||||
if ((_unit getVariable [QGVAR(isSurrendering), false]) isEqualTo _state) exitWith {
|
||||
ERROR("Surrender: current state same as new");
|
||||
};
|
||||
@ -33,7 +44,7 @@ if (_state) then {
|
||||
|
||||
_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 {
|
||||
["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);
|
||||
} else {
|
||||
_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
|
||||
private _animChangedEHID = _unit getVariable [QGVAR(surrenderAnimEHID), -1];
|
||||
|
@ -2,6 +2,9 @@
|
||||
#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_CAPTIVES
|
||||
#define DEBUG_MODE_FULL
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project name="ACE">
|
||||
<Package name="Captives">
|
||||
<Key ID="STR_ACE_Captives_SetCaptive">
|
||||
@ -7,7 +7,7 @@
|
||||
<Spanish>Tomar prisionero</Spanish>
|
||||
<French>Capturer le prisonnier</French>
|
||||
<Polish>Aresztuj</Polish>
|
||||
<Czech>Zajmout Osobu</Czech>
|
||||
<Czech>Zajmout osobu</Czech>
|
||||
<Italian>Arresta il prigioniero</Italian>
|
||||
<Portuguese>Tomar Prisioneiro</Portuguese>
|
||||
<Hungarian>Foglyul ejtés</Hungarian>
|
||||
@ -19,7 +19,7 @@
|
||||
<Spanish>Liberar prisionero</Spanish>
|
||||
<Polish>Wypuść więźnia</Polish>
|
||||
<French>Libérer le prisonnier</French>
|
||||
<Czech>Osvobodit Zajatce</Czech>
|
||||
<Czech>Osvobodit zajatce</Czech>
|
||||
<Italian>Libera il prigioniero</Italian>
|
||||
<Portuguese>Libertar Prisioneiro</Portuguese>
|
||||
<Hungarian>Fogoly szabadon engedése</Hungarian>
|
||||
@ -31,7 +31,7 @@
|
||||
<Spanish>Escoltar prisionero</Spanish>
|
||||
<Polish>Eskortuj więźnia</Polish>
|
||||
<French>Escorter le prisonnier</French>
|
||||
<Czech>Eskortovat Zajatce</Czech>
|
||||
<Czech>Eskortovat zajatce</Czech>
|
||||
<Italian>Scorta il Prigioniero</Italian>
|
||||
<Portuguese>Escoltar Prisioneiro</Portuguese>
|
||||
<Hungarian>Fogoly kísérése</Hungarian>
|
||||
@ -43,7 +43,7 @@
|
||||
<Spanish>Soltar prisionero</Spanish>
|
||||
<Polish>Anuluj eskortowanie</Polish>
|
||||
<French>Relâcher le prisonnier</French>
|
||||
<Czech>Uvolnit Zajatce</Czech>
|
||||
<Czech>Uvolnit zajatce</Czech>
|
||||
<Italian>Rilascia il Prigioniero</Italian>
|
||||
<Portuguese>Largar Prisioneiro</Portuguese>
|
||||
<Hungarian>Fogoly elengedése</Hungarian>
|
||||
@ -91,7 +91,7 @@
|
||||
<Polish>Opaska zaciskowa</Polish>
|
||||
<Spanish>Precinto</Spanish>
|
||||
<French>Serflex</French>
|
||||
<Czech>Stahovací Pásek</Czech>
|
||||
<Czech>Stahovací pásek</Czech>
|
||||
<Portuguese>Algema Plástica</Portuguese>
|
||||
<Italian>Fascietta</Italian>
|
||||
<Hungarian>Gyorskötöző</Hungarian>
|
||||
@ -167,6 +167,7 @@
|
||||
<French>Faire capituler l'unité</French>
|
||||
<Hungarian>Egység kapitulálása</Hungarian>
|
||||
<Russian>Заставить юнита сдаться</Russian>
|
||||
<Italian>Fai arrendere l'unità</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_ModuleSurrender_Description">
|
||||
<English>Sync a unit to make them surrender.<br />Source: ace_captives</English>
|
||||
@ -178,20 +179,25 @@
|
||||
<French>Synchronise une unité pour la rendre captive. <br/>Source: ace_captives</French>
|
||||
<Hungarian>Egység szinkronizálása, hogy kapituláljon.<br />Forrás: ace_captives</Hungarian>
|
||||
<Russian>Синхронизируйте с юнитами, чтобы заставить их сдаться в плен.<br />Источник: ace_captives</Russian>
|
||||
<Italian>Sincronizza una unità per farla arrendere.<br/>Fonte: ace_captives</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_ModuleHandcuffed_DisplayName">
|
||||
<English>Make Unit Handcuffed</English>
|
||||
<German>Einheit in Handschellen legen</German>
|
||||
<Polish>Skuj jednostkę</Polish>
|
||||
<Portuguese>Fazer unidade algemada</Portuguese>
|
||||
<Russian>Связать юнита</Russian>
|
||||
<Czech>Spoutat jednotku</Czech>
|
||||
<Italian>Metti manette all'unità</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_ModuleHandcuffed_Description">
|
||||
<English>Sync a unit to make them handcuffed.<br />Source: ace_captives</English>
|
||||
<German>Synchronisiere eine Einheit um sie in Handschellen zu legen.<br />Quelle: ace_captives</German>
|
||||
<Polish>Zsynchronizuj z jednostką, aby została skuta.<br />Źródło: ace_captives</Polish>
|
||||
<Portuguese>Sincronizar uma unidade para deixá-la algemada.<br/>Source: ace_captives</Portuguese>
|
||||
<Russian>Синхронизируйте с юнитами, чтобы сделать их связанными.<br />Источник: ace_captives</Russian>
|
||||
<Czech>Synchronizovat s jednotkou, která má být v poutech.<br />Zdroj: ace_captives</Czech>
|
||||
<Italian>Sincronizza un'unità per metterle le manette.<br/>Fonte: ace_captives</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_ModuleSettings_DisplayName">
|
||||
<English>Captives Settings</English>
|
||||
@ -203,6 +209,7 @@
|
||||
<French>Options de capitulation</French>
|
||||
<Hungarian>Fogoly-beállítások</Hungarian>
|
||||
<Russian>Настройки пленения</Russian>
|
||||
<Italian>Impostazioni Prigionieri</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_ModuleSettings_Description">
|
||||
<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>
|
||||
<Hungarian>Szabályozza a kapituláció és bilincselés beállításait</Hungarian>
|
||||
<Russian>Управляет настройками сдачи в плен и связывания</Russian>
|
||||
<Italian>Controlla le impostazioni per la resa e le manette</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_ModuleSettings_handcuffSide_name">
|
||||
<English>Can handcuff own side</English>
|
||||
@ -225,6 +233,7 @@
|
||||
<French>Peut libérer sa propre faction</French>
|
||||
<Hungarian>Saját oldal megbilincselhető</Hungarian>
|
||||
<Russian>Связать союзника</Russian>
|
||||
<Italian>Puoi ammanettare unità alleate</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_ModuleSettings_handcuffSide_description">
|
||||
<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>
|
||||
<Hungarian>A játékosok megkötözhetik-e a saját oldalukon lévő egységeket</Hungarian>
|
||||
<Russian>Разрешить игрокам связывать юнитов своей стороны</Russian>
|
||||
<Italian>I giocatori possono ammanettare unità alleate</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_ModuleSettings_allowSurrender_name">
|
||||
<English>Allow surrendering</English>
|
||||
@ -247,6 +257,7 @@
|
||||
<French>Permettre la capitulation</French>
|
||||
<Hungarian>Kapituláció engedélyezése</Hungarian>
|
||||
<Russian>Сдаться в плен</Russian>
|
||||
<Italian>Permetti Resa</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_ModuleSettings_allowSurrender_description">
|
||||
<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>
|
||||
<Hungarian>A játékosok megadhatják magukat a fegyverük elrakása után</Hungarian>
|
||||
<Russian>Игроки могут сдаться в плен после того, как уберут оружие</Russian>
|
||||
<Italian>I giocatori possono arrendersi dopo aver messo via le proprie armi</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_ModuleSettings_requireSurrender_name">
|
||||
<English>Require surrendering</English>
|
||||
@ -267,6 +279,7 @@
|
||||
<Russian>Требовать пленения</Russian>
|
||||
<Spanish>Requiere rendición</Spanish>
|
||||
<Czech>Vzdávání vyžadováno</Czech>
|
||||
<Italian>Richiedi Resa</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_ModuleSettings_requireSurrender_description">
|
||||
<English>Require Players to surrender before they can be arrested</English>
|
||||
@ -276,6 +289,7 @@
|
||||
<Russian>Требуется, чтобы игрок сдался в плен прежде, чем его можно будет связать</Russian>
|
||||
<Spanish>Requiere que los Jugadores se rindan antes de arrestarlos</Spanish>
|
||||
<Czech>Vyžaduje, aby se hráč nejdříve vzdal, poté může být spoután</Czech>
|
||||
<Italian>I giocatori devono arrendersi prima che possano essere arrestati</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_SurrenderOnly">
|
||||
<English>Surrendering only</English>
|
||||
@ -285,6 +299,7 @@
|
||||
<Russian>Только сдавшийся в плен</Russian>
|
||||
<Spanish>Solo rendición</Spanish>
|
||||
<Czech>Pouze vzdávání</Czech>
|
||||
<Italian>Solo Resa</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_SurrenderOrNoWeapon">
|
||||
<English>Surrendering or No weapon</English>
|
||||
@ -294,6 +309,7 @@
|
||||
<Russian>Сдавшийся или безоружный</Russian>
|
||||
<Spanish>Rendición o desarme</Spanish>
|
||||
<Czech>Vzdávání nebo beze zbraně</Czech>
|
||||
<Italian>Resa o senza armi</Italian>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -1,3 +1,10 @@
|
||||
|
||||
class Extended_PreStart_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preStart));
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_PreInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preInit));
|
||||
@ -12,7 +19,9 @@ class Extended_PostInit_EventHandlers {
|
||||
|
||||
class Extended_Killed_EventHandlers {
|
||||
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));
|
||||
};
|
||||
};
|
||||
class Land_PortableLight_single_F {
|
||||
class ADDON {
|
||||
init = QUOTE(_this call DFUNC(initObject));
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -1,5 +1,9 @@
|
||||
class CfgVehicles {
|
||||
class ACE_Module;
|
||||
class Logic;
|
||||
class Module_F: Logic {
|
||||
class ModuleDescription;
|
||||
};
|
||||
class ACE_Module: Module_F {};
|
||||
class ACE_moduleCargoSettings: ACE_Module {
|
||||
scope = 2;
|
||||
displayName = CSTRING(SettingsModule_DisplayName);
|
||||
@ -26,6 +30,33 @@ class CfgVehicles {
|
||||
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 Car: LandVehicle {
|
||||
@ -178,7 +209,7 @@ class CfgVehicles {
|
||||
GVAR(space) = 0;
|
||||
GVAR(hasCargo) = 0;
|
||||
};
|
||||
|
||||
|
||||
// boats
|
||||
class Ship;
|
||||
class Ship_F: Ship {
|
||||
@ -237,6 +268,13 @@ class CfgVehicles {
|
||||
GVAR(size) = 6;
|
||||
};
|
||||
|
||||
class Slingload_base_F: ReammoBox_F {};
|
||||
class CargoNet_01_base_F: Slingload_base_F { //Slingload pallets
|
||||
GVAR(size) = 6;
|
||||
};
|
||||
class Slingload_01_Base_F: Slingload_base_F { //Huron 20ft containers
|
||||
GVAR(canLoad) = 0;
|
||||
};
|
||||
// objects
|
||||
class RoadCone_F: ThingX {
|
||||
GVAR(size) = 1;
|
||||
@ -245,7 +283,7 @@ class CfgVehicles {
|
||||
class RoadBarrier_F: RoadCone_F {
|
||||
GVAR(size) = 2;
|
||||
};
|
||||
|
||||
|
||||
|
||||
class 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;
|
||||
};
|
||||
};
|
||||
|
BIN
addons/cargo/UI/Icon_Module_makeLoadable_ca.paa
Normal file
BIN
addons/cargo/UI/Icon_Module_makeLoadable_ca.paa
Normal file
Binary file not shown.
20
addons/cargo/XEH_PREP.hpp
Normal file
20
addons/cargo/XEH_PREP.hpp
Normal 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);
|
@ -4,14 +4,14 @@
|
||||
|
||||
["LoadCargo", {
|
||||
(_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
|
||||
_hint = [LSTRING(LoadingFailed), LSTRING(LoadedItem)] select _loaded;
|
||||
_itemName = getText (configFile >> "CfgVehicles" >> typeOf _item >> "displayName");
|
||||
_vehicleName = getText (configFile >> "CfgVehicles" >> typeOf _vehicle >> "displayName");
|
||||
private _hint = [LSTRING(LoadingFailed), LSTRING(LoadedItem)] select _loaded;
|
||||
private _itemName = getText (configFile >> "CfgVehicles" >> typeOf _item >> "displayName");
|
||||
private _vehicleName = getText (configFile >> "CfgVehicles" >> typeOf _vehicle >> "displayName");
|
||||
|
||||
["displayTextStructured", [[_hint, _itemName, _vehicleName], 3.0]] call EFUNC(common,localEvent);
|
||||
|
||||
@ -22,17 +22,17 @@
|
||||
}] call EFUNC(common,addEventHandler);
|
||||
|
||||
["UnloadCargo", {
|
||||
(_this select 0) params ["_item","_vehicle"];
|
||||
private ["_unloaded", "_itemClass", "_hint", "_itemName", "_vehicleName"];
|
||||
(_this select 0) params ["_item","_vehicle", ["_unloader", objNull]];
|
||||
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);
|
||||
|
||||
_itemClass = if (_item isEqualType "") then {_item} else {typeOf _item};
|
||||
private _itemClass = if (_item isEqualType "") then {_item} else {typeOf _item};
|
||||
|
||||
// Show hint as feedback
|
||||
_hint = [LSTRING(UnloadingFailed), LSTRING(UnloadedItem)] select _unloaded;
|
||||
_itemName = getText (configFile >> "CfgVehicles" >> _itemClass >> "displayName");
|
||||
_vehicleName = getText (configFile >> "CfgVehicles" >> typeOf _vehicle >> "displayName");
|
||||
private _hint = [LSTRING(UnloadingFailed), LSTRING(UnloadedItem)] select _unloaded;
|
||||
private _itemName = getText (configFile >> "CfgVehicles" >> _itemClass >> "displayName");
|
||||
private _vehicleName = getText (configFile >> "CfgVehicles" >> typeOf _vehicle >> "displayName");
|
||||
|
||||
["displayTextStructured", [[_hint, _itemName, _vehicleName], 3.0]] call EFUNC(common,localEvent);
|
||||
|
||||
|
@ -2,24 +2,9 @@
|
||||
|
||||
ADDON = false;
|
||||
|
||||
PREP(addCargoItem);
|
||||
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);
|
||||
#include "XEH_PREP.hpp"
|
||||
|
||||
GVAR(initializedItemClasses) = [];
|
||||
GVAR(initializedVehicleClasses) = [];
|
||||
|
||||
ADDON = true;
|
||||
|
3
addons/cargo/XEH_preStart.sqf
Normal file
3
addons/cargo/XEH_preStart.sqf
Normal file
@ -0,0 +1,3 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
#include "XEH_PREP.hpp"
|
@ -18,7 +18,7 @@
|
||||
*/
|
||||
#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);
|
||||
|
||||
for "_i" from 1 to _amount do {
|
||||
|
@ -17,11 +17,11 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["_player", "_object"];
|
||||
TRACE_2("params",_player,_object);
|
||||
|
||||
if (!([_player, _object, []] call EFUNC(common,canInteractWith))) exitWith {false};
|
||||
|
||||
private ["_nearestVehicle"];
|
||||
_nearestVehicle = [_player] call FUNC(findNearestVehicle);
|
||||
private _nearestVehicle = [_player] call FUNC(findNearestVehicle);
|
||||
|
||||
if (_nearestVehicle isKindOf "Cargo_Base_F" || isNull _nearestVehicle) then {
|
||||
{
|
||||
|
@ -18,11 +18,10 @@
|
||||
|
||||
params [["_item", "", [objNull,""]], "_vehicle"];
|
||||
|
||||
if (speed _vehicle > 1 || (((getPos _vehicle) select 2) > 3)) exitWith {false};
|
||||
|
||||
private ["_itemSize", "_validItem"];
|
||||
_itemSize = [_item] call FUNC(getSizeItem);
|
||||
if (speed _vehicle > 1 || {((getPos _vehicle) select 2) > 3}) exitWith {TRACE_1("vehicle not stable",_vehicle); false};
|
||||
|
||||
private _itemSize = [_item] call FUNC(getSizeItem);
|
||||
private _validItem = false;
|
||||
if (_item isEqualType "") then {
|
||||
_validItem =
|
||||
isClass (configFile >> "CfgVehicles" >> _item) &&
|
||||
|
@ -5,6 +5,7 @@
|
||||
* Arguments:
|
||||
* 0: loaded Object <OBJECT>
|
||||
* 1: Object <OBJECT>
|
||||
* 2: Unloader (player) <OPTIONAL><OBJECT>
|
||||
*
|
||||
* Return value:
|
||||
* Can be unloaded <BOOL>
|
||||
@ -16,30 +17,14 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["_item", "_vehicle"];
|
||||
private ["_loaded", "_itemClass", "_validVehiclestate", "_emptyPos"];
|
||||
params ["_item", "_vehicle", ["_unloader", objNull]];
|
||||
TRACE_2("params",_item,_vehicle);
|
||||
|
||||
_loaded = _vehicle getVariable [QGVAR(loaded), []];
|
||||
private _loaded = _vehicle getVariable [QGVAR(loaded), []];
|
||||
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;
|
||||
_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]);
|
||||
};
|
||||
};
|
||||
private _emptyPos = [_vehicle, _itemClass, _unloader] call EFUNC(common,findUnloadPosition);
|
||||
|
||||
if (!_validVehiclestate) exitWith {false};
|
||||
|
||||
(count _emptyPos != 0)
|
||||
(count _emptyPos) == 3
|
||||
|
@ -15,23 +15,21 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_loadCar", "_loadHelicopter", "_loadTank", "_loadShip", "_loadContainer"];
|
||||
|
||||
params ["_unit"];
|
||||
|
||||
_loadCar = nearestObject [_unit, "car"];
|
||||
private _loadCar = nearestObject [_unit, "car"];
|
||||
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};
|
||||
|
||||
_loadTank = nearestObject [_unit, "tank"];
|
||||
private _loadTank = nearestObject [_unit, "tank"];
|
||||
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};
|
||||
|
||||
_loadContainer = nearestObject [_unit,"Cargo_base_F"];
|
||||
private _loadContainer = nearestObject [_unit,"Cargo_base_F"];
|
||||
if (_unit distance _loadContainer <= MAX_LOAD_DISTANCE) exitWith {_loadContainer};
|
||||
|
||||
objNull
|
||||
|
@ -16,5 +16,6 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["_object"];
|
||||
// TRACE_1("params",_object);
|
||||
|
||||
_object getVariable [QGVAR(space), getNumber (configFile >> "CfgVehicles" >> typeOf _object >> QGVAR(space))]
|
||||
|
@ -16,22 +16,23 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["_item"];
|
||||
private ["_isVirtual","_itemClass","_config"];
|
||||
|
||||
scopeName "return";
|
||||
|
||||
_isVirtual = (_item isEqualType "");
|
||||
_itemClass = if (_isVirtual) then {_item} else {typeOf _item};
|
||||
_config = (configFile >> "CfgVehicles" >> _itemClass >> QGVAR(size));
|
||||
private _isVirtual = (_item isEqualType "");
|
||||
private _itemClass = if (_isVirtual) then {_item} else {typeOf _item};
|
||||
private _config = (configFile >> "CfgVehicles" >> _itemClass >> QGVAR(size));
|
||||
|
||||
if (_isVirtual) then {
|
||||
if (isNumber _config) then {
|
||||
(getNumber _config) breakOut "return";
|
||||
};
|
||||
} 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 {
|
||||
(_item getVariable [QGVAR(size), getNumber _config]) breakOut "return";
|
||||
(getNumber _config) breakOut "return";
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Author: Glowbal
|
||||
* Handle object being destroyed.
|
||||
* Handle object being destroyed. Only runs on server.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Object <OBJECT>
|
||||
@ -16,10 +16,9 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["_vehicle"];
|
||||
TRACE_1("params",_vehicle);
|
||||
|
||||
private["_loaded"];
|
||||
|
||||
_loaded = _vehicle getVariable [QGVAR(loaded), []];
|
||||
private _loaded = _vehicle getVariable [QGVAR(loaded), []];
|
||||
if (_loaded isEqualTo []) exitWith {};
|
||||
|
||||
{
|
||||
@ -27,6 +26,7 @@ if (_loaded isEqualTo []) exitWith {};
|
||||
if (_x isEqualType objNull) then {
|
||||
deleteVehicle _x;
|
||||
};
|
||||
nil
|
||||
} count _loaded;
|
||||
|
||||
[_vehicle] call FUNC(validateCargoSpace);
|
||||
|
@ -16,15 +16,31 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["_object"];
|
||||
private _type = typeOf _object;
|
||||
TRACE_2("params",_object,_type);
|
||||
|
||||
if (getNumber (configFile >> "CfgVehicles" >> typeOf _object >> QGVAR(canLoad)) != 1) exitWith {};
|
||||
|
||||
private ["_type", "_action"];
|
||||
_type = typeOf _object;
|
||||
if ((_object getVariable [QGVAR(canLoad), getNumber (configFile >> "CfgVehicles" >> _type >> QGVAR(canLoad))]) != 1) exitWith {};
|
||||
|
||||
// do nothing if the class is already initialized
|
||||
if (_type in GVAR(initializedItemClasses)) exitWith {};
|
||||
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);
|
||||
|
||||
|
@ -18,9 +18,7 @@
|
||||
params ["_vehicle"];
|
||||
TRACE_1("params", _vehicle);
|
||||
|
||||
private ["_type", "_initializedClasses"];
|
||||
_type = typeOf _vehicle;
|
||||
_initializedClasses = GETMVAR(GVAR(initializedClasses),[]);
|
||||
private _type = typeOf _vehicle;
|
||||
|
||||
if (isServer) then {
|
||||
{
|
||||
@ -35,21 +33,24 @@ if (isServer) then {
|
||||
};
|
||||
|
||||
// do nothing if the class is already initialized
|
||||
if (_type in _initializedClasses) exitWith {};
|
||||
if (_type in GVAR(initializedVehicleClasses)) exitWith {};
|
||||
// set class as initialized
|
||||
_initializedClasses pushBack _type;
|
||||
SETMVAR(GVAR(initializedClasses),_initializedClasses);
|
||||
GVAR(initializedVehicleClasses) pushBack _type;
|
||||
|
||||
if (!hasInterface) exitWith {};
|
||||
if (getNumber (configFile >> "CfgVehicles" >> _type >> QGVAR(hasCargo)) != 1) exitWith {};
|
||||
|
||||
private ["_text", "_condition", "_statement", "_icon", "_action"];
|
||||
_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 = "";
|
||||
TRACE_1("Adding unload cargo action to class", _type);
|
||||
|
||||
_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);
|
||||
|
@ -6,7 +6,6 @@
|
||||
* Arguments:
|
||||
* 0: Item <OBJECT or STRING>
|
||||
* 1: Vehicle <OBJECT>
|
||||
* 2: Show Hint <BOOL> (default: true)
|
||||
*
|
||||
* Return value:
|
||||
* Object loaded <BOOL>
|
||||
@ -19,18 +18,18 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
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;
|
||||
_vehicle setVariable [QGVAR(loaded), _loaded, true];
|
||||
|
||||
TRACE_1("added to loaded array",_loaded);
|
||||
|
||||
_space = [_vehicle] call FUNC(getCargoSpaceLeft);
|
||||
_itemSize = [_item] call FUNC(getSizeItem);
|
||||
private _space = [_vehicle] call FUNC(getCargoSpaceLeft);
|
||||
private _itemSize = [_item] call FUNC(getSizeItem);
|
||||
_vehicle setVariable [QGVAR(space), _space - _itemSize, true];
|
||||
|
||||
if (_item isEqualType objNull) then {
|
||||
|
47
addons/cargo/functions/fnc_makeLoadable.sqf
Normal file
47
addons/cargo/functions/fnc_makeLoadable.sqf
Normal 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
|
34
addons/cargo/functions/fnc_moduleMakeLoadable.sqf
Normal file
34
addons/cargo/functions/fnc_moduleMakeLoadable.sqf
Normal 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;
|
@ -19,7 +19,7 @@
|
||||
|
||||
if (!isServer) exitWith {};
|
||||
|
||||
params ["_logic", "_units", "_activated"];
|
||||
params ["_logic", "", "_activated"];
|
||||
|
||||
if (!_activated) exitWith {};
|
||||
|
||||
|
@ -22,25 +22,24 @@ params ["_display"];
|
||||
uiNamespace setVariable [QGVAR(menuDisplay), _display];
|
||||
|
||||
[{
|
||||
private ["_display","_loaded", "_ctrl", "_class", "_label"];
|
||||
disableSerialization;
|
||||
_display = uiNamespace getVariable QGVAR(menuDisplay);
|
||||
private _display = uiNamespace getVariable QGVAR(menuDisplay);
|
||||
if (isnil "_display") exitWith {
|
||||
[_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;
|
||||
[_this select 1] call CBA_fnc_removePerFrameHandler;
|
||||
};
|
||||
|
||||
_loaded = GVAR(interactionVehicle) getVariable [QGVAR(loaded), []];
|
||||
_ctrl = _display displayCtrl 100;
|
||||
_label = _display displayCtrl 2;
|
||||
private _loaded = GVAR(interactionVehicle) getVariable [QGVAR(loaded), []];
|
||||
private _ctrl = _display displayCtrl 100;
|
||||
private _label = _display displayCtrl 2;
|
||||
|
||||
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"));
|
||||
true
|
||||
} count _loaded;
|
||||
|
@ -3,38 +3,46 @@
|
||||
* Start load item.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Object <OBJECT>
|
||||
* 0: Player <OBJECT>
|
||||
* 1: Object <OBJECT>
|
||||
*
|
||||
* Return value:
|
||||
* Object loaded <BOOL>
|
||||
* Load ProgressBar Started <BOOL>
|
||||
*
|
||||
* Example:
|
||||
* [object] call ace_cargo_fnc_starLoadIn
|
||||
* [player, cursorTarget] call ace_cargo_fnc_startLoadIn
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
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};
|
||||
} 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
|
||||
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);
|
||||
_return = true;
|
||||
} 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);
|
||||
};
|
||||
|
||||
_return
|
||||
|
@ -15,34 +15,29 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_display", "_loaded", "_ctrl", "_selected", "_item"];
|
||||
|
||||
disableSerialization;
|
||||
|
||||
_display = uiNamespace getVariable QGVAR(menuDisplay);
|
||||
private _display = uiNamespace getVariable QGVAR(menuDisplay);
|
||||
if (isNil "_display") exitWith {};
|
||||
|
||||
_loaded = GVAR(interactionVehicle) getVariable [QGVAR(loaded), []];
|
||||
if (count _loaded == 0) exitWith {};
|
||||
private _loaded = GVAR(interactionVehicle) getVariable [QGVAR(loaded), []];
|
||||
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 {};
|
||||
_item = _loaded select _selected;
|
||||
|
||||
private _item = _loaded select _selected; //This can be an object or a classname string
|
||||
|
||||
// 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 {
|
||||
_size = [_item] call FUNC(getSizeItem);
|
||||
|
||||
[5 * _size, [_item, GVAR(interactionVehicle)], "UnloadCargo", {}, localize LSTRING(UnloadingItem)] call EFUNC(common,progressBar);
|
||||
[5 * _size, [_item, GVAR(interactionVehicle), ACE_player], "UnloadCargo", {}, localize LSTRING(UnloadingItem), {true}, ["isNotSwimming"]] call EFUNC(common,progressBar);
|
||||
} else {
|
||||
_itemClass = if (_item isEqualType "") then {_item} else {typeOf _item};
|
||||
_displayName = getText (configFile >> "CfgVehicles" >> _itemClass >> "displayName");
|
||||
private _itemClass = if (_item isEqualType "") then {_item} else {typeOf _item};
|
||||
private _displayName = getText (configFile >> "CfgVehicles" >> _itemClass >> "displayName");
|
||||
|
||||
["displayTextStructured", [[LSTRING(UnloadingFailed), _displayName], 3.0]] call EFUNC(common,localEvent);
|
||||
};
|
||||
|
@ -16,53 +16,45 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["_item", "_vehicle"];
|
||||
private ["_loaded", "_space", "_itemSize", "_emptyPos", "_validVehiclestate"];
|
||||
params ["_item", "_vehicle", ["_unloader", objNull]];
|
||||
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
|
||||
};
|
||||
|
||||
_itemClass = if (_item isEqualType "") then {_item} else {typeOf _item};
|
||||
private _loaded = _vehicle getVariable [QGVAR(loaded), []];
|
||||
|
||||
_validVehiclestate = true;
|
||||
_emptyPos = [];
|
||||
if (_vehicle isKindOf "Ship" ) then {
|
||||
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]);
|
||||
};
|
||||
if !(_item in _loaded) exitWith {
|
||||
ACE_LOGERROR_3("Tried to unload item [%1] not in vehicle[%2] cargo[%3]", _item, _vehicle, _loaded);
|
||||
false
|
||||
};
|
||||
|
||||
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);
|
||||
_vehicle setVariable [QGVAR(loaded), _loaded, true];
|
||||
|
||||
_space = [_vehicle] call FUNC(getCargoSpaceLeft);
|
||||
_itemSize = [_item] call FUNC(getSizeItem);
|
||||
private _space = [_vehicle] call FUNC(getCargoSpaceLeft);
|
||||
private _itemSize = [_item] call FUNC(getSizeItem);
|
||||
_vehicle setVariable [QGVAR(space), (_space + _itemSize), true];
|
||||
|
||||
if (_item isEqualType objNull) then {
|
||||
detach _item;
|
||||
_item setPosASL (_emptyPos call EFUNC(common,PositiontoASL));
|
||||
_item setPosASL (AGLtoASL _emptyPosAGL);
|
||||
["hideObjectGlobal", [_item, false]] call EFUNC(common,serverEvent);
|
||||
} else {
|
||||
createVehicle [_item, _emptyPos, [], 0, ""];
|
||||
private _newItem = createVehicle [_item, _emptyPosAGL, [], 0, ""];
|
||||
_newItem setPosASL (AGLtoASL _emptyPosAGL);
|
||||
};
|
||||
|
||||
true
|
||||
|
@ -15,14 +15,13 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_loaded", "_newLoaded", "_totalSpaceOccupied"];
|
||||
|
||||
params ["_vehicle"];
|
||||
TRACE_1("params",_vehicle);
|
||||
|
||||
_loaded = _vehicle getVariable [QGVAR(loaded), []];
|
||||
private _loaded = _vehicle getVariable [QGVAR(loaded), []];
|
||||
|
||||
_newLoaded = [];
|
||||
_totalSpaceOccupied = 0;
|
||||
private _newLoaded = [];
|
||||
private _totalSpaceOccupied = 0;
|
||||
{
|
||||
if ((_x isEqualType "") || {!isNull _x}) then {
|
||||
_newLoaded pushback _x;
|
||||
|
@ -2,6 +2,9 @@
|
||||
#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_CARGO
|
||||
#define DEBUG_MODE_FULL
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user