From 85622897655da28afa63838aaa002e93f0795600 Mon Sep 17 00:00:00 2001 From: eraser1 Date: Sat, 3 Oct 2015 22:32:42 -0500 Subject: [PATCH] Some more required changes... sorry * **You must update all of your mission files; the mission message system as well as the calling parameters for DMS_fnc_FindSafePos have been overhauled and will be incompatible with previous versions.** * NEW CONFIG VALUES: |DMS_ThrottleBlacklists| |DMS_AttemptsUntilThrottle| |DMS_ThrottleCoefficient| |DMS_MinThrottledDistance| * Decreased "DMS_TraderZoneNearBlacklist","DMS_MissionNearBlacklist","DMS_WaterNearBlacklist" * Changed "DMS_dynamicText_Color" to "#FFFFFF" (white) * Replaced weapon classes in "DMS_CrateCase_Sniper" to the base classes; all attachments should now spawn in the box separately. * New function DMS_fnc_IsValidPosition (uses logic that was previously from "DMS_fnc_FindSafePos"). * You can now manually define every individual parameter for DMS_fnc_findSafePos per-mission, instead of using global parameters. * AI will now be offloaded to an HC even with "DMS_ai_offload_to_client" set to false. * All of the previously "supported" values for "DMS_PlayerNotificationTypes" are now PROPERLY supported. DMS_PlayerNotificationTypes is now set to default "dynamicTextRequest" and "systemChatRequest". * Tweaked "cardealer" mission, the cars should no longer spawn inside of each other. --- @ExileServer/addons/a3_dms/config.cpp | 1 + @ExileServer/addons/a3_dms/config.sqf | 32 +++-- .../addons/a3_dms/fn_DMS_postInit.sqf | 1 + .../addons/a3_dms/missions/bandit/bandits.sqf | 17 +-- .../addons/a3_dms/missions/bandit/bauhaus.sqf | 15 ++- .../a3_dms/missions/bandit/beertransport.sqf | 17 +-- .../missions/bandit/behindenemylines.sqf | 15 ++- .../a3_dms/missions/bandit/blackhawkdown.sqf | 15 ++- .../a3_dms/missions/bandit/cardealer.sqf | 27 +++-- .../a3_dms/missions/bandit/construction.sqf | 15 ++- .../missions/bandit/donthasslethehoff.sqf | 15 ++- .../a3_dms/missions/bandit/foodtransport.sqf | 15 ++- .../a3_dms/missions/bandit/guntransport.sqf | 15 ++- .../a3_dms/missions/bandit/humanitarian.sqf | 15 ++- .../a3_dms/missions/bandit/lost_battalion.sqf | 15 ++- .../addons/a3_dms/missions/bandit/medical.sqf | 15 ++- .../a3_dms/missions/bandit/mercbase.sqf | 15 ++- .../a3_dms/missions/bandit/mercenaries.sqf | 15 ++- .../a3_dms/missions/bandit/roguenavyseals.sqf | 15 ++- .../a3_dms/missions/bandit/testmission.sqf | 15 ++- .../addons/a3_dms/missions/bandit/walmart.sqf | 15 ++- .../a3_dms/scripts/fn_AILocalityManager.sqf | 4 +- .../a3_dms/scripts/fn_AddMissionToMonitor.sqf | 10 +- .../scripts/fn_BroadcastMissionStatus.sqf | 60 ++++++++-- .../addons/a3_dms/scripts/fn_CleanUp.sqf | 4 + .../addons/a3_dms/scripts/fn_FindSafePos.sqf | 113 ++++++++---------- .../a3_dms/scripts/fn_IsValidPosition.sqf | 100 ++++++++++++++++ .../a3_dms/scripts/fn_MissionsMonitor.sqf | 15 +-- .../a3_dms/scripts/fn_RemoveMarkers.sqf | 7 +- Pre-Packed PBO/a3_dms.pbo | Bin 210892 -> 218675 bytes README.md | 20 ++++ 31 files changed, 441 insertions(+), 212 deletions(-) create mode 100644 @ExileServer/addons/a3_dms/scripts/fn_IsValidPosition.sqf diff --git a/@ExileServer/addons/a3_dms/config.cpp b/@ExileServer/addons/a3_dms/config.cpp index 520f923..7e53926 100644 --- a/@ExileServer/addons/a3_dms/config.cpp +++ b/@ExileServer/addons/a3_dms/config.cpp @@ -44,6 +44,7 @@ class CfgFunctions class ImportFromM3E_Convert {}; class IsPlayerNearby {}; class IsNearWater {}; + class IsValidPosition {}; class MissionsMonitor {}; class MissionSuccessState {}; class OnKilled {}; diff --git a/@ExileServer/addons/a3_dms/config.sqf b/@ExileServer/addons/a3_dms/config.sqf index a5dfde0..84b96dc 100644 --- a/@ExileServer/addons/a3_dms/config.sqf +++ b/@ExileServer/addons/a3_dms/config.sqf @@ -46,11 +46,17 @@ DMS_DEBUG = false; /*Mission Cleanup/Timeout settings*/ /*Mission spawn location settings*/ + DMS_ThrottleBlacklists = true; // Whether or not to "throttle" the blacklist distance parameters in DMS_fnc_FindSafePos. This will reduce the values of the minimum + //distances for some of the below parameters if several attempts have been made, but a suitable position was not yet found. This + //should help with server performance drops when spawning a mission, as DMS_fnc_findSafePos is the most resource-intensive function. + DMS_AttemptsUntilThrottle = 15; // How many attempts until the parameters are throttled. + DMS_ThrottleCoefficient = 0.9; // How much the parameters are throttled. The parameters are multiplied by the coefficient, so 0.9 means 90% of whatever the parameter was. + DMS_MinThrottledDistance = 100; // The minimum distance to which it will throttle. If the throttled value is less than this, then this value is used instead. DMS_PlayerNearBlacklist = 2000; // Missions won't spawn in a position this many meters close to a player DMS_SpawnZoneNearBlacklist = 2500; // Missions won't spawn in a position this many meters close to a spawn zone - DMS_TraderZoneNearBlacklist = 3000; // Missions won't spawn in a position this many meters close to a trader zone - DMS_MissionNearBlacklist = 4000; // Missions won't spawn in a position this many meters close to another mission - DMS_WaterNearBlacklist = 750; // Missions won't spawn in a position this many meters close to water + DMS_TraderZoneNearBlacklist = 2500; // Missions won't spawn in a position this many meters close to a trader zone + DMS_MissionNearBlacklist = 2500; // Missions won't spawn in a position this many meters close to another mission + DMS_WaterNearBlacklist = 500; // Missions won't spawn in a position this many meters close to water DMS_MaxSurfaceNormal = 0.95; // Missions won't spawn if the surface normal of the location is less than this amount. The lower the value, the steeper the location. Greater values means flatter locations /*Mission spawn location settings*/ @@ -79,12 +85,12 @@ DMS_DEBUG = false; /*Mission notification settings*/ DMS_PlayerNotificationTypes = [ // Notification types. Supported values are: ["dynamicTextRequest", "standardHintRequest", "systemChatRequest"] - //"dynamicTextRequest", <--- Text formatting makes this weird... - "standardHintRequest" - //"systemChatRequest" + "dynamicTextRequest", + //"standardHintRequest", + "systemChatRequest" ]; DMS_dynamicText_Size = 0.65; // Dynamic Text size for "dynamicTextRequest" notification type. - DMS_dynamicText_Color = "#FFCC00"; // Dynamic Text color for "dynamicTextRequest" notification type. + DMS_dynamicText_Color = "#FFFFFF"; // Dynamic Text color for "dynamicTextRequest" notification type. /*Mission notification settings*/ DMS_BanditMissionTypes = [ // List of missions with spawn chances. If they add up to 100%, they represent the percentage chance each one will spawn @@ -467,9 +473,9 @@ DMS_DEBUG = false; ["Rangefinder",1], ["srifle_GM6_F",1], ["srifle_LRR_F",1], - ["srifle_EBR_DMS_pointer_snds_F",1], - ["hgun_Pistol_heavy_01_MRD_F",1], - ["hgun_PDW2000_Holo_snds_F",1] + ["srifle_EBR_F",1], + ["hgun_Pistol_heavy_01_F",1], + ["hgun_PDW2000_F",1] ], [ ["ItemGPS",1], @@ -482,8 +488,14 @@ DMS_DEBUG = false; ["Exile_Item_InstaDoc",3], ["Exile_Item_Surstromming_Cooked",5], ["Exile_Item_PlasticBottleFreshWater",5], + ["optic_DMS",1], + ["acc_pointer_IR",1], + ["muzzle_snds_B",1], ["optic_LRPS",1], + ["optic_MRD",1], ["muzzle_snds_acp",1], + ["optic_Holosight_smg",1], + ["muzzle_snds_L",1], ["5Rnd_127x108_APDS_Mag",3], ["7Rnd_408_Mag",3], ["20Rnd_762x51_Mag",5], diff --git a/@ExileServer/addons/a3_dms/fn_DMS_postInit.sqf b/@ExileServer/addons/a3_dms/fn_DMS_postInit.sqf index 1d953a2..63ebdd6 100644 --- a/@ExileServer/addons/a3_dms/fn_DMS_postInit.sqf +++ b/@ExileServer/addons/a3_dms/fn_DMS_postInit.sqf @@ -26,6 +26,7 @@ if(DMS_StaticMission) then if (DMS_DynamicMission) then { + DMS_AttemptsUntilThrottle = DMS_AttemptsUntilThrottle + 1; call compileFinal preprocessFileLineNumbers "\x\addons\dms\missions\mission_init.sqf"; execFSM "\x\addons\dms\FSM\missions.fsm"; }; diff --git a/@ExileServer/addons/a3_dms/missions/bandit/bandits.sqf b/@ExileServer/addons/a3_dms/missions/bandit/bandits.sqf index 605490a..42616a7 100644 --- a/@ExileServer/addons/a3_dms/missions/bandit/bandits.sqf +++ b/@ExileServer/addons/a3_dms/missions/bandit/bandits.sqf @@ -13,7 +13,10 @@ _side = "bandit"; // find position -_pos = call DMS_fnc_findSafePos; +_pos = +[ + 25,DMS_WaterNearBlacklist,DMS_MaxSurfaceNormal,DMS_SpawnZoneNearBlacklist,DMS_TraderZoneNearBlacklist,DMS_MissionNearBlacklist,DMS_PlayerNearBlacklist,DMS_ThrottleBlacklists +]call DMS_fnc_findSafePos; // Set general mission difficulty @@ -62,15 +65,15 @@ _missionObjs = ]; // Define Mission Start message -_msgStart = format["Armed Bandits!
A heavily armed bandit group has been spotted, take them out and claim their vehicle!"]; +_msgStart = ['#FFFF00',"A heavily armed bandit group has been spotted, take them out and claim their vehicle!"]; // Define Mission Win message -_msgWIN = format["Armed Bandits!
Convicts have successfully taken care of the bandit group!"]; +_msgWIN = ['#0080ff',"Convicts have successfully taken care of the bandit group!"]; // Define Mission Lose message -_msgLOSE = format["Armed Bandits!
The bandits have taken their vehicle and drove off, no loot today!"]; +_msgLOSE = ['#FF0000',"The bandits have taken their vehicle and drove off, no loot today!"]; -// Define mission name (for map marker and logging) +// Define mission name (for map markers, mission messages, and logging) _missionName = "Armed Bandits"; // Create Markers @@ -104,7 +107,7 @@ _added = ], _missionAIUnits, _missionObjs, - [_msgWIN,_msgLOSE], + [_missionName,_msgWIN,_msgLOSE], _markers, _side, _difficulty, @@ -141,7 +144,7 @@ if !(_added) exitWith // Notify players -_msgStart call DMS_fnc_BroadcastMissionStatus; +[_missionName,_msgStart] call DMS_fnc_BroadcastMissionStatus; diff --git a/@ExileServer/addons/a3_dms/missions/bandit/bauhaus.sqf b/@ExileServer/addons/a3_dms/missions/bandit/bauhaus.sqf index 9fc931d..94f39f7 100644 --- a/@ExileServer/addons/a3_dms/missions/bandit/bauhaus.sqf +++ b/@ExileServer/addons/a3_dms/missions/bandit/bauhaus.sqf @@ -16,7 +16,10 @@ _side = "bandit"; // find position -_pos = [10] call DMS_fnc_findSafePos; +_pos = +[ + 10,DMS_WaterNearBlacklist,DMS_MaxSurfaceNormal,DMS_SpawnZoneNearBlacklist,DMS_TraderZoneNearBlacklist,DMS_MissionNearBlacklist,DMS_PlayerNearBlacklist,DMS_ThrottleBlacklists +]call DMS_fnc_findSafePos; // Set general mission difficulty @@ -73,13 +76,13 @@ _missionObjs = ]; -_msgStart = format["Bauhaus Truck
A Bauhaus truck has crashed and lost all its building supplies, get there quickly!"]; +_msgStart = ['#FFFF00',"A Bauhaus truck has crashed and lost all its building supplies, get there quickly!"]; // Define Mission Win message -_msgWIN = format["Bauhaus Truck
Convicts have successfully claimed the crashed Buahaus truck!"]; +_msgWIN = ['#0080ff',"Convicts have successfully claimed the crashed Bauhaus truck!"]; // Define Mission Lose message -_msgLOSE = format["Bauhaus Truck!
The Bauhause truck has been repaired and escaped!"]; +_msgLOSE = ['#FF0000',"The Bauhaus truck has been repaired and escaped!"]; // Define mission name (for map marker and logging) _missionName = "Bauhaus Truck"; @@ -115,7 +118,7 @@ _added = ], _missionAIUnits, _missionObjs, - [_msgWIN,_msgLOSE], + [_missionName,_msgWIN,_msgLOSE], _markers, _side, _difficulty, @@ -152,7 +155,7 @@ if !(_added) exitWith // Notify players -_msgStart call DMS_fnc_BroadcastMissionStatus; +[_missionName,_msgStart] call DMS_fnc_BroadcastMissionStatus; diff --git a/@ExileServer/addons/a3_dms/missions/bandit/beertransport.sqf b/@ExileServer/addons/a3_dms/missions/bandit/beertransport.sqf index 9a0ca26..c739175 100644 --- a/@ExileServer/addons/a3_dms/missions/bandit/beertransport.sqf +++ b/@ExileServer/addons/a3_dms/missions/bandit/beertransport.sqf @@ -16,7 +16,10 @@ _side = "bandit"; // find position -_pos = [10] call DMS_fnc_findSafePos; +_pos = +[ + 10,DMS_WaterNearBlacklist,DMS_MaxSurfaceNormal,DMS_SpawnZoneNearBlacklist,DMS_TraderZoneNearBlacklist,DMS_MissionNearBlacklist,DMS_PlayerNearBlacklist,DMS_ThrottleBlacklists +]call DMS_fnc_findSafePos; // Set general mission difficulty @@ -66,16 +69,16 @@ _missionObjs = ]; // Define Mission Start message -_msgStart = format["Beer transport!
A transport truck carrying beer and guns is being robbed, stop the robbers and steal the loot!"]; +_msgStart = ['#FFFF00',"A transport truck carrying beer and guns is being robbed, stop the robbers and steal the loot!"]; // Define Mission Win message -_msgWIN = format["Beer transport!
Convicts have successfully claimed all of the beer and guns. 'Murica."]; +_msgWIN = ['#0080ff',"Convicts have successfully claimed all of the beer and guns. 'Murica."]; // Define Mission Lose message -_msgLOSE = format["Beer transport!
The robbers have taken off with all the beer and all the guns, what a travesty!"]; +_msgLOSE = ['#FF0000',"The robbers have taken off with all the beer and all the guns, what a travesty!"]; // Define mission name (for map marker and logging) -_missionName = "Beer & Guns Truck"; +_missionName = "Beer N' Guns Truck"; // Create Markers _markers = @@ -108,7 +111,7 @@ _added = ], _missionAIUnits, _missionObjs, - [_msgWIN,_msgLOSE], + [_missionName,_msgWIN,_msgLOSE], _markers, _side, _difficulty, @@ -145,7 +148,7 @@ if !(_added) exitWith // Notify players -_msgStart call DMS_fnc_BroadcastMissionStatus; +[_missionName,_msgStart] call DMS_fnc_BroadcastMissionStatus; diff --git a/@ExileServer/addons/a3_dms/missions/bandit/behindenemylines.sqf b/@ExileServer/addons/a3_dms/missions/bandit/behindenemylines.sqf index 9365890..a3af84a 100644 --- a/@ExileServer/addons/a3_dms/missions/bandit/behindenemylines.sqf +++ b/@ExileServer/addons/a3_dms/missions/bandit/behindenemylines.sqf @@ -16,7 +16,10 @@ _side = "bandit"; // find position -_pos = [10] call DMS_fnc_findSafePos; +_pos = +[ + 10,DMS_WaterNearBlacklist,DMS_MaxSurfaceNormal,DMS_SpawnZoneNearBlacklist,DMS_TraderZoneNearBlacklist,DMS_MissionNearBlacklist,DMS_PlayerNearBlacklist,DMS_ThrottleBlacklists +]call DMS_fnc_findSafePos; // Set general mission difficulty @@ -66,13 +69,13 @@ _missionObjs = ]; // Define Mission Start message -_msgStart = format["Enemy Bunker!
A team of soldiers have set up a bunker inside convict land. Rid them from this place!"]; +_msgStart = ['#FFFF00',"A team of soldiers have set up a bunker inside convict land. Rid them from this place!"]; // Define Mission Win message -_msgWIN = format["Enemy Bunker!
Convicts have successfully taken care of the enemies and their bunker!"]; +_msgWIN = ['#0080ff',"Convicts have successfully taken care of the enemies and their bunker!"]; // Define Mission Lose message -_msgLOSE = format["Enemy Bunker!
The soldiers became impatient and have escaped the area!"]; +_msgLOSE = ['#FF0000',"The soldiers became impatient and have escaped the area!"]; // Define mission name (for map marker and logging) _missionName = "Enemy Bunker"; @@ -108,7 +111,7 @@ _added = ], _missionAIUnits, _missionObjs, - [_msgWIN,_msgLOSE], + [_missionName,_msgWIN,_msgLOSE], _markers, _side, _difficulty, @@ -145,7 +148,7 @@ if !(_added) exitWith // Notify players -_msgStart call DMS_fnc_BroadcastMissionStatus; +[_missionName,_msgStart] call DMS_fnc_BroadcastMissionStatus; diff --git a/@ExileServer/addons/a3_dms/missions/bandit/blackhawkdown.sqf b/@ExileServer/addons/a3_dms/missions/bandit/blackhawkdown.sqf index 3d38577..1ff0763 100644 --- a/@ExileServer/addons/a3_dms/missions/bandit/blackhawkdown.sqf +++ b/@ExileServer/addons/a3_dms/missions/bandit/blackhawkdown.sqf @@ -16,7 +16,10 @@ _side = "bandit"; // find position -_pos = [10] call DMS_fnc_findSafePos; +_pos = +[ + 10,DMS_WaterNearBlacklist,DMS_MaxSurfaceNormal,DMS_SpawnZoneNearBlacklist,DMS_TraderZoneNearBlacklist,DMS_MissionNearBlacklist,DMS_PlayerNearBlacklist,DMS_ThrottleBlacklists +]call DMS_fnc_findSafePos; // Set general mission difficulty @@ -66,13 +69,13 @@ _missionObjs = ]; // Define Mission Start message -_msgStart = format["Blackhawk down!
We got a Blackhawk down, Super 6-1 is down, secure the perimeter and claim what can be claimed!"]; +_msgStart = ['#FFFF00',"We got a Blackhawk down, Super 6-1 is down, secure the perimeter and claim what can be claimed!"]; // Define Mission Win message -_msgWIN = format["Blackhawk down!
Convicts have secured the blackhawk and claimed the remaining loot!"]; +_msgWIN = ['#0080ff',"Convicts have secured the blackhawk and claimed the remaining loot!"]; // Define Mission Lose message -_msgLOSE = format["Blackhawk down!
The blackhawk has been sized by the enemy and the loot has been destroyed!"]; +_msgLOSE = ['#FF0000',"The blackhawk has been sized by the enemy and the loot has been destroyed!"]; // Define mission name (for map marker and logging) _missionName = "Blackhawk Down"; @@ -108,7 +111,7 @@ _added = ], _missionAIUnits, _missionObjs, - [_msgWIN,_msgLOSE], + [_missionName,_msgWIN,_msgLOSE], _markers, _side, _difficulty, @@ -145,7 +148,7 @@ if !(_added) exitWith // Notify players -_msgStart call DMS_fnc_BroadcastMissionStatus; +[_missionName,_msgStart] call DMS_fnc_BroadcastMissionStatus; diff --git a/@ExileServer/addons/a3_dms/missions/bandit/cardealer.sqf b/@ExileServer/addons/a3_dms/missions/bandit/cardealer.sqf index 44eaea0..d00e032 100644 --- a/@ExileServer/addons/a3_dms/missions/bandit/cardealer.sqf +++ b/@ExileServer/addons/a3_dms/missions/bandit/cardealer.sqf @@ -16,7 +16,10 @@ _side = "bandit"; // find position -_pos = [10] call DMS_fnc_findSafePos; +_pos = +[ + 10,DMS_WaterNearBlacklist,DMS_MaxSurfaceNormal,DMS_SpawnZoneNearBlacklist,DMS_TraderZoneNearBlacklist,DMS_MissionNearBlacklist,DMS_PlayerNearBlacklist,DMS_ThrottleBlacklists +]call DMS_fnc_findSafePos; // Set general mission difficulty @@ -40,10 +43,16 @@ _group = // Create Crates _crate1 = ["Box_NATO_Wps_F",_pos] call DMS_fnc_SpawnCrate; -_wreck = createVehicle ["Land_FuelStation_Build_F",[(_pos select 0) - 10, (_pos select 1),-0.2],[], 0, "CAN_COLLIDE"]; +_rndDir = random 180; -_vehicle1 = ["Exile_Car_SUV_Red",[(_pos select 0) + -1*(5+(random 5)),(_pos select 1) + -1*(5+(random 5)),0]] call DMS_fnc_SpawnNonPersistentVehicle; -_vehicle2 = ["Exile_Car_SUV_Grey",[(_pos select 0)+(5+(random 5)),(_pos select 1)+(5+(random 5)),0]] call DMS_fnc_SpawnNonPersistentVehicle; +_wreck = createVehicle ["Land_FuelStation_Build_F",[_pos,10+(random 5),_rndDir+90] call DMS_fnc_SelectOffsetPos,[], 0, "CAN_COLLIDE"]; + + +_vehicle1 = ["Exile_Car_SUV_Red", [_pos,5+(random 3),_rndDir] call DMS_fnc_SelectOffsetPos] call DMS_fnc_SpawnNonPersistentVehicle; +//_vehicle1 setPosATL ([_pos,5+(random 3),_rndDir] call DMS_fnc_SelectOffsetPos); + +_vehicle2 = ["Exile_Car_SUV_Grey", [_pos,5+(random 3),_rndDir+180] call DMS_fnc_SelectOffsetPos] call DMS_fnc_SpawnNonPersistentVehicle; +//_vehicle2 setPosATL ([_pos,5+(random 3),_rndDir+180] call DMS_fnc_SelectOffsetPos); @@ -71,13 +80,13 @@ _missionObjs = ]; // Define Mission Start message -_msgStart = format["Car Dealer Robbery!
A local car dealership is being robbed by bandits, stop them!"]; +_msgStart = ['#FFFF00',"A local car dealership is being robbed by bandits, stop them!"]; // Define Mission Win message -_msgWIN = format["Car Dealer Robbery!
Convicts have secured the local dealership and removed the bandits!"]; +_msgWIN = ['#0080ff',"Convicts have secured the local dealership and removed the bandits!"]; // Define Mission Lose message -_msgLOSE = format["Car Dealer Robbery!
The bandits have escaped with the cars and left nothing but a trail of smoke behind!"]; +_msgLOSE = ['#FF0000',"The bandits have escaped with the cars and left nothing but a trail of smoke behind!"]; // Define mission name (for map marker and logging) _missionName = "Car Dealer Robbery"; @@ -113,7 +122,7 @@ _added = ], _missionAIUnits, _missionObjs, - [_msgWIN,_msgLOSE], + [_missionName,_msgWIN,_msgLOSE], _markers, _side, _difficulty, @@ -150,7 +159,7 @@ if !(_added) exitWith // Notify players -_msgStart call DMS_fnc_BroadcastMissionStatus; +[_missionName,_msgStart] call DMS_fnc_BroadcastMissionStatus; diff --git a/@ExileServer/addons/a3_dms/missions/bandit/construction.sqf b/@ExileServer/addons/a3_dms/missions/bandit/construction.sqf index 117941d..cdb1cdb 100644 --- a/@ExileServer/addons/a3_dms/missions/bandit/construction.sqf +++ b/@ExileServer/addons/a3_dms/missions/bandit/construction.sqf @@ -13,7 +13,10 @@ _side = "bandit"; // find position -_pos = call DMS_fnc_findSafePos; +_pos = +[ + 25,DMS_WaterNearBlacklist,DMS_MaxSurfaceNormal,DMS_SpawnZoneNearBlacklist,DMS_TraderZoneNearBlacklist,DMS_MissionNearBlacklist,DMS_PlayerNearBlacklist,DMS_ThrottleBlacklists +]call DMS_fnc_findSafePos; // Set general mission difficulty @@ -68,13 +71,13 @@ _missionObjs = ]; // Define Mission Start message -_msgStart = format["Construction Site!
A group of mercenaries have set up a construction site, clear them out!"]; +_msgStart = ['#FFFF00',"A group of mercenaries have set up a construction site, clear them out!"]; // Define Mission Win message -_msgWIN = format["Construction Site!
Convicts have successfully demolished the construction site!"]; +_msgWIN = ['#0080ff',"Convicts have successfully demolished the construction site!"]; // Define Mission Lose message -_msgLOSE = format["Construction Site!
The mercenaries have dismantled their construction site and escaped!"]; +_msgLOSE = ['#FF0000',"The mercenaries have dismantled their construction site and escaped!"]; // Define mission name (for map marker and logging) @@ -111,7 +114,7 @@ _added = ], _missionAIUnits, _missionObjs, - [_msgWIN,_msgLOSE], + [_missionName,_msgWIN,_msgLOSE], _markers, _side, _difficulty, @@ -148,7 +151,7 @@ if !(_added) exitWith // Notify players -_msgStart call DMS_fnc_BroadcastMissionStatus; +[_missionName,_msgStart] call DMS_fnc_BroadcastMissionStatus; diff --git a/@ExileServer/addons/a3_dms/missions/bandit/donthasslethehoff.sqf b/@ExileServer/addons/a3_dms/missions/bandit/donthasslethehoff.sqf index 10c360a..4907619 100644 --- a/@ExileServer/addons/a3_dms/missions/bandit/donthasslethehoff.sqf +++ b/@ExileServer/addons/a3_dms/missions/bandit/donthasslethehoff.sqf @@ -16,7 +16,10 @@ _side = "bandit"; // find position -_pos = [10] call DMS_fnc_findSafePos; +_pos = +[ + 10,DMS_WaterNearBlacklist,DMS_MaxSurfaceNormal,DMS_SpawnZoneNearBlacklist,DMS_TraderZoneNearBlacklist,DMS_MissionNearBlacklist,DMS_PlayerNearBlacklist,DMS_ThrottleBlacklists +]call DMS_fnc_findSafePos; // Set general mission difficulty @@ -80,13 +83,13 @@ _missionObjs = ]; // Define Mission Start message -_msgStart = format["Knight Rider!
KITT has been kidnapped, secure the position and reclaim KITT!"]; +_msgStart = ['#FFFF00',"KITT has been kidnapped, secure the position and reclaim KITT!"]; // Define Mission Win message -_msgWIN = format["Knight Rider!
Convicts secured KITT, that will show the bandits not to Hassle the Hoff!"]; +_msgWIN = ['#0080ff',"Convicts secured KITT, that will show the bandits not to Hassle the Hoff!"]; // Define Mission Lose message -_msgLOSE = format["Knight Rider!
KITT was never secured and has now been dismantled by the bandits, what a grim fate."]; +_msgLOSE = ['#FF0000',"KITT was never secured and has now been dismantled by the bandits, what a grim fate."]; // Define mission name (for map marker and logging) _missionName = "KITT's Location"; @@ -122,7 +125,7 @@ _added = ], _missionAIUnits, _missionObjs, - [_msgWIN,_msgLOSE], + [_missionName,_msgWIN,_msgLOSE], _markers, _side, _difficulty, @@ -159,7 +162,7 @@ if !(_added) exitWith // Notify players -_msgStart call DMS_fnc_BroadcastMissionStatus; +[_missionName,_msgStart] call DMS_fnc_BroadcastMissionStatus; diff --git a/@ExileServer/addons/a3_dms/missions/bandit/foodtransport.sqf b/@ExileServer/addons/a3_dms/missions/bandit/foodtransport.sqf index b3d9a69..9fd136d 100644 --- a/@ExileServer/addons/a3_dms/missions/bandit/foodtransport.sqf +++ b/@ExileServer/addons/a3_dms/missions/bandit/foodtransport.sqf @@ -16,7 +16,10 @@ _side = "bandit"; // find position -_pos = [10] call DMS_fnc_findSafePos; +_pos = +[ + 10,DMS_WaterNearBlacklist,DMS_MaxSurfaceNormal,DMS_SpawnZoneNearBlacklist,DMS_TraderZoneNearBlacklist,DMS_MissionNearBlacklist,DMS_PlayerNearBlacklist,DMS_ThrottleBlacklists +]call DMS_fnc_findSafePos; // Set general mission difficulty @@ -66,13 +69,13 @@ _missionObjs = ]; // Define Mission Start message -_msgStart = format["Food Supplies!
A food supply truck has been sized by ruthless bandits, stop them!"]; +_msgStart = ['#FFFF00',"A food supply truck has been sized by ruthless bandits, stop them!"]; // Define Mission Win message -_msgWIN = format["Food Supplies!
Convicts have successfully claimed the food supplies for themselves!"]; +_msgWIN = ['#0080ff',"Convicts have successfully claimed the food supplies for themselves!"]; // Define Mission Lose message -_msgLOSE = format["Food Supplies!
The bandits have taken the food supplies and escaped!"]; +_msgLOSE = ['#FF0000',"The bandits have taken the food supplies and escaped!"]; // Define mission name (for map marker and logging) _missionName = "Food Supplies"; @@ -108,7 +111,7 @@ _added = ], _missionAIUnits, _missionObjs, - [_msgWIN,_msgLOSE], + [_missionName,_msgWIN,_msgLOSE], _markers, _side, _difficulty, @@ -145,7 +148,7 @@ if !(_added) exitWith // Notify players -_msgStart call DMS_fnc_BroadcastMissionStatus; +[_missionName,_msgStart] call DMS_fnc_BroadcastMissionStatus; diff --git a/@ExileServer/addons/a3_dms/missions/bandit/guntransport.sqf b/@ExileServer/addons/a3_dms/missions/bandit/guntransport.sqf index 83a7c4a..96eaf68 100644 --- a/@ExileServer/addons/a3_dms/missions/bandit/guntransport.sqf +++ b/@ExileServer/addons/a3_dms/missions/bandit/guntransport.sqf @@ -16,7 +16,10 @@ _side = "bandit"; // find position -_pos = [10] call DMS_fnc_findSafePos; +_pos = +[ + 10,DMS_WaterNearBlacklist,DMS_MaxSurfaceNormal,DMS_SpawnZoneNearBlacklist,DMS_TraderZoneNearBlacklist,DMS_MissionNearBlacklist,DMS_PlayerNearBlacklist,DMS_ThrottleBlacklists +]call DMS_fnc_findSafePos; // Set general mission difficulty @@ -66,13 +69,13 @@ _missionObjs = ]; // Define Mission Start message -_msgStart = format["Gun Transport!
A gun transport truck has crashed, secure the crash site and the guns!"]; +_msgStart = ['#FFFF00',"A gun transport truck has crashed, secure the crash site and the guns!"]; // Define Mission Win message -_msgWIN = format["Gun Transport!
Convicts have successfully secured the area and claimed the guns for their own!"]; +_msgWIN = ['#0080ff',"Convicts have successfully secured the area and claimed the guns for their own!"]; // Define Mission Lose message -_msgLOSE = format["Gun Transport!
The transport truck has been repaired and escaped the area!"]; +_msgLOSE = ['#FF0000',"The transport truck has been repaired and escaped the area!"]; // Define mission name (for map marker and logging) _missionName = "Gun Transport"; @@ -108,7 +111,7 @@ _added = ], _missionAIUnits, _missionObjs, - [_msgWIN,_msgLOSE], + [_missionName,_msgWIN,_msgLOSE], _markers, _side, _difficulty, @@ -145,7 +148,7 @@ if !(_added) exitWith // Notify players -_msgStart call DMS_fnc_BroadcastMissionStatus; +[_missionName,_msgStart] call DMS_fnc_BroadcastMissionStatus; diff --git a/@ExileServer/addons/a3_dms/missions/bandit/humanitarian.sqf b/@ExileServer/addons/a3_dms/missions/bandit/humanitarian.sqf index af3f05a..ba32f94 100644 --- a/@ExileServer/addons/a3_dms/missions/bandit/humanitarian.sqf +++ b/@ExileServer/addons/a3_dms/missions/bandit/humanitarian.sqf @@ -16,7 +16,10 @@ _side = "bandit"; // find position -_pos = [10] call DMS_fnc_findSafePos; +_pos = +[ + 10,DMS_WaterNearBlacklist,DMS_MaxSurfaceNormal,DMS_SpawnZoneNearBlacklist,DMS_TraderZoneNearBlacklist,DMS_MissionNearBlacklist,DMS_PlayerNearBlacklist,DMS_ThrottleBlacklists +]call DMS_fnc_findSafePos; // Set general mission difficulty @@ -66,13 +69,13 @@ _missionObjs = ]; // Define Mission Start message -_msgStart = format["Humanitarian Supplies!
A truck carrying humanitarian supplies has been sized by bandits, stop them!"]; +_msgStart = ['#FFFF00',"A truck carrying humanitarian supplies has been sized by bandits, stop them!"]; // Define Mission Win message -_msgWIN = format["Humanitarian Supplies!
Convicts have successfully claimed the humanitarian supplies for themselves!"]; +_msgWIN = ['#0080ff',"Convicts have successfully claimed the humanitarian supplies for themselves!"]; // Define Mission Lose message -_msgLOSE = format["Humanitarian Supplies!
The bandits have taken the humanitarian supplies and escaped!"]; +_msgLOSE = ['#FF0000',"The bandits have taken the humanitarian supplies and escaped!"]; // Define mission name (for map marker and logging) _missionName = "Humanitarian Supplies"; @@ -108,7 +111,7 @@ _added = ], _missionAIUnits, _missionObjs, - [_msgWIN,_msgLOSE], + [_missionName,_msgWIN,_msgLOSE], _markers, _side, _difficulty, @@ -145,7 +148,7 @@ if !(_added) exitWith // Notify players -_msgStart call DMS_fnc_BroadcastMissionStatus; +[_missionName,_msgStart] call DMS_fnc_BroadcastMissionStatus; diff --git a/@ExileServer/addons/a3_dms/missions/bandit/lost_battalion.sqf b/@ExileServer/addons/a3_dms/missions/bandit/lost_battalion.sqf index 5780b13..023a658 100644 --- a/@ExileServer/addons/a3_dms/missions/bandit/lost_battalion.sqf +++ b/@ExileServer/addons/a3_dms/missions/bandit/lost_battalion.sqf @@ -16,7 +16,10 @@ _side = "bandit"; // find position -_pos = [10] call DMS_fnc_findSafePos; +_pos = +[ + 10,DMS_WaterNearBlacklist,DMS_MaxSurfaceNormal,DMS_SpawnZoneNearBlacklist,DMS_TraderZoneNearBlacklist,DMS_MissionNearBlacklist,DMS_PlayerNearBlacklist,DMS_ThrottleBlacklists +]call DMS_fnc_findSafePos; // Set general mission difficulty @@ -64,13 +67,13 @@ _missionObjs = ]; // Define Mission Start message -_msgStart = format["Lost Battalion!
A battalion of soldiers have gotten lost in convict land! Eliminate them!"]; +_msgStart = ['#FFFF00',"A battalion of soldiers have gotten lost in convict land! Eliminate them!"]; // Define Mission Win message -_msgWIN = format["Lost Battalion!
Convicts have successfully eliminated the lost battalion!"]; +_msgWIN = ['#0080ff',"Convicts have successfully eliminated the lost battalion!"]; // Define Mission Lose message -_msgLOSE = format["Lost Battalion!
Whittlesey escaped with his Lost Battalion!"]; +_msgLOSE = ['#FF0000',"Whittlesey escaped with his Lost Battalion!"]; // Define mission name (for map marker and logging) _missionName = "Lost Battalion"; @@ -106,7 +109,7 @@ _added = ], _missionAIUnits, _missionObjs, - [_msgWIN,_msgLOSE], + [_missionName,_msgWIN,_msgLOSE], _markers, _side, _difficulty, @@ -143,7 +146,7 @@ if !(_added) exitWith // Notify players -_msgStart call DMS_fnc_BroadcastMissionStatus; +[_missionName,_msgStart] call DMS_fnc_BroadcastMissionStatus; diff --git a/@ExileServer/addons/a3_dms/missions/bandit/medical.sqf b/@ExileServer/addons/a3_dms/missions/bandit/medical.sqf index 37b3bbb..85b33c8 100644 --- a/@ExileServer/addons/a3_dms/missions/bandit/medical.sqf +++ b/@ExileServer/addons/a3_dms/missions/bandit/medical.sqf @@ -13,7 +13,10 @@ _side = "bandit"; // find position -_pos = call DMS_fnc_findSafePos; +_pos = +[ + 10,DMS_WaterNearBlacklist,DMS_MaxSurfaceNormal,DMS_SpawnZoneNearBlacklist,DMS_TraderZoneNearBlacklist,DMS_MissionNearBlacklist,DMS_PlayerNearBlacklist,DMS_ThrottleBlacklists +]call DMS_fnc_findSafePos; // Set general mission difficulty @@ -66,13 +69,13 @@ _missionObjs = ]; // Define Mission Start message -_msgStart = format["Deranged Doctors!
A group of deranged doctors have set up a field hospital, sieze it for your own!"]; +_msgStart = ['#FFFF00',"A group of deranged doctors have set up a field hospital, sieze it for your own!"]; // Define Mission Win message -_msgWIN = format["Deranged Doctors!
Convicts have claimed the medical supplies for their own!"]; +_msgWIN = ['#0080ff',"Convicts have claimed the medical supplies for their own!"]; // Define Mission Lose message -_msgLOSE = format["Deranged Doctors!
Hawkeye has ran off with the medical supplies, everything is gone!"]; +_msgLOSE = ['#FF0000',"Hawkeye has ran off with the medical supplies, everything is gone!"]; // Define mission name (for map marker and logging) _missionName = "Deranged Doctors"; @@ -108,7 +111,7 @@ _added = ], _missionAIUnits, _missionObjs, - [_msgWIN,_msgLOSE], + [_missionName,_msgWIN,_msgLOSE], _markers, _side, _difficulty, @@ -145,7 +148,7 @@ if !(_added) exitWith // Notify players -_msgStart call DMS_fnc_BroadcastMissionStatus; +[_missionName,_msgStart] call DMS_fnc_BroadcastMissionStatus; diff --git a/@ExileServer/addons/a3_dms/missions/bandit/mercbase.sqf b/@ExileServer/addons/a3_dms/missions/bandit/mercbase.sqf index 375affa..7c422f3 100644 --- a/@ExileServer/addons/a3_dms/missions/bandit/mercbase.sqf +++ b/@ExileServer/addons/a3_dms/missions/bandit/mercbase.sqf @@ -13,7 +13,10 @@ _side = "bandit"; // find position -_pos = call DMS_fnc_findSafePos; +_pos = +[ + 25,DMS_WaterNearBlacklist,DMS_MaxSurfaceNormal,DMS_SpawnZoneNearBlacklist,DMS_TraderZoneNearBlacklist,DMS_MissionNearBlacklist,DMS_PlayerNearBlacklist,DMS_ThrottleBlacklists +]call DMS_fnc_findSafePos; // Set general mission difficulty @@ -97,13 +100,13 @@ _missionObjs = ]; // Define Mission Start message -_msgStart = format[" Mercenary Base
A mercenary base has been located at %1! There's reports of a dandy crate inside of it...",mapGridPosition _pos]; +_msgStart = ['#FFFF00',format ["A mercenary base has been located at %1! There are reports of a dandy crate inside of it...",mapGridPosition _pos]]; // Define Mission Win message -_msgWIN = format[" Mercenary Base
Convicts have successfully assaulted the Mercenary Base and obtained the dandy crate!"]; +_msgWIN = ['#0080ff',"Convicts have successfully assaulted the Mercenary Base and obtained the dandy crate!"]; // Define Mission Lose message -_msgLOSE = format[" Mercenary Base
Seems like the Mercenaries packed up and drove away..."]; +_msgLOSE = ['#FF0000',"Seems like the Mercenaries packed up and drove away..."]; // Define mission name (for map marker and logging) _missionName = "Mercenary Base"; @@ -139,7 +142,7 @@ _added = ], _missionAIUnits, _missionObjs, - [_msgWIN,_msgLOSE], + [_missionName,_msgWIN,_msgLOSE], _markers, _side, _difficulty, @@ -176,7 +179,7 @@ if !(_added) exitWith // Notify players -_msgStart call DMS_fnc_BroadcastMissionStatus; +[_missionName,_msgStart] call DMS_fnc_BroadcastMissionStatus; diff --git a/@ExileServer/addons/a3_dms/missions/bandit/mercenaries.sqf b/@ExileServer/addons/a3_dms/missions/bandit/mercenaries.sqf index a8c02d2..8e1d0b8 100644 --- a/@ExileServer/addons/a3_dms/missions/bandit/mercenaries.sqf +++ b/@ExileServer/addons/a3_dms/missions/bandit/mercenaries.sqf @@ -16,7 +16,10 @@ _side = "bandit"; // find position -_pos = [10] call DMS_fnc_findSafePos; +_pos = +[ + 10,DMS_WaterNearBlacklist,DMS_MaxSurfaceNormal,DMS_SpawnZoneNearBlacklist,DMS_TraderZoneNearBlacklist,DMS_MissionNearBlacklist,DMS_PlayerNearBlacklist,DMS_ThrottleBlacklists +]call DMS_fnc_findSafePos; // Set general mission difficulty @@ -64,13 +67,13 @@ _missionObjs = ]; // Define Mission Start message -_msgStart = format["Mercenary Group!
A group of mercenaries has been spotted. Kill them and take their equipment!"]; +_msgStart = ['#FFFF00',"A group of mercenaries has been spotted. Kill them and take their equipment!"]; // Define Mission Win message -_msgWIN = format["Mercenary Group!
Convicts have successfully eliminated the mercenaries"]; +_msgWIN = ['#0080ff',"Convicts have successfully eliminated the mercenaries"]; // Define Mission Lose message -_msgLOSE = format["Mercenary Group!
The mercenaries have escaped and they took all their loot with them!"]; +_msgLOSE = ['#FF0000',"The mercenaries have escaped and they took all their loot with them!"]; // Define mission name (for map marker and logging) _missionName = "Mercenary Group"; @@ -106,7 +109,7 @@ _added = ], _missionAIUnits, _missionObjs, - [_msgWIN,_msgLOSE], + [_missionName,_msgWIN,_msgLOSE], _markers, _side, _difficulty, @@ -143,7 +146,7 @@ if !(_added) exitWith // Notify players -_msgStart call DMS_fnc_BroadcastMissionStatus; +[_missionName,_msgStart] call DMS_fnc_BroadcastMissionStatus; diff --git a/@ExileServer/addons/a3_dms/missions/bandit/roguenavyseals.sqf b/@ExileServer/addons/a3_dms/missions/bandit/roguenavyseals.sqf index febbfa6..8c6e159 100644 --- a/@ExileServer/addons/a3_dms/missions/bandit/roguenavyseals.sqf +++ b/@ExileServer/addons/a3_dms/missions/bandit/roguenavyseals.sqf @@ -16,7 +16,10 @@ _side = "bandit"; // find position -_pos = [10] call DMS_fnc_findSafePos; +_pos = +[ + 10,DMS_WaterNearBlacklist,DMS_MaxSurfaceNormal,DMS_SpawnZoneNearBlacklist,DMS_TraderZoneNearBlacklist,DMS_MissionNearBlacklist,DMS_PlayerNearBlacklist,DMS_ThrottleBlacklists +]call DMS_fnc_findSafePos; // Set general mission difficulty @@ -64,13 +67,13 @@ _missionObjs = ]; // Define Mission Start message -_msgStart = format["Navy Seals!
A squad of professional Navy Seals team is performing gorilla warfare in convict land, deal with them!"]; +_msgStart = ['#FFFF00',"A squad of professional Navy Seals team is performing gorilla warfare in convict land, deal with them!"]; // Define Mission Win message -_msgWIN = format["Navy Seals!
Convicts have successfully taken care of the Navy Seals, you must be the top of your class!"]; +_msgWIN = ['#0080ff',"Convicts have successfully taken care of the Navy Seals, you must be the top of your class!"]; // Define Mission Lose message -_msgLOSE = format["Navy Seals!
The Navy Seals have escaped and are now planning their next raid!"]; +_msgLOSE = ['#FF0000',"The Navy Seals have escaped and are now planning their next raid!"]; // Define mission name (for map marker and logging) _missionName = "Rogue Navy Seals"; @@ -106,7 +109,7 @@ _added = ], _missionAIUnits, _missionObjs, - [_msgWIN,_msgLOSE], + [_missionName,_msgWIN,_msgLOSE], _markers, _side, _difficulty, @@ -143,7 +146,7 @@ if !(_added) exitWith // Notify players -_msgStart call DMS_fnc_BroadcastMissionStatus; +[_missionName,_msgStart] call DMS_fnc_BroadcastMissionStatus; diff --git a/@ExileServer/addons/a3_dms/missions/bandit/testmission.sqf b/@ExileServer/addons/a3_dms/missions/bandit/testmission.sqf index 490ca5e..f80df0a 100644 --- a/@ExileServer/addons/a3_dms/missions/bandit/testmission.sqf +++ b/@ExileServer/addons/a3_dms/missions/bandit/testmission.sqf @@ -13,7 +13,10 @@ _side = "bandit"; // find position -_pos = [10] call DMS_fnc_findSafePos; +_pos = +[ + 10,DMS_WaterNearBlacklist,DMS_MaxSurfaceNormal,DMS_SpawnZoneNearBlacklist,DMS_TraderZoneNearBlacklist,DMS_MissionNearBlacklist,DMS_PlayerNearBlacklist,DMS_ThrottleBlacklists +]call DMS_fnc_findSafePos; // Set general mission difficulty @@ -109,13 +112,13 @@ _missionObjs = ]; // Define Mission Start message -_msgStart = format["Armed Bandits!
A heavily armed bandit group has been spotted, take them out and claim their vehicle!"]; +_msgStart = ['#FFFF00',"A heavily armed bandit group has been spotted, take them out and claim their vehicle!"]; // Define Mission Win message -_msgWIN = format["Armed Bandits!
Convicts have successfully taken care of the bandit group!"]; +_msgWIN = ['#0080ff',"Convicts have successfully taken care of the bandit group!"]; // Define Mission Lose message -_msgLOSE = format["Armed Bandits!
The bandits have taken their vehicle and drove off, no loot today!"]; +_msgLOSE = ['#FF0000',"The bandits have taken their vehicle and drove off, no loot today!"]; // Define mission name (for map marker and logging) _missionName = "Armed Bandits"; @@ -153,7 +156,7 @@ _added = ], _missionAIUnits, _missionObjs, - [_msgWIN,_msgLOSE], + [_missionName,_msgWIN,_msgLOSE], _markers, _side, _difficulty, @@ -190,7 +193,7 @@ if !(_added) exitWith // Notify players -_msgStart call DMS_fnc_BroadcastMissionStatus; +[_missionName,_msgStart] call DMS_fnc_BroadcastMissionStatus; diff --git a/@ExileServer/addons/a3_dms/missions/bandit/walmart.sqf b/@ExileServer/addons/a3_dms/missions/bandit/walmart.sqf index efb871f..11278af 100644 --- a/@ExileServer/addons/a3_dms/missions/bandit/walmart.sqf +++ b/@ExileServer/addons/a3_dms/missions/bandit/walmart.sqf @@ -16,7 +16,10 @@ _side = "bandit"; // find position -_pos = [10] call DMS_fnc_findSafePos; +_pos = +[ + 10,DMS_WaterNearBlacklist,DMS_MaxSurfaceNormal,DMS_SpawnZoneNearBlacklist,DMS_TraderZoneNearBlacklist,DMS_MissionNearBlacklist,DMS_PlayerNearBlacklist,DMS_ThrottleBlacklists +]call DMS_fnc_findSafePos; // Set general mission difficulty @@ -69,13 +72,13 @@ _missionObjs = ]; // Define Mission Start message -_msgStart = format["Walmart Riot!
A local Walmart shop is being raided, stop the raiders and take the loot!"]; +_msgStart = ['#FFFF00',"A local Walmart shop is being raided, stop the raiders and take the loot!"]; // Define Mission Win message -_msgWIN = format["Walmart Riot!
Convicts have done a good deed and stopped the raiders!"]; +_msgWIN = ['#0080ff',"Convicts have done a good deed and stopped the raiders!"]; // Define Mission Lose message -_msgLOSE = format["Walmart Riot!
The raiders has looted everything from Walmart and escaped!"]; +_msgLOSE = ['#FF0000',"The raiders has looted everything from Walmart and escaped!"]; // Define mission name (for map marker and logging) _missionName = "Walmart Riot"; @@ -111,7 +114,7 @@ _added = ], _missionAIUnits, _missionObjs, - [_msgWIN,_msgLOSE], + [_missionName,_msgWIN,_msgLOSE], _markers, _side, _difficulty, @@ -144,7 +147,7 @@ if !(_added) exitWith // Notify players -_msgStart call DMS_fnc_BroadcastMissionStatus; +[_missionName,_msgStart] call DMS_fnc_BroadcastMissionStatus; diff --git a/@ExileServer/addons/a3_dms/scripts/fn_AILocalityManager.sqf b/@ExileServer/addons/a3_dms/scripts/fn_AILocalityManager.sqf index d75a4a3..cc3bafe 100644 --- a/@ExileServer/addons/a3_dms/scripts/fn_AILocalityManager.sqf +++ b/@ExileServer/addons/a3_dms/scripts/fn_AILocalityManager.sqf @@ -2,11 +2,11 @@ DMS_fnc_AILocalityManager Created by Defent and eraser1 - Offloads AI groups to a nearby client in order to improve server performance. + Offloads AI groups to a nearby client or HC in order to improve server performance. */ -if !(DMS_ai_offload_to_client) exitWith {}; +if (!DMS_ai_offload_to_client && {isNull DMS_HC_Object}) exitWith {}; { if (((count (units _x))>1) && {!((DMS_ai_offload_Only_DMS_AI && {!(_x getVariable ["DMS_SpawnedGroup",false])}) || {(_x getVariable ["DMS_LockLocality",false])})}) then diff --git a/@ExileServer/addons/a3_dms/scripts/fn_AddMissionToMonitor.sqf b/@ExileServer/addons/a3_dms/scripts/fn_AddMissionToMonitor.sqf index a0d281f..326dde4 100644 --- a/@ExileServer/addons/a3_dms/scripts/fn_AddMissionToMonitor.sqf +++ b/@ExileServer/addons/a3_dms/scripts/fn_AddMissionToMonitor.sqf @@ -41,7 +41,7 @@ ] ], [_msgWIN,_msgLose], - [_markerDot,_markerCircle], + [_missionName,_markerDot,_markerCircle], _side, _difficulty, _missionEvents @@ -63,7 +63,7 @@ _OK = params ["_timeOutInfo","",[[]],[1,2]], ["_inputUnits","",[[]]], ["_missionObjs","",[[]],[3,4]], - ["_messages","",[[]],[2]], + ["_messages","",[[]],[3]], ["_markers","",[[]],[2]], ["_side","bandit",[""]], ["_difficulty","moderate",[""]], @@ -136,8 +136,9 @@ try _OK = _messages params [ - ["_msgWIN","",[""]], - ["_msgLose","",[""]] + ["_missionName","",[""]], + ["_msgWIN",[],[[]],[2]], + ["_msgLose",[],[[]],[2]] ]; if (!_OK) then @@ -172,6 +173,7 @@ try _mines ], [ + _missionName, _msgWIN, _msgLose ], diff --git a/@ExileServer/addons/a3_dms/scripts/fn_BroadcastMissionStatus.sqf b/@ExileServer/addons/a3_dms/scripts/fn_BroadcastMissionStatus.sqf index 9ce15b8..d599206 100644 --- a/@ExileServer/addons/a3_dms/scripts/fn_BroadcastMissionStatus.sqf +++ b/@ExileServer/addons/a3_dms/scripts/fn_BroadcastMissionStatus.sqf @@ -11,24 +11,64 @@ */ -if (DMS_DEBUG) then +private ["_missionName", "_messageInfo", "_titleColor", "_message"]; + +_OK = params +[ + ["_missionName","",[""]], + ["_messageInfo",[],[[]],[2]] +]; + +if (!_OK) exitWith { - diag_log format["DMS_DEBUG BroadcastMissionStatus :: Notification types: |%1| for broadcasting mission status: %2",DMS_PlayerNotificationTypes,_this]; + diag_log format ["DMS ERROR :: Calling DMS_fnc_BroadcastMissionStatus with invalid parameters: %1",_this]; }; -if ((typeName _this) != "STRING") then +_messageInfo params +[ + ["_titleColor","#FFFF00",[""]], + ["_message","",[""]] +]; + +if (DMS_DEBUG) then { - _this = str _this; + diag_log format["DMS_DEBUG BroadcastMissionStatus :: Notification types: |%1| for broadcasting mission status: %2",DMS_PlayerNotificationTypes,_message]; +}; + +if ((typeName _message) != "STRING") then +{ + _message = str _message; }; { private "_args"; - _args = // Only include extra parameters if using "dynamicTextRequest" - [ - [_x, [_this]], - [_x, [_this,0,DMS_dynamicText_Size,DMS_dynamicText_Color]] - ] select (_x == "dynamicTextRequest"); + switch (toLower _x) do + { + case "systemchatrequest": + { + [_x, [format ["%1: %2",toUpper _missionName,_message]]] call ExileServer_system_network_send_broadcast; + }; - _args call ExileServer_system_network_send_broadcast; + case "standardhintrequest": + { + [_x, [format ["%2
%3",_titleColor,_missionName,_message]]] call ExileServer_system_network_send_broadcast; + }; + + case "dynamictextrequest": + { + //Unfortunately that doesn't work, so I have to do some funky stuff... + //[_x, [format ["%1
%2",toUpper _missionName,_message], 0, DMS_dynamicText_Size, DMS_dynamicText_Color]] call ExileServer_system_network_send_broadcast; + + [ + format ['%2
%5',_titleColor,_missionName,DMS_dynamicText_Color,DMS_dynamicText_Size,_message], + 0, + 0, + 10, + 1 + ] remoteExec ["BIS_fnc_dynamicText", -2]; + }; + + default { diag_log format ["DMS ERROR :: Unsupported Notification Type in DMS_PlayerNotificationTypes: %1 | Calling parameters: %2",_x,_this]; }; + }; } forEach DMS_PlayerNotificationTypes; \ No newline at end of file diff --git a/@ExileServer/addons/a3_dms/scripts/fn_CleanUp.sqf b/@ExileServer/addons/a3_dms/scripts/fn_CleanUp.sqf index 0b0de2c..b0d9a89 100644 --- a/@ExileServer/addons/a3_dms/scripts/fn_CleanUp.sqf +++ b/@ExileServer/addons/a3_dms/scripts/fn_CleanUp.sqf @@ -31,6 +31,10 @@ _skippedObjects = []; _clean = { + { + detach _x; + _x call _clean; + } forEach (attachedObjects _x); _this enableSimulationGlobal false; _this removeAllMPEventHandlers "mpkilled"; _this removeAllMPEventHandlers "mphit"; diff --git a/@ExileServer/addons/a3_dms/scripts/fn_FindSafePos.sqf b/@ExileServer/addons/a3_dms/scripts/fn_FindSafePos.sqf index 743d634..f5d10a9 100644 --- a/@ExileServer/addons/a3_dms/scripts/fn_FindSafePos.sqf +++ b/@ExileServer/addons/a3_dms/scripts/fn_FindSafePos.sqf @@ -1,21 +1,37 @@ /* - DMS_fnc_findSafePos + DMS_fnc_FindSafePos Created by eraser1 + + + ALL PARAMETERS ARE OPTIONAL (as long as configs are properly defined). + Excluding parameters will create some RPT spam, but it's not too much of an issue. Usage: [ - _nearestObjectMinDistance, // (OPTIONAL) Number: Minimum distance from nearest object - _maxTerrainGradient // (OPTIONAL) Number: Maximum terrain gradient (slope) + _nearestObjectMinDistance, // NUMBER (distance): Minimum distance from the nearest object. + _waterNearLimit, // NUMBER (distance): Minimum distance from water. + _maxSurfaceNormal, // NUMBER (between 0-1): Maximum "surfaceNormal"; Basically determines how steep a position is. Check the comment for config value "DMS_MaxSurfaceNormal" in config.sqf for more info + _spawnZoneNearLimit, // NUMBER (distance): Minimum distance from a spawn point. + _traderZoneNearLimit, // NUMBER (distance): Minimum distance from a trader zone. + _missionNearLimit, // NUMBER (distance): Minimum distance from another mission. + _playerNearLimit, // NUMBER (distance): Minimum distance from a player. + _throttleParams // BOOLEAN: Whether or not some of the distance values should be throttled on repeated attempts. ] call DMS_fnc_findSafePos; */ -private ["_nearestObjectMinDistance","_maxTerrainGradient","_safePosParams","_validspot","_i","_pos","_missionPos"]; +private ["_nearestObjectMinDistance", "_waterNearLimit", "_maxSurfaceNormal", "_spawnZoneNearLimit", "_traderZoneNearLimit", "_missionNearLimit", "_playerNearLimit", "_throttleParams", "_safePosParams", "_validspot", "_attempts", "_pos"]; params [ - ["_nearestObjectMinDistance",25,[0]], - ["_maxTerrainGradient",10,[0]] + ["_nearestObjectMinDistance", 25, [0] ], + ["_waterNearLimit", DMS_WaterNearBlacklist, [0] ], + ["_maxSurfaceNormal", DMS_MaxSurfaceNormal, [0] ], + ["_spawnZoneNearLimit", DMS_SpawnZoneNearBlacklist, [0] ], + ["_traderZoneNearLimit", DMS_TraderZoneNearBlacklist,[0] ], + ["_missionNearLimit", DMS_MissionNearBlacklist, [0] ], + ["_playerNearLimit", DMS_PlayerNearBlacklist, [0] ], + ["_throttleParams", DMS_ThrottleBlacklists, [true]] ]; @@ -23,77 +39,46 @@ params // If you are using one and you have an issue with mission spawns, please create an issue on GitHub or post a comment in the DMS thread. switch (toLower worldName) do { - case "altis" : { _safePosParams = [[16000,16000],0,16000,_nearestObjectMinDistance,0,_maxTerrainGradient,0,DMS_findSafePosBlacklist]; }; //[16000,16000] w/ radius of 16000 works well for Altis - case "bornholm" : { _safePosParams = [[11264,11264],0,12000,_nearestObjectMinDistance,0,_maxTerrainGradient,0,DMS_findSafePosBlacklist]; }; // Thanks to thirdhero for testing this info - case "esseker" : { _safePosParams = [[6276.77,6352.98,0],0,5000,_nearestObjectMinDistance,0,_maxTerrainGradient,0,DMS_findSafePosBlacklist]; }; // Thanks to Flowrider for this info - case "tavi" : { _safePosParams = [[12800,12800],0,12800,_nearestObjectMinDistance,0,_maxTerrainGradient,0,DMS_findSafePosBlacklist]; }; // Thanks to JamieKG for this info - default { _safePosParams = [[],0,-1,_nearestObjectMinDistance,0,_maxTerrainGradient,0,DMS_findSafePosBlacklist]; }; + case "altis": { _safePosParams = [[16000,16000],0,16000]; }; // [16000,16000] w/ radius of 16000 works well for Altis + case "bornholm": { _safePosParams = [[11265,11265],0,12000]; }; // Thanks to thirdhero for testing this info + case "esseker": { _safePosParams = [[6275,6350,0],0,5000]; }; // Thanks to Flowrider for this info + case "tavi": { _safePosParams = [[12800,12800],0,12800]; }; // Thanks to JamieKG for this info + default { _safePosParams = [[],0,-1]; }; // Use default BIS_fnc_findSafePos methods for finding map center (worldSize) }; +_safePosParams append [_nearestObjectMinDistance,0,9999,0,DMS_findSafePosBlacklist]; + _validspot = false; -_i = 0; +_attempts = 0; + while{!_validspot} do { - _pos = _safePosParams call BIS_fnc_findSafePos; - _i = _i+1; - try + _pos = _safePosParams call BIS_fnc_findSafePos; + _attempts = _attempts+1; + + // It will only throttle the missionNear blacklist and playerNear limits because those are the most likely to throw an exception. + // The throttling works by decreasing the parameters by 10% every 15 attempts, until it reaches 100 meters (by default). + if (_throttleParams && {(_attempts>=DMS_AttemptsUntilThrottle) && {(_attempts%DMS_AttemptsUntilThrottle)==0}}) then { - // Check for nearby water - if ((DMS_WaterNearBlacklist>0) && {[_pos,DMS_WaterNearBlacklist] call DMS_fnc_isNearWater}) then - { - throw ("water"); - }; - - // Check for nearby players - if ((DMS_PlayerNearBlacklist>0) && {[_pos,DMS_PlayerNearBlacklist] call DMS_fnc_IsPlayerNearby}) then - { - throw ("players"); - }; + _missionNearLimit = (DMS_ThrottleCoefficient * _missionNearLimit) max DMS_MinThrottledDistance; + _playerNearLimit = (DMS_ThrottleCoefficient * _playerNearLimit) max DMS_MinThrottledDistance; - // Terrain steepness check - if (((surfaceNormal _pos) select 2)0) && {((markertype _x) == "ExileSpawnZone") && {((getMarkerPos _x) distance2D _pos)<=DMS_SpawnZoneNearBlacklist}}) then - { - throw ("a spawn zone"); - }; - - // Check for nearby trader zones - if ((DMS_TraderZoneNearBlacklist>0) && {((markertype _x) == "ExileTraderZone") && {((getMarkerPos _x) distance2D _pos)<=DMS_TraderZoneNearBlacklist}}) then - { - throw ("a trader zone"); - }; - - // Check for nearby missions - if (DMS_MissionNearBlacklist>0) then - { - _missionPos = missionNamespace getVariable [format ["%1_pos",_x], []]; - if (!(_missionPos isEqualTo []) && {(_missionPos distance2D _pos)<=DMS_MissionNearBlacklist}) then - { - throw ("another mission"); - }; - }; - } forEach allMapMarkers; - - // No exceptions found - _validspot = true; - } - catch - { if (DMS_DEBUG) then { - diag_log format ["DMS_DEBUG findSafePos :: Exception in attempt %1 | Position %2 is too close to %3!",_i,_pos,_exception]; + diag_log format ["DMS_DEBUG FindSafePos :: Throttling _missionNearLimit to %1 and _playerNearLimit to %2 after %3 failed attempts to find a safe position! FPS: %4",_missionNearLimit,_playerNearLimit,_attempts,diag_fps]; }; }; + + _validspot = [_pos, _waterNearLimit, _maxSurfaceNormal, _spawnZoneNearLimit, _traderZoneNearLimit, _missionNearLimit, _playerNearLimit] call DMS_fnc_IsValidPosition; }; -if(DMS_DEBUG) then { - diag_log format["DMS_DEBUG findSafePos :: Mission position %1 with %2 params found in %3 attempts.",_pos,_safePosParams,_i]; + + +if(DMS_DEBUG) then +{ + diag_log format["DMS_DEBUG FindSafePos :: Found mission position %1 with %2 params in %3 attempts. _this: %4",_pos,_safePosParams,_attempts,_this]; }; + + _pos set [2, 0]; _pos; \ No newline at end of file diff --git a/@ExileServer/addons/a3_dms/scripts/fn_IsValidPosition.sqf b/@ExileServer/addons/a3_dms/scripts/fn_IsValidPosition.sqf new file mode 100644 index 0000000..f4068bc --- /dev/null +++ b/@ExileServer/addons/a3_dms/scripts/fn_IsValidPosition.sqf @@ -0,0 +1,100 @@ +/* + DMS_fnc_IsValidPosition + Created by eraser1 + + Usage: + [ + _pos, // ARRAY (position): The position to check. + _waterNearLimit, // NUMBER (distance): Minimum distance from water. + _maxSurfaceNormal, // NUMBER (between 0-1): Maximum "surfaceNormal"; Basically determines how steep a position is. Check the comment for config value "DMS_MaxSurfaceNormal" in config.sqf for more info + _spawnZoneNearLimit, // NUMBER (distance): Minimum distance from a spawn point. + _traderZoneNearLimit, // NUMBER (distance): Minimum distance from a trader zone. + _missionNearLimit, // NUMBER (distance): Minimum distance from another mission. + _playerNearLimit, // NUMBER (distance): Minimum distance from a player. + ] call DMS_fnc_IsValidPosition; + + + +*/ + +private ["_pos", "_waterNearLimit", "_maxSurfaceNormal", "_spawnZoneNearLimit", "_traderZoneNearLimit", "_missionNearLimit", "_playerNearLimit"]; + +_OK = params +[ + ["_pos", [0,0,0], [[]], [2,3]], + ["_waterNearLimit", DMS_WaterNearBlacklist, [0] ], + ["_maxSurfaceNormal", DMS_MaxSurfaceNormal, [0] ], + ["_spawnZoneNearLimit", DMS_SpawnZoneNearBlacklist, [0] ], + ["_traderZoneNearLimit", DMS_TraderZoneNearBlacklist,[0] ], + ["_missionNearLimit", DMS_MissionNearBlacklist, [0] ], + ["_playerNearLimit", DMS_PlayerNearBlacklist, [0] ] +]; + + +_isValidPos = false; + +if (!_OK) then +{ + diag_log format ["DMS ERROR :: Calling DMS_fnc_isValidPosition with invalid parameters: %1",_this]; +} +else +{ + try + { + // Check for nearby water + if ((_waterNearLimit>0) && {[_pos,_waterNearLimit] call DMS_fnc_isNearWater}) then + { + throw ("water"); + }; + + // Terrain steepness check + if (((surfaceNormal _pos) select 2)<_maxSurfaceNormal) then + { + throw ("a steep location"); + }; + + { + // Check for nearby spawn points + if ((_spawnZoneNearLimit>0) && {((markertype _x) == "ExileSpawnZone") && {((getMarkerPos _x) distance2D _pos)<=_spawnZoneNearLimit}}) then + { + throw ("a spawn zone"); + }; + + // Check for nearby trader zones + if ((_traderZoneNearLimit>0) && {((markertype _x) == "ExileTraderZone") && {((getMarkerPos _x) distance2D _pos)<=_traderZoneNearLimit}}) then + { + throw ("a trader zone"); + }; + + // Check for nearby missions + if (_missionNearLimit>0) then + { + _missionPos = missionNamespace getVariable [format ["%1_pos",_x], []]; + if (!(_missionPos isEqualTo []) && {(_missionPos distance2D _pos)<=_missionNearLimit}) then + { + throw ("another mission"); + }; + }; + } forEach allMapMarkers; + + // Check for nearby players + // This is done last because it is likely to be the most resource intensive. + if ((_playerNearLimit>0) && {[_pos,_playerNearLimit] call DMS_fnc_IsPlayerNearby}) then + { + throw ("players"); + }; + + // No exceptions found + _isValidPos = true; + } + catch + { + if (DMS_DEBUG) then + { + diag_log format ["DMS_DEBUG IsValidPosition :: Exception in attempt %1 | Position %2 is too close to %3!",_attempts,_pos,_exception]; + }; + }; +}; + + +_isValidPos; \ No newline at end of file diff --git a/@ExileServer/addons/a3_dms/scripts/fn_MissionsMonitor.sqf b/@ExileServer/addons/a3_dms/scripts/fn_MissionsMonitor.sqf index 2cafb5c..e76ac5d 100644 --- a/@ExileServer/addons/a3_dms/scripts/fn_MissionsMonitor.sqf +++ b/@ExileServer/addons/a3_dms/scripts/fn_MissionsMonitor.sqf @@ -25,7 +25,7 @@ */ if (DMS_Mission_Arr isEqualTo []) exitWith {}; // Empty array, no missions running -private ["_pos", "_success", "_timeStarted", "_timeUntilFail", "_units", "_buildings", "_vehs", "_crate_info_array", "_mines", "_msgWIN", "_msgLose", "_markers", "_missionSide", "_arr", "_cleanupList"]; +private ["_pos", "_success", "_timeStarted", "_timeUntilFail", "_units", "_buildings", "_vehs", "_crate_info_array", "_mines", "_missionName", "_msgWIN", "_msgLose", "_markers", "_missionSide", "_arr", "_cleanupList"]; { @@ -44,8 +44,9 @@ private ["_pos", "_success", "_timeStarted", "_timeUntilFail", "_units", "_build _vehs = _x select 4 select 1; _crate_info_array = _x select 4 select 2; _mines = _x select 4 select 3; - _msgWIN = _x select 5 select 0; - _msgLose = _x select 5 select 1; + _missionName = _x select 5 select 0; + _msgWIN = _x select 5 select 1; + _msgLose = _x select 5 select 2; _markers = _x select 6; _missionSide = _x select 7; @@ -83,10 +84,10 @@ private ["_pos", "_success", "_timeStarted", "_timeUntilFail", "_units", "_build } forEach _mines; }; - _msgWIN call DMS_fnc_BroadcastMissionStatus; + [_missionName,_msgWIN] call DMS_fnc_BroadcastMissionStatus; [_markers,"win"] call DMS_fnc_RemoveMarkers; - throw format ["Mission Success at %1 with message %2.",_pos,_msgWIN]; + throw format ["Mission (%1) Success at %2 with message %3.",_missionName,_pos,_msgWIN]; }; if (DMS_MissionTimeoutReset && {[_pos,DMS_MissionTimeoutResetRange] call DMS_fnc_IsPlayerNearby}) then @@ -119,10 +120,10 @@ private ["_pos", "_success", "_timeStarted", "_timeUntilFail", "_units", "_build _arr = DMS_Mission_Arr deleteAt _forEachIndex; - _msgLose call DMS_fnc_BroadcastMissionStatus; + [_missionName,_msgLose] call DMS_fnc_BroadcastMissionStatus; [_markers,"lose"] call DMS_fnc_RemoveMarkers; - throw format ["Mission Fail at %1 with message %2.",_pos,_msgLose]; + throw format ["Mission (%1) Fail at %2 with message %3.",_missionName,_pos,_msgLose]; }; } catch diff --git a/@ExileServer/addons/a3_dms/scripts/fn_RemoveMarkers.sqf b/@ExileServer/addons/a3_dms/scripts/fn_RemoveMarkers.sqf index 5b9c902..5dcf140 100644 --- a/@ExileServer/addons/a3_dms/scripts/fn_RemoveMarkers.sqf +++ b/@ExileServer/addons/a3_dms/scripts/fn_RemoveMarkers.sqf @@ -26,6 +26,7 @@ if (DMS_DEBUG) then deleteMarker _markerCircle; +missionNamespace setVariable [format ["%1_pos",_markerDot], nil]; if (_status == "win") then { @@ -35,7 +36,8 @@ if (_status == "win") then }; _markerDot setMarkerText ("COMPLETED: "+markerText _markerDot); _markerDot setMarkerColor DMS_MissionMarkerWinDotColor; - _markerDot spawn {sleep DMS_MissionMarkerWinDotTime;deleteMarker _this;}; + //_markerDot spawn {sleep DMS_MissionMarkerWinDotTime;deleteMarker _this;}; + [DMS_MissionMarkerWinDotTime, {deleteMarker _this;}, _markerDot, false] call ExileServer_system_thread_addTask; if (DMS_DEBUG) then { diag_log format ["DMS_DEBUG RemoveMarkers :: %1 Marker will be removed in %2 seconds!",_markerDot,DMS_MissionMarkerWinDotTime]; @@ -49,7 +51,8 @@ else }; _markerDot setMarkerText ("FAILED: "+markerText _markerDot); _markerDot setMarkerColor DMS_MissionMarkerLoseDotColor; - _markerDot spawn {sleep DMS_MissionMarkerLoseDotTime;deleteMarker _this;}; + //_markerDot spawn {sleep DMS_MissionMarkerLoseDotTime;deleteMarker _this;}; + [DMS_MissionMarkerLoseDotTime, {deleteMarker _this;}, _markerDot, false] call ExileServer_system_thread_addTask; if (DMS_DEBUG) then { diag_log format ["DMS_DEBUG RemoveMarkers :: %1 Marker will be removed in %2 seconds!",_markerDot,DMS_MissionMarkerLoseDotTime]; diff --git a/Pre-Packed PBO/a3_dms.pbo b/Pre-Packed PBO/a3_dms.pbo index 12e3f746ea6cbc479c71ccde8f677c40a38bec61..2215fe2294d975244c2351a41e06b37d3409a39d 100644 GIT binary patch delta 12744 zcmeG?3vg6bmV0j!Ac0N-fsh19ZaRc?$V<|l7zz>s1W1-B2_c^bX`1HI{hGW<|LFIc zBz&e}#~F20Wa_zd-Bm|+UCSwFK_%lnb?~=a?o5rJ(ZSN)*{#LZS*_V&RCJv|r$+bO z_v!TO#Klx?p|v$#Md&{7-h00Hob%2(FT6Kz;_q!I_YWSL^=I1WRi)6)zWbw*pt!$5 zIuO*r+eh`se|=k_n|%*Pe4Bd)e6gq`cSl4ywa%BNuPZxmbNjyY<7obdLLKnVo&xuV zLS;3w+s+%HniGZY^U8iyYa1~jkHYCA$~}m)tui3B@j~}1)bkPno%u*24DKzabu ztdwLq@{5dJ*8-$yzS5gjYl|1?2lW9cuH2ASWjkwZ8wAK%<%e0zZAoKWc2%J}sr+YF zjV)>H^1zy;QkuQecFut80mwO}FT2Ke!5}&SkPFHU*;TeP#yLDd&L}_3e#CZHzK;D3 zl<&SviRUhs^7twRpWh3}uNygOCf0 z3fw1@>N$I|9#smJZ_Qbe|EOU>uZO$gBt;W(zfdnmWFaDn zKzc9{@oT04gfIbj7>o@?WHDqa4~S|fu9h}N9FrN@0)hc5#wX>FVCywZX-ebcNv06p z0s;*N3iH%WQ6U%<{h|<&*|F`!*{~)9MZ!Nk_004mL53DH;p4z+A|#8kkSGMmzT~*J z-#>|p106F=BrNa|iL7x}GkuQ^^D`gP{ zuW721qkupJUPM{9RZ}Jnq+7R96A;jCmuW2|NKAEn1pbH;$0*akPA*AEz@r$EWPuMf zOx#mmfRv_+9_8bTI{1I95+n7fMR~fsd*U7P@f?NJEo|m2_SV>FXE!at#{*lyB>IH| zaBXC}b&;}t9{VOcwpVp8m}mM3$Bp>5wha5Zssj!?I5b@1L@N zD}zkjDSc;Q`{!CJY1iDuv{p>&h^r0wS1NCAn+V)=xhvO}=Yii%Eu3htGj_-aG%`7-~98%tP+pU*rdUH zVQK$>%*SP~`XBx1Gi->$<-AIw*go-_3y)@7_*X9c>MyM9Kk`vkDf3N8A%;URSyLJwtG*raoF(6_97 zUV62j{xJt#XJJ;oaTfZ+SD#HV@(+>vBgI1X_o8YZsQPWp)*ty#)mAvl+_&S5-gspWk7 z;<`1I|2`sg!4_0TN2^d(De-8lTT+Xgjm5O04HJ6zFHv1%W25h&06{e*xF9={AsOr# z+)5n(>(1<2@c%S_Ia*%+xhTYVooh8Cs6xYY%_N?tFM?-sJE~RhT8_3KX_# z{@R*M&1XB%vKeZA7NX(%Q70`-peE}3OLUU%`ZX%2>s{!fs~zRGtLvMPI7>HXGqzn^ zjWlveHZz%7)IbXeh9Mxqwv|bO2Ti8_~c+;xg znfiqUrc8Z#H@YxG{eGEztA!%^O~y5D8$kyx{L)J!=y*X!Dnd7mfI0sxgx>kev-_YL zs6>w=6>^a0GIU#V1Rb&Ps_FK#BgkVhXR7J;+)?!244M5NVje4xmTf|d)rbEHm7}Y9 zja5j@U(2|>^cFO3;h1i}6^&T9RsVP^dVdCtQb@BuRL|dmUcai`vDc36dbY*hJ**iw z{p2om%*yAJcW3fBau3R#p_7`0R0u{tFd4mS?^oL?M4oc>#s|=KISbQXt+bMfOgwg4 zbQ(2e6DShUO{dWYrQ@SU3;XcGwS?NvAnRL~`ox(TC!4xW-$rYGf*!b<)~vl|swdrO z7gF}V(yl)91p01<>w-{RN*_6g{1(=kg|DQ?o1DH#4d7K}C$gZZT!iQ194Jw5*+lCW;}-0wRPx(O%E*cp?9trv^BBf+ShBX*xGLS23nl-%OlPotJZ zw?B`UHmB8!tUNFl($ATsn^tCLZKrw9p<;SG50%jO-ok}F@V;fsOW&c_)1e~9DsOOD zIuUlG7?vioNpwI4efD`=L|fP5<@D}l`1ov-;>vPdn)

9G4XvPvA9FlHsKpLL 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 K6VGuEzy4ob@irs? diff --git a/README.md b/README.md index 481ac0e..64ec851 100644 --- a/README.md +++ b/README.md @@ -52,6 +52,25 @@ if (!hasInterface && !isServer) then ## Changelog: +#### October 3, 2015 (10:30 PM CST-America): +* **You must update all of your mission files; the mission message system as well as the calling parameters for DMS_fnc_FindSafePos have been overhauled and will be incompatible with previous versions.** +* NEW CONFIG VALUES: + + |DMS_ThrottleBlacklists| + |DMS_AttemptsUntilThrottle| + |DMS_ThrottleCoefficient| + |DMS_MinThrottledDistance| +* Decreased "DMS_TraderZoneNearBlacklist","DMS_MissionNearBlacklist","DMS_WaterNearBlacklist" +* Changed "DMS_dynamicText_Color" to "#FFFFFF" (white) +* Replaced weapon classes in "DMS_CrateCase_Sniper" to the base classes; all attachments should now spawn in the box separately. +* New function DMS_fnc_IsValidPosition (uses logic that was previously from "DMS_fnc_FindSafePos"). +* You can now manually define every individual parameter for DMS_fnc_findSafePos per-mission, instead of using global parameters. +* AI will now be offloaded to an HC even with "DMS_ai_offload_to_client" set to false. +* All of the previously "supported" values for "DMS_PlayerNotificationTypes" are now PROPERLY supported. DMS_PlayerNotificationTypes is now set to default "dynamicTextRequest" and "systemChatRequest". +* Tweaked "cardealer" mission, the cars should no longer spawn inside of each other. + + + #### September 30, 2015 (9:30 PM CST-America): * NEW CONFIG VALUE: DMS_SpawnMinefieldForEveryMission * You can now force-spawn an AT mine minefield on every mission with the above config. These mines will only blow up on Tanks, APCs, and MRAPs (Ifrits, Hunters, Striders). @@ -64,6 +83,7 @@ if (!hasInterface && !isServer) then * When revealing a player to AI, the reveal amount will be reduced if the player has a suppressor. * DMS_fnc_SetGroupBehavior will now remove all previous waypoints from the AI group. * Improved logging message for DMS_fnc_SpawnMinefield. Also, the mine warning signs should be on a random offset (instead of always spawning at 0, 90, 180, and 270 degrees) +* Removed obsolete DMS_DEBUG overrides in config. "DMS_fnc_SpawnBanditMission" called from console works great. #### September 25, 2015 (11:30 PM CST-America):