diff --git a/README.md b/README.md new file mode 100644 index 0000000..a438ec0 --- /dev/null +++ b/README.md @@ -0,0 +1,49 @@ +DMS - File rev 0.48 - Date: 2014 - 12 - 27 +=== + +Defents mission system + +Stuff is not always working as it should. This works but you will need to have some knowledge on how to +execute files serverside in Arma 3. + +Contains two MAAIN twst missions. No array for side missions at the moment. Will be added later. + +Missions should spawn AI. To keep ai staying, unquote the last part. Should keep them active and up for 4 hours. + + +WHAT DOES THIS NOT HAVE AND WHATS IN DEVELOPMENT: + +- Ai spawning only when player is x distance to mission. +- Attach Ai to player instead of server side. + + +If you believe that the files I use and scripts I have resemble yours, please do tell me at +admin@numenadayz.com and I will correct it. Or PM me on the epoch forums. + +We do not want to steal code now do we ;) + + +HOW TO INSTALL +=== + +Make custom pbo +Call my file DMS_INIT.sqf + +Eeh.. put files in root folder. + + +What to modify? +=== + +Change mission timer in selectMission.sqf + +_minTime = 1*1; //1 sec +_maxTime = 2*2; //4 sec + + +Open your init.sqf or add an init.sqf to your Exile.Altis.PBO file. and add: + + +"GlobalHint" addPublicVariableEventHandler { + hint parseText format["%1", (_this select 1) select 1]; +}; \ No newline at end of file diff --git a/crates/DMS_CreateBox.sqf b/crates/DMS_CreateBox.sqf new file mode 100644 index 0000000..d75d33b --- /dev/null +++ b/crates/DMS_CreateBox.sqf @@ -0,0 +1,24 @@ +// The content of the boxes. +DMS_Box1 = { +private["_crate"]; + _crate = _this select 0; + clearWeaponCargoGlobal _crate; + clearMagazineCargoGlobal _crate; + clearItemCargoGlobal _crate; + _crate addMagazineCargoGlobal ["Exile_Item_WoodWallKit",6]; + _crate addMagazineCargoGlobal ["Exile_Item_WoodWallHalfKit",2]; + _crate addMagazineCargoGlobal ["Exile_Item_DoorwayKit",1]; + _crate addMagazineCargoGlobal ["Exile_Item_PlasticBottleFreshWater",5]; + _crate addMagazineCargoGlobal ["Exile_Melee_Axe",2]; + _crate addMagazineCargoGlobal ["Exile_Item_BBQ_Sandwich",2]; + _crate addMagazineCargoGlobal ["Exile_Item_Beer",3]; + _crate addMagazineCargoGlobal ["Exile_Item_CamoTentKit",3]; + _crate addMagazineCargoGlobal ["Exile_Item_CampFireKit",5]; + _crate addMagazineCargoGlobal ["Exile_Item_InstaDoc",5]; + _crate addMagazineCargoGlobal ["Exile_Item__JunkMetal",2]; + _crate addMagazineCargoGlobal ["Exile_Item_SafeKit",1]; + _crate addMagazineCargoGlobal ["Exile_Item_MetalBoard",2]; + _crate addMagazineCargoGlobal ["Exile_Item_DuctTape",2]; + _crate addMagazineCargoGlobal ["Exile_Item_ExtensionCord",2]; + _crate addMagazineCargoGlobal ["Exile_Item_PortableGeneratorkit",1]; +}; diff --git a/missions/MM1.sqf b/missions/MM1.sqf new file mode 100644 index 0000000..55800e7 --- /dev/null +++ b/missions/MM1.sqf @@ -0,0 +1,60 @@ +private ["_crate","_pos","_missname","_aiAmmount","_misText","_missEnd","_group"]; + + +// associate pos with find safe pos fnc +_pos = call DMS_findSafePos; + + + +_missname = "Main Mission 1"; +diag_log format["DMS :: Main Mission 1 started at [%1]",_pos]; + +_misText = "Main Mission 1. + +
+------------------------------ +
+ Mission now starting! Check your map!"; + +GlobalHint = [0,_misText]; +publicVariable "GlobalHint"; + +// Spawn Marker +[_pos,_missname] execVM "mission\scripts\DMS_CreateMarker.sqf"; + +// Spawn Box +_crate = createVehicle ["Box_NATO_AmmoOrd_F",[(_pos select 0) - 10, _pos select 1,0],[], 0, "CAN_COLLIDE"]; +[_crate] call DMS_Box1; +sleep 2; +//_crate = [_pos,40,4,2,2] execVM "mission\crates\MM_Box1.sqf"; + +// spawn AI +//[(_pos),(5),(4)] call DMS_SpawnAI; +[(_pos),(5),(4)] call DMS_DMS_SpawnAI; + +waitUntil{{isPlayer _x && _x distance _pos < 30 } count playableUnits > 0}; +/* + +[_pos] call MissionCompleted; +[_pos,] call MissionCleanup; +*/ +_missEnd = "Main Mission 1. + +
+------------------------------ +
+ Mission has ended, good job!"; + +GlobalHint = [0,_missEnd]; +publicVariable "GlobalHint"; + +// Run Cleanup +["Ended","Clean"] call DMS_CleanUp; + + + + + +sleep 150; + +[] execVM "mission\scripts\DMS_selectMission.sqf"; diff --git a/missions/MM10.sqf b/missions/MM10.sqf new file mode 100644 index 0000000..1da14c1 --- /dev/null +++ b/missions/MM10.sqf @@ -0,0 +1,65 @@ +private ["_crate","_pos","_missname","_aiAmmount","_misText","_missEnd","_group"]; + +/* +_playerClose = false; +_mainTimer = true; +//_missStartTime = floor(time); +*/ + +// associate pos with find safe pos +_pos = call DMS_findSafePos; + + +_missname = "Main Mission 10"; +diag_log format["DMS :: Main Mission 10 started at [%1]",_pos]; + +_misText = "Main Mission 10. + +
+------------------------------ +
+ Mission now starting! Check your map!"; + +GlobalHint = [0,_misText]; +publicVariable "GlobalHint"; + + +// Spawn Marker +[_pos,_missname] execVM "mission\scripts\DMS_CreateMarker.sqf"; + +// Spawn Box +_crate = createVehicle ["Box_NATO_AmmoOrd_F",[(_pos select 0) - 10, _pos select 1,0],[], 0, "CAN_COLLIDE"]; +[_crate] call DMS_Box1; + +sleep 2; +//_crate = [_pos,40,4,2,2] execVM "mission\crates\MM_Box1.sqf"; + +// spawn AI +//[(_pos),(5),(4)] call DMS_SpawnAI; +[(_pos),(5),(4)] call DMS_SpawnAI; + + + +waitUntil{{isPlayer _x && _x distance _pos < 30 } count playableUnits > 0}; + +_missEnd = "Main Mission 1. + +
+------------------------------ +
+ Mission has ended, good job!"; + +GlobalHint = [0,_missEnd]; +publicVariable "GlobalHint"; + +// Run Cleanup +["Ended","Clean"] call DMS_CleanUp; + + + + + +sleep 150; + +[] execVM "mission\scripts\DMS_selectMission.sqf"; + diff --git a/missions/MM2.sqf b/missions/MM2.sqf new file mode 100644 index 0000000..ace8d41 --- /dev/null +++ b/missions/MM2.sqf @@ -0,0 +1,62 @@ +private ["_crate","_pos","_missname","_aiAmmount","_misText","_missEnd","_group"]; + +/* +_playerClose = false; +_mainTimer = true; +//_missStartTime = floor(time); +*/ + +// associate pos with find safe pos +_pos = call DMS_findSafePos; + + +_missname = "Main Mission 2"; +diag_log format["DMS :: Main Mission 2 started at [%1]",_pos]; + +_misText = "Main Mission 2. + +
+------------------------------ +
+ Mission now starting! Check your map!"; + +GlobalHint = [0,_misText]; +publicVariable "GlobalHint"; + +// Spawn Marker +[_pos,_missname] execVM "mission\scripts\DMS_CreateMarker.sqf"; + +// Spawn Box +_crate = createVehicle ["Box_NATO_AmmoOrd_F",[(_pos select 0) - 10, _pos select 1,0],[], 0, "CAN_COLLIDE"]; +[_crate] call DMS_Box1; + +sleep 2; +//_crate = [_pos,40,4,2,2] execVM "mission\crates\MM_Box1.sqf"; + +// spawn AI +//[(_pos),(5),(4)] call DMS_SpawnAI; +[(_pos),(5),(4)] call DMS_DMS_SpawnAI; + + + +waitUntil{{isPlayer _x && _x distance _pos < 30 } count playableUnits > 0}; + +_missEnd = "Main Mission 1. + +
+------------------------------ +
+ Mission has ended, good job!"; + +GlobalHint = [0,_missEnd]; +publicVariable "GlobalHint"; + +// Run Cleanup +["Ended","Clean"] call DMS_CleanUp; + + + + +sleep 150; + +[] execVM "mission\scripts\DMS_selectMission.sqf"; diff --git a/missions/MM3.sqf b/missions/MM3.sqf new file mode 100644 index 0000000..654d5eb --- /dev/null +++ b/missions/MM3.sqf @@ -0,0 +1,63 @@ +private ["_crate","_pos","_missname","_aiAmmount","_misText","_missEnd","_group"]; + +/* +_playerClose = false; +_mainTimer = true; +//_missStartTime = floor(time); +*/ + +// associate pos with find safe pos +_pos = call DMS_findSafePos; + + +_missname = "Main Mission 3"; +diag_log format["DMS :: Main Mission 3 started at [%1]",_pos]; + +_misText = "Main Mission 3.
+
+
+------------------------------ +
+ Mission now starting! Check your map!"; + +GlobalHint = [0,_misText]; +publicVariable "GlobalHint"; + +// Spawn Marker +[_pos,_missname] execVM "mission\scripts\DMS_CreateMarker.sqf"; + +// Spawn Box +_crate = createVehicle ["Box_NATO_AmmoOrd_F",[(_pos select 0) - 10, _pos select 1,0],[], 0, "CAN_COLLIDE"]; +[_crate] call DMS_Box1; +sleep 2; +//_crate = [_pos,40,4,2,2] execVM "mission\crates\MM_Box1.sqf"; + +// spawn AI +//[(_pos),(5),(4)] call DMS_SpawnAI; +[(_pos),(5),(4)] call DMS_SpawnAI; + + + +waitUntil{{isPlayer _x && _x distance _pos < 30 } count playableUnits > 0}; + +_missEnd = "Main Mission 3. + +
+------------------------------ +
+ Mission has ended, good job!"; + +GlobalHint = [0,_missEnd]; +publicVariable "GlobalHint"; + + +// Run Cleanup +["Ended","Clean"] call DMS_CleanUp; + + + + + +sleep 150; + +[] execVM "mission\scripts\DMS_selectMission.sqf"; \ No newline at end of file diff --git a/missions/MM4.sqf b/missions/MM4.sqf new file mode 100644 index 0000000..9f2b9fa --- /dev/null +++ b/missions/MM4.sqf @@ -0,0 +1,63 @@ +private ["_crate","_pos","_missname","_aiAmmount","_misText","_missEnd","_group"]; + +/* +_playerClose = false; +_mainTimer = true; +//_missStartTime = floor(time); +*/ + +// associate pos with find safe pos +_pos = call DMS_findSafePos; + + + _missname = "Main Mission 4"; +diag_log format["DMS :: Main Mission 4 started at [%1]",_pos]; + +_misText = "Main Mission 4. +
+------------------------------ +
+ Mission now starting! Check your map!"; + +GlobalHint = [0,_misText]; +publicVariable "GlobalHint"; + + + +// Spawn Marker +[_pos,_missname] execVM "mission\scripts\DMS_CreateMarker.sqf"; + +// Spawn Box +_crate = createVehicle ["Box_NATO_AmmoOrd_F",[(_pos select 0) - 10, _pos select 1,0],[], 0, "CAN_COLLIDE"]; +[_crate] call DMS_Box1; +sleep 2; +//_crate = [_pos,40,4,2,2] execVM "mission\crates\MM_Box1.sqf"; + +// spawn AI +//[(_pos),(5),(4)] call DMS_SpawnAI; +[(_pos),(5),(4)] call DMS_SpawnAI; + + + +waitUntil{{isPlayer _x && _x distance _pos < 30 } count playableUnits > 0}; + +_missEnd = "Main Mission 1. + +
+------------------------------ +
+ Mission has ended, good job!"; + +GlobalHint = [0,_missEnd]; +publicVariable "GlobalHint"; + +// Run Cleanup +["Ended","Clean"] call DMS_CleanUp; + + + + +sleep 150; + +[] execVM "mission\scripts\DMS_selectMission.sqf"; + diff --git a/missions/MM5.sqf b/missions/MM5.sqf new file mode 100644 index 0000000..522c2ea --- /dev/null +++ b/missions/MM5.sqf @@ -0,0 +1,64 @@ +private ["_crate","_pos","_missname","_aiAmmount","_misText","_missEnd","_group"]; + +/* +_playerClose = false; +_mainTimer = true; +//_missStartTime = floor(time); +*/ + +// associate pos with find safe pos +_pos = call DMS_findSafePos; + +_missname = "Main Mission 5"; +diag_log format["DMS :: Main Mission 5 started at [%1]",_pos]; + +_misText = "Main Mission 5. + +
+------------------------------ +
+ Mission now starting! Check your map!"; + +GlobalHint = [0,_misText]; +publicVariable "GlobalHint"; + + +// Spawn Marker +[_pos,_missname] execVM "mission\scripts\DMS_CreateMarker.sqf"; + +// Spawn Box +_crate = createVehicle ["Box_NATO_AmmoOrd_F",[(_pos select 0) - 10, _pos select 1,0],[], 0, "CAN_COLLIDE"]; +//[_crate] call createBox; +// [_crate, amount of weapons, amount of ammo] call createBox; +[_crate] call DMS_Box1; + +sleep 2; + + +//[_pos, amount of ai ] call DMS_SpawnAI; +[_pos,4] call DMS_SpawnAI; + + + +waitUntil{{isPlayer _x && _x distance _pos < 30 } count playableUnits > 0}; + + +_missEnd = "Main Mission 1. + +
+------------------------------ +
+ Mission has ended, good job!"; + +GlobalHint = [0,_missEnd]; +publicVariable "GlobalHint"; + +// Run Cleanup +["Ended","Clean"] call DMS_CleanUp; + + + + +sleep 150; + +[] execVM "mission\scripts\DMS_selectMission.sqf"; diff --git a/missions/MM6.sqf b/missions/MM6.sqf new file mode 100644 index 0000000..c08d73a --- /dev/null +++ b/missions/MM6.sqf @@ -0,0 +1,64 @@ +private ["_crate","_pos","_missname","_aiAmmount","_misText","_missEnd","_group"]; + +/* +_playerClose = false; +_mainTimer = true; +//_missStartTime = floor(time); +*/ + +// associate pos with find safe pos +_pos = call DMS_findSafePos; + + +_missname = "Main Mission 6"; +diag_log format["DMS :: Main Mission 6 started at [%1]",_pos]; + +_misText = "Main Mission 10. + +
+------------------------------ +
+ Mission now starting! Check your map!"; + +GlobalHint = [0,_misText]; +publicVariable "GlobalHint"; + +// Spawn Marker +[_pos,_missname] execVM "mission\scripts\DMS_CreateMarker.sqf"; + +// Spawn Box +_crate = createVehicle ["Box_NATO_AmmoOrd_F",[(_pos select 0) - 10, _pos select 1,0],[], 0, "CAN_COLLIDE"]; +[_crate] call DMS_Box1; + +sleep 2; +//_crate = [_pos,40,4,2,2] execVM "mission\crates\MM_Box1.sqf"; + +// spawn AI +//[(_pos),(5),(4)] call DMS_SpawnAI; +[(_pos),(5),(4)] call DMS_SpawnAI; + + + +waitUntil{{isPlayer _x && _x distance _pos < 30 } count playableUnits > 0}; + + +_missEnd = "Main Mission 1. + +
+------------------------------ +
+ Mission has ended, good job!"; + +GlobalHint = [0,_missEnd]; +publicVariable "GlobalHint"; + +// Run Cleanup +["Ended","Clean"] call DMS_CleanUp; + + + + + +sleep 150; + +[] execVM "mission\scripts\DMS_selectMission.sqf"; diff --git a/missions/MM7.sqf b/missions/MM7.sqf new file mode 100644 index 0000000..f95457f --- /dev/null +++ b/missions/MM7.sqf @@ -0,0 +1,64 @@ +private ["_crate","_pos","_missname","_aiAmmount","_misText","_missEnd","_group"]; + + +/* +_playerClose = false; +_mainTimer = true; +//_missStartTime = floor(time); +*/ + +// associate pos with find safe pos +_pos = call DMS_findSafePos; + + +_missname = "Main Mission 7"; +diag_log format["DMS :: Main Mission 7 started at [%1]",_pos]; + +_misText = "Main Mission 7. + +
+------------------------------ +
+ Mission now starting! Check your map!"; + +GlobalHint = [0,_misText]; +publicVariable "GlobalHint"; + +// Spawn Marker +[_pos,_missname] execVM "mission\scripts\DMS_CreateMarker.sqf"; + +// Spawn Box +_crate = createVehicle ["Box_NATO_AmmoOrd_F",[(_pos select 0) - 10, _pos select 1,0],[], 0, "CAN_COLLIDE"]; +[_crate] call DMS_Box1; + +sleep 2; +//_crate = [_pos,40,4,2,2] execVM "mission\crates\MM_Box1.sqf"; + +// spawn AI +//[(_pos),(5),(4)] call DMS_SpawnAI; +[(_pos),(5),(4)] call DMS_SpawnAI; + + + +waitUntil{{isPlayer _x && _x distance _pos < 30 } count playableUnits > 0}; + +_missEnd = "Main Mission 1. + +
+------------------------------ +
+ Mission has ended, good job!"; + +GlobalHint = [0,_missEnd]; +publicVariable "GlobalHint"; + +// Run Cleanup +["Ended","Clean"] call DMS_CleanUp; + + + + +sleep 150; + +[] execVM "mission\scripts\DMS_selectMission.sqf"; + diff --git a/missions/MM8.sqf b/missions/MM8.sqf new file mode 100644 index 0000000..df2c6b3 --- /dev/null +++ b/missions/MM8.sqf @@ -0,0 +1,64 @@ +private ["_crate","_pos","_missname","_aiAmmount","_misText","_missEnd","_group"]; + +/* +_playerClose = false; +_mainTimer = true; +//_missStartTime = floor(time); +*/ + +// associate pos with find safe pos +_pos = call DMS_findSafePos; + + + _missname = "Main Mission 8"; +diag_log format["DMS :: Main Mission 8 started at [%1]",_pos]; + +_misText = "Main Mission 8. + +
+------------------------------ +
+ Mission now starting! Check your map!"; + +GlobalHint = [0,_misText]; +publicVariable "GlobalHint"; + + +// Spawn Marker +[_pos,_missname] execVM "mission\scripts\DMS_CreateMarker.sqf"; + +// Spawn Box +_crate = createVehicle ["Box_NATO_AmmoOrd_F",[(_pos select 0) - 10, _pos select 1,0],[], 0, "CAN_COLLIDE"]; +[_crate] call DMS_Box1; + +sleep 2; +//_crate = [_pos,40,4,2,2] execVM "mission\crates\MM_Box1.sqf"; + +// spawn AI +//[(_pos),(5),(4)] call DMS_SpawnAI; +[(_pos),(5),(4)] call DMS_SpawnAI; + + + + +waitUntil{{isPlayer _x && _x distance _pos < 30 } count playableUnits > 0}; + +_missEnd = "Main Mission 1. + +
+------------------------------ +
+ Mission has ended, good job!"; + +GlobalHint = [0,_missEnd]; +publicVariable "GlobalHint"; + +// Run Cleanup +["Ended","Clean"] call DMS_CleanUp; + + + +sleep 150; + +[] execVM "mission\scripts\DMS_selectMission.sqf"; + diff --git a/missions/MM9.sqf b/missions/MM9.sqf new file mode 100644 index 0000000..20d828b --- /dev/null +++ b/missions/MM9.sqf @@ -0,0 +1,61 @@ +private ["_crate","_pos","_missname","_aiAmmount","_misText","_missEnd","_group"]; + +/* +_playerClose = false; +_mainTimer = true; +//_missStartTime = floor(time); +*/ + +// associate pos with find safe pos +_pos = call DMS_findSafePos; + + +_missname = "Main Mission 9"; +diag_log format["DMS :: Main Mission 9 started at [%1]",_pos]; + +_misText = "Main Mission 9. + +
+------------------------------ +
+ Mission now starting! Check your map!"; + +GlobalHint = [0,_misText]; +publicVariable "GlobalHint"; + +// Spawn Marker +[_pos,_missname] execVM "mission\scripts\DMS_CreateMarker.sqf"; + +// Spawn Box +_crate = createVehicle ["Box_NATO_AmmoOrd_F",[(_pos select 0) - 10, _pos select 1,0],[], 0, "CAN_COLLIDE"]; +[_crate] call DMS_Box1; + +sleep 2; +//_crate = [_pos,40,4,2,2] execVM "mission\crates\MM_Box1.sqf"; + +// spawn AI +//[(_pos),(5),(4)] call DMS_SpawnAI; +[(_pos),(5),(4)] call DMS_SpawnAI; + + + +waitUntil{{isPlayer _x && _x distance _pos < 30 } count playableUnits > 0}; + +_missEnd = "Main Mission 1. + +
+------------------------------ +
+ Mission has ended, good job!"; + +GlobalHint = [0,_missEnd]; +publicVariable "GlobalHint"; +// Run Cleanup +["Ended","Clean"] call DMS_CleanUp; + + + + +sleep 150; + +[] execVM "mission\scripts\DMS_selectMission.sqf"; \ No newline at end of file diff --git a/scripts/DMS_Config.sqf b/scripts/DMS_Config.sqf new file mode 100644 index 0000000..555a752 --- /dev/null +++ b/scripts/DMS_Config.sqf @@ -0,0 +1,14 @@ +if(isServer) then { + diag_log "DMS :: Config starting to load.."; + + //Settings + DMS_UseMissions = true; + //DMS_DetectNearWater = true; + + // Timers in seconds + //DMS_MissionMin = 60; + //DMS_MissionMax = 120; + + // Finalize + DMS_Loaded = true; +}; \ No newline at end of file diff --git a/scripts/DMS_CreateMarker.sqf b/scripts/DMS_CreateMarker.sqf new file mode 100644 index 0000000..926cf28 --- /dev/null +++ b/scripts/DMS_CreateMarker.sqf @@ -0,0 +1,14 @@ +private["_mark","_name"]; +DMS_Cords = _this select 0; +DMS_MainName = _this select 1; + +_mark = createMarker ["DMS_MainMarker", DMS_Cords]; +"DMS_MainMarker" setMarkerColor "ColorRed"; +"DMS_MainMarker" setMarkerShape "ELLIPSE"; +"DMS_MainMarker" setMarkerBrush "Grid"; +"DMS_MainMarker" setMarkerSize [150,150]; + +_name = createMarker ["DMS_MainDot", DMS_Cords]; +"DMS_MainDot" setMarkerColor "ColorBlack"; +"DMS_MainDot" setMarkerType "mil_dot"; +"DMS_MainDot" setMarkerText DMS_MainName; diff --git a/scripts/DMS_cleanup.sqf b/scripts/DMS_cleanup.sqf new file mode 100644 index 0000000..56b8e91 --- /dev/null +++ b/scripts/DMS_cleanup.sqf @@ -0,0 +1,31 @@ +fnc_DMS_cleanUp = { + private ["_marker","_boxes","_miscThings"]; + _marker = _this select 0; + _objects = _this select 1; + + if (_marker == "Ended") then { + deleteMarker "DMS_MainMarker"; + deleteMarker "DMS_MainDot"; + }; + + if (_objects = "Clean") then { + + _this enableSimulation false; + _this removeAllMPEventHandlers "mpkilled"; + _this removeAllMPEventHandlers "mphit"; + _this removeAllMPEventHandlers "mprespawn"; + _this removeAllEventHandlers "FiredNear"; + _this removeAllEventHandlers "HandleDamage"; + _this removeAllEventHandlers "Killed"; + _this removeAllEventHandlers "Fired"; + _this removeAllEventHandlers "GetOut"; + _this removeAllEventHandlers "GetIn"; + _this removeAllEventHandlers "Local"; + clearVehicleInit _this; + deleteVehicle _this; + deleteGroup (group _this); + _this = nil; + + }; + diag_log format ["DMS :: Markers, vehicles, AI and loot boxes and other items have been cleaned up!"]; +}; \ No newline at end of file diff --git a/scripts/DMS_findSafePos.sqf b/scripts/DMS_findSafePos.sqf new file mode 100644 index 0000000..61df6ef --- /dev/null +++ b/scripts/DMS_findSafePos.sqf @@ -0,0 +1,32 @@ +if(isServer) then { + private ["_pos","_centerPos","_fetchPos"]; + + //_centerPos = [getMarkerPos "center",4000,20000,10,0,25,0]; + _centerPos = [getMarkerPos "center",2000,4000,10,0,25,0]; + + _fetchPos = false; + + _int = 1; + + + while {!_fetchPos} do { + + sleep 2; + + _pos = _centerPos call BIS_fnc_findSafePos; + _int = _int + 1; + _fetchPos = true; + + if (_fetchPos) then { + diag_log format ["DMS :: Found valid position at: (%1) in (%2) tries!",_pos,_int]; + }; + + // more if exceptions to come + + // water if exception to be added above + + }; +}; + + + diff --git a/scripts/DMS_selectMission.sqf b/scripts/DMS_selectMission.sqf new file mode 100644 index 0000000..29d3310 --- /dev/null +++ b/scripts/DMS_selectMission.sqf @@ -0,0 +1,23 @@ +private ["_sleepTime","_run","_countArray","_randomMiss","_missVar","_minTime","_maxTime","_missionFnc","_MainArray"]; +// First we add the array of missions +_MainArray = ["MM1","MM2","MM3","MM4","MM5","MM6","MM7","MM8","MM9","MM10"]; +//DMS_SideArray = ["SM1","SM2"]; +/* +_minTime = 1*600; //1 sec +_maxTime = 2*600; //4 sec +*/ +_minTime = 1*5; //1 sec +_maxTime = 2*10; //4 sec + + +_sleepTime = (random (_maxTime - _minTime)) + _minTime; +sleep _sleepTime; + +_countArray = count _MainArray; +_slct = floor (random _countArray); +_missVar = _MainArray select _slct; + + +[] execVM format ["mission\missions\%1.sqf",_missVar]; + +//DMS_MissionRunning = 1; diff --git a/scripts/DMS_spawnAI.sqf b/scripts/DMS_spawnAI.sqf new file mode 100644 index 0000000..6aa8781 --- /dev/null +++ b/scripts/DMS_spawnAI.sqf @@ -0,0 +1,98 @@ +DMS_spawnAI = { + private ["_group", "_pos","_soldier","_skill","_units"]; + _pos = _this select 0; + _units = _this select 1; + _skill = _this select 2; + _group = createGroup RESISTANCE; + _group setBehaviour "COMBAT"; + _group setCombatMode "RED"; + _group allowFleeing 0; + for "_i" from 1 to _units do { + _soldier = _group createUnit ["i_g_soldier_unarmed_f", [_pos select 0, _pos select 1, 0], [], 1, "Form"]; + removeAllAssignedItems _soldier; + removeUniform _soldier; + removeHeadgear _soldier; + removeAllItems _soldier; + removeAllWeapons _soldier; + _soldier forceaddUniform "U_I_officerUniform"; + _soldier addVest "V_5_Epoch"; + _soldier addGoggles "G_Diving"; + for "_i" from 1 to 3 do { + _soldier addItemToVest "30Rnd_65x39_caseless_mag"; + }; + _soldier addWeapon "arifle_MXC_Holo_pointer_F"; + _soldier setRank "Private"; + { + _soldier enableAI _x; + }forEach ["TARGET","AUTOTARGET","MOVE","ANIM"]; + _soldier disableAI "FSM"; + _soldier allowDammage true; + switch (_skill) do + { + case 1: + { + _soldier setSkill ["aimingspeed", 0.05]; + _soldier setSkill ["spotdistance", 0.05]; + _soldier setSkill ["aimingaccuracy", 0.02]; + _soldier setSkill ["aimingshake", 0.02]; + _soldier setSkill ["spottime", 0.1]; + _soldier setSkill ["spotdistance", 0.3]; + _soldier setSkill ["commanding", 0.3]; + _soldier setSkill ["general", 0.2]; + }; + case 2: + { + _soldier setSkill ["spotdistance", 0.1]; + _soldier setSkill ["aimingaccuracy", 0.05]; + _soldier setSkill ["aimingshake", 0.05]; + _soldier setSkill ["spottime", 0.2]; + _soldier setSkill ["spotdistance", 0.4]; + _soldier setSkill ["commanding", 0.4]; + _soldier setSkill ["general", 0.3]; + }; + case 3: + { + _soldier setSkill ["aimingspeed", 0.15]; + _soldier setSkill ["spotdistance", 0.15]; + _soldier setSkill ["aimingaccuracy", 0.1]; + _soldier setSkill ["aimingshake", 0.1]; + _soldier setSkill ["spottime", 0.3]; + _soldier setSkill ["spotdistance", 0.5]; + _soldier setSkill ["commanding", 0.5]; + _soldier setSkill ["general", 0.6]; + }; + case 4: + { + _soldier setSkill ["aimingspeed", 0.3]; + _soldier setSkill ["spotdistance", 0.3]; + _soldier setSkill ["aimingaccuracy", 0.3]; + _soldier setSkill ["aimingshake", 0.3]; + _soldier setSkill ["spottime", 0.4]; + _soldier setSkill ["spotdistance", 0.6]; + _soldier setSkill ["commanding", 0.6]; + _soldier setSkill ["general", 0.7]; + }; + case 5: + { + + _soldier setSkill ["aimingspeed", 0.9]; + _soldier setSkill ["spotdistance", 0.9]; + _soldier setSkill ["aimingaccuracy", 0.9]; + _soldier setSkill ["aimingshake", 0.9]; + _soldier setSkill ["spottime", 0.9]; + _soldier setSkill ["spotdistance", 0.9]; + _soldier setSkill ["commanding", 0.8]; + }; + case 6: // Stupidly fucking OP. + { + _soldier setSkill ["aimingspeed", 1]; + _soldier setSkill ["spotdistance", 1]; + _soldier setSkill ["aimingaccuracy", 1]; + _soldier setSkill ["aimingshake", 1]; + _soldier setSkill ["spottime", 1]; + _soldier setSkill ["spotdistance", 1]; + _soldier setSkill ["commanding", 1]; + }; + }; + }; +}; \ No newline at end of file diff --git a/scripts/init.sqf b/scripts/init.sqf new file mode 100644 index 0000000..ae53287 --- /dev/null +++ b/scripts/init.sqf @@ -0,0 +1,28 @@ +// Loads compiles +// Made by Defent for Defents Mission System +// And for Numenadayz.com + +if(isServer) then { + + // compilation list + DMS_findSafePos = compile preprocessFileLineNumbers "mission\scripts\DMS_findSafePos.sqf"; + DMS_createBox = compile preprocessFileLineNumbers "mission\crates\DMS_CreateBox.sqf"; + DMS_CreateMarker = compile preprocessFileLineNumbers "mission\scripts\DMS_CreateMarker.sqf"; + DMS_spawnAI = compile preprocessFileLineNumbers "mission\scripts\DMS_spawnAI.sqf"; + DMS_selectMission = compile preprocessFileLineNumbers "mission\scripts\DMS_selectMission.sqf"; + DMS_CleanUp = compile preprocessFileLineNumbers "mission\scripts\DMS_CleanUp.sqf"; + + + // not fully loaded yet + DMS_Loaded = false; + + execVM "mission\scripts\DMS_Config.sqf"; + waitUntil {DMS_Loaded}; + + execVM "mission\scripts\DMS_selectMission.sqf"; + + + diag_log "DMS :: Functions loaded - starting the rest of the script."; + + +};