Просмотр исходного кода

Refactor, Add select object module, add category, Add DEBUG option

m3ales 4 лет назад
Родитель
Сommit
63f49820fc

+ 21 - 1
addons - Copy/RD501_Droid_Dispenser/XEH_postInit.sqf

@@ -1,4 +1,24 @@
 #include "config_macros.hpp"
-GVAR(spawnTime) = 5;
+
+// The time between each droid spawn on a droid dispenser. Is copied so will only effect new dispensers.
+GVAR(spawnTime) = 8;
+
+// How many units can be alive for any given droid dispenser.  Is copied so will only effect new dispensers.
+GVAR(droidDispenserMaxUnitsGlobal) = 20;
+
+// What units can be spawned Is copied so will only effect new dispensers.
+GVAR(droidDispenserPossibleUnitsGlobal) = [
+	"RD501_opfor_unit_B2_droid_Standard",
+	"RD501_opfor_unit_b1_grenadier",
+	"RD501_opfor_unit_B1_AT_heavy",
+	"RD501_opfor_unit_B1",
+	"RD501_opfor_unit_B1_marksman",
+	"RD501_opfor_unit_B1_AT_light"
+];
+
+// Orbital Dispenser Module Specific
+//The object to spawn for orbital missions, Is copied so will only effect new dispensers.
 GVAR(spawnerDefaultObject) = "Land_Cargo_House_V1_F";
+
+// The time to delay spawning the dispenser object for orbital missions
 GVAR(fireSupportSpawnDelay) = 8;

+ 4 - 3
addons - Copy/RD501_Droid_Dispenser/XEH_prep.hpp

@@ -1,5 +1,6 @@
 #include "config_macros.hpp"
 #define PREP(name) FUNC(name) = compile preProcessFileLineNumbers QUOTE(ADDON\functions\CONCAT(fnc_,name).sqf)
-PREP(spawnDroidPFH);
-PREP(spawnerInit);
-PREP(newSpawner);
+PREP(droidDispenserPFH);
+PREP(droidDispenserInit);
+PREP(moduleOrbitalDroidDispenser);
+PREP(moduleDroidDispenser);

+ 31 - 9
addons - Copy/RD501_Droid_Dispenser/config.cpp

@@ -7,44 +7,66 @@ class CfgPatches {
 		name = QUOTE(Droid Dispenser);
 		author = "RD501";
 		requiredAddons[] = {};
-		units[] = { QUOTE(ORDNANCE(DroidDispenser)) };
+		units[] = { 
+			QGVAR(moduleOrdnanceDroidDispenser),
+			GVAR(moduleDroidDispenser)
+		};
 		weapons[] = {};
 	};
 };
+class CfgFactionClasses {
+    class GVAR(DroidDispenser) {
+        displayName = "Droid Dispenser";
+        priority = 2;
+        side = 7;
+    };
+};
 class CfgVehicles
 {
+	class Module_F;
 	class ModuleOrdnance_F;
-	class ORDNANCE(DroidDispenser): ModuleOrdnance_F
+	class GVAR(moduleOrdnanceDroidDispenser): ModuleOrdnance_F
 	{
 		author = "RD501";
 		isGlobal = 1;
 		scope = 1;
 		scopeCurator = 2;
 		simulation = "house";
-		category = "Ordnance";
+		category = QGVAR(DroidDispenser);
 		model = "\a3\Modules_F_Curator\Ordnance\surfacehowitzer.p3d";
-        function = QUOTE(FUNC(newSpawner));
+        function = QUOTE(FUNC(moduleOrbitalDroidDispenser));
         functionPriority = 1;
-		displayName = QUOTE(Droid Dispenser);
+		displayName = QUOTE(Droid Dispenser [Orbital]);
 		portrait = "\a3\Modules_F_Curator\Data\portraitOrdnanceMortar_ca.paa";
-		ammo = QUOTE(RD501_Droid_Dispenser_Round);
+		ammo = QGVAR(DroidDispenser_Round);
 		delete Arguments;
 	};
+    class GVAR(moduleDroidDispenser): Module_F {
+		author = "RD501";
+        curatorCanAttach = 1;
+		isGlobal = 1;
+		scope = 1;
+		scopeCurator = 2;
+        isTriggerActivated = 0;
+        category = QGVAR(DroidDispenser);
+		displayName = QUOTE(Droid Dispenser);
+        function = QUOTE(FUNC(moduleDroidDispenser));
+    };
 };
 class CfgAmmo
 {
 	class ModuleOrdnanceHowitzer_F_ammo;
 	class ModuleOrdnanceMortar_F_ammo;
 	class ModuleOrdnanceRocket_F_ammo;
-	class RD501_Droid_Dispenser_Round : ModuleOrdnanceHowitzer_F_ammo
+	class GVAR(DroidDispenser_Round) : ModuleOrdnanceHowitzer_F_ammo
 	{
 		caliber = 950;
-		hit = 1000;
+		hit = 5000;
 		allowAgainstInfantry = 1;
 		canLock = 0;
 		explosive = 1;
 		fuseDistance = 30;
-		indirectHit = 200;
+		indirectHit = 500;
 		indirectHitRange = 2;
 		maxSpeed = 1100;
 		typicalSpeed = 1050;

+ 1 - 1
addons - Copy/RD501_Droid_Dispenser/config_macros.hpp

@@ -10,7 +10,7 @@
 	#define ARR_2(a,b) a,b
 	#define ARR_3(a,b,c) a,b,c
 	#define ARR_4(a,b,c,d) a,b,c,d
-	#define GVAR(name) CONCAT(PREFIX,CONCAT(_,name))
+	#define GVAR(name) CONCAT_3(PREFIX,_,name)
 	#define QGVAR(name) QUOTE(GVAR(name))
 	#define UNIT_NAME(side,name) CONCAT_3(PREFIX,_,CONCAT_3(side,_unit_,name))
 	#define ORDNANCE(name) CONCAT_3(PREFIX,_Ordnance_,name)

+ 3 - 4
addons - Copy/RD501_Droid_Dispenser/functions/fnc_spawnerInit.sqf → addons - Copy/RD501_Droid_Dispenser/functions/fnc_droidDispenserInit.sqf

@@ -9,10 +9,9 @@ if(!isServer) exitWith
 LOGF_1("Initialising spawner %1",_target);
 // TODO: Read these vars from config, maybe CfgVehicles to allow placement of vehicles, although may be better to use static object with HP and destroyed mesh rather
 _target setVariable [QGVAR(group), createGroup [opfor, true]]; // group that units will be spawned into
-_target setVariable [QGVAR(boundUnits), []]; // units currently bound to this unit
-_target setVariable [QGVAR(maxUnits),20]; // max units that can be alive at any time from this spawner
-_target setVariable [QGVAR(possibleUnits),["RD501_opfor_unit_B2_droid_Standard","RD501_opfor_unit_b1_grenadier","RD501_opfor_unit_B2_droid_Standard","RD501_opfor_unit_B1_AT_heavy","RD501_opfor_unit_B1","RD501_opfor_unit_B1_marksman"]];
+_target setVariable [QGVAR(maxUnits),GVAR(droidDispenserMaxUnitsGlobal)]; // max units that can be alive at any time from this spawner
+_target setVariable [QGVAR(possibleUnits),GVAR(droidDispenserPossibleUnitsGlobal)];
 // Start PFH
 LOGF_1("Attempting to start PFH on %1",_target);
 _params= [_target];
- _handle = [FUNC(spawnDroidPFH), GVAR(spawnTime), _params] call CBA_fnc_addPerFrameHandler;
+ _handle = [FUNC(droidDispenserPFH), GVAR(spawnTime), _params] call CBA_fnc_addPerFrameHandler;

+ 6 - 4
addons - Copy/RD501_Droid_Dispenser/functions/fnc_spawnDroidPFH.sqf → addons - Copy/RD501_Droid_Dispenser/functions/fnc_droidDispenserPFH.sqf

@@ -1,7 +1,8 @@
 #include "function_macros.hpp"
 params ["_args", "_handle"];
 _args params ["_target"];
-systemChat format["Evaluating PFH %1",_handle];
+
+LOGF_1("Evaluating PFH %1",_handle);
 
 if(isNil "_target") exitWith {
 	LOGF_1("Removing PFH %1, Reason: Null Target",_handle);
@@ -14,7 +15,7 @@ if(!isServer) exitWith {
 }; 
 
 if(!alive _target) exitWith {
-	LOGF_1("Removing PFH %1, Reason: Spawner Dead",_handle);
+	LOGF_1("Removing PFH %1, Reason: Droid Dispenser Dead",_handle);
 	[_handle] call CBA_fnc_removePerFrameHandler;
 };
 
@@ -28,7 +29,7 @@ if(isNil "_group") then
 };
 
 _aliveUnits = ({alive _x} count (units _group));
-LOGF_2("Alive units for spawner %1 :: %2",_target,_aliveUnits);
+LOGF_2("Alive units for Droid Dispenser %1 :: %2",_target,_aliveUnits);
 if(_aliveUnits < _target getVariable QGVAR(maxUnits)) exitWith 
 {
 	_possibleUnits = _target getVariable QGVAR(possibleUnits);
@@ -37,6 +38,7 @@ if(_aliveUnits < _target getVariable QGVAR(maxUnits)) exitWith
 		_selectedUnit = selectRandom _possibleUnits; // if its a b2, (first be default atm) random again (requires 2 rolls on b2 to spawn one)
 	};
 	LOGF_2("%1 spawning in %2",_target,_selectedUnit);
-	_group createUnit [_selectedUnit, position _target, [], 0, "NONE"];
+	_unit = _group createUnit [_selectedUnit, position _target, [], 0, "NONE"];
+	_unit call ace_common_fnc_fixPosition;
 };
 LOGF_1("%1 not spawning anything",_target);

+ 8 - 0
addons - Copy/RD501_Droid_Dispenser/functions/fnc_moduleDroidDispenser.sqf

@@ -0,0 +1,8 @@
+#include "function_macros.hpp"
+params["_logic"];
+if !(local _logic) exitWith {};
+private _unit = attachedTo _logic;
+
+_unit call FUNC(droidDispenserInit);
+
+deleteVehicle _logic;

+ 16 - 0
addons - Copy/RD501_Droid_Dispenser/functions/fnc_moduleOrbitalDroidDispenser.sqf

@@ -0,0 +1,16 @@
+#include "function_macros.hpp"
+
+LOG("Triggered Orbital Drop Droid Dispenser");
+//wait for projectile to land and then spawn vehicle
+params["_logic"];
+_position = position _logic;
+LOGF_2("Firing Droid Dispenser Artillery at '%1', for '%2'",_postition,_unit);
+[{
+	params["_position"];
+	_spawner = GVAR(spawnerDefaultObject) createVehicle _position;
+	LOGF_2("Created Droid Dispenser Object '%1' at '%2'",_spawner,position _spawner);
+	[_spawner] call FUNC(droidDispenserInit);
+}, [_position], GVAR(fireSupportSpawnDelay)] call CBA_fnc_waitAndExecute;
+
+// fire projectile
+_this call ace_zeus_fnc_bi_moduleProjectile;

+ 0 - 16
addons - Copy/RD501_Droid_Dispenser/functions/fnc_newSpawner.sqf

@@ -1,16 +0,0 @@
-#include "function_macros.hpp"
-
-LOG("Triggered newSpawner");
-//wait for projectile to land and then spawn vehicle
-params["_module"];
-_position = position _module;
-LOGF_2("Firing Spawner Artillery at %1, for %2",_postition,_unit);
-[{
-	params["_position"];
-	_spawner = GVAR(spawnerDefaultObject) createVehicle _position;
-	LOGF_2("Created Spawner %1 at %2",_spawner,position _spawner);
-	[_spawner] call FUNC(spawnerInit);
-}, [_position], GVAR(fireSupportSpawnDelay)] call CBA_fnc_waitAndExecute;
-
-// fire projectile
-_this call ace_zeus_fnc_bi_moduleProjectile;

+ 14 - 1
addons - Copy/RD501_Droid_Dispenser/functions/function_macros.hpp

@@ -1,4 +1,5 @@
 #include "../config_macros.hpp";
+#ifdef DEBUG
 #define LOG_BASE(level,msg) diag_log text format[QUOTE(ADDON[level]: %1), msg]
 #define LOG(msg) LOG_BASE(DEBUG, LOG_FILENUMBER(msg))
 #define LOGF_1(msg,arg0) LOG(format[ARR_2(msg,arg0)])
@@ -7,4 +8,16 @@
 #define LOG_ERROR(msg) LOG_BASE(ERR,LOG_FILENUMBER(msg))
 #define LOG_ERRORF_1(msg,arg0) LOG_ERROR(format[ARR_2(msg,arg0)])
 #define LOG_ERRORF_2(msg,arg0,arg1) LOG_ERROR(format[ARR_3(msg,arg0,arg1)])
-#define LOG_FILENUMBER(msg) format [ARR_4('%1 at %2:%3',msg,__FILE__,__LINE__ + 1)]
+#define LOG_FILENUMBER(msg) format [ARR_4('%1 at %2:%3',msg,__FILE__,__LINE__ + 1)]
+#endif
+#ifndef DEBUG
+#define LOG_BASE(level,msg) diag_log text format[QUOTE(ADDON[level]: %1), msg]
+#define LOG_FILENUMBER(msg) format [ARR_4('%1 at %2:%3',msg,__FILE__,__LINE__ + 1)]
+#define LOG_ERROR(msg) LOG_BASE(ERR,LOG_FILENUMBER(msg))
+#define LOG_ERRORF_1(msg,arg0) LOG_ERROR(format[ARR_2(msg,arg0)])
+#define LOG_ERRORF_2(msg,arg0,arg1) LOG_ERROR(format[ARR_3(msg,arg0,arg1)])
+#define LOG(msg) //not debug
+#define LOGF_1(msg,arg0) //not debug
+#define LOGF_2(msg,arg0,arg1) //not debug
+#define LOGF_3(msg,arg0,arg1,arg2) //not debug
+#endif