feat: add defend task module with configurable parameters and attributes

This commit is contained in:
Jacob Schmidt 2026-04-26 00:05:45 -05:00
parent d7018742b5
commit 3668223f11

View File

@ -267,6 +267,128 @@ class CfgVehicles {
};
};
class FORGE_Module_Defend: Module_F {
scope = 2;
displayName = "Defend Task";
category = "FORGE_Modules";
function = QFUNC(defendModule);
functionPriority = 1;
isGlobal = 1;
isTriggerActivated = 1;
isDisposable = 1;
is3DEN = 0;
canSetArea = 0;
canSetAreaShape = 0;
canSetAreaHeight = 0;
class AttributeValues {};
class Attributes: AttributesBase {
class TaskID: Edit {
property = "FORGE_Module_Defend_TaskID";
displayName = "Task ID";
tooltip = "Unique identifier for this task";
typeName = "STRING";
};
class DefenseZone: Edit {
property = "FORGE_Module_Defend_DefenseZone";
displayName = "Defense Zone Marker";
tooltip = "Name of the marker defining the defense zone";
typeName = "STRING";
};
class DefendTime: Edit {
property = "FORGE_Module_Defend_DefendTime";
displayName = "Defend Time";
tooltip = "Time in seconds the zone must be held";
typeName = "NUMBER";
defaultValue = 600;
};
class WaveCount: Edit {
property = "FORGE_Module_Defend_WaveCount";
displayName = "Wave Count";
tooltip = "Number of enemy waves to spawn";
typeName = "NUMBER";
defaultValue = 3;
};
class WaveCooldown: Edit {
property = "FORGE_Module_Defend_WaveCooldown";
displayName = "Wave Cooldown";
tooltip = "Time in seconds between enemy waves";
typeName = "NUMBER";
defaultValue = 300;
};
class MinBlufor: Edit {
property = "FORGE_Module_Defend_MinBlufor";
displayName = "Minimum BLUFOR";
tooltip = "Minimum number of BLUFOR units that must remain in the zone";
typeName = "NUMBER";
defaultValue = 1;
};
class CompanyFunds: Edit {
property = "FORGE_Module_Defend_CompanyFunds";
displayName = "Reward Funds";
tooltip = "Amount of funds awarded on success";
typeName = "NUMBER";
defaultValue = 0;
};
class RatingFail: Edit {
property = "FORGE_Module_Defend_RatingFail";
displayName = "Rating Loss";
tooltip = "Amount of rating lost on failure";
typeName = "NUMBER";
defaultValue = 0;
};
class RatingSuccess: Edit {
property = "FORGE_Module_Defend_RatingSuccess";
displayName = "Rating Gain";
tooltip = "Amount of rating gained on success";
typeName = "NUMBER";
defaultValue = 0;
};
class EndSuccess: Combo {
property = "FORGE_Module_Defend_EndSuccess";
displayName = "End on Success";
tooltip = "End mission when task is completed successfully";
typeName = "BOOL";
defaultValue = 0;
class Values {
class EnableEndSuccess { name = "Enable"; value = 1; };
class DisableEndSuccess { name = "Disable"; value = 0; };
};
};
class EndFail: Combo {
property = "FORGE_Module_Defend_EndFail";
displayName = "End on Failure";
tooltip = "End mission when task fails";
typeName = "BOOL";
defaultValue = 0;
class Values {
class EnableEndFail { name = "Enable"; value = 1; };
class DisableEndFail { name = "Disable"; value = 0; };
};
};
};
class ModuleDescription: ModuleDescription {
description = "Creates a defend task with configurable defense zone and enemy wave parameters";
sync[] = { "Anything" };
class Anything {
description[] = {
"Defend task module",
"Enemy waves are spawned automatically; no synced entities are required"
};
position = 1;
direction = 1;
optional = 1;
duplicate = 1;
};
};
};
class FORGE_Module_Defuse: Module_F {
scope = 2;
displayName = "Defuse Task";