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

This commit is contained in:
esteldunedain 2015-04-14 19:10:31 -03:00
commit 495c822061
81 changed files with 1328 additions and 1326 deletions

View File

@ -76,4 +76,4 @@ ruPaladin <happyworm24@rambler.ru>
BlackPixxel
Asgar Serran <piechottaf@web.de>
Kavinsky <nmunozfernandez@gmail.com>
BlackPixxel

View File

@ -90,7 +90,8 @@ class CfgAmmo {
ACE_muzzleVelocities[]={780, 880, 920};
ACE_barrelLengths[]={10, 16.3, 20};
};
class ACE_545x39_Ball_7T3M : B_556x45_Ball_Tracer_Red {
class B_556x45_Ball_Tracer_Yellow;
class ACE_545x39_Ball_7T3M : B_556x45_Ball_Tracer_Yellow {
airFriction=-0.001162;
caliber=0.5;
deflecting=18;
@ -122,9 +123,24 @@ class CfgAmmo {
ACE_barrelLengths[]={10, 16, 20, 24, 26, 30};
};
class B_65x39_Case_yellow;
class ACE_B_65x39_Caseless_Tracer_Dim : B_65x39_Case_yellow {
class ACE_65x39_Caseless_Tracer_Dim : B_65x39_Case_yellow {
nvgOnly = 1;
};
class ACE_65x47_Ball_Scenar: B_65x39_Caseless
{
airFriction=-0.00078;
typicalSpeed=820 ;
ACE_caliber=0.264;
ACE_bulletLength=1.364;
ACE_bulletMass=139;
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
ACE_ballisticCoefficients[]={0.290};
ACE_velocityBoundaries[]={};
ACE_standardAtmosphere="ICAO";
ACE_dragModel=7;
ACE_muzzleVelocities[]={760, 790, 820, 830};
ACE_barrelLengths[]={16, 20, 24, 26};
};
class B_762x51_Ball : BulletBase {
airFriction=-0.001035;
typicalSpeed=833;
@ -140,8 +156,8 @@ class CfgAmmo {
ACE_muzzleVelocities[]={700, 800, 820, 833, 845};
ACE_barrelLengths[]={10, 16, 20, 24, 26};
};
class B_762x51_Tracer_Red;
class ACE_B_762x51_Tracer_Dim: B_762x51_Tracer_Red {
class B_762x51_Tracer_Yellow;
class ACE_B_762x51_Tracer_Dim: B_762x51_Tracer_Yellow {
nvgOnly = 1;
};
class ACE_762x51_Ball_M118LR : B_762x51_Ball {
@ -160,6 +176,57 @@ class CfgAmmo {
ACE_muzzleVelocities[]={750, 780, 790, 794};
ACE_barrelLengths[]={16, 20, 24, 26};
};
class ACE_762x67_Ball_Mk248_Mod_0 : B_762x51_Ball
{
airFriction=-0.000830;
caliber=1.08;
hit=17;
typicalSpeed=900;
ACE_caliber=0.308;
ACE_bulletLength=1.353;
ACE_bulletMass=190;
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
ACE_ballisticCoefficients[]={0.268};
ACE_velocityBoundaries[]={};
ACE_standardAtmosphere="ICAO";
ACE_dragModel=7;
ACE_muzzleVelocities[]={865, 900, 924};
ACE_barrelLengths[]={20, 24, 26};
};
class ACE_762x67_Ball_Mk248_Mod_1 : B_762x51_Ball
{
airFriction=-0.000815;
caliber=1.12;
hit=18;
typicalSpeed=867;
ACE_caliber=0.308;
ACE_bulletLength=1.489;
ACE_bulletMass=220;
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
ACE_ballisticCoefficients[]={0.310};
ACE_velocityBoundaries[]={};
ACE_standardAtmosphere="ICAO";
ACE_dragModel=7;
ACE_muzzleVelocities[]={847, 867, 877};
ACE_barrelLengths[]={20, 24, 26};
};
class ACE_762x67_Ball_Berger_Hybrid_OTM : B_762x51_Ball
{
airFriction=-0.00076;
caliber=1.15;
hit=19;
typicalSpeed=853;
ACE_caliber=0.308;
ACE_bulletLength=1.602;
ACE_bulletMass=230;
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
ACE_ballisticCoefficients[]={0.368};
ACE_velocityBoundaries[]={};
ACE_standardAtmosphere="ICAO";
ACE_dragModel=7;
ACE_muzzleVelocities[]={800, 853, 884};
ACE_barrelLengths[]={20, 24, 26};
};
class ACE_762x51_Ball_Subsonic : B_762x51_Ball {
airFriction=-0.000535;
caliber=0.5;
@ -204,7 +271,8 @@ class CfgAmmo {
ACE_muzzleVelocities[]={700, 800, 820, 833};
ACE_barrelLengths[]={16, 20, 24, 26};
};
class ACE_762x54_Ball_7T2 : B_762x51_Tracer_Red {
class B_762x54_Tracer_Green;
class ACE_762x54_Ball_7T2 : B_762x54_Tracer_Green {
airFriction=-0.001023;
caliber=0.9;
hit=15;
@ -251,7 +319,7 @@ class CfgAmmo {
ACE_muzzleVelocities[]={650, 716, 750};
ACE_barrelLengths[]={10, 16.3, 20};
};
class ACE_762x39_Ball_57N231P : B_762x51_Tracer_Red {
class ACE_762x39_Ball_57N231P : B_762x51_Tracer_Yellow {
airFriction=-0.0015168;
hit=12;
typicalSpeed=716;

View File

@ -11,22 +11,54 @@ class CfgMagazines {
class 100Rnd_65x39_caseless_mag_Tracer: 100Rnd_65x39_caseless_mag {
initSpeed = 760;
};
class ACE_100Rnd_65x39_caseless_mag_Tracer_Dim: 100Rnd_65x39_caseless_mag_Tracer {
author = "$STR_ACE_Common_ACETeam";
ammo = "ACE_65x39_Caseless_Tracer_Dim";
displayName = "$STR_ACE_100Rnd_65x39_caseless_mag_Tracer_DimName";
displayNameShort = "$STR_ACE_100Rnd_65x39_caseless_mag_Tracer_DimNameShort";
descriptionShort = "$STR_ACE_100Rnd_65x39_caseless_mag_Tracer_DimDescription";
picture = "\A3\weapons_f\data\ui\m_100rnd_65x39_yellow_ca.paa";
};
class 200Rnd_65x39_cased_Box: 100Rnd_65x39_caseless_mag {
initSpeed = 760;
};
class ACE_200Rnd_65x39_cased_Box_Tracer_Dim: 200Rnd_65x39_cased_Box {
author = "$STR_ACE_Common_ACETeam";
ammo = "ACE_65x39_Caseless_Tracer_Dim";
displayName = "$STR_ACE_200Rnd_65x39_cased_Box_Tracer_DimName";
displayNameShort = "$STR_ACE_200Rnd_65x39_cased_Box_Tracer_DimNameShort";
descriptionShort = "$STR_ACE_200Rnd_65x39_cased_Box_Tracer_DimDescription";
picture = "\A3\weapons_f\data\ui\m_200rnd_65x39_yellow_ca.paa";
};
class 30Rnd_65x39_caseless_mag_Tracer: 30Rnd_65x39_caseless_mag {
};
class ACE_30Rnd_65x39_caseless_mag_Tracer_Dim: 30Rnd_65x39_caseless_mag_Tracer {
author = "$STR_ACE_Common_ACETeam";
ammo = "ACE_B_65x39_Caseless_Tracer_Dim";
ammo = "ACE_65x39_Caseless_Tracer_Dim";
displayName = "$STR_ACE_30Rnd_65x39_caseless_mag_Tracer_DimName";
displayNameShort = "$STR_ACE_30Rnd_65x39_caseless_mag_Tracer_DimNameShort";
descriptionShort = "$STR_ACE_30Rnd_65x39_caseless_mag_Tracer_DimDescription";
picture = "\A3\weapons_f\data\ui\m_30stanag_caseless_yellow_CA.paa";
picture = "\A3\weapons_f\data\ui\m_30stanag_caseless_yellow_ca.paa";
};
class 30Rnd_556x45_Stanag: CA_Magazine {
};
class ACE_30Rnd_556x45_Stanag_Mk262_mag: 30Rnd_556x45_Stanag {
author = "$STR_ACE_Common_ACETeam";
ammo = "ACE_556x45_Ball_Mk262";
displayName = "$STR_ACE_30Rnd_556x45_Stanag_Mk262_mag_Name";
displayNameShort = "$STR_ACE_30Rnd_556x45_Stanag_Mk262_mag_NameShort";
descriptionShort = "$STR_ACE_30Rnd_556x45_Stanag_Mk262_mag_Description";
initSpeed = 832;
};
class ACE_30Rnd_556x45_Stanag_Mk318_mag: 30Rnd_556x45_Stanag {
author = "$STR_ACE_Common_ACETeam";
ammo = "ACE_556x45_Ball_Mk318";
displayName = "$STR_ACE_30Rnd_556x45_Stanag_Mk318_mag_Name";
displayNameShort = "$STR_ACE_30Rnd_556x45_Stanag_Mk318_mag_NameShort";
descriptionShort = "$STR_ACE_30Rnd_556x45_Stanag_Mk318_mag_Description";
initSpeed = 922;
};
class 30Rnd_556x45_Stanag_Tracer_Red: 30Rnd_556x45_Stanag {
};
class ACE_30Rnd_556x45_Stanag_Tracer_Dim: 30Rnd_556x45_Stanag_Tracer_Red {
@ -35,7 +67,7 @@ class CfgMagazines {
displayName = "$STR_ACE_30Rnd_556x45_mag_Tracer_DimName";
displayNameShort = "$STR_ACE_30Rnd_556x45_mag_Tracer_DimNameShort";
descriptionShort = "$STR_ACE_30Rnd_556x45_mag_Tracer_DimDescription";
picture = "\A3\weapons_f\data\ui\m_30stanag_yellow_ca.paa";
picture = "\A3\weapons_f\data\ui\m_20stanag_red_ca.paa";
};
class 20Rnd_762x51_Mag: CA_Magazine {
@ -50,7 +82,7 @@ class CfgMagazines {
class 150Rnd_762x51_Box_Tracer: 150Rnd_762x51_Box {
initSpeed = 833;
};
class ACE_20Rnd_762x51_Mag_Tracer: 20Rnd_762x51_Mag { //@todo Green tracers for opfor and yellow tracers for independent
class ACE_20Rnd_762x51_Mag_Tracer: 20Rnd_762x51_Mag {
author = "$STR_ACE_Common_ACETeam";
ammo = "B_762x51_Tracer_Red";
displayName = "$STR_ACE_20Rnd_762x51_mag_TracerName";
@ -76,6 +108,61 @@ class CfgMagazines {
initSpeed = 325;
};
class ACE_10Rnd_762x51_M118LR_Mag: 10Rnd_762x51_Mag
{
author = "$STR_ACE_Common_ACETeam";
ammo = "ACE_762x51_Ball_M118LR";
count=10;
displayName = "$STR_ACE_10Rnd_762x51_M118LR_Mag_Name";
displayNameShort = "$STR_ACE_10Rnd_762x51_M118LR_Mag_NameShort";
descriptionShort = "$STR_ACE_10Rnd_762x51_M118LR_Mag_Description";
initSpeed = 780;
};
class ACE_20Rnd_762x51_M118LR_Mag: 20Rnd_762x51_Mag
{
author = "$STR_ACE_Common_ACETeam";
ammo = "ACE_762x51_Ball_M118LR";
displayName = "$STR_ACE_20Rnd_762x51_M118LR_Mag_Name";
displayNameShort = "$STR_ACE_20Rnd_762x51_M118LR_Mag_NameShort";
descriptionShort = "$STR_ACE_20Rnd_762x51_M118LR_Mag_Description";
initSpeed = 780;
};
class ACE_20Rnd_762x67_Mk248_Mod_0_Mag: 20Rnd_762x51_Mag
{
author = "$STR_ACE_Common_ACETeam";
ammo = "ACE_762x67_Ball_Mk248_Mod_0";
displayName = "$STR_ACE_20Rnd_762x67_Mk248_Mod_0_Mag_Name";
displayNameShort = "$STR_ACE_20Rnd_762x67_Mk248_Mod_0_Mag_NameShort";
descriptionShort = "$STR_ACE_20Rnd_762x67_Mk248_Mod_0_Mag_Description";
initSpeed = 865;
};
class ACE_20Rnd_762x67_Mk248_Mod_1_Mag: 20Rnd_762x51_Mag
{
author = "$STR_ACE_Common_ACETeam";
ammo = "ACE_762x67_Ball_Mk248_Mod_1";
displayName = "$STR_ACE_20Rnd_762x67_Mk248_Mod_1_Mag_Name";
displayNameShort = "$STR_ACE_20Rnd_762x67_Mk248_Mod_1_Mag_NameShort";
descriptionShort = "$STR_ACE_20Rnd_762x67_Mk248_Mod_1_Mag_Description";
initSpeed = 847;
};
class ACE_20Rnd_762x67_Berger_Hybrid_OTM_Mag: 20Rnd_762x51_Mag
{
author = "$STR_ACE_Common_ACETeam";
ammo = "ACE_762x67_Ball_Berger_Hybrid_OTM";
displayName = "$STR_ACE_20Rnd_762x67_Berger_Hybrid_OTM_Mag_Name";
displayNameShort = "$STR_ACE_20Rnd_762x67_Berger_Hybrid_OTM_Mag_NameShort";
descriptionShort = "$STR_ACE_20Rnd_762x67_Berger_Hybrid_OTM_Mag_Description";
initSpeed = 800;
};
class ACE_30Rnd_65x47_Scenar_mag: 30Rnd_65x39_caseless_mag
{
author = "$STR_ACE_Common_ACETeam";
ammo = "ACE_65x47_Ball_Scenar";
count=30;
displayName = "30rnd 6.5mm Mag (HPBT Scenar)";
descriptionshort = "Caliber: 65x47 mm (HPBT Scenar)<br />Rounds: 30<br />Used in: MXM";
};
class 30Rnd_9x21_Mag: CA_Magazine {
initSpeed = 450;
};
@ -123,6 +210,14 @@ class CfgMagazines {
class 10Rnd_762x54_Mag: 10Rnd_762x51_Mag {
initSpeed = 800;
};
class ACE_10Rnd_762x54_Tracer_mag: 16Rnd_9x21_Mag {
author = "$STR_ACE_Common_ACETeam";
ammo = "ACE_762x54_Ball_7T2";
displayName = "$STR_ACE_10Rnd_762x54_Tracer_mag_Name";
displayNameShort = "$STR_ACE_10Rnd_762x54_Tracer_mag_NameShort";
descriptionShort = "$STR_ACE_10Rnd_762x54_Tracer_mag_Description";
initSpeed = 800;
};
class 150Rnd_762x54_Box: 150Rnd_762x51_Box {
initSpeed = 750;

View File

@ -9,4 +9,154 @@ class CfgVehicles {
//hitPart = "systemChat str _this";
};
};
class NATO_Box_Base;
class Box_NATO_Wps_F: NATO_Box_Base {
class TransportMagazines {
MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4);
};
};
class Box_NATO_WpsSpecial_F: NATO_Box_Base {
class TransportMagazines {
MACRO_ADDMAGAZINE(ACE_30Rnd_65x39_caseless_mag_Tracer_Dim,4);
MACRO_ADDMAGAZINE(ACE_100Rnd_65x39_caseless_mag_Tracer_Dim,4);
MACRO_ADDMAGAZINE(ACE_200Rnd_65x39_cased_Box_Tracer_Dim,4);
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Tracer_Dim,1);
};
};
class Box_NATO_Ammo_F: NATO_Box_Base {
class TransportMagazines {
MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4);
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_M118LR_Mag,4);
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_M118LR_Mag,4);
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,4);
};
};
class Box_NATO_Support_F: NATO_Box_Base {
class TransportMagazines {
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_M118LR_Mag,4);
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_M118LR_Mag,6);
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,4);
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_SD,3);
};
};
class ReammoBox_F;
class B_supplyCrate_F: ReammoBox_F {
class TransportMagazines {
MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4);
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_M118LR_Mag,4);
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_M118LR_Mag,4);
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,4);
};
};
class EAST_Box_Base;
class Box_East_Wps_F: EAST_Box_Base {
class TransportMagazines {
MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4);
MACRO_ADDMAGAZINE(ACE_10Rnd_762x54_Tracer_mag,4);
};
};
class Box_East_WpsSpecial_F: EAST_Box_Base {
class TransportMagazines {
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Tracer_Dim,1);
MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4);
MACRO_ADDMAGAZINE(ACE_10Rnd_762x54_Tracer_mag,4);
};
};
class Box_East_Ammo_F: EAST_Box_Base {
class TransportMagazines {
MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4);
MACRO_ADDMAGAZINE(ACE_10Rnd_762x54_Tracer_mag,4);
};
};
class Box_East_Support_F: EAST_Box_Base {
class TransportMagazines {
MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,6);
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_SD,3);
MACRO_ADDMAGAZINE(ACE_10Rnd_762x54_Tracer_mag,4);
};
};
class IND_Box_Base;
class Box_IND_Wps_F: IND_Box_Base {
class TransportMagazines {
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4);
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4);
};
};
class Box_IND_WpsSpecial_F: IND_Box_Base {
class TransportMagazines {
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Tracer_Dim,4);
};
};
class Box_IND_Ammo_F: IND_Box_Base {
class TransportMagazines {
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4);
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4);
};
};
class FIA_Box_Base_F;
class Box_FIA_Wps_F: FIA_Box_Base_F {
class TransportMagazines {
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4);
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4);
};
};
class Box_FIA_Ammo_F: FIA_Box_Base_F {
class TransportMagazines {
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4);
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4);
};
};
class I_supplyCrate_F: B_supplyCrate_F {
class TransportMagazines {
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4);
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4);
};
};
class IG_supplyCrate_F: ReammoBox_F {
class TransportMagazines {
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4);
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4);
};
};
class C_supplyCrate_F: ReammoBox_F {
class TransportMagazines {
MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4);
};
};
class ACE_Box_Misc: Box_NATO_Support_F {
class TransportMagazines {
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_SD,4);
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_M118LR_Mag,4);
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,4);
MACRO_ADDMAGAZINE(ACE_20Rnd_762x67_Mk248_Mod_0_Mag,4);
MACRO_ADDMAGAZINE(ACE_20Rnd_762x67_Mk248_Mod_1_Mag,4);
MACRO_ADDMAGAZINE(ACE_20Rnd_762x67_Berger_Hybrid_OTM_Mag,4);
MACRO_ADDMAGAZINE(ACE_10Rnd_762x54_Tracer_mag,4);
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4);
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4);
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Tracer_Dim,4);
MACRO_ADDMAGAZINE(ACE_30Rnd_65x39_caseless_mag_Tracer_Dim,4);
MACRO_ADDMAGAZINE(ACE_100Rnd_65x39_caseless_mag_Tracer_Dim,4);
MACRO_ADDMAGAZINE(ACE_200Rnd_65x39_cased_Box_Tracer_Dim,4);
MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4);
};
};
};

View File

@ -56,6 +56,14 @@ class CfgWeapons {
};
};
class arifle_MX_SW_F: arifle_MX_Base_F {
magazines[] = {
"100Rnd_65x39_caseless_mag_Tracer",
"100Rnd_65x39_caseless_mag",
"30Rnd_65x39_caseless_mag",
"30Rnd_65x39_caseless_mag_Tracer",
"ACE_100Rnd_65x39_caseless_mag_Tracer_Dim",
"ACE_30Rnd_65x39_caseless_mag_Tracer_Dim"
};
initSpeed = -1.0;
ACE_barrelTwist=9;
ACE_barrelLength=16.0;
@ -76,6 +84,12 @@ class CfgWeapons {
};
};
class arifle_MXM_F: arifle_MX_Base_F {
magazines[] = {
"30Rnd_65x39_caseless_mag",
"30Rnd_65x39_caseless_mag_Tracer",
"ACE_30Rnd_65x39_caseless_mag_Tracer_Dim",
"ACE_30Rnd_65x47_Scenar_mag"
};
initSpeed = -1.018;
ACE_barrelTwist=9;
ACE_barrelLength=18;
@ -111,6 +125,11 @@ class CfgWeapons {
/* Other */
class LMG_Mk200_F: Rifle_Long_Base_F {
magazines[] = {
"200Rnd_65x39_cased_Box",
"200Rnd_65x39_cased_Box_Tracer",
"ACE_200Rnd_65x39_cased_Box_Tracer_Dim"
};
initSpeed = -0.9763;
class WeaponSlotsInfo: WeaponSlotsInfo {
class MuzzleSlot: MuzzleSlot {
@ -180,7 +199,7 @@ class CfgWeapons {
/* SMGs */
class SDAR_base_F: Rifle_Base_F {
initSpeed = -0.9723;
initSpeed = -0.989;
class Single: Mode_SemiAuto {
dispersion = 0.0008727; // radians. Equal to 3 MOA, about the limit of mass-produced M855 plus
// some extra because Kel-Tec.
@ -284,26 +303,51 @@ class CfgWeapons {
ACE_barrelLength=7;
};
class arifle_Katiba_F: arifle_katiba_Base_F {
initSpeed = -1.09;
magazines[] = {
"30Rnd_65x39_caseless_mag",
"30Rnd_65x39_caseless_mag_Tracer",
"ACE_30Rnd_65x39_caseless_mag_Tracer_Dim"
};
initSpeed = -1.08;
ACE_barrelTwist=8;
ACE_barrelLength=28.7;
};
class arifle_Katiba_C_F: arifle_katiba_Base_F {
magazines[] = {
"30Rnd_65x39_caseless_mag",
"30Rnd_65x39_caseless_mag_Tracer",
"ACE_30Rnd_65x39_caseless_mag_Tracer_Dim"
};
initSpeed = -1.07;
ACE_barrelTwist=8;
ACE_barrelLength=26.8;
};
class arifle_Katiba_GL_F: arifle_katiba_Base_F {
initSpeed = -1.09;
magazines[] = {
"30Rnd_65x39_caseless_mag",
"30Rnd_65x39_caseless_mag_Tracer",
"ACE_30Rnd_65x39_caseless_mag_Tracer_Dim"
};
initSpeed = -1.08;
ACE_barrelTwist=8;
ACE_barrelLength=28.7;
};
class arifle_MX_F: arifle_MX_Base_F {
magazines[] = {
"30Rnd_65x39_caseless_mag",
"30Rnd_65x39_caseless_mag_Tracer",
"ACE_30Rnd_65x39_caseless_mag_Tracer_Dim"
};
initSpeed = -0.99;
ACE_barrelTwist=9;
ACE_barrelLength=14.5;
};
class arifle_MX_GL_F: arifle_MX_Base_F {
magazines[] = {
"30Rnd_65x39_caseless_mag",
"30Rnd_65x39_caseless_mag_Tracer",
"ACE_30Rnd_65x39_caseless_mag_Tracer_Dim"
};
initSpeed = -0.99;
ACE_barrelTwist=9;
ACE_barrelLength=14.5;
@ -315,6 +359,11 @@ class CfgWeapons {
};
*/
class arifle_MXC_F: arifle_MX_Base_F {
magazines[] = {
"30Rnd_65x39_caseless_mag",
"30Rnd_65x39_caseless_mag_Tracer",
"ACE_30Rnd_65x39_caseless_mag_Tracer_Dim"
};
initSpeed = -0.965;
ACE_barrelTwist=8;
ACE_barrelLength=10.5;
@ -326,7 +375,17 @@ class CfgWeapons {
};
*/
class arifle_SDAR_F: SDAR_base_F {
initSpeed = -0.9723;
magazines[] = {
"20Rnd_556x45_UW_mag",
"30Rnd_556x45_Stanag",
"30Rnd_556x45_Stanag_Tracer_Red",
"30Rnd_556x45_Stanag_Tracer_Green",
"30Rnd_556x45_Stanag_Tracer_Yellow",
"ACE_30Rnd_556x45_Stanag_Mk262_mag",
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
};
initSpeed = -0.989;
ACE_barrelTwist=11.25;
ACE_barrelLength=18;
};
@ -336,16 +395,43 @@ class CfgWeapons {
ACE_barrelLength=7.7;
};
class arifle_TRG20_F: Tavor_base_F {
magazines[] = {
"30Rnd_556x45_Stanag",
"30Rnd_556x45_Stanag_Tracer_Red",
"30Rnd_556x45_Stanag_Tracer_Green",
"30Rnd_556x45_Stanag_Tracer_Yellow",
"ACE_30Rnd_556x45_Stanag_Mk262_mag",
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
};
initSpeed = -0.95;
ACE_barrelTwist=7;
ACE_barrelLength=15;
};
class arifle_TRG21_F: Tavor_base_F {
magazines[] = {
"30Rnd_556x45_Stanag",
"30Rnd_556x45_Stanag_Tracer_Red",
"30Rnd_556x45_Stanag_Tracer_Green",
"30Rnd_556x45_Stanag_Tracer_Yellow",
"ACE_30Rnd_556x45_Stanag_Mk262_mag",
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
};
initSpeed = -0.989;
ACE_barrelTwist=7;
ACE_barrelLength=18.1;
};
class arifle_TRG21_GL_F: Tavor_base_F {
magazines[] = {
"30Rnd_556x45_Stanag",
"30Rnd_556x45_Stanag_Tracer_Red",
"30Rnd_556x45_Stanag_Tracer_Green",
"30Rnd_556x45_Stanag_Tracer_Yellow",
"ACE_30Rnd_556x45_Stanag_Mk262_mag",
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
};
initSpeed = -0.989;
ACE_barrelTwist=7;
ACE_barrelLength=18.1;
@ -357,16 +443,43 @@ class CfgWeapons {
};
*/
class arifle_Mk20_F: mk20_base_F {
magazines[] = {
"30Rnd_556x45_Stanag",
"30Rnd_556x45_Stanag_Tracer_Red",
"30Rnd_556x45_Stanag_Tracer_Green",
"30Rnd_556x45_Stanag_Tracer_Yellow",
"ACE_30Rnd_556x45_Stanag_Mk262_mag",
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
};
initSpeed = -0.98;
ACE_barrelTwist=7;
ACE_barrelLength=17.4;
};
class arifle_Mk20C_F: mk20_base_F {
magazines[] = {
"30Rnd_556x45_Stanag",
"30Rnd_556x45_Stanag_Tracer_Red",
"30Rnd_556x45_Stanag_Tracer_Green",
"30Rnd_556x45_Stanag_Tracer_Yellow",
"ACE_30Rnd_556x45_Stanag_Mk262_mag",
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
};
initSpeed = -0.956;
ACE_barrelTwist=7;
ACE_barrelLength=16;
};
class arifle_Mk20_GL_F: mk20_base_F {
magazines[] = {
"30Rnd_556x45_Stanag",
"30Rnd_556x45_Stanag_Tracer_Red",
"30Rnd_556x45_Stanag_Tracer_Green",
"30Rnd_556x45_Stanag_Tracer_Yellow",
"ACE_30Rnd_556x45_Stanag_Mk262_mag",
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
};
initSpeed = -0.956;
ACE_barrelTwist=7;
ACE_barrelLength=16;
@ -377,11 +490,21 @@ class CfgWeapons {
ACE_barrelLength=5.5;
};
class srifle_DMR_01_F: DMR_01_base_F {
magazines[] = {
"10Rnd_762x54_Mag",
"ACE_10Rnd_762x54_Tracer_mag"
};
initSpeed = -1.025;
ACE_barrelTwist=9.5;
ACE_barrelLength=24;
};
class srifle_EBR_F: EBR_base_F {
magazines[] = {
"20Rnd_762x51_Mag",
"ACE_20Rnd_762x51_Mag_Tracer_Dim",
"ACE_20Rnd_762x51_M118LR_Mag",
"ACE_20Rnd_762x51_Mag_SD"
};
initSpeed = -0.9724;
ACE_barrelTwist=12;
ACE_barrelLength=18;
@ -409,6 +532,12 @@ class CfgWeapons {
ACE_barrelLength=26;
};
class srifle_DMR_03_F: DMR_03_base_F {
magazines[] = {
"20Rnd_762x51_Mag",
"ACE_20Rnd_762x51_Mag_Tracer_Dim",
"ACE_20Rnd_762x51_M118LR_Mag",
"ACE_20Rnd_762x51_Mag_SD"
};
initSpeed = -0.9843;
ACE_barrelTwist=10;
ACE_barrelLength=20;
@ -424,6 +553,12 @@ class CfgWeapons {
ACE_barrelLength=24.41;
};
class srifle_DMR_06_camo_F: DMR_06_base_F {
magazines[] = {
"20Rnd_762x51_Mag",
"ACE_20Rnd_762x51_Mag_Tracer_Dim",
"ACE_20Rnd_762x51_M118LR_Mag",
"ACE_20Rnd_762x51_Mag_SD"
};
initSpeed = -0.9916;
ACE_barrelTwist=12;
ACE_barrelLength=22;

View File

@ -257,42 +257,6 @@
<Italian>Calibro: 5.56x45 mm Traccianti IR-DIM&lt;br /&gt;Munizioni: 30&lt;br /&gt;In uso su: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Italian>
<Russian>Калибр: 5.56x45 мм трассирующие под ПНВ&lt;br /&gt;Патронов: 30&lt;br /&gt;Применимы в: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Russian>
</Key>
<Key ID="STR_ACE_30Rnd_556x45_mag_SDName">
<English>5.56mm 30Rnd SD Mag</English>
<Hungarian>5,56 mm Hangtompítós 30-as Tár</Hungarian>
<German>5,56 mm 30-Schuss-Magazin SD</German>
<Spanish>Cargador de 30 balas SD de 5,56 mm</Spanish>
<French>Ch. 5,56mm 30Cps SD</French>
<Polish>Magazynek 5,56mm 30rd SD</Polish>
<Czech>5.56mm 30ks SD Zásobník</Czech>
<Portuguese>Carregador de 30 projéteis SD de 5,56mm</Portuguese>
<Italian>Caricatore 5.56mm 30Rnd Sil.</Italian>
<Russian>Магазин из 30-ти 5.56 мм дозвуковых</Russian>
</Key>
<Key ID="STR_ACE_30Rnd_556x45_mag_SDNameShort">
<English>5.56mm SD</English>
<Hungarian>5,56 mm Hangtompítós</Hungarian>
<German>5,56mm SD</German>
<Spanish>5,56 mm SD</Spanish>
<French>5,56mm SD</French>
<Polish>5,56mm SD</Polish>
<Czech>5.56mm SD</Czech>
<Portuguese>5,56mm SD</Portuguese>
<Italian>5.56 Sil.</Italian>
<Russian>5.56 мм дозвуковые</Russian>
</Key>
<Key ID="STR_ACE_30Rnd_556x45_mag_SDDescription">
<English>Caliber: 5.56x45 mm SD&lt;br /&gt;Rounds: 30&lt;br /&gt;Used in: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</English>
<Hungarian>Kaliber: 5,56x45 mm Hangtompítós&lt;br /&gt;Lőszerek: 30&lt;br /&gt;Használható: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Hungarian>
<German>Kaliber: 5,56x45 mm SD&lt;br /&gt;Patronen: 30&lt;br /&gt;Eingesetzt von: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</German>
<Spanish>Calibre: 5,56x45 mm SD&lt;br /&gt;Balas: 30&lt;br /&gt;Se usa en: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Spanish>
<French>Calibre: 5.56x45 mm SD&lt;br /&gt;Cartouches: 30&lt;br /&gt;Utilisé dans: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</French>
<Polish>Kaliber: 5,56 x 45 mm SD&lt;br /&gt;Pociski: 30&lt;br /&gt;Używane w: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Polish>
<Czech>Ráže: 5.56x45 mm SD&lt;br /&gt;Munice: 30&lt;br /&gt;Použití: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Czech>
<Portuguese>Calibre: 5,56x45 mm SD&lt;br /&gt;Projéteis: 30&lt;br /&gt;Usado em: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Portuguese>
<Italian>Calibro: 5.56x45 mm Sil.&lt;br /&gt;Munizioni: 30&lt;br /&gt;In uso su: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Italian>
<Russian>Калибр: 5.56x45 мм дозвуковые&lt;br /&gt;Патронов: 30&lt;br /&gt;Применимы в: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Russian>
</Key>
<Key ID="STR_ACE_30Rnd_556x45_mag_APName">
<English>5.56mm 30Rnd AP Mag</English>
<Hungarian>5,56 mm Páncéltörő 30-as Tár</Hungarian>
@ -474,52 +438,7 @@
<Italian>Calibro: 7.62x51 mm AP&lt;br /&gt;Munizioni: 20&lt;br /&gt;In uso su: Mk18 ABR</Italian>
<Russian>Калибр: 7.62x51 мм дозвуковые&lt;br /&gt;Патронов: 20&lt;br /&gt;Применимы в: Mk18 ABR</Russian>
</Key>
<Key ID="STR_ACE_20Rnd_762x51_mag_LRDescription">
<English>Caliber: 7.62x51mm M118LR&lt;br /&gt;Rounds: 20&lt;br /&gt;Type: M14</English>
<Hungarian>Kaliber: 7,62x51 mm M118LR&lt;br /&gt;Lőszerek: 20&lt;br /&gt;Típus: M14</Hungarian>
<German>Kaliber: 7,62x51mm M118LR&lt;br /&gt;Schuss: 20&lt;br /&gt;Typ: M14</German>
<Spanish>Calibre: 7,62x51mm M118LR&lt;br /&gt;Balas: 20&lt;br /&gt;Tipo: M14</Spanish>
<Polish>Kaliber: 7,62 x 51 mm M118LR&lt;br /&gt;Pociski: 20&lt;br /&gt;Typ: M14</Polish>
<Czech>Kalibr: 7.62x51mm M118LR&lt;br /&gt;Náboje: 20&lt;br /&gt;Typ: M14</Czech>
<French>Calibre : 7,62x51mm M118LR&lt;br /&gt;Cartouches: 20&lt;br /&gt;Type: M14</French>
<Portuguese>Calibre: 7,62x51mm M118LR&lt;br /&gt;Projéteis: 20&lt;br /&gt;Tipo: M14</Portuguese>
<Russian>Калибр: 7.62x51mm M118LR&lt;br /&gt;Патронов: 20&lt;br /&gt;Тип: M14</Russian>
<Italian>Calibro: 7.62x51mm M118LR&lt;br /&gt;Munizioni:20&lt;br /&gt;In uso su: M14</Italian>
</Key>
<!-- .338 Lapua Magnum -->
<Key ID="STR_ACE_10Rnd_338_Mag_TracerName">
<English>.338 LM 10Rnd Tracer Mag</English>
<German>.338 LM 10-Schuss-Magazin Leuchtspur</German>
<Polish>Magazynek .338 LM 10rd Smugacz</Polish>
<Czech>.338 LM 10Rnd Svítící Zásobník</Czech>
</Key>
<Key ID="STR_ACE_10Rnd_338_Mag_TracerNameShort">
<English>.338 LM Tracer</English>
<German>.338 LM Leuchtspur</German>
<Polish>.338 LM Smugacz</Polish>
<Czech>.338 LM Svítící</Czech>
</Key>
<Key ID="STR_ACE_10Rnd_338_Mag_TracerDescription">
<English>Caliber: .338 Lapua Magnum Tracer&lt;br /&gt;Rounds: 10&lt;br /&gt;Used in: MAR-10</English>
<German>Kaliber: .338 Lapua Magnum Leuchtspur&lt;br /&gt;Schuss: 10&lt;br /&gt;Verwendet für: MAR-10</German>
<Polish>Kaliber: .338 Lapua Magnum Smugacz&lt;br /&gt;Pociski: 10&lt;br /&gt;Używane w: MAR-10</Polish>
</Key>
<Key ID="STR_ACE_10Rnd_388_Mag_Tracer_DimName">
<English>.338 LM 10Rnd IR-DIM Mag</English>
<German>.338 LM 10-Schuss-Magazin Leuchtspur IR-DIM</German>
<Polish>Magazynek .338 LM 10rd IR-DIM</Polish>
</Key>
<Key ID="STR_ACE_10Rnd_338_Mag_Tracer_DimNameShort">
<English>.338 LM IR-DIM</English>
<German>.338 LM IR-DIM</German>
<Polish>.338 LM IR-DIM</Polish>
<Czech>.338 LM IR-DIM</Czech>
</Key>
<Key ID="STR_ACE_10Rnd_338_Mag_Tracer_DimDescription">
<English>Caliber: .338 Lapua Magnum Tracer IR-DIM&lt;br /&gt;Rounds: 10&lt;br /&gt;Used in: MAR-10</English>
<German>Kaliber: .338 Lapua Magnum Leuchtspur IR-DIM&lt;br /&gt;Schuss: 10&lt;br /&gt;Verwendet für: MAR-10</German>
<Polish>Kaliber: .338 Lapua Magnum Smugacz IR-DIM&lt;br /&gt;Pociski: 10&lt;br /&gt;Używane w: MAR-10</Polish>
</Key>
<Key ID="STR_ACE_10Rnd_338_Mag_APName">
<English>.338 LM 10Rnd AP Mag</English>
<German>.338 LM 10-Schuss-Magazin Hartkern</German>
@ -536,22 +455,6 @@
<German>Kaliber: .338 Lapua Magnum Hartkern&lt;br /&gt;Schuss: 10&lt;br /&gt;Verwendet für: MAR-10</German>
<Polish>Kaliber: .338 Lapua Magnum AP&lt;br /&gt;Pociski: 10&lt;br /&gt;Używany w: MAR-10</Polish>
</Key>
<Key ID="STR_ACE_10Rnd_338_Mag_SDName">
<English>.338 LM 10Rnd SD Mag</English>
<German>.338 LM 10-Schuss-Magazin Unterschall</German>
<Polish>Magazynek .338 LM 10rd SD</Polish>
</Key>
<Key ID="STR_ACE_10Rnd_338_Mag_SDNameShort">
<English>.338 LM SD</English>
<German>.338 LM SD</German>
<Polish>.338 LM SD</Polish>
<Czech>.338 LM SD</Czech>
</Key>
<Key ID="STR_ACE_10Rnd_338_Mag_SDDescription">
<English>Caliber: .338 Lapua Magnum SD&lt;br /&gt;Rounds: 10&lt;br /&gt;Used in: MAR-10</English>
<German>Kaliber: .338 Lapua Magnum Unterschall&lt;br /&gt;Schuss: 10&lt;br /&gt;Verwendet für: MAR-10</German>
<Polish>Kaliber: .338 Lapua Magnum SD&lt;br /&gt;Pociski: 10&lt;br /&gt;Używany w: MAR-10</Polish>
</Key>
<!-- .338 Norma Magnum -->
<Key ID="STR_ACE_130Rnd_338_Mag_TracerName">
<English>.338 NM 130Rnd Tracer Belt</English>
@ -650,22 +553,6 @@
<German>Kaliber: 9,3x64mm Hartkern&lt;br /&gt;Schuss: 10&lt;br /&gt;Verwendet für: Cyrus</German>
<Polish>Kaliber: 9,3 x 64 mm AP&lt;br /&gt;Pociski: 10&lt;br /&gt;Używany w: Cyrus</Polish>
</Key>
<Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_SDName">
<English>9.3mm 10Rnd SD Mag</English>
<German>9,3mm 10-Schuss-Magazin Unterschall</German>
<Polish>Magazynek 9,3mm 10rd SD</Polish>
</Key>
<Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_SDNameShort">
<English>9.3mm SD</English>
<German>9,3mm SD</German>
<Polish>9,3mm SD</Polish>
<Czech>9.3mm SD</Czech>
</Key>
<Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_SDDescription">
<English>Caliber: 9.3x64mm SD&lt;br /&gt;Rounds: 10&lt;br /&gt;Used in: Cyrus</English>
<German>Kaliber: 9,3x64mm Unterschall&lt;br /&gt;Schuss: 10&lt;br /&gt;Verwendet für: Cyrus</German>
<Polish>Kaliber: 9,3 x 64 mm SD&lt;br /&gt;Pociski: 10&lt;br /&gt;Używany w: Cyrus</Polish>
</Key>
<!-- 9.3x64mm 150Rnd Belt-->
<Key ID="STR_ACE_150Rnd_93x64_Mag_TracerName">
<English>9.3mm 150Rnd Tracer Belt</English>
@ -716,16 +603,112 @@
<Polish>Kaliber: 9,3 x 64 mm AP&lt;br /&gt;Pociski: 150&lt;br /&gt;Używane w: Navid</Polish>
</Key>
<Key ID="STR_ACE_16Rnd_9x19_mag_Name">
<English>9x19mm 16Rnd Mag</English>
</Key>
<Key ID="STR_ACE_16Rnd_9x19_mag_NameShort">
<English>9x19mm</English>
</Key>
<Key ID="STR_ACE_16Rnd_9x19_mag_Description">
<English>9x19mm 16Rnd Mag</English>
</Key>
<Key ID="STR_ACE_30Rnd_9x19_mag_Name">
<English>9x19mm 30Rnd Mag</English>
</Key>
<Key ID="STR_ACE_30Rnd_9x19_mag_NameShort">
<English>9x19mm</English>
</Key>
<Key ID="STR_ACE_30Rnd_9x19_mag_Description">
<English>9x19mm 30Rnd Mag</English>
</Key>
<Key ID="STR_ACE_10Rnd_762x54_Tracer_mag_Name">
<English>7.62x54mm 10Rnd Tracer IR-DIM Mag</English>
</Key>
<Key ID="STR_ACE_10Rnd_762x54_Tracer_mag_NameShort">
<English>7.62mm IR-DIM</English>
</Key>
<Key ID="STR_ACE_10Rnd_762x54_Tracer_mag_Description">
<English>7.62x54mm 10Rnd Tracer IR-DIM Mag</English>
</Key>
<Key ID="STR_ACE_100Rnd_65x39_caseless_mag_Tracer_DimName">
<English>6.5mm 100Rnd Tracer IR-DIM Mag</English>
</Key>
<Key ID="STR_ACE_100Rnd_65x39_caseless_mag_Tracer_DimNameShort">
<English>6.5mm IR-DIM</English>
</Key>
<Key ID="STR_ACE_100Rnd_65x39_caseless_mag_Tracer_DimDescription">
<English>6.5mm 100Rnd Tracer IR-DIM Mag</English>
</Key>
<Key ID="STR_ACE_200Rnd_65x39_cased_Box_Tracer_DimName">
<English>6.5mm 200Rnd Tracer IR-DIM Belt</English>
</Key>
<Key ID="STR_ACE_200Rnd_65x39_cased_Box_Tracer_DimNameShort">
<English>6.5mm IR-DIM</English>
</Key>
<Key ID="STR_ACE_200Rnd_65x39_cased_Box_Tracer_DimDescription">
<English>6.5mm 200Rnd Tracer IR-DIM Belt</English>
</Key>
<Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk262_mag_Name">
<English>5.56mm 30Rnd Mag (Mk262)</English>
</Key>
<Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk262_mag_NameShort">
<English>5.56mm (Mk262)</English>
</Key>
<Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk262_mag_Description">
<English>Caliber: 5.56x45 mm NATO (Mk262)&lt;br /&gt;Rounds: 30</English>
</Key>
<Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk318_mag_Name">
<English>5.56mm 30Rnd Mag (Mk318)</English>
</Key>
<Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk318_mag_NameShort">
<English>5.56mm (Mk318)</English>
</Key>
<Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk318_mag_Description">
<English>Caliber: 5.56x45 mm NATO (Mk318)&lt;br /&gt;Rounds: 30</English>
</Key>
<Key ID="STR_ACE_10Rnd_762x51_M118LR_Mag_Name">
<English>7.62mm 10Rnd Mag (M118LR)</English>
</Key>
<Key ID="STR_ACE_10Rnd_762x51_M118LR_Mag_NameShort">
<English>7.62mm (M118LR)</English>
</Key>
<Key ID="STR_ACE_10Rnd_762x51_M118LR_Mag_Description">
<English>Caliber: 7.62x51 mm NATO (M118LR)&lt;br /&gt;Rounds: 10</English>
</Key>
<Key ID="STR_ACE_20Rnd_762x51_M118LR_Mag_Name">
<English>7.62mm 20Rnd Mag (M118LR)</English>
</Key>
<Key ID="STR_ACE_20Rnd_762x51_M118LR_Mag_NameShort">
<English>7.62mm (M118LR)</English>
</Key>
<Key ID="STR_ACE_20Rnd_762x51_M118LR_Mag_Description">
<English>Caliber: 7.62x51 mm NATO (M118LR)&lt;br /&gt;Rounds: 20</English>
</Key>
<Key ID="STR_ACE_20Rnd_762x67_Mk248_Mod_0_Mag_Name">
<English>7.62mm 20Rnd Mag (Mk248 Mod 0)</English>
</Key>
<Key ID="STR_ACE_20Rnd_762x67_Mk248_Mod_0_Mag_NameShort">
<English>7.62mm (Mk248 Mod 0)</English>
</Key>
<Key ID="STR_ACE_20Rnd_762x67_Mk248_Mod_0_Mag_Description">
<English>Caliber: 7.62x67 mm NATO (Mk248 Mod 0)&lt;br /&gt;Rounds: 20</English>
</Key>
<Key ID="STR_ACE_20Rnd_762x67_Mk248_Mod_1_Mag_Name">
<English>7.62mm 20Rnd Mag (Mk248 Mod 1)</English>
</Key>
<Key ID="STR_ACE_20Rnd_762x67_Mk248_Mod_1_Mag_NameShort">
<English>7.62mm (Mk248 Mod 1)</English>
</Key>
<Key ID="STR_ACE_20Rnd_762x67_Mk248_Mod_1_Mag_Description">
<English>Caliber: 7.62x67 mm NATO (Mk248 Mod 1)&lt;br /&gt;Rounds: 20</English>
</Key>
<Key ID="STR_ACE_20Rnd_762x67_Berger_Hybrid_OTM_Mag_Name">
<English>7.62mm 20Rnd Mag (Berger Hybrid OTM)</English>
</Key>
<Key ID="STR_ACE_20Rnd_762x67_Berger_Hybrid_OTM_Mag_NameShort">
<English>7.62mm (OTM)</English>
</Key>
<Key ID="STR_ACE_20Rnd_762x67_Berger_Hybrid_OTM_Mag_Description">
<English>Caliber: 7.62x67 mm NATO (Berger Hybrid OTM)&lt;br /&gt;Rounds: 20</English>
</Key>
</Package>
</Project>

View File

@ -69,9 +69,9 @@ class ACE_Settings {
* force = 0;
*
* Does it appear on the options menu?
* isClientSetable = 1;
* isClientSettable = 1;
*
* The following settings only apply when isClientSetable == 1
* The following settings only apply when isClientSettable == 1
* Stringtable entry with the setting name
* displayName = "$STR_ACE_Common_SettingName";
*
@ -90,14 +90,14 @@ class ACE_Settings {
/*class GVAR(enableNumberHotkeys) {
value = 1;
typeName = "BOOL";
isClientSetable = 1;
isClientSettable = 1;
displayName = "$STR_ACE_Common_EnableNumberHotkeys";
};*/
class GVAR(settingFeedbackIcons) {
value = 1;
typeName = "SCALAR";
force = 0;
isClientSetable = 1;
isClientSettable = 1;
displayName = "$STR_ACE_Common_SettingFeedbackIconsName";
description = "$STR_ACE_Common_SettingFeedbackIconsDesc";
values[] = {"Hide", "Top right, downwards", "Top right, to the left", "Top left, downwards", "Top left, to the right"};
@ -106,7 +106,7 @@ class ACE_Settings {
value = 0;
typeName = "SCALAR";
force = 0;
isClientSetable = 1;
isClientSettable = 1;
displayName = "$STR_ACE_Common_SettingProgressbarLocationName";
description = "$STR_ACE_Common_SettingProgressbarLocationDesc";
values[] = {"Top", "Bottom"};
@ -114,14 +114,14 @@ class ACE_Settings {
class GVAR(displayTextColor) {
value[] = {0,0,0,0.1};
typeName = "COLOR";
isClientSetable = 1;
isClientSettable = 1;
displayName = "$STR_ACE_Common_SettingDisplayTextColorName";
description = "$STR_ACE_Common_SettingDisplayTextColorDesc";
};
class GVAR(displayTextFontColor) {
value[] = {1,1,1,1};
typeName = "COLOR";
isClientSetable = 1;
isClientSettable = 1;
displayName = "$STR_ACE_Common_SettingDisplayTextFontColorName";
description = "$STR_ACE_Common_SettingDisplayTextFontColorDesc";
};

View File

@ -52,4 +52,4 @@ _lowestVolume = 1;
// Set Radio mod variables.
player setVariable ["tf_globalVolume", _lowestVolume];
player setVariable ["acre_sys_core_globalVolume", _lowestVolume];
if (!isNil "acre_api_fnc_setGlobalVolume") then { [_lowestVolume^0.33] call acre_api_fnc_setGlobalVolume; };

View File

@ -58,7 +58,7 @@ if (isNil _name) then {
/*_settingData = [
_name,
_typeName,
_isClientSetable,
_isClientSettable,
_localizedName,
_localizedDescription,
_possibleValues,
@ -68,7 +68,7 @@ if (isNil _name) then {
_settingData = [
_name,
_typeName,
(getNumber (_optionEntry >> "isClientSetable")) > 0,
(getNumber (_optionEntry >> "isClientSettable")) > 0,
getText (_optionEntry >> "displayName"),
getText (_optionEntry >> "description"),
getArray (_optionEntry >> "values"),

View File

@ -27,8 +27,8 @@ if (_setVolume) then {
player setVariable ["tf_unable_to_use_radio", false];
// ACRE2
[NORMAL_LEVEL] call acre_api_fnc_setGlobalVolume;
player setVariable ["acre_sys_core_isDisabled", false, true];
if (!isNil "acre_api_fnc_setGlobalVolume") then { [NORMAL_LEVEL^0.33] call acre_api_fnc_setGlobalVolume; };
player setVariable ["acre_sys_core_isDisabled", false, true];
} else {
// Vanilla Game
@ -40,7 +40,7 @@ if (_setVolume) then {
player setVariable ["tf_unable_to_use_radio", true];
// ACRE2
[MUTED_LEVEL] call acre_api_fnc_setGlobalVolume;
if (!isNil "acre_api_fnc_setGlobalVolume") then { [MUTED_LEVEL^0.33] call acre_api_fnc_setGlobalVolume; };
player setVariable ["acre_sys_core_isDisabled", true, true];
};

View File

@ -247,7 +247,7 @@ class ACE_Settings {
class GVAR(showInThirdPerson) {
value = 0;
typeName = "BOOL";
isClientSetable = 1;
isClientSettable = 1;
displayName = "$STR_ACE_Goggles_ShowInThirdPerson";
};
};

View File

@ -38,7 +38,7 @@ class ACE_Settings {
class GVAR(DisableEarRinging) {
value = 0;
typeName = "BOOL";
isClientSetable = 1;
isClientSettable = 1;
displayName = "$STR_ACE_Hearing_DisableEarRinging";
};
};

View File

@ -56,7 +56,7 @@ if (!(missionNameSpace getVariable [QGVAR(disableVolumeUpdate), false])) then {
0.1 fadeSound _volume;
0.1 fadeSpeech _volume;
ACE_player setVariable ["tf_globalVolume", _volume];
if (!isNil "acre_api_fnc_setGlobalVolume") then {[_volume] call acre_api_fnc_setGlobalVolume;};
if (!isNil "acre_api_fnc_setGlobalVolume") then {[_volume^(0.33)] call acre_api_fnc_setGlobalVolume;};
};
//hintSilent format ["GVAR(currentDeafness), _Volume = %1, %2", GVAR(currentDeafness), _volume];

View File

@ -20,7 +20,7 @@ class ACE_Settings {
class GVAR(AlwaysUseCursorSelfInteraction) {
value = 0;
typeName = "BOOL";
isClientSetable = 1;
isClientSettable = 1;
displayName = "$STR_ACE_Interact_Menu_AlwaysUseCursorSelfInteraction";
};
class GVAR(UseListMenu) {

View File

@ -18,7 +18,7 @@ class ACE_Settings {
class GVAR(inventoryDisplaySize) {
value = 0;
typeName = "SCALAR";
isClientSetable = 1;
isClientSettable = 1;
displayName = "$STR_ACE_Inventory_SettingName";
description = "$STR_ACE_Inventory_SettingDescription";
values[] = {"Normal (Default Size)", "Medium", "Bigger"};

View File

@ -12,20 +12,10 @@ class RscLine;
class RscInGameUI {
class ACE_RscOptics_javelin {
idd = 300;
controls[] = { "ACE_javelin_elements_group", "CA_Distance", "ACE_Targeting" }; //, "ACE_TargetingConstrains", "ACE_TargetingGate", "ACE_TargetingLines"};
controls[] = { "ACE_javelin_elements_group", "ACE_Targeting" }; //, "ACE_TargetingConstrains", "ACE_TargetingGate", "ACE_TargetingLines"};
onLoad = QUOTE(_this call FUNC(onOpticLoad));
onUnload = "uiNameSpace setVariable ['ACE_RscOptics_javelin',nil];uiNameSpace setVariable ['ACE_RscOptics_javelin_PFH',nil];";
class CA_Distance: RscOpticsValue {
idc = 151;
sizeEx = "0";
colorText[] = {0,0,0,0};
x = 0;
y = 0;
w = 0;
h = 0;
};
class ACE_javelin_elements_group: RscControlsGroup
{
x = "SafezoneX";
@ -45,6 +35,16 @@ class RscInGameUI {
height = 0.001;
};
class Controls {
class CA_Distance: RscOpticsValue {
idc = 151;
sizeEx = "0";
colorText[] = {0,0,0,0};
x = 0;
y = 0;
w = 0;
h = 0;
};
class ACE_javelin_Day_mode_off: RscPicture {
idc = 1001;
x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.03/4)*3*SafezoneH - SafezoneX";
@ -58,7 +58,7 @@ class RscInGameUI {
idc = 160;
colorText[] = {0.2941,0.8745,0.2157,1};
};
class ACE_javelin_WFOV_mode_off: ACE_javelin_Day_mode_off {
class CA_Javelin_WFOV_mode_off : ACE_javelin_Day_mode_off {
idc = 1004;
x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.307/4)*3*SafezoneH - SafezoneX";
text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\wfov_co.paa";
@ -81,13 +81,6 @@ class RscInGameUI {
height = 0.001;
};
class Controls {
class ACE_javelin_WFOV_mode: ACE_javelin_WFOV_mode_off {
idc = -1;
y = "0.031*SafezoneH - SafezoneY";
x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.307/4)*3*SafezoneH - SafezoneX";
colorText[] = {0.2941,0.8745,0.2157,1};
};
/*
class StadiaL: RscLine {
x = "0.4899*SafezoneW - SafezoneX";
y = "0.171*SafezoneH - SafezoneY";
@ -130,10 +123,10 @@ class RscInGameUI {
h = 0;
colorText[] = {0.2941,0.8745,0.2157,1};
};
*/
};
};
class ACE_javelin_NFOV_mode_off: ACE_javelin_Day_mode_off {
class CA_Javelin_NFOV_mode_off: ACE_javelin_Day_mode_off {
idc = 1003;
x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.586/4)*3*SafezoneH - SafezoneX";
text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\nfov_co.paa";
@ -156,13 +149,6 @@ class RscInGameUI {
height = 0.001;
};
class Controls {
class ACE_javelin_NFOV_mode: ACE_javelin_NFOV_mode_off {
idc = 699003;
x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.586/4)*3*SafezoneH - SafezoneX";
y = "0.031*SafezoneH - SafezoneY";
colorText[] = {0.2941,0.8745,0.2157,1};
};
/*
class StadiaL: RscLine {
x = "0.4788*SafezoneW - SafezoneX";
y = "0.171*SafezoneH - SafezoneY";
@ -205,7 +191,7 @@ class RscInGameUI {
h = "0.1895*SafezoneH";
colorText[] = {0.2941,0.8745,0.2157,1};
};
*/
};
};

View File

@ -4,10 +4,10 @@ TRACE_1("enter", _this);
private["_player", "_currentFireMode"];
_currentFireMode = ACE_player getVariable["ace_missileguidance_attackProfile", "TOP"];
if(_currentFireMode == "LIN") then {
_currentFireMode = "TOP";
_currentFireMode = ACE_player getVariable["ace_missileguidance_attackProfile", "JAV_TOP"];
if(_currentFireMode == "JAV_DIR") then {
_currentFireMode = "JAV_TOP";
} else {
_currentFireMode = "LIN";
_currentFireMode = "JAV_DIR";
};
ACE_player setVariable["ace_missileguidance_attackProfile", _currentFireMode, false];

View File

@ -3,9 +3,8 @@
TRACE_1("enter", _this);
#define __TRACKINTERVAL 0 // how frequent the check should be.
#define __LOCKONTIME 3.0 // Lock on won't occur sooner
#define __LOCKONTIMERANDOM 0.3 // Deviation in lock on time
#define __SENSORSQUARE 1 // Locking on sensor square side in angles
#define __LOCKONTIME 3 // Lock on won't occur sooner
#define __OffsetX ((ctrlPosition __JavelinIGUITargetingLineV) select 0) - 0.5
#define __OffsetY ((ctrlPosition __JavelinIGUITargetingLineH) select 1) - 0.5
@ -40,6 +39,7 @@ _currentTarget = _args select 1;
_runTime = _args select 2;
_lockTime = _args select 3;
_soundTime = _args select 4;
_randomLockInterval = _args select 5;
// Find a target within the optic range
_newTarget = objNull;
@ -52,10 +52,16 @@ if ((velocity ACE_player) distance [0,0,0] > 0.5 && {cameraView == "GUNNER"} &&
// Refresh the firemode
[] call FUNC(showFireMode);
// bail on not loaded
if (ACE_player ammo (currentWeapon ACE_player) == 0) exitWith { };
_range = parseNumber (ctrlText __JavelinIGUIRangefinder);
TRACE_1("Viewing range", _range);
if (_range > 50 && {_range < 2500}) then {
_pos = positionCameraToWorld [0,0,_range];
_targetArray = _pos nearEntities ["AllVehicles", _range/25];
TRACE_1("Searching at range", _targetArray);
if (count (_targetArray) > 0) then {
_newTarget = _targetArray select 0;
};
@ -77,13 +83,35 @@ _offsetY = __OffsetY;
__JavelinIGUITargeting ctrlShow true;
__JavelinIGUITargetingConstrains ctrlShow true;
_zamerny = if (_currentTarget isKindOf "CAManBase") then {_currentTarget selectionPosition "body"} else {_currentTarget selectionPosition "zamerny"};
_randomPosWithinBounds = [(_zamerny select 0) + 1 - (random 2.0),(_zamerny select 1) + 1 - (random 2.0),(_zamerny select 2) + 0.5 - (random 1.0)];
_apos = worldToScreen (_currentTarget modelToWorld _randomPosWithinBounds);
_aposX = 0;
_aposY = 0;
if (count _apos < 2) then {
_aposX = 1;
_aposY = 0;
} else {
_aposX = (_apos select 0) + _offsetX;
_aposY = (_apos select 1) + _offsetY;
};
if((call CBA_fnc_getFoV) select 1 > 9) then {
__JavelinIGUINFOV ctrlSetTextColor __ColorGreen;
__JavelinIGUIWFOV ctrlSetTextColor __ColorGray;
} else {
__JavelinIGUINFOV ctrlSetTextColor __ColorGray;
__JavelinIGUIWFOV ctrlSetTextColor __ColorGreen;
};
if (isNull _newTarget) then {
// No targets found
_currentTarget = objNull;
_lockTime = 0;
__JavelinIGUISeek ctrlSetTextColor __ColorGray;
__JavelinIGUINFOV ctrlSetTextColor __ColorGreen;
__JavelinIGUITargeting ctrlShow false;
__JavelinIGUITargetingGate ctrlShow false;
__JavelinIGUITargetingLines ctrlShow false;
@ -92,7 +120,8 @@ if (isNull _newTarget) then {
ACE_player setVariable ["ace_missileguidance_target",nil, false];
// Disallow fire
//if (ACE_player ammo "Javelin" > 0 || {ACE_player ammo "ACE_Javelin_Direct" > 0}) then {ACE_player setWeaponReloadingTime //[player, "Javelin", 0.2];};
if (ACE_player ammo (currentWeapon ACE_player) > 0) then { ACE_player setWeaponReloadingTime [player, (currentWeapon ACE_player), 0.2]; };
} else {
if (_newTarget distance ACE_player < 2500
&& {(call CBA_fnc_getFoV) select 1 > 9}
@ -107,36 +136,20 @@ if (isNull _newTarget) then {
playSound "ACE_Javelin_Locking";
} else {
if(diag_tickTime - _lockTime > __LOCKONTIME) then {
if(diag_tickTime - _lockTime > __LOCKONTIME + _randomLockInterval) then {
TRACE_2("LOCKED!", _currentTarget, _lockTime);
__JavelinIGUISeek ctrlSetTextColor __ColorGreen;
__JavelinIGUINFOV ctrlSetTextColor __ColorNull;
__JavelinIGUITargeting ctrlShow true;
__JavelinIGUITargetingConstrains ctrlShow false;
__JavelinIGUITargetingGate ctrlShow true;
__JavelinIGUITargetingLines ctrlShow true;
_zamerny = if (_currentTarget isKindOf "CAManBase") then {_currentTarget selectionPosition "body"} else {_currentTarget selectionPosition "zamerny"};
_randomPosWithinBounds = [(_zamerny select 0) + 1 - (random 2.0),(_zamerny select 1) + 1 - (random 2.0),(_zamerny select 2) + 0.5 - (random 1.0)];
_apos = worldToScreen (_currentTarget modelToWorld _randomPosWithinBounds);
_aposX = 0;
_aposY = 0;
if (count _apos < 2) then {
_aposX = 1;
_aposY = 0;
} else {
_aposX = (_apos select 0) + _offsetX;
_aposY = (_apos select 1) + _offsetY;
};
// Move target marker to coords.
__JavelinIGUITargetingLineV ctrlSetPosition [_aposX,ctrlPosition __JavelinIGUITargetingLineV select 1];
__JavelinIGUITargetingLineH ctrlSetPosition [ctrlPosition __JavelinIGUITargetingLineH select 0,_aposY];
{_x ctrlCommit __TRACKINTERVAL} forEach [__JavelinIGUITargetingLineH,__JavelinIGUITargetingLineV];
//__JavelinIGUITargetingLineV ctrlSetPosition [_aposX,ctrlPosition __JavelinIGUITargetingLineV select 1];
//__JavelinIGUITargetingLineH ctrlSetPosition [ctrlPosition __JavelinIGUITargetingLineH select 0,_aposY];
//{_x ctrlCommit __TRACKINTERVAL} forEach [__JavelinIGUITargetingLineH,__JavelinIGUITargetingLineV];
_boundsInput = if (_currentTarget isKindOf "CAManBase") then {
[_currentTarget,[-1,-1,-2],_currentTarget selectionPosition "body"];
@ -162,6 +175,9 @@ if (isNull _newTarget) then {
ACE_player setVariable["ace_missileguidance_target", _currentTarget, false];
// Allow fire
ACE_player setWeaponReloadingTime [player, (currentWeapon ACE_player), 0];
if(diag_tickTime > _soundTime) then {
playSound "ACE_Javelin_Locked";
_soundTime = diag_tickTime + 0.25;
@ -169,6 +185,7 @@ if (isNull _newTarget) then {
} else {
__JavelinIGUITargeting ctrlShow true;
__JavelinIGUITargetingGate ctrlShow true;
__JavelinIGUITargetingConstrains ctrlShow true;
__JavelinIGUITargetingLines ctrlShow false;
ACE_player setVariable["ace_missileguidance_target", nil, false];
@ -186,6 +203,8 @@ if (isNull _newTarget) then {
_maxX = ((_bpos select 2) + _offsetX) min (_constraintRight - 0.025*(3/4)*SafezoneH);
_maxY = ((_bpos select 3) + _offsetY) min (_constraintBottom - 0.025*SafezoneH);
TRACE_4("", _boundsInput, _bpos, _minX, _minY);
__JavelinIGUITargetingGateTL ctrlSetPosition [_minX,_minY];
__JavelinIGUITargetingGateTR ctrlSetPosition [_maxX,_minY];
__JavelinIGUITargetingGateBL ctrlSetPosition [_minX,_maxY];
@ -197,22 +216,26 @@ if (isNull _newTarget) then {
playSound "ACE_Javelin_Locking";
_soundTime = diag_tickTime + 0.25;
};
// Disallow fire
if (ACE_player ammo (currentWeapon ACE_player) > 0) then { ACE_player setWeaponReloadingTime [player, (currentWeapon ACE_player), 0.2]; };
};
};
} else {
// Something is wrong with our seek
// No targets found
_currentTarget = objNull;
ACE_player setVariable["ace_missileguidance_target", nil, false];
_lockTime = 0;
__JavelinIGUISeek ctrlSetTextColor __ColorGray;
__JavelinIGUINFOV ctrlSetTextColor __ColorGray;
__JavelinIGUITargeting ctrlShow false;
__JavelinIGUITargetingGate ctrlShow false;
__JavelinIGUITargetingLines ctrlShow false;
__JavelinIGUITargetingConstraints ctrlShow false;
ACE_player setVariable ["ace_missileguidance_target",nil, false];
};
// Disallow fire
if (ACE_player ammo (currentWeapon ACE_player) > 0) then { ACE_player setWeaponReloadingTime [player, (currentWeapon ACE_player), 0.2]; };
};
};
//TRACE_2("", _newTarget, _currentTarget);

View File

@ -2,6 +2,8 @@
#include "script_component.hpp"
TRACE_1("enter", _this);
#define __LOCKONTIMERANDOM 2 // Deviation in lock on time
if((count _this) > 0) then {
uiNameSpace setVariable ['ACE_RscOptics_javelin',_this select 0];
};
@ -22,10 +24,13 @@ uiNameSpace setVariable [QGVAR(arguments),
objNull, // currentTargetObject
0, // Run Time
0, // Lock Time
0 // Sound timer
0, // Sound timer
(random __LOCKONTIMERANDOM) // random lock time addition
]
];
_pfh_handle = uiNamespace getVariable ["ACE_RscOptics_javelin_PFH", nil];
if(isNil "_pfh_handle") then {
_pfh_handle = [FUNC(onOpticDraw), 0, []] call CBA_fnc_addPerFrameHandler;

View File

@ -24,7 +24,9 @@
#define __JavelinIGUISeek (__JavelinIGUI displayCtrl 699000)
#define __JavelinIGUITop (__JavelinIGUI displayCtrl 699001)
#define __JavelinIGUIDir (__JavelinIGUI displayCtrl 699002)
#define __JavelinIGUINFOV (__JavelinIGUI displayCtrl 699003)
#define __JavelinIGUINFOV (__JavelinIGUI displayCtrl 1003)
#define __JavelinIGUIWFOV (__JavelinIGUI displayCtrl 1004)
#define __JavelinIGUIRangefinder (__JavelinIGUI displayCtrl 151)
// Constrains
#define __JavelinIGUITargetingConstrains (__JavelinIGUI displayCtrl 699100)

View File

@ -4,8 +4,10 @@
*
* Arguments:
* 0: Position of seeker (ASL) <position>
* 1: Seeker wavelength sensitivity range, [1550,1550] is common eye safe. <array>
* 2: Seeker laser code. <number>
* 1: Direction vector (will be normalized) <vector>
* 2: Seeker FOV in degrees <number>
* 3: Seeker wavelength sensitivity range, [1550,1550] is common eye safe. <array>
* 4: Seeker laser code. <number>
*
* Return value:
* Array, [Strongest compatible laser spot ASL pos, owner object] Nil array values if nothing found.
@ -18,8 +20,13 @@ private ["_pos", "_seekerWavelengths", "_seekerCode", "_spots", "_buckets", "_ex
"_testPos", "_finalBuckets", "_largest", "_largestIndex", "_finalBucket", "_owners", "_avgX", "_avgY", "_avgZ", "_count", "_maxOwner", "_maxOwnerIndex", "_finalOwner"];
_pos = _this select 0;
_seekerWavelengths = _this select 1;
_seekerCode = _this select 2;
_dir = vectorNormalized (_this select 1);
_seekerFov = _this select 2;
_seekerWavelengths = _this select 3;
_seekerCode = _this select 4;
_seekerCos = cos _seekerFov;
_spots = [];
_buckets = [];
@ -58,7 +65,12 @@ _finalOwner = nil;
_laserDir = _laser select 1;
_res = [_laserPos, _laserDir, _divergence] call FUNC(shootCone);
{
_spots pushBack [_x select 0, _owner];
_testPoint = _x select 0;
_testPointVector = vectorNormalized (_testPoint vectorDiff _pos);
_testDotProduct = _dir vectorDotProduct _testPointVector;
if(_testDotProduct > _seekerCos) then {
_spots pushBack [_testPoint, _owner];
};
} forEach (_res select 2);
};
} forEach (GVAR(laserEmitters) select 1);

View File

@ -22,4 +22,9 @@ if( (count _this) > 2) then {
GVAR(active) = false;
if(!isNil QGVAR(selfDesignateHandle)) then {
[GVAR(selfDesignateHandle)] call CBA_fnc_removePerFrameHandler;
GVAR(selfDesignateHandle) = nil;
};
true

View File

@ -83,7 +83,7 @@ if(!GVAR(active)) then {
// @TODO: Nou gets to field all tickets about missing lasers.
//_localLaserTarget = "LaserTargetW" createVehicleLocal (getpos ACE_player);
_handle = [FUNC(laserHudDesignatePFH), 0.1, [ACE_player, _laserUuid, nil]] call cba_fnc_addPerFrameHandler;
GVAR(selfDesignateHandle) = [FUNC(laserHudDesignatePFH), 0.1, [ACE_player, _laserUuid, nil]] call cba_fnc_addPerFrameHandler;
} else {
[] call FUNC(laserHudDesignateOff);
[] call FUNC(laserHudDesignateOn);

View File

@ -2,7 +2,7 @@ class CfgVehicles {
class NATO_Box_Base;
class Box_NATO_Support_F: NATO_Box_Base {
class TransportItems {
MACRO_ADDITEM(ACE_acc_pointer_red,4);
MACRO_ADDITEM(ACE_acc_pointer_green,4);
};
};
@ -23,13 +23,12 @@ class CfgVehicles {
class FIA_Box_Base_F;
class Box_FIA_Support_F: FIA_Box_Base_F {
class TransportItems {
MACRO_ADDITEM(ACE_acc_pointer_red,4);
MACRO_ADDITEM(ACE_acc_pointer_green,4);
};
};
class ACE_Box_Misc: Box_NATO_Support_F {
class TransportItems {
MACRO_ADDITEM(ACE_acc_pointer_red,4);
MACRO_ADDITEM(ACE_acc_pointer_green,4);
};
};

View File

@ -1,17 +1,28 @@
class SlotInfo;
class PointerSlot: SlotInfo {
compatibleItems[] += {"ACE_acc_pointer_red","ACE_acc_pointer_green"};
compatibleItems[] += {"ACE_acc_pointer_red","ACE_acc_pointer_green_IR","ACE_acc_pointer_green"};
};
class CfgWeapons {
class ItemCore;
class InventoryFlashLightItem_Base_F;
class acc_pointer_IR: ItemCore {
ACE_nextModeClass = "ACE_acc_pointer_red";
ACE_modeDescription = "$STR_ACE_Laserpointer_IRLaser";
displayName = "$STR_ACE_Laserpointer_red";
descriptionUse = "$STR_ACE_Laserpointer_useLaser";
};
class ACE_acc_pointer_red: ItemCore {
ACE_nextModeClass = "acc_pointer_IR";
ACE_modeDescription = "$STR_ACE_Laserpointer_Laser";
author = "$STR_ACE_Common_ACETeam";
_generalMacro = "ACE_acc_pointer_red";
scope = 2;
scope = 1;
displayName = "$STR_ACE_Laserpointer_red";
descriptionUse = "$STR_ACE_Laserpointer_useLaser";
picture = "\A3\weapons_F\Data\UI\gear_accv_pointer_CA.paa";
@ -54,9 +65,23 @@ class CfgWeapons {
inertia = 0.1;
};
class ACE_acc_pointer_green: ACE_acc_pointer_red {
class ACE_acc_pointer_green_IR: acc_pointer_IR {
ACE_nextModeClass = "ACE_acc_pointer_green";
ACE_modeDescription = "$STR_ACE_Laserpointer_IRLaser";
author = "$STR_ACE_Common_ACETeam";
_generalMacro = "ACE_acc_pointer_green";
scope = 1;
displayName = "$STR_ACE_Laserpointer_green";
};
class ACE_acc_pointer_green: ACE_acc_pointer_red {
ACE_nextModeClass = "ACE_acc_pointer_green_IR";
ACE_modeDescription = "$STR_ACE_Laserpointer_Laser";
author = "$STR_ACE_Common_ACETeam";
_generalMacro = "ACE_acc_pointer_green";
scope = 2;
displayName = "$STR_ACE_Laserpointer_green";
};
};

View File

@ -11,11 +11,16 @@ GVAR(nearUnits) = [];
// @todo. Maybe move to common?
[{
private "_nearUnits";
_nearUnits = nearestObjects [positionCameraToWorld [0,0,0], ["CAManBase"], 50];
_nearUnits = [];
if (count _nearUnits > 10) then {
_nearUnits resize 10;
};
{
_nearUnits append crew _x;
if (count _nearUnits > 10) exitWith {
_nearUnits resize 10;
};
} forEach nearestObjects [positionCameraToWorld [0,0,0], ["AllVehicles"], 50]; // when moving this, search also for units inside vehicles. currently breaks the laser in FFV
GVAR(nearUnits) = _nearUnits;
@ -24,3 +29,5 @@ GVAR(nearUnits) = [];
addMissionEventHandler ["Draw3D", {
call FUNC(onDraw);
}];
#include "initKeybinds.sqf"

View File

@ -4,5 +4,6 @@ ADDON = false;
PREP(drawLaserpoint);
PREP(onDraw);
PREP(switchLaserLightMode);
ADDON = true;

View File

@ -3,7 +3,7 @@
class CfgPatches {
class ADDON {
units[] = {};
weapons[] = {"ACE_acc_pointer_red","ACE_acc_pointer_green"};
weapons[] = {"ACE_acc_pointer_red","ACE_acc_pointer_green","ACE_acc_pointer_green_IR"};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_common"};
author[] = {"commy2"};

View File

@ -1,6 +1,19 @@
// by commy2 and esteldunedain
#include "script_component.hpp"
// init object
/*if (isNil QGVAR(laserdot)) then {
_light = "#lightpoint" createVehicleLocal [0,0,0];
_light setLightBrightness 10;
_light setLightColor [1,0,0];
_light setLightAmbient [1,0,0];
_light setLightDayLight true;
//_light lightAttachObject [GVAR(laserdot), [0,0,0]];
_light setLightAttenuation [0.04,4,4,0,0.04,0.08];
GVAR(laserdot) = _light;
};*/
EXPLODE_3_PVT(_this,_unit,_range,_isGreen);
_p0Pos = _unit modelToWorldVisual (_unit selectionPosition "righthand");
@ -97,13 +110,15 @@ if (!surfaceIsWater _pL) then {
_pL = ASLtoATL _pL;
};
/*
drawLine3D [
_p0Pos,
_pL,
[[1,0,0,1], [0,1,0,1]] select _isGreen
];
*/
_size = 2 * (_range - (positionCameraToWorld [0,0,0] distance _pL)) / _range;
_size = 2 * (_range - (positionCameraToWorld [0,0,0] vectorDistance _pL)) / _range;
_camPos = positionCameraToWorld [0,0,0.2];
if (count ([_unit, "FIRE"] intersect [_camPos, _pL]) > 0) exitWith {};
@ -114,6 +129,8 @@ if (!surfaceIsWater _camPos) then { _camPos = ATLtoASL _camPos; };
if ( terrainIntersectASL [_camPos, _pL2]) exitWith {};
if ( lineIntersects [_camPos, _pL2]) exitWith {};
//GVAR(laserdot) setPos _pL;
drawIcon3D [
format ["\a3\weapons_f\acc\data\collimdot_%1_ca.paa", ["red", "green"] select _isGreen],
[[1,0.25,0.25,0.5*_brightness], [0.25,1,0.25,0.5*_brightness]] select _isGreen,

View File

@ -28,7 +28,7 @@ _isIR = _isIR == 1;
_laserID = ["ACE_acc_pointer_red", "ACE_acc_pointer_green"] find _laser;
if (_laserID > -1 && {_x isFlashlightOn _weapon}) then {
[_x, 30, _laserID == 1 || _isIR] call FUNC(drawLaserpoint);
[_x, 50, _laserID == 1 || _isIR] call FUNC(drawLaserpoint);
};
} forEach GVAR(nearUnits);

View File

@ -0,0 +1,58 @@
// by commy2
#include "script_component.hpp"
private ["_unit", "_weapon"];
_unit = _this select 0;
_weapon = _this select 1;
// 1 = primary, 2 = secondary, 3 = handgun
private "_currentWeaponType";
_currentWeaponType = 0;
private "_pointer";
_pointer = switch (_weapon) do {
case (primaryWeapon _unit): {
_currentWeaponType = 1;
primaryWeaponItems _unit select 1
};
case (secondaryWeapon _unit): {
_currentWeaponType = 2;
secondaryWeaponItems _unit select 1
};
case (handgunWeapon _unit): {
_currentWeaponType = 3;
handgunItems _unit select 1
};
default {""};
};
if (_pointer == "") exitWith {};
private "_nextPointer";
_nextPointer = getText (configFile >> "CfgWeapons" >> _pointer >> "ACE_nextModeClass");
if (_nextPointer == "") exitWith {};
private ["_description", "_picture"];
_description = getText (configFile >> "CfgWeapons" >> _nextPointer >> "ACE_modeDescription");
_picture = getText (configFile >> "CfgWeapons" >> _nextPointer >> "picture");
switch (_currentWeaponType) do {
case 1: {
_unit removePrimaryWeaponItem _pointer;
_unit addPrimaryWeaponItem _nextPointer;
};
case 2: {
_unit removeSecondaryWeaponItem _pointer;
_unit addSecondaryWeaponItem _nextPointer;
};
case 3: {
_unit removeHandgunItem _pointer;
_unit addHandgunItem _nextPointer;
};
};
[_description, _picture] call EFUNC(common,displayTextPicture);
playSound "ACE_Sound_Click";

View File

@ -0,0 +1,13 @@
// by commy2
["ACE3", QGVAR(switchLaserLightMode), localize "STR_ACE_Laserpointer_switchLaserLight",
{
// Conditions: canInteract
if !([ACE_player, objNull, ["isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false};
// Conditions: specific
if !([ACE_player] call EFUNC(common,canUseWeapon)) exitWith {false};
[ACE_player, currentWeapon ACE_player] call FUNC(switchLaserLightMode);
true
},
{false}, [38, [false, true, false]], false] call CBA_fnc_addKeybind;

View File

@ -36,5 +36,17 @@
<Russian>&lt;t color='#9cf953'&gt;Использовать: &lt;/t&gt;вкл/выкл лазер</Russian>
<Spanish>&lt;t color='#9cf953'&gt;Usar: &lt;/t&gt;encender/apagar láser</Spanish>
</Key>
<Key ID="STR_ACE_Laserpointer_Laser">
<English>Laser</English>
<German>Laser</German>
</Key>
<Key ID="STR_ACE_Laserpointer_IRLaser">
<English>IR Laser</English>
<German>IR-Laser</German>
</Key>
<Key ID="STR_ACE_Laserpointer_switchLaserLight">
<English>Switch Laser / IR Laser</English>
<German>Umschalten Laser / IR-Laser</German>
</Key>
</Package>
</Project>

View File

@ -1,35 +0,0 @@
#include "script_dialog_defines.hpp"
class ACE_ABOUT_DLG {
idd = 114137;
movingEnable = 0;
onLoad = "with uiNameSpace do { ACE_ABOUT_DLG = _this select 0; };";
onKeyDown = "if((_this select 1) == 1) then {ACE_ABOUT_STP = true;};";
class controlsBackground {
class Contents : RscStructuredText {
idc = 1141371;
colorBackground[] = { 0, 0, 0, 0 };
__SX(0.45);
__SY(0.25);
__SW(0.45);
__SH(0.6);
size = "0.025 * SafeZoneH";
class Attributes {
font = "TahomaB";
color = "#C8C8C8";
align = "left";
valign = "middle";
shadow = true;
shadowColor = "#191970";
size = "1";
};
};
class ACE_ABOUT_NEXT : ACE_ABOUT_CTRL { //dummy visible
idc = 1141372;
__SX(0.065);
__SW(0.03);
text = "";
action = "";
};
}; //controlsBackground
};

View File

@ -1,210 +0,0 @@
#include "script_component.hpp"
#include "\z\ace\addons\main\script_common.hpp"
if (!isNil "ACE_ABOUT_RUN") exitWith {ACE_ABOUT_RUN = false;};
ACE_ABOUT_RUN = true;
disableSerialization;
PARAMS_2(_menu,_data);
private ["_pcredits", "_pkeynam", "_shift", "_ctrl", "_alt", "_keys", "_key", "_keystrg", "_mod", "_knaml", "_knam", "_k", "_pkeys", "_pary", "_tpages", "_cEvents", "_i", "_cSys", "_tSys", "_aSys", "_tS", "_j", "_c", "_tC", "_keyn", "_fadet", "_page1", "_color", "_bcolor", "_newpages", "_pstart", "_pcount", "_pnext", "_display", "_control", "_pnames", "_pnam", "_page", "_pages", "_run", "_disp", "_next", "_input", "_nesc", "_unset", "_p", "_text", "_curPage", "_time", "_faded"];
_pcredits = [
"",
"<t align='center' color='#CC1100'>Advanced Combat Environment 2</t>",
"<t align='center' color='#566D7E'>http://dev-heaven.net/projects/ace-mod2</t>",
"",
__cr_managers,
"",
__cr_devs,
"",
__cr_testers,
"",
"For a full list of acknowledgements, please visit our Wiki:",
"<t color='#566D7E'>http://ace.dev-heaven.net</t>"
];
_pkeynam = { //local function
_shift = if (_shift > 0) then {42} else {0};
_ctrl = if (_ctrl > 0) then {56} else {0};
_alt = if (_alt > 0) then {29} else {0};
_keys = [_shift,_ctrl,_alt,_key];
_keystrg = "^";
{
_mod = _x in [42,56,29];
_knaml = call compile format["format['%2',%1]",(keyName _x),"%1"];
_knaml = [_knaml, " "] call CBA_fnc_split;
_knam = "^";
{_k = _x; if (!_mod || (_k != (localize "STR_ACE_KN_LEFT") && _k != (localize "STR_ACE_KN_RIGHT"))) then {_knam = _knam + " " + _k}} forEach _knaml;
_knam = [_knam, "^ ", ""] call CBA_fnc_replace;
_keystrg = _keystrg + "-" + _knam;
} forEach _keys;
_keystrg = [_keystrg, "^ ", ""] call CBA_fnc_replace;
_keystrg = [_keystrg, "^-", ""] call CBA_fnc_replace;
_keystrg = [_keystrg, "^", "None"] call CBA_fnc_replace;
_keystrg
};
_pkeys = {
_pary = [];
_tpages = [];
_cEvents = configFile/"CfgSettings"/"CBA"/"events";
for "_i" from 0 to (count _cEvents) - 1 do {
_cSys = _cEvents select _i;
_tSys = configName _cSys;
if (isNumber ((_cSys select 0)/"key")) then {
//format system name
_aSys = [_tSys, "_"] call CBA_fnc_split;
_tS = "^";
{if (_x != "ace" && _x != "sys") then {_tS = _tS + " " + _x}} forEach _aSys;
_tS = [_tS, "^ ", ""] call CBA_fnc_replace;
_tS = format["<t color='#99cccc'>%1:</t>",_tS];
PUSH(_pary,_tS);
for "_j" from 0 to (count _cSys) - 1 do {
_c = _cSys select _j;
_tC = configName _c;
_tC = [_tC, "_", " "] call CBA_fnc_replace;
//key
_key = getNumber (_c/"key");
_shift = getNumber (_c/"shift");
_ctrl = getNumber (_c/"ctrl");
_alt = getNumber (_c/"alt");
_keyn = [_key,_shift,_ctrl,_alt] call _pkeynam;
_tC = format[" %1: %2",_tC,_keyn];
PUSH(_pary,_tC);
};
};
if (count _pary > 20) then { //split full page
PUSH(_tpages,_pary);
_pary = [];
};
};
if (count _pary > 0) then { //partial page
PUSH(_tpages,_pary);
_pary = [];
};
_tpages
};
//pages (make sure each will fit within 24 lines, word wrap is on)
switch(_menu) do {
case "MAIN": { //note: not all scripting commands available on main menu (not compiled yet?)
_fadet = 13;
_page1 = _pcredits;
};
case "SING": {
_fadet = 20; //fade time
_color = [1,1,1,1];
//_bcolor = [0,0,0,0.3];
_page1 = _pcredits;
_newpages = [] call _pkeys;
_pstart = 2;
_pcount = count _newpages;
_pnext = _pstart + _pcount;
};
case "MULT": {
_fadet = 20;
_color = [1,1,1,1];
//_bcolor = [0,0,0,0.3];
_page1 = _pcredits;
_newpages = [] call _pkeys;
_pstart = 2;
_pcount = count _newpages;
_pnext = _pstart + _pcount;
};
default {};
};
//main menu display
if (typeName(_data select 0) == "DISPLAY") then {
_display = _data select 0;
};
if (typeName(_data select 0) == "CONTROL") then {
_control = _data select 0;
_display = ctrlParent _control;
};
//dynamic pages
_pnames = [];
for "_x" from _pstart to _pnext - 1 do {
_pnam = format ["_page%1",_x];
PUSH(_pnames,_pnam);
};
private _pnames;
for "_x" from 0 to _pcount - 1 do {
call compile format ["%1 = %2", _pnames select _x, _newpages select _x];
};
//get num pages
_pages = 0;
_run = true;
while {_run} do {
INC(_pages);
if (isNil format ["_page%1", _pages]) exitWith {_pages = _pages - 1; _run = false};
};
if (_pages > 0) then {
//Dialog
createDialog "ACE_ABOUT_DLG";
_disp = uiNamespace getVariable "ACE_ABOUT_DLG";
_ctrl = _disp displayCtrl 1141371;
_next = _disp displayCtrl 1141372;
if (_pages > 1) then {_next ctrlSetText "Next"};
_ctrl ctrlSetFade 1;
_ctrl ctrlCommit 0;
_ctrl ctrlSetFade 0;
_ctrl ctrlCommit 3;
ACE_ABOUT_INC = 0;
_input = { //local function
_nesc = isNil "ACE_ABOUT_STP";
if (_pages == 1) then {ACE_ABOUT_INC = 0}; //ignore special control
_unset = (ACE_ABOUT_INC == 0) && ACE_ABOUT_RUN;
if (_unset && _nesc) then {false} else {_fadet = _fadet + 5; true};
};
//by default cycle
for "_p" from 1 to _pages do {
_text = "";
_page = call compile format["_page%1",_p];
_curPage = _p;
{
_text = _text + _x + "<br />";
_ctrl ctrlSetStructuredText parseText _text;
if (call _input) exitWith {_p = _pages};
if (_x != "") then {uisleep 0.8};
} forEach _page;
};
_run = true;
while {if (isNil "ACE_ABOUT_STP") then {_run} else {false}} do {
_ctrl ctrlSetFade 0;
_ctrl ctrlCommit 0;
if (!isNil "_color") then {_ctrl ctrlSetTextColor _color};
if (!isNil "_bcolor") then {_ctrl ctrlSetBackgroundColor _bcolor};
_curPage = _curPage + ACE_ABOUT_INC;
if (_curPage > _pages) then {_curPage = 1};
if (_curPage <= 0) then {_curPage = 1};
ACE_ABOUT_INC = 0;
if (!ACE_ABOUT_RUN) then {ACE_ABOUT_RUN = true};
_text = "";
_page = call compile format ["_page%1",_curPage];
{_text = _text + _x + "<br />"} forEach _page;
_ctrl ctrlSetStructuredText parseText _text;
_ctrl ctrlSetFade 1;
_ctrl ctrlCommit _fadet;
_time = time + _fadet + 2;
waitUntil{uisleep 1; _run = call _input; _faded = time > _time; (_run || _faded)};
}; //while RUN
};
ACE_ABOUT_STP = Nil;
ACE_ABOUT_RUN = Nil;
closeDialog 0;

View File

@ -1,92 +0,0 @@
License (short)
===============
You are free:
- to Share — to copy, distribute and transmit the work
Under the following conditions:
- Attribution — You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work).
- Noncommercial — You may not use this work for commercial purposes.
- No Derivative Works — You may not alter, transform, or build upon this work.
With the understanding that:
Waiver — Any of the above conditions can be waived if you get permission from the copyright holder.
Public Domain — Where the work or any of its elements is in the public domain under applicable law, that status is in no way affected by the license.
Other Rights — In no way are any of the following rights affected by the license:
- Your fair dealing or fair use rights, or other applicable copyright exceptions and limitations;
- The author's moral rights;
- Rights other persons may have either in the work itself or in how the work is used, such as publicity or privacy rights.
Notice — For any reuse or distribution, you must make clear to others the license terms of this work. The best way to do this is with a link to this web page.
Full license text
=================
THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
1. Definitions
"Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License.
"Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License.
"Distribute" means to make available to the public the original and copies of the Work through sale or other transfer of ownership.
"Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License.
"Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast.
"Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work.
"You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
"Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.
"Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium.
2. Fair Dealing Rights.
Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws.
3. License Grant.
Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:
to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; and, to Distribute and Publicly Perform the Work including as incorporated in Collections.
The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats, but otherwise you have no rights to make Adaptations. Subject to 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights set forth in Section 4(d).
4. Restrictions.
The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:
You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested.
You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in connection with the exchange of copyrighted works.
If You Distribute, or Publicly Perform the Work or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work. The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Collection, at a minimum such credit will appear, if a credit for all contributing authors of Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties.
For the avoidance of doubt:
Non-waivable Compulsory License Schemes.
In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;
Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and,
Voluntary License Schemes. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b).
Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation.
5. Representations, Warranties and Disclaimer.
UNLESS OTHERWISE MUTUALLY AGREED BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
7. Termination.
This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work).
Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.
8. Miscellaneous.
Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.
If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.
The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law.

View File

@ -1,92 +0,0 @@
License (short)
===============
You are free:
- to Share — to copy, distribute and transmit the work
Under the following conditions:
- Attribution — You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work).
- Noncommercial — You may not use this work for commercial purposes.
- No Derivative Works — You may not alter, transform, or build upon this work.
With the understanding that:
Waiver — Any of the above conditions can be waived if you get permission from the copyright holder.
Public Domain — Where the work or any of its elements is in the public domain under applicable law, that status is in no way affected by the license.
Other Rights — In no way are any of the following rights affected by the license:
- Your fair dealing or fair use rights, or other applicable copyright exceptions and limitations;
- The author's moral rights;
- Rights other persons may have either in the work itself or in how the work is used, such as publicity or privacy rights.
Notice — For any reuse or distribution, you must make clear to others the license terms of this work. The best way to do this is with a link to this web page.
Full license text
=================
THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
1. Definitions
"Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License.
"Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License.
"Distribute" means to make available to the public the original and copies of the Work through sale or other transfer of ownership.
"Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License.
"Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast.
"Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work.
"You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
"Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.
"Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium.
2. Fair Dealing Rights.
Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws.
3. License Grant.
Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:
to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; and, to Distribute and Publicly Perform the Work including as incorporated in Collections.
The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats, but otherwise you have no rights to make Adaptations. Subject to 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights set forth in Section 4(d).
4. Restrictions.
The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:
You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested.
You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in connection with the exchange of copyrighted works.
If You Distribute, or Publicly Perform the Work or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work. The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Collection, at a minimum such credit will appear, if a credit for all contributing authors of Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties.
For the avoidance of doubt:
Non-waivable Compulsory License Schemes.
In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;
Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and,
Voluntary License Schemes. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b).
Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation.
5. Representations, Warranties and Disclaimer.
UNLESS OTHERWISE MUTUALLY AGREED BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
7. Termination.
This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work).
Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.
8. Miscellaneous.
Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.
If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.
The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law.

View File

@ -1,3 +0,0 @@
#define __cr_managers "Manager: "
#define __cr_devs "Developer:"
#define __cr_testers "Contributor: "

View File

@ -1,43 +0,0 @@
#define true 1
#define false 0
#define private 0
#define protected 1
#define public 2
#define TEast 0
#define TWest 1
#define TGuerrila 2
#define TCivilian 3
#define TSideUnknown 4
#define TEnemy 5
#define TFriendly 6
#define TLogic 7
#define VSoft 0
#define VArmor 1
#define VAir 2
#define LockNo 0
#define LockCadet 1
#define LockYes 2
#define ReadAndWrite 0
#define ReadAndCreate 1
#define ReadOnly 2
#define ReadOnlyVerified 3
#define WeaponNoSlot 0 // dummy weapons
#define WeaponSlotPrimary 1 // primary weapons
#define WeaponSlotSecondary 16 // secondary weapons
#define WeaponSlotItem 256 // items
#define WeaponSlotBinocular 4096 // binocular
#define WeaponHardMounted 65536
#define CanSeeRadar 1
#define CanSeeRye 2
#define CanSeeOptics 4
#define CanSeeEar 4
#define CanSeeCompass 16
#define CanSeeRadarC CanSeeRadar+CanSeeCompass
#define CanSeeAll 31

View File

@ -4,171 +4,6 @@
// Default versioning level
#define DEFAULT_VERSIONING_LEVEL 2
// RGB Colors
#define RGB_GREEN 0, 0.5, 0, 1
#define RGB_BLUE 0, 0, 1, 1
#define RGB_ORANGE 0.5, 0.5, 0, 1
#define RGB_RED 1, 0, 0, 1
#define RGB_YELLOW 1, 1, 0, 1
#define RGB_WHITE 1, 1, 1, 1
#define RGB_GRAY 0.5, 0.5, 0.5, 1
#define RGB_BLACK 0, 0, 0, 1
#define RGB_MAROON 0.5, 0, 0, 1
#define RGB_OLIVE 0.5, 0.5, 0, 1
#define RGB_NAVY 0, 0, 0.5, 1
#define RGB_PURPLE 0.5, 0, 0.5, 1
#define RGB_FUCHSIA 1, 0, 1, 1
#define RGB_AQUA 0, 1, 1, 1
#define RGB_TEAL 0, 0.5, 0.5, 1
#define RGB_LIME 0, 1, 0, 1
#define RGB_SILVER 0.75, 0.75, 0.75, 1
#include "script_macros_menudef.hpp"
#define ACE_NOARMORY class Armory { disabled = 1; }
#define ACE_ARMORY class Armory { disabled = 0; }
#define ACE_ACEARMORY class Armory { disabled = 0; author = "A.C.E."; }
// Weapon defaults
// NOTE !!!! - Do not forget to dummy-update the configs that use these defines, or the changes won't activate due to binarization!
#define ACE_DEFAULT_WEAPONS "Throw", "Put"
// Item defaults
// NOTE !!!! - Do not forget to dummy-update the configs that use these defines, or the changes won't activate due to binarization!
#define ACE_ITEMS_TEAMLEADER_B "ItemMap","ItemCompass","ItemWatch","ItemRadio"
#define ACE_ITEMS_SQUADLEADER_B "ItemMap","ItemCompass","ItemWatch","ItemRadio","ACE_DAGR"
#define ACE_ITEMS_SPECIAL "ItemMap","ItemCompass","ItemWatch","ItemRadio"
#define ACE_ITEMS "ItemWatch","ItemRadio"
#define ACE_ITEMS_CIVILIAN "ItemWatch"
#define ACE_DEFAULT_SLOTS "1 + 4 + 12* 256 + 2* 4096 + 2 + 8* 16 + 12*131072"
#define ACE_NOGRIP handAnim[] = {}
#define ACE_DISTANCE_DEFAULT distanceZoomMin = 300; distanceZoomMax = 300
// #include "script_macros_optics.hpp" //ToDo
#define ACE_NOZEROING discreteDistance[] = {}; \
discreteDistanceInitIndex = 0; \
weaponInfoType = "RscWeaponEmpty"
#define ACE_NOTURRETZEROING discreteDistance[] = {}; \
discreteDistanceInitIndex = 0; \
turretInfoType = "RscWeaponEmpty"
#define ACE_LASER irLaserPos = "laser pos"; \
irLaserEnd = "laser dir"; \
irDistance = 300
#define ACE_LASER_DISTANCE_VANILLA irDistance = 300
#define ACE_NOLASER irLaserPos = "laser pos"; \
irLaserEnd = "laser dir"; \
irDistance = 0
#define ACE_SUPPRESSED ace_suppressed = 1; \
fireLightDuration = 0; \
fireLightIntensity = 0
// TODO: Cleanup in all the configs around
#define ACE_M_MAG(x,y) class _xx_##x {magazine = ##x; count = ##y;}
#define ACE_M_WEP(x,y) class _xx_##x {weapon = ##x; count = ##y;}
#define ACE_M_ITEM(x,y) class _xx_##x {name = ##x; count = ##y;}
#define ACE_M_BAG(x,y) class _xx_##x {backpack = ##x; count = ##y;}
// Vehicle defines
// ACE_canBeLoad = This vehicle acts as transporter, i.e you can load stuff into it
// ACE_canBeCargo = This vehicle acts as cargo, i.e you can load this item into other vehicles
#define ACE_CARGO_FRONT ACE_canBeLoad = false; ACE_canBeCargo = true; ACE_canGear = false; ACE_canLoadFront = true
#define ACE_CARGO_ONLY ACE_canBeLoad = false; ACE_canBeCargo = true; ACE_canGear = false; ACE_canLoadFront = false
#define ACE_LOAD_ONLY ACE_canBeLoad = true; ACE_canBeCargo = false; ACE_canGear = false; ACE_canLoadFront = false
#define ACE_GEAR_ONLY ACE_canBeLoad = true; ACE_canBeCargo = false; ACE_canGear = true; ACE_canLoadFront = false
#define ACE_NOCARGOLOAD ACE_canBeLoad = false; ACE_canBeCargo = false; ACE_canGear = false; ACE_canLoadFront = false
// Increased FOV for tank driver
// Increased Default US Tank driver optic
#define ACE_DRIVEROPTIC_TANK_US driverOpticsModel = "\z\ace\addons\m_veh_optics\driver\optika_tank_driver_west.p3d"
// Increased Default RU Tank driver optic
#define ACE_DRIVEROPTIC_TANK_RU driverOpticsModel = "\z\ace\addons\m_veh_optics\driver\optika_tank_driver_east.p3d"
// Increased Default NON Specified driver optic
#define ACE_DRIVEROPTIC_TANK driverOpticsModel = "\z\ace\addons\m_veh_optics\driver\optika_tank_driver.p3d"
// Increased Default EP1 NON Specified driver optic
// Default black border thing needs finish
#define ACE_DRIVEROPTIC_TANK_EP1 driverOpticsModel = "\z\ace\addons\m_veh_optics\driver\optika_tank_driver.p3d"
#define ACE_BWC ace_bwc = 1
// SCRIPTING MACROS
// Items
#define inITEMS(x,y) (##x in (y call ACE_fnc_getGear))
#define remITEMS(x,y) ([##x,y] call ACE_fnc_removeItem)
//#define addITEMS(x,y) (y addItem ##x)
// Interaction/ Put anims
#define canANIM(x) (x call ACE_fnc_CanPutDown)
#define playANIM(x) (if (x call ACE_fnc_CanPutDown) then { x call ACE_fnc_PutDown })
// In vehicle or on foot
#define ONFOOT(x) (x == vehicle x)
#define INVEHICLE(x) (x != vehicle x)
// FX
#define COUGH ace_common_fx_fnc_cough
#define BLURRY ace_common_fx_fnc_blurry
#define BLIND ace_common_fx_fnc_blind_view
#define DEAF ace_common_fx_fnc_deaf
#define DIZZY ace_common_fx_fnc_dizzy
#define FLASH ace_common_fx_fnc_flash
#define KICK ace_common_fx_fnc_kick
#define KNOCKOUT ace_common_fx_fnc_knockout
#define RING ace_common_fx_fnc_ring
// Stamina
#define INC_MASS ace_stamina_fnc_inc_mass
// Does this work, due to BWC_CONFIG(NAME) ?
#undef BWC_CONFIG
#define BWC_CONFIG(NAME) class NAME { \
units[] = {}; \
weapons[] = {}; \
requiredVersion = REQUIRED_VERSION; \
requiredAddons[] = {}; \
version = VERSION; \
ACE_BWC; \
}
#define ACE_FLASHLIGHT class FlashLight { \
color[] = {0.9, 0.9, 0.7, 0.9}; \
ambient[] = {0.1, 0.1, 0.1, 1.0}; \
position = "flash dir"; \
direction = "flash"; \
angle = 30; \
scale[] = {1, 1, 0.5}; \
brightness = 0.1; \
}
#define ACE_SMALL_FLASHLIGHT class FlashLight { \
color[] = {0.9, 0.9, 0.7, 0.9}; \
ambient[] = {0.1, 0.1, 0.1, 1.0}; \
position = "flash dir"; \
direction = "flash"; \
angle = 20; \
scale[] = {0.9, 0.9, 0.4}; \
brightness = 0.09; \
}
// Addaction defines for colored text
#define ACE_TEXT_ORANGE(Text) ("<t color='#ffa500'>" + ##Text + "</t>")
#define ACE_TEXT_RED(Text) ("<t color='#FF0000'>" + ##Text + "</t>")
#define ACE_TEXT_GREEN(Text) ("<t color='#00FF00'>" + ##Text + "</t>")
#define ACE_TEXT_YELLOW(Text) ("<t color='#FFFF00'>" + ##Text + "</t>")
#define EGVAR(module,var) TRIPLES(PREFIX,module,var)
#define QEGVAR(module,var) QUOTE(EGVAR(module,var))

View File

@ -1,27 +0,0 @@
// ACE Self Interaction Conditions
// Self Interaction Menu not available if player is unconscious
#define ACE_INTERACT_ALIVE (alive player)
#define ACE_INTERACT_UNCON (player call ace_wounds_fnc_isUncon)
// Player is Player Vehicle
#define ACE_INTERACT_PLAYER (player == vehicle player || (player != vehicle player && player in assignedCargo vehicle player))
// Player is climbing up a ladder
#define ACE_INTERACT_LADDER (animationState player in ["ladderriflestatic","laddercivilstatic"])
// Possible = Self interaction opens only if player is alive and conscious (can be in a vehicle)
#define ACE_SELFINTERACTION_POSSIBLE (!ACE_INTERACT_LADDER && {ACE_INTERACT_ALIVE} && {!ACE_INTERACT_UNCON})
// Restricted = Self interaction opens only if player is alive and conscious (can NOT be in a vehicle, i.e Groundmarker, explosives ...)
#define ACE_SELFINTERACTION_RESTRICTED (ACE_SELFINTERACTION_POSSIBLE && {ACE_INTERACT_PLAYER})
// Close interaction menu if unconscious
#define ACE_INTERACT_FNC_EXIT if (ACE_INTERACT_UNCON) exitWith {}
#define ACE_ASSEMBLE (getNumber(configFile >> "CfgActions" >> "Assemble" >> "show") == 0)
#define ACE_DISASSEMBLE (getNumber(configFile >> "CfgActions" >> "DisAssemble" >> "show") == 0)
#define ACE_PIPEDEFAULT (getNumber(configFile >> "CfgMagazines" >> "PipeBomb" >> "useAction") == 0)
#define ACE_IDENTITYDEFAULT (isClass(configFile >> "CfgPatches" >> "ace_combatdeaf"))
#define ACE_RUCKDEFAULT (isClass(configFile >> "CfgPatches" >> "ace_stamina"))
#define ACE_KNOWN2PLAYER (if (name _target in (player getVariable ["ace_recognize_knownnames",[]])) then { name _target } else { " " })

View File

@ -15,41 +15,3 @@
// MINIMAL required version for the Mod. Components can specify others..
#define REQUIRED_VERSION 0.5
/*
#define DEBUG_ENABLED_ADDONS
#define DEBUG_ENABLED_ATTACHMENTS
#define DEBUG_ENABLED_weapons_backblast
#define DEBUG_ENABLED_BLOOD
#define DEBUG_ENABLED_CARTRIDGES
#define DEBUG_ENABLED_CRATERS
#define DEBUG_ENABLED_CREWPROTECTION
#define DEBUG_ENABLED_DUMMIES
#define DEBUG_ENABLED_EJECT
#define DEBUG_ENABLED_EXPLOSIVES
#define DEBUG_ENABLED_FLARES
#define DEBUG_ENABLED_FLASHBANG
#define DEBUG_ENABLED_GRENADETHROW
#define DEBUG_ENABLED_HUNTIR
#define DEBUG_ENABLED_INTERACTION
#define DEBUG_ENABLED_IRSTROBE
#define DEBUG_ENABLED_MULTI_BARREL
#define DEBUG_ENABLED_MUZZLEBLAST
#define DEBUG_ENABLED_NVG
#define DEBUG_ENABLED_weapons_overheating
#define DEBUG_ENABLED_RECOILDUST
#define DEBUG_ENABLED_ROCKET_BALLISTICS
#define DEBUG_ENABLED_SANDBAG
#define DEBUG_ENABLED_SHOTGUN
#define DEBUG_ENABLED_SIGHT_ADJUSTMENT_AT
#define DEBUG_ENABLED_SIGHT_ADJUSTMENT_GL
#define DEBUG_ENABLED_SIGHT_ADJUSTMENT_RIFLE
#define DEBUG_ENABLED_SMAW_SPOTTINGRIFLE
#define DEBUG_ENABLED_TRACERS
#define DEBUG_ENABLED_TRACKING
#define DEBUG_ENABLED_VIEWBLOCK
#define DEBUG_ENABLED_VEHICLE
#define DEBUG_ENABLED_vehicle_damage
#define DEBUG_ENABLED_WEAPONREST
#define DEBUG_ENABLED_WOUNDS
*/

View File

@ -7,7 +7,7 @@ class ACE_Head {
icon = PATHTOF(UI\icons\medical_cross.paa);
distance = MEDICAL_ACTION_DISTANCE;
class Bandage {
displayName = "$STR_ACE_Medical_Bandage_HitHead";
displayName = "$STR_ACE_Medical_Bandage";
distance = 2.0;
condition = QUOTE([ARR_4(_player, _target, 'head', 'Bandage')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'head', 'Bandage')] call DFUNC(treatment));
@ -78,7 +78,7 @@ class ACE_Torso {
icon = PATHTOF(UI\icons\medical_cross.paa);
distance = MEDICAL_ACTION_DISTANCE;
class Bandage {
displayName = "$STR_ACE_Medical_Bandage_HitBody";
displayName = "$STR_ACE_Medical_Bandage";
distance = 2.0;
condition = QUOTE([ARR_4(_player, _target, 'body', 'Bandage')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'body', 'Bandage')] call DFUNC(treatment));
@ -178,7 +178,7 @@ class ACE_ArmLeft {
distance = MEDICAL_ACTION_DISTANCE;
class Bandage {
displayName = "$STR_ACE_Medical_Bandage_HitLeftArm";
displayName = "$STR_ACE_Medical_Bandage";
distance = 2.0;
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'Bandage')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'Bandage')] call DFUNC(treatment));
@ -334,7 +334,7 @@ class ACE_ArmRight {
distance = MEDICAL_ACTION_DISTANCE;
class Bandage {
displayName = "$STR_ACE_Medical_Bandage_HitRightArm";
displayName = "$STR_ACE_Medical_Bandage";
distance = 2.0;
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'Bandage')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'Bandage')] call DFUNC(treatment));
@ -487,7 +487,7 @@ class ACE_LegLeft {
distance = MEDICAL_ACTION_DISTANCE;
class Bandage {
displayName = "$STR_ACE_Medical_Bandage_HitLeftLeg";
displayName = "$STR_ACE_Medical_Bandage";
distance = 2.0;
condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'Bandage')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'Bandage')] call DFUNC(treatment));
@ -628,7 +628,7 @@ class ACE_LegRight {
distance = MEDICAL_ACTION_DISTANCE;
class Bandage {
displayName = "$STR_ACE_Medical_Bandage_HitRightLeg";
displayName = "$STR_ACE_Medical_Bandage";
distance = 2.0;
condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'Bandage')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'Bandage')] call DFUNC(treatment));

View File

@ -14,7 +14,7 @@ class Medical {
runOnHover = 1;
class Bandage {
displayName = "$STR_ACE_Medical_Bandage_HitHead";
displayName = "$STR_ACE_Medical_Bandage";
distance = 2.0;
condition = QUOTE([ARR_4(_player, _target, 'head', 'Bandage')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
@ -84,7 +84,7 @@ class Medical {
icon = PATHTOF(UI\icons\medical_cross.paa);
class Bandage {
displayName = "$STR_ACE_Medical_Bandage_HitBody";
displayName = "$STR_ACE_Medical_Bandage";
distance = 2.0;
condition = QUOTE([ARR_4(_player, _target, 'body', 'Bandage')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
@ -149,7 +149,7 @@ class Medical {
icon = PATHTOF(UI\icons\medical_cross.paa);
class Bandage {
displayName = "$STR_ACE_Medical_Bandage_HitLeftArm";
displayName = "$STR_ACE_Medical_Bandage";
distance = 2.0;
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'Bandage')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
@ -249,7 +249,7 @@ class Medical {
icon = PATHTOF(UI\icons\medical_cross.paa);
class Bandage {
displayName = "$STR_ACE_Medical_Bandage_HitRightArm";
displayName = "$STR_ACE_Medical_Bandage";
distance = 2.0;
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'Bandage')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
@ -345,7 +345,7 @@ class Medical {
icon = PATHTOF(UI\icons\medical_cross.paa);
class Bandage {
displayName = "$STR_ACE_Medical_Bandage_HitLeftLeg";
displayName = "$STR_ACE_Medical_Bandage";
distance = 2.0;
condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'Bandage')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
@ -430,7 +430,7 @@ class Medical {
icon = PATHTOF(UI\icons\medical_cross.paa);
class Bandage {
displayName = "$STR_ACE_Medical_Bandage_HitRightLeg";
displayName = "$STR_ACE_Medical_Bandage";
distance = 2.0;
condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'Bandage')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};

View File

@ -55,15 +55,6 @@ class ACE_Medical_Actions {
animationCaller = "AinvPknlMstpSnonWnonDnon_medic1";
litter[] = {};
};
class Tourniquet: Bandage {
displayName = "$STR_ACE_Medical_Apply_Tourniquet";
displayNameProgress = "$STR_ACE_Medical_Applying_Tourniquet";
items[] = {"ACE_tourniquet"};
treatmentTime = 6;
callbackSuccess = QUOTE(DFUNC(treatmentTourniquet));
condition = QUOTE(!([ARR_2(_this select 1, _this select 2)] call FUNC(hasTourniquetAppliedTo)));
litter[] = {};
};
class BodyBag: Bandage {
displayName = "$STR_ACE_MEDICAL_PlaceInBodyBag";
displayNameProgress = "$STR_ACE_MEDICAL_PlacingInBodyBag";
@ -80,6 +71,27 @@ class ACE_Medical_Actions {
itemConsumed = 1;
litter[] = {};
};
class CheckPulse: Bandage {
displayName = "";
displayNameProgress = "";
treatmentLocations[] = {"All"};
requiredMedic = 0;
treatmentTime = 2;
items[] = {};
callbackSuccess = QUOTE(DFUNC(actionCheckPulse));
callbackFailure = "";
callbackProgress = "";
animationPatient = "";
animationCaller = ""; // TODO
itemConsumed = 0;
litter[] = {};
};
class CheckBloodPressure: CheckPulse {
callbackSuccess = QUOTE(DFUNC(actionCheckBloodPressure));
};
class CheckResponse: CheckPulse {
callbackSuccess = QUOTE(DFUNC(actionCheckResponse));
};
};
class Advanced {

View File

@ -117,4 +117,11 @@ class ACE_Settings {
typeName = "BOOL";
value = 1;
};
class GVAR(painEffectType) {
displayName = "$STR_ACE_Medical_painEffectType";
typeName = "SCALAR";
value = 0;
values[] = {"$STR_ACE_Medical_painEffect_Flash", "$STR_ACE_Medical_painEffect_Chroma"};
isClientSettable = 1;
};
};

View File

@ -47,11 +47,3 @@ class Extended_Local_EventHandlers {
};
};
};
class Extended_Take_EventHandlers {
class CAManBase {
class ADDON {
take = QUOTE(call FUNC(itemCheck));
};
};
};

View File

@ -645,7 +645,7 @@ class CfgVehicles {
EGVAR(dragging,dragPosition[]) = {0,1.2,0};
EGVAR(dragging,dragDirection) = 0;
class ACE_Actions {
class ACE_MainActions {
class ACE_MainActions {
displayName = "$STR_ACE_Interaction_MainAction";
distance = 5;
condition = QUOTE(true);
@ -696,10 +696,8 @@ class CfgVehicles {
displayName = $STR_ACE_MEDICAL_BANDAGE_BASIC_DISPLAY;
author = "$STR_ACE_Common_ACETeam";
vehicleClass = "Items";
class TransportItems
{
class ACE_fieldDressing
{
class TransportItems {
class ACE_fieldDressing {
name = "ACE_fieldDressing";
count = 1;
};
@ -711,10 +709,8 @@ class CfgVehicles {
displayName = $STR_ACE_MEDICAL_PACKING_BANDAGE_DISPLAY;
author = "$STR_ACE_Common_ACETeam";
vehicleClass = "Items";
class TransportItems
{
class ACE_packingBandage
{
class TransportItems {
class ACE_packingBandage {
name = "ACE_packingBandage";
count = 1;
};
@ -726,10 +722,8 @@ class CfgVehicles {
displayName = $STR_ACE_MEDICAL_BANDAGE_ELASTIC_DISPLAY;
author = "$STR_ACE_Common_ACETeam";
vehicleClass = "Items";
class TransportItems
{
class ACE_elasticBandage
{
class TransportItems {
class ACE_elasticBandage {
name = "ACE_elasticBandage";
count = 1;
};
@ -741,10 +735,8 @@ class CfgVehicles {
displayName = $STR_ACE_MEDICAL_TOURNIQUET_DISPLAY;
author = "$STR_ACE_Common_ACETeam";
vehicleClass = "Items";
class TransportItems
{
class ACE_tourniquet
{
class TransportItems {
class ACE_tourniquet {
name = "ACE_tourniquet";
count = 1;
};
@ -756,10 +748,8 @@ class CfgVehicles {
displayName = $STR_ACE_MEDICAL_MORPHINE_DISPLAY;
author = "$STR_ACE_Common_ACETeam";
vehicleClass = "Items";
class TransportItems
{
class ACE_morphine
{
class TransportItems {
class ACE_morphine {
name = "ACE_morphine";
count = 1;
};
@ -771,10 +761,8 @@ class CfgVehicles {
displayName = $STR_ACE_MEDICAL_ATROPINE_DISPLAY;
author = "$STR_ACE_Common_ACETeam";
vehicleClass = "Items";
class TransportItems
{
class ACE_atropine
{
class TransportItems {
class ACE_atropine {
name = "ACE_atropine";
count = 1;
};
@ -786,10 +774,8 @@ class CfgVehicles {
displayName = $STR_ACE_MEDICAL_EPINEPHRINE_DISPLAY;
author = "$STR_ACE_Common_ACETeam";
vehicleClass = "Items";
class TransportItems
{
class ACE_epinephrine
{
class TransportItems {
class ACE_epinephrine {
name = "ACE_epinephrine";
count = 1;
};
@ -801,10 +787,8 @@ class CfgVehicles {
displayName = $STR_ACE_MEDICAL_PLASMA_IV;
author = "$STR_ACE_Common_ACETeam";
vehicleClass = "Items";
class TransportItems
{
class ACE_plasmaIV
{
class TransportItems {
class ACE_plasmaIV {
name = "ACE_plasmaIV";
count = 1;
};
@ -817,10 +801,8 @@ class CfgVehicles {
displayName = $STR_ACE_MEDICAL_BLOOD_IV;
author = "$STR_ACE_Common_ACETeam";
vehicleClass = "Items";
class TransportItems
{
class ACE_bloodIV
{
class TransportItems {
class ACE_bloodIV {
name = "ACE_bloodIV";
count = 1;
};
@ -832,10 +814,8 @@ class CfgVehicles {
displayName = $STR_ACE_MEDICAL_SALINE_IV;
author = "$STR_ACE_Common_ACETeam";
vehicleClass = "Items";
class TransportItems
{
class ACE_salineIV
{
class TransportItems {
class ACE_salineIV {
name = "ACE_salineIV";
count = 1;
};
@ -847,10 +827,8 @@ class CfgVehicles {
displayName = $STR_ACE_MEDICAL_QUIKCLOT_DISPLAY;
author = "$STR_ACE_Common_ACETeam";
vehicleClass = "Items";
class TransportItems
{
class ACE_quikClot
{
class TransportItems {
class ACE_quikClot {
name = "ACE_quikclot";
count = 1;
};
@ -862,10 +840,8 @@ class CfgVehicles {
displayName = $STR_ACE_MEDICAL_AID_KIT_DISPLAY;
author = "$STR_ACE_Common_ACETeam";
vehicleClass = "Items";
class TransportItems
{
class ACE_personalAidKit
{
class TransportItems {
class ACE_personalAidKit {
name = "ACE_personalAidKit";
count = 1;
};
@ -877,10 +853,8 @@ class CfgVehicles {
displayName = $STR_ACE_MEDICAL_SURGICALKIT_DISPLAY;
author = "$STR_ACE_Common_ACETeam";
vehicleClass = "Items";
class TransportItems
{
class ACE_surgicalKit
{
class TransportItems {
class ACE_surgicalKit {
name = "ACE_surgicalKit";
count = 1;
};
@ -892,10 +866,8 @@ class CfgVehicles {
displayName = $STR_ACE_MEDICAL_BODYBAG_DISPLAY;
author = "$STR_ACE_Common_ACETeam";
vehicleClass = "Items";
class TransportItems
{
class ACE_bodyBag
{
class TransportItems {
class ACE_bodyBag {
name = "ACE_bodyBag";
count = 1;
};
@ -906,9 +878,42 @@ class CfgVehicles {
class ACE_medicalSupplyCrate: NATO_Box_Base {
scope = 2;
accuracy = 1000;
displayName = "[ACE] Medical Supply Crate";
displayName = "[ACE] Medical Supply Crate (Basic)";
model = PATHTOF(data\ace_medcrate.p3d);
author = "$STR_ACE_Common_ACETeam";
class TransportItems {
class ACE_fieldDressing {
name = "ACE_fieldDressing";
count = 50;
};
class ACE_morphine {
name = "ACE_morphine";
count = 25;
};
class ACE_epinephrine {
name = "ACE_epinephrine";
count = 25;
};
class ACE_bloodIV {
name = "ACE_bloodIV";
count = 15;
};
class ACE_bloodIV_500 {
name = "ACE_bloodIV_500";
count = 15;
};
class ACE_bloodIV_250 {
name = "ACE_bloodIV_250";
count = 15;
};
class ACE_bodyBag {
name = "ACE_bodyBag";
count = 10;
};
};
};
class ACE_medicalSupplyCrate_advanced: ACE_medicalSupplyCrate {
displayName = "[ACE] Medical Supply Crate (Advanced)";
class TransportItems {
class ACE_fieldDressing {
name = "ACE_fieldDressing";

View File

@ -19,7 +19,6 @@ class CfgWeapons {
};
};
// @todo localize
class ACE_ItemCore;
class ACE_fieldDressing: ACE_ItemCore {
scope = 2;

View File

@ -21,14 +21,14 @@ GVAR(heartBeatSounds_Slow) = ["ACE_heartbeat_slow_1", "ACE_heartbeat_slow_2"];
_unit setVariable ["tf_unable_to_use_radio", true, true];
_unit setVariable ["acre_sys_core_isDisabled", true, true];
_unit setVariable ["acre_sys_core_globalVolume", 0.4];
if (!isNil "acre_api_fnc_setGlobalVolume") then { [0.4] call acre_api_fnc_setGlobalVolume; };
} else {
_unit setVariable ["tf_globalVolume", 1];
_unit setVariable ["tf_voiceVolume", 1, true];
_unit setVariable ["tf_unable_to_use_radio", false, true];
_unit setVariable ["acre_sys_core_isDisabled", false, true];
_unit setVariable ["acre_sys_core_globalVolume", 1];
if (!isNil "acre_api_fnc_setGlobalVolume") then { [1] call acre_api_fnc_setGlobalVolume; };
};
};
}] call ace_common_fnc_addEventHandler;
@ -153,11 +153,6 @@ GVAR(effectTimeBlood) = time;
GVAR(lastHeartBeat) = time;
GVAR(lastHeartBeatSound) = time;
// @todo, remove once parameters are set up
if (isNil QGVAR(level)) then {
GVAR(level) = 0;
};
// HEARTRATE BASED EFFECTS
[{
_heartRate = ACE_player getVariable [QGVAR(heartRate), 70];
@ -172,8 +167,7 @@ if (isNil QGVAR(level)) then {
// Pain effect
_strength = ACE_player getVariable [QGVAR(pain), 0];
// _strength = _strength * (ACE_player getVariable [QGVAR(coefPain), GVAR(coefPain)]); @todo
GVAR(alternativePainEffect) = false; // @todo
if (GVAR(alternativePainEffect)) then {
if (GVAR(painEffectType) == 1) then {
GVAR(effectPainCC) ppEffectEnable false;
if ((ACE_player getVariable [QGVAR(pain), 0]) > 0 && {alive ACE_player}) then {
_strength = _strength * 0.15;
@ -198,7 +192,7 @@ if (isNil QGVAR(level)) then {
} else {
GVAR(effectPainCA) ppEffectEnable false;
if ((ACE_player getVariable [QGVAR(pain), 0]) > 0 && {alive ACE_player}) then {
_strength = _strength * 0.6;
_strength = _strength * 0.9;
GVAR(effectPainCC) ppEffectEnable true;
GVAR(effectPainCC) ppEffectAdjust [1,1,0, [1,1,1,1], [0,0,0,0], [1,1,1,1], [1 - _strength,1 - _strength,0,0,0,0.2,2]];
GVAR(effectPainCC) ppEffectCommit 0.01;
@ -266,3 +260,8 @@ if (USE_WOUND_EVENT_SYNC) then {
// Prevent all types of interaction while unconscious
// @todo: probably remove this when CBA keybind hold key works properly
["isNotUnconscious", {!((_this select 0) getVariable ["ACE_isUnconscious", false])}] call EFUNC(common,addCanInteractWithCondition);
// Item Event Handler
["playerInventoryChanged", {
[ACE_player] call FUNC(itemCheck);
}] call EFUNC(common,addEventHandler);

View File

@ -47,8 +47,10 @@ if (_show) then {
_allInjuryTexts = [];
_genericMessages = [];
_partText = ["STR_ACE_Interaction_Head", "STR_ACE_Interaction_Torso", "STR_ACE_Interaction_ArmLeft" ,"STR_ACE_Interaction_ArmRight" ,"STR_ACE_Interaction_LegLeft", "STR_ACE_Interaction_LegRight"] select _selectionN;
_genericMessages pushback [localize _partText, [1, 1, 1, 1]];
if (GVAR(level) >= 2) then {
_partText = ["STR_ACE_Interaction_Head", "STR_ACE_Interaction_Torso", "STR_ACE_Interaction_ArmLeft" ,"STR_ACE_Interaction_ArmRight" ,"STR_ACE_Interaction_LegLeft", "STR_ACE_Interaction_LegRight"] select _selectionN;
_genericMessages pushback [localize _partText, [1, 1, 1, 1]];
};
if (_target getvariable[QGVAR(isBleeding), false]) then {
_genericMessages pushback [localize "STR_ACE_MEDICAL_STATUS_BLEEDING", [1, 0.1, 0.1, 1]];
@ -126,12 +128,22 @@ if (_show) then {
{
_selectionBloodLoss set [_forEachIndex, _target getHitPointDamage _x];
if (_target getHitPointDamage _x > 0.1 && {_forEachIndex == _selectionN}) then {
// @todo localize
_allInjuryTexts pushBack [format ["%1 %2",
["Lightly wounded", "Heavily wounded"] select (_target getHitPointDamage _x > 0.5),
["head", "torso", "left arm", "right arm", "left leg", "right leg"] select _forEachIndex
], [1,1,1,1]];
if (_target getHitPointDamage _x > 0 && {_forEachIndex == _selectionN}) then {
_pointDamage = _target getHitPointDamage _x;
_severity = switch (true) do {
case (_pointDamage > 0.5): {localize "STR_ACE_Medical_HeavilyWounded"};
case (_pointDamage > 0.1): {localize "STR_ACE_Medical_LightlyWounded"};
default {localize "STR_ACE_Medical_VeryLightlyWounded"};
};
_part = localize ([
"STR_ACE_Medical_Head",
"STR_ACE_Medical_Torso",
"STR_ACE_Medical_LeftArm",
"STR_ACE_Medical_RightArm",
"STR_ACE_Medical_LeftLeg",
"STR_ACE_Medical_RightLeg"
] select _forEachIndex);
_allInjuryTexts pushBack [format ["%1 %2", _severity, toLower _part], [1,1,1,1]];
};
} forEach ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"];
};

View File

@ -13,7 +13,7 @@
#include "script_component.hpp"
#define BLOODLOSSRATE_BASIC 0.4
#define BLOODLOSSRATE_BASIC 0.2
private ["_totalBloodLoss","_tourniquets","_openWounds", "_value", "_cardiacOutput", "_internalWounds"];
// TODO Only use this calculation if medium or higher, otherwise use vanilla calculations (for basic medical).

View File

@ -28,9 +28,8 @@ if (_syncValues) then {
};
_bloodVolume = (_unit getvariable [QGVAR(bloodVolume), 0]) + ([_unit] call FUNC(getBloodVolumeChange));
if (_bloodVolume <= 0) then {
_bloodVolume = 0;
};
_bloodVolume = _bloodVolume max 0;
_unit setvariable [QGVAR(bloodVolume), _bloodVolume, _syncValues];
// Set variables for synchronizing information across the net
@ -78,15 +77,11 @@ if (GVAR(level) == 1) then {
// bleeding
_blood = _unit getVariable [QGVAR(bloodVolume), 100];
_blood = (_blood - 0.4 * (damage _unit) * _interval) max 0;
if (_blood != (_unit getVariable [QGVAR(bloodVolume), 100])) then {
_unit setVariable [QGVAR(bloodVolume), _blood, _syncValues];
if (_blood <= 35 and !(_unit getVariable ["ACE_isUnconscious", false])) then {
[_unit, true] call FUNC(setUnconscious);
};
if (_blood == 0) then {
[_unit] call FUNC(setDead);
};
if (_blood <= 35 and !(_unit getVariable ["ACE_isUnconscious", false])) then {
[_unit, true] call FUNC(setUnconscious);
};
if (_blood == 0) then {
[_unit] call FUNC(setDead);
};
};

View File

@ -1284,5 +1284,53 @@
<Polish>%1 założył stazę</Polish>
<French>%1 a appliqué un garrot</French>
</Key>
<Key ID="STR_ACE_Medical_HeavilyWounded">
<English>Heavily wounded</English>
<German>Schwer verwundet:</German>
</Key>
<Key ID="STR_ACE_Medical_LightlyWounded">
<English>Lightly wounded</English>
<German>Leicht verwundet:</German>
</Key>
<Key ID="STR_ACE_Medical_VeryLightlyWounded">
<English>Very lightly wounded</English>
<German>Sehr leicht verwundet:</German>
</Key>
<Key ID="STR_ACE_Medical_Head">
<English>Head</English>
<German>Kopf</German>
</Key>
<Key ID="STR_ACE_Medical_Torso">
<English>Torso</English>
<German>Torso</German>
</Key>
<Key ID="STR_ACE_Medical_LeftArm">
<English>Left Arm</English>
<German>Linker Arm</German>
</Key>
<Key ID="STR_ACE_Medical_RightArm">
<English>Right Arm</English>
<German>Rechter Arm</German>
</Key>
<Key ID="STR_ACE_Medical_LeftLeg">
<English>Left Leg</English>
<German>Linkes Bein</German>
</Key>
<Key ID="STR_ACE_Medical_RightLeg">
<English>Right Leg</English>
<German>Rechtes Bein</German>
</Key>
<Key ID="STR_ACE_Medical_painEffectType">
<English>Pain Effect Type</English>
<German>Schmerzeffekt-Typ</German>
</Key>
<Key ID="STR_ACE_Medical_painEffect_Flash">
<English>Colour Flashing</English>
<German>Farbblinken</German>
</Key>
<Key ID="STR_ACE_Medical_painEffect_Chroma">
<English>Chromatic Aberration</English>
<German>Chromatische Aberration</German>
</Key>
</Package>
</Project>

View File

@ -21,6 +21,6 @@ class ACE_Settings {
class GVAR(MapDataAvailable) {
value = 2;
typeName = "SCALAR";
isClientSetable = 0;
isClientSettable = 0;
};
};

View File

@ -27,19 +27,19 @@ class GVAR(AttackProfiles) {
functionName = QFUNC(attackProfile_HI);
};
class TOP {
class JAV_DIR {
name = "";
visualName = "";
description = "";
functionName = QFUNC(attackProfile_TOP);
functionName = QFUNC(attackProfile_JAV_DIR);
};
class PYM {
class JAV_TOP {
name = "";
visualName = "";
description = "";
functionName = QFUNC(attackProfile_PYM);
functionName = QFUNC(attackProfile_JAV_TOP);
};
};

View File

@ -40,12 +40,12 @@ class CfgAmmo {
trackLead = 0;
// Begin ACE guidance Configs
class ACE_MissileGuidance {
class ADDON {
enabled = 1;
minDeflection = 0.005; // Minium flap deflection for guidance
maxDeflection = 0.025; // Maximum flap deflection for guidance
incDeflection = 0.005; // The incrmeent in which deflection adjusts.
minDeflection = 0.00025; // Minium flap deflection for guidance
maxDeflection = 0.001; // Maximum flap deflection for guidance
incDeflection = 0.0005; // The incrmeent in which deflection adjusts.
//minDeflection = 0.005;
//maxDeflection = 0.5;
//incDeflection = 0.005;
@ -65,7 +65,7 @@ class CfgAmmo {
// Attack profile type selection
defaultAttackProfile = "LIN";
attackProfiles[] = { "LIN", "DIR", "MID", "HI", "TOP", "PYM" };
attackProfiles[] = { "LIN", "DIR", "MID", "HI" };
};
};
@ -110,12 +110,12 @@ class CfgAmmo {
//trackLead = 0;
// Begin ACE guidance Configs
class ACE_MissileGuidance {
class ADDON {
enabled = 1;
minDeflection = 0.005; // Minium flap deflection for guidance
maxDeflection = 0.25; // Maximum flap deflection for guidance
incDeflection = 0.005; // The incrmeent in which deflection adjusts.
minDeflection = 0.00005; // Minium flap deflection for guidance
maxDeflection = 0.025; // Maximum flap deflection for guidance
incDeflection = 0.00005; // The incrmeent in which deflection adjusts.
//minDeflection = 0.005;
//maxDeflection = 0.5;
//incDeflection = 0.005;
@ -127,15 +127,15 @@ class CfgAmmo {
defaultSeekerLockMode = "LOBL";
seekerLockModes[] = { "LOBL" };
seekerAngle = 90; // Angle in front of the missile which can be searched
seekerAngle = 180; // Angle in front of the missile which can be searched
seekerAccuracy = 1; // seeker accuracy multiplier
seekerMinRange = 1;
seekerMinRange = 0;
seekerMaxRange = 2500; // Range from the missile which the seeker can visually search
// Attack profile type selection
defaultAttackProfile = "LIN";
attackProfiles[] = { "TOP", "LIN" };
defaultAttackProfile = "JAV_TOP";
attackProfiles[] = { "JAV_TOP", "JAV_DIR" };
};
};
};

View File

@ -2,6 +2,7 @@
PREP(rotateVectLineGetMap);
PREP(rotateVectLine);
PREP(changeMissileDirection);
PREP(checkSeekerAngle);
PREP(checkLos);
@ -17,10 +18,12 @@ PREP(attackProfile_LIN);
PREP(attackProfile_DIR);
PREP(attackProfile_MID);
PREP(attackProfile_HI);
PREP(attackProfile_TOP);
PREP(attackprofile_PYM);
PREP(attackProfile_AIR);
// Javelin profiles
PREP(attackProfile_JAV_DIR);
PREP(attackProfile_JAV_TOP);
// Seeker search functions
PREP(seekerType_SALH);
PREP(seekerType_Optic);

View File

@ -1,54 +1,4 @@
//#define DEBUG_MODE_FULL
#include "script_component.hpp"
EXPLODE_7_PVT(((_this select 1) select 0),_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile);
private["_targetPos", "_projectilePos", "_target", "_seekerTargetPos", "_launchParams", "_targetLaunchParams"];
private["_distanceToTarget", "_distanceToShooter", "_addHeight", "_returnTargetPos"];
_seekerTargetPos = _this select 0;
_launchParams = _this select 1;
_target = _launchParams select 0;
_targetLaunchParams = _launchParams select 1;
_shooterPos = getPosASL _shooter;
_projectilePos = getPosASL _projectile;
_distanceToTarget = _projectilePos vectorDistance _seekerTargetPos;
_distanceToShooter = _projectilePos vectorDistance _shooterPos;
TRACE_2("", _distanceToTarget, _distanceToShooter);
// Add height depending on distance for compensate
_addHeight = [0,0,0];
// Always climb an arc on initial launch if we are close to the round
if( ((ASLtoATL _projectilePos) select 2) < 5 && _distanceToShooter < 15) then {
_addHeight = _addHeight vectorAdd [0,0,_distanceToTarget];
} else {
// If we are below the target, increase the climbing arc
if((_projectilePos select 2) < (_seekerTargetPos select 2) && _distanceToTarget > 100) then {
_addHeight = _addHeight vectorAdd [0,0, ((_seekerTargetPos select 2) - (_projectilePos select 2))];
};
};
// Handle arcing terminal low for high decent
if( (_projectilePos select 2) > (_seekerTargetPos select 2) && _distanceToTarget < 100) then {
_addHeight = _addHeight vectorDiff [0,0, ((_projectilePos select 2) - (_seekerTargetPos select 2))];
} else {
if((_projectilePos select 2) > (_seekerTargetPos select 2) && _distanceToTarget > 100) then {
_addHeight = _addHeight vectorAdd [0,0, _distanceToTarget];
};
};
TRACE_3("", _distanceToTarget,_distanceToShooter,_addHeight);
_returnTargetPos = _seekerTargetPos vectorAdd _addHeight;
#ifdef DEBUG_MODE_FULL
drawLine3D [(ASLtoATL _returnTargetPos) vectorAdd _addHeight, ASLtoATL _returnTargetPos, [0,1,0,1]];
#endif
TRACE_1("Adjusted target position", _returnTargetPos);
_returnTargetPos;
_this call FUNC(attackProfile_LIN);

View File

@ -0,0 +1,69 @@
//#define DEBUG_MODE_FULL
#include "script_component.hpp"
#define STAGE_LAUNCH 1
#define STAGE_CLIMB 2
#define STAGE_COAST 3
#define STAGE_TERMINAL 4
EXPLODE_7_PVT(((_this select 1) select 0),_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile);
private["_targetPos", "_projectilePos", "_target", "_seekerTargetPos", "_launchParams", "_targetLaunchParams"];
private["_distanceToTarget", "_distanceToShooter", "_addHeight", "_returnTargetPos", "_state"];
_seekerTargetPos = _this select 0;
_launchParams = _this select 1;
_target = _launchParams select 0;
_targetLaunchParams = _launchParams select 1;
_state = _this select 2;
if( (count _state) < 1) then {
_state set[0, STAGE_LAUNCH];
};
_shooterPos = getPosASL _shooter;
_projectilePos = getPosASL _projectile;
_distanceToTarget = _projectilePos vectorDistance _seekerTargetPos;
_distanceToShooter = _projectilePos vectorDistance _shooterPos;
_distanceShooterToTarget = _shooterPos vectorDistance _seekerTargetPos;
TRACE_2("", _distanceToTarget, _distanceToShooter);
// Add height depending on distance for compensate
_returnTargetPos = _seekerTargetPos;
switch( (_state select 0) ) do {
case STAGE_LAUNCH: {
TRACE_1("STAGE_LAUNCH","");
if(_distanceToShooter < 10) then {
_returnTargetPos = _seekerTargetPos vectorAdd [0,0,_distanceToTarget*2];
} else {
_state set[0, STAGE_CLIMB];
};
};
case STAGE_CLIMB: {
TRACE_1("STAGE_CLIMB","");
_cruisAlt = 60;
if(_distanceShooterToTarget < w) then {
_cruisAlt = 60 * (_distanceShooterToTarget/2000);
TRACE_1("_cruisAlt", _cruisAlt);
};
if( ((ASLToATL _projectilePos) select 2) - ((ASLToATL _seekerTargetPos) select 2) >= _cruisAlt) then {
_state set[0, STAGE_TERMINAL];
} else {
_returnTargetPos = _seekerTargetPos vectorAdd [0,0,_distanceToTarget*2];
};
};
case STAGE_TERMINAL: {
TRACE_1("STAGE_TERMINAL","");
//_returnTargetPos = _seekerTargetPos vectorAdd [0,0,_distanceToTarget * 0.02];
};
};
#ifdef DEBUG_MODE_FULL
drawLine3D [(ASLtoATL _returnTargetPos), (ASLtoATL _seekerTargetPos), [0,1,0,1]];
#endif
TRACE_1("Adjusted target position", _returnTargetPos);
_returnTargetPos;

View File

@ -0,0 +1,76 @@
//#define DEBUG_MODE_FULL
#include "script_component.hpp"
#define STAGE_LAUNCH 1
#define STAGE_CLIMB 2
#define STAGE_COAST 3
#define STAGE_TERMINAL 4
EXPLODE_7_PVT(((_this select 1) select 0),_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile);
private["_targetPos", "_projectilePos", "_target", "_seekerTargetPos", "_launchParams", "_targetLaunchParams"];
private["_distanceToTarget", "_distanceToShooter", "_addHeight", "_returnTargetPos", "_state"];
_seekerTargetPos = _this select 0;
_launchParams = _this select 1;
_target = _launchParams select 0;
_targetLaunchParams = _launchParams select 1;
_state = _this select 2;
if( (count _state) < 1) then {
_state set[0, STAGE_LAUNCH];
};
_shooterPos = getPosASL _shooter;
_projectilePos = getPosASL _projectile;
_distanceToTarget = _projectilePos vectorDistance _seekerTargetPos;
_distanceToShooter = _projectilePos vectorDistance _shooterPos;
_distanceShooterToTarget = _shooterPos vectorDistance _seekerTargetPos;
TRACE_2("", _distanceToTarget, _distanceToShooter);
// Add height depending on distance for compensate
_returnTargetPos = _seekerTargetPos;
switch( (_state select 0) ) do {
case STAGE_LAUNCH: {
TRACE_1("STAGE_LAUNCH","");
if(_distanceToShooter < 10) then {
_returnTargetPos = _seekerTargetPos vectorAdd [0,0,_distanceToTarget*2];
} else {
_state set[0, STAGE_CLIMB];
};
};
case STAGE_CLIMB: {
TRACE_1("STAGE_CLIMB","");
_cruisAlt = 140;
if(_distanceShooterToTarget < 1250) then {
_cruisAlt = 140 * (_distanceShooterToTarget/1250);
TRACE_1("_cruisAlt", _cruisAlt);
};
if( ((ASLToATL _projectilePos) select 2) - ((ASLToATL _seekerTargetPos) select 2) >= _cruisAlt) then {
_state set[0, STAGE_COAST];
} else {
_returnTargetPos = _seekerTargetPos vectorAdd [0,0,_distanceToTarget*2];
};
};
case STAGE_COAST: {
TRACE_1("STAGE_COAST","");
if(_distanceShooterToTarget < 1250 || _distanceToTarget < ( ((ASLToATL _projectilePos) select 2) - (( ASLToATL _seekerTargetPos) select 2) )) then {
_state set[0, STAGE_TERMINAL];
};
_returnTargetPos = _seekerTargetPos vectorAdd [0,0,(_projectilePos select 2)];
};
case STAGE_TERMINAL: {
TRACE_1("STAGE_TERMINAL","");
//_returnTargetPos = _seekerTargetPos vectorAdd [0,0,_distanceToTarget * 0.02];
};
};
#ifdef DEBUG_MODE_FULL
drawLine3D [(ASLtoATL _returnTargetPos), (ASLtoATL _seekerTargetPos), [0,1,0,1]];
#endif
TRACE_1("Adjusted target position", _returnTargetPos);
_returnTargetPos;

View File

@ -16,7 +16,7 @@ _projectilePos = getPosASL _projectile;
_distanceToTarget = _projectilePos vectorDistance _seekerTargetPos;
_distanceToShooter = _projectilePos vectorDistance _shooterPos;
TRACE_2("", _distanceToTarget, _distanceToShooter);
TRACE_3("", _distanceToTarget, _distanceToShooter, _seekerTargetPos);
// Add height depending on distance for compensate
_addHeight = [0,0,0];
@ -40,11 +40,7 @@ if( (_projectilePos select 2) > (_seekerTargetPos select 2) && _distanceToTarget
};
};
TRACE_3("", _distanceToTarget,_distanceToShooter,_addHeight);
_returnTargetPos = _seekerTargetPos vectorAdd _addHeight;
_returnTargetPos = _seekerTargetPos vectorAdd _addHeight;
#ifdef DEBUG_MODE_FULL
drawLine3D [(ASLtoATL _returnTargetPos) vectorAdd _addHeight, ASLtoATL _returnTargetPos, [0,1,0,1]];

View File

@ -1,4 +0,0 @@
//#define DEBUG_MODE_FULL
#include "script_component.hpp"
_this call FUNC(attackProfile_LIN);

View File

@ -1,52 +0,0 @@
//#define DEBUG_MODE_FULL
#include "script_component.hpp"
EXPLODE_7_PVT(((_this select 1) select 0),_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile);
private["_targetPos", "_projectilePos", "_target", "_seekerTargetPos", "_launchParams", "_targetLaunchParams"];
private["_distanceToTarget", "_distanceToShooter", "_addHeight", "_returnTargetPos"];
_seekerTargetPos = _this select 0;
_launchParams = _this select 1;
_target = _launchParams select 0;
_targetLaunchParams = _launchParams select 1;
_shooterPos = getPosASL _shooter;
_projectilePos = getPosASL _projectile;
_distanceToTarget = _projectilePos vectorDistance _seekerTargetPos;
_distanceToShooter = _projectilePos vectorDistance _shooterPos;
TRACE_2("", _distanceToTarget, _distanceToShooter);
// Add height depending on distance for compensate
_addHeight = [0,0,0];
// Always climb an arc on initial launch if we are close to the round
if( ((ASLtoATL _projectilePos) select 2) < 140 && _distanceToShooter < 50) then {
_addHeight = _addHeight vectorAdd [0,0,_distanceToTarget];
} else {
// If we are below the target, increase the climbing arc
if((_projectilePos select 2) < (_seekerTargetPos select 2) + 140 && _distanceToTarget > 100) then {
_addHeight = _addHeight vectorAdd [0,0, ((_seekerTargetPos select 2) - (_projectilePos select 2))+50];
};
};
// Handle arcing terminal low for high decent
if( (_projectilePos select 2) > (_seekerTargetPos select 2) && _distanceToTarget < 140) then {
_addHeight = _addHeight vectorDiff [0,0, ((_projectilePos select 2) - (_seekerTargetPos select 2)) * 0.5];
} else {
if((_projectilePos select 2) > (_seekerTargetPos select 2) && _distanceToTarget > 140) then {
_addHeight = _addHeight vectorAdd [0,0, ((_projectilePos select 2) - (_seekerTargetPos select 2)) * 0.02];
};
};
TRACE_3("", _distanceToTarget,_distanceToShooter,_addHeight);
_returnTargetPos = _seekerTargetPos vectorAdd _addHeight;
#ifdef DEBUG_MODE_FULL
drawLine3D [(ASLtoATL _returnTargetPos) vectorAdd _addHeight, ASLtoATL _returnTargetPos, [0,1,0,1]];
#endif
TRACE_1("Adjusted target position", _returnTargetPos);
_returnTargetPos;

View File

@ -0,0 +1,11 @@
#include "script_component.hpp"
private ["_projectile", "_v", "_l", "_r"];
_projectile = _this select 0;
_v = _this select 1;
_l = sqrt ((_v select 0) ^ 2 + (_v select 1) ^ 2);
_r = -(_v select 2) / _l;
_projectile setVectorDirAndUp [ _v, [(_v select 0) * _r,(_v select 1) * _r, _l] ];
_projectile setVelocity (_v vectorMultiply (vectorMagnitude (velocity _projectile)));

View File

@ -12,38 +12,19 @@
* Boolean
*/
#define DEBUG_MODE_FULL
#include "script_component.hpp"
private["_seeker", "_targetPos", "_seekerMaxAngle", "_vectorTo", "_sensorPos", "_vertOk", "_horzOk", "_dir", "_headingPitch"];
private["_seeker", "_targetPos", "_seekerMaxAngle", "_sensorPos", "_testPointVector", "_testDotProduct"];
_seeker = _this select 0;
_targetPos = _this select 1;
_seekerMaxAngle = _this select 2;
_vertOk = false;
_horzOk = false;
_sensorPos = getPosASL _seeker;
_vectorTo = _sensorPos vectorFromTo _targetPos;
_headingPitch = (vectorDir _seeker) call CBA_fnc_vect2polar;
_polarTo = _vectorTo call CBA_fnc_vect2polar;
_testPointVector = vectorNormalized (_targetPos vectorDiff _sensorPos);
_testDotProduct = (vectorNormalized (velocity _seeker)) vectorDotProduct _testPointVector;
_dir = _polarTo select 1;
_dir = _dir - (_headingPitch select 1);
if (_dir < 0) then {_dir = _dir + 360};
if (_dir > 360) then {_dir = _dir - 360};
_vertOk = false;
_horzOk = false;
if(_dir < _angleFov || {_dir > (360-_angleFov)}) then {
_horzOk = true;
};
if(abs((abs(_polarTo select 2))-(abs(_headingPitch select 2))) < _angleFov) then {
_vertOk = true;
};
if(!_vertOk || !_horzOk ) exitWith {
if(_testDotProduct < (cos _seekerMaxAngle)) exitWith {
false
};

View File

@ -13,7 +13,7 @@ PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile);
// Bail on not missile
if(! (_ammo isKindOf "MissileBase") ) exitWith { false };
_config = configFile >> "CfgAmmo" >> _ammo >> "ACE_MissileGuidance";
_config = configFile >> "CfgAmmo" >> _ammo >> QUOTE(ADDON);
_enabled = getNumber ( _config >> "enabled");
// Bail if guidance is not enabled
@ -68,7 +68,7 @@ TRACE_4("Beginning ACE guidance system",_target,_ammo,_seekerType,_attackProfile
getNumber ( _config >> "seekerAccuracy" ),
getNumber ( _config >> "seekerMaxRange" )
],
[ diag_tickTime ]
[ diag_tickTime, [], [] ]
]
] call cba_fnc_addPerFrameHandler;

View File

@ -3,14 +3,18 @@
#define TIMESTEP_FACTOR 0.01
private["_args", "_stateParams", "_launchParams", "_targetLaunchParams", "_config", "_flightParams", "_seekerParams", "_seekerTargetPos"];
private["_lastRunTime", "_runtimeDelta", "_profileAdjustedTargetPos", "_targetVectorSeeker", "_targetVector"];
private["_minDeflection", "_maxDeflection", "_incDeflection"];
private["_yVec", "_zVec", "_xVec"];
private["_launchParams", "_targetLaunchParams", "_flightParams", "_seekerParams", "_stateParams"];
private["_lastRunTime", "_runtimeDelta", "_adjustTime", "_args", "_seekerTargetPos", "_projectilePos"];
private["_profileAdjustedTargetPos", "_incDeflection", "_minDeflection", "_maxDeflection"];
private["_targetVector", "_adjustVector", "_finalAdjustVector", "_changeVector", "_pitch", "_yaw", "_roll"];
_args = _this select 0;
EXPLODE_7_PVT((_args select 0),_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile);
if(!alive _projectile || isNull _projectile || isNull _shooter) exitWith {
[(_this select 1)] call cba_fnc_removePerFrameHandler;
};
_launchParams = _args select 1;
_targetLaunchParams = _launchParams select 1;
_flightParams = _args select 2;
@ -20,77 +24,77 @@ _stateParams = _args select 4;
_lastRunTime = _stateParams select 0;
_runtimeDelta = diag_tickTime - _lastRunTime;
_adjustTime = 1;
_config = configFile >> "CfgAmmo" >> _ammo >> "ACE_MissileGuidance";
if(!alive _projectile || isNull _projectile || isNull _shooter) exitWith {
[(_this select 1)] call cba_fnc_removePerFrameHandler;
if(accTime > 0) then {
_adjustTime = 1/accTime;
_adjustTime = _adjustTime * (_runtimeDelta / TIMESTEP_FACTOR);
TRACE_4("Adjust timing", 1/accTime, _adjustTime, _runtimeDelta, (_runtimeDelta / TIMESTEP_FACTOR) );
} else {
_adjustTime = 0;
};
// TODO: placeholder for "last seek target position"
_seekerTargetPos = [ [0,0,0], _args] call FUNC(doSeekerSearch);
if(!isNil "_seekerTargetPos") then {
_minDeflection = ((_flightParams select 0) - ((_flightParams select 0) * _adjustTime)) max 0;
_maxDeflection = (_flightParams select 1) * _adjustTime;
_incDeflection = _flightParams select 2;
_profileAdjustedTargetPos = [_seekerTargetPos,_args] call FUNC(doAttackProfile);
_projectilePos = getPosASL _projectile;
_minDeflection = _flightParams select 0;
_maxDeflection = _flightParams select 1;
_incDeflection = _flightParams select 2;
_yVec = vectorDir _projectile;
_zVec = vectorUp _projectile;
_xVec = vectorNormalized (_yVec vectorCrossProduct _zVec);
_projectilePos = getPosASL _projectile;
_targetVectorSeeker = [_projectile, [_xVec, _yVec, _zVec], _profileAdjustedTargetPos] call EFUNC(common,translateToWeaponSpace);
_targetVector = [0,0,0] vectorFromTo _targetVectorSeeker;
TRACE_1("", _targetVectorSeeker, _targetVector);
private["_yaw", "_pitch"];
_yaw = 0;
_pitch = 0;
if((_targetVectorSeeker select 0) < 0) then {
_yaw = - ( (_minDeflection max (abs(_targetVector select 0) min _maxDeflection) ) );
} else {
if((_targetVectorSeeker select 0) > 0) then {
_yaw = ( (_minDeflection max ((_targetVector select 0) min _maxDeflection) ) );
};
// @TODO: placeholder for "last seek target position"
// Last target pos should be optional based on the seeker unit
_seekerTargetPos = [ [0,0,0], _args, (_stateParams select 1)] call FUNC(doSeekerSearch);
if(isNil "_seekerTargetPos") then {
_seekerTargetPos = _seekerTargetPos vectorAdd ((velocity _projectile) vectorMultiply 5);
} else {
if( (vectorMagnitude _seekerTargetPos) == 0) then {
_seekerTargetPos = _seekerTargetPos vectorAdd ((velocity _projectile) vectorMultiply 5);
};
if((_targetVectorSeeker select 2) < 0) then {
_pitch = - ( (_minDeflection max (abs(_targetVector select 2) min _maxDeflection) ) );
} else {
if((_targetVectorSeeker select 2) > 0) then {
_pitch = ( (_minDeflection max ((_targetVector select 2) min _maxDeflection) ) );
};
};
#ifdef DEBUG_MODE_FULL
drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,1,1,1], ASLtoATL _projectilePos, 0.75, 0.75, 0, str _vectorTo, 1, 0.025, "TahomaB"];
drawLine3D [ASLtoATL _projectilePos, ASLtoATL _profileAdjustedTargetPos, [1,0,0,1]];
#endif
if(accTime > 0) then {
private["_adjustTime", "_outVector", "_vectorTo"];
_adjustTime = 1/accTime;
_adjustTime = _adjustTime * (_runtimeDelta / TIMESTEP_FACTOR);
TRACE_4("Adjust timing", 1/accTime, _adjustTime, _runtimeDelta, (_runtimeDelta / TIMESTEP_FACTOR) );
// @TODO: Apply velocity multiplier to yaw/pitch. Basically, it can adjust faster at lower speeds
//_adjustDeflection = (vectorMagnitude velocity _projectile);
_outVector = [_projectile, [_xVec, _yVec, _zVec], [_yaw, _adjustTime, _pitch]] call EFUNC(common,translateToModelSpace);
_vectorTo = _projectilePos vectorFromTo _outVector;
_projectile setVectorDirAndUp [_vectorTo, vectorUp _projectile];
};
#ifdef DEBUG_MODE_FULL
hintSilent format["d: %1", _distanceToTarget];
#endif
};
_profileAdjustedTargetPos = [_seekerTargetPos,_args, (_stateParams select 2)] call FUNC(doAttackProfile);
_targetVector = _projectilePos vectorFromTo _profileAdjustedTargetPos;
_adjustVector = _targetVector vectorDiff (vectorDir _projectile);
_yaw = 0;
_pitch = 0;
_roll = 0;
if((_adjustVector select 0) < 0) then {
_yaw = - ( (_minDeflection max (abs(_adjustVector select 0) min _maxDeflection) ) );
} else {
if((_adjustVector select 0) > 0) then {
_yaw = ( (_minDeflection max ((_adjustVector select 0) min _maxDeflection) ) );
};
};
if((_adjustVector select 1) < 0) then {
_roll = - ( (_minDeflection max (abs(_adjustVector select 1) min _maxDeflection) ) );
} else {
if((_adjustVector select 1) > 0) then {
_roll = ( (_minDeflection max ((_adjustVector select 1) min _maxDeflection) ) );
};
};
if((_adjustVector select 2) < 0) then {
_pitch = - ( (_minDeflection max (abs(_adjustVector select 2) min _maxDeflection) ) );
} else {
if((_adjustVector select 2) > 0) then {
_pitch = ( (_minDeflection max ((_adjustVector select 2) min _maxDeflection) ) );
};
};
_finalAdjustVector = [_yaw, _roll, _pitch];
TRACE_2("", _pitch, _yaw);
TRACE_4("", _targetVector, _targetRelativeVector, _adjustVector, _finalAdjustVector);
if(accTime > 0) then {
_changeVector = (vectorDir _projectile) vectorAdd _finalAdjustVector;
[_projectile, _changeVector] call FUNC(changeMissileDirection);
};
#ifdef DEBUG_MODE_FULL
drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,1,1,1], ASLtoATL _projectilePos, 0.75, 0.75, 0, str _vectorTo, 1, 0.025, "TahomaB"];
drawLine3D [ASLtoATL _projectilePos, ASLtoATL _profileAdjustedTargetPos, [1,0,0,1]];
hintSilent format["d: %1", _distanceToTarget];
#endif
_stateParams set[0, diag_tickTime];
_args set[4, _stateParams];

View File

@ -19,7 +19,7 @@ if(!isNil "_target") then {
_foundTargetPos = getPosASL _target;
};
/* @TODO: This is seeker LOS and angle checks for LOAL only; LOBL does not need visual
// @TODO: This is seeker LOS and angle checks for LOAL only; LOBL does not need visual
_angleFov = _seekerParams select 0;
_angleOkay = [_projectile, _foundTargetPos, _angleFov] call FUNC(checkSeekerAngle);
@ -34,7 +34,7 @@ if(!_angleOkay || !_losOkay) then {
_foundTargetPos = _sensorPos vectorAdd ((velocity _projectile) vectorMultiply 5);
} else {
TRACE_2("", _target, _foundTargetPos);
private["_projectileSpeed", "_distanceToTarget", "_eta", "_adjustVelocity"];
// @TODO: Configurable lead for seekers
_projectileSpeed = (vectorMagnitude velocity _projectile);
_distanceToTarget = (getPosASL _projectile) vectorDistance _foundTargetPos;
@ -45,5 +45,5 @@ if(!_angleOkay || !_losOkay) then {
_foundTargetPos = _foundTargetPos vectorAdd _adjustVelocity;
};
*/
_foundTargetPos;

View File

@ -6,15 +6,15 @@ _seekerTargetPos = _this select 0;
_launchParams = _this select 1;
_seekerParams = _launchParams select 3;
_angleFov = _seekerParams select 0;
_laserResult = [(getPosASL _projectile), [ACE_DEFAULT_LASER_WAVELENGTH,ACE_DEFAULT_LASER_WAVELENGTH], ACE_DEFAULT_LASER_CODE] call EFUNC(laser,seekerFindLaserSpot);
_laserResult = [(getPosASL _projectile), (velocity _projectile), _angleFov, [ACE_DEFAULT_LASER_WAVELENGTH,ACE_DEFAULT_LASER_WAVELENGTH], ACE_DEFAULT_LASER_CODE] call EFUNC(laser,seekerFindLaserSpot);
_foundTargetPos = _laserResult select 0;
TRACE_1("Search", _laserResult);
if(!isNil "_foundTargetPos") then {
_angleFov = _seekerParams select 0;
_canSeeTarget = [_projectile, _foundTargetPos, _angleFov] call FUNC(checkSeekerAngle);
//_canSeeTarget = [_projectile, _foundTargetPos, _angleFov] call FUNC(checkSeekerAngle);
// If we got here, it was an invalid target, just return a spot 5m in front of the missile
if(!_canSeeTarget) then {

View File

@ -21,7 +21,7 @@ class ACE_Settings {
class GVAR(useImperial) {
value = 0;
typeName = "BOOL";
isClientSetable = 1;
isClientSettable = 1;
displayName = "$STR_ACE_Movement_UseImperial";
};
};

View File

@ -19,55 +19,55 @@ class ACE_Settings {
class GVAR(defaultNametagColor) {
value[] = {0.77, 0.51, 0.08, 1};
typeName = "COLOR";
isClientSetable = 1;
isClientSettable = 1;
displayName = "$STR_ACE_NameTags_DefaultNametagColor";
};
class GVAR(showPlayerNames) {
value = 1;
typeName = "SCALAR";
isClientSetable = 1;
isClientSettable = 1;
displayName = "$STR_ACE_NameTags_ShowPlayerNames";
values[] = {"Disabled", "Enabled", "Only Cursor", "Only On Keypress", "Only Cursor and KeyPress"};
};
class GVAR(showPlayerRanks) {
value = 1;
typeName = "BOOL";
isClientSetable = 1;
isClientSettable = 1;
displayName = "$STR_ACE_NameTags_ShowPlayerRanks";
};
class GVAR(showVehicleCrewInfo) {
value = 1;
typeName = "BOOL";
isClientSetable = 1;
isClientSettable = 1;
displayName = "$STR_ACE_NameTags_ShowVehicleCrewInfo";
};
class GVAR(showNamesForAI) {
value = 0;
typeName = "BOOL";
isClientSetable = 1;
isClientSettable = 1;
displayName = "$STR_ACE_NameTags_ShowNamesForAI";
};
class GVAR(showCursorTagForVehicles) {
value = 0;
typeName = "BOOL";
isClientSetable = 0;
isClientSettable = 0;
};
class GVAR(showSoundWaves) {
value = 1;
typeName = "SCALAR";
isClientSetable = 1;
isClientSettable = 1;
displayName = "$STR_ACE_NameTags_ShowSoundWaves";
values[] = {"Disabled", "Use Nametag settings", "Always Show All"};
};
class GVAR(PlayerNamesViewDistance) {
value = 5;
typeName = "SCALAR";
isClientSetable = 0;
isClientSettable = 0;
};
class GVAR(PlayerNamesMaxAlpha) {
value = 0.8;
typeName = "SCALAR";
isClientSetable = 0;
isClientSettable = 0;
};
};

View File

@ -23,7 +23,7 @@ class CfgPatches {
class ACE_Settings {
class GVAR(DisplayTextOnJam) {
typeName = "BOOL";
isClientSetable = 1;
isClientSettable = 1;
value = 1;
displayName = "$STR_ACE_overheating_SettingDisplayTextName";
description = "$STR_ACE_overheating_SettingDisplayTextDesc";

View File

@ -25,7 +25,7 @@ class CfgPatches {
class ACE_Settings {
class GVAR(DisplayText) {
typeName = "BOOL";
isClientSetable = 1;
isClientSettable = 1;
value = 1;
displayName = "$STR_ACE_reload_SettingDisplayTextName";
description = "$STR_ACE_reload_SettingDisplayTextDesc";

View File

@ -42,7 +42,6 @@ if !(hasInterface) exitWith {};
// Statement
[ACE_player, ELEVATION_UP, MINOR_INCREMENT] call FUNC(adjustScope);
true
},
{false},
[201, [false, false, false]], true] call cba_fnc_addKeybind;
@ -56,7 +55,6 @@ if !(hasInterface) exitWith {};
// Statement
[ACE_player, ELEVATION_DOWN, MINOR_INCREMENT] call FUNC(adjustScope);
true
},
{false},
[209, [false, false, false]], true] call cba_fnc_addKeybind;
@ -70,7 +68,6 @@ if !(hasInterface) exitWith {};
// Statement
[ACE_player, WINDAGE_LEFT, MINOR_INCREMENT] call FUNC(adjustScope);
true
},
{false},
[209, [false, true, false]], true] call cba_fnc_addKeybind;
@ -84,7 +81,6 @@ if !(hasInterface) exitWith {};
// Statement
[ACE_player, WINDAGE_RIGHT, MINOR_INCREMENT] call FUNC(adjustScope);
true
},
{false},
[201, [false, true, false]], true] call cba_fnc_addKeybind;
@ -98,7 +94,6 @@ if !(hasInterface) exitWith {};
// Statement
[ACE_player, ELEVATION_UP, MAJOR_INCREMENT] call FUNC(adjustScope);
true
},
{false},
[201, [true, false, false]], true] call cba_fnc_addKeybind;
@ -112,7 +107,6 @@ if !(hasInterface) exitWith {};
// Statement
[ACE_player, ELEVATION_DOWN, MAJOR_INCREMENT] call FUNC(adjustScope);
true
},
{false},
[209, [true, false, false]], true] call cba_fnc_addKeybind;
@ -126,7 +120,6 @@ if !(hasInterface) exitWith {};
// Statement
[ACE_player, WINDAGE_LEFT, MAJOR_INCREMENT] call FUNC(adjustScope);
true
},
{false},
[209, [true, true, false]], true] call cba_fnc_addKeybind;
@ -140,7 +133,6 @@ if !(hasInterface) exitWith {};
// Statement
[ACE_player, WINDAGE_RIGHT, MAJOR_INCREMENT] call FUNC(adjustScope);
true
},
{false},
[201, [true, true, false]], true] call cba_fnc_addKeybind;

View File

@ -69,3 +69,5 @@ if ((_elevation + _zero) < _maxVertical select 0 or (_elevation + _zero) > _maxV
if (_windage < _maxHorizontal select 0 or _windage > _maxHorizontal select 1) exitWith {false};
[_unit, _elevation, _windage, _zero] call FUNC(applyScopeAdjustment);
true

View File

@ -1,21 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler. -->
<Project name="ACE">
<Package name="Scopes">
<Key ID="STR_ACE_Scopes_AdjustUpMinor">
<English>"Minor adjustment up</English>
<English>Minor adjustment up</English>
<Polish>Zerowanie powoli w górę</Polish>
</Key>
<Key ID="STR_ACE_Scopes_AdjustDownMinor">
<English>"Minor adjustment down</English>
<English>Minor adjustment down</English>
<Polish>Zerowanie powoli w dół</Polish>
</Key>
<Key ID="STR_ACE_Scopes_AdjustRightMinor">
<English>"Minor adjustment right</English>
<English>Minor adjustment right</English>
<Polish>Zerowanie powoli w prawo</Polish>
</Key>
<Key ID="STR_ACE_Scopes_AdjustLeftMinor">
<English>"Minor adjustment left</English>
<English>Minor adjustment left</English>
<Polish>Zerowanie powoli w lewo</Polish>
</Key>
<Key ID="STR_ACE_Scopes_AdjustUpMajor">

View File

@ -7,7 +7,7 @@ if !(hasInterface) exitWith {};
["ACE3", QGVAR(speedLimiter), localize "STR_ACE_SpeedLimiter",
{
// Conditions: canInteract
if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false};
if !([ACE_player, objNull, ["isnotinside"]] call EFUNC(common,canInteractWith)) exitWith {false};
// Conditions: specific
if !(ACE_player == driver vehicle ACE_player &&
{vehicle ACE_player isKindOf 'Car' ||

View File

@ -17,7 +17,7 @@ class CfgPatches {
class ACE_Settings {
class GVAR(DisplayText) {
typeName = "BOOL";
isClientSetable = 1;
isClientSettable = 1;
value = 1;
displayName = "$STR_ACE_Weaponselect_SettingDisplayTextName";
description = "$STR_ACE_Weaponselect_SettingDisplayTextDesc";

View File

@ -19,6 +19,11 @@ def check_for_changes(addonspath, module):
return True
return mod_time(os.path.join(addonspath, module)) > mod_time(os.path.join(addonspath, "ace_{}.pbo".format(module)))
def check_for_obsolete_pbos(addonspath, file):
module = file[4:-4]
if not os.path.exists(os.path.join(addonspath, module)):
return True
return False
def main():
print("""
@ -36,6 +41,16 @@ def main():
made = 0
failed = 0
skipped = 0
removed = 0
for file in os.listdir(addonspath):
if os.path.isfile(file):
if check_for_obsolete_pbos(addonspath, file):
removed += 1
print(" Removing obsolete file => " + file)
os.remove(file)
print("")
for p in os.listdir(addonspath):
path = os.path.join(addonspath, p)
if not os.path.isdir(path):
@ -65,7 +80,7 @@ def main():
print(" Successfully made {}.".format(p))
print("\n# Done.")
print(" Made {}, skipped {}, failed to make {}.".format(made, skipped, failed))
print(" Made {}, skipped {}, removed {}, failed to make {}.".format(made, skipped, removed, failed))
if __name__ == "__main__":