Merge branch 'master' of https://github.com/KoffeinFlummi/ACE3 into ATragMX

This commit is contained in:
ulteq 2015-04-07 20:33:44 +02:00
commit 2dfc9d7919
350 changed files with 10092 additions and 6129 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

@ -95,29 +95,7 @@ class CfgVehicles {
};
};
class Heli_Attack_01_base_F: Helicopter_Base_F {
lockDetectionSystem = 12;
incomingMissileDetectionSystem = 16;
driverCanEject = 1;
class Turrets: Turrets {
class MainTurret: MainTurret {
canEject = 1;
showHMD = 1;
weapons[] = {"ACE_gatling_20mm_Comanche","missiles_DAGR","missiles_ASRAAM"};
magazines[] = {"ACE_500Rnd_20mm_shells_Comanche","4Rnd_AAA_missiles","24Rnd_PG_missiles"};
};
};
class AnimationSources: AnimationSources {
class Gatling {
weapon = "ACE_gatling_20mm_Comanche";
};
class Muzzle_flash {
weapon = "ACE_gatling_20mm_Comanche";
};
};
};
#include "Heli_Attack_01_base_F.hpp"
class B_Heli_Attack_01_F: Heli_Attack_01_base_F {};
@ -222,7 +200,7 @@ class CfgVehicles {
lockDetectionSystem = 0;
incomingMissileDetectionSystem = 16;
driverCanEject = 1;
weapons[] = {"M134_minigun","missiles_DAR","CMFlareLauncher"};
weapons[] = {"M134_minigun","missiles_DAR","CMFlareLauncher", "ACE_AIR_SAFETY" };
magazines[] = {"5000Rnd_762x51_Yellow_Belt","24Rnd_missiles","168Rnd_CMFlare_Chaff_Magazine"};
class Turrets: Turrets {

View File

@ -4,6 +4,23 @@ class Mode_Burst;
class Mode_FullAuto;
class CfgWeapons {
class RocketPods;
class ACE_AIR_SAFETY : RocketPods
{
CanLock = 0;
displayName = "SAFE";
displayNameMagazine = "SAFE";
shortNameMagazine = "SAFE";
nameSound = "cannon";
cursor = "EmptyCursor";
cursorAim = "EmptyCursor";
magazines[] = {"FakeMagazine"};
burst = 0;
reloadTime = 0.01;
magazineReloadTime = 0.1;
};
// Manual Switching Of Flare Mode
class SmokeLauncher;
class CMFlareLauncher: SmokeLauncher {
@ -37,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;
};
};

File diff suppressed because one or more lines are too long

View File

@ -3,6 +3,7 @@ ace_aircraft
Changes to air weaponry, flightmodels and HUDs.
* Contributations by Kimi (geraldbolso1899) for HUD updates
## Maintainers
@ -10,3 +11,4 @@ The people responsible for merging changes to this component or answering potent
- [KoffeinFlummi](https://github.com/KoffeinFlummi)
- [commy2](https://github.com/commy2)
- [jaynus](https://github.com/walterpearce)

View File

@ -0,0 +1,581 @@
class RscControlsGroup;
class RscText;
class RangeText: RscText{};
class RscPicture;
class RscOpticsText;
class RscIGProgress;
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_IGUI_elements_group","CA_VehicleToggles"};
class VScrollbar;
class HScrollbar;
class CA_IGUI_elements_group: RscControlsGroup
{
idc = 170;
class VScrollbar: VScrollbar
{
width = 0;
};
class HScrollbar: HScrollbar
{
height = 0;
};
x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
w = "53.5 * (0.01875 * SafezoneH)";
h = "40 * (0.025 * SafezoneH)";
class controls
{
class CA_Distance: RscText
{
idc = 151;
style = 2;
sizeEx = "0.0295*SafezoneH";
shadow = 0;
font = "EtelkaMonospacePro";
x = "24.78 * (0.01875 * SafezoneH)";
y = "30.88 * (0.025 * SafezoneH)";
w = "4 * (0.01875 * SafezoneH)";
h = "1.2 * (0.025 * SafezoneH)";
};
class CA_Speed: RangeText
{
idc = 188;
style = 2;
sizeEx = "0.0295*SafezoneH";
shadow = 0;
font = "EtelkaMonospacePro";
text = "120";
x = "14.78 * (0.01875 * SafezoneH)";
y = "30.88 * (0.025 * SafezoneH)";
w = "4 * (0.01875 * SafezoneH)";
h = "1.2 * (0.025 * SafezoneH)";
};
class CA_Alt: RangeText
{
idc = 189;
style = 2;
sizeEx = "0.0295*SafezoneH";
shadow = 0;
font = "EtelkaMonospacePro";
text = "3825";
x = "34.78 * (0.01875 * SafezoneH)";
y = "30.88 * (0.025 * SafezoneH)";
w = "4 * (0.01875 * SafezoneH)";
h = "1.2 * (0.025 * SafezoneH)";
};
class CA_VisionMode: RscText
{
idc = 152;
style = 0;
sizeEx = "0.0295*SafezoneH";
shadow = 0;
font = "EtelkaMonospacePro";
text = "VIS";
x = "12.58 * (0.01875 * SafezoneH)";
y = "8 * (0.025 * SafezoneH)";
w = "4 * (0.01875 * SafezoneH)";
h = "1.2 * (0.025 * SafezoneH)";
};
class CA_FlirMode: RscText
{
idc = 153;
style = 0;
sizeEx = "0.0295*SafezoneH";
shadow = 0;
font = "EtelkaMonospacePro";
text = "BHOT";
x = "15.78 * (0.01875 * SafezoneH)";
y = "8 * (0.025 * SafezoneH)";
w = "4.5 * (0.01875 * SafezoneH)";
h = "1.2 * (0.025 * SafezoneH)";
};
class ValueGrid: RangeText
{
idc = 172;
font = "EtelkaMonospacePro";
style = 2;
sizeEx = "0.0295*SafezoneH";
shadow = 0;
x = "12.20 * (0.01875 * SafezoneH)";
y = "3.5 * (0.025 * SafezoneH)";
w = "6 * (0.01875 * SafezoneH)";
h = "1 * (0.025 * SafezoneH)";
};
class TextTADS: RangeText
{
idc = 1010;
text = "TADS";
font = "EtelkaMonospacePro";
style = 2;
shadow = 0;
x = "12.30 * (0.01875 * SafezoneH)";
y = "5 * (0.025 * SafezoneH)";
w = "4 * (0.01875 * SafezoneH)";
h = "1.2 * (0.025 * SafezoneH)";
};
class ValueTime: RangeText
{
idc = 190;
text = "20:28:35";
font = "EtelkaMonospacePro";
style = 2;
sizeEx = "0.0295*SafezoneH";
shadow = 0;
x = "12.1 * (0.01875 * SafezoneH)";
y = "6.5 * (0.025 * SafezoneH)";
w = "6 * (0.01875 * SafezoneH)";
h = "1 * (0.025 * SafezoneH)";
};
class CA_Laser: RscText
{
idc = 158;
style = "0x30 + 0x800";
sizeEx = "0.038*SafezoneH";
shadow = 0;
font = "EtelkaMonospacePro";
text = PATHTOF(data\Helo_LaserON.paa);
x = "20.45 * (0.01875 * SafezoneH)";
y = "14.1 * (0.025 * SafezoneH)";
w = "12.5 * (0.01875 * SafezoneH)";
h = "12 * (0.025 * SafezoneH)";
};
class CA_Heading: RscText
{
idc = 156;
style = 0;
sizeEx = "0.038*SafezoneH";
shadow = 0;
font = "EtelkaMonospacePro";
text = "023";
x = "24.83 * (0.01875 * SafezoneH)";
y = "6 * (0.025 * SafezoneH)";
w = "4 * (0.01875 * SafezoneH)";
h = "1.2 * (0.025 * SafezoneH)";
};
};
};
};
class Rsc_ACE_Helo_UI_01: RscUnitInfo
{
controls[] = {"WeaponInfoControlsGroupRight","CA_TextFlaresMode","CA_TextFlares","CA_VehicleToggles","CA_Radar"};
};
class Rsc_ACE_Helo_UI_02: RscUnitInfo
{
controls[] = {"CA_TextFlaresMode","CA_TextFlares","CA_VehicleToggles","CA_Radar"};
};
class Rsc_ACE_Drones_UI_Turret: RscUnitInfo
{
idd = 300;
controls[] = {"CA_Zeroing","CA_IGUI_elements_group","CA_VehicleToggles"};
class CA_IGUI_elements_group: RscControlsGroup
{
idc = 170;
class VScrollbar: VScrollbar
{
width = 0;
};
class HScrollbar: HScrollbar
{
height = 0;
};
x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
w = "53.5 * (0.01875 * SafezoneH)";
h = "40 * (0.025 * SafezoneH)";
class controls
{
class CA_Distance: RscText
{
idc = 151;
style = 2;
sizeEx = "0.0295*SafezoneH";
shadow = 0;
font = "EtelkaMonospacePro";
x = "24.78 * (0.01875 * SafezoneH)";
y = "30.88 * (0.025 * SafezoneH)";
w = "4 * (0.01875 * SafezoneH)";
h = "1.2 * (0.025 * SafezoneH)";
};
class CA_Speed: RangeText
{
idc = 188;
style = 2;
sizeEx = "0.0295*SafezoneH";
shadow = 0;
font = "EtelkaMonospacePro";
text = "120";
x = "14.78 * (0.01875 * SafezoneH)";
y = "30.88 * (0.025 * SafezoneH)";
w = "4 * (0.01875 * SafezoneH)";
h = "1.2 * (0.025 * SafezoneH)";
};
class CA_Alt: RangeText
{
idc = 189;
style = 2;
sizeEx = "0.0295*SafezoneH";
shadow = 0;
font = "EtelkaMonospacePro";
text = "3825";
x = "34.78 * (0.01875 * SafezoneH)";
y = "30.88 * (0.025 * SafezoneH)";
w = "4 * (0.01875 * SafezoneH)";
h = "1.2 * (0.025 * SafezoneH)";
};
class ValueTime: RangeText
{
idc = 190;
text = "20:28:35";
font = "EtelkaMonospacePro";
style = 2;
sizeEx = "0.0295*SafezoneH";
shadow = 0;
x = "1.75 * (0.01875 * SafezoneH)";
y = "10.5 * (0.025 * SafezoneH)";
w = "6 * (0.01875 * SafezoneH)";
h = "1 * (0.025 * SafezoneH)";
};
class CA_VisionMode: RscText
{
idc = 152;
style = 0;
sizeEx = "0.0295*SafezoneH";
shadow = 0;
font = "EtelkaMonospacePro";
text = "VIS";
align = "right";
x = "2.6 * (0.01875 * SafezoneH)";
y = "12.0 * (0.025 * SafezoneH)";
w = "4 * (0.01875 * SafezoneH)";
h = "1.0 * (0.025 * SafezoneH)";
};
class CA_FlirMode: RscText
{
idc = 153;
style = 0;
sizeEx = "0.0295*SafezoneH";
shadow = 0;
font = "EtelkaMonospacePro";
text = "BHOT";
align = "right";
x = "6.18 * (0.01875 * SafezoneH)";
y = "12.0 * (0.025 * SafezoneH)";
w = "4.5 * (0.01875 * SafezoneH)";
h = "1.0 * (0.025 * SafezoneH)";
};
class TgT_Grid_text: RangeText
{
idc = 1005;
text = "TGT:";
font = "EtelkaMonospacePro";
style = 2;
sizeEx = "0.0295*SafezoneH";
shadow = 0;
x = "1.20 * (0.01875 * SafezoneH)";
y = "13.5 * (0.025 * SafezoneH)";
w = "6 * (0.01875 * SafezoneH)";
h = "1 * (0.025 * SafezoneH)";
};
class TGT_ValueGrid: RangeText
{
idc = 172;
font = "EtelkaMonospacePro";
colorText[] = {0.706,0.0745,0.0196,0.8};
style = 2;
sizeEx = "0.0295*SafezoneH";
shadow = 0;
x = "5.20 * (0.01875 * SafezoneH)";
y = "13.5 * (0.025 * SafezoneH)";
w = "6 * (0.01875 * SafezoneH)";
h = "1 * (0.025 * SafezoneH)";
};
class OWN_Grid_text: RangeText
{
idc = 1005;
text = "OWN:";
font = "EtelkaMonospacePro";
style = 2;
sizeEx = "0.0295*SafezoneH";
shadow = 0;
x = "1.20 * (0.01875 * SafezoneH)";
y = "15 * (0.025 * SafezoneH)";
w = "6 * (0.01875 * SafezoneH)";
h = "1 * (0.025 * SafezoneH)";
};
class OWN_ValueGrid: RangeText
{
idc = 171;
font = "EtelkaMonospacePro";
colorText[] = {0.15,1,0.15,0.8};
style = 2;
sizeEx = "0.0295*SafezoneH";
shadow = 0;
x = "5.20 * (0.01875 * SafezoneH)";
y = "15 * (0.025 * SafezoneH)";
w = "6 * (0.01875 * SafezoneH)";
h = "1 * (0.025 * SafezoneH)";
};
class CA_Laser: RscText
{
idc = 158;
style = "0x30 + 0x800";
sizeEx = "0.038*SafezoneH";
shadow = 0;
align = "right";
font = "EtelkaMonospacePro";
text = PATHTOF(data\Helo_LaserON.paa);
x = "20.45 * (0.01875 * SafezoneH)";
y = "14.1 * (0.025 * SafezoneH)";
w = "12.5 * (0.01875 * SafezoneH)";
h = "12 * (0.025 * SafezoneH)";
};
class CA_Heading: RscText
{
idc = 156;
style = 0;
sizeEx = "0.038*SafezoneH";
shadow = 0;
font = "EtelkaMonospacePro";
text = "023";
align = "right";
x = "25 * (0.01875 * SafezoneH)";
y = "5 * (0.025 * SafezoneH)";
w = "4 * (0.01875 * SafezoneH)";
h = "1.2 * (0.025 * SafezoneH)";
};
};
};
};
class Rsc_ACE_Drones_UI_Pilots: RscUnitInfo
{
idd = 300;
controls[] = {"WeaponInfoControlsGroupRight","CA_BackgroundVehicle","CA_BackgroundVehicleTitle","CA_BackgroundVehicleTitleDark","CA_BackgroundFuel","CA_Vehicle","CA_VehicleRole","CA_HitZones","CA_SpeedBackground","CA_SpeedUnits","CA_Speed","CA_ValueFuel","CA_AltBackground","CA_AltUnits","CA_Alt","CA_VehicleToggles","CA_Radar","DriverOpticsGroup"};
class DriverOpticsGroup: RscControlsGroup
{
idc = 392;
class VScrollbar: VScrollbar
{
width = 0;
};
class HScrollbar: HScrollbar
{
height = 0;
};
x = "0 * (0.01875 * SafezoneH) + (SafezoneX + ((SafezoneW - SafezoneH) / 2))";
y = "0 * (0.025 * SafezoneH) + (SafezoneY)";
w = "53.5 * (0.01875 * SafezoneH)";
h = "40 * (0.025 * SafezoneH)";
class controls
{
class TextGrid: RscText
{
style = 0;
sizeEx = "0.02*SafezoneH";
shadow = 0;
font = "EtelkaMonospacePro";
idc = 1005;
text = "GRID:";
x = "5.8 * (0.01875 * SafezoneH)";
y = "31.8 * (0.025 * SafezoneH)";
w = "5 * (0.01875 * SafezoneH)";
h = "1 * (0.025 * SafezoneH)";
};
class ValueGrid: TextGrid
{
idc = 189;
text = "382546";
x = "10.3 * (0.01875 * SafezoneH)";
y = "31.8 * (0.025 * SafezoneH)";
w = "6 * (0.01875 * SafezoneH)";
h = "1 * (0.025 * SafezoneH)";
};
class TextTime: TextGrid
{
idc = 1010;
text = "TIME [UTC]:";
x = "5.8 * (0.01875 * SafezoneH)";
y = "32.6 * (0.025 * SafezoneH)";
w = "5 * (0.01875 * SafezoneH)";
h = "1 * (0.025 * SafezoneH)";
};
class ValueTime: TextGrid
{
idc = 101;
text = "20:28:35";
x = "10 * (0.01875 * SafezoneH)";
y = "32.6 * (0.025 * SafezoneH)";
w = "6 * (0.01875 * SafezoneH)";
h = "1 * (0.025 * SafezoneH)";
};
class TextMag: TextGrid
{
idc = 1011;
text = "CAM MAG:";
x = "5.8 * (0.01875 * SafezoneH)";
y = "7 * (0.025 * SafezoneH)";
w = "5 * (0.01875 * SafezoneH)";
h = "1 * (0.025 * SafezoneH)";
};
class OpticsZoom: TextGrid
{
idc = 192;
text = "28x";
x = "10.3 * (0.01875 * SafezoneH)";
y = "7 * (0.025 * SafezoneH)";
w = "6 * (0.01875 * SafezoneH)";
h = "1 * (0.025 * SafezoneH)";
};
class BorderLineSpdTop: RscPicture
{
idc = 1203;
text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\border_line_ca.paa";
x = "3.343 * (0.01875 * SafezoneH)";
y = "12.4 * (0.025 * SafezoneH)";
w = "3 * (0.01875 * SafezoneH)";
h = "1 * (0.025 * SafezoneH)";
};
class BorderLineSpdBottom: RscPicture
{
idc = 1207;
text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\border_line_ca.paa";
x = "3.343 * (0.01875 * SafezoneH)";
y = "26.5 * (0.025 * SafezoneH)";
w = "3 * (0.01875 * SafezoneH)";
h = "1 * (0.025 * SafezoneH)";
};
class BorderLineAltTop: RscPicture
{
idc = 1205;
text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\border_line_ca.paa";
x = "47.16 * (0.01875 * SafezoneH)";
y = "12.4 * (0.025 * SafezoneH)";
w = "3 * (0.01875 * SafezoneH)";
h = "1 * (0.025 * SafezoneH)";
};
class BorderLineAltBottom: RscPicture
{
idc = 1206;
text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\border_line_ca.paa";
x = "47.16 * (0.01875 * SafezoneH)";
y = "26.5 * (0.025 * SafezoneH)";
w = "3 * (0.01875 * SafezoneH)";
h = "1 * (0.025 * SafezoneH)";
};
class TextSpd: TextGrid
{
idc = 1004;
text = "SPD";
x = "4.8 * (0.01875 * SafezoneH)";
y = "11.8 * (0.025 * SafezoneH)";
w = "5 * (0.01875 * SafezoneH)";
h = "1.2 * (0.025 * SafezoneH)";
};
class SpeedValueBorder: RscPicture
{
idc = 1200;
text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\altimeter_value_ca.paa";
x = "6.3 * (0.01875 * SafezoneH)";
y = "19 * (0.025 * SafezoneH)";
w = "5 * (0.01875 * SafezoneH)";
h = "2 * (0.025 * SafezoneH)";
};
class CA_Speed: TextGrid
{
idc = 190;
sizeEx = "0.03*SafezoneH";
text = "120";
x = "7.5 * (0.01875 * SafezoneH)";
y = "19.5 * (0.025 * SafezoneH)";
w = "6 * (0.01875 * SafezoneH)";
h = "1.2 * (0.025 * SafezoneH)";
};
class AnalogueSpeed: RscLadderPicture
{
idc = 384;
topValue = 1312;
bottomValue = -345;
visibleRange = -1;
text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\UAVspeedLadder_ca.paa";
x = "1.5 * (0.01875 * SafezoneH)";
y = "13 * (0.025 * SafezoneH)";
w = "5 * (0.01875 * SafezoneH)";
h = "14 * (0.025 * SafezoneH)";
};
class TextAlt: TextGrid
{
idc = 1006;
text = "ALT";
x = "46.9 * (0.01875 * SafezoneH)";
y = "11.8 * (0.025 * SafezoneH)";
w = "5 * (0.01875 * SafezoneH)";
h = "1.2 * (0.025 * SafezoneH)";
};
class AltValueBorder: RscPicture
{
idc = 1201;
text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\airspeed_value_ca.paa";
x = "42.25 * (0.01875 * SafezoneH)";
y = "19 * (0.025 * SafezoneH)";
w = "5 * (0.01875 * SafezoneH)";
h = "2 * (0.025 * SafezoneH)";
};
class CA_Alt: TextGrid
{
idc = 191;
sizeEx = "0.03*SafezoneH";
style = 1;
text = "3825";
x = "43 * (0.01875 * SafezoneH)";
y = "19.5 * (0.025 * SafezoneH)";
w = "3.2 * (0.01875 * SafezoneH)";
h = "1.2 * (0.025 * SafezoneH)";
};
class AnalogueAlt: RscLadderPicture
{
idc = 385;
topValue = 14430;
bottomValue = -2110;
visibleRange = -1;
text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\UAValtLadder_ca.paa";
x = "47 * (0.01875 * SafezoneH)";
y = "13 * (0.025 * SafezoneH)";
w = "2.5 * (0.01875 * SafezoneH)";
h = "14 * (0.025 * SafezoneH)";
};
class AnalogueHorizon: RscLadderPicture
{
idc = 383;
topValue = 90;
bottomValue = -90;
visibleRange = -1;
text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\horizon_ladder_ca.paa";
x = "16.75 * (0.01875 * SafezoneH)";
y = "5 * (0.025 * SafezoneH)";
w = "20 * (0.01875 * SafezoneH)";
h = "30 * (0.025 * SafezoneH)";
};
class HorizonCenter: RscPicture
{
idc = 1202;
text = "\A3\Ui_f\data\IGUI\Cfg\HelicopterHUD\horizon_aircraft_ca.paa";
x = "24.75 * (0.01875 * SafezoneH)";
y = "19 * (0.025 * SafezoneH)";
w = "4 * (0.01875 * SafezoneH)";
h = "2 * (0.025 * SafezoneH)";
};
};
};
};
};

View File

@ -6,7 +6,7 @@ class CfgPatches {
weapons[] = {};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_common"};
author[] = {"KoffeinFlummi","Crusty","commy2"};
author[] = {"KoffeinFlummi","Crusty","commy2","jaynus","Kimi"};
authorUrl = "https://github.com/KoffeinFlummi/";
VERSION_CONFIG;
};
@ -16,3 +16,4 @@ class CfgPatches {
#include "CfgMagazines.hpp"
#include "CfgVehicles.hpp"
#include "CfgWeapons.hpp"
#include "RscInGameUI.hpp"

Binary file not shown.

View File

@ -94,7 +94,7 @@ if (_unit == _attachToVehicle) then { //Self Attachment
_unit removeAction _actionID;
if (GVAR(placeAction) == 1) then {
_startingPosition = _tempObject modelToWorld [0,0,0];
_startingPosition = _tempObject modelToWorldVisual [0,0,0];
[_unit, _attachToVehicle, _itemClassname, _itemVehClass, _onAtachText, _startingPosition] call FUNC(placeApprove);
};
deleteVehicle _tempObject;

View File

@ -25,6 +25,6 @@ _itemName = [_args, 0, ""] call CBA_fnc_defaultParam;
_attachLimit = [6, 1] select (_player == _attachToVehicle);
_attachedObjects = _attachToVehicle getVariable [QGVAR(Objects), []];
_playerPos = (ACE_player modelToWorld (ACE_player selectionPosition "pilot"));
_playerPos = (ACE_player modelToWorldVisual (ACE_player selectionPosition "pilot"));
(canStand _player) && {(_attachToVehicle distance _player) < 7} && {alive _attachToVehicle} && {(count _attachedObjects) < _attachLimit} && {_itemName in ((itemsWithMagazines _player) + [""])};

View File

@ -45,7 +45,7 @@ while {(_closeInMax - _closeInMin) > 0.01} do {
// systemChat format ["Trying %1 from %2 start %3", _closeInDistance, [_closeInMax, _closeInMin], _startDistanceFromCenter];
_endPosTestOffset = _startingOffset vectorAdd (_closeInUnitVector vectorMultiply _closeInDistance);
_endPosTestOffset set [2, (_startingOffset select 2)];
_endPosTest = _attachToVehicle modelToWorld _endPosTestOffset;
_endPosTest = _attachToVehicle modelToWorldVisual _endPosTestOffset;
_doesIntersect = false;
{

View File

@ -2,11 +2,11 @@
#include "\z\ace\Addons\main\script_mod.hpp"
#ifdef DEBUG_ENABLED_ATTACH
#define DEBUG_MODE_FULL
#define DEBUG_MODE_FULL
#endif
#ifdef DEBUG_SETTINGS_ATTACH
#define DEBUG_SETTINGS DEBUG_SETTINGS_ATTACH
#define DEBUG_SETTINGS DEBUG_SETTINGS_ATTACH
#endif
#include "\z\ace\Addons\main\script_macros.hpp"

View File

@ -37,7 +37,7 @@ _sounds = [
QUOTE(PATHTO_R(sounds\zip_out.wav))
];
_position = _target modelToWorld (_target selectionPosition "Spine3");
_position = _target modelToWorldVisual (_target selectionPosition "Spine3");
_position = _position call EFUNC(common,positionToASL);
playSound3D [

View File

@ -0,0 +1,20 @@
class CfgAmmo {
class BulletCore;
class BulletBase: BulletCore {
timeToLive = 15; // Default: 6, doubleplusgood all munition range.
};
class B_20mm : BulletBase {
timeToLive = 30;
};
class B_25mm : BulletBase {
timeToLive = 30;
};
class B_35mm_AA : BulletBase {
timeToLive = 30;
};
class B_30mm_AP : BulletBase {
timeToLive = 30;
};
};

View File

@ -14,3 +14,4 @@ class CfgPatches {
#include "CfgVehicles.hpp"
#include "CfgWeapons.hpp"
#include "CfgAmmo.hpp"

View File

@ -4,10 +4,10 @@
_wall = _this select 0;
if (local _wall) then {
_paper = "UserTexture_1x2_F" createVehicle position _wall;
_paper = "UserTexture_1x2_F" createVehicle position _wall;
_paper attachTo [_wall, [0,-0.02,0.6]];
_paper setDir getDir _wall;
_paper attachTo [_wall, [0,-0.02,0.6]];
_paper setDir getDir _wall;
_paper setObjectTextureGlobal [0, QUOTE(PATHTOF(textures\target_ca.paa))];
_paper setObjectTextureGlobal [0, QUOTE(PATHTOF(textures\target_ca.paa))];
};

View File

@ -18,9 +18,6 @@
EXPLODE_2_PVT(_this,_unit,_isUnconc);
diag_log "handleOnUnconscious";
diag_log _this;
diag_log _unit;
if (!local _unit) exitWith {};
if (_isUnconc) then {

View File

@ -73,6 +73,16 @@ PREP(getStringFromMissionSQM);
PREP(getTargetAzimuthAndInclination);
PREP(getTargetDistance);
PREP(getTargetObject);
PREP(getTurnedOnLights);
PREP(getTurretCommander);
PREP(getTurretConfigPath);
PREP(getTurretCopilot);
PREP(getTurretGunner);
PREP(getTurretIndex);
PREP(getTurrets);
PREP(getTurretsFFV);
PREP(getTurretsOther);
PREP(getTurretDirection);
PREP(getUavControlPosition);
PREP(getVehicleCargo);
PREP(getVehicleCodriver);
@ -102,6 +112,7 @@ PREP(isModLoaded);
PREP(isPlayer);
PREP(isTurnedOut);
PREP(letterToCode);
PREP(lightIntensityFromObject);
PREP(loadPerson);
PREP(loadPersonLocal);
PREP(loadSettingsFromProfile);
@ -113,6 +124,7 @@ PREP(moveToTempGroup);
PREP(muteUnit);
PREP(numberToDigits);
PREP(numberToDigitsString);
PREP(numberToString);
PREP(onAnswerRequest);
PREP(onLoadRscDisplayChannel);
PREP(owned);
@ -179,6 +191,8 @@ PREP(getConfigGunner);
PREP(getConfigCommander);
PREP(getHitPoints);
PREP(getHitPointsWithSelections);
PREP(getReflectorsWithSelections);
PREP(getLightProperties);
PREP(getVehicleCrew);
// turrets

View File

@ -29,7 +29,7 @@ private "_index";
_index = _conditionNames find _conditionName;
if (_index == -1) then {
_index = count _conditionNames;
_index = count _conditionNames;
};
_conditionNames set [_index, _conditionName];

View File

@ -57,7 +57,7 @@ switch ((_type select 0)) do {
};
} else {
_addedToPlayer = false;
_pos = _unit modelToWorld [0,1,0.05];
_pos = _unit modelToWorldVisual [0,1,0.05];
_unit = createVehicle ["WeaponHolder_Single_F",_pos,[],0,"NONE"];
_unit addWeaponCargoGlobal [_classname,1];
_unit setPosATL _pos;
@ -73,7 +73,7 @@ switch ((_type select 0)) do {
};
} else {
_addedToPlayer = false;
_pos = _unit modelToWorld [0,1,0.05];
_pos = _unit modelToWorldVisual [0,1,0.05];
_unit = createVehicle ["WeaponHolder_Single_F",_pos,[],0,"NONE"];
_unit addMagazineCargoGlobal [_classname, 1];
_unit setPosATL _pos;
@ -89,7 +89,7 @@ switch ((_type select 0)) do {
};
} else {
_addedToPlayer = false;
_pos = _unit modelToWorld [0,1,0.05];
_pos = _unit modelToWorldVisual [0,1,0.05];
_unit = createVehicle ["WeaponHolder_Single_F",_pos,[],0,"NONE"];
_unit addItemCargoGlobal [_classname,1];
_unit setPosATL _pos;

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

@ -15,28 +15,28 @@ _id = _this select 0;
_show = if (count _this > 1) then {_this select 1} else {false};
if (isnil QGVAR(SHOW_BLUR_SCREEN_COLLECTION)) then {
GVAR(SHOW_BLUR_SCREEN_COLLECTION) = [];
GVAR(SHOW_BLUR_SCREEN_COLLECTION) = [];
};
if (typeName _show == typeName 0) then {
_show = (_show == 1);
_show = (_show == 1);
};
if (_show) then {
GVAR(SHOW_BLUR_SCREEN_COLLECTION) pushback _id;
// show blur
if (isnil QGVAR(MENU_ppHandle_GUI_BLUR_SCREEN)) then {
GVAR(MENU_ppHandle_GUI_BLUR_SCREEN) = ppEffectCreate ["DynamicBlur", 102];
GVAR(MENU_ppHandle_GUI_BLUR_SCREEN) ppEffectAdjust [0.9];
GVAR(MENU_ppHandle_GUI_BLUR_SCREEN) ppEffectEnable true;
GVAR(MENU_ppHandle_GUI_BLUR_SCREEN) ppEffectCommit 0;
};
GVAR(SHOW_BLUR_SCREEN_COLLECTION) pushback _id;
// show blur
if (isnil QGVAR(MENU_ppHandle_GUI_BLUR_SCREEN)) then {
GVAR(MENU_ppHandle_GUI_BLUR_SCREEN) = ppEffectCreate ["DynamicBlur", 102];
GVAR(MENU_ppHandle_GUI_BLUR_SCREEN) ppEffectAdjust [0.9];
GVAR(MENU_ppHandle_GUI_BLUR_SCREEN) ppEffectEnable true;
GVAR(MENU_ppHandle_GUI_BLUR_SCREEN) ppEffectCommit 0;
};
} else {
GVAR(SHOW_BLUR_SCREEN_COLLECTION) = GVAR(SHOW_BLUR_SCREEN_COLLECTION) - [_id];
if (GVAR(SHOW_BLUR_SCREEN_COLLECTION) isEqualTo []) then {
// hide blur
if (!isnil QGVAR(MENU_ppHandle_GUI_BLUR_SCREEN)) then {
ppEffectDestroy GVAR(MENU_ppHandle_GUI_BLUR_SCREEN);
GVAR(MENU_ppHandle_GUI_BLUR_SCREEN) = nil;
};
};
GVAR(SHOW_BLUR_SCREEN_COLLECTION) = GVAR(SHOW_BLUR_SCREEN_COLLECTION) - [_id];
if (GVAR(SHOW_BLUR_SCREEN_COLLECTION) isEqualTo []) then {
// hide blur
if (!isnil QGVAR(MENU_ppHandle_GUI_BLUR_SCREEN)) then {
ppEffectDestroy GVAR(MENU_ppHandle_GUI_BLUR_SCREEN);
GVAR(MENU_ppHandle_GUI_BLUR_SCREEN) = nil;
};
};
};

View File

@ -242,10 +242,10 @@ _fnc_isInRange = {
private ["_unitPosition", "_distance"];
_unitPosition = getPos _unit;
_distance = _unitPosition distance (_vehicle modelToWorld _selectionPosition);
_distance = _unitPosition distance (_vehicle modelToWorldVisual _selectionPosition);
if (!isNil "_selectionPosition2") then {
_distance = _distance min (_unitPosition distance (_vehicle modelToWorld _selectionPosition2));
_distance = _distance min (_unitPosition distance (_vehicle modelToWorldVisual _selectionPosition2));
};
_distance < _radius

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

@ -34,13 +34,13 @@
#define Y_POS_ICONS_SECOND (TOP_SIDE + (1.1 * ICON_WIDTH))
// setting values
#define TOP_RIGHT_DOWN 1
#define TOP_RIGHT_LEFT 2
#define TOP_LEFT_DOWN 3
#define TOP_LEFT_RIGHT 4
#define TOP_RIGHT_DOWN 1
#define TOP_RIGHT_LEFT 2
#define TOP_LEFT_DOWN 3
#define TOP_LEFT_RIGHT 4
// other constants
#define DEFAULT_TIME 6
#define DEFAULT_TIME 6
private ["_iconId", "_show", "_icon", "_allControls", "_refresh", "_timeAlive", "_list", "_color"];
_iconId = _this select 0;
@ -53,68 +53,68 @@ disableSerialization;
_list = missionNamespace getvariable [QGVAR(displayIconList),[]];
_refresh = {
private ["_allControls"];
// Refreshing of all icons..
_allControls = missionNamespace getvariable [QGVAR(displayIconListControls), []];
{
ctrlDelete _x;
}foreach _allControls;
private ["_allControls"];
// Refreshing of all icons..
_allControls = missionNamespace getvariable [QGVAR(displayIconListControls), []];
{
ctrlDelete _x;
}foreach _allControls;
_allControls = [];
_allControls = [];
private ["_ctrl", "_setting"];
_setting = missionNamespace getvariable[QGVAR(settingFeedbackIcons), 0];
if (_setting > 0) then {
{
// +19000 because we want to make certain we are using free IDCs..
_ctrl = ((findDisplay 46) ctrlCreate ["RscPicture", _foreachIndex + 19000]);
_position = switch (_setting) do {
case TOP_RIGHT_DOWN: {[X_POS_ICONS, Y_POS_ICONS + (_foreachIndex * DIFFERENCE_ICONS), ICON_WIDTH, ICON_WIDTH]};
case TOP_RIGHT_LEFT: {[X_POS_ICONS_SECOND - ((_foreachIndex+3) * DIFFERENCE_ICONS), Y_POS_ICONS_SECOND - (ICON_WIDTH / 2), ICON_WIDTH, ICON_WIDTH]};
case TOP_LEFT_DOWN: {[LEFT_SIDE + (0.5 * ICON_WIDTH), Y_POS_ICONS + (_foreachIndex * DIFFERENCE_ICONS), ICON_WIDTH, ICON_WIDTH]};
case TOP_LEFT_RIGHT: {[LEFT_SIDE + (0.5 * ICON_WIDTH) - ((_foreachIndex+3) * DIFFERENCE_ICONS), Y_POS_ICONS_SECOND, ICON_WIDTH, ICON_WIDTH]};
default {[X_POS_ICONS, Y_POS_ICONS + (_foreachIndex * DIFFERENCE_ICONS), ICON_WIDTH, ICON_WIDTH]};
};
_ctrl ctrlSetPosition _position;
_ctrl ctrlsetText (_x select 1);
_ctrl ctrlSetTextColor (_x select 2);
_ctrl ctrlCommit 0;
_allControls pushback _ctrl;
}foreach (missionNamespace getvariable [QGVAR(displayIconList),[]]);
};
missionNamespace setvariable [QGVAR(displayIconListControls), _allControls];
private ["_ctrl", "_setting"];
_setting = missionNamespace getvariable[QGVAR(settingFeedbackIcons), 0];
if (_setting > 0) then {
{
// +19000 because we want to make certain we are using free IDCs..
_ctrl = ((findDisplay 46) ctrlCreate ["RscPicture", _foreachIndex + 19000]);
_position = switch (_setting) do {
case TOP_RIGHT_DOWN: {[X_POS_ICONS, Y_POS_ICONS + (_foreachIndex * DIFFERENCE_ICONS), ICON_WIDTH, ICON_WIDTH]};
case TOP_RIGHT_LEFT: {[X_POS_ICONS_SECOND - ((_foreachIndex+3) * DIFFERENCE_ICONS), Y_POS_ICONS_SECOND - (ICON_WIDTH / 2), ICON_WIDTH, ICON_WIDTH]};
case TOP_LEFT_DOWN: {[LEFT_SIDE + (0.5 * ICON_WIDTH), Y_POS_ICONS + (_foreachIndex * DIFFERENCE_ICONS), ICON_WIDTH, ICON_WIDTH]};
case TOP_LEFT_RIGHT: {[LEFT_SIDE + (0.5 * ICON_WIDTH) - ((_foreachIndex+3) * DIFFERENCE_ICONS), Y_POS_ICONS_SECOND, ICON_WIDTH, ICON_WIDTH]};
default {[X_POS_ICONS, Y_POS_ICONS + (_foreachIndex * DIFFERENCE_ICONS), ICON_WIDTH, ICON_WIDTH]};
};
_ctrl ctrlSetPosition _position;
_ctrl ctrlsetText (_x select 1);
_ctrl ctrlSetTextColor (_x select 2);
_ctrl ctrlCommit 0;
_allControls pushback _ctrl;
}foreach (missionNamespace getvariable [QGVAR(displayIconList),[]]);
};
missionNamespace setvariable [QGVAR(displayIconListControls), _allControls];
};
if (_show) then {
if ({(_x select 0 == _iconId)} count _list == 0) then {
_list pushback [_iconId, _icon, _color, time];
} else {
{
if (_x select 0 == _iconId) exitwith {
_list set [_foreachIndex, [_iconId, _icon, _color, time]];
};
}foreach _list;
};
missionNamespace setvariable [QGVAR(displayIconList), _list];
call _refresh;
if ({(_x select 0 == _iconId)} count _list == 0) then {
_list pushback [_iconId, _icon, _color, time];
} else {
{
if (_x select 0 == _iconId) exitwith {
_list set [_foreachIndex, [_iconId, _icon, _color, time]];
};
}foreach _list;
};
missionNamespace setvariable [QGVAR(displayIconList), _list];
call _refresh;
if (_timeAlive >= 0) then {
[{
if (_timeAlive >= 0) then {
[{
[_this select 0, false, "", [0,0,0], 0] call FUNC(displayIcon);
}, [_iconId], _timeAlive, _timeAlive] call EFUNC(common,waitAndExecute);
};
};
} else {
if ({(_x select 0 == _iconId)} count _list == 1) then {
private "_newList";
_newList = [];
{
if (_x select 0 != _iconId) then {
_newList pushback _x;
};
}foreach _list;
if ({(_x select 0 == _iconId)} count _list == 1) then {
private "_newList";
_newList = [];
{
if (_x select 0 != _iconId) then {
_newList pushback _x;
};
}foreach _list;
missionNamespace setvariable [QGVAR(displayIconList), _newList];
call _refresh;
};
missionNamespace setvariable [QGVAR(displayIconList), _newList];
call _refresh;
};
};

View File

@ -7,19 +7,19 @@ _var = _this select 0;
_depth = _this select 1;
_pad = "";
for "_i" from 0 to _depth do {
_pad = _pad + toString [9];
_pad = _pad + toString [9];
};
_depth = _depth + 1;
if(IS_ARRAY(_var)) then {
if((count _var) > 0) then {
diag_log text format["%1[", _pad];
{
[_x, _depth] call FUNC(dumpArray);
} forEach _var;
diag_log text format["%1],", _pad];
} else {
diag_log text format["%1[],", _pad];
};
if((count _var) > 0) then {
diag_log text format["%1[", _pad];
{
[_x, _depth] call FUNC(dumpArray);
} forEach _var;
diag_log text format["%1],", _pad];
} else {
diag_log text format["%1[],", _pad];
};
} else {
diag_log text format["%1%2", _pad, [_var] call FUNC(formatVar)];
diag_log text format["%1%2", _pad, [_var] call FUNC(formatVar)];
};

View File

@ -6,42 +6,42 @@
diag_log text format["REGISTERED ACE PFH HANDLERS"];
diag_log text format["-------------------------------------------"];
if(!isNil "ACE_PFH_COUNTER") then {
{
private["_pfh"];
_pfh = _x select 0;
diag_log text format["Registered PFH: id=%1, %1:%2", (_pfh select 0), (_pfh select 1), (_pfh select 2) ];
} forEach ACE_PFH_COUNTER;
{
private["_pfh"];
_pfh = _x select 0;
diag_log text format["Registered PFH: id=%1, %1:%2", (_pfh select 0), (_pfh select 1), (_pfh select 2) ];
} forEach ACE_PFH_COUNTER;
};
diag_log text format["ACE COUNTER RESULTS"];
diag_log text format["-------------------------------------------"];
{
private["_counterEntry", "_iter", "_total", "_count", "_delta", "_averageResult"];
_counterEntry = _x;
_iter = 0;
_total = 0;
_count = 0;
_averageResult = 0;
if( (count _counterEntry) > 3) then {
// calc
{
if(_iter > 2) then {
_count = _count + 1;
_delta = (_x select 1) - (_x select 0);
_total = _total + _delta;
};
_iter = _iter + 1;
} forEach _counterEntry;
// results
_averageResult = (_total / _count) * 1000;
// dump results
diag_log text format["%1: Average: %2s / %3 = %4ms", (_counterEntry select 0), _total, _count, _averageResult];
} else {
diag_log text format["%1: No results", (_counterEntry select 0) ];
};
private["_counterEntry", "_iter", "_total", "_count", "_delta", "_averageResult"];
_counterEntry = _x;
_iter = 0;
_total = 0;
_count = 0;
_averageResult = 0;
if( (count _counterEntry) > 3) then {
// calc
{
if(_iter > 2) then {
_count = _count + 1;
_delta = (_x select 1) - (_x select 0);
_total = _total + _delta;
};
_iter = _iter + 1;
} forEach _counterEntry;
// results
_averageResult = (_total / _count) * 1000;
// dump results
diag_log text format["%1: Average: %2s / %3 = %4ms", (_counterEntry select 0), _total, _count, _averageResult];
} else {
diag_log text format["%1: No results", (_counterEntry select 0) ];
};
} forEach ACE_COUNTERS;
/*
@ -49,21 +49,21 @@ diag_log text format["-------------------------------------------"];
diag_log text format["ACE_PERFORMANCE_EXCESSIVE_STEP_TRACKER"];
diag_log text format["-------------------------------------------"];
{
private["_delay"];
_delay = _x select 2;
//if(_delay > 0) then { _delay = _delay / 1000; };
diag_log text format["%1: %2s, delay=%3, handle=%4",(_x select 0), _delay, (_x select 3), (_x select 4)];
private["_delay"];
_delay = _x select 2;
//if(_delay > 0) then { _delay = _delay / 1000; };
diag_log text format["%1: %2s, delay=%3, handle=%4",(_x select 0), _delay, (_x select 3), (_x select 4)];
} forEach ACE_PERFORMANCE_EXCESSIVE_STEP_TRACKER;
// Dump PFH Trackers
diag_log text format["ACE_PERFORMANCE_EXCESSIVE_FRAME_TRACKER"];
diag_log text format["-------------------------------------------"];
{
private["_delta"];
_delta = _x select 1;
//if(_delta > 0) then { _delta = _delta / 1000; };
diag_log text format[" DELTA: %1s", _delta];
private["_delta"];
_delta = _x select 1;
//if(_delta > 0) then { _delta = _delta / 1000; };
diag_log text format[" DELTA: %1s", _delta];
} forEach ACE_PERFORMANCE_EXCESSIVE_FRAME_TRACKER;
//{

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,37 @@
/*
* Author: jaynus
*
* Get the absolute turret direction for FOV/PIP turret.
*
* Argument:
* 0: Vehicle (Object)
* 1: Turret Position
*
* Return value:
* [position, direction]
*/
#include "script_component.hpp"
EXPLODE_2_PVT(_this,_vehicle,_position);
private ["_turrets", "_turret", "_config", "_turret", "_povPos", "_povDir", "_gunBeginPos", "_gunEndPos", "_pov"];
_turret = [_vehicle, _position] call CBA_fnc_getTurret;
_pov = getText (_turret >> "memoryPointGunnerOptics");
_gunBeg = getText (_turret >> "gunBeg");
_gunEnd = getText (_turret >> "gunEnd");
TRACE_3("", _pov, _gunBeg, _gunEnd);
// Pull the PIP pov or barrel direction, depending on how the model is set up
_povPos = ATLtoASL ( _vehicle modelToWorldVisual (_vehicle selectionPosition _pov ) );
_povDir = [0,0,0];
if(_pov == "pip0_pos") then {
_pipDir = ATLtoASL ( _vehicle modelToWorldVisual (_vehicle selectionPosition "pip0_dir" ) );
_povDir = _pipDir vectorDiff _povPos;
} else {
_gunBeginPos = ATLtoASL ( _vehicle modelToWorldVisual (_vehicle selectionPosition _gunBeg ) );
_gunEndPos = ATLtoASL ( _vehicle modelToWorldVisual (_vehicle selectionPosition _gunEnd ) );
_povDir = _gunBeginPos vectorDiff _gunEndPos;
};
[_povPos, _povDir]

View File

@ -14,7 +14,7 @@ private ["_unit","_return","_aslPos"];
_unit = _this select 0;
_return = false;
if ((surfaceIsWater getPos _unit)) then {
_aslPos = _unit modelToWorld (_unit selectionPosition "head");
_aslPos = _unit modelToWorldVisual (_unit selectionPosition "head");
if ((_aslPos select 2) <= 0) then {
_return = true;
};

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

@ -15,52 +15,38 @@
GVAR(settings) = [];
// Load settings from main config
_countOptions = count (configFile >> "ACE_Settings");
for "_index" from 0 to (_countOptions - 1) do {
_optionEntry = (configFile >> "ACE_Settings") select _index;
_parseConfigForSettings = {
private ["_config", "_countOptions", "_optionEntry", "_index"];
[_optionEntry] call FUNC(setSettingFromConfig);
};
// Check if all settings should be forced
if (GVAR(forceAllSettings)) then {
{
_x set [6, true];
} forEach GVAR(settings);
};
// @todo
// Load settings from server userconfig only if the ACE_ServerSettings is loaded
/*if (isClass (configFile >> "CfgPatches" >> "ACE_ServerSettings")) then {
DFUNC(serverUserConfig) = compile preprocessFileLineNumbers "\userconfig\ACE\ACE_Settings.hpp";
if !(isNil DFUNC(serverUserConfig)) then {
[] call FUNC(serverUserConfig);
_config = _this select 0;
_countOptions = count _config;
for "_index" from 0 to (_countOptions - 1) do {
_optionEntry = _config select _index;
[_optionEntry] call FUNC(setSettingFromConfig);
};
// Check if all settings should be forced
if (GVAR(forceAllSettings)) then {
{
if !(missionNamespace getVariable format ["%1_forced", _x]) then {
missionNamespace setVariable format ["%1_forced", _x, true];
publicVariable format ["%1_forced", _name];
};
} forEach GVAR(settingsList);
_x set [6, true];
} forEach GVAR(settings);
};
};*/
// Load settings from mission config
_countOptions = count (missionConfigFile >> "ACE_Settings");
for "_index" from 0 to (_countOptions - 1) do {
_optionEntry = (missionConfigFile >> "ACE_Settings") select _index;
[_optionEntry] call FUNC(setSettingFromConfig);
};
// Check if all settings should be forced
if (GVAR(forceAllSettings)) then {
{
_x set [6, true];
} forEach GVAR(settings);
};
// Order is this way because:
// ACE_Settings should never force any setting by default. Loading it first ensures that all settings from ACE_Settings exist.
// This way, ACE_ServerSettings will override ACE_Settings, even if no force is used.
// Mission settings will override the server config settings, if no force is used.
// This ensures that all settings are of their correct type, in case an outdated or corrupt server config is used , as well as have their correct localized display name and description
// Regular config
[configFile >> "ACE_Settings"] call _parseConfigForSettings;
// Server config
[configFile >> "ACE_ServerSettings"] call _parseConfigForSettings;
// mission side settings
[missionConfigFile >> "ACE_Settings"] call _parseConfigForSettings;
// Publish all settings data
publicVariable QGVAR(settings);
// Publish all setting values

View File

@ -7,11 +7,11 @@ _configs = "true" configClasses (configFile >> _this);
_entries = [];
{
{
_name = toLower configName _x;
if !(_name in _entries) then {
diag_log text _name;
_entries pushBack _name;
};
} forEach configProperties [_x, "toLower configName _x find 'ace' == 0", false];
{
_name = toLower configName _x;
if !(_name in _entries) then {
diag_log text _name;
_entries pushBack _name;
};
} forEach configProperties [_x, "toLower configName _x find 'ace' == 0", false];
} forEach _configs;

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

@ -18,30 +18,30 @@ _type = [_this, 3, 0,[0]] call BIS_fnc_Param;
_parameters = [_this, 4, [], [[]]] call BIS_fnc_Param;
if (isPlayer _reciever) then {
if (!local _reciever) then {
[_this, QUOTE(FUNC(sendDisplayInformationTo)), _reciever, false] call EFUNC(common,execRemoteFnc);
} else {
if (isLocalized _title) then {
_title = localize _title;
};
_localizationArray = [_title];
{
_localizationArray pushback _x;
}foreach _parameters;
_title = format _localizationArray;
if (!local _reciever) then {
[_this, QUOTE(FUNC(sendDisplayInformationTo)), _reciever, false] call EFUNC(common,execRemoteFnc);
} else {
if (isLocalized _title) then {
_title = localize _title;
};
_localizationArray = [_title];
{
_localizationArray pushback _x;
}foreach _parameters;
_title = format _localizationArray;
{
if (isLocalized _x) then {
_localizationArray = [localize _x];
{
_localizationArray pushback _x;
}foreach _parameters;
{
if (isLocalized _x) then {
_localizationArray = [localize _x];
{
_localizationArray pushback _x;
}foreach _parameters;
_content set [_foreachIndex, format _localizationArray];
};
_content set [_foreachIndex, format _localizationArray];
};
}foreach _content;
}foreach _content;
[_title,_content,_type] call EFUNC(common,displayInformation);
};
[_title,_content,_type] call EFUNC(common,displayInformation);
};
};

View File

@ -18,29 +18,29 @@ _type = [_this, 3, 0,[0]] call BIS_fnc_Param;
_parameters = [_this, 4, [], [[]]] call BIS_fnc_Param;
if (isPlayer _reciever) then {
if (!local _reciever) then {
[_this, QUOTE(FUNC(sendDisplayMessageTo)), _reciever, false] call EFUNC(common,execRemoteFnc);
} else {
if (!local _reciever) then {
[_this, QUOTE(FUNC(sendDisplayMessageTo)), _reciever, false] call EFUNC(common,execRemoteFnc);
} else {
if (isLocalized _title) then {
_title = localize _title;
};
if (isLocalized _content) then {
_content = localize _content;
};
if (isLocalized _title) then {
_title = localize _title;
};
if (isLocalized _content) then {
_content = localize _content;
};
_localizationArray = [_title];
{
_localizationArray pushback _x;
}foreach _parameters;
_title = format _localizationArray;
_localizationArray = [_title];
{
_localizationArray pushback _x;
}foreach _parameters;
_title = format _localizationArray;
_localizationArray = [_content];
{
_localizationArray pushback _x;
}foreach _parameters;
_content = format _localizationArray;
_localizationArray = [_content];
{
_localizationArray pushback _x;
}foreach _parameters;
_content = format _localizationArray;
[_title,_content,_type] call EFUNC(common,displayMessage);
};
[_title,_content,_type] call EFUNC(common,displayMessage);
};
};

View File

@ -1,13 +1,13 @@
#include "\z\ace\addons\common\script_component.hpp"
#define VALIDHASH(hash) (IS_ARRAY(hash) && {(count hash) >= 2} && {IS_ARRAY(hash select 0)} && {IS_ARRAY(hash select 1)})
#define ERROR(msg) throw msg + format[" @ %1:%2", _callFrom, _lineNo]
#define HANDLECATCH diag_log text _exception; assert(exception=="")
#define VALIDHASH(hash) (IS_ARRAY(hash) && {(count hash) >= 2} && {IS_ARRAY(hash select 0)} && {IS_ARRAY(hash select 1)})
#define ERROR(msg) throw msg + format[" @ %1:%2", _callFrom, _lineNo]
#define HANDLECATCH diag_log text _exception; assert(exception=="")
#define ERRORDATA(c) private ["_callFrom", "_lineNo"];\
_callFrom = "";\
_lineNo = -1;\
if((count _this) > c) then {\
_callFrom = _this select c;\
_lineNo = _this select c+1;\
};
#define ERRORDATA(c) private ["_callFrom", "_lineNo"];\
_callFrom = "";\
_lineNo = -1;\
if((count _this) > c) then {\
_callFrom = _this select c;\
_lineNo = _this select c+1;\
};

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

@ -2,11 +2,11 @@
#include "\z\ace\Addons\main\script_mod.hpp"
#ifdef DEBUG_ENABLED_ATTACH
#define DEBUG_MODE_FULL
#define DEBUG_MODE_FULL
#endif
#ifdef DEBUG_SETTINGS_ATTACH
#define DEBUG_SETTINGS DEBUG_SETTINGS_ATTACH
#define DEBUG_SETTINGS DEBUG_SETTINGS_ATTACH
#endif
#include "\z\ace\Addons\main\script_macros.hpp"

View File

@ -36,7 +36,7 @@ if (_target isKindOf "CAManBase") then {
// add height offset of model
private "_offset";
_offset = (_target modelToWorld [0, 0, 0] select 2) - (_unit modelToWorld [0, 0, 0] select 2);
_offset = (_target modelToWorldVisual [0, 0, 0] select 2) - (_unit modelToWorldVisual [0, 0, 0] select 2);
_position = _position vectorAdd [0, 0, _offset];

View File

@ -25,7 +25,7 @@ _direction = _target getVariable [QGVAR(dragDirection), 0];
// add height offset of model
private "_offset";
_offset = (_target modelToWorld [0, 0, 0] select 2) - (_unit modelToWorld [0, 0, 0] select 2);
_offset = (_target modelToWorldVisual [0, 0, 0] select 2) - (_unit modelToWorldVisual [0, 0, 0] select 2);
_position = _position vectorAdd [0, 0, _offset];

View File

@ -1,20 +1,20 @@
/*
Name: AGM_Drag_fnc_GetWeight
Author(s):
L-H, edited by commy2
Name: AGM_Drag_fnc_GetWeight
Author(s):
L-H, edited by commy2
Description:
Returns the weight of a crate.
Parameters:
0: OBJECT - Crate to get weight of
Returns:
NUMBER - Weight
Example:
_weight = Crate1 call AGM_Drag_fnc_GetWeight;
Description:
Returns the weight of a crate.
Parameters:
0: OBJECT - Crate to get weight of
Returns:
NUMBER - Weight
Example:
_weight = Crate1 call AGM_Drag_fnc_GetWeight;
*/
#include "script_component.hpp"
@ -25,24 +25,24 @@ _object = _this select 0;
private ["_totalWeight", "_fnc","_fnc_Extra"];
_totalWeight = 0;
_fnc_Extra = {
private ["_weight", "_items"];
_items = _this select 0;
_weight = 0;
{
_weight = _weight + (getNumber (ConfigFile >> (_this select 1) >> _x >> (_this select 2) >> "mass") * ((_items select 1) select _foreachIndex));
} foreach (_items select 0);
_weight
private ["_weight", "_items"];
_items = _this select 0;
_weight = 0;
{
_weight = _weight + (getNumber (ConfigFile >> (_this select 1) >> _x >> (_this select 2) >> "mass") * ((_items select 1) select _foreachIndex));
} foreach (_items select 0);
_weight
};
_fnc = {
private ["_weight", "_items"];
_items = _this select 0;
_weight = 0;
{
_weight = _weight + (getNumber (ConfigFile >> (_this select 1) >> _x >> "mass") * ((_items select 1) select _foreachIndex));
} foreach (_items select 0);
_weight
private ["_weight", "_items"];
_items = _this select 0;
_weight = 0;
{
_weight = _weight + (getNumber (ConfigFile >> (_this select 1) >> _x >> "mass") * ((_items select 1) select _foreachIndex));
} foreach (_items select 0);
_weight
};
_totalWeight = ([getMagazineCargo _object, "CfgMagazines"] call _fnc);
_totalWeight = _totalWeight + ([getItemCargo _object, "CfgWeapons", "ItemInfo"] call _fnc_Extra);

View File

@ -36,7 +36,7 @@ if (_carriedItem isKindOf "CAManBase") exitWith {false};
private ["_position", "_maxHeight"];
_position = getPosATL _carriedItem;
_maxHeight = (_unit ModelToWorld [0,0,0]) select 2;
_maxHeight = (_unit modelToWorldVisual [0,0,0]) select 2;
_position set [2, ((_position select 2) + _scrollAmount min (_maxHeight + 1.5)) max _maxHeight];

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

@ -22,46 +22,46 @@ GVAR(CurrentSpeedDial) = 0;
[{(_this select 0) call FUNC(handleScrollWheel);}] call EFUNC(Common,addScrollWheelEventHandler);
player addEventHandler ["Killed", {
private "_deadman";
call FUNC(place_Cancel);
_deadman = [(_this select 0), "DeadManSwitch"] call FUNC(getPlacedExplosives);
{
[(_this select 0), -1, _x, true] call FUNC(detonateExplosive);
} count _deadman;
private "_deadman";
call FUNC(place_Cancel);
_deadman = [(_this select 0), "DeadManSwitch"] call FUNC(getPlacedExplosives);
{
[(_this select 0), -1, _x, true] call FUNC(detonateExplosive);
} count _deadman;
}];
player addEventHandler ["Take", {
private ["_item", "_getter", "_giver", "_config"];
_item = _this select 2;
_getter = _this select 0;
_giver = _this select 1;
private ["_item", "_getter", "_giver", "_config"];
_item = _this select 2;
_getter = _this select 0;
_giver = _this select 1;
_config = ConfigFile >> "CfgWeapons" >> _item;
if (isClass _config && {getNumber(_config >> "ACE_Detonator") == 1}) then {
private ["_clackerItems"];
_clackerItems = _giver getVariable [QGVAR(Clackers), []];
_getter SetVariable [QGVAR(Clackers), (_getter getVariable [QGVAR(Clackers), []]) + _clackerItems, true];
_config = ConfigFile >> "CfgWeapons" >> _item;
if (isClass _config && {getNumber(_config >> "ACE_Detonator") == 1}) then {
private ["_clackerItems"];
_clackerItems = _giver getVariable [QGVAR(Clackers), []];
_getter SetVariable [QGVAR(Clackers), (_getter getVariable [QGVAR(Clackers), []]) + _clackerItems, true];
_detonators = [_giver] call FUNC(getDetonators);
if (count _detonators == 0) then {
_giver setVariable [QGVAR(Clackers), nil, true];
};
};
_detonators = [_giver] call FUNC(getDetonators);
if (count _detonators == 0) then {
_giver setVariable [QGVAR(Clackers), nil, true];
};
};
}];
player addEventHandler ["Put", {
private ["_item", "_getter", "_giver", "_config"];
_item = _this select 2;
_getter = _this select 1;
_giver = _this select 0;
private ["_item", "_getter", "_giver", "_config"];
_item = _this select 2;
_getter = _this select 1;
_giver = _this select 0;
_config = ConfigFile >> "CfgWeapons" >> _item;
if (isClass _config && {getNumber(_config >> "ACE_Detonator") == 1}) then {
private ["_clackerItems"];
_clackerItems = _giver getVariable [QGVAR(Clackers), []];
_getter SetVariable [QGVAR(Clackers), (_getter getVariable [QGVAR(Clackers), []]) + _clackerItems, true];
_config = ConfigFile >> "CfgWeapons" >> _item;
if (isClass _config && {getNumber(_config >> "ACE_Detonator") == 1}) then {
private ["_clackerItems"];
_clackerItems = _giver getVariable [QGVAR(Clackers), []];
_getter SetVariable [QGVAR(Clackers), (_getter getVariable [QGVAR(Clackers), []]) + _clackerItems, true];
_detonators = [_giver] call FUNC(getDetonators);
if (count _detonators == 0) then {
_giver setVariable [QGVAR(Clackers), nil, true];
};
};
_detonators = [_giver] call FUNC(getDetonators);
if (count _detonators == 0) then {
_giver setVariable [QGVAR(Clackers), nil, true];
};
};
}];

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);
@ -28,9 +26,9 @@ _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;
if !(_hasRequired) exitWith {};
@ -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))];
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

@ -22,16 +22,16 @@ _found = false;
EXPLODE_2_PVT(_this,_name,_code);
if ((_code) == "") ExitWith {
[_name] call FUNC(removeFromSpeedDial);
[_name] call FUNC(removeFromSpeedDial);
};
{
if ((_x select 0) == _name) exitWith {
_speedDial set [_foreachindex, _this];
_found = true;
};
if ((_x select 0) == _name) exitWith {
_speedDial set [_foreachindex, _this];
_found = true;
};
} foreach _speedDial;
if (!_found) then {
_speedDial pushBack _this;
_speedDial pushBack _this;
};
ace_player setVariable [QGVAR(SpeedDial), _speedDial];

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);
[_unit, -1, [_explosive, 1], true] call FUNC(detonateExplosive);
};
{
detach _x;
deleteVehicle _x;
false
} count (attachedObjects (_explosive));
_unit action ["Deactivate", _unit, _explosive];

View File

@ -6,8 +6,8 @@
* 0: Unit <OBJECT>
* 1: Max range (-1 to ignore) <NUMBER>
* 2: Explosive <ARRAY>
* 0: Explosive <OBJECT>
* 1: Fuse time <NUMBER>
* 0: Explosive <OBJECT>
* 1: Fuse time <NUMBER>
*
* Return Value:
* None
@ -19,33 +19,37 @@
* 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;
_exp = getText (ConfigFile >> "CfgAmmo" >> typeof (_previousExp) >> "ACE_Explosive");
if (_exp != "") then {
_exp = createVehicle [_exp, [0,0,15001], [], 0, "NONE"];
_exp setDir (getDir _previousExp);
_item set [0, _exp];
_pos = getPosASL _previousExp;
deleteVehicle _previousExp;
_exp setPosASL _pos;
};
private ["_exp", "_previousExp"];
_previousExp = _item select 0;
_exp = getText (ConfigFile >> "CfgAmmo" >> typeof (_previousExp) >> "ACE_Explosive");
if (_exp != "") then {
_exp = createVehicle [_exp, [0,0,15001], [], 0, "NONE"];
_exp setDir (getDir _previousExp);
_item set [0, _exp];
_pos = getPosASL _previousExp;
deleteVehicle _previousExp;
_exp setPosASL _pos;
};
};
[{
_explosive = _this;
if (!isNull _explosive) then {
_explosive setDamage 1;
};
_explosive = _this;
if (!isNull _explosive) then {
_explosive setDamage 1;
};
}, _item select 0, _item select 1, 0] call EFUNC(common,waitAndExecute);
_result

View File

@ -24,19 +24,19 @@ _unit setVariable [QGVAR(Dialing), true, true];
_ran = (ceil(random 8)) + 1;
_arr = [];
for [{_i=0}, {_i<_ran}, {_i=_i+1}] do {
_arr = _arr + ['.','..','...',''];
_arr = _arr + ['.','..','...',''];
};
if (_unit == ace_player) then {
ctrlSetText [1400,"Calling"];
[FUNC(dialingPhone), 0.25, [_unit,4,_arr,_code]] call CALLSTACK(CBA_fnc_addPerFrameHandler);
ctrlSetText [1400,"Calling"];
[FUNC(dialingPhone), 0.25, [_unit,4,_arr,_code]] call CALLSTACK(CBA_fnc_addPerFrameHandler);
} else {
private ["_explosive"];
_explosive = [_code] call FUNC(getSpeedDialExplosive);
if ((count _explosive) > 0) then {
[{
playSound3D [QUOTE(PATHTO_R(Data\Audio\Cellphone_Ring.wss)),objNull, false, getPosASL (_this select 1),3.16228,1,75];
(_this select 0) setVariable [QGVAR(Dialing), false, true];
}, [_unit,_explosive select 0], 0.25 * (count _arr - 4), 0] call EFUNC(common,waitAndExecute);
[_explosive select 0,(0.25 * (count _arr - 1)) + (_explosive select 2)] call FUNC(startTimer);
};
private ["_explosive"];
_explosive = [_code] call FUNC(getSpeedDialExplosive);
if ((count _explosive) > 0) then {
[{
playSound3D [QUOTE(PATHTO_R(Data\Audio\Cellphone_Ring.wss)),objNull, false, getPosASL (_this select 1),3.16228,1,75];
(_this select 0) setVariable [QGVAR(Dialing), false, true];
}, [_unit,_explosive select 0], 0.25 * (count _arr - 4), 0] call EFUNC(common,waitAndExecute);
[_explosive select 0,(0.25 * (count _arr - 1)) + (_explosive select 2)] call FUNC(startTimer);
};
};

View File

@ -19,7 +19,7 @@
#include "script_component.hpp"
EXPLODE_4_PVT(_this select 0,_unit,_i,_arr,_code);
if ((_i mod 4) == 0) then {
playSound3D [QUOTE(PATHTO_R(Data\Audio\DialTone.wss)), objNull, false, (_unit ModelToWorld [0,0.2,2]), 15,1,2.5];
playSound3D [QUOTE(PATHTO_R(Data\Audio\DialTone.wss)), objNull, false, (_unit modelToWorldVisual [0,0.2,2]), 15,1,2.5];
};
ctrlSetText [1400,format["Calling%1",_arr select (_i - 4)]];

View File

@ -20,10 +20,10 @@ _items = (items _unit);
_result = [];
{
_config = ConfigFile >> "CfgWeapons" >> _x;
if (getNumber (_config >> "ACE_Detonator") == 1) then {
_result pushBack _x;
};
_config = ConfigFile >> "CfgWeapons" >> _x;
if (getNumber (_config >> "ACE_Detonator") == 1) then {
_result pushBack _x;
};
} forEach _items;
_result

View File

@ -20,29 +20,29 @@ private ["_unit", "_clackerList", "_adjustedList", "_list", "_filter"];
_unit = _this select 0;
_filter = nil;
if (count _this > 1) then {
_filter = ConfigFile >> "CfgACE_Triggers" >> (_this select 1);
_filter = ConfigFile >> "CfgACE_Triggers" >> (_this select 1);
};
_clackerList = [];
_adjustedList = false;
_clackerList = _unit getVariable [QGVAR(Clackers), []];
_list = [];
{
if isNull (_x select 0) then {
_clackerList set [_foreachIndex, "X"];
_adjustedList = true;
} else {
if (isNil "_filter" || {(ConfigFile >> "CfgACE_Triggers" >> (_x select 4)) == _filter}) then {
_list pushBack _x;
};
};
if (isNull (_x select 0)) then {
_clackerList set [_foreachIndex, "X"];
_adjustedList = true;
} else {
if (isNil "_filter" || {(ConfigFile >> "CfgACE_Triggers" >> (_x select 4)) == _filter}) then {
_list pushBack _x;
};
};
} foreach _clackerList;
if (_adjustedList) then {
_clackerList = _clackerList - ["X"];
if (count _clackerList == 0) then {
_unit SetVariable [QGVAR(Clackers), nil, true];
} else {
_unit SetVariable [QGVAR(Clackers), _clackerList, true];
};
_clackerList = _clackerList - ["X"];
if (count _clackerList == 0) then {
_unit SetVariable [QGVAR(Clackers), nil, true];
} else {
_unit SetVariable [QGVAR(Clackers), _clackerList, true];
};
};
_list

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

@ -19,9 +19,9 @@ _result = false;
_unit = _this select 0;
_magazines = magazines _unit;
{
if (getNumber (ConfigFile >> "CfgMagazines" >> _x >> "ACE_Placeable") == 1) exitWith {
_result = true;
};
if (getNumber (ConfigFile >> "CfgMagazines" >> _x >> "ACE_Placeable") == 1) exitWith {
_result = true;
};
} count _magazines;
_result

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,55 +7,57 @@
* 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 modelToWorld [0,0.5, 0.1], 134,
* "SatchelCharge_Remote_Mag", "Command", []] call ACE_Explosives_fnc_placeExplosive;
* _explosive = [player, player modelToWorldVisual [0,0.5, 0.1], 134,
* "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 {
diag_log format ["ACE_Explosives: Error config not passed to PlaceExplosive: %1", _this];
objNull
diag_log format ["ACE_Explosives: Error config not passed to PlaceExplosive: %1", _this];
objNull
};
_magazineTrigger = ConfigFile >> "CfgMagazines" >> _magazineClass >> "ACE_Triggers" >> _triggerConfig;
_triggerConfig = ConfigFile >> "CfgACE_Triggers" >> _triggerConfig;
if (isNil "_triggerConfig") exitWith {
diag_log format ["ACE_Explosives: Error config not found in PlaceExplosive: %1", _this];
objNull
diag_log format ["ACE_Explosives: Error config not found in PlaceExplosive: %1", _this];
objNull
};
_ammo = getText(ConfigFile >> "CfgMagazines" >> _magazineClass >> "ammo");
if (isText(_magazineTrigger >> "ammo")) then {
_ammo = getText (_magazineTrigger >> "ammo");
_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);
};
call compile (getText (_triggerConfig >> "onPlace"))}) exitWith {_explosive};
[[_explosive, _dir, getNumber (_magazineTrigger >> "pitch")], QFUNC(setPosition)] call EFUNC(common,execRemoteFnc);
_explosive

View File

@ -16,90 +16,30 @@
*/
#include "script_component.hpp"
if (GVAR(pfeh_running)) then {
[QGVAR(Placement),"OnEachFrame"] call CALLSTACK(BIS_fnc_removeStackedEventHandler);
GVAR(pfeh_running) = false;
[QGVAR(Placement),"OnEachFrame"] call CALLSTACK(BIS_fnc_removeStackedEventHandler);
GVAR(pfeh_running) = false;
};
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;
deleteVehicle _setup;
};
_dir = (getDir _setup);
if (_dir > 180) then {
_dir = _dir - 180;
_dir = _dir - 180;
} else {
_dir = 180 + _dir;
_dir = 180 + _dir;
};
_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

@ -15,18 +15,18 @@
*/
#include "script_component.hpp"
if (GVAR(pfeh_running)) then {
[QGVAR(Placement),"OnEachFrame"] call CALLSTACK(BIS_fnc_removeStackedEventHandler);
GVAR(pfeh_running) = false;
[QGVAR(Placement),"OnEachFrame"] call CALLSTACK(BIS_fnc_removeStackedEventHandler);
GVAR(pfeh_running) = false;
};
if (!isNull (GVAR(Setup))) then {
deleteVehicle GVAR(Setup);
deleteVehicle GVAR(Setup);
};
GVAR(Setup) = objNull;
if (isNil {GVAR(placer)}) then {
GVAR(placer) = objNull;
GVAR(placer) = objNull;
};
[GVAR(placer), "ACE_Explosives", false] call EFUNC(Common,setForceWalkStatus);
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

@ -18,9 +18,9 @@ private "_speedDial";
_speedDial = ace_player getVariable [QGVAR(SpeedDial), []];
if (count _speedDial == 0) exitWith {};
{
if ((_x select 0) == (_this select 0)) exitWith {
_speedDial set [_foreachIndex, "x"];
_speedDial = _speedDial - ["x"];
ace_player setVariable [QGVAR(SpeedDial),_speedDial];
};
if ((_x select 0) == (_this select 0)) exitWith {
_speedDial set [_foreachIndex, "x"];
_speedDial = _speedDial - ["x"];
ace_player setVariable [QGVAR(SpeedDial),_speedDial];
};
} foreach _speedDial;

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

@ -20,6 +20,6 @@ _config = getArray (ConfigFile >> "CfgMagazines" >> (_this select 0) >> "ACE_Tri
_count = count _config;
for "_index" from 0 to (_count - 1) do {
_result set [_index, ConfigFile >> "CfgACE_Triggers" >> (_config select _index)];
_result set [_index, ConfigFile >> "CfgACE_Triggers" >> (_config select _index)];
};
_result

View File

@ -2,11 +2,11 @@
#include "\z\ace\addons\main\script_mod.hpp"
#ifdef DEBUG_ENABLED_EXPLOSIVES
#define DEBUG_MODE_FULL
#define DEBUG_MODE_FULL
#endif
#ifdef DEBUG_SETTINGS_EXPLOSIVES
#define DEBUG_SETTINGS DEBUG_SETTINGS_EXPLOSIVES
#define DEBUG_SETTINGS DEBUG_SETTINGS_EXPLOSIVES
#endif
#include "\z\ace\addons\main\script_macros.hpp"

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

@ -5,3 +5,6 @@ GVAR(time) = 0;
GVAR(position) = [0,0,0];
#include "initKeybinds.sqf"
// Register event for global updates
[QGVAR(forceUpdate), FUNC(onForceUpdate)] call ace_common_fnc_addEventHandler;

View File

@ -10,6 +10,7 @@ PREP(firedEH);
PREP(getAngle);
PREP(getRange);
PREP(handleAirBurstAmmunitionPFH);
PREP(onForceUpdate);
PREP(keyDown);
PREP(keyUp);
PREP(reset);

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

@ -5,7 +5,7 @@ _projectile = _this select 0 select 1;
_zeroing = _this select 0 select 2;
if (isNull _projectile || {!alive _projectile}) exitWith {
[_this select 1] call CBA_fnc_removePerFrameHandler;
[_this select 1] call CBA_fnc_removePerFrameHandler;
};
if (_projectile distance _vehicle < _zeroing) exitWith {};

View File

@ -12,7 +12,7 @@
#include "script_component.hpp"
private ["_vehicle", "_turret", "_turretConfig", "_distance", "_magazines"];
private ["_vehicle", "_turret", "_turretConfig", "_distance", "_magazines", "_showHint", "_playSound"];
_vehicle = _this select 0;
_turret = _this select 1;
@ -46,7 +46,9 @@ if (_weaponDirection isEqualTo [0,0,0]) then { // dummy value for non main turr
_angleTarget = asin (_weaponDirection select 2);
if (count _this > 2) then {
_distance = _this select 2;
if((_this select 2) > -1) then {
_distance = _this select 2;
};
};
if (!(isNil QGVAR(backgroundCalculation)) and {!(scriptDone GVAR(backgroundCalculation))}) then {
@ -160,4 +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);
[format ["%1: %2", localize "STR_ACE_FCS_ZeroedTo", _distance]] call EFUNC(common,displayTextStructured);
_showHint = false;
if( (count _this) > 3) then {
_showHint = _this select 3;
};
_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);
};

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