Merge branch 'master' into tabCleanup

Conflicts:
	addons/explosives/functions/fnc_addClacker.sqf
	addons/explosives/functions/fnc_detonateExplosive.sqf
	addons/explosives/functions/fnc_getPlacedExplosives.sqf
	addons/explosives/functions/fnc_openDetonateUI.sqf
	addons/explosives/functions/fnc_openPlaceUI.sqf
	addons/explosives/functions/fnc_openTransmitterUI.sqf
	addons/explosives/functions/fnc_openTriggerSelectionUI.sqf
	addons/explosives/functions/fnc_placeExplosive.sqf
	addons/explosives/functions/fnc_place_Approve.sqf
	addons/explosives/functions/fnc_setPosition.sqf
This commit is contained in:
esteldunedain 2015-04-07 15:00:56 -03:00
commit 765ae4ee64
82 changed files with 2601 additions and 2417 deletions

Binary file not shown.

View File

@ -1,5 +1,19 @@
class CfgAmmo {
class BulletBase;
class B_20mm;
class ACE_20mm_HEDP : B_20mm {
hit = 80;
indirectHit = 12;
indirectHitRange = 2; //2;
caliber = 1.4;
tracerStartTime = 0.02;
timeToLive = 40;
explosive = 1.8;
};
// adjust minigun caliber and deflection to other ammo
class SubmunitionBullet;
class B_65x39_Minigun_Caseless: SubmunitionBullet {
@ -13,7 +27,6 @@ class CfgAmmo {
};
// also adjust tracer, "muh lightshow"; also adjust splash damage radius
class BulletBase;
class Gatling_30mm_HE_Plane_CAS_01_F: BulletBase {
hit = 80;
indirectHit = 12;
@ -22,6 +35,7 @@ class CfgAmmo {
deflecting = 3;
fuseDistance = 3;
tracerStartTime = 0.02;
timeToLive = 40;
};
// helper projectiles to simulate a rof > fps

View File

@ -10,6 +10,7 @@ class CfgMagazines {
// an extended magazine for the comanche
class 300Rnd_20mm_shells;
class ACE_500Rnd_20mm_shells_Comanche: 300Rnd_20mm_shells {
ammo = "ACE_20mm_HEDP";
count = 500;
};
};

View File

@ -54,24 +54,24 @@ class CfgWeapons {
class manual: manual {
reloadTime = 0.04;
dispersion = 0.0022;
dispersion = 0.006;
displayName = "$STR_ACE_Aircraft_gatling_20mm_Name";
};
class close: close {
reloadTime = 0.04;
dispersion = 0.0022;
dispersion = 0.006;
};
class short: short {
reloadTime = 0.04;
dispersion = 0.0022;
dispersion = 0.006;
};
class medium: medium {
reloadTime = 0.04;
dispersion = 0.0022;
dispersion = 0.006;
};
class far: far {
reloadTime = 0.04;
dispersion = 0.0022;
dispersion = 0.006;
};
};

View File

@ -863,12 +863,21 @@ class Heli_Attack_01_base_F: Helicopter_Base_F {
class Turrets: Turrets {
class MainTurret: MainTurret {
directionStabilized = 1;
horizontallyStabilized = 1;
weapons[] = {"ACE_gatling_20mm_Comanche","missiles_DAGR","missiles_ASRAAM", "ACE_AIR_SAFETY"};
magazines[] = {"ACE_500Rnd_20mm_shells_Comanche","4Rnd_AAA_missiles","24Rnd_PG_missiles"};
outGunnerMayFire = 1;
commanding = -1;
primaryGunner = 1;
gunnerOpticsModel = "";
gunnerOpticsEffect[] = {"TankCommanderOptics1"};
gunnerForceOptics = 0;
turretInfoType = "Rsc_ACE_Helo_UI_Turret";
showAllTargets = 2;
discretedistance[] = {100,200,300,400,500,600,700,800,900,1000,1100,1200,1300,1400,1500,1600,1700,1800,1900,2000,2100,2200,2300,2400,2500,2600,2700,2800,2900,3000};
discretedistanceinitindex = 3;
copilotHasFlares = 1;
directionStabilized = 1;
isCopilot = 1;
showHMD = 1;
CanEject = 1;
@ -882,25 +891,6 @@ class Heli_Attack_01_base_F: Helicopter_Base_F {
class OpticsIn
{
class WideNGS
{
opticsDisplayName = "W";
initAngleX = 0;
minAngleX = -35;
maxAngleX = 10;
initAngleY = 0;
minAngleY = -100;
maxAngleY = 100;
initFov = 0.466;
minFov = 0.466;
maxFov = 0.466;
visionMode[] = {"Normal","Ti"};
thermalMode[] = {0,1};
gunnerOpticsColor[] = {0.15,1,0.15,1};
gunnerOpticsModel = "A3\Weapons_F\Reticle\Optics_Gunner_MBT_03_w_F.p3d";
directionStabilized = 0;
opticsPPEffects[] = {"OpticsCHAbera2","OpticsBlur2"};
};
class Wide
{
opticsDisplayName = "W";
@ -913,54 +903,47 @@ class Heli_Attack_01_base_F: Helicopter_Base_F {
initFov = 0.466;
minFov = 0.466;
maxFov = 0.466;
visionMode[] = {"Normal","Ti"};
visionMode[] = {"Normal","NVG","Ti"};
thermalMode[] = {0,1};
gunnerOpticsColor[] = {0.15,1,0.15,1};
gunnerOpticsModel = "A3\Weapons_F\Reticle\Optics_Gunner_MBT_02_w_F.p3d";
directionStabilized = 1;
opticsPPEffects[] = {"OpticsCHAbera2","OpticsBlur2"};
gunnerOpticsEffect[] = {"TankCommanderOptics1"};
};
class WideL: Wide
{
opticsDisplayName = "WL";
initFov = 0.2;
minFov = 0.2;
maxFov = 0.2;
gunnerOpticsModel = "A3\Weapons_F\Reticle\Optics_Gunner_MBT_02_m_F.p3d";
gunnerOpticsColor[] = {0,0,0,1};
directionStabilized = 1;
opticsPPEffects[] = {"OpticsCHAbera2","OpticsBlur2"};
horizontallyStabilized = 1;
gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_wide_F";
};
class Medium: Wide
{
opticsDisplayName = "M";
initFov = 0.1;
minFov = 0.1;
maxFov = 0.1;
directionStabilized = 1;
initFov = 0.093;
minFov = 0.093;
maxFov = 0.093;
gunnerOpticsColor[] = {0,0,0,1};
gunnerOpticsModel = "A3\Weapons_F\Reticle\Optics_Gunner_MBT_02_m_F.p3d";
directionStabilized = 1;
horizontallyStabilized = 1;
gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_medium_F";
};
class Narrow: Wide
{
opticsDisplayName = "N";
initFov = 0.029;
minFov = 0.029;
maxFov = 0.029;
gunnerOpticsColor[] = {0,0,0,1};
gunnerOpticsModel = "A3\Weapons_F\Reticle\Optics_Gunner_MBT_02_n_F.p3d";
directionStabilized = 1;
initFov = 0.02;
minFov = 0.02;
maxFov = 0.02;
horizontallyStabilized = 1;
gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_narrow_F";
};
class Narrower: Wide
{
opticsDisplayName = "N";
gunnerOpticsColor[] = {0,0,0,1};
gunnerOpticsModel = "A3\Weapons_F\Reticle\Optics_Gunner_MBT_02_n_F.p3d";
directionStabilized = 1;
opticsDisplayName = "Z";
initFov = 0.01;
minFov = 0.01;
maxFov = 0.01;
gunnerOpticsColor[] = {0,0,0,1};
directionStabilized = 1;
horizontallyStabilized = 1;
gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_narrow_F";
};
};
class OpticsOut
@ -976,8 +959,7 @@ class Heli_Attack_01_base_F: Helicopter_Base_F {
initFov = 1.1;
minFov = 0.133;
maxFov = 1.1;
visionMode[] = {"Normal","NVG","Ti"};
thermalMode[] = {2,3};
visionMode[] = {"Normal","NVG"};
gunnerOpticsModel = "";
gunnerOpticsEffect[] = {};
hideUnitInfo = 1;

View File

@ -3,7 +3,7 @@ ace_aircraft
Changes to air weaponry, flightmodels and HUDs.
* Contributations by Kimi for HUD updates
* Contributations by Kimi (geraldbolso1899) for HUD updates
## Maintainers

View File

@ -8,13 +8,16 @@ class RscOpticsValue;
class VScrollbar;
class HScrollbar;
class RscLadderPicture;
class RscControlsGroupNoScrollbars;
class RscInGameUI
{
class RscUnitInfo;
class Rsc_ACE_Helo_UI_Turret: RscUnitInfo
{
idd = 300;
controls[] = {"CA_Zeroing","CA_IGUI_elements_group","CA_VehicleToggles"};
controls[] = {"CA_IGUI_elements_group","CA_VehicleToggles"};
class VScrollbar;
class HScrollbar;
class CA_IGUI_elements_group: RscControlsGroup

View File

@ -73,6 +73,7 @@ PREP(getStringFromMissionSQM);
PREP(getTargetAzimuthAndInclination);
PREP(getTargetDistance);
PREP(getTargetObject);
PREP(getTurnedOnLights);
PREP(getTurretCommander);
PREP(getTurretConfigPath);
PREP(getTurretCopilot);
@ -111,6 +112,7 @@ PREP(isModLoaded);
PREP(isPlayer);
PREP(isTurnedOut);
PREP(letterToCode);
PREP(lightIntensityFromObject);
PREP(loadPerson);
PREP(loadPersonLocal);
PREP(loadSettingsFromProfile);
@ -122,6 +124,7 @@ PREP(moveToTempGroup);
PREP(muteUnit);
PREP(numberToDigits);
PREP(numberToDigitsString);
PREP(numberToString);
PREP(onAnswerRequest);
PREP(onLoadRscDisplayChannel);
PREP(owned);
@ -188,6 +191,8 @@ PREP(getConfigGunner);
PREP(getConfigCommander);
PREP(getHitPoints);
PREP(getHitPointsWithSelections);
PREP(getReflectorsWithSelections);
PREP(getLightProperties);
PREP(getVehicleCrew);
// turrets

View File

@ -11,4 +11,4 @@
*/
#include "script_component.hpp"
sunOrMoon * sunOrMoon * (1 - overcast * 0.25) + (moonIntensity/5 min 1) * (1 - overcast)
(sunOrMoon * sunOrMoon * (1 - overcast * 0.25) + (moonIntensity/5) * (1 - overcast)) min 1

View File

@ -19,40 +19,35 @@ private ["_projectile", "_adjustDir", "_adjustUp", "_adjustSpeed", "_vdir", "_di
_projectile = _this select 0;
_adjustDir = _this select 1;
_adjustUp = _this select 2;
_adjustSpeed = _this select 3;
if (isNil "_adjustSpeed") then {
_adjustSpeed = 0;
_adjustSpeed = if (count _this > 3) then {
_this select 3
} else {
0
};
["CPD", [_fnc_scriptNameParent, _adjustDir, _adjustUp, _adjustSpeed], nil, false] call FUNC(log);
// get old direction vector
_vdir = vectorDir _projectile;
_vdir = vectorNormalized velocity _projectile;
// get azimuth and inclination and apply corrections
_dir = (_vdir select 0) atan2 (_vdir select 1) + _adjustDir;
_up = sqrt ((_vdir select 1) ^ 2 + (_vdir select 0) ^ 2) atan2 - (_vdir select 2) + _adjustUp;
_up = asin (_vdir select 2) + _adjustUp;
// get new direction vector (this is a unit vector)
_vdir = [
sin _dir * sin _up,
cos _dir * sin _up,
- cos _up
sin _dir * cos _up,
cos _dir * cos _up,
sin _up
];
// get best up vector
_l = sqrt ((_vdir select 0) ^ 2 + (_vdir select 1) ^ 2); if (_l == 0) then {diag_log text format ["[ACE] ERROR: %1, %2, %3, %4, %5, %6, %7", _projectile, _adjustDir, _adjustUp, vectorDir _projectile, _vdir, _dir, _up]};
_r = -(_vdir select 2) / _l;
_vup = [
(_vdir select 0) * _r,
(_vdir select 1) * _r,
_l
];
_vlat = vectorNormalized (_vdir vectorCrossProduct [0,0,1]);
_vup = _vlat vectorCrossProduct _vdir;
// get new speed vector. Keep total speed, but change to new direction. Yay for vector commands.
_vel = _vdir vectorMultiply _adjustSpeed + vectorMagnitude velocity _projectile;
_vel = _vdir vectorMultiply (_adjustSpeed + vectorMagnitude velocity _projectile);
// set projectile direction dir and up. Projectiles are long objects, especially with tracers, so it would look dumb otherwise.
_projectile setVectorDirAndUp [_vdir, _vup];

View File

@ -0,0 +1,63 @@
/*
* Author: commy2
* Read properties of given vehicles light.
*
* Arguments:
* 0: Object with lights (Object)
* 1: Light classname (String)
*
* Return Value:
* Stuff from config (Array)
*
*/
#include "script_component.hpp"
private ["_vehicle", "_light"];
_vehicle = _this select 0;
_light = _this select 1;
private "_config";
_config = configFile >> "CfgVehicles" >> typeOf _vehicle >> "Reflectors" >> _light;
private ["_intensity", "_position", "_direction", "_innerAngle", "_outerAngle"];
_intensity = getNumber (_config >> "intensity");
_position = getText (_config >> "position");
_direction = getText (_config >> "direction");
_innerAngle = getNumber (_config >> "innerAngle");
_outerAngle = getNumber (_config >> "outerAngle");
[_intensity, _position, _direction, _innerAngle, _outerAngle]
/*
class Reflectors
{
class Light_1
{
color[] = {1000,1000,1100};
ambient[] = {10,10,11};
intensity = 5;
size = 1;
innerAngle = 90;
outerAngle = 130;
coneFadeCoef = 2;
position = "Light_1_pos";
direction = "Light_1_dir";
hitpoint = "Light_1_hitpoint";
selection = "Light_1_hide";
useFlare = 1;
flareSize = 0.9;
flareMaxDistance = 85;
class Attenuation
{
start = 0;
constant = 0;
linear = 0;
quadratic = 0.9;
hardLimitStart = 40;
hardLimitEnd = 60;
};
};
};
*/

View File

@ -0,0 +1,45 @@
/*
* Author: commy2
*
* Returns all lighting hitpoints of any vehicle.
* Note: These are actual selections that are affected by setHit and getHit, not getHitPointDamage or setHitpointDamage.
* They behave like having an armor value of 0.
*
* Arguments:
* 0: A vehicle, not the classname (Object)
*
* Return Value:
* The light names and selections (Array)
*/
#include "script_component.hpp"
private ["_vehicle", "_config", "_hitpoints", "_selections"];
_vehicle = _this select 0;
_config = configFile >> "CfgVehicles" >> typeOf _vehicle;
_hitpoints = [];
_selections = [];
// iterate through all parents
while {isClass _config} do {
private "_class";
_class = _config >> "Reflectors";
for "_i" from 0 to (count _class - 1) do {
private ["_entry", "_selection"];
_entry = _class select _i;
_selection = getText (_entry >> "hitpoint");
if (!(_selection in _selections) && {!isNil {_vehicle getHit _selection}}) then {
_hitpoints pushBack configName _entry;
_selections pushBack _selection;
};
};
_config = inheritsFrom _config;
};
[_hitPoints, _selections]

View File

@ -0,0 +1,36 @@
/*
* Author: commy2
*
* Returns all turned on lights of any vehicle or streetlamp.
*
* Arguments:
* 0: A vehicle, not the classname (Object)
*
* Return Value:
* All burning lights (Array)
*/
#include "script_component.hpp"
private "_vehicle";
_vehicle = _this select 0;
if (!isLightOn _vehicle) exitWith {[]};
private ["_reflectorsWithSelections", "_lights", "_hitpoints"];
_reflectorsWithSelections = [_vehicle] call FUNC(getReflectorsWithSelections);
_lights = _reflectorsWithSelections select 0;
_hitpoints = _reflectorsWithSelections select 1;
private "_turnedOnLights";
_turnedOnLights = [];
{
if (_vehicle getHit _x <= 0.9) then {
_turnedOnLights pushBack (_lights select _forEachIndex);
};
} forEach _hitpoints;
_turnedOnLights

View File

@ -0,0 +1,56 @@
/*
* Author: commy2
* Calculate light intensity object 1 recieves from object 2
*
* Arguments:
* 0: Object that recieves light (Object)
* 1: Object that emits light (Object)
*
* Return Value:
* Brightest light level
*
*/
#include "script_component.hpp"
private ["_unit", "_lightSource"];
_unit = _this select 0;
_lightSource = _this select 1;
private "_unitPos";
_unitPos = _unit modelToWorld (_unit selectionPosition "spine3");
private ["_lights", "_lightLevel"];
_lights = [_lightSource] call FUNC(getTurnedOnLights);
_lightLevel = 0;
{
private ["_properties", "_intensity", "_innerAngle", "_outerAngle", "_position", "_direction", "_directionToUnit", "_distance", "_angle"];
_properties = [_lightSource, _x] call FUNC(getLightProperties);
// @todo intensity affects range?
//_intensity = _properties select 0;
_innerAngle = (_properties select 3) / 2;
_outerAngle = (_properties select 4) / 2;
// get world position and direction
_position = _lightSource modelToWorld (_lightSource selectionPosition (_properties select 1));
_direction = _lightSource modelToWorld (_lightSource selectionPosition (_properties select 2));
_direction = _position vectorFromTo _direction;
_directionToUnit = _position vectorFromTo _unitPos;
_distance = _unitPos distance _position;
_angle = acos (_direction vectorDotProduct _directionToUnit);
_lightLevel = _lightLevel max ((linearConversion [0, 30, _distance, 1, 0, true]) * (linearConversion [_innerAngle, _outerAngle, _angle, 1, 0, true]));
//systemChat format ["%1 %2", (linearConversion [0, 30, _distance, 1, 0, true]), (linearConversion [_innerAngle, _outerAngle, _angle, 1, 0, true])];
} forEach _lights;
_lightLevel

View File

@ -0,0 +1,25 @@
/*
* Author: commy2
*
* Converts a number to a string without losing as much precission as str or format.
*
* Argument:
* 0: A number (Number)
*
* Return value:
* The number as string (String)
*/
#include "script_component.hpp"
private ["_number", "_decimals"];
_number = _this select 0;
_decimals = str (abs(_number) mod 1);
_decimals = toArray _decimals;
_decimals deleteAt 0;
if (_number < 0) exitWith {
format ["-%1%2", floor abs(_number), toString _decimals];
};
format ["%1%2", floor _number, toString _decimals];

View File

@ -1,351 +1,349 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler - 2014-12-16 -->
<!-- Edited with tabler - 2015-04-06 -->
<Project name="ACE">
<Package name="Common">
<Key ID="STR_ACE_Common_ACETeam">
<English>ACE-Team</English>
<German>ACE-Team</German>
<Spanish>ACE-Team</Spanish>
<Polish>ACE-Team</Polish>
<Czech>ACE-Team</Czech>
<French>ACE-Team</French>
<Russian>Команда ACE</Russian>
<Portuguese>ACE-Team</Portuguese>
<Hungarian>ACE-Team</Hungarian>
<Italian>ACE-Team</Italian>
</Key>
<Key ID="STR_ACE_Common_Save">
<English>Save</English>
<German>Speichern</German>
<Spanish>Guardar</Spanish>
<Polish>Zapisz</Polish>
<Czech>Uložit</Czech>
<French>Sauvegarder</French>
<Russian>Сохранить</Russian>
<Portuguese>Salvar</Portuguese>
<Hungarian>Mentés</Hungarian>
<Italian>Salva</Italian>
</Key>
<Key ID="STR_ACE_Common_Cancel">
<English>Cancel</English>
<German>Abbrechen</German>
<Spanish>Cancelar</Spanish>
<Polish>Anuluj</Polish>
<Czech>Zrušit</Czech>
<French>Annuler</French>
<Russian>Отмена</Russian>
<Portuguese>Cancelar</Portuguese>
<Hungarian>Mégse</Hungarian>
<Italian>Annulla</Italian>
</Key>
<Key ID="STR_ACE_Common_Options">
<English>ACE Options</English>
<German>ACE Optionen</German>
<Spanish>Opciones ACE</Spanish>
<Polish>Opcje ACE</Polish>
<Czech>ACE Nastavení</Czech>
<French>ACE Options</French>
<Russian>ACE Настройки</Russian>
<Portuguese>Opções do ACE</Portuguese>
<Hungarian>ACE Opciók</Hungarian>
<Italian>Opzioni ACE</Italian>
</Key>
<!-- These are cardinal directions, in case you didn't guess. -->
<Key ID="STR_ACE_Common_N">
<English>N</English>
<German>N</German>
<Spanish>N</Spanish>
<Polish>N</Polish>
<Czech>S</Czech>
<French>N</French>
<Russian>С</Russian>
<Portuguese>N</Portuguese>
<Hungarian>É</Hungarian>
<Italian>N</Italian>
</Key>
<Key ID="STR_ACE_Common_NNE">
<English>NNE</English>
<German>NNO</German>
<Spanish>NNE</Spanish>
<Polish>NNE</Polish>
<Czech>SSV</Czech>
<French>NNE</French>
<Russian>ССВ</Russian>
<Portuguese>NNE</Portuguese>
<Hungarian>ÉÉK</Hungarian>
<Italian>NNE</Italian>
</Key>
<Key ID="STR_ACE_Common_NE">
<English>NE</English>
<German>NO</German>
<Spanish>NE</Spanish>
<Polish>NE</Polish>
<Czech>SV</Czech>
<French>NE</French>
<Russian>СВ</Russian>
<Portuguese>NE</Portuguese>
<Hungarian>ÉK</Hungarian>
<Italian>NE</Italian>
</Key>
<Key ID="STR_ACE_Common_ENE">
<English>ENE</English>
<German>ONO</German>
<Spanish>ENE</Spanish>
<Polish>ENE</Polish>
<Czech>VSV</Czech>
<French>ENE</French>
<Russian>ВСВ</Russian>
<Portuguese>LNE</Portuguese>
<Hungarian>KÉK</Hungarian>
<Italian>ENE</Italian>
</Key>
<Key ID="STR_ACE_Common_E">
<English>E</English>
<German>O</German>
<Spanish>E</Spanish>
<Polish>E</Polish>
<Czech>V</Czech>
<French>E</French>
<Russian>В</Russian>
<Portuguese>L</Portuguese>
<Hungarian>K</Hungarian>
<Italian>E</Italian>
</Key>
<Key ID="STR_ACE_Common_ESE">
<English>ESE</English>
<German>OSO</German>
<Spanish>ESE</Spanish>
<Polish>ESE</Polish>
<Czech>VJV</Czech>
<French>ESE</French>
<Russian>ВЮВ</Russian>
<Portuguese>LSE</Portuguese>
<Hungarian>KDK</Hungarian>
<Italian>ESE</Italian>
</Key>
<Key ID="STR_ACE_Common_SE">
<English>SE</English>
<German>SO</German>
<Spanish>SE</Spanish>
<Polish>SE</Polish>
<Czech>JV</Czech>
<French>SE</French>
<Russian>ЮВ</Russian>
<Portuguese>SE</Portuguese>
<Hungarian>DK</Hungarian>
<Italian>SE</Italian>
</Key>
<Key ID="STR_ACE_Common_SSE">
<English>SSE</English>
<German>SSO</German>
<Spanish>SSE</Spanish>
<Polish>SSE</Polish>
<Czech>JJV</Czech>
<French>SSE</French>
<Russian>ЮЮВ</Russian>
<Portuguese>SSE</Portuguese>
<Hungarian>DDK</Hungarian>
<Italian>SSE</Italian>
</Key>
<Key ID="STR_ACE_Common_S">
<English>S</English>
<German>S</German>
<Spanish>S</Spanish>
<Polish>S</Polish>
<Czech>J</Czech>
<French>S</French>
<Russian>Ю</Russian>
<Portuguese>S</Portuguese>
<Hungarian>D</Hungarian>
<Italian>S</Italian>
</Key>
<Key ID="STR_ACE_Common_SSW">
<English>SSW</English>
<German>SSW</German>
<Spanish>SSO</Spanish>
<Polish>SSW</Polish>
<Czech>JJZ</Czech>
<French>SSO</French>
<Russian>ЮЮЗ</Russian>
<Portuguese>SSO</Portuguese>
<Hungarian>DDNy</Hungarian>
<Italian>SSO</Italian>
</Key>
<Key ID="STR_ACE_Common_SW">
<English>SW</English>
<German>SW</German>
<Spanish>SO</Spanish>
<Polish>SW</Polish>
<Czech>JZ</Czech>
<French>SO</French>
<Russian>ЮЗ</Russian>
<Portuguese>SO</Portuguese>
<Hungarian>DNy</Hungarian>
<Italian>SO</Italian>
</Key>
<Key ID="STR_ACE_Common_WSW">
<English>WSW</English>
<German>WSW</German>
<Spanish>OSO</Spanish>
<Polish>WSW</Polish>
<Czech>ZJZ</Czech>
<French>OSO</French>
<Russian>ЗЮЗ</Russian>
<Portuguese>OSO</Portuguese>
<Hungarian>NyDNy</Hungarian>
<Italian>OSO</Italian>
</Key>
<Key ID="STR_ACE_Common_W">
<English>W</English>
<German>W</German>
<Spanish>O</Spanish>
<Polish>W</Polish>
<Czech>Z</Czech>
<French>O</French>
<Russian>З</Russian>
<Portuguese>O</Portuguese>
<Hungarian>Ny</Hungarian>
<Italian>O</Italian>
</Key>
<Key ID="STR_ACE_Common_WNW">
<English>WNW</English>
<German>WNW</German>
<Spanish>ONO</Spanish>
<Polish>WNW</Polish>
<Czech>ZSZ</Czech>
<French>ONO</French>
<Russian>ЗСЗ</Russian>
<Portuguese>ONO</Portuguese>
<Hungarian>NyÉNy</Hungarian>
<Italian>ONO</Italian>
</Key>
<Key ID="STR_ACE_Common_NW">
<English>NW</English>
<German>NW</German>
<Spanish>NO</Spanish>
<Polish>NW</Polish>
<Czech>SZ</Czech>
<French>NO</French>
<Russian>СЗ</Russian>
<Portuguese>NO</Portuguese>
<Hungarian>ÉNy</Hungarian>
<Italian>NO</Italian>
</Key>
<Key ID="STR_ACE_Common_NNW">
<English>NNW</English>
<German>NNW</German>
<Spanish>NNO</Spanish>
<Polish>NNW</Polish>
<Czech>SSZ</Czech>
<French>NNO</French>
<Russian>ССЗ</Russian>
<Portuguese>NNO</Portuguese>
<Hungarian>ÉÉNy</Hungarian>
<Italian>NNO</Italian>
</Key>
<Key ID="STR_ACE_Common_ActionAborted">
<English>Action cancelled.</English>
<German>Aktion abgebrochen.</German>
<Spanish>Acción cancelada.</Spanish>
<Polish>Przerwano czynność</Polish>
<Czech>Akce přerušena</Czech>
<French>Action annulée.</French>
<Russian>Действие отменено.</Russian>
<Portuguese>Ação cancelada.</Portuguese>
<Hungarian>Művelet megszakítva.</Hungarian>
<Italian>Azione cancellata.</Italian>
</Key>
<Key ID="STR_ACE_Common_MiscItems">
<English>[ACE] Miscellaneous Items</English>
<German>[ACE] Verschiedenes</German>
<Spanish>[ACE] Objetos varios</Spanish>
<Polish>[ACE] Różne przedmioty</Polish>
<Czech>[ACE] Ostatní předměty</Czech>
<French>[ACE] Objets divers</French>
<Russian>[ACE] Различные предметы</Russian>
<Portuguese>[ACE] Itens diversos</Portuguese>
<Hungarian>[ACE] Egyéb tárgyak</Hungarian>
<Italian>[ACE] Oggetti vari</Italian>
</Key>
<Key ID="STR_ACE_Common_EnableNumberHotkeys">
<English>Disable Command Menu</English>
<German>Befehlsmenü ausschalten</German>
<Spanish>Desactivar menú de mando</Spanish>
<Polish>Wyłącz menu dowodzenia</Polish>
<Czech>Vypnout velící menu</Czech>
<French>Désactiver Menu Commande</French>
<Russian>Выключить командное меню</Russian>
<Hungarian>Parancsnoki menü kikapcsolása</Hungarian>
</Key>
<Key ID="STR_ACE_Common_Unknown">
<English>Unknown</English>
<German>Unbekannt</German>
<Spanish>Desconocido</Spanish>
<Polish>Nieznany</Polish>
<Czech>Neznámý</Czech>
<Russian>Неизвестно</Russian>
<Hungarian>Ismeretlen</Hungarian>
</Key>
<Key ID="STR_ACE_Common_NoVoice">
<English>No Voice</English>
<German>Keine Stimme</German>
<Spanish>Sin voz</Spanish>
<Polish>Brak głosu</Polish>
<Czech>Žádný hlas</Czech>
<Russian>Без голоса</Russian>
<Hungarian>Nincs hang</Hungarian>
</Key>
<Key ID="STR_ACE_ACTION_ACCEPT_REQUEST_KEY_TITLE">
<Original>Accept Requests</Original>
<Polish>Akceptuj prośby</Polish>
<Spanish>Aceptar Peticiones</Spanish>
</Key>
<Key ID="STR_ACE_ACTION_DECLINE_REQUEST_KEY_TITLE">
<Original>Decline Requests</Original>
<Polish>Ignoruj prośby</Polish>
<Spanish>Rechazar Peticiones</Spanish>
</Key>
<Key ID="STR_ACE_ACTION_ACCEPT_REQUEST_KEY_TOOLTIP">
<Original>Accept Requests send by other players. These can be requests to use / share equipment, perform certain actions.</Original>
<Polish>Akceptuj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności.</Polish>
<Spanish>Acepta Peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones.</Spanish>
</Key>
<Key ID="STR_ACE_ACTION_DECLINE_REQUEST_KEY_TOOLTIP">
<Original>Decline Requests send by other players. These can be requests to use / share equipment, perform certain actions.</Original>
<Polish>Ignoruj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności.</Polish>
<Spanish>Rechazar Peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones.</Spanish>
</Key>
<Key ID="STR_ACE_Common_SettingFeedbackIconsName">
<English>Feedback icons</English>
</Key>
<Key ID="STR_ACE_Common_SettingFeedbackIconsDesc">
<English>Select the position of or disable the feedback icons on your screen. These icons will show to provide extra feedback on your character status and actions performed.</English>
</Key>
<Key ID="STR_ACE_Common_SettingProgressbarLocationName">
<English>Progress bar location</English>
</Key>
<Key ID="STR_ACE_Common_SettingProgressbarLocationDesc">
<English>Set the desired location of the progress bar on your screen.</English>
</Key>
<Key ID="STR_ACE_Common_SettingDisplayTextColorName">
<English>Hint Background color</English>
</Key>
<Key ID="STR_ACE_Common_SettingDisplayTextColorDesc">
<English>The color of the background from the ACE hints.</English>
</Key>
<Key ID="STR_ACE_Common_SettingDisplayTextFontColorName">
<English>Hint text font color</English>
</Key>
<Key ID="STR_ACE_Common_SettingDisplayTextFontColorDesc">
<English>The color of the text font from the ACE hints. This color is the default color for all text displayed through the ACE Hint system, if the hint text has no other color specified.</English>
</Key>
<Key ID="STR_ACE_Common_bananaDisplayName">
<English>Banana</English>
</Key>
<Key ID="STR_ACE_Common_bananaDescr">
<English>A banana is an edible fruit, botanically a berry, produced by several kinds of large herbaceous flowering plants in the genus Musa.</English>
</Key>
</Package>
<Package name="Common">
<Key ID="STR_ACE_Common_ACETeam">
<English>ACE-Team</English>
<German>ACE-Team</German>
<Spanish>ACE-Team</Spanish>
<Polish>ACE-Team</Polish>
<Czech>ACE-Team</Czech>
<French>ACE-Team</French>
<Russian>Команда ACE</Russian>
<Portuguese>ACE-Team</Portuguese>
<Hungarian>ACE-Team</Hungarian>
<Italian>ACE-Team</Italian>
</Key>
<Key ID="STR_ACE_Common_Save">
<English>Save</English>
<German>Speichern</German>
<Spanish>Guardar</Spanish>
<Polish>Zapisz</Polish>
<Czech>Uložit</Czech>
<French>Sauvegarder</French>
<Russian>Сохранить</Russian>
<Portuguese>Salvar</Portuguese>
<Hungarian>Mentés</Hungarian>
<Italian>Salva</Italian>
</Key>
<Key ID="STR_ACE_Common_Cancel">
<English>Cancel</English>
<German>Abbrechen</German>
<Spanish>Cancelar</Spanish>
<Polish>Anuluj</Polish>
<Czech>Zrušit</Czech>
<French>Annuler</French>
<Russian>Отмена</Russian>
<Portuguese>Cancelar</Portuguese>
<Hungarian>Mégse</Hungarian>
<Italian>Annulla</Italian>
</Key>
<Key ID="STR_ACE_Common_Options">
<English>ACE Options</English>
<German>ACE Optionen</German>
<Spanish>Opciones ACE</Spanish>
<Polish>Opcje ACE</Polish>
<Czech>ACE Nastavení</Czech>
<French>ACE Options</French>
<Russian>ACE Настройки</Russian>
<Portuguese>Opções do ACE</Portuguese>
<Hungarian>ACE Opciók</Hungarian>
<Italian>Opzioni ACE</Italian>
</Key>
<!-- These are cardinal directions, in case you didn't guess. -->
<Key ID="STR_ACE_Common_N">
<English>N</English>
<German>N</German>
<Spanish>N</Spanish>
<Polish>N</Polish>
<Czech>S</Czech>
<French>N</French>
<Russian>С</Russian>
<Portuguese>N</Portuguese>
<Hungarian>É</Hungarian>
<Italian>N</Italian>
</Key>
<Key ID="STR_ACE_Common_NNE">
<English>NNE</English>
<German>NNO</German>
<Spanish>NNE</Spanish>
<Polish>NNE</Polish>
<Czech>SSV</Czech>
<French>NNE</French>
<Russian>ССВ</Russian>
<Portuguese>NNE</Portuguese>
<Hungarian>ÉÉK</Hungarian>
<Italian>NNE</Italian>
</Key>
<Key ID="STR_ACE_Common_NE">
<English>NE</English>
<German>NO</German>
<Spanish>NE</Spanish>
<Polish>NE</Polish>
<Czech>SV</Czech>
<French>NE</French>
<Russian>СВ</Russian>
<Portuguese>NE</Portuguese>
<Hungarian>ÉK</Hungarian>
<Italian>NE</Italian>
</Key>
<Key ID="STR_ACE_Common_ENE">
<English>ENE</English>
<German>ONO</German>
<Spanish>ENE</Spanish>
<Polish>ENE</Polish>
<Czech>VSV</Czech>
<French>ENE</French>
<Russian>ВСВ</Russian>
<Portuguese>LNE</Portuguese>
<Hungarian>KÉK</Hungarian>
<Italian>ENE</Italian>
</Key>
<Key ID="STR_ACE_Common_E">
<English>E</English>
<German>O</German>
<Spanish>E</Spanish>
<Polish>E</Polish>
<Czech>V</Czech>
<French>E</French>
<Russian>В</Russian>
<Portuguese>L</Portuguese>
<Hungarian>K</Hungarian>
<Italian>E</Italian>
</Key>
<Key ID="STR_ACE_Common_ESE">
<English>ESE</English>
<German>OSO</German>
<Spanish>ESE</Spanish>
<Polish>ESE</Polish>
<Czech>VJV</Czech>
<French>ESE</French>
<Russian>ВЮВ</Russian>
<Portuguese>LSE</Portuguese>
<Hungarian>KDK</Hungarian>
<Italian>ESE</Italian>
</Key>
<Key ID="STR_ACE_Common_SE">
<English>SE</English>
<German>SO</German>
<Spanish>SE</Spanish>
<Polish>SE</Polish>
<Czech>JV</Czech>
<French>SE</French>
<Russian>ЮВ</Russian>
<Portuguese>SE</Portuguese>
<Hungarian>DK</Hungarian>
<Italian>SE</Italian>
</Key>
<Key ID="STR_ACE_Common_SSE">
<English>SSE</English>
<German>SSO</German>
<Spanish>SSE</Spanish>
<Polish>SSE</Polish>
<Czech>JJV</Czech>
<French>SSE</French>
<Russian>ЮЮВ</Russian>
<Portuguese>SSE</Portuguese>
<Hungarian>DDK</Hungarian>
<Italian>SSE</Italian>
</Key>
<Key ID="STR_ACE_Common_S">
<English>S</English>
<German>S</German>
<Spanish>S</Spanish>
<Polish>S</Polish>
<Czech>J</Czech>
<French>S</French>
<Russian>Ю</Russian>
<Portuguese>S</Portuguese>
<Hungarian>D</Hungarian>
<Italian>S</Italian>
</Key>
<Key ID="STR_ACE_Common_SSW">
<English>SSW</English>
<German>SSW</German>
<Spanish>SSO</Spanish>
<Polish>SSW</Polish>
<Czech>JJZ</Czech>
<French>SSO</French>
<Russian>ЮЮЗ</Russian>
<Portuguese>SSO</Portuguese>
<Hungarian>DDNy</Hungarian>
<Italian>SSO</Italian>
</Key>
<Key ID="STR_ACE_Common_SW">
<English>SW</English>
<German>SW</German>
<Spanish>SO</Spanish>
<Polish>SW</Polish>
<Czech>JZ</Czech>
<French>SO</French>
<Russian>ЮЗ</Russian>
<Portuguese>SO</Portuguese>
<Hungarian>DNy</Hungarian>
<Italian>SO</Italian>
</Key>
<Key ID="STR_ACE_Common_WSW">
<English>WSW</English>
<German>WSW</German>
<Spanish>OSO</Spanish>
<Polish>WSW</Polish>
<Czech>ZJZ</Czech>
<French>OSO</French>
<Russian>ЗЮЗ</Russian>
<Portuguese>OSO</Portuguese>
<Hungarian>NyDNy</Hungarian>
<Italian>OSO</Italian>
</Key>
<Key ID="STR_ACE_Common_W">
<English>W</English>
<German>W</German>
<Spanish>O</Spanish>
<Polish>W</Polish>
<Czech>Z</Czech>
<French>O</French>
<Russian>З</Russian>
<Portuguese>O</Portuguese>
<Hungarian>Ny</Hungarian>
<Italian>O</Italian>
</Key>
<Key ID="STR_ACE_Common_WNW">
<English>WNW</English>
<German>WNW</German>
<Spanish>ONO</Spanish>
<Polish>WNW</Polish>
<Czech>ZSZ</Czech>
<French>ONO</French>
<Russian>ЗСЗ</Russian>
<Portuguese>ONO</Portuguese>
<Hungarian>NyÉNy</Hungarian>
<Italian>ONO</Italian>
</Key>
<Key ID="STR_ACE_Common_NW">
<English>NW</English>
<German>NW</German>
<Spanish>NO</Spanish>
<Polish>NW</Polish>
<Czech>SZ</Czech>
<French>NO</French>
<Russian>СЗ</Russian>
<Portuguese>NO</Portuguese>
<Hungarian>ÉNy</Hungarian>
<Italian>NO</Italian>
</Key>
<Key ID="STR_ACE_Common_NNW">
<English>NNW</English>
<German>NNW</German>
<Spanish>NNO</Spanish>
<Polish>NNW</Polish>
<Czech>SSZ</Czech>
<French>NNO</French>
<Russian>ССЗ</Russian>
<Portuguese>NNO</Portuguese>
<Hungarian>ÉÉNy</Hungarian>
<Italian>NNO</Italian>
</Key>
<Key ID="STR_ACE_Common_ActionAborted">
<English>Action cancelled.</English>
<German>Aktion abgebrochen.</German>
<Spanish>Acción cancelada.</Spanish>
<Polish>Przerwano czynność</Polish>
<Czech>Akce přerušena</Czech>
<French>Action annulée.</French>
<Russian>Действие отменено.</Russian>
<Portuguese>Ação cancelada.</Portuguese>
<Hungarian>Művelet megszakítva.</Hungarian>
<Italian>Azione cancellata.</Italian>
</Key>
<Key ID="STR_ACE_Common_MiscItems">
<English>[ACE] Miscellaneous Items</English>
<German>[ACE] Verschiedenes</German>
<Spanish>[ACE] Objetos varios</Spanish>
<Polish>[ACE] Różne przedmioty</Polish>
<Czech>[ACE] Ostatní předměty</Czech>
<French>[ACE] Objets divers</French>
<Russian>[ACE] Различные предметы</Russian>
<Portuguese>[ACE] Itens diversos</Portuguese>
<Hungarian>[ACE] Egyéb tárgyak</Hungarian>
<Italian>[ACE] Oggetti vari</Italian>
</Key>
<Key ID="STR_ACE_Common_EnableNumberHotkeys">
<English>Disable Command Menu</English>
<German>Befehlsmenü ausschalten</German>
<Spanish>Desactivar menú de mando</Spanish>
<Polish>Wyłącz menu dowodzenia</Polish>
<Czech>Vypnout velící menu</Czech>
<French>Désactiver Menu Commande</French>
<Russian>Выключить командное меню</Russian>
<Hungarian>Parancsnoki menü kikapcsolása</Hungarian>
</Key>
<Key ID="STR_ACE_Common_Unknown">
<English>Unknown</English>
<German>Unbekannt</German>
<Spanish>Desconocido</Spanish>
<Polish>Nieznany</Polish>
<Czech>Neznámý</Czech>
<Russian>Неизвестно</Russian>
<Hungarian>Ismeretlen</Hungarian>
</Key>
<Key ID="STR_ACE_Common_NoVoice">
<English>No Voice</English>
<German>Keine Stimme</German>
<Spanish>Sin voz</Spanish>
<Polish>Brak głosu</Polish>
<Czech>Žádný hlas</Czech>
<Russian>Без голоса</Russian>
<Hungarian>Nincs hang</Hungarian>
</Key>
<Key ID="STR_ACE_ACTION_ACCEPT_REQUEST_KEY_TITLE">
<Polish>Akceptuj prośby</Polish>
<Spanish>Aceptar Peticiones</Spanish>
<English>Accept Requests</English>
</Key>
<Key ID="STR_ACE_ACTION_DECLINE_REQUEST_KEY_TITLE">
<Polish>Ignoruj prośby</Polish>
<Spanish>Rechazar Peticiones</Spanish>
<English>Decline Requests</English>
</Key>
<Key ID="STR_ACE_ACTION_ACCEPT_REQUEST_KEY_TOOLTIP">
<Polish>Akceptuj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności.</Polish>
<Spanish>Acepta Peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones.</Spanish>
<English>Accept Requests send by other players. These can be requests to use / share equipment, perform certain actions.</English>
</Key>
<Key ID="STR_ACE_ACTION_DECLINE_REQUEST_KEY_TOOLTIP">
<Polish>Ignoruj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności.</Polish>
<Spanish>Rechazar Peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones.</Spanish>
<English>Decline Requests send by other players. These can be requests to use / share equipment, perform certain actions.</English>
</Key>
<Key ID="STR_ACE_Common_SettingFeedbackIconsName">
<English>Feedback icons</English>
</Key>
<Key ID="STR_ACE_Common_SettingFeedbackIconsDesc">
<English>Select the position of or disable the feedback icons on your screen. These icons will show to provide extra feedback on your character status and actions performed.</English>
</Key>
<Key ID="STR_ACE_Common_SettingProgressbarLocationName">
<English>Progress bar location</English>
</Key>
<Key ID="STR_ACE_Common_SettingProgressbarLocationDesc">
<English>Set the desired location of the progress bar on your screen.</English>
</Key>
<Key ID="STR_ACE_Common_SettingDisplayTextColorName">
<English>Hint Background color</English>
</Key>
<Key ID="STR_ACE_Common_SettingDisplayTextColorDesc">
<English>The color of the background from the ACE hints.</English>
</Key>
<Key ID="STR_ACE_Common_SettingDisplayTextFontColorName">
<English>Hint text font color</English>
</Key>
<Key ID="STR_ACE_Common_SettingDisplayTextFontColorDesc">
<English>The color of the text font from the ACE hints. This color is the default color for all text displayed through the ACE Hint system, if the hint text has no other color specified.</English>
</Key>
<Key ID="STR_ACE_Common_bananaDisplayName">
<English>Banana</English>
</Key>
<Key ID="STR_ACE_Common_bananaDescr">
<English>A banana is an edible fruit, botanically a berry, produced by several kinds of large herbaceous flowering plants in the genus Musa.</English>
</Key>
</Package>
</Project>

View File

@ -1,54 +1,54 @@
class CfgACE_Triggers {
/* onPlace parameters:
0: OBJECT - unit placing
1: OBJECT - Placed explosive
2: STRING - Magazine classname
3: ARRAY - vars
Last Index: CfgACE_Triggers config of trigger type.
onSetup parameters:
0: STRING - Magazine Classname
*/
class Command {
displayName = $STR_ACE_Explosives_clacker_displayName;
picture = PATHTOF(Data\UI\Clacker.paa);
onPlace = QUOTE(_this call FUNC(AddClacker);false);
requires[] = {"ACE_Clacker"};
};
class MK16_Transmitter:Command {
displayName = $STR_ACE_Explosives_MK16_displayName;
picture = PATHTOF(Data\UI\MK16_Reciever_ca.paa);
requires[] = {"ACE_M26_Clacker"};
};
class DeadManSwitch:Command {
displayName = $STR_ACE_Explosives_DeadManSwitch_displayName;
picture = PATHTOF(Data\UI\DeadmanSwitch.paa);
requires[] = {"ACE_DeadManSwitch"};
};
class Cellphone:Command {
displayName = $STR_ACE_Explosives_cellphone_displayName;
picture = PATHTOF(Data\UI\Cellphone_UI.paa);
onPlace = QUOTE(_this call FUNC(addCellphoneIED);false);
requires[] = {"ACE_Cellphone"};
};
class PressurePlate {
displayName = $STR_ACE_Explosives_PressurePlate;
picture = PATHTOF(Data\UI\PressurePlate.paa);
onPlace = "_dist=GetNumber(ConfigFile >> 'CfgMagazines' >> (_this select 2) >> 'ACE_Triggers' >> 'PressurePlate' >> 'digDistance');_ex=_this select 1;_ex setPosATL ((getPosATL _ex) vectorDiff ((VectorUp _ex) vectorCrossProduct [0,0,_dist]));false";
};
class IRSensor {
displayName = $STR_ACE_Explosives_IRSensor;
picture = PATHTOF(Data\UI\PressurePlate.paa);
onPlace = "false";
};
class Timer {
displayName = $STR_ACE_Explosives_timerName;
picture = PATHTOF(data\UI\Timer.paa);
onPlace = QUOTE([ARR_2(_this select 1,(_this select 3) select 0)] call FUNC(startTimer);false);
onSetup = QUOTE(_this call FUNC(openTimerSetUI);true);
};
class Tripwire {
displayName = $STR_ACE_Explosives_TripWire;
picture = PATHTOF(Data\UI\Tripwire.paa);
onPlace = "false";
};
/* onPlace parameters:
0: OBJECT - unit placing
1: OBJECT - Placed explosive
2: STRING - Magazine classname
3: ARRAY - vars
Last Index: CfgACE_Triggers config of trigger type.
onSetup parameters:
0: STRING - Magazine Classname
*/
class Command {
displayName = $STR_ACE_Explosives_clacker_displayName;
picture = PATHTOF(Data\UI\Clacker.paa);
onPlace = QUOTE(_this call FUNC(AddClacker);false);
requires[] = {"ACE_Clacker"};
};
class MK16_Transmitter:Command {
displayName = $STR_ACE_Explosives_MK16_displayName;
picture = PATHTOF(Data\UI\MK16_Reciever_ca.paa);
requires[] = {"ACE_M26_Clacker"};
};
class DeadManSwitch:Command {
displayName = $STR_ACE_Explosives_DeadManSwitch_displayName;
picture = PATHTOF(Data\UI\DeadmanSwitch.paa);
requires[] = {"ACE_DeadManSwitch"};
};
class Cellphone:Command {
displayName = $STR_ACE_Explosives_cellphone_displayName;
picture = PATHTOF(Data\UI\Cellphone_UI.paa);
onPlace = QUOTE(_this call FUNC(addCellphoneIED);false);
requires[] = {"ACE_Cellphone"};
};
class PressurePlate {
displayName = $STR_ACE_Explosives_PressurePlate;
picture = PATHTOF(Data\UI\PressurePlate.paa);
onPlace = "_dist=GetNumber(ConfigFile >> 'CfgMagazines' >> (_this select 2) >> 'ACE_Triggers' >> 'PressurePlate' >> 'digDistance');_ex=_this select 1;_ex setPosATL ((getPosATL _ex) vectorDiff ((VectorUp _ex) vectorCrossProduct [0,0,_dist]));false";
};
class IRSensor {
displayName = $STR_ACE_Explosives_IRSensor;
picture = PATHTOF(Data\UI\PressurePlate.paa);
onPlace = "false";
};
class Timer {
displayName = $STR_ACE_Explosives_timerName;
picture = PATHTOF(data\UI\Timer.paa);
onPlace = QUOTE([ARR_2(_this select 1,(_this select 3) select 0)] call FUNC(startTimer);false);
onSetup = QUOTE(_this call FUNC(openTimerSetUI);true);
};
class Tripwire {
displayName = $STR_ACE_Explosives_TripWire;
picture = PATHTOF(Data\UI\Tripwire.paa);
onPlace = "false";
};
};

View File

@ -1,78 +1,78 @@
class CfgAmmo {
// All explosive based Ammo classes. These are all listed in case they become required.
class Default;
// All explosive based Ammo classes. These are all listed in case they become required.
class Default;
class TimeBombCore:Default {
ACE_DefuseTime = 5;
};
/*
class BoundingMineCore:TimeBombCore;
class BoundingMineBase:BoundingMineCore;
class APERSBoundingMine_Range_Ammo:BoundingMineBase;
class TimeBombCore:Default {
ACE_DefuseTime = 5;
};
/*
class BoundingMineCore:TimeBombCore;
class BoundingMineBase:BoundingMineCore;
class APERSBoundingMine_Range_Ammo:BoundingMineBase;
class MineCore: TimeBombCore;
class MineBase:MineCore;
class APERSMine_Range_Ammo:MineBase;
class ATMine_Range_Ammo:MineBase;
class MineCore: TimeBombCore;
class MineBase:MineCore;
class APERSMine_Range_Ammo:MineBase;
class ATMine_Range_Ammo:MineBase;
class UnderwaterMine_Range_Ammo:MineBase;
class UnderwaterMineAB_Range_Ammo:UnderwaterMine_Range_Ammo;
class UnderwaterMinePDM_Range_Ammo:UnderwaterMine_Range_Ammo;
class UnderwaterMine_Range_Ammo:MineBase;
class UnderwaterMineAB_Range_Ammo:UnderwaterMine_Range_Ammo;
class UnderwaterMinePDM_Range_Ammo:UnderwaterMine_Range_Ammo;
class DirectionalBombCore:TimeBombCore;
class DirectionalBombBase:DirectionalBombCore;
class APERSTripMine_Wire_Ammo:DirectionalBombBase;
class DirectionalBombCore:TimeBombCore;
class DirectionalBombBase:DirectionalBombCore;
class APERSTripMine_Wire_Ammo:DirectionalBombBase;
class SLAMDirectionalMine_Wire_Ammo:DirectionalBombBase;
class SLAMDirectionalMine_Wire_Ammo:DirectionalBombBase;
class PipeBombCore: TimeBombCore;
class PipeBombBase:PipeBombCore;
*/
class DirectionalBombBase;
class ClaymoreDirectionalMine_Remote_Ammo:DirectionalBombBase{
ACE_Explosive = "ClaymoreDirectionalMine_Remote_Ammo_Scripted";
soundActivation[] = {"",0,0,0};
soundDeactivation[] = {"",0,0,0};
};
//class ClaymoreDirectionalMine_Remote_Ammo_Scripted:ClaymoreDirectionalMine_Remote_Ammo;
class PipeBombCore: TimeBombCore;
class PipeBombBase:PipeBombCore;
*/
class DirectionalBombBase;
class ClaymoreDirectionalMine_Remote_Ammo:DirectionalBombBase{
ACE_Explosive = "ClaymoreDirectionalMine_Remote_Ammo_Scripted";
soundActivation[] = {"",0,0,0};
soundDeactivation[] = {"",0,0,0};
};
//class ClaymoreDirectionalMine_Remote_Ammo_Scripted:ClaymoreDirectionalMine_Remote_Ammo;
class SLAMDirectionalMine_Wire_Ammo:DirectionalBombBase{
indirectHitRange = 20;
ACE_explodeOnDefuse = 1;
};
class SLAMDirectionalMine_Command_Ammo:SLAMDirectionalMine_Wire_Ammo {
mineTrigger = "RemoteTrigger";
ACE_explodeOnDefuse = 0;
};
class SLAMDirectionalMine_Timer_Ammo:SLAMDirectionalMine_Wire_Ammo {
mineTrigger = "TimeTrigger";
ACE_explodeOnDefuse = 0;
};
class SLAMDirectionalMine_Magnetic_Ammo:SLAMDirectionalMine_Wire_Ammo {
mineTrigger = "MagneticTrigger";
};
class SLAMDirectionalMine_Wire_Ammo:DirectionalBombBase{
indirectHitRange = 20;
ACE_explodeOnDefuse = 1;
};
class SLAMDirectionalMine_Command_Ammo:SLAMDirectionalMine_Wire_Ammo {
mineTrigger = "RemoteTrigger";
ACE_explodeOnDefuse = 0;
};
class SLAMDirectionalMine_Timer_Ammo:SLAMDirectionalMine_Wire_Ammo {
mineTrigger = "TimeTrigger";
ACE_explodeOnDefuse = 0;
};
class SLAMDirectionalMine_Magnetic_Ammo:SLAMDirectionalMine_Wire_Ammo {
mineTrigger = "MagneticTrigger";
};
class PipeBombBase;
class DemoCharge_Remote_Ammo:PipeBombBase{
ACE_Explosive = "DemoCharge_Remote_Ammo_Scripted";
soundActivation[] = {"",0,0,0};
soundDeactivation[] = {"",0,0,0};
hit = 500;
indirectHit = 500;
indirectHitRange = 7;
};
class SatchelCharge_Remote_Ammo:PipeBombBase{
ACE_Explosive = "SatchelCharge_Remote_Ammo_Scripted";
soundActivation[] = {"",0,0,0};
soundDeactivation[] = {"",0,0,0};
};
/*
class DemoCharge_Remote_Ammo_Scripted:DemoCharge_Remote_Ammo;
class SatchelCharge_Remote_Ammo_Scripted:SatchelCharge_Remote_Ammo;
class PipeBombBase;
class DemoCharge_Remote_Ammo:PipeBombBase{
ACE_Explosive = "DemoCharge_Remote_Ammo_Scripted";
soundActivation[] = {"",0,0,0};
soundDeactivation[] = {"",0,0,0};
hit = 500;
indirectHit = 500;
indirectHitRange = 7;
};
class SatchelCharge_Remote_Ammo:PipeBombBase{
ACE_Explosive = "SatchelCharge_Remote_Ammo_Scripted";
soundActivation[] = {"",0,0,0};
soundDeactivation[] = {"",0,0,0};
};
/*
class DemoCharge_Remote_Ammo_Scripted:DemoCharge_Remote_Ammo;
class SatchelCharge_Remote_Ammo_Scripted:SatchelCharge_Remote_Ammo;
TODO: Configure IEDs to use the system.
class IEDLandBig_Remote_Ammo:PipeBombBase{
triggerWhenDestroyed = 1;
class IEDLandBig_Remote_Ammo:PipeBombBase{
triggerWhenDestroyed = 1;
};
class IEDLandSmall_Remote_Ammo:PipeBombBase{
triggerWhenDestroyed = 1;

View File

@ -1,20 +1,20 @@
class Extended_PreInit_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_preInit));
};
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_preInit));
};
};
class Extended_PostInit_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_postInit));
};
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_postInit));
};
};
/*
TODO: Move the addEventHandlers out of PostInit into here or separate eventHandlers,
to enable them on all units, so unit switching works for explosives properly.
to enable them on all units, so unit switching works for explosives properly.
class Extended_Init_EventHandlers {
class CAManBase {
init = "";
}
class CAManBase {
init = "";
}
}
*/

View File

@ -1,127 +1,127 @@
class CfgMagazines {
class CA_Magazine;
class ATMine_Range_Mag:CA_Magazine{
ACE_Placeable = 1;
useAction = 0;
ACE_SetupObject = "ACE_Explosives_Place_ATMine"; // CfgVehicle class for setup object.
ACE_DelayTime = 2.5;
class ACE_Triggers {
SupportedTriggers[] = {"PressurePlate"};
class PressurePlate {
digDistance = 0.1;
};
class CA_Magazine;
class ATMine_Range_Mag:CA_Magazine{
ACE_Placeable = 1;
useAction = 0;
ACE_SetupObject = "ACE_Explosives_Place_ATMine"; // CfgVehicle class for setup object.
ACE_DelayTime = 2.5;
class ACE_Triggers {
SupportedTriggers[] = {"PressurePlate"};
class PressurePlate {
digDistance = 0.1;
};
};
};
};
class APERSBoundingMine_Range_Mag:ATMine_Range_Mag{
ACE_SetupObject = "ACE_Explosives_Place_APERSBoundingMine";
class ACE_Triggers {
SupportedTriggers[] = {"PressurePlate"};
class PressurePlate {
digDistance = 0.075;
};
class APERSBoundingMine_Range_Mag:ATMine_Range_Mag{
ACE_SetupObject = "ACE_Explosives_Place_APERSBoundingMine";
class ACE_Triggers {
SupportedTriggers[] = {"PressurePlate"};
class PressurePlate {
digDistance = 0.075;
};
};
};
};
class APERSMine_Range_Mag:ATMine_Range_Mag{
ACE_SetupObject = "ACE_Explosives_Place_APERSMine";
class ACE_Triggers {
SupportedTriggers[] = {"PressurePlate"};
class PressurePlate {
digDistance = 0.05;
};
class APERSMine_Range_Mag:ATMine_Range_Mag{
ACE_SetupObject = "ACE_Explosives_Place_APERSMine";
class ACE_Triggers {
SupportedTriggers[] = {"PressurePlate"};
class PressurePlate {
digDistance = 0.05;
};
};
};
};
class APERSTripMine_Wire_Mag:ATMine_Range_Mag{
ACE_SetupObject = "ACE_Explosives_Place_APERSTripwireMine";
class ACE_Triggers {
SupportedTriggers[] = {"Tripwire"};
class Tripwire;
class APERSTripMine_Wire_Mag:ATMine_Range_Mag{
ACE_SetupObject = "ACE_Explosives_Place_APERSTripwireMine";
class ACE_Triggers {
SupportedTriggers[] = {"Tripwire"};
class Tripwire;
};
};
};
class ClaymoreDirectionalMine_Remote_Mag:CA_Magazine{
ACE_Placeable = 1;
useAction = 0;
ACE_SetupObject = "ACE_Explosives_Place_Claymore";
ACE_DelayTime = 1.5;
class ACE_Triggers {
SupportedTriggers[] = {"Command"};
class Command {
FuseTime = 0.5;
};
class ClaymoreDirectionalMine_Remote_Mag:CA_Magazine{
ACE_Placeable = 1;
useAction = 0;
ACE_SetupObject = "ACE_Explosives_Place_Claymore";
ACE_DelayTime = 1.5;
class ACE_Triggers {
SupportedTriggers[] = {"Command"};
class Command {
FuseTime = 0.5;
};
};
};
};
class SatchelCharge_Remote_Mag:CA_Magazine{
ACE_Placeable = 1;
useAction = 0;
ACE_SetupObject = "ACE_Explosives_Place_SatchelCharge";
ACE_DelayTime = 1;
class ACE_Triggers {
SupportedTriggers[] = {"Timer","Command", "MK16_Transmitter", "DeadmanSwitch"};
class Timer {
FuseTime = 0.5;
};
class Command {
FuseTime = 0.5;
};
class MK16_Transmitter:Command{};
class DeadmanSwitch:Command{};
class SatchelCharge_Remote_Mag:CA_Magazine{
ACE_Placeable = 1;
useAction = 0;
ACE_SetupObject = "ACE_Explosives_Place_SatchelCharge";
ACE_DelayTime = 1;
class ACE_Triggers {
SupportedTriggers[] = {"Timer","Command", "MK16_Transmitter", "DeadmanSwitch"};
class Timer {
FuseTime = 0.5;
};
class Command {
FuseTime = 0.5;
};
class MK16_Transmitter:Command{};
class DeadmanSwitch:Command{};
};
};
class DemoCharge_Remote_Mag:SatchelCharge_Remote_Mag{
ACE_SetupObject = "ACE_Explosives_Place_DemoCharge";
model = "\A3\Weapons_F\explosives\c4_charge_small_d";
};
};
class DemoCharge_Remote_Mag:SatchelCharge_Remote_Mag{
ACE_SetupObject = "ACE_Explosives_Place_DemoCharge";
model = "\A3\Weapons_F\explosives\c4_charge_small_d";
};
class SLAMDirectionalMine_Wire_Mag: ATMine_Range_Mag{
ACE_SetupObject = "ACE_Explosives_Place_SLAM";
class ACE_Triggers {
SupportedTriggers[] = {"IRSensor","PressurePlate","Timer","Command"};
class PressurePlate{
displayName = $STR_ACE_Explosives_SLAME_Magnetic;
digDistance = 0;
ammo = "SLAMDirectionalMine_Magnetic_Ammo";
pitch = 90;
};
class IRSensor{
displayName = $STR_ACE_Explosives_SLAME_IRSensor;
};
class Timer {
ammo = "SLAMDirectionalMine_Timer_Ammo";
};
class Command {
ammo = "SLAMDirectionalMine_Command_Ammo";
fuseTime = 0.5;
};
class SLAMDirectionalMine_Wire_Mag: ATMine_Range_Mag{
ACE_SetupObject = "ACE_Explosives_Place_SLAM";
class ACE_Triggers {
SupportedTriggers[] = {"IRSensor","PressurePlate","Timer","Command"};
class PressurePlate{
displayName = $STR_ACE_Explosives_SLAME_Magnetic;
digDistance = 0;
ammo = "SLAMDirectionalMine_Magnetic_Ammo";
pitch = 90;
};
class IRSensor{
displayName = $STR_ACE_Explosives_SLAME_IRSensor;
};
class Timer {
ammo = "SLAMDirectionalMine_Timer_Ammo";
};
class Command {
ammo = "SLAMDirectionalMine_Command_Ammo";
fuseTime = 0.5;
};
};
};
};
class IEDUrbanBig_Remote_Mag: DemoCharge_Remote_Mag {
ACE_SetupObject = "ACE_Explosives_Place_IEDUrbanBig";
class ACE_Triggers {
SupportedTriggers[] = {"Command","DeadmanSwitch", "Cellphone"};
class Command {
FuseTime = 0.5;
};
class DeadmanSwitch:Command{};
class Cellphone:Command{};
class IEDUrbanBig_Remote_Mag: DemoCharge_Remote_Mag {
ACE_SetupObject = "ACE_Explosives_Place_IEDUrbanBig";
class ACE_Triggers {
SupportedTriggers[] = {"Command","DeadmanSwitch", "Cellphone"};
class Command {
FuseTime = 0.5;
};
class DeadmanSwitch:Command{};
class Cellphone:Command{};
};
};
};
class IEDLandBig_Remote_Mag: IEDUrbanBig_Remote_Mag{
ACE_SetupObject = "ACE_Explosives_Place_IEDLandBig";
};
class IEDUrbanSmall_Remote_Mag: DemoCharge_Remote_Mag {
ACE_SetupObject = "ACE_Explosives_Place_IEDUrbanSmall";
class ACE_Triggers {
SupportedTriggers[] = {"Command","DeadmanSwitch", "Cellphone"};
class Command {
FuseTime = 0.5;
};
class DeadmanSwitch:Command{};
class Cellphone:Command{};
class IEDLandBig_Remote_Mag: IEDUrbanBig_Remote_Mag{
ACE_SetupObject = "ACE_Explosives_Place_IEDLandBig";
};
class IEDUrbanSmall_Remote_Mag: DemoCharge_Remote_Mag {
ACE_SetupObject = "ACE_Explosives_Place_IEDUrbanSmall";
class ACE_Triggers {
SupportedTriggers[] = {"Command","DeadmanSwitch", "Cellphone"};
class Command {
FuseTime = 0.5;
};
class DeadmanSwitch:Command{};
class Cellphone:Command{};
};
};
class IEDLandSmall_Remote_Mag: IEDUrbanSmall_Remote_Mag {
ACE_SetupObject = "ACE_Explosives_Place_IEDLandSmall";
};
};
class IEDLandSmall_Remote_Mag: IEDUrbanSmall_Remote_Mag {
ACE_SetupObject = "ACE_Explosives_Place_IEDLandSmall";
};
};

View File

@ -1,44 +1,44 @@
class Module_F;
class ACE_ModuleExplosive: Module_F {
author = "$STR_ACE_Common_ACETeam";
category = "ACE";
displayName = "Explosive System";
function = QUOTE(FUNC(module));
scope = 2;
isGlobal = 1;
icon = PATHTOF(UI\Icon_Module_Explosives_ca.paa);
class Arguments {
class RequireSpecialist {
displayName = "Require specialists?";
description = "Require explosive specialists to disable explosives? Default: No";
typeName = "BOOL";
class values {
class Yes {
name = "Yes";
value = 1;
author = "$STR_ACE_Common_ACETeam";
category = "ACE";
displayName = "Explosive System";
function = QUOTE(FUNC(module));
scope = 2;
isGlobal = 1;
icon = PATHTOF(UI\Icon_Module_Explosives_ca.paa);
class Arguments {
class RequireSpecialist {
displayName = "Require specialists?";
description = "Require explosive specialists to disable explosives? Default: No";
typeName = "BOOL";
class values {
class Yes {
name = "Yes";
value = 1;
};
class No {
default = 1;
name = "No";
value = 0;
};
};
};
class No {
default = 1;
name = "No";
value = 0;
class PunishNonSpecialists {
displayName = "Punish non-specialists?";
description = "Increase the time it takes to complete actions for non-specialists? Default: Yes";
typeName = "BOOL";
class values {
class Yes {
default = 1;
name = "Yes";
value = 1;
};
class No {
name = "No";
value = 0;
};
};
};
};
};
class PunishNonSpecialists {
displayName = "Punish non-specialists?";
description = "Increase the time it takes to complete actions for non-specialists? Default: Yes";
typeName = "BOOL";
class values {
class Yes {
default = 1;
name = "Yes";
value = 1;
};
class No {
name = "No";
value = 0;
};
};
};
};
};

View File

@ -1,275 +1,327 @@
class CfgVehicles {
class Man;
class CAManBase: Man {
class ACE_SelfActions {
class ACE_Explosives {
displayName = $STR_ACE_Explosives_Menu;
condition = QUOTE(!(_player getVariable [ARR_2('ace_explosives_PlantingExplosive',false)]));
statement = "";
exceptions[] = {"isNotSwimming"};
showDisabled = 1;
priority = 4;
icon = PATHTOF(UI\Explosives_Menu_ca.paa);
hotkey = "X";
//Sub-menu items
class ACE_Detonate {
displayName = $STR_ACE_Explosives_Detonate;
condition = QUOTE([_player] call FUNC(canDetonate));
statement = QUOTE([_player] call FUNC(openTransmitterUI););
exceptions[] = {"isNotSwimming"};
showDisabled = 1;
icon = PATHTOF(UI\Explosives_Menu_ca.paa);
priority = 2;
hotkey = "T";
class Man;
class CAManBase: Man {
class ACE_SelfActions {
class ACE_Explosives {
displayName = $STR_ACE_Explosives_Menu;
condition = QUOTE(!(_player getVariable [ARR_2('ace_explosives_PlantingExplosive',false)]));
statement = "";
exceptions[] = {"isNotSwimming", "isNotInside"};
showDisabled = 1;
priority = 4;
icon = PATHTOF(UI\Explosives_Menu_ca.paa);
hotkey = "X";
//Sub-menu items
class ACE_Detonate {
displayName = $STR_ACE_Explosives_Detonate;
condition = QUOTE([_player] call FUNC(canDetonate));
statement = "";
insertChildren = QUOTE([_player] call FUNC(addTransmitterActions););
exceptions[] = {"isNotSwimming", "isNotInside"};
showDisabled = 1;
icon = PATHTOF(UI\Explosives_Menu_ca.paa);
priority = 2;
hotkey = "T";
};
class ACE_Place {
displayName = $STR_ACE_Explosives_Place;
condition = QUOTE((vehicle _player == _player) and {[_player] call FUNC(hasExplosives)});
statement = "";
insertChildren = QUOTE([_player] call FUNC(addExplosiveActions););
exceptions[] = {"isNotSwimming"};
showDisabled = 1;
icon = PATHTOF(UI\Place_Explosive_ca.paa);
priority = 1;
hotkey = "P";
};
class ACE_Cellphone {
displayName = $STR_ACE_Explosives_cellphone_displayName;
condition = "('ACE_Cellphone' in (items ace_player))";
statement = "closeDialog 0;createDialog 'Rsc_ACE_PhoneInterface';";
exceptions[] = {"isNotSwimming", "isNotInside"};
showDisabled = 0;
icon = PATHTOF(Data\UI\Cellphone_UI.paa);
priority = 0.8;
};
};
};
class ACE_Place {
displayName = $STR_ACE_Explosives_Place;
condition = QUOTE((vehicle _player == _player) and {[_player] call FUNC(hasExplosives)});
statement = QUOTE([_player] call FUNC(openPlaceUI););
exceptions[] = {"isNotSwimming"};
showDisabled = 1;
icon = PATHTOF(UI\Place_Explosive_ca.paa);
priority = 1;
hotkey = "P";
};
class Items_base_F;
class ACE_DefuseObject: Items_base_F {
XEH_ENABLED;
author = "ACE";
_generalMacro = "ACE_DefuseObject";
displayName = "ACE Defuse Helper";
mapSize = 0.2;
icon = "iconObject_1x2";
model = "\A3\Weapons_f\dummyweapon.p3d";
scope = 2;
scopeCurator = 1;
vehicleClass = "Cargo";
class ACE_Actions {
class ACE_MainActions {
selection = "";
distance = 5;
condition = "true";
class ACE_Defuse {
displayName = $STR_ACE_Explosives_Defuse;
condition = QUOTE([ARR_2(_player,_target)] call FUNC(canDefuse));
statement = QUOTE([ARR_2(_player,_target)] call FUNC(startDefuse););
exceptions[] = {"isNotSwimming"};
showDisabled = 0;
icon = PATHTOF(UI\Defuse_ca.paa);
priority = 0.8;
hotkey = "F";
distance = 5;
};
};
};
class ACE_Defuse {
displayName = $STR_ACE_Explosives_Defuse;
condition = QUOTE([_player] call FUNC(canDefuse));
statement = QUOTE([ARR_2(_player,EGVAR(Interaction,Target))] call FUNC(startDefuse););
exceptions[] = {"isNotSwimming"};
showDisabled = 0;
icon = PATHTOF(UI\Defuse_ca.paa);
priority = 0.8;
hotkey = "F";
};
class ACE_Explosives_Place: Items_base_F {
XEH_ENABLED;
author = "ACE";
_generalMacro = "ACE_Explosives_Place";
displayName = "Multi-meter";
mapSize = 0.2;
icon = "iconObject_1x2";
model = "\A3\Structures_F\Items\Tools\MultiMeter_F.p3d";
scope = 2;
scopeCurator = 1;
vehicleClass = "Cargo";
ACE_offset[] = {0,0,0};
class ACE_Actions {
class ACE_MainActions {
selection = "";
distance = 5;
condition = "true";
class ACE_SetTrigger {
selection = "";
displayName = "$STR_ACE_Explosives_TriggerMenu";
distance = 4;
condition = "true";
statement = "";
insertChildren = QUOTE([ARR_3(_target getVariable QUOTE(QGVAR(class)),_target,_player)] call FUNC(addTriggerActions););
showDisabled = 0;
exceptions[] = {};
priority = 5;
icon = QUOTE(PATHTOF(UI\Explosives_Menu_ca.paa));
};
class ACE_PickUp {
selection = "";
displayName = "$STR_ACE_Explosives_Pickup";
distance = 4;
condition = "true";
statement = QUOTE([ARR_2(_player,_target getVariable QUOTE(QGVAR(class)))] call EFUNC(common,addToInventory);deleteVehicle _target;);
showDisabled = 0;
exceptions[] = {};
priority = 5;
icon = "\A3\ui_f\data\IGUI\Cfg\Actions\Obsolete\ui_action_takemine_ca.paa";
};
};
};
class ACE_Cellphone {
displayName = $STR_ACE_Explosives_cellphone_displayName;
condition = "('ACE_Cellphone' in (items ace_player))";
statement = "closeDialog 0;createDialog 'Rsc_ACE_PhoneInterface';";
exceptions[] = {"isNotSwimming"};
showDisabled = 0;
icon = PATHTOF(Data\UI\Cellphone_UI.paa);
priority = 0.8;
};
class ACE_Explosives_Place_DemoCharge:ACE_Explosives_Place {
displayName = "Demo Charge";
model = "\A3\Weapons_F\explosives\c4_charge_small_d";
};
class ACE_Explosives_Place_APERSBoundingMine:ACE_Explosives_Place {
displayName = "APERS Bounding Mine";
model = "\A3\Weapons_F\explosives\mine_AP_bouncing";
};
class ACE_Explosives_Place_APERSMine:ACE_Explosives_Place {
displayName = "APERS Mine";
model = "\A3\Weapons_F\explosives\mine_ap";
};
class ACE_Explosives_Place_APERSTripwireMine:ACE_Explosives_Place {
displayName = "APERS Tripwire Mine";
model = "\A3\Weapons_F\explosives\mine_AP_tripwire";
ACE_offset[] = {1,0,0};
};
class ACE_Explosives_Place_ATMine:ACE_Explosives_Place {
displayName = "AT Mine";
model = "\A3\Weapons_f\Explosives\mine_at";
};
class ACE_Explosives_Place_Claymore:ACE_Explosives_Place {
displayName = "Claymore";
model = "\A3\Weapons_F\explosives\mine_AP_miniclaymore";
};
class ACE_Explosives_Place_SatchelCharge:ACE_Explosives_Place {
displayName = "Satchel Charge";
model = "\A3\Weapons_F\Explosives\satchel";
};
class ACE_Explosives_Place_SLAM:ACE_Explosives_Place {
displayName = "SLAM";
model = "\A3\Weapons_F\Explosives\mine_SLAM_directional";
};
// IEDs
class ACE_Explosives_Place_IEDUrbanBig:ACE_Explosives_Place {
displayName = "IED Urban Big";
model = "\A3\Weapons_F\Explosives\IED_urban_big";
};
class ACE_Explosives_Place_IEDLandBig:ACE_Explosives_Place {
displayName = "IED Land Big";
model = "\A3\Weapons_F\Explosives\IED_land_big";
};
class ACE_Explosives_Place_IEDUrbanSmall:ACE_Explosives_Place {
displayName = "IED Urban Small";
model = "\A3\Weapons_F\Explosives\IED_urban_small";
};
class ACE_Explosives_Place_IEDLandSmall:ACE_Explosives_Place {
displayName = "IED Land Small";
model = "\A3\Weapons_F\Explosives\IED_land_small";
};
class NATO_Box_Base;
class EAST_Box_Base;
class IND_Box_Base;
class FIA_Box_Base_F;
class Box_NATO_Support_F;
class Box_NATO_AmmoOrd_F: NATO_Box_Base {
class TransportItems {
MACRO_ADDITEM(ACE_Clacker,12);
MACRO_ADDITEM(ACE_M26_Clacker,6);
MACRO_ADDITEM(ACE_DefusalKit,12);
};
};
};
};
class Items_base_F;
class ACE_Explosives_Place: Items_base_F {
author = "ACE";
_generalMacro = "ACE_Explosives_Place";
displayName = "Multi-meter";
mapSize = 0.2;
icon = "iconObject_1x2";
model = "\A3\Structures_F\Items\Tools\MultiMeter_F.p3d";
scope = 2;
scopeCurator = 1;
vehicleClass = "Cargo";
ACE_offset[] = {0,0,0};
};
class ACE_Explosives_Place_DemoCharge:ACE_Explosives_Place {
displayName = "Demo Charge";
model = "\A3\Weapons_F\explosives\c4_charge_small_d";
};
class ACE_Explosives_Place_APERSBoundingMine:ACE_Explosives_Place {
displayName = "APERS Bounding Mine";
model = "\A3\Weapons_F\explosives\mine_AP_bouncing";
};
class ACE_Explosives_Place_APERSMine:ACE_Explosives_Place {
displayName = "APERS Mine";
model = "\A3\Weapons_F\explosives\mine_ap";
};
class ACE_Explosives_Place_APERSTripwireMine:ACE_Explosives_Place {
displayName = "APERS Tripwire Mine";
model = "\A3\Weapons_F\explosives\mine_AP_tripwire";
ACE_offset[] = {1,0,0};
};
class ACE_Explosives_Place_ATMine:ACE_Explosives_Place {
displayName = "AT Mine";
model = "\A3\Weapons_f\Explosives\mine_at";
};
class ACE_Explosives_Place_Claymore:ACE_Explosives_Place {
displayName = "Claymore";
model = "\A3\Weapons_F\explosives\mine_AP_miniclaymore";
};
class ACE_Explosives_Place_SatchelCharge:ACE_Explosives_Place {
displayName = "Satchel Charge";
model = "\A3\Weapons_F\Explosives\satchel";
};
class ACE_Explosives_Place_SLAM:ACE_Explosives_Place {
displayName = "SLAM";
model = "\A3\Weapons_F\Explosives\mine_SLAM_directional";
};
// IEDs
class ACE_Explosives_Place_IEDUrbanBig:ACE_Explosives_Place {
displayName = "IED Urban Big";
model = "\A3\Weapons_F\Explosives\IED_urban_big";
};
class ACE_Explosives_Place_IEDLandBig:ACE_Explosives_Place {
displayName = "IED Land Big";
model = "\A3\Weapons_F\Explosives\IED_land_big";
};
class ACE_Explosives_Place_IEDUrbanSmall:ACE_Explosives_Place {
displayName = "IED Urban Small";
model = "\A3\Weapons_F\Explosives\IED_urban_small";
};
class ACE_Explosives_Place_IEDLandSmall:ACE_Explosives_Place {
displayName = "IED Land Small";
model = "\A3\Weapons_F\Explosives\IED_land_small";
};
class NATO_Box_Base;
class EAST_Box_Base;
class IND_Box_Base;
class FIA_Box_Base_F;
class Box_NATO_Support_F;
class Box_NATO_AmmoOrd_F: NATO_Box_Base {
class TransportItems {
MACRO_ADDITEM(ACE_Clacker,12);
MACRO_ADDITEM(ACE_M26_Clacker,6);
MACRO_ADDITEM(ACE_DefusalKit,12);
class Box_East_AmmoOrd_F: EAST_Box_Base {
class TransportItems {
MACRO_ADDITEM(ACE_Clacker,12);
MACRO_ADDITEM(ACE_M26_Clacker,6);
MACRO_ADDITEM(ACE_DefusalKit,12);
};
};
};
class Box_East_AmmoOrd_F: EAST_Box_Base {
class TransportItems {
MACRO_ADDITEM(ACE_Clacker,12);
MACRO_ADDITEM(ACE_M26_Clacker,6);
MACRO_ADDITEM(ACE_DefusalKit,12);
class Box_IND_AmmoOrd_F: IND_Box_Base {
class TransportItems {
MACRO_ADDITEM(ACE_Clacker,12);
MACRO_ADDITEM(ACE_M26_Clacker,6);
MACRO_ADDITEM(ACE_DefusalKit,12);
MACRO_ADDITEM(ACE_Deadmanswitch,2);
MACRO_ADDITEM(ACE_Cellphone,3);
};
};
};
class Box_IND_AmmoOrd_F: IND_Box_Base {
class TransportItems {
MACRO_ADDITEM(ACE_Clacker,12);
MACRO_ADDITEM(ACE_M26_Clacker,6);
MACRO_ADDITEM(ACE_DefusalKit,12);
MACRO_ADDITEM(ACE_Deadmanswitch,2);
MACRO_ADDITEM(ACE_Cellphone,3);
class Box_FIA_Ammo_F: FIA_Box_Base_F {
class TransportItems {
MACRO_ADDITEM(ACE_Clacker,2);
MACRO_ADDITEM(ACE_M26_Clacker,2);
MACRO_ADDITEM(ACE_DefusalKit,2);
MACRO_ADDITEM(ACE_Deadmanswitch,1);
MACRO_ADDITEM(ACE_Cellphone,2);
};
};
};
class Box_FIA_Ammo_F: FIA_Box_Base_F {
class TransportItems {
MACRO_ADDITEM(ACE_Clacker,2);
MACRO_ADDITEM(ACE_M26_Clacker,2);
MACRO_ADDITEM(ACE_DefusalKit,2);
MACRO_ADDITEM(ACE_Deadmanswitch,1);
MACRO_ADDITEM(ACE_Cellphone,2);
class ACE_Box_Misc: Box_NATO_Support_F {
class TransportItems {
MACRO_ADDITEM(ACE_Clacker,12);
MACRO_ADDITEM(ACE_M26_Clacker,6);
MACRO_ADDITEM(ACE_DefusalKit,12);
MACRO_ADDITEM(ACE_Deadmanswitch,6);
MACRO_ADDITEM(ACE_Cellphone,10);
};
};
};
class ACE_Box_Misc: Box_NATO_Support_F {
class TransportItems {
MACRO_ADDITEM(ACE_Clacker,12);
MACRO_ADDITEM(ACE_M26_Clacker,6);
MACRO_ADDITEM(ACE_DefusalKit,12);
MACRO_ADDITEM(ACE_Deadmanswitch,6);
MACRO_ADDITEM(ACE_Cellphone,10);
class B_Kitbag_rgr;
class B_Kitbag_rgr_Exp: B_Kitbag_rgr {
class TransportItems {
class _xx_ToolKit { // xXToOlKiT420mLgXx
count = 0;
};
};
};
};
class B_Kitbag_rgr;
class B_Kitbag_rgr_Exp: B_Kitbag_rgr {
class TransportItems {
class _xx_ToolKit { // xXToOlKiT420mLgXx
count = 0;
};
class B_Carryall_ocamo;
class B_Carryall_ocamo_Exp: B_Carryall_ocamo {
class TransportItems {
class _xx_ToolKit {
count = 0;
};
};
};
};
class B_Carryall_ocamo;
class B_Carryall_ocamo_Exp: B_Carryall_ocamo {
class TransportItems {
class _xx_ToolKit {
count = 0;
};
class B_Carryall_oucamo;
class B_Carryall_oucamo_Exp: B_Carryall_oucamo {
class TransportItems {
class _xx_ToolKit {
count = 0;
};
};
};
};
class B_Carryall_oucamo;
class B_Carryall_oucamo_Exp: B_Carryall_oucamo {
class TransportItems {
class _xx_ToolKit {
count = 0;
};
class B_Carryall_oli;
class G_Carryall_Exp: B_Carryall_oli {
class TransportItems {
class _xx_ToolKit {
count = 0;
};
};
};
};
class B_Carryall_oli;
class G_Carryall_Exp: B_Carryall_oli {
class TransportItems {
class _xx_ToolKit {
count = 0;
};
class I_Carryall_oli_Exp: B_Carryall_oli {
class TransportItems {
class _xx_ToolKit {
count = 0;
};
};
};
};
class I_Carryall_oli_Exp: B_Carryall_oli {
class TransportItems {
class _xx_ToolKit {
count = 0;
};
};
};
#include "CfgModule.hpp"
#include "CfgModule.hpp"
// Add ACE_Clacker and ACE_DefusalKit to every explosive unit.
#define MACRO_ADDMINEKIT \
items[] = {"FirstAidKit", "ACE_Clacker", "ACE_DefusalKit"}; \
respawnitems[] = {"FirstAidKit", "ACE_Clacker", "ACE_DefusalKit"};
// Add ACE_Clacker and ACE_DefusalKit to every explosive unit.
#define MACRO_ADDMINEKIT \
items[] = {"FirstAidKit", "ACE_Clacker", "ACE_DefusalKit"}; \
respawnitems[] = {"FirstAidKit", "ACE_Clacker", "ACE_DefusalKit"};
class B_Soldier_base_F; class B_soldier_exp_F:B_Soldier_base_F {MACRO_ADDMINEKIT};
class B_Soldier_03_f; class B_engineer_F:B_Soldier_03_f {MACRO_ADDMINEKIT};
class B_Soldier_diver_base_F; class B_diver_exp_F:B_Soldier_diver_base_F {MACRO_ADDMINEKIT};
class B_Soldier_recon_base; class B_recon_exp_F:B_Soldier_recon_base {MACRO_ADDMINEKIT};
class B_CTRG_soldier_engineer_exp_F:B_Soldier_base_F {MACRO_ADDMINEKIT};
class I_G_Soldier_base_F; class I_G_engineer_F:I_G_Soldier_base_F {MACRO_ADDMINEKIT};
class I_G_Soldier_exp_F:I_G_Soldier_base_F {MACRO_ADDMINEKIT};
class B_G_engineer_F:I_G_engineer_F {MACRO_ADDMINEKIT};
class O_G_engineer_F:I_G_engineer_F {MACRO_ADDMINEKIT};
class B_G_Soldier_exp_F:I_G_Soldier_exp_F {MACRO_ADDMINEKIT};
class O_G_Soldier_exp_F:I_G_Soldier_exp_F {MACRO_ADDMINEKIT};
class I_Soldier_02_F; class I_Soldier_exp_F:I_Soldier_02_F {MACRO_ADDMINEKIT};
class I_Soldier_base_F; class I_engineer_F:I_Soldier_base_F {MACRO_ADDMINEKIT};
class I_Soldier_diver_base_F; class I_diver_exp_F:I_Soldier_diver_base_F {MACRO_ADDMINEKIT};
class O_Soldier_base_F; class O_soldier_exp_F:O_Soldier_base_F {MACRO_ADDMINEKIT};
class O_engineer_F:O_Soldier_base_F {MACRO_ADDMINEKIT};
class O_Soldier_diver_base_F; class O_diver_exp_F:O_Soldier_diver_base_F {MACRO_ADDMINEKIT};
class O_Soldier_recon_base; class O_recon_exp_F:O_Soldier_recon_base {MACRO_ADDMINEKIT};
class O_Soldier_Urban_base; class O_soldierU_exp_F:O_Soldier_Urban_base {MACRO_ADDMINEKIT};
class O_engineer_U_F:O_Soldier_Urban_base {MACRO_ADDMINEKIT};
class B_Protagonist_VR_F:B_Soldier_base_F {MACRO_ADDMINEKIT};
class O_Protagonist_VR_F:O_Soldier_base_F {MACRO_ADDMINEKIT};
class I_Protagonist_VR_F:I_Soldier_base_F {MACRO_ADDMINEKIT};
class B_Soldier_F; class b_soldier_universal_f:B_Soldier_F {MACRO_ADDMINEKIT};
class B_G_Soldier_F; class b_g_soldier_universal_f:B_G_Soldier_F {MACRO_ADDMINEKIT};
class O_Soldier_F; class o_soldier_universal_f:O_Soldier_F {MACRO_ADDMINEKIT};
class O_G_Soldier_F; class o_g_soldier_universal_f:O_G_Soldier_F {MACRO_ADDMINEKIT};
class I_soldier_F; class i_soldier_universal_f:I_soldier_F {MACRO_ADDMINEKIT};
class I_G_Soldier_F; class i_g_soldier_universal_f:I_G_Soldier_F {MACRO_ADDMINEKIT};
class B_Soldier_base_F; class B_soldier_exp_F:B_Soldier_base_F {MACRO_ADDMINEKIT};
class B_Soldier_03_f; class B_engineer_F:B_Soldier_03_f {MACRO_ADDMINEKIT};
class B_Soldier_diver_base_F; class B_diver_exp_F:B_Soldier_diver_base_F {MACRO_ADDMINEKIT};
class B_Soldier_recon_base; class B_recon_exp_F:B_Soldier_recon_base {MACRO_ADDMINEKIT};
class B_CTRG_soldier_engineer_exp_F:B_Soldier_base_F {MACRO_ADDMINEKIT};
class I_G_Soldier_base_F; class I_G_engineer_F:I_G_Soldier_base_F {MACRO_ADDMINEKIT};
class I_G_Soldier_exp_F:I_G_Soldier_base_F {MACRO_ADDMINEKIT};
class B_G_engineer_F:I_G_engineer_F {MACRO_ADDMINEKIT};
class O_G_engineer_F:I_G_engineer_F {MACRO_ADDMINEKIT};
class B_G_Soldier_exp_F:I_G_Soldier_exp_F {MACRO_ADDMINEKIT};
class O_G_Soldier_exp_F:I_G_Soldier_exp_F {MACRO_ADDMINEKIT};
class I_Soldier_02_F; class I_Soldier_exp_F:I_Soldier_02_F {MACRO_ADDMINEKIT};
class I_Soldier_base_F; class I_engineer_F:I_Soldier_base_F {MACRO_ADDMINEKIT};
class I_Soldier_diver_base_F; class I_diver_exp_F:I_Soldier_diver_base_F {MACRO_ADDMINEKIT};
class O_Soldier_base_F; class O_soldier_exp_F:O_Soldier_base_F {MACRO_ADDMINEKIT};
class O_engineer_F:O_Soldier_base_F {MACRO_ADDMINEKIT};
class O_Soldier_diver_base_F; class O_diver_exp_F:O_Soldier_diver_base_F {MACRO_ADDMINEKIT};
class O_Soldier_recon_base; class O_recon_exp_F:O_Soldier_recon_base {MACRO_ADDMINEKIT};
class O_Soldier_Urban_base; class O_soldierU_exp_F:O_Soldier_Urban_base {MACRO_ADDMINEKIT};
class O_engineer_U_F:O_Soldier_Urban_base {MACRO_ADDMINEKIT};
class B_Protagonist_VR_F:B_Soldier_base_F {MACRO_ADDMINEKIT};
class O_Protagonist_VR_F:O_Soldier_base_F {MACRO_ADDMINEKIT};
class I_Protagonist_VR_F:I_Soldier_base_F {MACRO_ADDMINEKIT};
class B_Soldier_F; class b_soldier_universal_f:B_Soldier_F {MACRO_ADDMINEKIT};
class B_G_Soldier_F; class b_g_soldier_universal_f:B_G_Soldier_F {MACRO_ADDMINEKIT};
class O_Soldier_F; class o_soldier_universal_f:O_Soldier_F {MACRO_ADDMINEKIT};
class O_G_Soldier_F; class o_g_soldier_universal_f:O_G_Soldier_F {MACRO_ADDMINEKIT};
class I_soldier_F; class i_soldier_universal_f:I_soldier_F {MACRO_ADDMINEKIT};
class I_G_Soldier_F; class i_g_soldier_universal_f:I_G_Soldier_F {MACRO_ADDMINEKIT};
// Add ACE_Clacker to snipers and spotters for setting off Claymores
#define MACRO_ADDCLAYMOREKIT \
items[] = {"FirstAidKit","ACE_Clacker"}; \
respawnitems[] = {"FirstAidKit","ACE_Clacker"};
// Add ACE_Clacker to snipers and spotters for setting off Claymores
#define MACRO_ADDCLAYMOREKIT \
items[] = {"FirstAidKit","ACE_Clacker"}; \
respawnitems[] = {"FirstAidKit","ACE_Clacker"};
class B_Soldier_sniper_base_F;
class B_sniper_F: B_Soldier_sniper_base_F {MACRO_ADDCLAYMOREKIT};
class B_spotter_F: B_Soldier_sniper_base_F {MACRO_ADDCLAYMOREKIT};
class I_Soldier_sniper_base_F;
class I_Sniper_F: I_Soldier_sniper_base_F {MACRO_ADDCLAYMOREKIT};
class I_Spotter_F: I_Soldier_sniper_base_F {MACRO_ADDCLAYMOREKIT};
class O_Soldier_sniper_base_F;
class O_sniper_F: O_Soldier_sniper_base_F {MACRO_ADDCLAYMOREKIT};
class O_spotter_F: O_Soldier_sniper_base_F {MACRO_ADDCLAYMOREKIT};
class B_Soldier_sniper_base_F;
class B_sniper_F: B_Soldier_sniper_base_F {MACRO_ADDCLAYMOREKIT};
class B_spotter_F: B_Soldier_sniper_base_F {MACRO_ADDCLAYMOREKIT};
class I_Soldier_sniper_base_F;
class I_Sniper_F: I_Soldier_sniper_base_F {MACRO_ADDCLAYMOREKIT};
class I_Spotter_F: I_Soldier_sniper_base_F {MACRO_ADDCLAYMOREKIT};
class O_Soldier_sniper_base_F;
class O_sniper_F: O_Soldier_sniper_base_F {MACRO_ADDCLAYMOREKIT};
class O_spotter_F: O_Soldier_sniper_base_F {MACRO_ADDCLAYMOREKIT};
};

View File

@ -1,69 +1,69 @@
class CfgWeapons {
class ACE_ItemCore;
class InventoryItem_Base_f;
class ACE_ItemCore;
class InventoryItem_Base_f;
class ACE_ExplosiveItem: InventoryItem_Base_f {
allowedSlots[] = {801,701,901};
//type = 201;
};
class ACE_Clacker: ACE_ItemCore {
scope = 2;
displayName = $STR_ACE_Explosives_clacker_displayName;
descriptionShort = $STR_ACE_Explosives_clacker_description;
picture = PATHTOF(Data\UI\Clacker.paa);
model = "\A3\weapons_F\ammo\mag_univ.p3d";
ACE_Range = 250;
ACE_Detonator = 1;
class ItemInfo: ACE_ExplosiveItem {
mass = 3;
uniformModel = "\A3\weapons_F\ammo\mag_univ.p3d";
class ACE_ExplosiveItem: InventoryItem_Base_f {
allowedSlots[] = {801,701,901};
//type = 201;
};
};
class ACE_M26_Clacker: ACE_Clacker {
displayName = $STR_ACE_Explosives_M26_displayName;
picture = PATHTOF(Data\UI\MK26_Transmitter_ca.paa);
ACE_Range = 5000;
};
class ACE_DefusalKit: ACE_ItemCore {
scope = 2;
displayName = $STR_ACE_Explosives_DefusalKit_displayName;
descriptionShort = $STR_ACE_Explosives_DefusalKit_description;
picture = PATHTOF(Data\UI\Pliers.paa);
model = "\A3\Structures_F\Items\Tools\Pliers_F.p3d";
class ItemInfo: ACE_ExplosiveItem {
mass = 5;
uniformModel = "\A3\Structures_F\Items\Tools\Pliers_F.p3d";
};
};
class ACE_DeadManSwitch: ACE_ItemCore {
scope = 2;
displayName = $STR_ACE_Explosives_DeadManSwitch_displayName;
descriptionShort = $STR_ACE_Explosives_DeadManSwitch_description;
picture = PATHTOF(Data\UI\DeadmanSwitch.paa);
model = "\A3\weapons_F\ammo\mag_univ.p3d";
ACE_Range = 100;
ACE_Detonator = 1;
class ACE_Clacker: ACE_ItemCore {
scope = 2;
displayName = $STR_ACE_Explosives_clacker_displayName;
descriptionShort = $STR_ACE_Explosives_clacker_description;
picture = PATHTOF(Data\UI\Clacker.paa);
model = "\A3\weapons_F\ammo\mag_univ.p3d";
ACE_Range = 250;
ACE_Detonator = 1;
class ItemInfo: ACE_ExplosiveItem {
mass = 2;
uniformModel = "\A3\weapons_F\ammo\mag_univ.p3d";
class ItemInfo: ACE_ExplosiveItem {
mass = 3;
uniformModel = "\A3\weapons_F\ammo\mag_univ.p3d";
};
};
};
class ACE_Cellphone: ACE_ItemCore {
scope = 2;
displayName = $STR_ACE_Explosives_cellphone_displayName;
descriptionShort = $STR_ACE_Explosives_cellphone_description;
picture = PATHTOF(Data\UI\Cellphone_UI.paa);
model = "\A3\weapons_F\ammo\mag_univ.p3d";
ACE_Range = 15000;
ACE_Detonator = 1;
class ACE_M26_Clacker: ACE_Clacker {
displayName = $STR_ACE_Explosives_M26_displayName;
picture = PATHTOF(Data\UI\MK26_Transmitter_ca.paa);
ACE_Range = 5000;
};
class ACE_DefusalKit: ACE_ItemCore {
scope = 2;
displayName = $STR_ACE_Explosives_DefusalKit_displayName;
descriptionShort = $STR_ACE_Explosives_DefusalKit_description;
picture = PATHTOF(Data\UI\Pliers.paa);
model = "\A3\Structures_F\Items\Tools\Pliers_F.p3d";
class ItemInfo: ACE_ExplosiveItem {
mass = 2;
uniformModel = "\A3\weapons_F\ammo\mag_univ.p3d";
class ItemInfo: ACE_ExplosiveItem {
mass = 5;
uniformModel = "\A3\Structures_F\Items\Tools\Pliers_F.p3d";
};
};
class ACE_DeadManSwitch: ACE_ItemCore {
scope = 2;
displayName = $STR_ACE_Explosives_DeadManSwitch_displayName;
descriptionShort = $STR_ACE_Explosives_DeadManSwitch_description;
picture = PATHTOF(Data\UI\DeadmanSwitch.paa);
model = "\A3\weapons_F\ammo\mag_univ.p3d";
ACE_Range = 100;
ACE_Detonator = 1;
class ItemInfo: ACE_ExplosiveItem {
mass = 2;
uniformModel = "\A3\weapons_F\ammo\mag_univ.p3d";
};
};
class ACE_Cellphone: ACE_ItemCore {
scope = 2;
displayName = $STR_ACE_Explosives_cellphone_displayName;
descriptionShort = $STR_ACE_Explosives_cellphone_description;
picture = PATHTOF(Data\UI\Cellphone_UI.paa);
model = "\A3\weapons_F\ammo\mag_univ.p3d";
ACE_Range = 15000;
ACE_Detonator = 1;
class ItemInfo: ACE_ExplosiveItem {
mass = 2;
uniformModel = "\A3\weapons_F\ammo\mag_univ.p3d";
};
};
};
};

View File

@ -14,275 +14,275 @@ class RscPicture;
class RscEdit;
class Rsc_ACE_CallScreen_Edit:RscEdit {
canModify = 1;
colorBackground[] = {0,0,0,1};
colorText[] = {0,0,0,1};
colorDisabled[] = {1,1,1,0.25};
colorSelection[] = {
"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])",
"(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])",
"(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",
1
};
text = "";
style = "0x00 + 0x40 + 0x200";
shadow = 1;
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) * 1)";
x = 0.288594 * safezoneW + safezoneX;
w = 0.0825 * safezoneW;
h = 0.044 * safezoneH;
canModify = 1;
colorBackground[] = {0,0,0,1};
colorText[] = {0,0,0,1};
colorDisabled[] = {1,1,1,0.25};
colorSelection[] = {
"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])",
"(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])",
"(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",
1
};
text = "";
style = "0x00 + 0x40 + 0x200";
shadow = 1;
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) * 1)";
x = 0.288594 * safezoneW + safezoneX;
w = 0.0825 * safezoneW;
h = 0.044 * safezoneH;
};
class Rsc_ACE_HiddenButton:RscButton {
colorText[] = {0, 0, 0, 0};
colorDisabled[] = {0, 0, 0, 0};
colorBackground[] = {0, 0, 0, 0};
colorBackgroundDisabled[] = {0, 0, 0, 0};
colorBackgroundActive[] = {0, 0, 0, 0};
colorFocused[] = {0, 0, 0, 0};
colorShadow[] = {0, 0, 0, 0};
colorBorder[] = {0, 0, 0, 0};
w = 0.095589;
h = 0.039216;
shadow = 0;
colorText[] = {0, 0, 0, 0};
colorDisabled[] = {0, 0, 0, 0};
colorBackground[] = {0, 0, 0, 0};
colorBackgroundDisabled[] = {0, 0, 0, 0};
colorBackgroundActive[] = {0, 0, 0, 0};
colorFocused[] = {0, 0, 0, 0};
colorShadow[] = {0, 0, 0, 0};
colorBorder[] = {0, 0, 0, 0};
w = 0.095589;
h = 0.039216;
shadow = 0;
};
class Rsc_ACE_Timer_Slider:RscXSliderH {
x = 0.4;
y = 0.2;
w = 0.3;
h = "1*((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
colorBackground[] = {0,0,0,0.5};
x = 0.4;
y = 0.2;
w = 0.3;
h = "1*((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
colorBackground[] = {0,0,0,0.5};
};
class RscACE_SelectTimeUI {
idd = 8854;
movingEnable = 0;
class controls {
class back:IGUIBack {
x = X_OFFSET;
y = 0;
w = 0.5;
h = 0.2;
colorBackground[] = {0, 0, 0, 0.5};
idd = 8854;
movingEnable = 0;
class controls {
class back:IGUIBack {
x = X_OFFSET;
y = 0;
w = 0.5;
h = 0.2;
colorBackground[] = {0, 0, 0, 0.5};
};
class header: RscText{
idc = 8870;
x = X_OFFSET + 0.005;
y = 0.005;
w = 0.49;
h = 0.05;
style = ST_CENTER;
text = "";
};
class slider: Rsc_ACE_Timer_Slider {
idc = 8845;
x = X_OFFSET + 0.005;
y = 0.06;
w = 0.49;
h = 0.025;
onSliderPosChanged = "private ['_mins', '_secs'];_mins = floor((_this select 1)/60);_secs=floor((_this select 1) - (_mins*60));ctrlSetText [8870, format[localize 'STR_ACE_Explosives_TimerMenu',_mins, _secs]];";
};
class cancelBtn: RscButton {
idc = 8855;
x = X_OFFSET + 0.005;
w = 0.15;
h = 0.1;
y = 0.09;
style = ST_CENTER;
text = $STR_ACE_Explosives_Cancel;
action = "closeDialog 0;";
};
class approveBtn: RscButton {
idc = 8860;
x = X_OFFSET + 0.345;
y = 0.09;
h = 0.1;
w = 0.15;
style = ST_CENTER;
text = $STR_ACE_Explosives_SetTime;
action = "closeDialog 0;";
};
};
class header: RscText{
idc = 8870;
x = X_OFFSET + 0.005;
y = 0.005;
w = 0.49;
h = 0.05;
style = ST_CENTER;
text = "";
};
class slider: Rsc_ACE_Timer_Slider {
idc = 8845;
x = X_OFFSET + 0.005;
y = 0.06;
w = 0.49;
h = 0.025;
onSliderPosChanged = "private ['_mins', '_secs'];_mins = floor((_this select 1)/60);_secs=floor((_this select 1) - (_mins*60));ctrlSetText [8870, format[localize 'STR_ACE_Explosives_TimerMenu',_mins, _secs]];";
};
class cancelBtn: RscButton {
idc = 8855;
x = X_OFFSET + 0.005;
w = 0.15;
h = 0.1;
y = 0.09;
style = ST_CENTER;
text = $STR_ACE_Explosives_Cancel;
action = "closeDialog 0;";
};
class approveBtn: RscButton {
idc = 8860;
x = X_OFFSET + 0.345;
y = 0.09;
h = 0.1;
w = 0.15;
style = ST_CENTER;
text = $STR_ACE_Explosives_SetTime;
action = "closeDialog 0;";
};
};
};
class Rsc_ACE_NumKeyButton: Rsc_ACE_HiddenButton{};
class Rsc_ACE_PhoneInterface {
idd = 8855;
movingEnable = 1;
onLoad = QUOTE(GVAR(IED_CurrentSpeedDial) = -1);
class controls {
class RscPicture_1200: RscPicture {
idc = 1200;
text = PATHTOF(Data\UI\Cellphone_Background.paa);
x = 0.231875 * safezoneW + safezoneX;
y = 0.104 * safezoneH + safezoneY;
w = 0.195937 * safezoneW;
h = 0.704 * safezoneH;
idd = 8855;
movingEnable = 1;
onLoad = QUOTE(GVAR(IED_CurrentSpeedDial) = -1);
class controls {
class RscPicture_1200: RscPicture {
idc = 1200;
text = PATHTOF(Data\UI\Cellphone_Background.paa);
x = 0.231875 * safezoneW + safezoneX;
y = 0.104 * safezoneH + safezoneY;
w = 0.195937 * safezoneW;
h = 0.704 * safezoneH;
};
class numkey_1: Rsc_ACE_NumKeyButton {
idc = 1600;
x = 0.278281 * safezoneW + safezoneX;
y = 0.533 * safezoneH + safezoneY;
w = 0.0309375 * safezoneW;
h = 0.033 * safezoneH;
tooltip = "1";
action = "ctrlSetText [1400,((ctrlText 1400) + '1')];";
};
class numkey_2: Rsc_ACE_NumKeyButton {
idc = 1601;
x = 0.314375 * safezoneW + safezoneX;
y = 0.533 * safezoneH + safezoneY;
w = 0.0309375 * safezoneW;
h = 0.033 * safezoneH;
tooltip = "2";
action = "ctrlSetText [1400,((ctrlText 1400) + '2')];";
};
class numkey_3: Rsc_ACE_NumKeyButton {
idc = 1602;
x = 0.350469 * safezoneW + safezoneX;
y = 0.533 * safezoneH + safezoneY;
w = 0.0309375 * safezoneW;
h = 0.033 * safezoneH;
tooltip = "3";
action = "ctrlSetText [1400,((ctrlText 1400) + '3')];";
};
class numkey_4: Rsc_ACE_NumKeyButton {
idc = 1603;
x = 0.278281 * safezoneW + safezoneX;
y = 0.577 * safezoneH + safezoneY;
w = 0.0309375 * safezoneW;
h = 0.033 * safezoneH;
tooltip = "4";
action = "ctrlSetText [1400,((ctrlText 1400) + '4')];";
};
class numkey_5: Rsc_ACE_NumKeyButton {
idc = 1604;
x = 0.314375 * safezoneW + safezoneX;
y = 0.577 * safezoneH + safezoneY;
w = 0.0309375 * safezoneW;
h = 0.033 * safezoneH;
tooltip = "5";
action = "ctrlSetText [1400,((ctrlText 1400) + '5')];";
};
class numkey_6: Rsc_ACE_NumKeyButton {
idc = 1605;
x = 0.350469 * safezoneW + safezoneX;
y = 0.577 * safezoneH + safezoneY;
w = 0.0309375 * safezoneW;
h = 0.033 * safezoneH;
tooltip = "6";
action = "ctrlSetText [1400,((ctrlText 1400) + '6')];";
};
class numkey_7: Rsc_ACE_NumKeyButton {
idc = 1606;
x = 0.278281 * safezoneW + safezoneX;
y = 0.621 * safezoneH + safezoneY;
w = 0.0309375 * safezoneW;
h = 0.033 * safezoneH;
tooltip = "7";
action = "ctrlSetText [1400,((ctrlText 1400) + '7')];";
};
class numkey_8: Rsc_ACE_NumKeyButton {
idc = 1607;
x = 0.314375 * safezoneW + safezoneX;
y = 0.621 * safezoneH + safezoneY;
w = 0.0309375 * safezoneW;
h = 0.033 * safezoneH;
tooltip = "8";
action = "ctrlSetText [1400,((ctrlText 1400) + '8')];";
};
class numkey_9: Rsc_ACE_NumKeyButton {
idc = 1608;
x = 0.350469 * safezoneW + safezoneX;
y = 0.621 * safezoneH + safezoneY;
w = 0.0309375 * safezoneW;
h = 0.033 * safezoneH;
tooltip = "9";
action = "ctrlSetText [1400,((ctrlText 1400) + '9')];";
};
class numkey_0: Rsc_ACE_NumKeyButton {
idc = 1609;
x = 0.314375 * safezoneW + safezoneX;
y = 0.676 * safezoneH + safezoneY;
w = 0.0309375 * safezoneW;
h = 0.033 * safezoneH;
tooltip = "0";
action = "ctrlSetText [1400,((ctrlText 1400) + '0')];";
};
class speedDialAdd: Rsc_ACE_NumKeyButton {
idc = 1610;
x = 0.278281 * safezoneW + safezoneX;
y = 0.676 * safezoneH + safezoneY;
w = 0.0309375 * safezoneW;
h = 0.033 * safezoneH;
tooltip = "$STR_ACE_Explosives_Phone_AddToSpeedDial";
action = QUOTE([ARR_2(ctrlText 1401,ctrlText 1400)] call FUNC(addToSpeedDial););
};
class clear: Rsc_ACE_HiddenButton {
idc = 1610;
x = 0.278281 * safezoneW + safezoneX;
y = 0.445 * safezoneH + safezoneY;
w = 0.020625 * safezoneW;
h = 0.033 * safezoneH;
tooltip = "$STR_ACE_Explosives_Clear";
action = QUOTE(ctrlSetText [ARR_2(1400,'')];[ctrlText 1401] call FUNC(removeFromSpeedDial);ctrlSetText [ARR_2(1401,'')];);
};
class dial: Rsc_ACE_HiddenButton {
idc = 1611;
x = 0.309219 * safezoneW + safezoneX;
y = 0.445 * safezoneH + safezoneY;
w = 0.04125 * safezoneW;
h = 0.033 * safezoneH;
tooltip = "$STR_ACE_Explosives_Phone_Dial";
action = QUOTE([ARR_2(ace_player,ctrlText 1400)] call FUNC(dialPhone););
};
class up: Rsc_ACE_HiddenButton {
idc = 1612;
x = 0.360781 * safezoneW + safezoneX;
y = 0.445 * safezoneH + safezoneY;
w = 0.020625 * safezoneW;
h = 0.033 * safezoneH;
tooltip = "$STR_ACE_Explosives_Phone_Up";
action = QUOTE([true] call FUNC(setSpeedDial));
};
class down: Rsc_ACE_HiddenButton {
idc = 1613;
x = 0.345312 * safezoneW + safezoneX;
y = 0.485 * safezoneH + safezoneY;
w = 0.020625 * safezoneW;
h = 0.033 * safezoneH;
tooltip = "$STR_ACE_Explosives_Phone_Down";
action = QUOTE([false] call FUNC(setSpeedDial));
};
class speedDial_Text: RscText {
idc = 1405;
y = 0.302 * safezoneH + safezoneY;
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 22) * 1)";
x = 0.288594 * safezoneW + safezoneX;
w = 0.0825 * safezoneW;
h = 0.044 * safezoneH;
text = "Name";
};
class speedDial_edit: Rsc_ACE_CallScreen_Edit {
idc = 1401;
y = 0.302 * safezoneH + safezoneY;
x = 0.318 * safezoneW + safezoneX;
w = 0.1;
};
class numberEdit_Text: RscText {
idc = 1406;
y = 0.348 * safezoneH + safezoneY;
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 22) * 1)";
x = 0.288594 * safezoneW + safezoneX;
w = 0.0825 * safezoneW;
h = 0.044 * safezoneH;
text = "#";
};
class number_edit: Rsc_ACE_CallScreen_Edit {
canModify = 0;
idc = 1400;
y = 0.348 * safezoneH + safezoneY;
x = 0.3 * safezoneW + safezoneX;
};
};
class numkey_1: Rsc_ACE_NumKeyButton {
idc = 1600;
x = 0.278281 * safezoneW + safezoneX;
y = 0.533 * safezoneH + safezoneY;
w = 0.0309375 * safezoneW;
h = 0.033 * safezoneH;
tooltip = "1";
action = "ctrlSetText [1400,((ctrlText 1400) + '1')];";
};
class numkey_2: Rsc_ACE_NumKeyButton {
idc = 1601;
x = 0.314375 * safezoneW + safezoneX;
y = 0.533 * safezoneH + safezoneY;
w = 0.0309375 * safezoneW;
h = 0.033 * safezoneH;
tooltip = "2";
action = "ctrlSetText [1400,((ctrlText 1400) + '2')];";
};
class numkey_3: Rsc_ACE_NumKeyButton {
idc = 1602;
x = 0.350469 * safezoneW + safezoneX;
y = 0.533 * safezoneH + safezoneY;
w = 0.0309375 * safezoneW;
h = 0.033 * safezoneH;
tooltip = "3";
action = "ctrlSetText [1400,((ctrlText 1400) + '3')];";
};
class numkey_4: Rsc_ACE_NumKeyButton {
idc = 1603;
x = 0.278281 * safezoneW + safezoneX;
y = 0.577 * safezoneH + safezoneY;
w = 0.0309375 * safezoneW;
h = 0.033 * safezoneH;
tooltip = "4";
action = "ctrlSetText [1400,((ctrlText 1400) + '4')];";
};
class numkey_5: Rsc_ACE_NumKeyButton {
idc = 1604;
x = 0.314375 * safezoneW + safezoneX;
y = 0.577 * safezoneH + safezoneY;
w = 0.0309375 * safezoneW;
h = 0.033 * safezoneH;
tooltip = "5";
action = "ctrlSetText [1400,((ctrlText 1400) + '5')];";
};
class numkey_6: Rsc_ACE_NumKeyButton {
idc = 1605;
x = 0.350469 * safezoneW + safezoneX;
y = 0.577 * safezoneH + safezoneY;
w = 0.0309375 * safezoneW;
h = 0.033 * safezoneH;
tooltip = "6";
action = "ctrlSetText [1400,((ctrlText 1400) + '6')];";
};
class numkey_7: Rsc_ACE_NumKeyButton {
idc = 1606;
x = 0.278281 * safezoneW + safezoneX;
y = 0.621 * safezoneH + safezoneY;
w = 0.0309375 * safezoneW;
h = 0.033 * safezoneH;
tooltip = "7";
action = "ctrlSetText [1400,((ctrlText 1400) + '7')];";
};
class numkey_8: Rsc_ACE_NumKeyButton {
idc = 1607;
x = 0.314375 * safezoneW + safezoneX;
y = 0.621 * safezoneH + safezoneY;
w = 0.0309375 * safezoneW;
h = 0.033 * safezoneH;
tooltip = "8";
action = "ctrlSetText [1400,((ctrlText 1400) + '8')];";
};
class numkey_9: Rsc_ACE_NumKeyButton {
idc = 1608;
x = 0.350469 * safezoneW + safezoneX;
y = 0.621 * safezoneH + safezoneY;
w = 0.0309375 * safezoneW;
h = 0.033 * safezoneH;
tooltip = "9";
action = "ctrlSetText [1400,((ctrlText 1400) + '9')];";
};
class numkey_0: Rsc_ACE_NumKeyButton {
idc = 1609;
x = 0.314375 * safezoneW + safezoneX;
y = 0.676 * safezoneH + safezoneY;
w = 0.0309375 * safezoneW;
h = 0.033 * safezoneH;
tooltip = "0";
action = "ctrlSetText [1400,((ctrlText 1400) + '0')];";
};
class speedDialAdd: Rsc_ACE_NumKeyButton {
idc = 1610;
x = 0.278281 * safezoneW + safezoneX;
y = 0.676 * safezoneH + safezoneY;
w = 0.0309375 * safezoneW;
h = 0.033 * safezoneH;
tooltip = "$STR_ACE_Explosives_Phone_AddToSpeedDial";
action = QUOTE([ARR_2(ctrlText 1401,ctrlText 1400)] call FUNC(addToSpeedDial););
};
class clear: Rsc_ACE_HiddenButton {
idc = 1610;
x = 0.278281 * safezoneW + safezoneX;
y = 0.445 * safezoneH + safezoneY;
w = 0.020625 * safezoneW;
h = 0.033 * safezoneH;
tooltip = "$STR_ACE_Explosives_Clear";
action = QUOTE(ctrlSetText [ARR_2(1400,'')];[ctrlText 1401] call FUNC(removeFromSpeedDial);ctrlSetText [ARR_2(1401,'')];);
};
class dial: Rsc_ACE_HiddenButton {
idc = 1611;
x = 0.309219 * safezoneW + safezoneX;
y = 0.445 * safezoneH + safezoneY;
w = 0.04125 * safezoneW;
h = 0.033 * safezoneH;
tooltip = "$STR_ACE_Explosives_Phone_Dial";
action = QUOTE([ARR_2(ace_player,ctrlText 1400)] call FUNC(dialPhone););
};
class up: Rsc_ACE_HiddenButton {
idc = 1612;
x = 0.360781 * safezoneW + safezoneX;
y = 0.445 * safezoneH + safezoneY;
w = 0.020625 * safezoneW;
h = 0.033 * safezoneH;
tooltip = "$STR_ACE_Explosives_Phone_Up";
action = QUOTE([true] call FUNC(setSpeedDial));
};
class down: Rsc_ACE_HiddenButton {
idc = 1613;
x = 0.345312 * safezoneW + safezoneX;
y = 0.485 * safezoneH + safezoneY;
w = 0.020625 * safezoneW;
h = 0.033 * safezoneH;
tooltip = "$STR_ACE_Explosives_Phone_Down";
action = QUOTE([false] call FUNC(setSpeedDial));
};
class speedDial_Text: RscText {
idc = 1405;
y = 0.302 * safezoneH + safezoneY;
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 22) * 1)";
x = 0.288594 * safezoneW + safezoneX;
w = 0.0825 * safezoneW;
h = 0.044 * safezoneH;
text = "Name";
};
class speedDial_edit: Rsc_ACE_CallScreen_Edit {
idc = 1401;
y = 0.302 * safezoneH + safezoneY;
x = 0.318 * safezoneW + safezoneX;
w = 0.1;
};
class numberEdit_Text: RscText {
idc = 1406;
y = 0.348 * safezoneH + safezoneY;
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 22) * 1)";
x = 0.288594 * safezoneW + safezoneX;
w = 0.0825 * safezoneW;
h = 0.044 * safezoneH;
text = "#";
};
class number_edit: Rsc_ACE_CallScreen_Edit {
canModify = 0;
idc = 1400;
y = 0.348 * safezoneH + safezoneY;
x = 0.3 * safezoneW + safezoneX;
};
};
};

View File

@ -19,7 +19,11 @@ ADDON = false;
PREP(addCellphoneIED);
PREP(addClacker);
PREP(addDetonateActions);
PREP(addExplosiveActions);
PREP(addToSpeedDial);
PREP(addTransmitterActions);
PREP(addTriggerActions);
PREP(canDefuse);
PREP(canDetonate);
PREP(defuseExplosive);
@ -36,11 +40,9 @@ PREP(getDetonators);
PREP(getPlacedExplosives);
PREP(getSpeedDialExplosive);
PREP(openDetonateUI);
PREP(openPlaceUI);
PREP(openTransmitterUI);
PREP(onLanded);
PREP(openTimerSetUI);
PREP(openTriggerSelectionUI);
PREP(place_Approve);
PREP(place_Cancel);

View File

@ -1,15 +1,15 @@
#include "script_component.hpp"
class CfgPatches {
class ADDON {
units[] = {};
weapons[] = {"ACE_Clacker", "ACE_DefusalKit", "ACE_M26_Clacker", "ACE_DeadManSwitch", "ACE_Cellphone"};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_common", "ace_interaction"};
author[] = {"Garth 'L-H' de Wet"};
authorUrl = "http://garth.snakebiteink.co.za/";
VERSION_CONFIG;
};
class ADDON {
units[] = {};
weapons[] = {"ACE_Clacker", "ACE_DefusalKit", "ACE_M26_Clacker", "ACE_DeadManSwitch", "ACE_Cellphone"};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_interaction"};
author[] = {"Garth 'L-H' de Wet"};
authorUrl = "http://garth.snakebiteink.co.za/";
VERSION_CONFIG;
};
};
#include "CfgEventHandlers.hpp"
@ -22,30 +22,30 @@ class CfgPatches {
#include "ExplosivesUI.hpp"
class CfgActions {
class None;
class Deactivate:None {
show = 0;
};
class DeactivateMine:None {
show = 0;
};
class None;
class Deactivate:None {
show = 0;
};
class DeactivateMine:None {
show = 0;
};
};
class CfgMineTriggers {
class RangeTrigger;
class MagneticTrigger: RangeTrigger {
mineMagnetic = 1;
mineTriggerRange = 1;
};
class RangeTrigger;
class MagneticTrigger: RangeTrigger {
mineMagnetic = 1;
mineTriggerRange = 1;
};
};
class ACE_Settings {
class GVAR(RequireSpecialist) {
value = 0;
typeName = "BOOL";
};
class GVAR(PunishNonSpecialists) {
value = 1;
typeName = "BOOL";
};
class GVAR(RequireSpecialist) {
value = 0;
typeName = "BOOL";
};
class GVAR(PunishNonSpecialists) {
value = 1;
typeName = "BOOL";
};
};

View File

@ -25,23 +25,23 @@ _requiredItems = getArray(_config >> "requires");
_hasRequired = true;
_detonators = [_unit] call FUNC(getDetonators);
{
if !(_x in _detonators) exitWith{
_hasRequired = false;
};
if !(_x in _detonators) exitWith{
_hasRequired = false;
};
} count _requiredItems;
private ["_code", "_count", "_codeSet"];
_codeSet = false;
while {!_codeSet} do {
_code = str(round (random 9999));
_count = 4 - count (toArray _code);
while {_count > 0} do {
_code = "0" + _code;
_count = _count - 1;
};
_codeSet = (count ([_code] call FUNC(getSpeedDialExplosive))) == 0;
_code = str(round (random 9999));
_count = 4 - count (toArray _code);
while {_count > 0} do {
_code = "0" + _code;
_count = _count - 1;
};
_codeSet = (count ([_code] call FUNC(getSpeedDialExplosive))) == 0;
};
if (isNil QGVAR(CellphoneIEDs)) then {
GVAR(CellphoneIEDs) = [];
GVAR(CellphoneIEDs) = [];
};
_count = GVAR(CellphoneIEDs) pushBack [_explosive,_code,GetNumber(ConfigFile >> "CfgMagazines" >> _magazineClass >> "ACE_Triggers" >> "Cellphone" >> "FuseTime")];
_count = _count + 1;

View File

@ -17,10 +17,8 @@
* Public: Yes
*/
#include "script_component.hpp"
private ["_unit", "_explosive", "_clacker", "_config", "_magazineClass", "_requiredItems", "_hasRequired"];
_unit = _this select 0;
_explosive = _this select 1;
_magazineClass = _this select 2;
private ["_clacker", "_config", "_requiredItems", "_hasRequired"];
EXPLODE_3_PVT(_this,_unit,_explosive,_magazineClass);
// Config is the last item in the list of passed in items.
_config = (_this select 3) select (count (_this select 3) - 1);
@ -38,7 +36,9 @@ _config = ConfigFile >> "CfgMagazines" >> _magazineClass >> "ACE_Triggers" >> co
_clacker = _unit getVariable [QGVAR(Clackers), []];
GVAR(PlacedCount) = GVAR(PlacedCount) + 1;
_clacker pushBack [_explosive, getNumber(_config >> "FuseTime"), format [localize "STR_ACE_Explosives_DetonateCode",
GVAR(PlacedCount)], _magazineClass, configName ((_this select 3) select (count (_this select 3) - 1))];
_unit setVariable [QGVAR(Clackers), _clacker, true];
_unit sideChat format [localize "STR_ACE_Explosives_DetonateCode", GVAR(PlacedCount)];

View File

@ -0,0 +1,49 @@
/*
* Author: Garth 'L-H' de Wet
* Opens the UI for explosive detonation selection
*
* Arguments:
* 0: Unit <OBJECT>
* 1: Trigger classname <STRING>
*
* Return Value:
* None
*
* Example:
* [player, "ACE_M26_Clacker"] call ACE_Explosives_fnc_addDetonateActions;
*
* Public: No
*/
#include "script_component.hpp"
private ["_result", "_item", "_children"];
call EFUNC(interaction,hideMenu);
EXPLODE_2_PVT(_this,_unit,_detonator);
_range = GetNumber (ConfigFile >> "CfgWeapons" >> _detonator >> "ACE_Range");
_result = [_unit] call FUNC(getPlacedExplosives);
_children = [];
{
if (!isNull(_x select 0)) then {
_required = getArray (ConfigFile >> "CfgACE_Triggers" >> (_x select 4) >> "requires");
if (_detonator in _required) then {
_item = ConfigFile >> "CfgMagazines" >> (_x select 3);
_children pushBack
[
[
format ["Explosive_%1", _forEachIndex],
_x select 2,
getText(_item >> "picture"),
{(_this select 2) call FUNC(detonateExplosive);},
{true},
{},
[ACE_player,_range,_x]
] call EFUNC(interact_menu,createAction),
[],
ACE_Player
];
};
};
} foreach _result;
_children

View File

@ -0,0 +1,56 @@
/*
* Author: Garth 'L-H' de Wet and CAA-Picard
*
*
* Arguments:
* 0: Unit <OBJECT>
*
* Return Value:
* Actions
*
* Public: No
*/
#include "script_component.hpp"
private ["_mags", "_item", "_index", "_children"];
EXPLODE_1_PVT(_this,_unit);
_mags = magazines _unit;
_list = [];
_itemCount = [];
{
_item = ConfigFile >> "CfgMagazines" >> _x;
if (getNumber(_item >> "ACE_Placeable") == 1) then {
_index = _list find _item;
if (_index != -1) then {
_itemCount set [_index, (_itemCount select _index) + 1];
} else {
_list pushBack _item;
_itemCount pushBack 1;
};
};
} forEach _mags;
_children = [];
{
private "_name";
_name = if(isText(_x >> "displayNameShort") && {getText(_x >> "displayNameShort") != ""}) then
{getText (_x >> "displayNameShort")}else{getText(_x >> "displayName")};
_children pushBack
[
[
format ["Explosive_%1", _forEachIndex],
format [_name + " (%1)", _itemCount select _foreachIndex],
getText(_x >> "picture"),
{(_this select 2) call FUNC(setupExplosive);},
{true},
{},
[_unit, configName _x]
] call EFUNC(interact_menu,createAction),
[],
_unit
];
} foreach _list;
_children

View File

@ -0,0 +1,39 @@
/*
* Author: Garth 'L-H' de Wet
* Opens the UI for selecting the transmitter
*
* Arguments:
* 0: Unit <OBJECT>
*
* Return Value:
* Nothing
*
* Example:
* [player] call ACE_Explosives_fnc_addTransmitterActions;
*
* Public: No
*/
#include "script_component.hpp"
private ["_items", "_unit", "_children", "_config"];
_unit = _this select 0;
_detonators = [_unit] call FUNC(getDetonators);
_children = [];
{
_config = ConfigFile >> "CfgWeapons" >> _x;
_children pushBack
[
[
format ["Trigger_%1", _forEachIndex],
getText(_config >> "displayName"),
getText(_config >> "picture"),
{},
{true},
{(_this select 2) call FUNC(addDetonateActions);},
[ACE_player,_x]
] call EFUNC(interact_menu,createAction),
[],
ACE_Player
];
} foreach _detonators;
_children

View File

@ -0,0 +1,56 @@
/*
* Author: Garth 'L-H' de Wet
* Opens the UI for explosive trigger selection
*
* Arguments:
* 0: Explosive Magazine <STRING>
* 1: Explosive <OBJECT>
*
* Return Value:
* None
*
* Example:
* [lbData [8866, lbCurSel 8866], _explosive] call ACE_Explosives_fnc_addTriggerActions;
*
* Public: No
*/
#include "script_component.hpp"
private ["_hasRequiredItems","_triggerTypes", "_children",
"_detonators", "_required", "_magTriggers"];
EXPLODE_2_PVT(_this,_magazine,_explosive);
_detonators = [ACE_player] call FUNC(getDetonators);
_triggerTypes = [_magazine] call FUNC(triggerType);
_magTriggers = ConfigFile >> "CfgMagazines" >> _magazine >> "ACE_Triggers";
_children = [];
{
_required = getArray (_x >> "requires");
_hasRequiredItems = true;
{
if !(_x in _detonators) exitWith {
_hasRequiredItems = false;
};
} count _required;
if (_hasRequiredItems) then {
_children pushBack
[
[
format ["Trigger_%1", _forEachIndex],
if(isText(_magTriggers >> configName _x >> "displayName"))then
{getText(_magTriggers >> configName _x >> "displayName")}
else{getText(_x >> "displayName")},
if(isText(_magTriggers >> configName _x >> "picture"))then
{getText(_magTriggers >> configName _x >> "picture")}
else{getText(_x >> "picture")},
{(_this select 2) call FUNC(selectTrigger);},
{true},
{},
[_explosive, _magazine, configName _x]
] call EFUNC(interact_menu,createAction),
[],
ACE_Player
];
};
} foreach _triggerTypes;
_children

View File

@ -14,25 +14,15 @@
* Public: Yes
*/
#include "script_component.hpp"
private "_unit";
_unit = _this select 0;
private ["_specialist"];
EXPLODE_2_PVT(_this,_unit,_target);
if (isNull(_target getVariable [QGVAR(Explosive),objNull])) exitWith {
deleteVehicle _target;
false
};
if (vehicle _unit != _unit || {!("ACE_DefusalKit" in (items _unit))}) exitWith {false};
_isSpecialist = [_unit] call EFUNC(Common,isEOD);
if (GVAR(RequireSpecialist) && {!_isSpecialist}) exitWith {false};
_timeBombCore = nearestObject [_unit, "TimeBombCore"];
_mineBase = nearestObject [_unit, "MineBase"];
_distCore = _unit distance _timeBombCore;
_distBase = _unit distance _mineBase;
_distance = 10;
if (_distCore < _distBase) then {
_distance = _distCore;
EGVAR(interaction,Target) = _timeBombCore;
}else{
_distance = _distBase;
EGVAR(interaction,Target) = _mineBase;
};
if (isNil "_distance") exitWith {false};
_distance < 4
true

View File

@ -15,12 +15,16 @@
* Public: Yes
*/
#include "script_component.hpp"
private ["_unit", "_explosive"];
_unit = _this select 0;
_explosive = _this select 1;
EXPLODE_2_PVT(_this,_unit,_explosive);
if (getNumber (ConfigFile >> "CfgAmmo" >> typeof _explosive >> "ACE_explodeOnDefuse") == 1) exitWith {
[_unit, -1, [_explosive, 1], true] call FUNC(detonateExplosive);
};
{
detach _x;
deleteVehicle _x;
false
} count (attachedObjects (_explosive));
_unit action ["Deactivate", _unit, _explosive];

View File

@ -19,15 +19,19 @@
* Public: Yes
*/
#include "script_component.hpp"
private ["_item","_result", "_ignoreRange", "_unit", "_range"];
_unit = _this select 0;
_range = _this select 1;
_item = _this select 2;
private ["_result", "_ignoreRange", "_helper"];
EXPLODE_3_PVT(_this,_unit,_range,_item);
_ignoreRange = (_range == -1);
_result = true;
if (!_ignoreRange && {(_unit distance (_item select 0)) > _range}) exitWith {false};
_helper = (attachedTo (_item select 0));
if (!isNull(_helper)) then {
detach (_item select 0);
deleteVehicle _helper;
};
if (getNumber (ConfigFile >> "CfgAmmo" >> typeof (_item select 0) >> "TriggerWhenDestroyed") == 0) then {
private ["_exp", "_previousExp"];
_previousExp = _item select 0;
@ -44,7 +48,7 @@ if (getNumber (ConfigFile >> "CfgAmmo" >> typeof (_item select 0) >> "TriggerWhe
[{
_explosive = _this;
if (!isNull _explosive) then {
_explosive setDamage 1;
_explosive setDamage 1;
};
}, _item select 0, _item select 1, 0] call EFUNC(common,waitAndExecute);

View File

@ -27,7 +27,7 @@ _adjustedList = false;
_clackerList = _unit getVariable [QGVAR(Clackers), []];
_list = [];
{
if isNull (_x select 0) then {
if (isNull (_x select 0)) then {
_clackerList set [_foreachIndex, "X"];
_adjustedList = true;
} else {

View File

@ -19,9 +19,9 @@ private ["_explosive"];
if (isNil QGVAR(CellphoneIEDs)) exitWith {[]};
_explosive = [];
{
if ((_x select 1) == _code) exitWith {
_explosive = _x;
};
false
if ((_x select 1) == _code) exitWith {
_explosive = _x;
};
false
} count GVAR(CellphoneIEDs);
_explosive

View File

@ -14,7 +14,6 @@
* Public: No
*/
#include "script_component.hpp"
private ["_obj"];
if (isNull(GVAR(Setup)) || {ACE_Modifier == 0} || !GVAR(pfeh_running)) exitWith {false};
_this = _this * 5;
GVAR(Setup) setDir ((getDir GVAR(Setup)) + _this);

View File

@ -20,7 +20,9 @@ _activated = _this select 2;
if !(_activated) exitWith {};
[_logic, QGVAR(RequireSpecialist), "RequireSpecialist" ] call EFUNC(Common,readSettingFromModule);
[_logic, QGVAR(PunishNonSpecialists), "PunishNonSpecialists" ] call EFUNC(Common,readSettingFromModule);
[_logic, QGVAR(RequireSpecialist), "RequireSpecialist"]
call EFUNC(Common,readSettingFromModule);
[_logic, QGVAR(PunishNonSpecialists),"PunishNonSpecialists"]
call EFUNC(Common,readSettingFromModule);
diag_log text "[ACE]: Explosive Module Initialized.";

View File

@ -0,0 +1,39 @@
/*
* Author: Garth 'L-H' de Wet
*
* Arguments:
*
* Return Value:
* None
*
* Example:
* object addEventHandler ["EpeContactStart", ACE_explosive_fnc_onLanded];
*
* Public: No
*/
#include "script_component.hpp"
EXPLODE_2_PVT(_this,_explosive,_hitTarget);
if ((_explosive getVariable [QGVAR(Handled), false])) exitWith {};
_explosive setVariable [QGVAR(Handled), true];
if (!isNull _hitTarget && {_hitTarget isKindOf "AllVehicles"}) then {
_explosive attachTo [_hitTarget];
private "_dir";
_dir = _setup getVariable [QGVAR(Direction), 0];
_dir = _dir - (getDir _hitTarget);
[[_explosive, _dir, 0], QFUNC(setPosition)] call EFUNC(common,execRemoteFnc);
} else {
[{
EXPLODE_2_PVT(_this,_player,_explosive);
private "_pos";
_player setVariable [QGVAR(PlantingExplosive), false];
if (surfaceIsWater _pos) then {
_pos = getPosASL _explosive;
_explosive setPosASL _pos;
}else{
_pos = getPosATL _explosive;
_explosive setPosATL _pos;
};
}, [ACE_player, _explosive], 0.5, 0.1] call EFUNC(common,waitAndExecute);
};

View File

@ -1,61 +0,0 @@
/*
* Author: Garth 'L-H' de Wet
* Opens the UI for explosive detonation selection
*
* Arguments:
* 0: Unit <OBJECT>
* 1: Trigger classname <STRING>
*
* Return Value:
* None
*
* Example:
* [player, "ACE_M26_Clacker"] call ACE_Explosives_fnc_openDetonateUI;
*
* Public: No
*/
#include "script_component.hpp"
private ["_unit","_result", "_item"];
call EFUNC(interaction,hideMenu);
_unit = _this select 0;
_detonator = _this select 1;
_range = GetNumber (ConfigFile >> "CfgWeapons" >> _detonator >> "ACE_Range");
_result = [_unit] call FUNC(getPlacedExplosives);
_actions = [localize "STR_ACE_Explosives_DetonateMenu", localize "STR_ACE_Explosives_Detonate"]
call EFUNC(interaction,prepareSelectMenu);
_count = 0;
{
if (!isNull(_x select 0)) then {
_required = getArray (ConfigFile >> "CfgACE_Triggers" >> (_x select 4) >> "requires");
if (_detonator in _required) then {
_item = ConfigFile >> "CfgMagazines" >> (_x select 3);
_actions = [
_actions,
_x select 2,
getText(_item >> "picture"),
[_foreachIndex, _range]
] call EFUNC(interaction,AddSelectableItem);
_count = _count + 1;
};
};
} foreach _result;
if (_count > 0) then {
[
_actions,
{
[
ACE_player,
[_this select 1] call EFUNC(common,toNumber),
(ACE_player getVariable [QGVAR(Clackers), []]) select ([_this select 0] call EFUNC(common,toNumber)),
false
] call FUNC(detonateExplosive);
call EFUNC(interaction,hideMenu);
},
{[ACE_player] call FUNC(openTransmitterUI);}
] call EFUNC(interaction,openSelectMenu);
}else{
call EFUNC(interaction,hideMenu);
[ACE_player] call FUNC(openTransmitterUI);
[localize "STR_ACE_Explosives_NoExplosivesAvailable"] call EFUNC(common,displayTextStructured);
};

View File

@ -1,55 +0,0 @@
/*
* Author: Garth 'L-H' de Wet
* Opens the UI for explosive placement selection
*
* Arguments:
* 0: Unit <OBJECT>
*
* Return Value:
* None
*
* Example:
* [player] call ACE_Explosives_fnc_openPlaceUI;
*
* Public: No
*/
#include "script_component.hpp"
private ["_unit","_mags", "_item", "_index", "_actions"];
_unit = _this select 0;
call FUNC(place_Cancel);
_mags = magazines _unit;
_list = [];
_itemCount = [];
{
_item = ConfigFile >> "CfgMagazines" >> _x;
if (getNumber(_item >> "ACE_Placeable") == 1) then {
_index = _list find _item;
if (_index != -1) then {
_itemCount set [_index, (_itemCount select _index) + 1];
} else {
_list pushBack _item;
_itemCount pushBack 1;
};
};
} forEach _mags;
_actions = [localize "STR_ACE_Explosives_PlaceMenu", localize "STR_ACE_Explosives_Place"]
call EFUNC(interaction,prepareSelectMenu);
{
_actions = [
_actions,
format [getText(_x >> "displayName") + " (%1)", _itemCount select _foreachIndex],
getText(_x >> "picture"),
configName _x
] call EFUNC(interaction,AddSelectableItem);
} foreach _list;
[
_actions,
{
[_this] call FUNC(openTriggerSelectionUI);
},
{
call EFUNC(interaction,hideMenu);
}
] call EFUNC(interaction,openSelectMenu);

View File

@ -3,24 +3,39 @@
* Opens the UI for timer setting of an explosive
*
* Arguments:
* 0: Magazine <STRING>
* 0: Explosive <OBJECT>
* 1: Magazine <STRING>
*
* Return Value:
* None
*
* Example:
* ["SatchelCharge_Remote_Mag"] call ACE_Explosives_fnc_openTimerSetUI;
* [_explosive, "SatchelCharge_Remote_Mag"] call ACE_Explosives_fnc_openTimerSetUI;
*
* Public: No
*/
#include "script_component.hpp"
private ["_mag"];
_mag = _this select 0;
EXPLODE_2_PVT(_this,_explosive,_mag);
createDialog "RscACE_SelectTimeUI";
sliderSetRange [8845, 5, 900]; // 5seconds - 15minutes
sliderSetPosition [8845, 30];
buttonSetAction [8860, format[QUOTE([ARR_4(ACE_player,'%1','Timer',floor sliderPosition 8845)] call FUNC(setupExplosive);closeDialog 0;), _mag]];
buttonSetAction [8855, format[QUOTE(['%1'] call FUNC(openTriggerSelectionUI);), _mag]];
GVAR(explosive) = _explosive;
DFUNC(SetTimer) = {
[
ACE_player,
getPosATL GVAR(explosive),
GVAR(explosive) getVariable QGVAR(Direction),
GVAR(explosive) getVariable QGVAR(class),
"Timer",
[floor sliderPosition 8845],
GVAR(explosive)
] call FUNC(placeExplosive);
closeDialog 0;
};
buttonSetAction [8860, QUOTE(call DFUNC(SetTimer);)];
buttonSetAction [8855, QUOTE(closeDialog 0;)];
ctrlSetText [8870, format[localize "STR_ACE_Explosives_TimerMenu",0, 30]];

View File

@ -1,48 +0,0 @@
/*
* Author: Garth 'L-H' de Wet
* Opens the UI for selecting the transmitter
*
* Arguments:
* 0: Unit <OBJECT>
*
* Return Value:
* Nothing
*
* Example:
* [player] call ACE_Explosives_fnc_openTransmitterUI;
*
* Public: No
*/
#include "script_component.hpp"
private ["_items", "_unit", "_count", "_actions", "_config"];
_unit = _this select 0;
_items = (items _unit);
_actions = [localize "STR_ACE_Explosives_TriggerMenu", localize "STR_ACE_Explosives_SelectTrigger"]
call EFUNC(interaction,prepareSelectMenu);
_detonators = [_unit] call FUNC(getDetonators);
{
_config = ConfigFile >> "CfgWeapons" >> _x;
_actions = [
_actions,
getText(_config >> "displayName"),
getText(_config >> "picture"),
_x
] call EFUNC(interaction,addSelectableItem);
} count _detonators;
if (count _detonators == 0) then {
call EFUNC(interaction,hideMenu);
"ACE_Explosives" call EFUNC(interaction,openMenuSelf);
[format[localize "STR_ACE_Explosives_NoTriggersAvailable", "player"]] call EFUNC(Common,displayTextStructured);
}else{
[
_actions,
{
[ACE_player, _this] call FUNC(openDetonateUI);
},
{
call EFUNC(interaction,hideMenu);
}
] call EFUNC(interaction,openSelectMenu);
};

View File

@ -1,57 +0,0 @@
/*
* Author: Garth 'L-H' de Wet
* Opens the UI for explosive trigger selection
*
* Arguments:
* 0: Explosive Magazine <STRING>
*
* Return Value:
* None
*
* Example:
* [lbData [8866, lbCurSel 8866]] call ACE_Explosives_fnc_openTriggerSelectionUI;
*
* Public: No
*/
#include "script_component.hpp"
private ["_magazine", "_hasRequiredItems","_triggerTypes", "_actions", "_detonators", "_required", "_magTriggers"];
_magazine = _this select 0;
_detonators = [ACE_player] call FUNC(getDetonators);
_triggerTypes = [_magazine] call FUNC(triggerType);
_magTriggers = ConfigFile >> "CfgMagazines" >> _magazine >> "ACE_Triggers";
_actions = [localize "STR_ACE_Explosives_TriggerMenu", localize "STR_ACE_Explosives_SelectTrigger"]
call EFUNC(interaction,prepareSelectMenu);
_count = 0;
{
_required = getArray (_x >> "requires");
_hasRequiredItems = true;
{
if !(_x in _detonators) exitWith {
_hasRequiredItems = false;
};
} count _required;
if (_hasRequiredItems) then {
_actions = [
_actions,
if(isText(_magTriggers >> configName _x >> "displayName"))then{getText(_magTriggers >> configName _x >> "displayName")}else{getText(_x >> "displayName")},
if(isText(_magTriggers >> configName _x >> "picture"))then{getText(_magTriggers >> configName _x >> "picture")}else{getText(_x >> "picture")},
[configName _x, _magazine]
] call EFUNC(interaction,addSelectableItem);
_count = _count + 1;
};
} count _triggerTypes;
if (_count == 0) then {
[ACE_player] call FUNC(openPlaceUI);
[format[localize "STR_ACE_Explosives_NoTriggersAvailable",
getText(configFile >> "CfgMagazines" >> _magazine >> "DisplayName")]] call EFUNC(Common,displayTextStructured);
}else{
[
_actions,
{
[_this select 1, _this select 0] call FUNC(selectTrigger);
},
{[ACE_player] call FUNC(openPlaceUI);}
] call EFUNC(interaction,openSelectMenu);
};

View File

@ -7,30 +7,24 @@
* 1: Position to place explosive <POSITION>
* 2: Rotation <NUMBER>
* 3: Magazine class <STRING>
* 4: Config of trigger <CONFIG>
* 4: Config of trigger <STRING>
* 5: Variables required for the trigger type <ARRAY>
* 6: Should direction be set <BOOL>
* 6: Explosive placeholder <OBJECT> <OPTIONAL>
*
* Return Value:
* Placed explosive <OBJECT>
*
* Example:
* _explosive = [player, player modelToWorldVisual [0,0.5, 0.1], 134,
* "SatchelCharge_Remote_Mag", "Command", []] call ACE_Explosives_fnc_placeExplosive;
* "SatchelCharge_Remote_Mag", "Command", []] call ACE_Explosives_fnc_placeExplosive;
*
* Public: Yes
*/
#include "script_component.hpp"
private ["_pos", "_dir", "_magazineClass", "_ammo", "_triggerSpecificVars", "_unit", "_triggerConfig", "_explosive"];
_unit = _this select 0;
_pos = _this select 1;
_dir = _this select 2;
_magazineClass = _this select 3;
_triggerConfig = _this select 4;
_triggerSpecificVars = _this select 5;
_setDir = true;
private ["_ammo", "_explosive"];
EXPLODE_6_PVT(_this,_unit,_pos,_dir,_magazineClass,_triggerConfig,_triggerSpecificVars);
if (count _this > 6) then {
_setDir = _this select 6;
deleteVehicle (_this select 6);
};
if (isNil "_triggerConfig") exitWith {
@ -51,11 +45,19 @@ if (isText(_magazineTrigger >> "ammo")) then {
_ammo = getText (_magazineTrigger >> "ammo");
};
_triggerSpecificVars pushBack _triggerConfig;
private ["_defuseHelper"];
_defuseHelper = createVehicle ["ACE_DefuseObject", _pos, [], 0, "NONE"];
_defuseHelper setPosATL _pos;
_explosive = createVehicle [_ammo, _pos, [], 0, "NONE"];
_defuseHelper attachTo [_explosive, [0,0,0], ""];
_defuseHelper setVariable [QGVAR(Explosive),_explosive,true];
_expPos = getPosATL _explosive;
_defuseHelper setPosATL (((getPosATL _defuseHelper) vectorAdd (_pos vectorDiff _expPos)));
_explosive setPosATL _pos;
if (isText(_triggerConfig >> "onPlace") && {[_unit,_explosive,_magazineClass,_triggerSpecificVars]
call compile (getText (_triggerConfig >> "onPlace"))}) exitWith {_explosive};
if (_setDir) then {
[[_explosive, _dir, getNumber (_magazineTrigger >> "pitch")], QFUNC(setPosition)]
call EFUNC(common,execRemoteFnc);
};
[[_explosive, _dir, getNumber (_magazineTrigger >> "pitch")], QFUNC(setPosition)] call EFUNC(common,execRemoteFnc);
_explosive

View File

@ -23,10 +23,10 @@ private ["_mag", "_setup", "_player"];
_setup = GVAR(Setup);
GVAR(Setup) = objNull;
[GVAR(placer), "ACE_Explosives", false] call EFUNC(Common,setForceWalkStatus);
[ACE_player, "DefaultAction", ACE_player getVariable [QGVAR(Place), -1]] call EFUNC(Common,removeActionEventHandler);
[ACE_player, "MenuBack", ACE_player getVariable [QGVAR(Cancel), -1]] call EFUNC(Common,removeActionEventHandler);
GVAR(placer) = objNull;
_player = ACE_player;
[_player, "DefaultAction", _player getVariable [QGVAR(Place), -1]] call EFUNC(Common,removeActionEventHandler);
[_player, "MenuBack", _player getVariable [QGVAR(Cancel), -1]] call EFUNC(Common,removeActionEventHandler);
call EFUNC(interaction,hideMouseHint);
if ((_setup getVariable [QGVAR(Class), ""]) == "") exitWith {
deleteVehicle _setup;
@ -39,67 +39,7 @@ if (_dir > 180) then {
};
_setup setVariable [QGVAR(Direction), _dir];
_player setVariable [QGVAR(PlantingExplosive), true];
_setup addEventHandler ["EpeContactStart", {
if (!((_this select 0) getVariable [QGVAR(Handled), false])) then {
private ["_player", "_pos", "_attachTo"];
_player = ACE_player;
_player setVariable [QGVAR(PlantingExplosive), false];
_pos = getPosATL (_this select 0);
(_this select 0) enableSimulationGlobal false;
if (surfaceIsWater _pos) then {
_pos = getPosASL (_this select 0);
(_this select 0) setPosASL _pos;
}else{
(_this select 0) setPosATL _pos;
};
(_this select 0) setVariable [QGVAR(Handled), true];
_attachTo = objNull;
if (!isNull (_this select 1) && {(_this select 1) isKindOf "AllVehicles"}) then {
_attachTo = (_this select 1);
};
[(_this select 0),_attachTo, _pos] spawn { // TODO: Change to scheduled delay execution
private ["_mag", "_setup", "_dir", "_player"];
_setup = _this select 0;
_player = ACE_player;
_mag = _setup getVariable [QGVAR(Class), ""];
_dir = _setup getVariable [QGVAR(Direction), 0];
sleep getNumber(ConfigFile >> "CfgMagazines" >> _mag >> "ACE_DelayTime");
_explosive = [_player, _this select 2, _dir, _mag, _setup getVariable QGVAR(Trigger),
[_setup getVariable QGVAR(Timer)], isNull (_this select 1)] call FUNC(placeExplosive);
deleteVehicle _setup;
if (!isNull(_explosive)) then {
_player RemoveMagazine _mag;
if (!isNull (_this select 1)) then {
_explosive attachTo [(_this select 1)];
_dir = _dir - (getDir (_this select 1));
[[_explosive, _dir, 0], QFUNC(setPosition)] call EFUNC(common,execRemoteFnc);
};
};
};
};
}];
_setup addEventHandler ["EpeContactStart", FUNC(onLanded)];
_setup enableSimulationGlobal true;
_player playActionNow "MedicOther";
[_setup] spawn { // TODO: Change to scheduled delay execution
private ["_setup", "_player"];
_setup = _this select 0;
_player = ACE_player;
sleep 5;
_player setVariable [QGVAR(PlantingExplosive), false];
if (!isNull _setup) then {
private ["_mag", "_dir", "_delayTime"];
_mag = _setup getVariable [QGVAR(Class), ""];
_dir = _setup getVariable [QGVAR(Direction), 0];
_delayTime = (getNumber(ConfigFile >> "CfgMagazines" >> _mag >> "ACE_DelayTime")) - 5;
if (_delayTime > 0) then {
sleep _delayTime;
};
if (!isNull _setup) then {
[_player, GetPosATL _setup, _dir, _mag, _setup getVariable QGVAR(Trigger),
[_setup getVariable QGVAR(Timer)], true] call FUNC(placeExplosive);
deleteVehicle _setup;
_player RemoveMagazine _mag;
};
};
};
_player removeMagazine (_setup getVariable [QGVAR(Class), ""]);

View File

@ -29,4 +29,4 @@ if (isNil {GVAR(placer)}) then {
GVAR(placer) = objNull;
call EFUNC(interaction,hideMouseHint);
[ACE_player, "DefaultAction", ACE_player getVariable [QGVAR(Place), -1]] call EFUNC(Common,removeActionEventHandler);
[ACE_player, "MenuBack", ACE_player getVariable [QGVAR(Cancel), -1]] call EFUNC(Common,removeActionEventHandler);
[ACE_player, "zoomtemp", ACE_player getVariable [QGVAR(Cancel), -1]] call EFUNC(Common,removeActionEventHandler);

View File

@ -3,26 +3,26 @@
* Selects a trigger for an explosive.
*
* Arguments:
* 0: Magazine <STRING>
* 1: Trigger mode <STRING>
* 0: Explosive <OBJECT>
* 1: Magazine <STRING>
* 2: Trigger mode <STRING>
*
* Return Value:
* None
*
* Example:
* ["SatchelCharge_Remote_Mag","Timer"] call ACE_Explosives_fnc_selectTrigger;
* [_explosive, "SatchelCharge_Remote_Mag","Timer"] call ACE_Explosives_fnc_selectTrigger;
*
* Public: No
*/
#include "script_component.hpp"
private ["_magazine","_trigger"];
private ["_config"];
closeDialog 0;
_magazine = _this select 0;
_trigger = _this select 1;
_config = ConfigFile >> "CfgACE_Triggers" >> _trigger;
call EFUNC(interaction,hideMenu);
EXPLODE_3_PVT(_this,_explosive,_magazine,_trigger);
_config = ConfigFile >> "CfgACE_Triggers" >> _trigger;
// If the onSetup function returns true, it is handled elsewhere
if (isText(_config >> "onSetup") && {[_magazine] call compile getText (_config >> "onSetup")}) exitWith {};
if (isText(_config >> "onSetup") && {[_explosive,_magazine] call compile getText (_config >> "onSetup")}) exitWith {};
[ACE_player, _magazine, _trigger] call FUNC(setupExplosive);
[ACE_player, getPosATL _explosive, _explosive getVariable [QGVAR(Direction), 0],_magazine, _trigger, [], _explosive] call ACE_Explosives_fnc_placeExplosive;

View File

@ -16,10 +16,8 @@
* Public: Yes
*/
#include "script_component.hpp"
private "_ex";
_ex = _this select 0;
_ex setDir (_this select 1);
if ((_this select 2) != 0) then {
[_ex, _this select 2, 0] call CALLSTACK(BIS_fnc_setPitchBank);
EXPLODE_3_PVT(_this,_explosive,_direction,_pitch);
_explosive setDir _direction;
if (_pitch != 0) then {
[_explosive, _pitch, 0] call CALLSTACK(BIS_fnc_setPitchBank);
};
//_ex setVectorUp (surfaceNormal _pos);

View File

@ -5,60 +5,45 @@
* Arguments:
* 0: Unit <OBJECT>
* 1: Classname of explosive to place. (CfgMagazine class) <STRING>
* 2: Trigger Config <CONFIG>
* 3: Timer (optional) <NUMBER>
*
* Return Value:
* None
*
* Example:
* [player, "SatchelCharge_Remote_Mag", "Command"] call ACE_Explosives_fnc_SetupExplosive;
* [player, "SatchelCharge_Remote_Mag"] call ACE_Explosives_fnc_SetupExplosive;
*
* Public: Yes
*/
#include "script_component.hpp"
private ["_unit", "_class", "_config", "_timer"];
_unit = _this select 0;
_class = _this select 1;
_config = _this select 2;
_timer = _this select 3;
closeDialog 0;
EXPLODE_2_PVT(_this,_unit,_class);
GVAR(placer) = _unit;
// Commented out due to the fact there is a distinction between who can deactivate mines and who can plant them in standard configs.
// Would require custom config entries (ACE_ExplosiveSpecialist/ACE_Specialist) which excludes custom mods.
//if (ACE_Explosives_RequireSpecialist && {!([_unit] call ACE_Core_fnc_isEOD)}) exitWith {};
if (isNil "_config") then {
_config = getArray(ConfigFile >> "CfgMagazines" >> _class >> "ACE_Triggers" >> "SupportedTriggers") select 0;
};
GVAR(Setup) = getText(ConfigFile >> "CfgMagazines" >> _class >> "ACE_SetupObject") createVehicleLocal [0,0,-10000];
// TODO: check MP performance and MP compatible.
GVAR(Setup) = createVehicle [getText(ConfigFile >> "CfgMagazines" >> _class >> "ACE_SetupObject"),[0,0,-10000],[], 0, "NONE"];
GVAR(Setup) enableSimulationGlobal false;
GVAR(Setup) setVariable [QGVAR(Class), _class];
GVAR(Setup) setVariable [QGVAR(Trigger), _config];
//GVAR(Setup) setVariable [QGVAR(Offset), GetArray(ConfigFile >> "CfgVehicles" >> typeof GVAR(Setup) >> "ACE_Offset")];
if (!isNil "_timer") then {
GVAR(Setup) setVariable [QGVAR(Timer), _timer];
};
GVAR(Setup) setVariable [QGVAR(class), _class, true];
[_unit, "ACE_Explosives", true] call EFUNC(common,setForceWalkStatus);
GVAR(TweakedAngle) = 180;
[QGVAR(Placement),"OnEachFrame", {
private "_player";
_player = ACE_player;
if (GVAR(placer) != _player) exitWith {
call FUNC(place_Cancel);
};
GVAR(pfeh_running) = true;
_pos = (ASLtoATL eyePos _player) vectorAdd (positionCameraToWorld [0,0,1] vectorDiff positionCameraToWorld [0,0,0]);
//_pos = _pos vectorAdd ((VectorDir GVAR(Setup)) vectorCrossProduct (GVAR(Setup) getVariable [QGVAR(Offset), [0,0,0]]));
GVAR(Setup) setPosATL _pos;
if (ACE_Modifier == 0) then {
GVAR(Setup) setDir (GVAR(TweakedAngle) + getDir _player);
};
private "_player";
_player = ACE_player;
if (GVAR(placer) != _player) exitWith {
call FUNC(place_Cancel);
};
GVAR(pfeh_running) = true;
_pos = (ASLtoATL eyePos _player) vectorAdd (positionCameraToWorld [0,0,1] vectorDiff positionCameraToWorld [0,0,0]);
GVAR(Setup) setPosATL _pos;
if (ACE_Modifier == 0) then {
GVAR(Setup) setDir (GVAR(TweakedAngle) + getDir _player);
};
}] call CALLSTACK(BIS_fnc_addStackedEventHandler);
[localize "STR_ACE_Explosives_PlaceAction", localize "STR_ACE_Explosives_CancelAction",
localize "STR_ACE_Explosives_ScrollAction"] call EFUNC(interaction,showMouseHint);
localize "STR_ACE_Explosives_ScrollAction"] call EFUNC(interaction,showMouseHint);
_unit setVariable [QGVAR(Place), [_unit, "DefaultAction",
{GVAR(pfeh_running) AND !isNull (GVAR(Setup))}, {call FUNC(place_Approve);}] call EFUNC(common,AddActionEventHandler)];
_unit setVariable [QGVAR(Cancel), [_unit, "MenuBack",
{GVAR(pfeh_running) AND !isNull (GVAR(Setup))}, {call FUNC(place_Cancel);}] call EFUNC(common,AddActionEventHandler)];
{GVAR(pfeh_running) AND !isNull (GVAR(Setup))}, {call FUNC(place_Approve);}] call EFUNC(common,AddActionEventHandler)];
_unit setVariable [QGVAR(Cancel), [_unit, "zoomtemp",
{GVAR(pfeh_running) AND !isNull (GVAR(Setup))}, {call FUNC(place_Cancel);}] call EFUNC(common,AddActionEventHandler)];

View File

@ -15,49 +15,48 @@
* Public: Yes
*/
#include "script_component.hpp"
private ["_unit","_target"];
_unit = _this select 0;
_target = _this select 1;
EXPLODE_2_PVT(_this,_unit,_target);
_target = attachedTo (_target);
_fnc_DefuseTime = {
_target = _this select 1;
EXPLODE_2_PVT(_this,_specialist,_target);
_defuseTime = 5;
if (isNumber(ConfigFile >> "CfgAmmo" >> typeOf (_target) >> "ACE_DefuseTime")) then {
_defuseTime = getNumber(ConfigFile >> "CfgAmmo" >> typeOf (_target) >> "ACE_DefuseTime");
};
if (!(_this select 0) && {GVAR(PunishNonSpecialists)}) then {
_defuseTime = _defuseTime * 1.5;
};
_defuseTime
_defuseTime = 5;
if (isNumber(ConfigFile >> "CfgAmmo" >> typeOf (_target) >> "ACE_DefuseTime")) then {
_defuseTime = getNumber(ConfigFile >> "CfgAmmo" >> typeOf (_target) >> "ACE_DefuseTime");
};
if (!_specialist && {GVAR(PunishNonSpecialists)}) then {
_defuseTime = _defuseTime * 1.5;
};
_defuseTime
};
_actionToPlay = "MedicOther";
if (STANCE _unit == "Prone") then {
_actionToPlay = "PutDown";
_actionToPlay = "PutDown";
};
if (ACE_player != _unit) then {
// If the unit is a player, call the function on the player.
if (isPlayer _unit) then {
[[_unit, _target], QFUNC(startDefuse), _unit] call EFUNC(common,execRemoteFnc);
} else {
// TODO: use scheduled delay execution
[_unit, _target, [[_unit] call EFUNC(Common,isEOD), _target] call _fnc_DefuseTime] spawn {
(_this select 0) playActionNow _actionToPlay;
(_this select 0) disableAI "MOVE";
(_this select 0) disableAI "TARGET";
sleep (_this select 2);
[(_this select 0), (_this select 1)] call FUNC(defuseExplosive);
(_this select 0) enableAI "MOVE";
(_this select 0) enableAI "TARGET";
// If the unit is a player, call the function on the player.
if (isPlayer _unit) then {
[[_unit, _target], QFUNC(startDefuse), _unit] call EFUNC(common,execRemoteFnc);
} else {
// TODO: use scheduled delay execution
[_unit, _target, [[_unit] call EFUNC(Common,isEOD), _target] call _fnc_DefuseTime] spawn {
(_this select 0) playActionNow _actionToPlay;
(_this select 0) disableAI "MOVE";
(_this select 0) disableAI "TARGET";
sleep (_this select 2);
[(_this select 0), (_this select 1)] call FUNC(defuseExplosive);
(_this select 0) enableAI "MOVE";
(_this select 0) enableAI "TARGET";
};
};
};
} else {
_unit playActionNow _actionToPlay;
private ["_defuseSeconds", "_isEOD"];
_isEOD = [_unit] call EFUNC(Common,isEOD);
_defuseSeconds = [_isEOD, _target] call _fnc_DefuseTime;
if (_isEOD || {!GVAR(RequireSpecialist)}) then {
[_defuseSeconds, [_unit,_target], {(_this select 0) call FUNC(defuseExplosive)}, {}, (localize "STR_ACE_Explosives_DefusingExplosive")] call EFUNC(common,progressBar);
};
_unit playActionNow _actionToPlay;
private ["_defuseSeconds", "_isEOD"];
_isEOD = [_unit] call EFUNC(Common,isEOD);
_defuseSeconds = [_isEOD, _target] call _fnc_DefuseTime;
if (_isEOD || {!GVAR(RequireSpecialist)}) then {
[_defuseSeconds, [_unit,_target], {(_this select 0) call FUNC(defuseExplosive)}, {}, (localize "STR_ACE_Explosives_DefusingExplosive")] call EFUNC(common,progressBar);
};
};

View File

@ -21,6 +21,6 @@ EXPLODE_2_PVT(_this,_explosive,_delay);
[{
_explosive = _this;
if (!isNull _explosive) then {
[_explosive, -1, [_explosive, 0], true] call FUNC(detonateExplosive);
[_explosive, -1, [_explosive, 0]] call FUNC(detonateExplosive);
};
}, _explosive, _delay, 0] call EFUNC(common,waitAndExecute);

View File

@ -1,494 +1,497 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler - 2014-12-16 -->
<Project name="ACE">
<Package name="Explosives">
<Key ID="STR_ACE_Explosives_Menu">
<English>Explosives</English>
<German>Sprengstoffe</German>
<Spanish>Explosivos</Spanish>
<Polish>Ładunki wybuchowe</Polish>
<French>Explosifs</French>
<Czech>Výbušniny</Czech>
<Italian>Esplosivi</Italian>
<Hungarian>Robbanóanyagok</Hungarian>
<Portuguese>Explosivos</Portuguese>
<Russian>Взрывчатка</Russian>
</Key>
<Key ID="STR_ACE_Explosives_Place">
<English>Place &gt;&gt;</English>
<German>Platzieren &gt;&gt;</German>
<Spanish>Colocar &gt;&gt;</Spanish>
<Polish>Umieść &gt;&gt;</Polish>
<French>Placer &gt;&gt;</French>
<Czech>Položit &gt;&gt;</Czech>
<Italian>Piazza &gt;&gt;</Italian>
<Hungarian>Lerakás &gt;&gt;</Hungarian>
<Portuguese>Colocar &gt;&gt;</Portuguese>
<Russian>Установить &gt;&gt;</Russian>
</Key>
<Key ID="STR_ACE_Explosives_Detonate">
<English>Detonate &gt;&gt;</English>
<German>Zünden &gt;&gt;</German>
<Spanish>Detonar &gt;&gt;</Spanish>
<Polish>Detonuj &gt;&gt;</Polish>
<French>Mise à feu &gt;&gt;</French>
<Czech>Odpálit &gt;&gt;</Czech>
<Italian>Detona &gt;&gt;</Italian>
<Hungarian>Robbantás &gt;&gt;</Hungarian>
<Portuguese>Detonar &gt;&gt;</Portuguese>
<Russian>Подрыв &gt;&gt;</Russian>
</Key>
<Key ID="STR_ACE_Explosives_DetonateCode">
<English>Explosive code: %1</English>
<German>Sprengstoffcode: %1</German>
<Spanish>Código del explosivo: %1</Spanish>
<Polish>Kod ładunku: %1</Polish>
<French>Code explosif: %1</French>
<Czech>Kód výbušniny: %1</Czech>
<Italian>Codice dell'esplosivo : %1</Italian>
<Hungarian>Robbanóanyag kódja: %1</Hungarian>
<Portuguese>Código do explosivo: %1</Portuguese>
<Russian>Взрывная код: %1</Russian>
</Key>
<Key ID="STR_ACE_Explosives_PlaceAction">
<English>Place</English>
<German>Platzieren</German>
<Spanish>Colocar</Spanish>
<Polish>Umieść</Polish>
<French>Placer</French>
<Czech>Položit</Czech>
<Italian>Piazza</Italian>
<Hungarian>Elhelyezés</Hungarian>
<Portuguese>Colocar</Portuguese>
<Russian>Положить</Russian>
</Key>
<Key ID="STR_ACE_Explosives_CancelAction">
<English>Cancel</English>
<German>Abbrechen</German>
<Spanish>Cancelar</Spanish>
<Polish>Anuluj</Polish>
<French>Annuler</French>
<Czech>Zrušit</Czech>
<Italian>Annulla</Italian>
<Hungarian>Mégsem</Hungarian>
<Portuguese>Cancelar</Portuguese>
<Russian>Отмена</Russian>
</Key>
<Key ID="STR_ACE_Explosives_ScrollAction">
<English>+ Modifier, rotates</English>
<German>+ Modifikator, drehen</German>
<Spanish>+ Modificador, girar</Spanish>
<French>+ Modificateur, tourner</French>
<Italian>+ Modificatore, rotazione</Italian>
<Czech>+ Otočit</Czech>
<Hungarian>+ Változtatás, forgatás</Hungarian>
<Polish>+ modyfikator, obracanie</Polish>
<Portuguese>+ Modificador, rotaciona</Portuguese>
<Russian>+ Bращать</Russian>
</Key>
<Key ID="STR_ACE_Explosives_Jammer_TurnOn">
<English>Turn On Thor III</English>
<German>Thor III aktivieren</German>
<Spanish>Encender Thor III</Spanish>
<Polish>Włącz Thor III</Polish>
<French>Allumer Thor III</French>
<Czech>Zapnout Thor III</Czech>
<Italian>Accendi Thor III</Italian>
<Hungarian>Thor III bekapcsolása</Hungarian>
<Portuguese>Ativar Thor III</Portuguese>
<Russian>Активировать Thor III</Russian>
</Key>
<Key ID="STR_ACE_Explosives_Jammer_TurnOff">
<English>Turn Off Thor III</English>
<German>Thor III deaktivieren</German>
<Spanish>Apagar Thor III</Spanish>
<Polish>Wyłącz Thor III</Polish>
<French>Éteindre Thor III</French>
<Czech>Vypnout Thor III</Czech>
<Italian>Spegni Thor III</Italian>
<Hungarian>Thor III kikapcsolása</Hungarian>
<Portuguese>Desativar Thor III</Portuguese>
<Russian>Деактивировать Thor III</Russian>
</Key>
<Key ID="STR_ACE_Explosives_cellphone_displayName">
<English>Cellphone</English>
<German>Mobiltelefon</German>
<Spanish>Télefono móvil</Spanish>
<Polish>Telefon komórkowy</Polish>
<French>Téléphone Portable</French>
<Czech>Telefon</Czech>
<Italian>Cellulare</Italian>
<Hungarian>Mobil</Hungarian>
<Portuguese>Celular</Portuguese>
<Russian>Сотовый телефон</Russian>
</Key>
<Key ID="STR_ACE_Explosives_cellphone_description">
<English>Used to remotely trigger explosives</English>
<German>Wird benutzt um Sprengstoffe fernzuzünden</German>
<Spanish>Usado para detonar remotamente explosivos</Spanish>
<Polish>Używany do zdalnego detonowania ładunków wybuchowych</Polish>
<French>Utilisé pour déclencher des explosifs à distance</French>
<Czech>Používaný ke vzdálenému odpalování výbušnin</Czech>
<Italian>Usato per l'attivazione a distanza degli esplosivi</Italian>
<Hungarian>Robbanóanyagok távoli robbantásához</Hungarian>
<Portuguese>Usado para acionar explosivos remotamente</Portuguese>
<Russian>Используется для удаленного запуска взрывчатку</Russian>
</Key>
<Key ID="STR_ACE_Explosives_clacker_displayName">
<English>M57 Firing Device</English>
<German>M57 Zündvorrichtung</German>
<Spanish>Dispositivo de detonación M57</Spanish>
<Polish>Zapalnik M57</Polish>
<French>M57 Dispositif de mise à feu</French>
<Czech>M57 Odpalovací Zařízení</Czech>
<Italian>Detonatore M57</Italian>
<Hungarian>M57 Detonátor</Hungarian>
<Portuguese>M57 Dispositivo de Detonação</Portuguese>
<Russian>Взрыватель M57</Russian>
</Key>
<Key ID="STR_ACE_Explosives_clacker_description">
<English>Used to remotely trigger explosives</English>
<German>Wird benutzt um Sprengstoffe fernzuzünden</German>
<Spanish>Usado para detonar remotamente explosivos</Spanish>
<Polish>Używany do zdalnego detonowania ładunków wybuchowych</Polish>
<French>Utilisé pour déclencher des explosifs à distance</French>
<Czech>Použévané ke vzdálenému odpalování výbušnin</Czech>
<Italian>Usato per l'attivazione a distanza degli esplosivi</Italian>
<Hungarian>Robbanóanyagok távoli robbantásához</Hungarian>
<Portuguese>Usado para acionar explosivos remotamente</Portuguese>
<Russian>Используется для удаленного запуска взрывчатку</Russian>
</Key>
<Key ID="STR_ACE_Explosives_M26_displayName">
<English>M26 Firing Device</English>
<German>M26 Zündvorrichtung</German>
<Spanish>Dispositivo de detonación MK26</Spanish>
<Polish>Zapalnik M26</Polish>
<French>M26 Dispositif de mise à feu</French>
<Czech>M26 Odpalovací Zařízení</Czech>
<Italian>Detonatore M26</Italian>
<Hungarian>M26 Detonátor</Hungarian>
<Portuguese>M26 Dispositivo de Detonação</Portuguese>
<Russian>Взрыватель M26</Russian>
</Key>
<Key ID="STR_ACE_Explosives_MK16_displayName">
<English>M152 RAMS</English>
<German>M152 RAMS</German>
<Czech>M152 RAMS</Czech>
<French>M152 RAMS</French>
<Hungarian>M152 RAMS</Hungarian>
<Polish>M152 RAMS</Polish>
<Portuguese>M152 RAMS</Portuguese>
<Russian>M152 RAMS</Russian>
<Spanish>M152 RAMS</Spanish>
<Italian>M152 RAMS</Italian>
</Key>
<Key ID="STR_ACE_Explosives_DefusalKit_displayName">
<English>Defusal Kit</English>
<German>Entschärfungskit</German>
<Spanish>Kit de desactivación</Spanish>
<Polish>Zestaw do rozbrajania</Polish>
<French>Kit de désamorçage</French>
<Czech>Zneškodňovací sada</Czech>
<Italian>Kit E.O.D.</Italian>
<Hungarian>Hatástalanító felszerelés</Hungarian>
<Portuguese>Kit de desarme</Portuguese>
<Russian>Разминирование комплект</Russian>
</Key>
<Key ID="STR_ACE_Explosives_DefusalKit_description">
<English>Allows defusing of explosives</English>
<German>Erlaubt die Entschärfung von Sprengstoffen</German>
<Spanish>Permite desactivar explosivos</Spanish>
<Polish>Umożliwia rozbrajanie ładunków wybuchowych</Polish>
<French>Permet de désamorçer des explosifs</French>
<Czech>Dovoluje zneškodňování výbušnin</Czech>
<Italian>Consente la disattivazione degli ordigni esplosivi</Italian>
<Hungarian>Robbanóanyagok hatástalanításához</Hungarian>
<Portuguese>Permite o desarme de explosivos</Portuguese>
<Russian>Allows defusing of explosives</Russian>
</Key>
<Key ID="STR_ACE_Explosives_Phone_AddToSpeedDial">
<English>Add to Speed Dial</English>
<German>Zur Schnellauswahl hinzufügen</German>
<Spanish>Agregar a marcado rápido</Spanish>
<Polish>Dodaj do szybkiego wybierania</Polish>
<French>Ajouter à la composition rapide</French>
<Czech>Přidat jako rychlou volbu</Czech>
<Italian>Aggiungi alla selezione rapida</Italian>
<Hungarian>Hozzáadás gyorshíváshoz</Hungarian>
<Portuguese>Adicionar à ligação rápida</Portuguese>
<Russian>Добавить в ускоренный набор</Russian>
</Key>
<Key ID="STR_ACE_Explosives_Clear">
<English>Clear</English>
<German>Löschen</German>
<Spanish>Borrar</Spanish>
<Polish>Usuń</Polish>
<French>Désamorçé</French>
<Czech>Čistý</Czech>
<Italian>Libera</Italian>
<Hungarian>Törlés</Hungarian>
<Portuguese>Limpar</Portuguese>
<Russian>Pассеиваться</Russian>
</Key>
<Key ID="STR_ACE_Explosives_Phone_Dial">
<English>Dial</English>
<German>Wählen</German>
<Spanish>Marcar</Spanish>
<Polish>Wybierz mumer</Polish>
<French>Composer</French>
<Czech>Vytočit</Czech>
<Italian>Composizione numero</Italian>
<Hungarian>Tárcsázás</Hungarian>
<Portuguese>Discar</Portuguese>
<Russian>Hабрать</Russian>
</Key>
<Key ID="STR_ACE_Explosives_Phone_Up">
<English>Up</English>
<German>Hoch</German>
<Spanish>Arriba</Spanish>
<Polish>W górę</Polish>
<French>Haut</French>
<Czech>Nahoru</Czech>
<Italian>Sopra</Italian>
<Hungarian>Fel</Hungarian>
<Portuguese>Cima</Portuguese>
<Russian>Поднять</Russian>
</Key>
<Key ID="STR_ACE_Explosives_Phone_Down">
<English>Down</English>
<German>Runter</German>
<Spanish>Abajo</Spanish>
<Polish>W dół</Polish>
<French>Bas</French>
<Czech>Dolu</Czech>
<Italian>Sotto</Italian>
<Hungarian>Le</Hungarian>
<Portuguese>Baixo</Portuguese>
<Russian>Опустить</Russian>
</Key>
<Key ID="STR_ACE_Explosives_Cancel">
<English>Cancel</English>
<German>Abbrechen</German>
<Spanish>Cancelar</Spanish>
<Polish>Anuluj</Polish>
<French>Annuler</French>
<Czech>Zrušit</Czech>
<Italian>Annulla</Italian>
<Hungarian>Mégsem</Hungarian>
<Portuguese>Cancelar</Portuguese>
<Russian>Отмена</Russian>
</Key>
<Key ID="STR_ACE_Explosives_DetonateMenu">
<English>Detonate Menu</English>
<German>&quot;Zünden&quot;-Menü</German>
<Spanish>Menú de detonación</Spanish>
<Polish>Menu detonowania</Polish>
<French>Menu de mise à feu</French>
<Czech>Menu Detonace</Czech>
<Italian>Menù di detonazione</Italian>
<Hungarian>Robbantás menü</Hungarian>
<Portuguese>Menu de detonação</Portuguese>
<Russian>Меню Подрыв</Russian>
</Key>
<Key ID="STR_ACE_Explosives_PlaceMenu">
<English>Place Menu</English>
<German>&quot;Platzieren&quot;-Menü</German>
<Spanish>Menú de colocación</Spanish>
<Polish>Menu umieszczania</Polish>
<French>Menu Placement</French>
<Czech>Menu Umístění</Czech>
<Italian>Menù di collocamento</Italian>
<Hungarian>Lerakás menü</Hungarian>
<Portuguese>Menu de posicionamento</Portuguese>
<Russian>Меню Установить</Russian>
</Key>
<Key ID="STR_ACE_Explosives_Defuse">
<English>Defuse</English>
<German>Entschärfen</German>
<Spanish>Desactivar</Spanish>
<Polish>Rozbrój</Polish>
<French>Désamorçer</French>
<Czech>Zneškodnit</Czech>
<Italian>Disinnesca</Italian>
<Hungarian>Hatástalanítás</Hungarian>
<Portuguese>Desarmar</Portuguese>
<Russian>Обезвредить</Russian>
</Key>
<Key ID="STR_ACE_Explosives_DefusingExplosive">
<English>Defusing Explosive...</English>
<German>Entschärfe Sprengstoff...</German>
<Spanish>Desactivando explosivo...</Spanish>
<Polish>Rozbrajanie ładunku...</Polish>
<French>Désamorçage des explosifs...</French>
<Czech>Zneškodňuji Výbušninu...</Czech>
<Italian>Esposivo in fase di disattivazione...</Italian>
<Hungarian>Robbanóanyag hatástalaníása...</Hungarian>
<Portuguese>Desarmando Explosivo...</Portuguese>
<Russian>Обезвреживание...</Russian>
</Key>
<Key ID="STR_ACE_Explosives_timerName">
<English>Timer</English>
<German>Zeitzünder</German>
<Spanish>Temporizador</Spanish>
<Polish>Czasomierz</Polish>
<French>Retard</French>
<Czech>Časovač</Czech>
<Italian>Cronometro</Italian>
<Hungarian>Időzített</Hungarian>
<Portuguese>Timer</Portuguese>
<Russian>Временной</Russian>
</Key>
<Key ID="STR_ACE_Explosives_TimerMenu">
<English>Time: %1m %2s</English>
<German>Zeit: %1m %2s</German>
<Spanish>Tiempo: %1m %2s</Spanish>
<Polish>Czas: %1m %2s</Polish>
<French>Temps : %1m %2s</French>
<Czech>Čas: %1m %2s</Czech>
<Italian>Tempo : %1m %2s</Italian>
<Hungarian>Idő: %1m %2s</Hungarian>
<Portuguese>Tempo: %1m %2s</Portuguese>
<Russian>Tемп: %1m %2c</Russian>
</Key>
<Key ID="STR_ACE_Explosives_SetTime">
<English>Set Time</English>
<German>Zeit einstellen</German>
<Spanish>Configurar tiempo</Spanish>
<Polish>Ustaw czas</Polish>
<French>Régler retard</French>
<Czech>Nastavit Čas</Czech>
<Italian>Modifica il conto alla rovescia</Italian>
<Hungarian>Idő állítása</Hungarian>
<Portuguese>Configurar Tempo</Portuguese>
<Russian>Xронометр</Russian>
</Key>
<Key ID="STR_ACE_Explosives_TriggerMenu">
<English>Select a Trigger</English>
<German>Wähle einen Zünder</German>
<Spanish>Seleccionar un disparador</Spanish>
<Polish>Wybierz zapalnik</Polish>
<French>Sélectionner une mise à feu</French>
<Czech>Zvolit Detonátor</Czech>
<Italian>Seleziona un Attivatore</Italian>
<Hungarian>Detonátor kiválasztása</Hungarian>
<Portuguese>Selecionar um Gatilho</Portuguese>
<Russian>Выберите</Russian>
</Key>
<Key ID="STR_ACE_Explosives_SelectTrigger">
<English>Select</English>
<German>Wählen</German>
<Spanish>Seleccionar</Spanish>
<Polish>Wybierz</Polish>
<French>Sélectionner</French>
<Czech>Zvolit</Czech>
<Italian>Seleziona</Italian>
<Hungarian>Kiválasztás</Hungarian>
<Portuguese>Selecionar</Portuguese>
<Russian>Выбрать защелка</Russian>
</Key>
<Key ID="STR_ACE_Explosives_PressurePlate">
<English>Pressure Plate</English>
<Polish>Płyta naciskowa</Polish>
<Spanish>Placa de presión</Spanish>
<German>Druckplatte</German>
<French>Plaque de pression</French>
<Czech>Nášlapná nástraha</Czech>
<Italian>Piastra a Pressione</Italian>
<Hungarian>Nyomólap</Hungarian>
<Portuguese>Placa de pressão</Portuguese>
<Russian>Давление</Russian>
</Key>
<Key ID="STR_ACE_Explosives_TripWire">
<English>Tripwire</English>
<Polish>Linka naciągu</Polish>
<Spanish>Cable trampa</Spanish>
<German>Stolperdraht</German>
<French>Fil de butée</French>
<Czech>Nástražný drát</Czech>
<Italian>Filo a Inciampo</Italian>
<Hungarian>Botlódrót</Hungarian>
<Portuguese>Linha de tração</Portuguese>
<Russian>Натяжной</Russian>
</Key>
<Key ID="STR_ACE_Explosives_IRSensor">
<English>IR Sensor</English>
<Polish>Czujnik podczerwieni</Polish>
<Spanish>Sensor IR</Spanish>
<German>Infrarotsensor</German>
<French>Capteur IR</French>
<Czech>IR Značkovač</Czech>
<Italian>Sensore IR</Italian>
<Hungarian>IR szenzor</Hungarian>
<Portuguese>Sensor IV</Portuguese>
<Russian>ИК</Russian>
</Key>
<Key ID="STR_ACE_Explosives_NoTriggersAvailable">
<English>No triggers available for %1</English>
<Polish>Brak dostępnych zapalników dla %1</Polish>
<Spanish>No hay detonadores disponibles para %1</Spanish>
<German>Keine Auslöser vorhanden für %1</German>
<French>Pas de mise à feu disponible pour %1</French>
<Czech>Žádný detonátor k dispozici pro %1</Czech>
<Italian>Nessun attivatore disponibile per %1</Italian>
<Hungarian>Nincs detonátor a %1</Hungarian>
<Portuguese>Nenhum gatilho disponível para %1</Portuguese>
<Russian>Нет защелка доступны для %1</Russian>
</Key>
<Key ID="STR_ACE_Explosives_SLAME_IRSensor">
<English>IR Sensor (Side Attack)</English>
<Polish>Czujnik podczerwieni (wybuch na bok)</Polish>
<Spanish>Sensor IR (ataque lateral)</Spanish>
<German>Infrarotsensor (Seitenangriff)</German>
<French>Capteur IR (de flanc)</French>
<Czech>IR Značkovač (Výbuch stranou)</Czech>
<Italian>Sensore IR (Attacco laterale)</Italian>
<Hungarian>IR Sensor (Side Attack)</Hungarian>
<Portuguese>Sensor infravermelho (ataque lateral)</Portuguese>
<Russian>ИК (боковая атака)</Russian>
</Key>
<Key ID="STR_ACE_Explosives_SLAME_Magnetic">
<English>Magnetic Influence Sensor (Bottom Attack)</English>
<Polish>Czujnik magnetyczny (wybuch w górę)</Polish>
<Spanish>Sensor IM (ataque inferior)</Spanish>
<German>Magnetfeldsensor (Bodenangriff)</German>
<French>Capteur Magnétique (par le bas)</French>
<Czech>Magnetický Senzor (Výbuch ze spoda)</Czech>
<Italian>Sensore Magnetico di Prossimità (Attacco inferiore)</Italian>
<Hungarian>Mágneses (Bottom Attack)</Hungarian>
<Portuguese>Influência magnética (ataque inferior)</Portuguese>
<Russian>Магнитный (дно атака)</Russian>
</Key>
<Key ID="STR_ACE_Explosives_NoExplosivesAvailable">
<English>No explosives on trigger.</English>
<German>Keine Sprengladungen auf diesem Auslöser.</German>
<Spanish>Ningún explosivo en el detonador.</Spanish>
<French>Pas d'explosif à mettre à feu.</French>
<Italian>Nessun esplosivo sul sensore.</Italian>
<Czech>Žádná výbušnina k odpálení.</Czech>
<Hungarian>Nincs robbanóanyag a detonátorhoz.</Hungarian>
<Polish>Brak ładunków na zapalnik.</Polish>
<Portuguese>Nenhum explosivo no gatilho.</Portuguese>
<Russian>Нет взрывчатки на курок.</Russian>
</Key>
<Key ID="STR_ACE_Explosives_DeadManSwitch_displayName">
<English>Dead Man's Switch</English>
<German>Totmannschalter</German>
<French>Mise à feu par relâchement de pression</French>
<Czech>Spínač mrtvého muže</Czech>
<Polish>Czuwak</Polish>
<Spanish>Detonador de hombre muerto</Spanish>
<Hungarian>Dead Man's Switch</Hungarian>
<Russian>Кнопка мертвеца</Russian>
</Key>
<Key ID="STR_ACE_Explosives_DeadManSwitch_description">
<English>Used to remotely trigger explosives when released.</English>
<German>Zündet Sprengladungen wenn losgelassen.</German>
<French>Déclenche la mise à feu d'un explosif lorsqu'il est libéré.</French>
<Czech>Používaný k vzdálenému odpálení, při uvolnění odpálí výbušniny</Czech>
<Polish>Używany w celu zdalnej detonacji ładunków kiedy jego operator zostanie zabity.</Polish>
<Spanish>Utilizado para detonar explosivos remotamente al soltarlo.</Spanish>
<Hungarian>Robbanóanyagok távoli robbantásához</Hungarian>
<Russian>Используется для дистанционного подрыва, после смерти оператора.</Russian>
</Key>
</Package>
<Package name="Explosives">
<Key ID="STR_ACE_Explosives_Menu">
<English>Explosives</English>
<German>Sprengstoffe</German>
<Spanish>Explosivos</Spanish>
<Polish>Ładunki wybuchowe</Polish>
<French>Explosifs</French>
<Czech>Výbušniny</Czech>
<Italian>Esplosivi</Italian>
<Hungarian>Robbanóanyagok</Hungarian>
<Portuguese>Explosivos</Portuguese>
<Russian>Взрывчатка</Russian>
</Key>
<Key ID="STR_ACE_Explosives_Place">
<English>Place &gt;&gt;</English>
<German>Platzieren &gt;&gt;</German>
<Spanish>Colocar &gt;&gt;</Spanish>
<Polish>Umieść &gt;&gt;</Polish>
<French>Placer &gt;&gt;</French>
<Czech>Položit &gt;&gt;</Czech>
<Italian>Piazza &gt;&gt;</Italian>
<Hungarian>Lerakás &gt;&gt;</Hungarian>
<Portuguese>Colocar &gt;&gt;</Portuguese>
<Russian>Установить &gt;&gt;</Russian>
</Key>
<Key ID="STR_ACE_Explosives_Detonate">
<English>Detonate &gt;&gt;</English>
<German>Zünden &gt;&gt;</German>
<Spanish>Detonar &gt;&gt;</Spanish>
<Polish>Detonuj &gt;&gt;</Polish>
<French>Mise à feu &gt;&gt;</French>
<Czech>Odpálit &gt;&gt;</Czech>
<Italian>Detona &gt;&gt;</Italian>
<Hungarian>Robbantás &gt;&gt;</Hungarian>
<Portuguese>Detonar &gt;&gt;</Portuguese>
<Russian>Подрыв &gt;&gt;</Russian>
</Key>
<Key ID="STR_ACE_Explosives_DetonateCode">
<English>Explosive code: %1</English>
<German>Sprengstoffcode: %1</German>
<Spanish>Código del explosivo: %1</Spanish>
<Polish>Kod ładunku: %1</Polish>
<French>Code explosif: %1</French>
<Czech>Kód výbušniny: %1</Czech>
<Italian>Codice dell'esplosivo : %1</Italian>
<Hungarian>Robbanóanyag kódja: %1</Hungarian>
<Portuguese>Código do explosivo: %1</Portuguese>
<Russian>Взрывная код: %1</Russian>
</Key>
<Key ID="STR_ACE_Explosives_PlaceAction">
<English>Place</English>
<German>Platzieren</German>
<Spanish>Colocar</Spanish>
<Polish>Umieść</Polish>
<French>Placer</French>
<Czech>Položit</Czech>
<Italian>Piazza</Italian>
<Hungarian>Elhelyezés</Hungarian>
<Portuguese>Colocar</Portuguese>
<Russian>Положить</Russian>
</Key>
<Key ID="STR_ACE_Explosives_CancelAction">
<English>Cancel</English>
<German>Abbrechen</German>
<Spanish>Cancelar</Spanish>
<Polish>Anuluj</Polish>
<French>Annuler</French>
<Czech>Zrušit</Czech>
<Italian>Annulla</Italian>
<Hungarian>Mégsem</Hungarian>
<Portuguese>Cancelar</Portuguese>
<Russian>Отмена</Russian>
</Key>
<Key ID="STR_ACE_Explosives_ScrollAction">
<English>+ Modifier, rotates</English>
<German>+ Modifikator, drehen</German>
<Spanish>+ Modificador, girar</Spanish>
<French>+ Modificateur, tourner</French>
<Italian>+ Modificatore, rotazione</Italian>
<Czech>+ Otočit</Czech>
<Hungarian>+ Változtatás, forgatás</Hungarian>
<Polish>+ modyfikator, obracanie</Polish>
<Portuguese>+ Modificador, rotaciona</Portuguese>
<Russian>+ Bращать</Russian>
</Key>
<Key ID="STR_ACE_Explosives_Jammer_TurnOn">
<English>Turn On Thor III</English>
<German>Thor III aktivieren</German>
<Spanish>Encender Thor III</Spanish>
<Polish>Włącz Thor III</Polish>
<French>Allumer Thor III</French>
<Czech>Zapnout Thor III</Czech>
<Italian>Accendi Thor III</Italian>
<Hungarian>Thor III bekapcsolása</Hungarian>
<Portuguese>Ativar Thor III</Portuguese>
<Russian>Активировать Thor III</Russian>
</Key>
<Key ID="STR_ACE_Explosives_Jammer_TurnOff">
<English>Turn Off Thor III</English>
<German>Thor III deaktivieren</German>
<Spanish>Apagar Thor III</Spanish>
<Polish>Wyłącz Thor III</Polish>
<French>Éteindre Thor III</French>
<Czech>Vypnout Thor III</Czech>
<Italian>Spegni Thor III</Italian>
<Hungarian>Thor III kikapcsolása</Hungarian>
<Portuguese>Desativar Thor III</Portuguese>
<Russian>Деактивировать Thor III</Russian>
</Key>
<Key ID="STR_ACE_Explosives_cellphone_displayName">
<English>Cellphone</English>
<German>Mobiltelefon</German>
<Spanish>Télefono móvil</Spanish>
<Polish>Telefon komórkowy</Polish>
<French>Téléphone Portable</French>
<Czech>Telefon</Czech>
<Italian>Cellulare</Italian>
<Hungarian>Mobil</Hungarian>
<Portuguese>Celular</Portuguese>
<Russian>Сотовый телефон</Russian>
</Key>
<Key ID="STR_ACE_Explosives_cellphone_description">
<English>Used to remotely trigger explosives</English>
<German>Wird benutzt um Sprengstoffe fernzuzünden</German>
<Spanish>Usado para detonar remotamente explosivos</Spanish>
<Polish>Używany do zdalnego detonowania ładunków wybuchowych</Polish>
<French>Utilisé pour déclencher des explosifs à distance</French>
<Czech>Používaný ke vzdálenému odpalování výbušnin</Czech>
<Italian>Usato per l'attivazione a distanza degli esplosivi</Italian>
<Hungarian>Robbanóanyagok távoli robbantásához</Hungarian>
<Portuguese>Usado para acionar explosivos remotamente</Portuguese>
<Russian>Используется для удаленного запуска взрывчатку</Russian>
</Key>
<Key ID="STR_ACE_Explosives_clacker_displayName">
<English>M57 Firing Device</English>
<German>M57 Zündvorrichtung</German>
<Spanish>Dispositivo de detonación M57</Spanish>
<Polish>Zapalnik M57</Polish>
<French>M57 Dispositif de mise à feu</French>
<Czech>M57 Odpalovací Zařízení</Czech>
<Italian>Detonatore M57</Italian>
<Hungarian>M57 Detonátor</Hungarian>
<Portuguese>M57 Dispositivo de Detonação</Portuguese>
<Russian>Взрыватель M57</Russian>
</Key>
<Key ID="STR_ACE_Explosives_clacker_description">
<English>Used to remotely trigger explosives</English>
<German>Wird benutzt um Sprengstoffe fernzuzünden</German>
<Spanish>Usado para detonar remotamente explosivos</Spanish>
<Polish>Używany do zdalnego detonowania ładunków wybuchowych</Polish>
<French>Utilisé pour déclencher des explosifs à distance</French>
<Czech>Použévané ke vzdálenému odpalování výbušnin</Czech>
<Italian>Usato per l'attivazione a distanza degli esplosivi</Italian>
<Hungarian>Robbanóanyagok távoli robbantásához</Hungarian>
<Portuguese>Usado para acionar explosivos remotamente</Portuguese>
<Russian>Используется для удаленного запуска взрывчатку</Russian>
</Key>
<Key ID="STR_ACE_Explosives_M26_displayName">
<English>M26 Firing Device</English>
<German>M26 Zündvorrichtung</German>
<Spanish>Dispositivo de detonación MK26</Spanish>
<Polish>Zapalnik M26</Polish>
<French>M26 Dispositif de mise à feu</French>
<Czech>M26 Odpalovací Zařízení</Czech>
<Italian>Detonatore M26</Italian>
<Hungarian>M26 Detonátor</Hungarian>
<Portuguese>M26 Dispositivo de Detonação</Portuguese>
<Russian>Взрыватель M26</Russian>
</Key>
<Key ID="STR_ACE_Explosives_MK16_displayName">
<English>M152 RAMS</English>
<German>M152 RAMS</German>
<Czech>M152 RAMS</Czech>
<French>M152 RAMS</French>
<Hungarian>M152 RAMS</Hungarian>
<Polish>M152 RAMS</Polish>
<Portuguese>M152 RAMS</Portuguese>
<Russian>M152 RAMS</Russian>
<Spanish>M152 RAMS</Spanish>
<Italian>M152 RAMS</Italian>
</Key>
<Key ID="STR_ACE_Explosives_DefusalKit_displayName">
<English>Defusal Kit</English>
<German>Entschärfungskit</German>
<Spanish>Kit de desactivación</Spanish>
<Polish>Zestaw do rozbrajania</Polish>
<French>Kit de désamorçage</French>
<Czech>Zneškodňovací sada</Czech>
<Italian>Kit E.O.D.</Italian>
<Hungarian>Hatástalanító felszerelés</Hungarian>
<Portuguese>Kit de desarme</Portuguese>
<Russian>Разминирование комплект</Russian>
</Key>
<Key ID="STR_ACE_Explosives_DefusalKit_description">
<English>Allows defusing of explosives</English>
<German>Erlaubt die Entschärfung von Sprengstoffen</German>
<Spanish>Permite desactivar explosivos</Spanish>
<Polish>Umożliwia rozbrajanie ładunków wybuchowych</Polish>
<French>Permet de désamorçer des explosifs</French>
<Czech>Dovoluje zneškodňování výbušnin</Czech>
<Italian>Consente la disattivazione degli ordigni esplosivi</Italian>
<Hungarian>Robbanóanyagok hatástalanításához</Hungarian>
<Portuguese>Permite o desarme de explosivos</Portuguese>
<Russian>Allows defusing of explosives</Russian>
</Key>
<Key ID="STR_ACE_Explosives_Phone_AddToSpeedDial">
<English>Add to Speed Dial</English>
<German>Zur Schnellauswahl hinzufügen</German>
<Spanish>Agregar a marcado rápido</Spanish>
<Polish>Dodaj do szybkiego wybierania</Polish>
<French>Ajouter à la composition rapide</French>
<Czech>Přidat jako rychlou volbu</Czech>
<Italian>Aggiungi alla selezione rapida</Italian>
<Hungarian>Hozzáadás gyorshíváshoz</Hungarian>
<Portuguese>Adicionar à ligação rápida</Portuguese>
<Russian>Добавить в ускоренный набор</Russian>
</Key>
<Key ID="STR_ACE_Explosives_Clear">
<English>Clear</English>
<German>Löschen</German>
<Spanish>Borrar</Spanish>
<Polish>Usuń</Polish>
<French>Désamorçé</French>
<Czech>Čistý</Czech>
<Italian>Libera</Italian>
<Hungarian>Törlés</Hungarian>
<Portuguese>Limpar</Portuguese>
<Russian>Pассеиваться</Russian>
</Key>
<Key ID="STR_ACE_Explosives_Phone_Dial">
<English>Dial</English>
<German>Wählen</German>
<Spanish>Marcar</Spanish>
<Polish>Wybierz mumer</Polish>
<French>Composer</French>
<Czech>Vytočit</Czech>
<Italian>Composizione numero</Italian>
<Hungarian>Tárcsázás</Hungarian>
<Portuguese>Discar</Portuguese>
<Russian>Hабрать</Russian>
</Key>
<Key ID="STR_ACE_Explosives_Phone_Up">
<English>Up</English>
<German>Hoch</German>
<Spanish>Arriba</Spanish>
<Polish>W górę</Polish>
<French>Haut</French>
<Czech>Nahoru</Czech>
<Italian>Sopra</Italian>
<Hungarian>Fel</Hungarian>
<Portuguese>Cima</Portuguese>
<Russian>Поднять</Russian>
</Key>
<Key ID="STR_ACE_Explosives_Phone_Down">
<English>Down</English>
<German>Runter</German>
<Spanish>Abajo</Spanish>
<Polish>W dół</Polish>
<French>Bas</French>
<Czech>Dolu</Czech>
<Italian>Sotto</Italian>
<Hungarian>Le</Hungarian>
<Portuguese>Baixo</Portuguese>
<Russian>Опустить</Russian>
</Key>
<Key ID="STR_ACE_Explosives_Cancel">
<English>Cancel</English>
<German>Abbrechen</German>
<Spanish>Cancelar</Spanish>
<Polish>Anuluj</Polish>
<French>Annuler</French>
<Czech>Zrušit</Czech>
<Italian>Annulla</Italian>
<Hungarian>Mégsem</Hungarian>
<Portuguese>Cancelar</Portuguese>
<Russian>Отмена</Russian>
</Key>
<Key ID="STR_ACE_Explosives_DetonateMenu">
<English>Detonate Menu</English>
<German>&quot;Zünden&quot;-Menü</German>
<Spanish>Menú de detonación</Spanish>
<Polish>Menu detonowania</Polish>
<French>Menu de mise à feu</French>
<Czech>Menu Detonace</Czech>
<Italian>Menù di detonazione</Italian>
<Hungarian>Robbantás menü</Hungarian>
<Portuguese>Menu de detonação</Portuguese>
<Russian>Меню Подрыв</Russian>
</Key>
<Key ID="STR_ACE_Explosives_PlaceMenu">
<English>Place Menu</English>
<German>&quot;Platzieren&quot;-Menü</German>
<Spanish>Menú de colocación</Spanish>
<Polish>Menu umieszczania</Polish>
<French>Menu Placement</French>
<Czech>Menu Umístění</Czech>
<Italian>Menù di collocamento</Italian>
<Hungarian>Lerakás menü</Hungarian>
<Portuguese>Menu de posicionamento</Portuguese>
<Russian>Меню Установить</Russian>
</Key>
<Key ID="STR_ACE_Explosives_Defuse">
<English>Defuse</English>
<German>Entschärfen</German>
<Spanish>Desactivar</Spanish>
<Polish>Rozbrój</Polish>
<French>Désamorçer</French>
<Czech>Zneškodnit</Czech>
<Italian>Disinnesca</Italian>
<Hungarian>Hatástalanítás</Hungarian>
<Portuguese>Desarmar</Portuguese>
<Russian>Обезвредить</Russian>
</Key>
<Key ID="STR_ACE_Explosives_DefusingExplosive">
<English>Defusing Explosive...</English>
<German>Entschärfe Sprengstoff...</German>
<Spanish>Desactivando explosivo...</Spanish>
<Polish>Rozbrajanie ładunku...</Polish>
<French>Désamorçage des explosifs...</French>
<Czech>Zneškodňuji Výbušninu...</Czech>
<Italian>Esposivo in fase di disattivazione...</Italian>
<Hungarian>Robbanóanyag hatástalaníása...</Hungarian>
<Portuguese>Desarmando Explosivo...</Portuguese>
<Russian>Обезвреживание...</Russian>
</Key>
<Key ID="STR_ACE_Explosives_timerName">
<English>Timer</English>
<German>Zeitzünder</German>
<Spanish>Temporizador</Spanish>
<Polish>Czasomierz</Polish>
<French>Retard</French>
<Czech>Časovač</Czech>
<Italian>Cronometro</Italian>
<Hungarian>Időzített</Hungarian>
<Portuguese>Timer</Portuguese>
<Russian>Временной</Russian>
</Key>
<Key ID="STR_ACE_Explosives_TimerMenu">
<English>Time: %1m %2s</English>
<German>Zeit: %1m %2s</German>
<Spanish>Tiempo: %1m %2s</Spanish>
<Polish>Czas: %1m %2s</Polish>
<French>Temps : %1m %2s</French>
<Czech>Čas: %1m %2s</Czech>
<Italian>Tempo : %1m %2s</Italian>
<Hungarian>Idő: %1m %2s</Hungarian>
<Portuguese>Tempo: %1m %2s</Portuguese>
<Russian>Tемп: %1m %2c</Russian>
</Key>
<Key ID="STR_ACE_Explosives_SetTime">
<English>Set Time</English>
<German>Zeit einstellen</German>
<Spanish>Configurar tiempo</Spanish>
<Polish>Ustaw czas</Polish>
<French>Régler retard</French>
<Czech>Nastavit Čas</Czech>
<Italian>Modifica il conto alla rovescia</Italian>
<Hungarian>Idő állítása</Hungarian>
<Portuguese>Configurar Tempo</Portuguese>
<Russian>Xронометр</Russian>
</Key>
<Key ID="STR_ACE_Explosives_TriggerMenu">
<English>Select a Trigger</English>
<German>Wähle einen Zünder</German>
<Spanish>Seleccionar un disparador</Spanish>
<Polish>Wybierz zapalnik</Polish>
<French>Sélectionner une mise à feu</French>
<Czech>Zvolit Detonátor</Czech>
<Italian>Seleziona un Attivatore</Italian>
<Hungarian>Detonátor kiválasztása</Hungarian>
<Portuguese>Selecionar um Gatilho</Portuguese>
<Russian>Выберите</Russian>
</Key>
<Key ID="STR_ACE_Explosives_SelectTrigger">
<English>Select</English>
<German>Wählen</German>
<Spanish>Seleccionar</Spanish>
<Polish>Wybierz</Polish>
<French>Sélectionner</French>
<Czech>Zvolit</Czech>
<Italian>Seleziona</Italian>
<Hungarian>Kiválasztás</Hungarian>
<Portuguese>Selecionar</Portuguese>
<Russian>Выбрать защелка</Russian>
</Key>
<Key ID="STR_ACE_Explosives_PressurePlate">
<English>Pressure Plate</English>
<Polish>Płyta naciskowa</Polish>
<Spanish>Placa de presión</Spanish>
<German>Druckplatte</German>
<French>Plaque de pression</French>
<Czech>Nášlapná nástraha</Czech>
<Italian>Piastra a Pressione</Italian>
<Hungarian>Nyomólap</Hungarian>
<Portuguese>Placa de pressão</Portuguese>
<Russian>Давление</Russian>
</Key>
<Key ID="STR_ACE_Explosives_TripWire">
<English>Tripwire</English>
<Polish>Linka naciągu</Polish>
<Spanish>Cable trampa</Spanish>
<German>Stolperdraht</German>
<French>Fil de butée</French>
<Czech>Nástražný drát</Czech>
<Italian>Filo a Inciampo</Italian>
<Hungarian>Botlódrót</Hungarian>
<Portuguese>Linha de tração</Portuguese>
<Russian>Натяжной</Russian>
</Key>
<Key ID="STR_ACE_Explosives_IRSensor">
<English>IR Sensor</English>
<Polish>Czujnik podczerwieni</Polish>
<Spanish>Sensor IR</Spanish>
<German>Infrarotsensor</German>
<French>Capteur IR</French>
<Czech>IR Značkovač</Czech>
<Italian>Sensore IR</Italian>
<Hungarian>IR szenzor</Hungarian>
<Portuguese>Sensor IV</Portuguese>
<Russian>ИК</Russian>
</Key>
<Key ID="STR_ACE_Explosives_NoTriggersAvailable">
<English>No triggers available for %1</English>
<Polish>Brak dostępnych zapalników dla %1</Polish>
<Spanish>No hay detonadores disponibles para %1</Spanish>
<German>Keine Auslöser vorhanden für %1</German>
<French>Pas de mise à feu disponible pour %1</French>
<Czech>Žádný detonátor k dispozici pro %1</Czech>
<Italian>Nessun attivatore disponibile per %1</Italian>
<Hungarian>Nincs detonátor a %1</Hungarian>
<Portuguese>Nenhum gatilho disponível para %1</Portuguese>
<Russian>Нет защелка доступны для %1</Russian>
</Key>
<Key ID="STR_ACE_Explosives_SLAME_IRSensor">
<English>IR Sensor (Side Attack)</English>
<Polish>Czujnik podczerwieni (wybuch na bok)</Polish>
<Spanish>Sensor IR (ataque lateral)</Spanish>
<German>Infrarotsensor (Seitenangriff)</German>
<French>Capteur IR (de flanc)</French>
<Czech>IR Značkovač (Výbuch stranou)</Czech>
<Italian>Sensore IR (Attacco laterale)</Italian>
<Hungarian>IR Sensor (Side Attack)</Hungarian>
<Portuguese>Sensor infravermelho (ataque lateral)</Portuguese>
<Russian>ИК (боковая атака)</Russian>
</Key>
<Key ID="STR_ACE_Explosives_SLAME_Magnetic">
<English>Magnetic Influence Sensor (Bottom Attack)</English>
<Polish>Czujnik magnetyczny (wybuch w górę)</Polish>
<Spanish>Sensor IM (ataque inferior)</Spanish>
<German>Magnetfeldsensor (Bodenangriff)</German>
<French>Capteur Magnétique (par le bas)</French>
<Czech>Magnetický Senzor (Výbuch ze spoda)</Czech>
<Italian>Sensore Magnetico di Prossimità (Attacco inferiore)</Italian>
<Hungarian>Mágneses (Bottom Attack)</Hungarian>
<Portuguese>Influência magnética (ataque inferior)</Portuguese>
<Russian>Магнитный (дно атака)</Russian>
</Key>
<Key ID="STR_ACE_Explosives_NoExplosivesAvailable">
<English>No explosives on trigger.</English>
<German>Keine Sprengladungen auf diesem Auslöser.</German>
<Spanish>Ningún explosivo en el detonador.</Spanish>
<French>Pas d'explosif à mettre à feu.</French>
<Italian>Nessun esplosivo sul sensore.</Italian>
<Czech>Žádná výbušnina k odpálení.</Czech>
<Hungarian>Nincs robbanóanyag a detonátorhoz.</Hungarian>
<Polish>Brak ładunków na zapalnik.</Polish>
<Portuguese>Nenhum explosivo no gatilho.</Portuguese>
<Russian>Нет взрывчатки на курок.</Russian>
</Key>
<Key ID="STR_ACE_Explosives_DeadManSwitch_displayName">
<English>Dead Man's Switch</English>
<German>Totmannschalter</German>
<French>Mise à feu par relâchement de pression</French>
<Czech>Spínač mrtvého muže</Czech>
<Polish>Czuwak</Polish>
<Spanish>Detonador de hombre muerto</Spanish>
<Hungarian>Dead Man's Switch</Hungarian>
<Russian>Кнопка мертвеца</Russian>
</Key>
<Key ID="STR_ACE_Explosives_DeadManSwitch_description">
<English>Used to remotely trigger explosives when released.</English>
<German>Zündet Sprengladungen wenn losgelassen.</German>
<French>Déclenche la mise à feu d'un explosif lorsqu'il est libéré.</French>
<Czech>Používaný k vzdálenému odpálení, při uvolnění odpálí výbušniny</Czech>
<Polish>Używany w celu zdalnej detonacji ładunków kiedy jego operator zostanie zabity.</Polish>
<Spanish>Utilizado para detonar explosivos remotamente al soltarlo.</Spanish>
<Hungarian>Robbanóanyagok távoli robbantásához</Hungarian>
<Russian>Используется для дистанционного подрыва, после смерти оператора.</Russian>
</Key>
<Key ID="STR_ACE_Explosives_Pickup">
<English>Pick up</English>
</Key>
</Package>
</Project>

View File

@ -147,6 +147,14 @@ class RscInGameUI {
MACRO_RANGEFINDER
};
};
};
class Rsc_ACE_Helo_UI_Turret: RscUnitInfo {
onLoad = "uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0]; [""onLoad"",_this,""RscUnitInfo"",'IGUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";
class CA_IGUI_elements_group: RscControlsGroup {
class controls {
MACRO_RANGEFINDER
};
};
};
class RscOptics_Heli_Attack_01_gunner: RscUnitInfo {
onLoad = "uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0]; [""onLoad"",_this,""RscUnitInfo"",'IGUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";

View File

@ -48,7 +48,14 @@ _offset = 0;
_velocityCorrection = (vectorMagnitude velocity _projectile) -
getNumber (configFile >> "CfgMagazines" >> _magazine >> "initSpeed");
[_projectile, (_vehicle getVariable format ["%1_%2", QGVAR(Azimuth), _turret]), _offset, _velocityCorrection] call EFUNC(common,changeProjectileDirection);
[_projectile, (_vehicle getVariable format ["%1_%2", QGVAR(Azimuth), _turret]), _offset, -_velocityCorrection] call EFUNC(common,changeProjectileDirection);
// Remove the platform velocity
if( (vectorMagnitude velocity _vehicle) > 2) then {
_sumVelocity = (velocity _projectile) vectorDiff (velocity _vehicle);
_projectile setVelocity _sumVelocity;
};
// Air burst missile
// handle locally only

View File

@ -12,7 +12,7 @@
#include "script_component.hpp"
private ["_vehicle", "_turret", "_turretConfig", "_distance", "_magazines", "_userChange"];
private ["_vehicle", "_turret", "_turretConfig", "_distance", "_magazines", "_showHint", "_playSound"];
_vehicle = _this select 0;
_turret = _this select 1;
@ -162,11 +162,20 @@ _FCSElevation = [];
[_vehicle, format ["%1_%2", QGVAR(Elevation), _turret], _FCSElevation] call EFUNC(common,setVariablePublic);
[_vehicle, format ["%1_%2", QGVAR(Azimuth), _turret], _FCSAzimuth] call EFUNC(common,setVariablePublic);
_userChange = true;
_showHint = false;
if( (count _this) > 3) then {
_userChange = _this select 3;
_showHint = _this select 3;
};
if(_userChange) then {
_playSound = true;
if( (count _this) > 3) then {
_playSound = _this select 4;
};
if(_playSound) then {
playSound "ACE_Sound_Click";
};
if(_showHint) then {
[format ["%1: %2", localize "STR_ACE_FCS_ZeroedTo", _distance]] call EFUNC(common,displayTextStructured);
};

View File

@ -4,4 +4,4 @@ if !([ACE_player, vehicle ACE_player, []] call EFUNC(common,canInteractWith)) ex
if !((!GVAR(enabled) && FUNC(canUseFCS)) || FUNC(canUseRangefinder)) exitWith {false};
[vehicle ACE_player, [ACE_player] call EFUNC(common,getTurretIndex), -1, false] call FUNC(keyDown);
[vehicle ACE_player, [ACE_player] call EFUNC(common,getTurretIndex), -1, false] call FUNC(keyUp);
[vehicle ACE_player, [ACE_player] call EFUNC(common,getTurretIndex), -1, false, false] call FUNC(keyUp);

View File

@ -1,9 +1,9 @@
// #define DEBUG_MODE_FULL
//#define DEBUG_MODE_FULL
#include "script_component.hpp"
TRACE_1("enter", _this);
#define FCS_UPDATE_DELAY 2.0
#define FCS_UPDATE_DELAY 1
FUNC(magnitude) = {
_this distance [0, 0, 0]
@ -68,14 +68,13 @@ FUNC(laserHudDesignatePFH) = {
["ace_fcs_forceUpdate", []] call ace_common_fnc_localEvent;
};
if( ((getPosASL _laserTarget) vectorDistance _pos) > 2) then {
if( (_laserTarget distance _pos) > 0.1) then {
TRACE_1("LaserPos Update", "");
_laserTarget setPosATL (ASLToATL _pos);
};
};
if(diag_tickTime > _forceUpdateTime) then {
_args set[3, diag_tickTime + FCS_UPDATE_DELAY];
_args set[2, diag_tickTime + FCS_UPDATE_DELAY];
};
#ifdef DEBUG_MODE_FULL
drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,0,0,1], (getPosATL _laserTarget), 0.75, 0.75, 0, "", 0.5, 0.025, "TahomaB"];
@ -101,7 +100,7 @@ if(isNil QGVAR(laser)) then {
GVAR(laserActive) = true;
_handle = [FUNC(laserHudDesignatePFH), 0, [_laserTarget, player]] call cba_fnc_addPerFrameHandler;
_handle = [FUNC(laserHudDesignatePFH), 0.1, [_laserTarget, player]] call cba_fnc_addPerFrameHandler;
_laserTarget setVariable ["ACE_PFH_HANDLE", _handle, false];
GVAR(laser) = _laserTarget;

View File

@ -17,7 +17,6 @@
</Key>
<Key ID="STR_ACE_Laserpointer_useLaser">
<Original>&lt;t color='#9cf953'&gt;Use: &lt;/t&gt;Turn Laser ON/OFF</Original>
<English>&lt;t color='#9cf953'&gt;Use: &lt;/t&gt;Turn Laser ON/OFF</English>
<Czech>&lt;t color='#9cf953'&gt;Použití: &lt;/t&gt;Zapnout/vypnout laser</Czech>
<French>&lt;t color='#9cf953'&gt;Utiliser : &lt;/t&gt;laser on/off</French>

View File

@ -1,13 +0,0 @@
class Extended_PreInit_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_preInit));
};
};
class Extended_FiredBIS_EventHandlers {
class AllVehicles {
class ADDON {
firedBIS = QUOTE(_this call FUNC(forceMagazineMuzzleVelocity));
};
};
};

View File

@ -22,7 +22,6 @@ class CfgMagazines {
descriptionShort = "$STR_ACE_30Rnd_65x39_caseless_mag_SDDescription";
picture = "\A3\weapons_f\data\ui\m_30stanag_caseless_green_CA.paa";
initSpeed = 320;
GVAR(forceMagazineMuzzleVelocity) = 1;
};
class ACE_30Rnd_65x39_caseless_mag_AP: 30Rnd_65x39_caseless_mag {
@ -58,7 +57,6 @@ class CfgMagazines {
displayNameShort = "$STR_ACE_30Rnd_65x39_caseless_green_mag_SDNameShort";
descriptionShort = "$STR_ACE_30Rnd_65x39_caseless_green_mag_SDDescription";
initSpeed = 320;
GVAR(forceMagazineMuzzleVelocity) = 1;
};
class ACE_30Rnd_65x39_caseless_green_mag_AP: 30Rnd_65x39_caseless_green {
@ -90,7 +88,6 @@ class CfgMagazines {
displayNameShort = "$STR_ACE_30Rnd_556x45_mag_SDNameShort";
descriptionShort = "$STR_ACE_30Rnd_556x45_mag_SDDescription";
initSpeed = 320;
GVAR(forceMagazineMuzzleVelocity) = 1;
picture = "\A3\weapons_f\data\ui\m_30stanag_green_ca.paa";
};
@ -130,7 +127,6 @@ class CfgMagazines {
displayNameShort = "$STR_ACE_20Rnd_762x51_mag_SDNameShort";
descriptionShort = "$STR_ACE_20Rnd_762x51_mag_SDDescription";
initSpeed = 320;
GVAR(forceMagazineMuzzleVelocity) = 1;
};
class ACE_20Rnd_762x51_Mag_AP: 20Rnd_762x51_Mag {

View File

@ -1,7 +0,0 @@
#include "script_component.hpp"
ADDON = false;
PREP(forceMagazineMuzzleVelocity);
ADDON = true;

View File

@ -12,8 +12,6 @@ class CfgPatches {
};
};
#include "CfgEventHandlers.hpp"
#include "CfgAmmo.hpp"
#include "CfgMagazines.hpp"
#include "CfgVehicles.hpp"

View File

@ -1,41 +0,0 @@
/*
* Author: commy2
*
* DESCRIPTION.
*
* Arguments:
* firedBIS
*
* Return Value:
* None
*/
#include "script_component.hpp"
private ["_weapon", "_magazine", "_projectile"];
_weapon = _this select 1;
_magazine = _this select 5;
_projectile = _this select 6;
if (getNumber (configFile >> "CfgMagazines" >> _magazine >> QGVAR(forceMagazineMuzzleVelocity)) != 1) exitWith {
//hint str (speed _projectile / 3.6);
};
private ["_initSpeedWeapon", "_initSpeedMagazine"];
_initSpeedWeapon = getNumber (configFile >> "CfgWeapons" >> _weapon >> "initSpeed");
_initSpeedMagazine = getNumber (configFile >> "CfgMagazines" >> _magazine >> "initSpeed");
//systemChat format ["W: %1m/s, M: %2m/s", _initSpeedWeapon, _initSpeedMagazine];
// force magazine initSpeed
private ["_credit", "_debit"];
_credit = vectorMagnitude velocity _projectile;
_debit = _credit + (_initSpeedMagazine - _initSpeedWeapon);
_projectile setVelocity ((velocity _projectile) vectorMultiply (_debit / _credit));
//hint str (speed _projectile / 3.6);

View File

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

View File

@ -886,7 +886,7 @@ class CfgVehicles {
scope = 2;
accuracy = 1000;
displayName = "[ACE] Medical Supply Crate";
model = "\A3\weapons_F\AmmoBoxes\AmmoBox_F";
model = PATHTOF(data\ace_medcrate.p3d);
author = "$STR_ACE_Common_ACETeam";
class TransportItems {
class ACE_fieldDressing {

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -31,7 +31,9 @@ if (_show) then {
[{
private ["_target", "_display", "_alphaLevel", "_damaged", "_availableSelections", "_openWounds", "_selectionBloodLoss", "_red", "_green", "_blue", "_alphaLevel", "_allInjuryTexts", "_lbCtrl", "_genericMessages"];
_target = (_this select 0) select 0;
if (GVAR(displayPatientInformationTarget) != _target) exitwith {
_selectionN = (_this select 0) select 1;
if (GVAR(displayPatientInformationTarget) != _target || GVAR(currentSelectedSelectionN) != _selectionN) exitwith {
[_this select 1] call CBA_fnc_removePerFrameHandler;
};
@ -44,7 +46,7 @@ if (_show) then {
_allInjuryTexts = [];
_genericMessages = [];
_partText = ["STR_ACE_Interaction_Head", "STR_ACE_Interaction_Torso", "STR_ACE_Interaction_ArmLeft" ,"STR_ACE_Interaction_ArmRight" ,"STR_ACE_Interaction_LegLeft", "STR_ACE_Interaction_LegRight"] select GVAR(currentSelectedSelectionN);
_partText = ["STR_ACE_Interaction_Head", "STR_ACE_Interaction_Torso", "STR_ACE_Interaction_ArmLeft" ,"STR_ACE_Interaction_ArmRight" ,"STR_ACE_Interaction_LegLeft", "STR_ACE_Interaction_LegRight"] select _selectionN;
_genericMessages pushback [localize _partText, [1, 1, 1, 1]];
if (_target getvariable[QGVAR(isBleeding), false]) then {
@ -54,7 +56,7 @@ if (_show) then {
_genericMessages pushback [localize "STR_ACE_MEDICAL_STATUS_LOST_BLOOD", [1, 0.1, 0.1, 1]];
};
if (((_target getvariable [QGVAR(tourniquets), [0,0,0,0,0,0]]) select GVAR(currentSelectedSelectionN)) > 0) then {
if (((_target getvariable [QGVAR(tourniquets), [0,0,0,0,0,0]]) select _selectionN) > 0) then {
_genericMessages pushback [localize "STR_ACE_MEDICAL_STATUS_TOURNIQUET_APPLIED", [0.77, 0.51, 0.08, 1]];
};
if (_target getvariable[QGVAR(hasPain), false]) then {
@ -192,7 +194,7 @@ if (_show) then {
(_display displayCtrl 303) ctrlSetText (_triageStatus select 0);
(_display displayCtrl 303) ctrlSetBackgroundColor (_triageStatus select 2);
}, 0, [_target]] call CBA_fnc_addPerFrameHandler;
}, 0, [_target, GVAR(currentSelectedSelectionN)]] call CBA_fnc_addPerFrameHandler;
} else {
("ACE_MedicalRscDisplayInformation" call BIS_fnc_rscLayer) cutText ["","PLAIN"];

View File

@ -16,7 +16,6 @@
private ["_target", "_show"];
_target = _this select 0;
_show = if (count _this > 1) then {_this select 1} else {true};
GVAR(currentSelectedSelectionN) = if (count _this > 2) then {_this select 2} else {0};
GVAR(TriageCardTarget) = if (_show) then {_target} else {ObjNull};

View File

@ -30,9 +30,6 @@
<Portuguese>Injetar Morfina</Portuguese>
<Italian>Inietta Morfina</Italian>
</Key>
<Key ID="STR_ACE_Medical_Inject_Atropine">
<English>Inject Atropine</English>
</Key>
<Key ID="STR_ACE_Medical_Transfuse_Blood">
<English>Transfuse Blood</English>
<German>Bluttransfusion</German>

View File

@ -18,7 +18,7 @@ PREP(getHeightDistance);
PREP(getRelativeAzimuthDistance);
PREP(getRelativeDistance);
PREP(getRelativeHeightLength);
PREP(getFallOfShort);
PREP(getFallOfShot);
PREP(showAzimuth);
PREP(showAzimuthInclination);
PREP(showHeightDistance);
@ -26,7 +26,7 @@ PREP(showDistance);
PREP(showRelativeAzimuthDistance);
PREP(showRelativeDistance);
PREP(showRelativeHeightLength);
PREP(showFallOfShort);
PREP(showFallOfShot);
PREP(showText);
PREP(nextMode);
PREP(adjustBrightness);

View File

@ -30,75 +30,6 @@ _digit4 = _number mod 10;
switch (_coordinate) do {
case 0 : {
if (_isNegative) then {
if (_digit1 == 0) then {
if (_digit2 == 0) then {
if (_digit3 == 0) then {
_digit0 = QUOTE(PATHTOF(rsc\vector_d.paa));
_digit1 = "";
_digit2 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit4];
_digit3 = "";
_digit4 = "";
} else {
_digit0 = QUOTE(PATHTOF(rsc\vector_d.paa));
_digit1 = "";
_digit2 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit3];
_digit3 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit4];
_digit4 = "";
};
} else {
_digit0 = QUOTE(PATHTOF(rsc\vector_d.paa));
_digit1 = "";
_digit2 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit2];
_digit3 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit3];
_digit4 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit4];
};
} else {
_digit0 = "";
_digit1 = QUOTE(PATHTOF(rsc\vector_minus.paa));
_digit2 = QUOTE(PATHTOF(rsc\vector_minus.paa));
_digit3 = QUOTE(PATHTOF(rsc\vector_minus.paa));
_digit4 = QUOTE(PATHTOF(rsc\vector_minus.paa));
};
} else {
if (_digit1 == 0) then {
if (_digit2 == 0) then {
if (_digit3 == 0) then {
_digit0 = QUOTE(PATHTOF(rsc\vector_a.paa));
_digit1 = "";
_digit2 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit4];
_digit3 = "";
_digit4 = "";
} else {
_digit0 = QUOTE(PATHTOF(rsc\vector_a.paa));
_digit1 = "";
_digit2 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit3];
_digit3 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit4];
_digit4 = "";
};
} else {
_digit0 = QUOTE(PATHTOF(rsc\vector_a.paa));
_digit1 = "";
_digit2 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit2];
_digit3 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit3];
_digit4 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit4];
};
} else {
_digit0 = "";
_digit1 = QUOTE(PATHTOF(rsc\vector_minus.paa));
_digit2 = QUOTE(PATHTOF(rsc\vector_minus.paa));
_digit3 = QUOTE(PATHTOF(rsc\vector_minus.paa));
_digit4 = QUOTE(PATHTOF(rsc\vector_minus.paa));
};
};
};
case 1 : {
if (_isNegative) then {
if (_digit1 == 0) then {
@ -166,6 +97,75 @@ switch (_coordinate) do {
};
case 1 : {
if (_isNegative) then {
if (_digit1 == 0) then {
if (_digit2 == 0) then {
if (_digit3 == 0) then {
_digit0 = QUOTE(PATHTOF(rsc\vector_d.paa));
_digit1 = "";
_digit2 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit4];
_digit3 = "";
_digit4 = "";
} else {
_digit0 = QUOTE(PATHTOF(rsc\vector_d.paa));
_digit1 = "";
_digit2 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit3];
_digit3 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit4];
_digit4 = "";
};
} else {
_digit0 = QUOTE(PATHTOF(rsc\vector_d.paa));
_digit1 = "";
_digit2 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit2];
_digit3 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit3];
_digit4 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit4];
};
} else {
_digit0 = "";
_digit1 = QUOTE(PATHTOF(rsc\vector_minus.paa));
_digit2 = QUOTE(PATHTOF(rsc\vector_minus.paa));
_digit3 = QUOTE(PATHTOF(rsc\vector_minus.paa));
_digit4 = QUOTE(PATHTOF(rsc\vector_minus.paa));
};
} else {
if (_digit1 == 0) then {
if (_digit2 == 0) then {
if (_digit3 == 0) then {
_digit0 = QUOTE(PATHTOF(rsc\vector_a.paa));
_digit1 = "";
_digit2 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit4];
_digit3 = "";
_digit4 = "";
} else {
_digit0 = QUOTE(PATHTOF(rsc\vector_a.paa));
_digit1 = "";
_digit2 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit3];
_digit3 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit4];
_digit4 = "";
};
} else {
_digit0 = QUOTE(PATHTOF(rsc\vector_a.paa));
_digit1 = "";
_digit2 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit2];
_digit3 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit3];
_digit4 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit4];
};
} else {
_digit0 = "";
_digit1 = QUOTE(PATHTOF(rsc\vector_minus.paa));
_digit2 = QUOTE(PATHTOF(rsc\vector_minus.paa));
_digit3 = QUOTE(PATHTOF(rsc\vector_minus.paa));
_digit4 = QUOTE(PATHTOF(rsc\vector_minus.paa));
};
};
};
case 2 : {
if (_isNegative) then {

View File

@ -128,11 +128,11 @@ switch (_this select 0) do {
};
// prevent additinal modifier input if advanced mode it set, spaghetti
if (GETGVAR(isKeyDownAzimuth,false) && {GETGVAR(currentMode,"") in ["relative_azimuth+distance", "fall_of_short"]}) exitWith {};
if (GETGVAR(isKeyDownAzimuth,false) && {GETGVAR(currentMode,"") in ["relative_azimuth+distance", "fall_of_shot"]}) exitWith {};
// toggle fos values
if (GETGVAR(currentMode,"") == "fall_of_short") exitWith {
[!(GETGVAR(FOSState,true))] call FUNC(showFallOfShort);
if (GETGVAR(currentMode,"") == "fall_of_shot") exitWith {
[!(GETGVAR(FOSState,true))] call FUNC(showFallOfShot);
};
["distance"] call FUNC(clearDisplay);

View File

@ -198,7 +198,7 @@ switch (_this select 0) do {
};
case ("fall_of_short"): {
case ("fall_of_shot"): {
private "_isReady";
_isReady = diag_tickTime > GVAR(keyDownTimeDistance) + 0.5;
@ -207,8 +207,8 @@ switch (_this select 0) do {
if (!GVAR(isKeyDownAzimuth) && {!GVAR(isKeyDownDistance)}) then {
if (_isReady) then {
GVAR(FOSData) = call FUNC(getFallOfShort);//
[false] call FUNC(showFallOfShort);
GVAR(FOSData) = call FUNC(getFallOfShot);
[false] call FUNC(showFallOfShot);
};
[false] call FUNC(showCenter);
[false] call FUNC(showP1);

View File

@ -65,7 +65,7 @@ switch (_this select 0) do {
["distance"] call FUNC(clearDisplay);
[true] call FUNC(showP1);
GVAR(pData) = [call FUNC(getDistance), call FUNC(getDirection)];
"fall_of_short" call _fnc_setPFH;
"fall_of_shot" call _fnc_setPFH;
};
};

View File

@ -15,8 +15,8 @@ _fosData = GVAR(FOSData);
if !(_this select 0) then {
private "_digits";
// of abscissa
_digits = [_fosData, 0] call FUNC(convertToTexturesFOS);
// of ordinate
_digits = [_fosData, 1] call FUNC(convertToTexturesFOS);
(_dlgVector displayCtrl 1310) ctrlSetText (_digits select 0);
(_dlgVector displayCtrl 1311) ctrlSetText (_digits select 1);
@ -24,8 +24,8 @@ if !(_this select 0) then {
(_dlgVector displayCtrl 1313) ctrlSetText (_digits select 3);
(_dlgVector displayCtrl 1314) ctrlSetText (_digits select 4);
// of ordinate
_digits = [_fosData, 1] call FUNC(convertToTexturesFOS);
// of abscissa
_digits = [_fosData, 0] call FUNC(convertToTexturesFOS);
(_dlgVector displayCtrl 1315) ctrlSetText (_digits select 0);
(_dlgVector displayCtrl 1316) ctrlSetText (_digits select 1);

View File

@ -3,31 +3,26 @@
<Package name="WindDeflection">
<Container ID="Weather_Meter">
<Key ID="STR_ACE_WEATHER_METER_WIND_CATEGORY">
<Original>Wind Information</Original>
<English>Wind Information</English>
<Polish>Informacje o wietrze</Polish>
<Spanish>Información del viento</Spanish>
</Key>
<Key ID="STR_ACE_WEATHER_METER_WIND_DIRECTION">
<Original>Direction: %1</Original>
<English>Direction: %1</English>
<Polish>Kierunek: %1</Polish>
<Spanish>Dirección: %1</Spanish>
</Key>
<Key ID="STR_ACE_WEATHER_METER_WIND_SPEED">
<Original>Speed: %1 m/s</Original>
<English>Speed: %1 m/s</English>
<Polish>Prędkość: %1</Polish>
<Spanish>Velocidad: %1 m/s</Spanish>
</Key>
<Key ID="STR_ACE_WEATHER_METER_WEATHER_CATEGORY">
<Original>Weather Information</Original>
<English>Weather Information</English>
<Polish>Informacje o pogodzie</Polish>
<Spanish>Información Meteorológica</Spanish>
</Key>
<Key ID="STR_ACE_WEATHER_METER_WEATHER_HUMIDITY">
<Original>Humidity: %1%</Original>
<English>Humidity: %1%</English>
<Polish>Wilgotność: %1</Polish>
<Spanish>Humedad: %1%</Spanish>

View File

@ -58,12 +58,13 @@ double traceBullet(double initSpeed, double airFriction, double angle, double an
while (i < MAXITERATIONS) {
lastPosX = posX;
lastPosY = posY;
simulationStep = 0.1 - 0.049 * (posX / posTargetX);
velMag = sqrt(pow(velX, 2) + pow(velY, 2));
posX += velX * simulationStep * 0.5;
posY += velY * simulationStep * 0.5;
velX += simulationStep * (velX * velMag * airFriction);
velY += simulationStep * (velY * velMag * airFriction - 9.81);
posX += velX * simulationStep;
posY += velY * simulationStep;
velY += simulationStep * (velY * velMag * airFriction - 9.80665);
posX += velX * simulationStep * 0.5;
posY += velY * simulationStep * 0.5;
if (posX >= posTargetX) { break; }
i++;
}