Merge branch 'cswSuperBranch' into artilleryTables

This commit is contained in:
PabstMirror 2019-07-05 17:58:24 -05:00
commit fe418ec4dd
82 changed files with 1591 additions and 323 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,95 @@
ambient[]={1,1,1,1.000000};
diffuse[]={1,1,1,1.000000};
forcedDiffuse[]={0.000000,0.000000,0.000000,0.000000};
emmisive[]={0.000000,0.000000,0.000000,1.000000};
specular[]={1,1,1,1.000000};
specularPower=40.000000;
PixelShaderID="super";
VertexShaderID="super";
class Stage1
{
texture = "z\ace\addons\apl\data\csw_nsv_nohq.paa";
uvSource="tex";
class uvTransform
{
aside[]={1.000000,0.000000,0.000000};
up[]={0.000000,1.000000,0.000000};
dir[]={0.000000,0.000000,0.000000};
pos[]={0.000000,0.000000,0.000000};
};
};
class Stage2
{
texture="a3\weapons_f\Data\DetailMaps\metal_detail_dt.paa";
uvSource="tex";
class uvTransform
{
aside[]={8.0000,0.000000,0.000000};
up[]={0.000000,8.0000,0.000000};
dir[]={0.000000,0.000000,0.000000};
pos[]={0.000000,0.000000,0.000000};
};
};
class Stage3
{
texture="#(argb,8,8,3)color(0,0,0,0,MC)";
uvSource="tex";
class uvTransform
{
aside[]={1.000000,0.000000,0.000000};
up[]={0.000000,1.000000,0.000000};
dir[]={0.000000,0.000000,0.000000};
pos[]={0.000000,0.000000,0.000000};
};
};
class Stage4
{
texture = "#(argb,8,8,3)color(1,1,1,1,AS)";
uvSource="tex";
class uvTransform
{
aside[]={1.000000,0.000000,0.000000};
up[]={0.000000,1.000000,0.000000};
dir[]={0.000000,0.000000,0.000000};
pos[]={0.000000,0.000000,0.000000};
};
};
class Stage5
{
texture = "z\ace\addons\apl\data\csw_nsv_smdi.paa";
uvSource="tex";
class uvTransform
{
aside[]={1.000000,0.000000,0.000000};
up[]={0.000000,1.000000,0.000000};
dir[]={0.000000,0.000000,0.000000};
pos[]={0.000000,0.000000,0.000000};
};
};
class Stage6
{
texture = "#(ai,32,128,1)fresnel(3.38,5.33)";
uvSource="tex";
class uvTransform
{
aside[]={1.000000,0.000000,0.000000};
up[]={0.000000,1.000000,0.000000};
dir[]={0.000000,0.000000,0.000000};
pos[]={0.000000,0.000000,0.000000};
};
};
class Stage7
{
texture="a3\data_f\env_land_co.paa";
uvSource="tex";
class uvTransform
{
aside[]={1.000000,0.000000,0.000000};
up[]={0.000000,1.000000,0.000000};
dir[]={0.000000,0.000000,0.000000};
pos[]={0.000000,0.000000,0.000000};
};
};
class StageTI {
texture = "a3\data_f\default_vehicle_ti_ca.paa";
};

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,92 @@
ambient[] = {1.0,1.0,1.0,1.0};
diffuse[] = {1.0,1.0,1.0,1.0};
forcedDiffuse[] = {0.0,0.0,0.0,0.0};
emmisive[] = {0.0,0.0,0.0,1.0};
specular[] = {0.545,0.545,0.545,1.0};
specularPower = 100.0;
PixelShaderID = "Super";
VertexShaderID = "Super";
class Stage1
{
texture = "z\ace\addons\apl\data\csw_spg9_nohq.paa";
uvSource = "tex";
class uvTransform
{
aside[] = {1.0,0.0,0.0};
up[] = {0.0,1.0,0.0};
dir[] = {0.0,0.0,1.0};
pos[] = {0.0,0.0,0.0};
};
};
class Stage2
{
texture = "a3\weapons_f\Data\DetailMaps\metal_detail_dt.paa";
uvSource = "tex";
class uvTransform
{
aside[] = {8.0,0.0,0.0};
up[] = {0.0,2.0,0.0};
dir[] = {0.0,0.0,1.0};
pos[] = {0.0,0.0,0.0};
};
};
class Stage3
{
texture = "#(argb,8,8,3)color(0,0,0,0,MC)";
uvSource = "tex";
class uvTransform
{
aside[] = {1.0,0.0,0.0};
up[] = {0.0,1.0,0.0};
dir[] = {0.0,0.0,1.0};
pos[] = {0.0,0.0,0.0};
};
};
class Stage4
{
texture = "#(argb,8,8,3)color(1,1,1,1,AS)";
uvSource = "tex";
class uvTransform
{
aside[] = {1.0,0.0,0.0};
up[] = {0.0,1.0,0.0};
dir[] = {0.0,0.0,1.0};
pos[] = {0.0,0.0,0.0};
};
};
class Stage5
{
texture = "z\ace\addons\apl\data\csw_spg9_smdi.paa";
uvSource = "tex";
class uvTransform
{
aside[] = {1.0,0.0,0.0};
up[] = {0.0,1.0,0.0};
dir[] = {0.0,0.0,1.0};
pos[] = {0.0,0.0,0.0};
};
};
class Stage6
{
texture = "#(ai,32,128,1)fresnel(1.89,1.02)";
uvSource = "tex";
class uvTransform
{
aside[] = {1.0,0.0,0.0};
up[] = {0.0,1.0,0.0};
dir[] = {0.0,0.0,1.0};
pos[] = {0.0,0.0,0.0};
};
};
class Stage7
{
texture="a3\data_f\env_land_co.paa";
uvSource = "tex";
class uvTransform
{
aside[] = {1.0,0.0,0.0};
up[] = {0.0,1.0,0.0};
dir[] = {0.0,0.0,1.0};
pos[] = {0.0,0.0,0.0};
};
};

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,32 @@
ambient[]={1.000000,1.000000,1.000000,1.000000};
diffuse[]={1.000000,1.000000,1.000000,1.000000};
forcedDiffuse[]={0.000000,0.000000,0.000000,0.000000};
emmisive[]={0.000000,0.000000,0.000000,1.000000};
specular[]={0.3000000,0.3000000,0.3000000,1.000000};
specularPower=100.000000;
PixelShaderID="NormalMapSpecularDIMap";
VertexShaderID="NormalMap";
class Stage1
{
texture="z\ace\addons\apl\data\csw_tow_merge_nohq.paa";
uvSource="tex";
class uvTransform
{
aside[]={1.000000,0.000000,0.000000};
up[]={0.000000,1.000000,0.000000};
dir[]={0.000000,0.000000,0.000000};
pos[]={0.000000,0.000000,0.000000};
};
};
class Stage2
{
texture="z\ace\addons\apl\data\csw_tow_merge_smdi.paa";
uvSource="tex";
class uvTransform
{
aside[]={1.000000,0.000000,0.000000};
up[]={0.000000,1.000000,0.000000};
dir[]={0.000000,0.000000,0.000000};
pos[]={0.000000,0.000000,0.000000};
};
};

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,32 @@
ambient[] = {1.0,1.0,1.0,1.0};
diffuse[] = {1.0,1.0,1.0,1.0};
forcedDiffuse[] = {0.0,0.0,0.0,0.0};
emmisive[] = {0.0,0.0,0.0,0.0};
specular[] = {0.3,0.3,0.3,1.0};
specularPower = 256.0;
PixelShaderID = "NormalMapSpecularDIMap";
VertexShaderID = "NormalMap";
class Stage1
{
texture = "z\ace\addons\apl\data\csw_tripod_ags_nohq.paa";
uvSource = "tex";
class uvTransform
{
aside[] = {1.0,0.0,0.0};
up[] = {0.0,1.0,0.0};
dir[] = {0.0,0.0,0.0};
pos[] = {0.0,0.0,0.0};
};
};
class Stage2
{
texture = "z\ace\addons\apl\data\csw_tripod_ags_smdi.paa";
uvSource = "tex";
class uvTransform
{
aside[] = {1.0,0.0,0.0};
up[] = {0.0,1.0,0.0};
dir[] = {0.0,0.0,0.0};
pos[] = {0.0,0.0,0.0};
};
};

Binary file not shown.

Binary file not shown.

Binary file not shown.

38
addons/csw/Cfg3den.hpp Normal file
View File

@ -0,0 +1,38 @@
class ctrlCombo;
class Cfg3DEN {
class Attributes {
class Title;
class Combo: Title {
class Controls {
class Title;
class Value;
};
};
class GVAR(assemblyModeControl): Combo {
class Controls: Controls {
class Title: Title {};
class Value: Value {
class Items {
class Disable {
text = "$STR_DISABLED";
value = 0;
};
class Enable {
text = "$STR_CONFIG_JOYSTICK_ENABLED";
value = 1;
};
class EnableAndEmpty {
text = CSTRING(eden_enableAndEmpty);
value = 2;
};
class Default {
text = "$STR_VEHICLE_DEFAULT";
value = 3;
default = 1;
};
};
};
};
};
};
};

View File

@ -36,6 +36,7 @@ class GVAR(groups) {
rhs_mag_127x108mm_50 = 1;
rhs_mag_127x108mm_100 = 1;
rhs_mag_127x108mm_150 = 1;
rhs_mag_127x108mm_300 = 1;
CUP_150Rnd_127x108_KORD_M = 1;
CUP_50Rnd_127x108_KORD_M = 1;
CUP_50Rnd_TE3_LRT5_127x107_DSHKM_M = 1; // not sure why cup uses 107 for the DSHKM?
@ -52,14 +53,18 @@ class GVAR(groups) {
class ACE_1Rnd_82mm_Mo_HE {
ACE_1Rnd_82mm_Mo_HE = 1;
8Rnd_82mm_Mo_shells = 1;
rhs_12Rnd_m821_HE = 1;
rhs_mag_3vo18_10 = 1;
};
class ACE_1Rnd_82mm_Mo_Smoke {
ACE_1Rnd_82mm_Mo_Smoke = 1;
8Rnd_82mm_Mo_Smoke_white = 1;
rhs_mag_d832du_10 = 1;
};
class ACE_1Rnd_82mm_Mo_Illum {
ACE_1Rnd_82mm_Mo_Illum = 1;
8Rnd_82mm_Mo_Flare_white = 1;
rhs_mag_3vs25m_10 = 1;
};
class ACE_1Rnd_82mm_Mo_HE_Guided {
ACE_1Rnd_82mm_Mo_HE_Guided = 1;
@ -69,7 +74,7 @@ class GVAR(groups) {
ACE_1Rnd_82mm_Mo_HE_LaserGuided = 1;
8Rnd_82mm_Mo_LG = 1;
};
// A3 Titans (Spike) - just use handheld magazines
class Titan_AT {
1Rnd_GAT_missiles = 1;

View File

@ -1,17 +1,3 @@
#define ENABLE_CSW_ATTRIBUTE class Attributes { \
class GVAR(enableCSW) { \
property = QGVAR(enableCSW); \
control = "Checkbox"; \
displayName = CSTRING(eden_enableCSW); \
tooltip = CSTRING(eden_enableCSW_tooltip); \
expression = QUOTE(_this setVariable[ARR_3(QQGVAR(enableCSW), _value, true)];); \
typeName = "BOOL"; \
condition = "objectVehicle"; \
defaultValue = true; \
}; \
}
class CfgVehicles {
class Man;
class CAManBase: Man {
@ -37,14 +23,14 @@ class CfgVehicles {
accuracy = 1000;
destrType = "DestructDefault";
ace_dragging_canDrag = 1;
ace_dragging_dragPosition[] = {0, 2, 0};
ace_dragging_canCarry = 1;
ace_dragging_carryPosition[] = {0, 2, 0};
EGVAR(dragging,canDrag) = 1;
EGVAR(dragging,dragPosition)[] = {0, 2, 0};
EGVAR(dragging,canCarry) = 1;
EGVAR(dragging,carryPosition)[] = {0, 2, 0};
class ACE_Actions {
class ACE_MainActions {
displayName = CSTRING(Tripod_displayName);
displayName = CSTRING(genericTripod_displayName);
selection = "";
distance = 2.5;
condition = "true";
@ -66,21 +52,58 @@ class CfgVehicles {
author = ECSTRING(common,ACETeam);
scope = 2;
model = QPATHTOEF(apl,ACE_CSW_m3_tripod.p3d);
displayName = CSTRING(Tripod_displayName);
displayName = CSTRING(m3Tripod_displayName);
class ADDON {
disassembleTo = QGVAR(m3CarryTripod);
};
};
class GVAR(m3TripodLow): GVAR(m3Tripod) {
author = ECSTRING(common,ACETeam);
scope = 2;
model = QPATHTOEF(apl,ACE_CSW_m3_tripod.p3d);
displayName = CSTRING(Tripod_displayName);
class ADDON {
disassembleTo = QGVAR(m3CarryTripodLow);
};
};
class GVAR(mortarBaseplate): GVAR(m3Tripod) {
class GVAR(kordTripod): GVAR(baseTripod) {
author = ECSTRING(common,ACETeam);
scope = 2;
model = QPATHTOEF(apl,ace_csw_tripod_kord.p3d);
displayName = CSTRING(kordTripod_displayName);
class ADDON {
disassembleTo = QGVAR(kordCarryTripod);
};
};
class GVAR(kordTripodLow): GVAR(kordTripod) {
class ADDON {
disassembleTo = QGVAR(kordCarryTripod);
};
};
class GVAR(sag30Tripod): GVAR(baseTripod) {
author = ECSTRING(common,ACETeam);
scope = 2;
model = QPATHTOEF(apl,ace_csw_tripod_ags30.p3d);
displayName = CSTRING(sag30Tripod_displayName);
class ADDON {
disassembleTo = QGVAR(sag30CarryTripod);
};
};
class GVAR(m220Tripod): GVAR(baseTripod) {
author = ECSTRING(common,ACETeam);
scope = 2;
model = QPATHTOEF(apl,ace_csw_tripod_m220.p3d);
displayName = CSTRING(m220Tripod_displayName);
class ADDON {
disassembleTo = QGVAR(m220CarryTripod);
};
};
class GVAR(spg9Tripod): GVAR(baseTripod) {
author = ECSTRING(common,ACETeam);
scope = 2;
model = QPATHTOEF(apl,ace_csw_tripod_spg9.p3d);
displayName = CSTRING(spg9_Tripod);
class ADDON {
disassembleTo = QGVAR(spg9CarryTripod);
};
};
class GVAR(mortarBaseplate): GVAR(baseTripod) {
author = ECSTRING(common,ACETeam);
scope = 2;
model = QPATHTOEF(apl,ACE_CSW_mortarBaseplate.p3d);
@ -108,6 +131,7 @@ class CfgVehicles {
class StaticMGWeapon: StaticWeapon {};
class HMG_01_base_F: StaticMGWeapon {
// ENABLE_CSW_ATTRIBUTE;
class ADDON {
enabled = 1;
proxyWeapon = QGVAR(HMG_Static);
@ -142,6 +166,7 @@ class CfgVehicles {
class GMG_TriPod;
class GMG_01_base_F: GMG_TriPod {
// ENABLE_CSW_ATTRIBUTE;
class ADDON {
enabled = 1;
proxyWeapon = QGVAR(GMG_20mm); // Weapon Proxy (Shorter Reload Time) [CfgWeapons]
@ -175,6 +200,7 @@ class CfgVehicles {
class AT_01_base_F: StaticMGWeapon {
// ENABLE_CSW_ATTRIBUTE;
class ADDON {
enabled = 1;
proxyWeapon = QGVAR(Titan_AT_Static);
@ -188,6 +214,7 @@ class CfgVehicles {
};
class AA_01_base_F: StaticMGWeapon {
// ENABLE_CSW_ATTRIBUTE;
class ADDON {
enabled = 1;
proxyWeapon = QGVAR(Titan_AA_Static); // Weapon Proxy (Shorter Reload Time) [CfgWeapons]
@ -203,6 +230,7 @@ class CfgVehicles {
class StaticMortar: StaticWeapon {};
class Mortar_01_base_F: StaticMortar {
// ENABLE_CSW_ATTRIBUTE;
class ADDON {
enabled = 1;
magazineLocation = "";

View File

@ -16,7 +16,7 @@ class CfgWeapons {
class WeaponSlotsInfo: WeaponSlotsInfo {
mass = 440;
};
displayName = CSTRING(TripodFolded_displayName);
displayName = CSTRING(m3TripodFolded_displayName);
author = ECSTRING(common,ACETeam);
scope = 2;
model = QPATHTOEF(apl,ACE_CSW_Bag.p3d);
@ -27,8 +27,88 @@ class CfgWeapons {
class ADDON: ADDON {
deploy = QGVAR(m3TripodLow);
};
displayName = CSTRING(TripodLowFolded_displayName);
displayName = CSTRING(m3TripodLowFolded_displayName);
};
class GVAR(kordCarryTripod): Launcher_Base_F {
class ADDON {
type = "mount";
deployTime = 4;
pickupTime = 4;
deploy = QGVAR(kordTripod);
};
class WeaponSlotsInfo: WeaponSlotsInfo {
mass = 350;
};
displayName = CSTRING(kordTripodFolded_displayName);
author = ECSTRING(common,ACETeam);
scope = 2;
model = QPATHTOEF(apl,ACE_CSW_Bag.p3d);
modes[] = {};
picture = QPATHTOF(UI\Tripod_Icon.paa);
};
class GVAR(kordCarryTripodLow): GVAR(kordCarryTripod) {
class ADDON {
deploy = QGVAR(kordTripodLow);
};
displayName = CSTRING(kordTripodFoldedLow_displayName);
};
class GVAR(m220CarryTripod): Launcher_Base_F {
class ADDON {
type = "mount";
deployTime = 10;
pickupTime = 6;
deploy = QGVAR(m220Tripod);
};
class WeaponSlotsInfo: WeaponSlotsInfo {
mass = 210;
};
displayName = CSTRING(m220TripodFolded_displayName);
author = ECSTRING(common,ACETeam);
scope = 2;
model = QPATHTOEF(apl,ACE_CSW_Bag.p3d);
modes[] = {};
picture = QPATHTOF(UI\Tripod_Icon.paa);
};
class GVAR(spg9CarryTripod): Launcher_Base_F {
class ADDON {
type = "mount";
deployTime = 5;
pickupTime = 3;
deploy = QGVAR(spg9Tripod);
};
class WeaponSlotsInfo: WeaponSlotsInfo {
mass = 260;
};
displayName = CSTRING(spg9_TripodFolded);
author = ECSTRING(common,ACETeam);
scope = 2;
model = QPATHTOEF(apl,ACE_CSW_Bag.p3d);
modes[] = {};
picture = QPATHTOF(UI\Tripod_Icon.paa);
};
class GVAR(sag30CarryTripod): Launcher_Base_F {
class ADDON {
type = "mount";
deployTime = 4;
pickupTime = 4;
deploy = QGVAR(sag30Tripod);
};
class WeaponSlotsInfo: WeaponSlotsInfo {
mass = 260;
};
displayName = CSTRING(sag30TripodFolded_displayName);
author = ECSTRING(common,ACETeam);
scope = 2;
model = QPATHTOEF(apl,ACE_CSW_Bag.p3d);
modes[] = {};
picture = QPATHTOF(UI\Tripod_Icon.paa);
};
class GVAR(carryMortarBaseplate): Launcher_Base_F {
class ADDON {
type = "mount";
@ -39,7 +119,7 @@ class CfgWeapons {
class WeaponSlotsInfo: WeaponSlotsInfo {
mass = 290; // M3A1 baseblate weight
};
displayName = CSTRING(mortarBaseplate_displayName);
displayName = CSTRING(mortarBaseplateBag_displayName);
author = ECSTRING(common,ACETeam);
scope = 2;
model = QPATHTOEF(apl,ACE_CSW_Bag.p3d);
@ -48,6 +128,7 @@ class CfgWeapons {
};
// Weapons:
class GVAR(staticATCarry): Launcher_Base_F {
class ADDON {
@ -144,26 +225,18 @@ class CfgWeapons {
class WeaponSlotsInfo: WeaponSlotsInfo {
mass = 620; // M252 Mortar Weight
};
displayName = CSTRING(StaticMortarBag_displayName);
displayName = CSTRING(mk6MortarBag_displayName);
author = ECSTRING(common,ACETeam);
scope = 2;
model = QPATHTOEF(apl,ACE_CSW_Bag.p3d);
modes[] = {};
picture = QPATHTOF(UI\StaticHGMG_Icon.paa);
};
// Proxy Weapons
class HMG_static;
class GVAR(HMG_Static): HMG_Static {
magazineReloadTime = 0.5;
};
class GMG_20mm;
class GVAR(GMG_20mm): GMG_20mm {
magazineReloadTime = 0.5;
};
// Proxy Weapons
CREATE_CSW_PROXY(HMG_Static);
CREATE_CSW_PROXY(GMG_20mm);
class missiles_titan_static;
class EGVAR(javelin,Titan_Static): missiles_titan_static {}; // if ace_javelin does not exist, this will just inherit from the base weapon
class GVAR(Titan_AT_Static): EGVAR(javelin,Titan_Static) {
@ -173,8 +246,8 @@ class CfgWeapons {
class GVAR(Titan_AA_Static) : missiles_titan_static {
magazineReloadTime = 0.5;
};
/*
class GVAR(staticAutoHMGCarry): Launcher_Base_F {
class ADDON {

View File

@ -1,5 +1,7 @@
TRACE_1("",QUOTE(ADDON));
PREP(aceRearmGetCarryMagazines);
PREP(ai_handleFired);
PREP(assemble_canDeployTripod);

View File

@ -1,4 +1,5 @@
#include "script_component.hpp"
#include "script_config_macros_csw.hpp"
class CfgPatches {
class ADDON {
@ -14,6 +15,7 @@ class CfgPatches {
};
};
#include "Cfg3den.hpp"
#include "CfgEventHandlers.hpp"
#include "CfgVehicles.hpp"
#include "CfgWeapons.hpp"

View File

@ -1,53 +0,0 @@
Settings:
defaultBehaviour:
Normal - Untouched [full mags, normal backpack disassemble]
Advanced - [Realistic mags, side unloading]
handleExtraMagazines
Extra magazines on ground
Ignore extra magazines
Vehicle:
3den attribute controls if [useSetting, normal or advanced]
configs:
CfgWeapons:
class GVAR(m3CarryTripod): Launcher_Base_F {
class ADDON {
type = "mount";
deployTime = 3;
pickupTime = 3;
deploy = QGVAR(m3Tripod);
};
class GVAR(staticATCarry): Launcher_Base_F {
class ADDON {
type = "weapon";
deployTime = 8;
pickupTime = 15;
class assembleTo {
tripodCfgVehicle = staticCfgVehicle;
};
};
CfgVehicles:
class GVAR(m3Tripod): // Tripod Example
class ADDON {
disassembleTo = QGVAR(m3CarryTripod);
class Mortar_01_base_F: // Static Weapon Example
class ADDON {
enabled = 1;
magazineLocation = "";
disassembleWeapon = ""; // secondary weapon classname
disassembleTurret = ""; // CfgVehicle
desiredAmmo = 100; //
ammoLoadTime = 5;
ammoUnloadTime = 5;

View File

@ -6,8 +6,11 @@ class CfgSkeletons {
};
class ACE_CSW_Tripod_Skeleton: Default {};
class ACE_CSW_M3_Tripod_Skeleton: Default {};
// class ACE_CSW_FoldedTripod_Skeleton: Default {};
// class ACE_CSW_ammoBox_Skeleton: Default {};
class ace_csw_tripod_ags30_Skeleton: Default {};
class ace_csw_tripod_kord_Skeleton: Default {};
class ace_csw_tripod_m122_Skeleton: Default {};
class ace_csw_tripod_m220_Skeleton: Default {};
class ace_csw_tripod_spg9_Skeleton: Default {};
class ACE_CSW_WeaponBag_Skeleton: Default {};
class ACE_CSW_mortarBaseplate_Skeleton: Default {};
};
@ -27,16 +30,31 @@ class CfgModels {
sections[] = {};
skeletonName = "ACE_CSW_M3_Tripod_Skeleton";
};
/* class ACE_CSW_FoldedTripod: Default {
class ace_csw_tripod_ags30 : Default {
sectionsInherit = "";
sections[] = {};
skeletonName = "ACE_CSW_FoldedTripod_Skeleton";
skeletonName = "ace_csw_tripod_ags30_Skeleton";
};
class ACE_CSW_ammoBox: Default {
class ace_csw_tripod_kord : Default {
sectionsInherit = "";
sections[] = {};
skeletonName = "ACE_CSW_ammoBox_Skeleton";
}; */
skeletonName = "ace_csw_tripod_kord_Skeleton";
};
class ace_csw_tripod_m122 : Default {
sectionsInherit = "";
sections[] = {};
skeletonName = "ace_csw_tripod_m122_Skeleton";
};
class ace_csw_tripod_m220 : Default {
sectionsInherit = "";
sections[] = {};
skeletonName = "ace_csw_tripod_m220_Skeleton";
};
class ace_csw_tripod_spg9 : Default {
sectionsInherit = "";
sections[] = {};
skeletonName = "ace_csw_tripod_spg9_Skeleton";
};
class ACE_CSW_Bag: Default {
sectionsInherit = "";
sections[] = {};

View File

@ -0,0 +1,50 @@
#include "script_component.hpp"
/*
* Author: PabstMirror
* Helper function for ace_rearm; Gets magazines that should be loaded by csw
*
* Arguments:
* 0: Vehicle <OBJECT>
* 1: Specific Turret or pass bool to check all turrets <ARRAY><BOOL>(default: true)
*
* Return Value:
* [0: compatible veh mags, 1: carry mags] <ARRAY>
*
* Example:
* [cursorObject, [0]] call ace_csw_fnc_aceRearmGetCarryMagazines
*
* Public: No
*/
params ["_vehicle", ["_targetTurret", true, [[], true]]];
if (!(_vehicle isKindOf "StaticWeapon")) exitWith { [[],[]] }; // limit to statics for now
// Assembly mode: [0=disabled, 1=enabled, 2=enabled&unload, 3=default]
if ((GVAR(ammoHandling) == 0) && {!([false, true, true, GVAR(defaultAssemblyMode)] select (_vehicle getVariable [QGVAR(assemblyMode), 3]))}) exitWith { [[],[]] };
private _turretMagsCSW = [];
private _allCarryMags = [];
{
private _turretPath = _x;
if ((_targetTurret isEqualTo true) || {_turretPath isEqualTo _targetTurret}) then {
{
private _weapon = _x;
{
private _xMag = _x;
private _carryMag = GVAR(vehicleMagCache) getVariable _xMag;
if (isNil "_carryMag") then {
private _groups = "getNumber (_x >> _xMag) == 1" configClasses (configFile >> QGVAR(groups));
_carryMag = configName (_groups param [0, configNull]);
GVAR(vehicleMagCache) setVariable [_x, _carryMag];
TRACE_2("setting cache",_xMag,_carryMag);
};
if (_carryMag != "") then {
_turretMagsCSW pushBackUnique _xMag;
_allCarryMags pushBackUnique _carryMag;
};
} forEach ([_weapon] call CBA_fnc_compatibleMagazines);
} forEach (_vehicle weaponsTurret _turretPath);
};
} forEach (allTurrets _vehicle);
[_turretMagsCSW, _allCarryMags]

View File

@ -75,7 +75,7 @@ if (_bestAmmoToSend == -1) exitWith {ERROR("No ammo");};
// Remove the mag from the source
if (_reloadSource isKindOf "CaManBase") then {
[_reloadSource, _reloadMag, _bestAmmoToSend] call ace_common_fnc_removeSpecificMagazine;
[_reloadSource, _reloadMag, _bestAmmoToSend] call EFUNC(common,removeSpecificMagazine);
} else {
[_reloadSource, _reloadMag, 1, _bestAmmoToSend] call CBA_fnc_removeMagazineCargo;
};

View File

@ -17,9 +17,10 @@
params ["_staticWeapon"];
private _assemblyMode = [false, true, GVAR(defaultAssemblyMode)] select (_staticWeapon getVariable [QGVAR(assemblyMode), 2]);
private _crewed = (crew _staticWeapon) isEqualTo [];
// Assembly mode: [0=disabled, 1=enabled, 2=enabled&unload, 3=default]
private _assemblyMode = [false, true, true, GVAR(defaultAssemblyMode)] select (_staticWeapon getVariable [QGVAR(assemblyMode), 3]);
private _notCrewed = (crew _staticWeapon) isEqualTo [];
private _deadCrew = !(alive (gunner _staticWeapon)); // need to eject body???
_assemblyMode && {(!_crewed) || _deadCrew}
_assemblyMode && {_notCrewed || _deadCrew}

View File

@ -32,6 +32,12 @@
// Create a tripod
private _cswTripod = createVehicle [_tripodClassname, [0, 0, 0], [], 0, "NONE"];
// Because the tripod can be a "full weapon" we disable any data that will allow it to be loaded
_cswTripod setVariable [QGVAR(assemblyMode), 2, true]; // Explicitly set enabled&unload assembly mode and broadcast
if (!GVAR(defaultAssemblyMode)) then {
TRACE_1("global disableVanillaAssembly event",_cswTripod); // handles it being assembled when setting is disabled
[QGVAR(disableVanillaAssembly), [_cswTripod]] call CBA_fnc_globalEvent;
};
private _posATL = _player getRelPos [2, 0];
_posATL set [2, ((getPosATL _player) select 2) + 0.5];

View File

@ -43,15 +43,18 @@
[{
params ["_assembledClassname", "_tripodDir", "_tripodPos"];
private _csw = createVehicle [_assembledClassname, [0, 0, 0], [], 0, "NONE"];
_csw setVariable [QGVAR(assemblyMode), 1, true]; // Explicitly set advanced assembly mode and broadcast
_csw setVariable [QGVAR(emptyWeapon), true, false]; // unload gun, shouldn't need broadcast for this as it will be local to us
// Assembly mode: [0=disabled, 1=enabled, 2=enabled&unload, 3=default]
_csw setVariable [QGVAR(assemblyMode), 2, true]; // Explicitly set advanced assembly mode + unload, and broadcast
if (!GVAR(defaultAssemblyMode)) then {
TRACE_1("global disableVanillaAssembly event",_csw); // handles it being assembled when setting is disabled
[QGVAR(disableVanillaAssembly), [_csw]] call CBA_fnc_globalEvent;
};
_csw setDir _tripodDir;
_csw setPosATL _tripodPos;
_csw setVectorUp (surfaceNormal _tripodPos);
if ((_tripodPos select 2) < 0.5) then {
_csw setVectorUp (surfaceNormal _tripodPos);
};
TRACE_2("csw placed",_csw,_assembledClassname);
}, [_assembledClassname, _tripodDir, _tripodPos]] call CBA_fnc_execNextFrame;
};

View File

@ -25,7 +25,8 @@
private _pickupTime = getNumber(configFile >> "CfgWeapons" >> _carryWeaponClassname >> QUOTE(ADDON) >> "pickupTime");
TRACE_4("",typeOf _staticWeapon,_carryWeaponClassname,_turretClassname,_pickupTime);
if (!isClass (configFile >> "CfgWeapons" >> _carryWeaponClassname)) exitWith {ERROR_1("bad weapon classname [%1]",_carryWeaponClassname);};
if (!isClass (configFile >> "CfgVehicles" >> _turretClassname)) exitWith {ERROR_1("bad turret classname [%1]",_turretClassname);};
// Turret classname can equal nothing if the deploy bag is the "whole" weapon. e.g Kornet, Metis, other ATGMs
if (!(_turretClassname isEqualTo "") && {!isClass (configFile >> "CfgVehicles" >> _turretClassname)}) exitWith {ERROR_1("bad turret classname [%1]",_turretClassname);};
private _onFinish = {
params ["_args"];
@ -53,29 +54,33 @@
};
} forEach (magazinesAllTurrets _staticWeapon);
private _cswTripod = createVehicle [_turretClassname, [0, 0, 0], [], 0, "NONE"];
[_cswTripod, _staticWeapon] call (missionNamespace getVariable _onDisassembleFunc);
if !(_turretClassname isEqualTo "") then {
private _cswTripod = createVehicle [_turretClassname, [0, 0, 0], [], 0, "NONE"];
// Delay a frame so weapon has a chance to be deleted
[{
params ["_cswTripod", "_weaponDir", "_weaponPos"];
_cswTripod setDir _weaponDir;
_cswTripod setPosATL _weaponPos;
_cswTripod setVelocity [0, 0, -0.05];
_cswTripod setVectorUp (surfaceNormal _weaponPos);
}, [_cswTripod, _weaponDir, _weaponPos]] call CBA_fnc_execNextFrame;
[_cswTripod, _staticWeapon] call (missionNamespace getVariable _onDisassembleFunc);
};
LOG("delete weapon");
deleteVehicle _staticWeapon;
// Delay a frame so weapon has a chance to be deleted
[{
params ["_player", "_cswTripod", "_weaponDir", "_weaponPos", "_carryWeaponClassname"];
_cswTripod setDir _weaponDir;
_cswTripod setPosATL _weaponPos;
_cswTripod setVelocity [0, 0, -0.05];
_cswTripod setVectorUp (surfaceNormal _weaponPos);
params ["_player", "_weaponPos", "_carryWeaponClassname"];
if ((alive _player) && {(secondaryWeapon _player) == ""}) exitWith {
_player addWeapon _carryWeaponClassname;
};
private _weaponRelPos = _cswTripod getRelPos RELATIVE_DIRECTION(90);
private _weaponRelPos = _weaponPos getPos RELATIVE_DIRECTION(90);
private _weaponHolder = createVehicle ["groundWeaponHolder", [0, 0, 0], [], 0, "NONE"];
_weaponHolder setDir random [0, 180, 360];
_weaponHolder setPosATL [_weaponRelPos select 0, _weaponRelPos select 1, _weaponPos select 2];
_weaponHolder addWeaponCargoGlobal [_carryWeaponClassname, 1];
}, [_player, _cswTripod, _weaponDir, _weaponPos, _carryWeaponClassname]] call CBA_fnc_execNextFrame;
}, [_player, _weaponPos, _carryWeaponClassname]] call CBA_fnc_execNextFrame;
LOG("delete weapon");
deleteVehicle _staticWeapon;
LOG("end");
};

View File

@ -7,30 +7,33 @@
* 0: Weapon <OBJECT>
* 1: Turret <ARRAY>
* 2: Proxy weapon needed <BOOL>
* 2: Weapon should be emptied <BOOL>
*
* Return Value:
* None
*
* Example:
* [weapon, [0], true] call ace_csw_fnc_proxyWeapon
* [weapon, [0], true, false] call ace_csw_fnc_proxyWeapon
*
* Public: No
*/
params ["_staticWeapon", "_turret", "_needed"];
params ["_staticWeapon", "_turret", "_needed", "_emptyWeapon"];
TRACE_4("proxyWeapon",_staticWeapon,_turret,_needed,_emptyWeapon);
if (_staticWeapon getVariable [format [QGVAR(proxyHandled_%1), _turret], false]) exitWith { TRACE_1("proxy weapon already handled",_staticWeapon); };
if (_staticWeapon getVariable [format [QGVAR(proxyHandled_%1), _turret], false]) exitWith { TRACE_1("already handled",typeOf _staticWeapon); };
private _typeOf = typeOf _staticWeapon;
private _proxyWeapon = getText(configFile >> "CfgVehicles" >> _typeOf >> "ace_csw" >> "proxyWeapon");
TRACE_5("proxyWeapon",_staticWeapon,_turret,_needed,_typeOf,_proxyWeapon);
if (_proxyWeapon == "") exitWith { TRACE_1("proxyWeapon not defined",_proxyWeapon); };
TRACE_2("",_typeOf,_proxyWeapon);
if (_proxyWeapon == "") exitWith {};
private _currentWeapon = (_staticWeapon weaponsTurret [0]) param [0, "#none"];
if ((missionNamespace getVariable [_proxyWeapon, objNull]) isEqualType {}) then { // check if string is a function
TRACE_1("Calling proxyWeapon function",_proxyWeapon);
_proxyWeapon = [_staticWeapon, _turret, _currentWeapon, _needed] call (missionNamespace getVariable _proxyWeapon);
// This function may replace magazines or do other things to the static weapon
_proxyWeapon = [_staticWeapon, _turret, _currentWeapon, _needed, _emptyWeapon] call (missionNamespace getVariable _proxyWeapon);
_needed = _proxyWeapon != "";
};
if (!_needed) exitWith { TRACE_2("not needed",_needed,_proxyWeapon); };

View File

@ -43,7 +43,7 @@ private _return = [];
if (((getNumber (_carryGroup >> _x)) == 1) && {_loadInfo = [_vehicle, _turretPath, _carryMag, _player] call FUNC(reload_canLoadMagazine); _loadInfo select 0}) exitWith {
_return pushBack [_carryMag, _turretPath, _loadInfo];
};
} forEach (getArray (configFile >> "CfgWeapons" >> _weapon >> "magazines"));
} forEach ([_weapon] call CBA_fnc_compatibleMagazines);
} forEach _carriedMagazines;
} forEach (_vehicle weaponsTurret _turretPath);
} forEach (allTurrets _vehicle);

View File

@ -52,7 +52,7 @@ if (_canAdd) then {
TRACE_1("Removing emtpy mag",_loadedMag);
_vehicle removeMagazinesTurret [_loadedMag, _turret];
};
[_vehicle, _turret, true] call FUNC(proxyWeapon); // Check if we need to add proxy weapon now
[_vehicle, _turret, true, false] call FUNC(proxyWeapon); // Check if we need to add proxy weapon now
private _newMag = [_vehicle, _turret, _carryMag] call FUNC(reload_getVehicleMagazine);
TRACE_2("Adding new mag",_newMag,_ammoUsed);
_vehicle addMagazineTurret [_newMag, _turret, _ammoUsed];

View File

@ -31,10 +31,13 @@ if (_configEnabled && {_staticWeapon turretLocal [0]}) then { // if turret is lo
[{
params ["_staticWeapon"];
if (!alive _staticWeapon) exitWith { TRACE_1("dead/deleted",_staticWeapon); };
private _assemblyMode = [false, true, GVAR(defaultAssemblyMode)] select (_staticWeapon getVariable [QGVAR(assemblyMode), 2]);
// Assembly mode: [0=disabled, 1=enabled, 2=enabled&unload, 3=default]
private _assemblyModeIndex = _staticWeapon getVariable [QGVAR(assemblyMode), 3];
private _emptyWeapon = _assemblyModeIndex isEqualTo 2;
private _assemblyMode = [false, true, true, GVAR(defaultAssemblyMode)] select _assemblyModeIndex;
TRACE_2("turretLocal",_staticWeapon,_assemblyMode);
[_staticWeapon, [0], _assemblyMode] call FUNC(proxyWeapon);
[_staticWeapon, _assemblyMode] call FUNC(staticWeaponInit_unloadExtraMags);
[_staticWeapon, [0], _assemblyMode, _emptyWeapon] call FUNC(proxyWeapon);
[_staticWeapon, _assemblyMode, _emptyWeapon] call FUNC(staticWeaponInit_unloadExtraMags);
}, [_staticWeapon]] call CBA_fnc_execNextFrame; // need to wait a frame to allow setting object vars during assembly
};
@ -42,7 +45,7 @@ if (_assemblyConfig) then {
[{
params ["_staticWeapon"];
if (!alive _staticWeapon) exitWith { TRACE_1("dead/deleted",_staticWeapon); };
private _assemblyMode = [false, true, GVAR(defaultAssemblyMode)] select (_staticWeapon getVariable [QGVAR(assemblyMode), 2]);
private _assemblyMode = [false, true, true, GVAR(defaultAssemblyMode)] select (_staticWeapon getVariable [QGVAR(assemblyMode), 3]);
TRACE_2("assemblyConfig present",_staticWeapon,_assemblyMode);
if (_assemblyMode) then { // Disable vanilla assembly if assemblyMode eanbled
[QGVAR(disableVanillaAssembly), [_staticWeapon]] call CBA_fnc_localEvent;
@ -65,7 +68,7 @@ if (hasInterface && {!(_typeOf in GVAR(initializedStaticTypes))}) then {
private _magazineLocation = getText (configFile >> "CfgVehicles" >> _typeOf >> QUOTE(ADDON) >> "magazineLocation");
private _condition = { //IGNORE_PRIVATE_WARNING ["_target", "_player"];
// If magazine handling is enabled or weapon assembly/disassembly is enabled we enable ammo handling
if ((GVAR(ammoHandling) == 0) && {!([false, true, GVAR(defaultAssemblyMode)] select (_staticWeapon getVariable [QGVAR(assemblyMode), 2]))}) exitWith { false };
if ((GVAR(ammoHandling) == 0) && {!([false, true, true, GVAR(defaultAssemblyMode)] select (_target getVariable [QGVAR(assemblyMode), 3]))}) exitWith { false };
[_player, _target, ["isNotSwimming", "isNotSitting"]] call EFUNC(common,canInteractWith)
};
private _childenCode = {

View File

@ -5,24 +5,19 @@
*
* Arguments:
* 0: Weapon <OBJECT>
* 1: Using advanced assembly <BOOL>
*
* Return Value:
* None
*
* Example:
* [weapon] call ace_csw_fnc_staticWeaponInit_unloadExtraMags
* [cursorObject, false] call ace_csw_fnc_staticWeaponInit_unloadExtraMags
*
* Public: No
*/
params ["_staticWeapon"];
TRACE_1("staticWeaponInit_unloadExtraMags",_staticWeapon);
if (!alive _staticWeapon) exitWith {TRACE_1("dead/deleted",alive _staticWeapon);};
private _assemblyMode = [false, true, GVAR(defaultAssemblyMode)] select (_staticWeapon getVariable [QGVAR(assemblyMode), 2]);
private _emptyWeapon = _staticWeapon getVariable [QGVAR(emptyWeapon), false];
TRACE_2("",_assemblyMode,_emptyWeapon);
params ["_staticWeapon", "_assemblyMode", "_emptyWeapon"];
TRACE_3("staticWeaponInit_unloadExtraMags",_staticWeapon,_assemblyMode,_emptyWeapon);
if (!_assemblyMode) exitWith {};
private _desiredAmmo = getNumber (configFile >> "CfgVehicles" >> (typeOf _staticWeapon) >> QUOTE(ADDON) >> "desiredAmmo");
@ -31,7 +26,7 @@ if (_emptyWeapon) then {
_desiredAmmo = 0;
_storeExtraMagazines = false;
};
TRACE_2("settings",_desiredAmmo,_storeExtraMagazines);
TRACE_3("settings",_emptyWeapon,_desiredAmmo,_storeExtraMagazines);
private _magsToRemove = [];
private _loadedMagazineInfo = [];

View File

@ -2,10 +2,10 @@
#define COMPONENT_BEAUTIFIED Crew-Served Weapons
#include "\z\ace\addons\main\script_mod.hpp"
#define FAST_PROGRESSBARS
#define DEBUG_MODE_FULL
#define DISABLE_COMPILE_CACHE
#define ENABLE_PERFORMANCE_COUNTERS
// #define FAST_PROGRESSBARS
// #define DEBUG_MODE_FULL
// #define DISABLE_COMPILE_CACHE
// #define ENABLE_PERFORMANCE_COUNTERS
#ifdef DEBUG_ENABLED_CSW
#define DEBUG_MODE_FULL

View File

@ -0,0 +1,15 @@
#define CREATE_CSW_PROXY(weapon) class ##weapon; class GVAR(weapon): ##weapon { magazineReloadTime = 0.5; }
// Need to be careful about breaking Attributes inheritance, doesn't seem to be any standard
#define ENABLE_CSW_ATTRIBUTE class Attributes { \
class EGVAR(CSW,assemblyMode) { \
property = QEGVAR(CSW,assemblyMode); \
control = QEGVAR(CSW,assemblyModeControl); \
displayName = ECSTRING(CSW,eden_enableCSW); \
tooltip = ECSTRING(CSW,eden_enableCSW_tooltip); \
expression = QUOTE( if (_value != 3) then {_this setVariable [ARR_3('%s',_value,true)]} ); \
typeName = "NUMBER"; \
condition = "objectVehicle"; \
defaultValue = 3; \
}; \
}

View File

@ -4,9 +4,6 @@
<Key ID="STR_ACE_CSW_displayName">
<English>Crew Served Weapons</English>
</Key>
<Key ID="STR_ACE_CSW_Tripod_displayName">
<English>CSW Tripod</English>
</Key>
<Key ID="STR_ACE_CSW_PlaceTripod_displayName">
<English>Place Tripod</English>
</Key>
@ -75,12 +72,6 @@
<Key ID="STR_ACE_CSW_ammoHandling_description">
<English>Allow loading and unloading magazines</English>
</Key>
<Key ID="STR_ACE_CSW_aiReloading_displayName">
<English>AI Reloading</English>
</Key>
<Key ID="STR_ACE_CSW_aiReloading_description">
<English>AI will attempt to reload static weapons with available ammo</English>
</Key>
<Key ID="STR_ACE_CSW_progressBarTimeCoefficent_displayName">
<English>Interaction Time Coefficent</English>
</Key>
@ -90,9 +81,6 @@
<Key ID="STR_ACE_CSW_Pickup_displayName">
<English>Pickup Tripod</English>
</Key>
<Key ID="STR_ACE_CSW_Move_displayName">
<English>Move Tripod</English>
</Key>
<Key ID="STR_ACE_CSW_MountWeapon_displayName">
<English>Mount Weapon</English>
</Key>
@ -102,12 +90,6 @@
<Key ID="STR_ACE_CSW_AssembleCSW_progressBar">
<English>Assembling Gun...</English>
</Key>
<Key ID="STR_ACE_CSW_LoadingAmmo_progressBar">
<English>Loading Ammo...</English>
</Key>
<Key ID="STR_ACE_CSW_UnloadingAmmo_progressBar">
<English>Unloading Ammo...</English>
</Key>
<Key ID="STR_ACE_CSW_PickupTripod_progressBar">
<English>Picking Up Tripod...</English>
</Key>
@ -120,44 +102,17 @@
<Key ID="STR_ACE_CSW_eden_enableCSW_tooltip">
<English>Enables Crew Served ability on this weapon</English>
</Key>
<Key ID="STR_ACE_CSW_genericDescription">
<English>Used to reload crew served weapons</English>
<Key ID="STR_ACE_CSW_eden_enableAndEmpty">
<English>Enabled and Leave Weapon Empty</English>
</Key>
<Key ID="STR_ACE_CSW_TripodFolded_displayName">
<English>[CSW] Deployable Tripod</English>
</Key>
<Key ID="STR_ACE_CSW_TripodLowFolded_displayName">
<English>[CSW] Deployable Tripod (Low)</English>
</Key>
<Key ID="STR_ACE_CSW_mortarBaseplate_displayName">
<English>[CSW] Mk6 Mortar Baseplate</English>
</Key>
<Key ID="STR_ACE_CSW_StaticMortarBag_displayName">
<English>[CSW] Mk6 Mortar Tube</English>
</Key>
<Key ID="STR_ACE_CSW_StaticATWeapon_displayName">
<English>[CSW] Mini-Spike Launcher (AT)</English>
</Key>
<Key ID="STR_ACE_CSW_StaticAAWeapon_displayName">
<English>[CSW] Mini-Spike Launcher (AA)</English>
</Key>
<Key ID="STR_ACE_CSW_StaticHMGWeapon_displayName">
<English>[CSW] XM312</English>
</Key>
<Key ID="STR_ACE_CSW_StaticAutoHMGWeapon_displayName">
<English>[CSW] XM312A</English>
</Key>
<Key ID="STR_ACE_CSW_StaticHMGTallWeapon_displayName">
<English>[CSW] XM312 (High)</English>
</Key>
<Key ID="STR_ACE_CSW_StaticGMGWeapon_displayName">
<English>[CSW] XM307</English>
</Key>
<Key ID="STR_ACE_CSW_StaticAutoGMGWeapon_displayName">
<English>[CSW] XM307A</English>
</Key>
<Key ID="STR_ACE_CSW_StaticGMGTallWeapon_displayName">
<English>[CSW] XM307 (High)</English>
<Key ID="STR_ACE_CSW_genericTripod_displayName">
<English>Tripod</English>
<French>Trépied</French>
<Spanish>Trípode</Spanish>
<Italian>Treppiede</Italian>
<Polish>Trójnóg</Polish>
<German>Dreibein</German>
<Turkish>Üçayak</Turkish>
</Key>
<Key ID="STR_ACE_CSW_StaticATBag_displayName">
<English>[CSW] Static Mini-Spike Launcher (AT)</English>
@ -171,30 +126,12 @@
<Key ID="STR_ACE_CSW_StaticAutoHMGBag_displayName">
<English>[CSW] Static XM312 Gun (Autonomous)</English>
</Key>
<Key ID="STR_ACE_CSW_StaticHMGTallBag_displayName">
<English>[CSW] Static XM312 Gun (High)</English>
</Key>
<Key ID="STR_ACE_CSW_StaticGMGBag_displayName">
<English>[CSW] Static XM307 Gun</English>
</Key>
<Key ID="STR_ACE_CSW_StaticAutoGMGBag_displayName">
<English>[CSW] Static XM307 Gun (Autonomous)</English>
</Key>
<Key ID="STR_ACE_CSW_StaticGMGTallBag_displayName">
<English>[CSW] Static XM307 Gun (High)</English>
</Key>
<Key ID="STR_ACE_CSW_HMGStatic_displayName">
<English>[CSW] HMG Static</English>
</Key>
<Key ID="STR_ACE_CSW_GMGStatic_displayName">
<English>[CSW] GMG Static</English>
</Key>
<Key ID="STR_ACE_CSW_ATStatic_displayName">
<English>[CSW] AT Static</English>
</Key>
<Key ID="STR_ACE_CSW_AAStatic_displayName">
<English>[CSW] AA Static</English>
</Key>
<Key ID="STR_ACE_CSW_127x108_displayName">
<English>[CSW] 12.7x108mm HMG Belt</English>
</Key>
@ -213,8 +150,89 @@
<Key ID="STR_ACE_CSW_GMGBelt_displayName">
<English>[CSW] 20mm Grenade GMG Belt</English>
</Key>
<Key ID="STR_ACE_CSW_mag_127x108">
<English>[CSW] 12.7 x 108 mm Ammo Belt</English>
<Key ID="STR_ACE_CSW_m3Tripod_displayName">
<English>M3 Tripod</English>
</Key>
<Key ID="STR_ACE_CSW_kordTripodFolded_displayName">
<English>[CSW] 6P57 Deployable Tripod</English>
</Key>
<Key ID="STR_ACE_CSW_kordTripodFoldedLow_displayName">
<English>[CSW] 6P57 Deployable Tripod (Low)</English>
</Key>
<Key ID="STR_ACE_CSW_m220TripodFolded_displayName">
<English>[CSW] M220 Deployable Tripod</English>
</Key>
<Key ID="STR_ACE_CSW_sag30TripodFolded_displayName">
<English>[CSW] SAG-30 Deployable Tripod</English>
</Key>
<Key ID="STR_ACE_CSW_kordTripod_displayName">
<English>6P57 Tripod</English>
</Key>
<Key ID="STR_ACE_CSW_sag30Tripod_displayName">
<English>SAG-30 Tripod</English>
</Key>
<Key ID="STR_ACE_CSW_m220Tripod_displayName">
<English>M220 Tripod</English>
</Key>
<Key ID="STR_ACE_CSW_m3TripodFolded_displayName">
<English>[CSW] M3 Deployable Tripod</English>
</Key>
<Key ID="STR_ACE_CSW_m3TripodLowFolded_displayName">
<English>[CSW] M3 Deployable Tripod (Low)</English>
</Key>
<Key ID="STR_ACE_CSW_mortarBaseplateBag_displayName">
<English>[CSW] Mortar Baseplate</English>
</Key>
<Key ID="STR_ACE_CSW_mortarBaseplate_displayName">
<English>Mortar Baseplate</English>
</Key>
<Key ID="STR_ACE_CSW_mk6MortarBag_displayName">
<English>[CSW] Mk6 Mortar Tube</English>
</Key>
<Key ID="STR_ACE_CSW_m252_tube">
<English>[CSW] M252 Tube Bag</English>
</Key>
<Key ID="STR_ACE_CSW_m2_gun">
<English>[CSW] M2 Gun Bag</English>
</Key>
<Key ID="STR_ACE_CSW_mk19_gun">
<English>[CSW] MK19 Gun Bag</English>
</Key>
<Key ID="STR_ACE_CSW_tow_tube">
<English>[CSW] BGM-71 TOW Launcher Bag</English>
</Key>
<Key ID="STR_ACE_CSW_dshk_gun">
<English>[CSW] DSHK Gun Bag</English>
</Key>
<Key ID="STR_ACE_CSW_2b14_tube">
<English>[CSW] 2B14 Tube Bag</English>
</Key>
<Key ID="STR_ACE_CSW_nsv_gun">
<English>[CSW] NSV Gun Bag</English>
</Key>
<Key ID="STR_ACE_CSW_kord_gun">
<English>[CSW] KORD Gun Bag</English>
</Key>
<Key ID="STR_ACE_CSW_ags30_gun">
<English>[CSW] AGS-30 Gun Bag</English>
</Key>
<Key ID="STR_ACE_CSW_metis_tube">
<English>[CSW] 9k115 Metis Launcher Bag</English>
</Key>
<Key ID="STR_ACE_CSW_kornet_launcher">
<English>[CSW] 9m113 Kornet Launcher</English>
</Key>
<Key ID="STR_ACE_CSW_spg9_Tripod">
<English>SPG-9 Tripod</English>
</Key>
<Key ID="STR_ACE_CSW_spg9_TripodFolded">
<English>[CSW] SPG-9 Deployable Tripod</English>
</Key>
<Key ID="STR_ACE_CSW_spg9_tube">
<English>[CSW] SPG-9 Launcher Bag</English>
</Key>
<Key ID="STR_ACE_CSW_spg9m_tube">
<English>[CSW] SPG-9M Launcher Bag</English>
</Key>
</Package>
</Project>

View File

@ -2,7 +2,7 @@ class CfgAmmo {
class ammo_Penetrator_Base;
class M_Scalpel_AT;
class Rocket_03_AP_F;
class GVAR(penetrator_super): ammo_Penetrator_Base {
caliber = 60;
warheadName = "HEAT";
@ -25,7 +25,7 @@ class CfgAmmo {
airFriction = 0.5;
fuseDistance = 75;
whistleDist = 2;
hit = 100;
indirectHit = 9;
indirectHitRange = 1;
@ -34,7 +34,7 @@ class CfgAmmo {
cost = 500;
simulationStep = 0.005;
maxControlRange = 1500;
class ace_missileguidance {
minDeflection = 0;
maxDeflection = 0;
@ -59,7 +59,7 @@ class CfgAmmo {
correctionDistance = 30;
missileLeadDistance = 0;
offsetFromCrosshair[] = { 0, 0, 0 };
serviceInterval = 0.33; // how many seconds between pops
serviceCharges = 32; // how many charges are in this missile
serviceChargeAcceleration = 6.5;
@ -69,7 +69,7 @@ class CfgAmmo {
attackProfiles[] = {"DRAGON"};
};
};
class GVAR(super) : GVAR(dragonBase) {
submunitionAmmo = QGVAR(penetrator_super);
submunitionDirectionType = "SubmunitionModelDirection";
@ -96,7 +96,7 @@ class CfgAmmo {
correctionDistance = 30;
missileLeadDistance = 0;
serviceInterval = 0.33; // how many seconds between pops
serviceCharges = 60; // how many charges are in this missile
serviceChargeAcceleration = 6.5;
@ -106,7 +106,7 @@ class CfgAmmo {
attackProfiles[] = {"DRAGON"};
};
};
class ShellBase;
class GVAR(serviceCharge) : ShellBase {
hit = 1;

View File

@ -122,11 +122,13 @@ class CfgVehicles {
displayName = CSTRING(attachSight);
condition = QUOTE(call FUNC(sightCanAttach));
statement = QUOTE(call FUNC(sightAttach));
icon = QPATHTOF(data\m47_daysight_interaction_attach.paa);
};
class GVAR(detachSight) {
displayName = CSTRING(detachSight);
condition = QUOTE(call FUNC(sightCanDetach));
statement = QUOTE(call FUNC(sightDetach));
icon = QPATHTOF(data\m47_daysight_interaction_detach.paa);
};
};
};

View File

@ -10,22 +10,22 @@ class CfgWeapons {
class launch_Titan_F: launch_Titan_base {
class WeaponSlotsInfo;
};
class GVAR(super): launch_Titan_F {
model = QPATHTOF(models\ace_m47_magazine.p3d);
picture = QPATHTOF(data\m47_dragon_item_ca.paa);
magazines[] = {};
displayName = CSTRING(dragonName);
displayName = CSTRING(dragonNameCarry); // add [CSW] prefix to make it clearer in arsenal that this is a deployable weapon
descriptionShort = CSTRING(dragonDescription);
scope = 2;
class ACE_CSW {
type = "mount";
deployTime = 2;
pickupTime = 2;
deploy = QGVAR(staticBase);
};
class WeaponSlotsInfo: WeaponSlotsInfo {
mass = 253;
};
@ -36,14 +36,14 @@ class CfgWeapons {
EGVAR(overpressure,angle) = 90;
EGVAR(overpressure,range) = 30;
EGVAR(overpressure,damage) = 0.85;
initSpeed = 120;
displayName = CSTRING(dragonName);
descriptionShort = CSTRING(dragonDescription);
magazines[] = { QGVAR(super) };
};
};
// need a weapon in order to rotate turret
class GVAR(dummyStatic): Default {
cursor = "";
@ -55,7 +55,7 @@ class CfgWeapons {
optics = 0;
enableAttack = 0;
};
class GVAR(sight): Binocular {
displayName = CSTRING(sightName);
model = QPATHTOF(models\ace_m47_optic.p3d);

View File

@ -19,10 +19,14 @@
GVAR(pfID) = [{
params ["_args"];
(_this select 0) params ["_vehicle", "_lastView"];
if ((!alive _vehicle) || {!alive ACE_player} || {(vehicle ACE_player) != _vehicle}) exitWith {
TRACE_1("exiting PFEH",GVAR(pfID));
[GVAR(pfID)] call CBA_fnc_removePerFrameHandler;
if ((alive _vehicle) && {!alive gunner _vehicle}) then {
TRACE_1("reseting rest rotate anim",_vehicle);
_vehicle animate ["rest_rotate", -0.35];
};
};
if (cameraView in ["INTERNAL", "EXTERNAL"]) then {

View File

@ -6,7 +6,7 @@ class CfgPatches {
units[] = {};
weapons[] = {};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_common","ace_missileguidance","ace_hot","ace_csw"};
requiredAddons[] = {"ace_hot","ace_csw"};
author = ECSTRING(common,ACETeam);
authors[] = {"Brandon (TCVM)"};
url = ECSTRING(main,URL);

Binary file not shown.

Binary file not shown.

View File

@ -30,9 +30,9 @@ if ((_distanceToProjectile > _seekerMaxRangeSqr) || _wireCut || { !alive _shoote
// wire snap, random direction
if (!_wireCut) then {
_attackProfileStateParams set [1, true];
playSound3D ["a3\sounds_f\air\sfx\SL_rope_break.wss", objNull, false, AGLtoASL (_shooter modelToWorld _wireCutSource), 150, 1, 25];
playSound3D ["a3\sounds_f\air\sfx\SL_rope_break.wss", objNull, false, AGLtoASL (_shooter modelToWorld _wireCutSource), 5, 1, 25];
};
if (_serviceChargeCount > 0 && {(_lastTime - CBA_missionTime) <= 0}) then {
_attackProfileStateParams set [5, CBA_missionTime + 0.05 + random 0.1];
private _randomVector = [(random 2) - 1, random 1, (random 2) - 1];
@ -41,7 +41,7 @@ if ((_distanceToProjectile > _seekerMaxRangeSqr) || _wireCut || { !alive _shoote
_charge setPosASL (_projectilePos vectorAdd ((_randomVector vectorMultiply -1) vectorMultiply 0.025));
_attackProfileStateParams set [7, _serviceChargeCount - 1];
};
_retPos
};
@ -50,10 +50,10 @@ if (_distanceToProjectile <= _seekerMinRangeSqr || { _serviceChargeCount <= 0 }
// if the time between updates is less than the pop time we want to fire the rockets OR if the missile wants to make a major correction pop it rapidly
if (((_lastTime - CBA_missionTime) <= 0) || {(_lastTime - CBA_missionTime) < (_serviceInterval / 2) && (_projectilePos vectorDistance _seekerTargetPos > 1)}) then {
_attackProfileStateParams set [5, CBA_missionTime + _serviceInterval];
private _vectorToCrosshair = vectorNormalized (_projectile worldToModel (ASLToAGL _seekerTargetPos));
private _vectorToPos = vectorNormalized (((_projectile vectorWorldToModelVisual (_shooter weaponDirection _weapon)) vectorMultiply (_dragonSpeed * _serviceInterval)) vectorAdd (_vectorToCrosshair vectorMultiply _maxCorrectableDistance));
if ((_vectorToPos select 2) < 0) then {
_vectorToPos set [2, 0];
} else {
@ -66,10 +66,10 @@ if (((_lastTime - CBA_missionTime) <= 0) || {(_lastTime - CBA_missionTime) < (_s
};
_projectile setVelocityModelSpace ((velocityModelSpace _projectile) vectorAdd (_vectorToPos vectorMultiply _serviceChargeAcceleration));
private _charge = createVehicle [QGVAR(serviceCharge), [0, 0, 0], [], 0, "NONE"];
_charge setPosASL (_projectilePos vectorAdd ((_vectorToCrosshair vectorMultiply -1) vectorMultiply 0.025));
_attackProfileStateParams set [7, _serviceChargeCount - 1];
};

View File

@ -6,6 +6,7 @@
* Arguments:
* 0: Target <OBJECT>
* 1: Unit Performing Action <OBJECT>
* 2: Is event (function recursives globaly to set weapon where turret is local) <BOOL> (default: false)
*
* Return Value:
* Can Attach Sighting Unit <BOOL>
@ -19,7 +20,7 @@
params ["_target", "_unit", ["_event", false]];
TRACE_3("sightAttach",_target,_unit,_event);
if (_event isEqualTo true) then {
if (_event isEqualTo true) then { // this is actually needed as 3rd arg may not be bool
if (!(_target turretLocal [0])) exitWith {};
_target setVariable [QGVAR(sightAttached), true, true];
_target animate ["optic_hide", 0];

View File

@ -15,10 +15,9 @@
*
* Public: No
*/
params ["_target", "_unit"];
(alive _target)
// && {!(_target getVariable [QGVAR(fired), false])}
&& {!(_target getVariable [QGVAR(sightAttached), ((typeOf _target) == QGVAR(staticAssembled))])}
&& {QGVAR(sight) in (weapons _unit)}

View File

@ -15,9 +15,8 @@
*
* Public: No
*/
params ["_target", "_unit"];
(alive _target)
// && {!(_target getVariable [QGVAR(fired), false])}
&& {_target getVariable [QGVAR(sightAttached), ((typeOf _target) == QGVAR(staticAssembled))]}

View File

@ -6,6 +6,7 @@
* Arguments:
* 0: Target <OBJECT>
* 1: Unit Performing Action <OBJECT>
* 2: Is event (function recursives globaly to set weapon where turret is local) <BOOL> (default: false)
*
* Return Value:
* Can Attach Sighting Unit <BOOL>
@ -21,7 +22,7 @@ params ["_target", "_unit"];
params ["_target", "_unit", ["_event", false]];
TRACE_3("sightDetach",_target,_unit,_event);
if (_event isEqualTo true) then {
if (_event isEqualTo true) then { // this is actually needed as 3rd arg may not be bool
if (!(_target turretLocal [0])) exitWith {};
_target setVariable [QGVAR(sightAttached), false, true];
_target animate ["optic_hide", 1];

Binary file not shown.

Binary file not shown.

View File

@ -1,15 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="dragon">
<Key ID="STR_ACE_dragon_dragonNameCarry">
<English>[CSW] M47 Super-Dragon</English>
</Key>
<Key ID="STR_ACE_dragon_dragonName">
<English>M47 Super-Dragon</English>
</Key>
<Key ID="STR_ACE_dragon_dragonNoSight">
<English>M47 Super-Dragon (No Sight)</English>
</Key>
<Key ID="STR_ACE_dragon_dragonSight">
<English>M47 Super-Dragon (With Sight)</English>
</Key>
<Key ID="STR_ACE_dragon_attachSight">
<English>Attach Sight</English>
</Key>

View File

@ -11,7 +11,7 @@
<Russian>XM312</Russian>
<Portuguese>XM312</Portuguese>
<Hungarian>XM312</Hungarian>
<Italian>XM312A</Italian>
<Italian>XM312</Italian>
<Japanese>XM312</Japanese>
<Korean>XM312</Korean>
<Chinese>XM312重機槍</Chinese>

View File

@ -5,38 +5,44 @@
*
* Arguments:
* 0: Ammo Truck <OBJECT>
* 1: Player <OBJECT>
*
* Return Value:
* ChildActions <ARRAY>
*
* Example:
* [tank] call ace_rearm_fnc_addRearmActions
* [tank, player] call ace_rearm_fnc_addRearmActions
*
* Public: No
*/
params ["_truck"];
params ["_truck", "_player"];
private _vehicles = nearestObjects [_truck, ["AllVehicles"], 20];
_vehicles = _vehicles select {(_x != _truck) && {!(_x isKindOf "CAManBase")} && {!(_x getVariable [QGVAR(disabled), false])}};
if (missionNamespace getVariable [QEGVAR(mk6mortar,useAmmoHandling), false]) then {
_vehicles = _vehicles select {!(_x isKindOf "Mortar_01_base_F")};
};
private _cswCarryMagazines = [];
private _vehicleActions = [];
{
private _vehicle = _x;
// Array of magazines that can be rearmed in the vehicle
private _needRearmMags = ([_vehicle] call FUNC(getNeedRearmMagazines)) apply {_x select 0};
// _needRearmMags without duplicates
private _magazineHelper = _needRearmMags arrayIntersect _needRearmMags;
_magazineHelper = _magazineHelper select {[_truck, _x] call FUNC(hasEnoughSupply)};
if (["ace_csw"] call EFUNC(common,isModLoaded)) then {
([_vehicle] call EFUNC(csw,aceRearmGetCarryMagazines)) params ["_turretMagsCSW", "_allCarryMags"];
TRACE_3("csw compat",_vehicle,_turretMagsCSW,_allCarryMags);
_cswCarryMagazines append _allCarryMags;
_magazineHelper = _magazineHelper - _turretMagsCSW;
};
TRACE_2("can add",_x,_magazineHelper);
if (!(_magazineHelper isEqualTo [])) then {
private _icon = getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "Icon");
if !((_icon select [0, 1]) == "\") then {
@ -80,10 +86,29 @@ private _vehicleActions = [];
{},
[]
] call EFUNC(interact_menu,createAction);
_vehicleActions pushBack [_action, _actions, _truck];
};
};
} forEach _vehicles;
if (!(_cswCarryMagazines isEqualTo [])) then {
_cswCarryMagazines = _cswCarryMagazines arrayIntersect _cswCarryMagazines;
_cswCarryMagazines = _cswCarryMagazines select {[_truck, _x] call FUNC(hasEnoughSupply)};
private _baseAction = [QGVAR(cswTake), "CSW", "", {}, {true}] call EFUNC(interact_menu,createAction);
private _subActions = _cswCarryMagazines apply {
private _action = [
_x,
_x call FUNC(getMagazineName),
getText(configFile >> "CfgMagazines" >> _x >> "picture"),
{_this call FUNC(takeAmmo)},
{true},
{},
[_x, _player]
] call EFUNC(interact_menu,createAction);
[_action, [], _truck];
};
_vehicleActions pushBack [_baseAction, _subActions, _truck];
};
_vehicleActions

View File

@ -26,6 +26,8 @@ if (isNil "_magName") then {
WARNING_1("Magazine is missing display name [%1]",_className);
};
if ((_displayName select [0,6]) == "[CSW] ") then { _displayName = _displayName select [6]; };
GVAR(magazineNameCache) setVariable [_className, _displayName];
GVAR(originalMagazineNames) pushBack _displayName;
TRACE_2("Adding to cache",_className,_displayName);

View File

@ -33,19 +33,19 @@ private _magazineInfo = [];
private _pylonConfigs = configProperties [configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "Components" >> "TransportPylonsComponent" >> "Pylons", "isClass _x"];
{
private _pylonConfig = _x;
// Strangely, a 1-based index.
private _pylonIndex = _forEachIndex + 1;
// Retrieving pylon magazine by index. If the pylon is empty, it is marked with "".
private _pylonMagazine = (getPylonMagazines _vehicle) select (_pylonIndex - 1);
// Only care about pylons that have a magazine.
if (!(_pylonMagazine isEqualTo "")) then {
private _maxRounds = getNumber (configFile >> "CfgMagazines" >> _pylonMagazine >> "count");
private _currentRounds = _vehicle ammoOnPylon _pylonIndex;
if (_currentRounds < _maxRounds) then {
// getPylonTurret expects 0 based index, and returns driver turret as [-1]
private _pylonTurret = [_vehicle, (_pylonIndex - 1)] call EFUNC(common,getPylonTurret);
@ -62,13 +62,13 @@ private _turrets = [_vehicle] call FUNC(getAllRearmTurrets);
// _magazines without duplicates
private _magazineClasses = _magazines arrayIntersect _magazines;
{
private _magazineClass = _x;
private _maxMagazines = [_vehicle, _turretPath, _magazineClass] call FUNC(getMaxMagazines);
private _maxRoundsPerMag = getNumber (configFile >> "CfgMagazines" >> _magazineClass >> "count");
/* Array of ammo counts in every magazine. Example: [200, 200, 152] means 2 mags with 200
* rounds and 1 mag with 152 rounds. */
private _currentRounds = [_vehicle, _turretPath, _magazineClass] call FUNC(getTurretMagazineAmmo);
@ -77,9 +77,10 @@ private _turrets = [_vehicle] call FUNC(getAllRearmTurrets);
/* If there is space for new magazines or if some magazines are not full, add the magazine
* type to _magazineInfo. */
if ((_currentMagazines < _maxMagazines) || {({_x < _maxRoundsPerMag} count _currentRounds) > 0}) then {
if (_magazineClass == "FakeWeapon") exitWith {};
_magazineInfo pushBack [_magazineClass, _turretPath, false, -1, _maxMagazines, _currentMagazines, _maxRoundsPerMag, _currentRounds];
};
} forEach _magazineClasses;
} forEach _turrets;

View File

@ -22,6 +22,14 @@ TRACE_3("rearmEntireVehicleSuccessLocal",_truck,_vehicle,_turretPath);
// Fetching all rearmable magazines in this turret
private _magazines = ([_vehicle] call FUNC(getNeedRearmMagazines)) select {(_x select 1) isEqualTo _turretPath};
if (["ace_csw"] call EFUNC(common,isModLoaded)) then {
([_vehicle, _turretPath] call EFUNC(csw,aceRearmGetCarryMagazines)) params ["_turretMagsCSW", "_allCarryMags"];
TRACE_1("skipping",_turretMagsCSW);
_magazines = _magazines select {
_x params ["_magazineClass"];
(_turretMagsCSW findIf {_x == _magazineClass}) == -1
};
};
{
_x params ["_magazineClass", "_magTurretPath", "_isPylonMag", "_pylonIndex", "_maxMagazines", "_currentMagazines", "_maxRoundsPerMag", "_currentRounds"];

View File

@ -8,7 +8,7 @@
* 1: Unit <OBJECT>
* 2: Params <ARRAY>
* 0: Magazine Classname <STRING>
* 1: Vehicle to be armed <OBJECT>
* 1: Vehicle to be armed or player <OBJECT>
*
* Return Value:
* None
@ -27,12 +27,18 @@ TRACE_5("takeAmmo",_truck,_unit,_args,_magazineClass,_vehicle);
REARM_HOLSTER_WEAPON;
private _targetName = if (_vehicle == _unit) then {
"CSW"
} else {
getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName")
};
[
TIME_PROGRESSBAR(REARM_DURATION_TAKE select _idx),
[_unit, _magazineClass, _truck],
[_unit, _magazineClass, _truck, _vehicle],
FUNC(takeSuccess),
"",
format [localize LSTRING(TakeAction), _magazineClass call FUNC(getMagazineName), getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName")],
format [localize LSTRING(TakeAction), _magazineClass call FUNC(getMagazineName), _targetName],
{true},
["isnotinside"]
] call EFUNC(common,progressBar);

View File

@ -8,19 +8,20 @@
* 0: Unit <OBJECT>
* 1: Magazine Classname <STRING>
* 2: Ammo Truck <OBJECT>
* 3: Target Vehicle or Player <OBJECT>
*
* Return Value:
* None
*
* Example:
* [[player, "500Rnd_127x99_mag_Tracer_Red"]] call ace_rearm_fnc_takeSuccess
* [[player, "500Rnd_127x99_mag_Tracer_Red", ammoTruck, targetVehicle]] call ace_rearm_fnc_takeSuccess
*
* Public: No
*/
params ["_args"];
_args params ["_unit", "_magazineClass", "_truck"];
TRACE_3("takeSuccess",_unit,_magazineClass,_truck);
_args params ["_unit", "_magazineClass", "_truck", "_vehicle"];
TRACE_4("takeSuccess",_unit,_magazineClass,_truck,_vehicle);
private _success = true;
if (GVAR(supply) > 0) then {
@ -28,6 +29,13 @@ if (GVAR(supply) > 0) then {
};
if !(_success) exitWith {WARNING_2("takeSuccess failed to take [%1] from [%2]",_magazineClass,_truck);};
if (_vehicle == _unit) exitWith {
([_magazineClass] call FUNC(getCaliber)) params ["", "_idx"];
private _rounds = (REARM_COUNT select _idx);
TRACE_4("passing to csw",_unit,_magazineClass,_idx,_rounds);
[_unit, _magazineClass, _rounds] call EFUNC(csw,reload_handleReturnAmmo);
};
[_unit, "forceWalk", "ACE_rearm", true] call EFUNC(common,statusEffect_set);
[_unit, "blockThrow", "ACE_rearm", true] call EFUNC(common,statusEffect_set);
private _dummy = [_unit, _magazineClass] call FUNC(createDummy);

View File

@ -39,6 +39,7 @@ class CfgVehicles {
disassembleTurret = QGVAR(m3TripodLow); // Which tripod will appear when weapon has been disassembled
ammoLoadTime = 7; // How long it takes in seconds to load ammo into the weapon
ammoUnloadTime = 5; // How long it takes in seconds to unload ammo from the weapon
desiredAmmo = 69; // When the weapon is reloaded it will try and reload to this ammo capacity
disassembleFunc = "myCoolFunction.sqf"; // A callback function for when the CSW gets disassembled. Arguments: [tripod, staticWeapon]
};
};
@ -55,6 +56,7 @@ class CfgMagazines {
type=256; // Must be 256 to show up in Arsenal
count = 100; // How much ammo gets added per "Load Ammo" selection
model = "\A3\Structures_F_EPB\Items\Military\Ammobox_rounds_F.p3d"; // default ammo box model
//ace_isbelt = 1; // Needed if your magazine has belt linking
};
};
```
@ -63,22 +65,22 @@ class CfgMagazines {
```cpp
class CfgWeapons {
class ace_csw_base_carry;
class banana_carry_weapon: ace_csw_base_carry {
class ace_csw_options {
assembleTo = "banana_csw"; // What the weapon will assemble into
baseTripod = "banana_tripod"; // The tripod which the weapon can be assembled onto (Default is "ace_csw_m3Tripod")
class Launcher_Base_F;
class banana_carry_weapon: Launcher_Base_F {
class ACE_CSW {
type = "weapon"; // What type of carry it is. Must always be "weapon" for the carry weapon
deployTime = 4; // How long it takes to deploy the weapon onto the tripod
pickupTime = 4; // How long it takes to disassemble weapon from the tripod
class assembleTo {
ace_csw_m3Tripod = "banana_csw_mod1"; // What tripod can this weapon deploy onto, and what vehicle will it spawn when it is deployed
banana_tripod = "banana_csw";
};
};
};
class HMG_Static;
class banana_weapon: HMG_Static {
class ace_csw_options {
deployTime = 10; // Time in seconds it takes to mount the weapon on the tripod
pickupTime = 12; // Time in seconds it takes to dismount the weapon from the tripod
};
magazines[] = { banana_ammo }; // You must have both the dummy and real ammunition
class banana_proxy_weapon: HMG_Static {
magazineReloadTime = 0.5; // Proxy weapons are spawned onto the CSW when it is assembled. Because ammo loading times use defined values in the magazine, this number needs to be low to ensure low latency
};
};
```
@ -87,8 +89,8 @@ class CfgWeapons {
```cpp
class ace_csw_groups { // Ammo that can be loaded into this CSW
class banana_ammo { // The magazine which will be loaded into the weapon
banana_dummy_ammo = 1; // Ammo that is loaded into the weapon as per CfgWeapons >> weapon >> magazines
class banana_ammo { // The magazine which the player can place into their inventory
banana_dummy_ammo = 1; // Magazine that is loaded into the weapon as per CfgWeapons >> weapon >> magazines
};
// Optional
@ -99,6 +101,9 @@ class CfgWeapons {
/*
Ammo types already defined by CSW:
- ace_csw_100Rnd_127x99_mag
- ace_csw_100Rnd_127x99_mag_red
- ace_csw_100Rnd_127x99_mag_green
- ace_csw_100Rnd_127x99_mag_yellow
- ace_csw_50Rnd_127x108_mag
- ace_csw_20Rnd_20mm_G_belt
- ACE_1Rnd_82mm_Mo_HE
@ -129,14 +134,14 @@ class CfgVehicles {
```cpp
class CfgWeapons {
class ace_csw_base_carry;
class banana_carry_tripod: ace_csw_base_carry {
class GVAR(options) {
deployTime = 166; // How much time in seconds it takes to deploy the tripod
pickupTime = 12; // How much time in seconds it takes to pickup the tripod
type = "mount"; // What type of carry it is. Must always be "mount" for the carry tripod
deploy = "banana_tripod"; // What will be deployed when "Deploy Tripod" is selected
};
class Launcher_Base_F;
class banana_carry_tripod: Launcher_Base_F {
class ACE_CSW {
type = "mount"; // What type of carry it is. Must always be "mount" for the tripod
deployTime = 4; // How long it takes to deploy the tripod
pickupTime = 4; // How long it takes to pickup the tripod
deploy = "banana_tripod"; // what vehicle will spawn when the tripod is deployed
};
};
};
```
```

View File

@ -0,0 +1,18 @@
#define CREATE_MAGAZINE_GROUP(ammo) class GVAR(ammo) { rhs_##ammo = 1; }
class ace_csw_groups {
CREATE_MAGAZINE_GROUP(mag_9M131M);
CREATE_MAGAZINE_GROUP(mag_9M131F);
CREATE_MAGAZINE_GROUP(mag_9m133);
CREATE_MAGAZINE_GROUP(mag_9m133f);
CREATE_MAGAZINE_GROUP(mag_9m1331);
CREATE_MAGAZINE_GROUP(mag_9m133m2);
CREATE_MAGAZINE_GROUP(mag_PG9V);
CREATE_MAGAZINE_GROUP(mag_PG9N);
CREATE_MAGAZINE_GROUP(mag_PG9VNT);
CREATE_MAGAZINE_GROUP(mag_OG9VM);
CREATE_MAGAZINE_GROUP(mag_OG9V);
CREATE_MAGAZINE_GROUP(mag_VOG30_30);
CREATE_MAGAZINE_GROUP(mag_GPD30_30);
CREATE_MAGAZINE_GROUP(mag_VOG17m_30);
};

View File

@ -14,4 +14,136 @@ class cfgMagazines {
class rhs_mag_127x108mm_1470 : rhs_mag_127x108mm_50 {
ace_isbelt = 0;
};
class RHS_mag_VOG30_30: VehicleMagazine {
ace_isbelt = 1;
};
class RHS_mag_GPD30_30: RHS_mag_VOG30_30 {};
// RHS magazines for crew handled ammo
class rhs_mag_9M131M;
class GVAR(mag_9M131M): rhs_mag_9M131M {
scope = 2;
type = 256;
count = 1;
mass = 55;
model = "rhsafrf\addons\rhs_heavyweapons\atgm\rhs_metis_emptytube.p3d";
picture = "\A3\Weapons_F_Tank\Launchers\Vorona\Data\UI\icon_rocket_vorona_HEAT_F_ca.paa";
};
class rhs_mag_9M131F;
class GVAR(mag_9M131F): rhs_mag_9M131F {
scope = 2;
type = 256;
count = 1;
mass = 55;
model = "rhsafrf\addons\rhs_heavyweapons\atgm\rhs_metis_emptytube.p3d";
picture = "\A3\Weapons_F_Tank\Launchers\Vorona\Data\UI\icon_rocket_vorona_HEAT_F_ca.paa";
};
class rhs_mag_9m133;
class GVAR(mag_9m133): rhs_mag_9m133 {
scope = 2;
type = 256;
count = 1;
mass = 55;
model = "rhsafrf\addons\rhs_heavyweapons\atgm\rhs_kornet_emptytube.p3d";
picture = "\A3\Weapons_F_Tank\Launchers\Vorona\Data\UI\icon_rocket_vorona_HEAT_F_ca.paa";
};
class rhs_mag_9m133f;
class GVAR(mag_9m133f): rhs_mag_9m133f {
scope = 2;
type = 256;
count = 1;
mass = 55;
model = "rhsafrf\addons\rhs_heavyweapons\atgm\rhs_kornet_emptytube.p3d";
picture = "\A3\Weapons_F_Tank\Launchers\Vorona\Data\UI\icon_rocket_vorona_HEAT_F_ca.paa";
};
class rhs_mag_9m1331;
class GVAR(mag_9m1331): rhs_mag_9m1331 {
scope = 2;
type = 256;
count = 1;
mass = 55;
model = "rhsafrf\addons\rhs_heavyweapons\atgm\rhs_kornet_emptytube.p3d";
picture = "\A3\Weapons_F_Tank\Launchers\Vorona\Data\UI\icon_rocket_vorona_HEAT_F_ca.paa";
};
class rhs_mag_9m133m2;
class GVAR(mag_9m133m2): rhs_mag_9m133m2 {
scope = 2;
type = 256;
count = 1;
mass = 55;
model = "rhsafrf\addons\rhs_heavyweapons\atgm\rhs_kornet_emptytube.p3d";
picture = "\A3\Weapons_F_Tank\Launchers\Vorona\Data\UI\icon_rocket_vorona_HEAT_F_ca.paa";
};
class rhs_mag_PG9V;
class GVAR(mag_PG9V): rhs_mag_PG9V {
scope = 2;
type = 256;
count = 1;
mass = 80;
model = "\A3\Structures_F_EPB\Items\Military\Ammobox_rounds_F.p3d";
picture = "\A3\Weapons_F_Exp\Launchers\RPG7\Data\UI\icon_rocket_RPG7_CA.paa";
};
class rhs_mag_PG9N;
class GVAR(mag_PG9N): rhs_mag_PG9N {
scope = 2;
type = 256;
count = 1;
mass = 80;
model = "\A3\Structures_F_EPB\Items\Military\Ammobox_rounds_F.p3d";
picture = "\A3\Weapons_F_Exp\Launchers\RPG7\Data\UI\icon_rocket_RPG7_CA.paa";
};
class rhs_mag_PG9VNT;
class GVAR(mag_PG9VNT): rhs_mag_PG9VNT {
scope = 2;
type = 256;
count = 1;
mass = 80;
model = "\A3\Structures_F_EPB\Items\Military\Ammobox_rounds_F.p3d";
picture = "\A3\Weapons_F_Exp\Launchers\RPG7\Data\UI\icon_rocket_RPG7_CA.paa";
};
class rhs_mag_OG9VM;
class GVAR(mag_OG9VM): rhs_mag_OG9VM {
scope = 2;
type = 256;
count = 1;
mass = 80;
model = "\A3\Structures_F_EPB\Items\Military\Ammobox_rounds_F.p3d";
picture = "\A3\Weapons_F_Exp\Launchers\RPG7\Data\UI\icon_rocket_RPG7_CA.paa";
};
class rhs_mag_OG9V;
class GVAR(mag_OG9V): rhs_mag_OG9V {
scope = 2;
type = 256;
count = 1;
mass = 80;
model = "\A3\Structures_F_EPB\Items\Military\Ammobox_rounds_F.p3d";
picture = "\A3\Weapons_F_Exp\Launchers\RPG7\Data\UI\icon_rocket_RPG7_CA.paa";
};
class GVAR(mag_VOG30_30): RHS_mag_VOG30_30 {
scope = 2;
type = 256;
count = 30;
mass = 40;
model = "\A3\Structures_F_EPB\Items\Military\Ammobox_rounds_F.p3d";
picture = QPATHTOEF(csw,UI\ammoBox_50bmg_ca.paa);
};
class GVAR(mag_GPD30_30): RHS_mag_GPD30_30 {
scope = 2;
type = 256;
count = 30;
mass = 40;
model = "\A3\Structures_F_EPB\Items\Military\Ammobox_rounds_F.p3d";
picture = QPATHTOEF(csw,UI\ammoBox_50bmg_ca.paa);
};
class RHS_mag_VOG17m_30;
class GVAR(mag_VOG17m_30): RHS_mag_VOG17m_30 {
scope = 2;
type = 256;
count = 30;
mass = 40;
model = "\A3\Structures_F_EPB\Items\Military\Ammobox_rounds_F.p3d";
picture = QPATHTOEF(csw,UI\ammoBox_50bmg_ca.paa);
};
};

View File

@ -233,6 +233,17 @@ class CfgVehicles {
position = "";
};
};
// ENABLE_CSW_ATTRIBUTE;
class ACE_CSW {
enabled = 1;
proxyWeapon = QGVAR(rhs_weap_SPG9);
magazineLocation = "_target selectionPosition 'breach'";
disassembleWeapon = QGVAR(spg9_carry);
disassembleTurret = QEGVAR(csw,spg9Tripod);
desiredAmmo = 1;
ammoLoadTime = 5;
ammoUnloadTime = 3;
};
};
class rhs_Kornet_Base: AT_01_base_F {
class ACE_Actions: ACE_Actions {
@ -241,10 +252,109 @@ class CfgVehicles {
selection = "tripod";
};
};
// ENABLE_CSW_ATTRIBUTE;
class ACE_CSW {
enabled = 1;
proxyWeapon = QGVAR(rhs_weap_9K133_launcher);
magazineLocation = "_target selectionPosition 'gun'";
disassembleWeapon = QGVAR(kornet_carry);
disassembleTurret = "";
desiredAmmo = 1;
ammoLoadTime = 7;
ammoUnloadTime = 5;
};
};
class rhs_assault_umbts;
class rhs_assault_umbts_engineer: rhs_assault_umbts {
EGVAR(logistics_wirecutter,hasWirecutter) = 1;
};
class StaticMortar: StaticWeapon {};
class rhs_2b14_82mm_Base: StaticMortar {
class ACE_Actions: ACE_Actions {
class ACE_MainActions: ACE_MainActions {
position = "";
selection = ""; // no good selections for this mortar
};
};
// ENABLE_CSW_ATTRIBUTE;
class ACE_CSW {
enabled = 1;
magazineLocation = "";
proxyWeapon = QGVAR(rhs_weap_2b14);
disassembleWeapon = QGVAR(2b14_carry); // carry weapon [CfgWeapons]
disassembleTurret = QEGVAR(csw,mortarBaseplate); // turret [CfgVehicles]
desiredAmmo = 1;
ammoLoadTime = 3;
ammoUnloadTime = 3;
};
};
class rhs_nsv_tripod_base: StaticMGWeapon {
class ACE_CSW {
enabled = 1;
proxyWeapon = QGVAR(rhs_weap_nsvt_effects);
magazineLocation = "_target selectionPosition 'magazine'";
disassembleWeapon = QGVAR(nsv_carry);
disassembleTurret = QEGVAR(csw,kordTripodLow);
desiredAmmo = 50;
ammoLoadTime = 10;
ammoUnloadTime = 8;
};
};
class RHS_KORD_Base: rhs_nsv_tripod_base {
class ACE_CSW: ACE_CSW {
enabled = 1;
proxyWeapon = QGVAR(rhs_weap_KORD);
disassembleWeapon = QGVAR(kord_carry);
disassembleTurret = QEGVAR(csw,kordTripodLow);
};
};
class RHS_KORD_high_base: RHS_KORD_Base {
class ACE_CSW: ACE_CSW {
enabled = 1;
proxyWeapon = QGVAR(rhs_weap_KORD);
disassembleWeapon = QGVAR(kord_carry);
disassembleTurret = QEGVAR(csw,kordTripod);
};
};
class StaticGrenadeLauncher: StaticWeapon {};
class RHS_AGS30_TriPod_base: StaticGrenadeLauncher {
// ENABLE_CSW_ATTRIBUTE;
class ACE_CSW {
enabled = 1;
proxyWeapon = QGVAR(rhs_weap_AGS30);
magazineLocation = "_target selectionPosition 'magazine'";
disassembleWeapon = QGVAR(ags30_carry);
disassembleTurret = QEGVAR(csw,sag30Tripod);
desiredAmmo = 30;
ammoLoadTime = 10;
ammoUnloadTime = 8;
};
};
class rhs_SPG9M_base: rhs_SPG9_base {
class ACE_CSW: ACE_CSW {
enabled = 1;
disassembleWeapon = QGVAR(spg9m_carry);
};
};
class rhs_Metis_Base: AT_01_base_F {
// ENABLE_CSW_ATTRIBUTE;
class ACE_CSW {
enabled = 1;
proxyWeapon = QGVAR(rhs_weap_9K115_2_launcher);
magazineLocation = "_target selectionPosition 'gun'";
disassembleWeapon = QGVAR(metis_carry);
disassembleTurret = "";
desiredAmmo = 1;
ammoLoadTime = 7;
ammoUnloadTime = 5;
};
};
};

View File

@ -1,13 +1,12 @@
class CfgWeapons {
class NVGoggles;
class rhs_1PN138: NVGoggles { // Monocular
modelOptics = "";
EGVAR(nightvision,border) = QPATHTOEF(nightvision,data\nvg_mask_4096.paa);
EGVAR(nightvision,bluRadius) = 0.13;
};
class hgun_Rook40_F;
class rhs_weap_pya: hgun_Rook40_F {
ACE_barrelTwist = 254.0;
@ -110,7 +109,10 @@ class CfgWeapons {
};
};
};
class Launcher_Base_F;
class Launcher;
class Launcher_Base_F: Launcher {
class WeaponSlotsInfo;
};
class rhs_weap_rpg7: Launcher_Base_F {
ace_reloadlaunchers_enabled = 1;
};
@ -141,4 +143,157 @@ class CfgWeapons {
ace_overpressure_range = 15;
ace_overpressure_damage = 0.5;
};
CREATE_CSW_PROXY(rhs_weap_2b14);
CREATE_CSW_PROXY(rhs_weap_nsvt_effects);
CREATE_CSW_PROXY(rhs_weap_KORD);
CREATE_CSW_PROXY(RHS_weap_AGS30);
CREATE_CSW_PROXY(rhs_weap_SPG9);
CREATE_CSW_PROXY(rhs_weap_9K133_launcher);
CREATE_CSW_PROXY(rhs_weap_9K115_2_launcher);
class GVAR(2b14_carry): Launcher_Base_F {
class ACE_CSW {
type = "weapon";
deployTime = 20;
pickupTime = 25;
class assembleTo {
EGVAR(csw,mortarBaseplate) = "rhs_2b14_82mm_msv";
};
};
class WeaponSlotsInfo: WeaponSlotsInfo {
mass = 670; // 2B14 Mortar Weight
};
displayName = ECSTRING(CSW,2b14_tube);
author = ECSTRING(common,ACETeam);
scope = 2;
model = QPATHTOEF(apl,ACE_CSW_Bag.p3d);
modes[] = {};
picture = "\rhsafrf\addons\rhs_heavyweapons\data\ico\podnos_2b14_ca.paa";
};
class GVAR(nsv_carry): Launcher_Base_F {
class ACE_CSW {
type = "weapon";
deployTime = 4;
pickupTime = 4;
class assembleTo {
EGVAR(csw,kordTripodLow) = "RHS_NSV_TriPod_MSV";
};
};
class WeaponSlotsInfo: WeaponSlotsInfo {
mass = 550;
};
displayName = ECSTRING(CSW,nsv_gun);
author = ECSTRING(common,ACETeam);
scope = 2;
model = QPATHTOEF(apl,ACE_CSW_Bag.p3d);
modes[] = {};
picture = "\rhsafrf\addons\rhs_heavyweapons\mg\bis_kord\kord_CA.paa";
};
class GVAR(kord_carry): Launcher_Base_F {
class ACE_CSW {
type = "weapon";
deployTime = 4;
pickupTime = 4;
class assembleTo {
EGVAR(csw,kordTripod) = "rhs_KORD_high_MSV";
EGVAR(csw,kordTripodLow) = "rhs_KORD_MSV";
};
};
class WeaponSlotsInfo: WeaponSlotsInfo {
mass = 550;
};
displayName = ECSTRING(CSW,kord_gun);
author = ECSTRING(common,ACETeam);
scope = 2;
model = QPATHTOEF(apl,ACE_CSW_Bag.p3d);
modes[] = {};
picture = "\rhsafrf\addons\rhs_heavyweapons\data\ico\kord6u16sp_ca.paa";
};
class GVAR(ags30_carry): Launcher_Base_F {
class ACE_CSW {
type = "weapon";
deployTime = 4;
pickupTime = 4;
class assembleTo {
EGVAR(csw,sag30Tripod) = "RHS_AGS30_TriPod_MSV";
};
};
class WeaponSlotsInfo: WeaponSlotsInfo {
mass = 400; // https://odin.tradoc.army.mil/mediawiki/index.php/AGS-17_Russian_30mm_Automatic_Grenade_Launcher
};
displayName = ECSTRING(CSW,ags30_gun);
author = ECSTRING(common,ACETeam);
scope = 2;
model = QPATHTOEF(apl,ACE_CSW_Bag.p3d);
modes[] = {};
picture = "\rhsafrf\addons\rhs_heavyweapons\data\ico\ags_static_CA.paa";
};
class GVAR(spg9_carry): Launcher_Base_F {
class ACE_CSW {
type = "weapon";
deployTime = 4;
pickupTime = 4;
class assembleTo {
EGVAR(csw,spg9Tripod) = "rhsgref_ins_SPG9";
};
};
class WeaponSlotsInfo: WeaponSlotsInfo {
mass = 1000;
};
displayName = ECSTRING(csw,spg9_tube);
author = ECSTRING(common,ACETeam);
scope = 2;
model = QPATHTOEF(apl,ACE_CSW_Bag.p3d);
modes[] = {};
picture = "\rhsafrf\addons\rhs_heavyweapons\data\ico\spg9_CA.paa";
};
class GVAR(spg9m_carry): GVAR(spg9_carry) {
class ACE_CSW {
class assembleTo {
EGVAR(csw,spg9Tripod) = "rhs_SPG9M_MSV";
};
};
displayName = ECSTRING(csw,spg9m_tube);
};
class GVAR(metis_carry): Launcher_Base_F {
class ACE_CSW {
type = "mount";
deployTime = 4;
pickupTime = 4;
deploy = "rhs_Metis_9k115_2_msv";
};
class WeaponSlotsInfo: WeaponSlotsInfo {
mass = 300;
};
displayName = ECSTRING(csw,metis_tube);
author = ECSTRING(common,ACETeam);
scope = 2;
model = QPATHTOEF(apl,ACE_CSW_Bag.p3d);
modes[] = {};
picture = "\rhsafrf\addons\rhs_heavyweapons\data\ico\metis_at13_CA.paa";
};
class GVAR(kornet_carry): Launcher_Base_F {
class ACE_CSW {
type = "mount";
deployTime = 4;
pickupTime = 4;
deploy = "rhs_Kornet_9M133_2_msv";
};
class WeaponSlotsInfo: WeaponSlotsInfo {
mass = 600;
};
displayName = ECSTRING(csw,kornet_launcher);
author = ECSTRING(common,ACETeam);
scope = 2;
model = QPATHTOEF(apl,ACE_CSW_Bag.p3d);
modes[] = {};
picture = "\rhsafrf\addons\rhs_heavyweapons\data\ico\metis_at13_CA.paa";
};
};

View File

@ -1,4 +1,5 @@
#include "script_component.hpp"
#include "\z\ace\addons\csw\script_config_macros_csw.hpp"
class CfgPatches {
class ADDON {
@ -6,7 +7,7 @@ class CfgPatches {
units[] = {};
weapons[] = {};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_rearm", "ace_refuel", "ace_repair", "rhs_c_weapons", "rhs_c_troops", "rhs_c_bmd", "rhs_c_bmp", "rhs_c_bmp3", "rhs_c_a2port_armor", "rhs_c_btr", "rhs_c_sprut", "rhs_c_t72", "rhs_c_tanks", "rhs_c_a2port_air", "rhs_c_a2port_car", "rhs_c_cars", "rhs_c_trucks", "rhs_c_2s3", "rhs_c_rva", "rhs_c_heavyweapons"};
requiredAddons[] = {"ace_csw", "ace_rearm", "ace_refuel", "ace_repair", "rhs_c_weapons", "rhs_c_troops", "rhs_c_bmd", "rhs_c_bmp", "rhs_c_bmp3", "rhs_c_a2port_armor", "rhs_c_btr", "rhs_c_sprut", "rhs_c_t72", "rhs_c_tanks", "rhs_c_a2port_air", "rhs_c_a2port_car", "rhs_c_cars", "rhs_c_trucks", "rhs_c_2s3", "rhs_c_rva", "rhs_c_heavyweapons"};
author = ECSTRING(common,ACETeam);
authors[] = {"Ruthberg", "GitHawk", "BaerMitUmlaut", "commy2", "Skengman2"};
url = ECSTRING(main,URL);
@ -19,3 +20,5 @@ class CfgPatches {
#include "CfgMagazines.hpp"
#include "CfgWeapons.hpp"
#include "CfgVehicles.hpp"
#include "CfgMagazineGroups.hpp"

View File

@ -4,4 +4,25 @@ class CfgVehicles {
// Canoes are propelled by paddlers
EGVAR(refuel,canReceive) = 0;
};
class StaticMGWeapon;
class rhs_DSHKM_base: StaticMGWeapon {
// ENABLE_CSW_ATTRIBUTE;
class ACE_CSW {
enabled = 1;
proxyWeapon = QGVAR(rhs_weap_DSHKM);
magazineLocation = "_target selectionPosition 'otocvez'";
disassembleWeapon = QGVAR(dshkm_carry);
disassembleTurret = QEGVAR(csw,kordTripod);
desiredAmmo = 50;
ammoLoadTime = 10;
ammoUnloadTime = 8;
};
};
class rhs_DSHkM_Mini_TriPod_base: rhs_DSHKM_base {
class ACE_CSW: ACE_CSW {
enabled = 1;
disassembleTurret = QEGVAR(csw,kordTripodLow);
};
};
};

View File

@ -1,4 +1,3 @@
class CfgWeapons {
class rhs_weap_kar98k_Base_F;
class rhs_weap_kar98k: rhs_weap_kar98k_Base_F {
@ -81,4 +80,31 @@ class CfgWeapons {
class rhs_weap_mg42_base: Rifle_Base_F {
ACE_Overheating_allowSwapBarrel = 1;
};
CREATE_CSW_PROXY(rhs_weap_DSHKM);
class Launcher;
class Launcher_Base_F: Launcher {
class WeaponSlotsInfo;
};
class GVAR(dshkm_carry): Launcher_Base_F {
class ACE_CSW {
type = "weapon";
deployTime = 4;
pickupTime = 4;
class assembleTo {
EGVAR(csw,kordTripod) = "rhsgref_ins_DSHKM";
EGVAR(csw,kordTripodLow) = "rhsgref_ins_DSHKM_Mini_TriPod";
};
};
class WeaponSlotsInfo: WeaponSlotsInfo {
mass = 740;
};
displayName = ECSTRING(csw,dshk_gun);
author = ECSTRING(common,ACETeam);
scope = 2;
model = QPATHTOEF(apl,ACE_CSW_Bag.p3d);
modes[] = {};
picture = "\rhsafrf\addons\rhs_heavyweapons\data\mapico\icomap_DShKM_CA.paa";
};
};

View File

@ -1,4 +1,5 @@
#include "script_component.hpp"
#include "\z\ace\addons\csw\script_config_macros_csw.hpp"
class CfgPatches {
class ADDON {
@ -6,7 +7,7 @@ class CfgPatches {
units[] = {};
weapons[] = {};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"rhsgref_main", "rhsgref_c_weapons"};
requiredAddons[] = {"ace_csw", "rhsgref_main", "rhsgref_c_weapons"};
author = ECSTRING(common,ACETeam);
authors[] = {"PabstMirror", "Ruthberg", "Anton"};
url = ECSTRING(main,URL);

View File

@ -0,0 +1,24 @@
#define CREATE_MAGAZINE_GROUP(ammo) class GVAR(ammo) { rhs_##ammo = 1; }
class ace_csw_groups {
CREATE_MAGAZINE_GROUP(mag_TOW);
CREATE_MAGAZINE_GROUP(mag_TOWB);
CREATE_MAGAZINE_GROUP(mag_ITOW);
CREATE_MAGAZINE_GROUP(mag_TOW2);
CREATE_MAGAZINE_GROUP(mag_TOW2A);
CREATE_MAGAZINE_GROUP(mag_TOW2b);
CREATE_MAGAZINE_GROUP(mag_TOW2b_aero);
CREATE_MAGAZINE_GROUP(mag_TOW2bb);
class GVAR(48Rnd_40mm_MK19) {
RHS_48Rnd_40mm_MK19 = 1;
RHS_96Rnd_40mm_MK19 = 1;
};
class GVAR(48Rnd_40mm_MK19_M430I) {
RHS_48Rnd_40mm_MK19_M430I = 1;
RHS_96Rnd_40mm_MK19_M430I = 1;
};
class GVAR(48Rnd_40mm_MK19_M1001) {
RHS_48Rnd_40mm_MK19_M1001 = 1;
RHS_96Rnd_40mm_MK19_M1001 = 1;
};
};

View File

@ -51,4 +51,105 @@ class cfgMagazines {
ammo = "ACE_Hellfire_AGM114N";
};
// RHS magazines for crew handled ammo
class rhs_mag_TOW;
class GVAR(mag_TOW): rhs_mag_TOW {
scope = 2;
type = 256;
count = 1;
mass = 200; // Actually should be 440 but ARMA uses weight and volume in the same number
model = "\A3\Structures_F_EPB\Items\Military\Ammobox_rounds_F.p3d"; // ammo can instead of any special model so no one gets especially confused over what it is
picture = "\A3\Weapons_F_beta\Launchers\titan\Data\UI\gear_titan_missile_at_CA.paa";
};
class rhs_mag_TOWB;
class GVAR(mag_TOWB): rhs_mag_TOWB {
scope = 2;
type = 256;
count = 1;
mass = 200;
model = "\A3\Structures_F_EPB\Items\Military\Ammobox_rounds_F.p3d";
picture = "\A3\Weapons_F_beta\Launchers\titan\Data\UI\gear_titan_missile_at_CA.paa";
};
class rhs_mag_ITOW;
class GVAR(mag_ITOW): rhs_mag_ITOW {
scope = 2;
type = 256;
count = 1;
mass = 200;
model = "\A3\Structures_F_EPB\Items\Military\Ammobox_rounds_F.p3d";
picture = "\A3\Weapons_F_beta\Launchers\titan\Data\UI\gear_titan_missile_at_CA.paa";
};
class rhs_mag_TOW2;
class GVAR(mag_TOW2): rhs_mag_TOW2 {
scope = 2;
type = 256;
count = 1;
mass = 200;
model = "\A3\Structures_F_EPB\Items\Military\Ammobox_rounds_F.p3d";
picture = "\A3\Weapons_F_beta\Launchers\titan\Data\UI\gear_titan_missile_at_CA.paa";
};
class rhs_mag_TOW2A;
class GVAR(mag_TOW2A): rhs_mag_TOW2A {
scope = 2;
type = 256;
count = 1;
mass = 200;
model = "\A3\Structures_F_EPB\Items\Military\Ammobox_rounds_F.p3d";
picture = "\A3\Weapons_F_beta\Launchers\titan\Data\UI\gear_titan_missile_at_CA.paa";
};
class rhs_mag_TOW2b;
class GVAR(mag_TOW2b): rhs_mag_TOW2b {
scope = 2;
type = 256;
count = 1;
mass = 200;
model = "\A3\Structures_F_EPB\Items\Military\Ammobox_rounds_F.p3d";
picture = "\A3\Weapons_F_beta\Launchers\titan\Data\UI\gear_titan_missile_at_CA.paa";
};
class rhs_mag_TOW2b_aero;
class GVAR(mag_TOW2b_aero): rhs_mag_TOW2b_aero {
scope = 2;
type = 256;
count = 1;
mass = 200;
model = "\A3\Structures_F_EPB\Items\Military\Ammobox_rounds_F.p3d";
picture = "\A3\Weapons_F_beta\Launchers\titan\Data\UI\gear_titan_missile_at_CA.paa";
};
class rhs_mag_TOW2bb;
class GVAR(mag_TOW2bb): rhs_mag_TOW2bb {
scope = 2;
type = 256;
count = 1;
mass = 200;
model = "\A3\Structures_F_EPB\Items\Military\Ammobox_rounds_F.p3d";
picture = "\A3\Weapons_F_beta\Launchers\titan\Data\UI\gear_titan_missile_at_CA.paa";
};
class GVAR(48Rnd_40mm_MK19): RHS_48Rnd_40mm_MK19 {
scope = 2;
type = 256;
count = 48;
mass = 40;
model = "\A3\Structures_F_EPB\Items\Military\Ammobox_rounds_F.p3d"; // ammo can instead of any special model so no one gets especially confused over what it is
picture = QPATHTOEF(csw,UI\ammoBox_50bmg_ca.paa);
};
class RHS_48Rnd_40mm_MK19_M430I;
class GVAR(48Rnd_40mm_MK19_M430I): RHS_48Rnd_40mm_MK19_M430I {
scope = 2;
type = 256;
count = 48;
mass = 40;
model = "\A3\Structures_F_EPB\Items\Military\Ammobox_rounds_F.p3d"; // ammo can instead of any special model so no one gets especially confused over what it is
picture = QPATHTOEF(csw,UI\ammoBox_50bmg_ca.paa);
};
class RHS_48Rnd_40mm_MK19_M1001;
class GVAR(48Rnd_40mm_MK19_M1001): RHS_48Rnd_40mm_MK19_M1001 {
scope = 2;
type = 256;
count = 48;
mass = 40;
model = "\A3\Structures_F_EPB\Items\Military\Ammobox_rounds_F.p3d"; // ammo can instead of any special model so no one gets especially confused over what it is
picture = QPATHTOEF(csw,UI\ammoBox_50bmg_ca.paa);
};
};

View File

@ -300,6 +300,70 @@ class CfgVehicles {
selection = "main_gun";
};
};
// ENABLE_CSW_ATTRIBUTE;
class ACE_CSW {
enabled = 1;
magazineLocation = "";
proxyWeapon = QGVAR(rhs_mortar_81mm);
disassembleWeapon = QGVAR(m252_carry); // carry weapon [CfgWeapons]
disassembleTurret = QEGVAR(csw,mortarBaseplate); // turret [CfgVehicles]
desiredAmmo = 1;
ammoLoadTime = 3;
ammoUnloadTime = 3;
};
};
class StaticMGWeapon: StaticWeapon {};
class rhs_m2staticmg_base: StaticMGWeapon {
// ENABLE_CSW_ATTRIBUTE;
class ACE_CSW {
enabled = 1;
proxyWeapon = QGVAR(rhs_M2);
magazineLocation = "_target selectionPosition 'magazine'";
disassembleWeapon = QGVAR(m2_carry);
disassembleTurret = QEGVAR(csw,m3Tripod);
desiredAmmo = 100;
ammoLoadTime = 10;
ammoUnloadTime = 8;
};
};
class RHS_M2StaticMG_MiniTripod_base: rhs_m2staticmg_base {
class ACE_CSW: ACE_CSW {
enabled = 1;
disassembleTurret = QEGVAR(csw,m3TripodLow);
};
};
class StaticGrenadeLauncher: StaticWeapon {};
class RHS_MK19_TriPod_base: StaticGrenadeLauncher {
// ENABLE_CSW_ATTRIBUTE;
class ACE_CSW {
enabled = 1;
proxyWeapon = QGVAR(rhs_MK19);
magazineLocation = "_target selectionPosition 'magazine'";
disassembleWeapon = QGVAR(mk19_carry);
disassembleTurret = QEGVAR(csw,m3TripodLow);
desiredAmmo = 48;
ammoLoadTime = 10;
ammoUnloadTime = 8;
};
};
class StaticATWeapon: StaticWeapon {};
class RHS_TOW_TriPod_base: StaticATWeapon {
// ENABLE_CSW_ATTRIBUTE;
class ACE_CSW {
enabled = 1;
proxyWeapon = QGVAR(rhs_weap_TOW_Launcher_static);
magazineLocation = "_target selectionPosition 'tube'";
disassembleWeapon = QGVAR(tow_carry);
disassembleTurret = QEGVAR(csw,m220Tripod);
desiredAmmo = 1;
ammoLoadTime = 8;
ammoUnloadTime = 5;
};
};
class rhsusf_infantry_usmc_base;

View File

@ -1,4 +1,3 @@
class CfgWeapons {
class NVGoggles;
class rhsusf_ANPVS_14: NVGoggles { // Monocular
@ -231,7 +230,10 @@ class CfgWeapons {
};
};
class Launcher_Base_F;
class Launcher;
class Launcher_Base_F: Launcher {
class WeaponSlotsInfo;
};
class rhs_weap_smaw: Launcher_Base_F {
ace_reloadlaunchers_enabled = 1;
ace_overpressure_angle = 45;
@ -420,4 +422,91 @@ class CfgWeapons {
class RHS_jetpilot_usaf: H_HelmetB {
HEARING_PROTECTION_VICCREW
};
CREATE_CSW_PROXY(rhs_mortar_81mm);
CREATE_CSW_PROXY(RHS_M2);
CREATE_CSW_PROXY(RHS_MK19);
CREATE_CSW_PROXY(Rhs_weap_TOW_Launcher_static);
class GVAR(m252_carry): Launcher_Base_F {
class ACE_CSW {
type = "weapon";
deployTime = 20;
pickupTime = 25;
class assembleTo {
EGVAR(csw,mortarBaseplate) = "RHS_M252_WD";
};
};
class WeaponSlotsInfo: WeaponSlotsInfo {
mass = 620; // M252 Mortar Weight
};
displayName = ECSTRING(CSW,m252_tube);
author = ECSTRING(common,ACETeam);
scope = 2;
model = QPATHTOEF(apl,ACE_CSW_Bag.p3d);
modes[] = {};
picture = "\rhsusf\addons\rhsusf_heavyweapons\data\ico\mortar_m251_CA.paa";
};
class GVAR(m2_carry): Launcher_Base_F {
class ACE_CSW {
type = "weapon";
deployTime = 4;
pickupTime = 4;
class assembleTo {
EGVAR(csw,m3Tripod) = "RHS_M2StaticMG_WD";
EGVAR(csw,m3TripodLow) = "RHS_M2StaticMG_MiniTripod_WD";
};
};
class WeaponSlotsInfo: WeaponSlotsInfo {
mass = 840;
};
displayName = ECSTRING(CSW,m2_gun);
author = ECSTRING(common,ACETeam);
scope = 2;
model = QPATHTOEF(apl,ACE_CSW_Bag.p3d);
modes[] = {};
picture = "\rhsusf\addons\rhsusf_editorPreviews\data\rhs_M2StaticMG_D.paa";
};
class GVAR(mk19_carry): Launcher_Base_F {
class ACE_CSW {
type = "weapon";
deployTime = 4;
pickupTime = 4;
class assembleTo {
EGVAR(csw,m3TripodLow) = "RHS_MK19_TriPod_WD";
};
};
class WeaponSlotsInfo: WeaponSlotsInfo {
mass = 770;
};
displayName = ECSTRING(CSW,mk19_gun);
author = ECSTRING(common,ACETeam);
scope = 2;
model = QPATHTOEF(apl,ACE_CSW_Bag.p3d);
modes[] = {};
picture = "\rhsusf\addons\rhsusf_heavyweapons\data\ico\mk19_stat_CA.paa";
};
class GVAR(tow_carry): Launcher_Base_F {
class ACE_CSW {
type = "weapon";
deployTime = 4;
pickupTime = 4;
class assembleTo {
EGVAR(csw,m220Tripod) = "RHS_TOW_TriPod_WD";
};
};
class WeaponSlotsInfo: WeaponSlotsInfo {
mass = 500;
};
displayName = ECSTRING(CSW,tow_tube);
author = ECSTRING(common,ACETeam);
scope = 2;
model = QPATHTOEF(apl,ACE_CSW_Bag.p3d);
modes[] = {};
picture = "\rhsusf\addons\rhsusf_heavyweapons\data\Ico\tow_static_CA.paa";
};
};

View File

@ -1,4 +1,5 @@
#include "script_component.hpp"
#include "\z\ace\addons\csw\script_config_macros_csw.hpp"
class CfgPatches {
class ADDON {
@ -6,7 +7,7 @@ class CfgPatches {
units[] = {};
weapons[] = {};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_javelin", "ace_rearm", "ace_refuel", "ace_repair", "rhsusf_c_weapons", "rhsusf_c_troops", "rhsusf_c_m1a1", "rhsusf_c_m1a2", "RHS_US_A2_AirImport", "rhsusf_c_m109", "rhsusf_c_HEMTT_A4", "rhsusf_c_hmmwv", "rhsusf_c_rg33", "rhsusf_c_fmtv", "rhsusf_c_m113", "RHS_US_A2Port_Armor", "rhsusf_c_melb"};
requiredAddons[] = {"ace_javelin", "ace_rearm", "ace_refuel", "ace_repair", "ace_csw", "rhsusf_c_weapons", "rhsusf_c_troops", "rhsusf_c_m1a1", "rhsusf_c_m1a2", "RHS_US_A2_AirImport", "rhsusf_c_m109", "rhsusf_c_HEMTT_A4", "rhsusf_c_hmmwv", "rhsusf_c_rg33", "rhsusf_c_fmtv", "rhsusf_c_m113", "RHS_US_A2Port_Armor", "rhsusf_c_melb"};
author = ECSTRING(common,ACETeam);
authors[] = {"Ruthberg", "GitHawk", "BaerMitUmlaut"};
url = ECSTRING(main,URL);
@ -21,3 +22,5 @@ class CfgPatches {
#include "CfgWeapons.hpp"
#include "CfgVehicles.hpp"
#include "CfgGlasses.hpp"
#include "CfgMagazineGroups.hpp"