2015-08-27 07:44:23 +00:00
/*
2015-09-05 03:40:00 +00:00
DMS Pre-init
2017-02-24 00:50:14 +00:00
Created by eraser1
2015-08-28 16:37:23 +00:00
*/
2016-05-07 03:44:48 +00:00
#define CALLFILE(FILE) call compile preprocessFileLineNumbers FILE;
2015-08-27 07:44:23 +00:00
2016-05-15 18:55:18 +00:00
// Enables debug logging in DMS functions. !!!NOTE:!!! You must uncomment the line above if you want DMS to even check whether or not debug mode is enabled!
// Logs will be written in the RPT, and if you have infiSTAR's "ARMA_LOG" DLL loaded, it will also produce logs in the server directory.
// If you have mARMA by maca134, DMS will also utilize mARMA logs.
// This will produce A LOT of logs, so make sure you leave it to false unless you know what you're doing.
DMS_DEBUG = false;
2015-08-28 19:14:59 +00:00
Static Missions! And MORE!
* ** NEW CONFIG VALUES:
|DMS_MaxStaticMissions|
|DMS_TimeToFirstStaticMission|
|DMS_TimeBetweenStaticMissions|
|DMS_StaticMissionTimeOut|
|DMS_StaticMissionTimeoutResetRange|
|DMS_StaticMinPlayerDistance|
|DMS_UsePredefinedMissionLocations|
|DMS_PredefinedMissionLocations|
|DMS_MinDistFromWestBorder|
|DMS_MinDistFromEastBorder|
|DMS_MinDistFromSouthBorder|
|DMS_MinDistFromNorthBorder|
|DMS_StaticMissionTypes|
**
* Added new value "DMS_Version".
* ** "DMS_fnc_SpawnAIStatic" is now "DMS_fnc_SpawnAIStaticMG";
donthasslethehoff, mercbase, and testmission have been updated with the
new names**
* DMS will now check to make sure that marker colors passed to
fn_CreateMarker are valid marker colors.
* You can now control how far away from each border a mission will spawn
(each border is separate: west, east, south, north). All "supported"
maps have config values adjusted in "map_configs".
* New salt flats base by [Darth Rogue from
SOA](http://soldiersofanarchy.net/).
* **IMPLEMENTED STATIC MISSIONS (initial version). "saltflats" is
currently the only static mission for Altis ONLY. However, it shouldn't
be too difficult to export it to other maps (once positions have been
adjusted). **
* Fixed a couple of outdated/inaccurate function documentation comments.
* **FINALLY REMOVED THE Default Value "-1" PARAMS RPT SPAM. I FOUND IT.
YESSSSS**
* Fixed fn_CleanUp producing debug logs even with debug disabled.
* Fixed the CleanUp list not Cleaning Up after itself (hah!).
* Added diag_tickTime and DMS_Version to debug logs.
* You can now define a custom function for DMS_FillCrate. It will be
passed params from _lootValues select 0. ** I haven't tested this at
all. Just keep that in mind ;) **
* You can now manually define mission spawning locations into an array,
and that array will be used to find a location. Each location will still
be checked for validity, and if no valid positions are found from the
list, a random one is then generated using the normal method. ** I
didn't test this part at all either :P **
* fn_FindSafePos should be even more efficient now, and even more
controllable.
* Quite a few new functions; most notably: fn_GroupReinforcementsManager
* fn_GroupReinforcementsManager is used by static missions to provide
reinforcements for AI once they fall below a certain threshold (and/or
any other parameters you provide). Make sure to check out the function
documentation and give any suggestions for new reinforcement types!
* New function "DMS_fnc_ImportFromM3E_Static" will simply import a base
from the provided file (under static). No conversion to relative
position or anything. Simply spawning, positioning, and disabling
simulation.
* Removed the check for being outside map edges from fn_isValidPosition.
* "hardcore" AI will now be even more difficult ;)
2015-10-31 02:18:58 +00:00
DMS_CleanUpList = [];
2016-03-25 23:09:41 +00:00
DMS_Version = getText (configFile >> "CfgPatches" >> "a3_dms" >> "a3_DMS_version");
2015-12-24 19:45:20 +00:00
2015-09-20 20:26:08 +00:00
Readme changes, new debug fnc, fixes, tweaks
Created disclaimer for DMS. Now mentioning that HC for DMS isn't that
good.
Some structure stuff in readme (let's see if it works lol)
* **NEW CONFIG VALUE: DMS_Use_Map_Config**
* You can now overwrite "main config values" with map-specific config
values located in the new "map_configs" folder. This should allow you to
use one DMS PBO if you have multiple servers with different maps.
Included examples for Altis, Bornholm, Esseker, and Tavi (Taviana).
* Because of the above implementation, DMS by default will not include
the salt flats blacklist for findSafePos. In addition, it is
preconfigured to the hilly terrains in Esseker and Taviana, as well as
reducing all of the blacklist distances due to the smaller map size in
Esseker.
* Created new function "DMS_fnc_DebugLog". All DMS files (that produced
debug logs) have been changed, including mission files. However,
updating them is not important (and completely pointless if you don't
even use DMS_DEBUG).
* Fixed a few locations where it said "sized" instead of "seized".
Thanks to [icomrade](https://github.com/icomrade) for pointing them out.
* DMS now utilizes the "ARMA_LOG" DLL (if it exists) by infiSTAR to
produce debug logs (if enabled). All debug logs now also include server
uptime (in seconds) and server FPS.
* The FSM no longer produces debug logs.
* AI Locality manager will now run every minute.
* Debug logs for "DMS_fnc_MissionsMonitor" will only output the mission
name and the position, instead of all of the parameters.
* "DMS_fnc_IsNearWater" will now check the provided position itself for
water.
* "DMS_fnc_IsValidPosition" will now do a surfaceNormal check within a 5
meter radius of the provided position as well.
* "_customGearSet" should now actually work for
"DMS_fnc_SpawnAISoldier", and the function title comment has been
updated for the slightly tweaked syntax.
2015-10-10 01:35:07 +00:00
//Load main config
2016-05-07 03:44:48 +00:00
CALLFILE("\x\addons\dms\config.sqf");
2015-09-20 20:26:08 +00:00
2017-02-24 00:50:14 +00:00
// Let's be honest - you know it's gonna happen.
if (isNil "DMS_AI_NamingType") then
{
for "_i" from 0 to 99 do
{
diag_log format["!!!!!!!!MAKE SURE YOUR DMS CONFIG IS UPDATED!!!!!"];
};
DMS_ConfigLoaded = nil;
};
2015-09-20 20:26:08 +00:00
Readme changes, new debug fnc, fixes, tweaks
Created disclaimer for DMS. Now mentioning that HC for DMS isn't that
good.
Some structure stuff in readme (let's see if it works lol)
* **NEW CONFIG VALUE: DMS_Use_Map_Config**
* You can now overwrite "main config values" with map-specific config
values located in the new "map_configs" folder. This should allow you to
use one DMS PBO if you have multiple servers with different maps.
Included examples for Altis, Bornholm, Esseker, and Tavi (Taviana).
* Because of the above implementation, DMS by default will not include
the salt flats blacklist for findSafePos. In addition, it is
preconfigured to the hilly terrains in Esseker and Taviana, as well as
reducing all of the blacklist distances due to the smaller map size in
Esseker.
* Created new function "DMS_fnc_DebugLog". All DMS files (that produced
debug logs) have been changed, including mission files. However,
updating them is not important (and completely pointless if you don't
even use DMS_DEBUG).
* Fixed a few locations where it said "sized" instead of "seized".
Thanks to [icomrade](https://github.com/icomrade) for pointing them out.
* DMS now utilizes the "ARMA_LOG" DLL (if it exists) by infiSTAR to
produce debug logs (if enabled). All debug logs now also include server
uptime (in seconds) and server FPS.
* The FSM no longer produces debug logs.
* AI Locality manager will now run every minute.
* Debug logs for "DMS_fnc_MissionsMonitor" will only output the mission
name and the position, instead of all of the parameters.
* "DMS_fnc_IsNearWater" will now check the provided position itself for
water.
* "DMS_fnc_IsValidPosition" will now do a surfaceNormal check within a 5
meter radius of the provided position as well.
* "_customGearSet" should now actually work for
"DMS_fnc_SpawnAISoldier", and the function title comment has been
updated for the slightly tweaked syntax.
2015-10-10 01:35:07 +00:00
//Load map-specific configs. Should make it easier for people with multiple servers/maps. One PBO to rule them all...
if (DMS_Use_Map_Config) then
{
2016-05-07 03:44:48 +00:00
private _file = preprocessFileLineNumbers (format ["\x\addons\dms\map_configs\%1_config.sqf",toLower worldName]);
if (_file isEqualTo "") then
{
'You need to set the config value "DMS_Use_Map_Config" to false!' call DMS_fnc_DebugLog;
}
else
{
call compile _file;
};
Readme changes, new debug fnc, fixes, tweaks
Created disclaimer for DMS. Now mentioning that HC for DMS isn't that
good.
Some structure stuff in readme (let's see if it works lol)
* **NEW CONFIG VALUE: DMS_Use_Map_Config**
* You can now overwrite "main config values" with map-specific config
values located in the new "map_configs" folder. This should allow you to
use one DMS PBO if you have multiple servers with different maps.
Included examples for Altis, Bornholm, Esseker, and Tavi (Taviana).
* Because of the above implementation, DMS by default will not include
the salt flats blacklist for findSafePos. In addition, it is
preconfigured to the hilly terrains in Esseker and Taviana, as well as
reducing all of the blacklist distances due to the smaller map size in
Esseker.
* Created new function "DMS_fnc_DebugLog". All DMS files (that produced
debug logs) have been changed, including mission files. However,
updating them is not important (and completely pointless if you don't
even use DMS_DEBUG).
* Fixed a few locations where it said "sized" instead of "seized".
Thanks to [icomrade](https://github.com/icomrade) for pointing them out.
* DMS now utilizes the "ARMA_LOG" DLL (if it exists) by infiSTAR to
produce debug logs (if enabled). All debug logs now also include server
uptime (in seconds) and server FPS.
* The FSM no longer produces debug logs.
* AI Locality manager will now run every minute.
* Debug logs for "DMS_fnc_MissionsMonitor" will only output the mission
name and the position, instead of all of the parameters.
* "DMS_fnc_IsNearWater" will now check the provided position itself for
water.
* "DMS_fnc_IsValidPosition" will now do a surfaceNormal check within a 5
meter radius of the provided position as well.
* "_customGearSet" should now actually work for
"DMS_fnc_SpawnAISoldier", and the function title comment has been
updated for the slightly tweaked syntax.
2015-10-10 01:35:07 +00:00
};
2016-01-07 00:38:55 +00:00
DMS_MagRange = DMS_MaximumMagCount - DMS_MinimumMagCount;
2015-09-20 20:26:08 +00:00
/*
Original Functions from
http://maca134.co.uk/portfolio/m3editor-arma-3-map-editor/
Slightly modified by eraser1
*/
2016-05-07 03:44:48 +00:00
M3E_fnc_getCenter = DMS_fnc_GetCenter;
2015-09-20 20:26:08 +00:00
2016-05-07 03:44:48 +00:00
M3E_fnc_subArr = DMS_fnc_SubArr;
I know... it's been over a week... gimme a break
#### October 17, 2015 (2:30 PM CST-America):
* **NEW CONFIG VALUES**:
|DMS_TimeToFirstMission|
|DMS_ShowDifficultyColorLegend|
|DMS_TerritoryNearBlacklist|
|DMS_MinSurfaceNormal| (Used to be DMS_MaxSurfaceNormal, simply renamed)
|DMS_ai_launchers_per_group|
* **UPDATING ALL OF YOUR MISSION FILES IS HIGHLY RECOMMENDED UNLESS YOU
KNOW WHAT YOU'RE DOING**
* RENAMED "DMS_MaxSurfaceNormal" to "DMS_MinSurfaceNormal". I must have
been very tired when I named it...
* DMS_MinSurfaceNormal is now 0.9 by default, but will be 0.95 for Altis
and Bornholm (since they're relatively large/flat maps). Esseker is
still 0.85. If you want to convert DMS_MinSurfaceNormal to degrees, you
would take the arc-cosine of the surfaceNormal, and that will give you
the degrees from horizontal. For example, arccos(0.9) is about 25
degrees. Google: "arccos(0.9) in degrees"
* Tweaked and rebalanced "DMS_BanditMissionTypes". Most of the spawn
chances are the same, they're just reduced in order to prevent the
creation of arrays that are far larger than they need to be.
* You can now manually define how long it takes for the first mission to
spawn after a restart.
* DMS will now by default create markers on the bottom left of the map
to show which colors correspond to which difficulty. It isn't very
pretty, but it gets the point across.
* DMS will now manually calculate the center of the map and its radius,
if it isn't preconfigured by DMS.
* You can now specify the vehicles to spawn for missions: "bandits",
"cardealer", "construction", "donthasslethehoff", and "thieves".
* You can now specify the spawning location of any mission (and whether
or not to use an alternative location if the provided location is
invalid). This will allow for easy integration of DMS into admin tools.
* Added support for scripts to be executed on mission completion or
mission failure (this will allow you to have "multi-part" missions,
where you would simply spawn the next part of the mission if the
previous is completed).
* Restructured DMS_DEBUG from the previous patch in favor of a more
"optimized" method.
* DMS_fnc_findSafePos is completely overhauled; DMS no longer uses
"BIS_fnc_findSafePos". It also now throttles minSurfaceNormal on
repeated failure. You can now determine whether or not the mission
should spawn on water (however, I don't suggest you use this function
for water spawns yet).
* You can also now define a minimum distance from other territories for
missions.
* DMS_fnc_IsValidPosition will now check for water depth if the provided
position is meant to be checked as a "water spawn". It will now also
check for nearby missions from A3XAI or VEMF (untested).
* DMS_fnc_IsValidPosition now checks whether or not the position is
outside of the map borders.
* DMS_fnc_SelectOffsetPos will now return the 3rd element of the
provided position as-is.
* You can now have multiple AI within a group with a launcher.
* AI now have a 5-second godmode after spawning.
* You can now spawn a crate using ASL pos. DMS_fnc_SpawnCrate will also
make sure that the provided classname is valid.
* Just like SpawnCrate, "DMS_fnc_SpawnNonPersistentVehicle" and
"DMS_fnc_SpawnPersistentVehicle" will now make sure that the provided
classname is valid.
* "DMS_fnc_SpawnPersistentVehicle" now supports ASL spawning.
* Added support for [Rod Serling's](https://github.com/Rod-Serling) AVS.
* General optimization.
2015-10-17 19:39:07 +00:00
2016-05-15 18:55:18 +00:00
// Because I fucked up the name on first implementation and don't want to mess anybody up who didn't realize to change every occurence of "DMS_MaxSurfaceNormal" to "DMS_MinSurfaceNormal".
DMS_MaxSurfaceNormal = DMS_MinSurfaceNormal;
Static Missions! And MORE!
* ** NEW CONFIG VALUES:
|DMS_MaxStaticMissions|
|DMS_TimeToFirstStaticMission|
|DMS_TimeBetweenStaticMissions|
|DMS_StaticMissionTimeOut|
|DMS_StaticMissionTimeoutResetRange|
|DMS_StaticMinPlayerDistance|
|DMS_UsePredefinedMissionLocations|
|DMS_PredefinedMissionLocations|
|DMS_MinDistFromWestBorder|
|DMS_MinDistFromEastBorder|
|DMS_MinDistFromSouthBorder|
|DMS_MinDistFromNorthBorder|
|DMS_StaticMissionTypes|
**
* Added new value "DMS_Version".
* ** "DMS_fnc_SpawnAIStatic" is now "DMS_fnc_SpawnAIStaticMG";
donthasslethehoff, mercbase, and testmission have been updated with the
new names**
* DMS will now check to make sure that marker colors passed to
fn_CreateMarker are valid marker colors.
* You can now control how far away from each border a mission will spawn
(each border is separate: west, east, south, north). All "supported"
maps have config values adjusted in "map_configs".
* New salt flats base by [Darth Rogue from
SOA](http://soldiersofanarchy.net/).
* **IMPLEMENTED STATIC MISSIONS (initial version). "saltflats" is
currently the only static mission for Altis ONLY. However, it shouldn't
be too difficult to export it to other maps (once positions have been
adjusted). **
* Fixed a couple of outdated/inaccurate function documentation comments.
* **FINALLY REMOVED THE Default Value "-1" PARAMS RPT SPAM. I FOUND IT.
YESSSSS**
* Fixed fn_CleanUp producing debug logs even with debug disabled.
* Fixed the CleanUp list not Cleaning Up after itself (hah!).
* Added diag_tickTime and DMS_Version to debug logs.
* You can now define a custom function for DMS_FillCrate. It will be
passed params from _lootValues select 0. ** I haven't tested this at
all. Just keep that in mind ;) **
* You can now manually define mission spawning locations into an array,
and that array will be used to find a location. Each location will still
be checked for validity, and if no valid positions are found from the
list, a random one is then generated using the normal method. ** I
didn't test this part at all either :P **
* fn_FindSafePos should be even more efficient now, and even more
controllable.
* Quite a few new functions; most notably: fn_GroupReinforcementsManager
* fn_GroupReinforcementsManager is used by static missions to provide
reinforcements for AI once they fall below a certain threshold (and/or
any other parameters you provide). Make sure to check out the function
documentation and give any suggestions for new reinforcement types!
* New function "DMS_fnc_ImportFromM3E_Static" will simply import a base
from the provided file (under static). No conversion to relative
position or anything. Simply spawning, positioning, and disabling
simulation.
* Removed the check for being outside map edges from fn_isValidPosition.
* "hardcore" AI will now be even more difficult ;)
2015-10-31 02:18:58 +00:00
2016-01-07 00:38:55 +00:00
DMS_AttemptsUntilThrottle = DMS_AttemptsUntilThrottle + 1;
2016-02-07 20:24:35 +00:00
2016-03-25 23:09:41 +00:00
DMS_HelisToClean = [];
DMS_HeliParatrooper_Arr = [];
2016-05-22 05:05:16 +00:00
DMS_FrozenAIGroups = [];
2016-03-25 23:09:41 +00:00
2016-02-07 20:24:35 +00:00
2016-06-07 03:47:15 +00:00
DMS_CLIENT_fnc_spawnDynamicText = compileFinal
("
if (isNil 'DMS_CLIENT_DynamicText_inProgress') then
{
DMS_CLIENT_DynamicText_inProgress = true;
_this spawn
{
[
_this,
0,
safeZoneY,
"+str DMS_dynamicText_Duration+",
"+str DMS_dynamicText_FadeTime+",
0,
24358
] call BIS_fnc_dynamicText;
DMS_CLIENT_DynamicText_inProgress = nil;
};
}
else
{
["+str (DMS_dynamicText_Duration+DMS_dynamicText_FadeTime) +",{_this call DMS_CLIENT_fnc_spawnDynamicText},_this,false,false] call ExileClient_system_thread_addTask;
};
");
DMS_CLIENT_fnc_spawnTextTiles = compileFinal
("
if (isNil 'DMS_CLIENT_TextTiles_inProgress') then
{
DMS_CLIENT_TextTiles_inProgress = true;
_this spawn
{
[
parseText _this,
[
0,
safeZoneY,
1,
1
],
[10,10],
"+str DMS_textTiles_Duration+",
"+str DMS_textTiles_FadeTime+",
0
] call BIS_fnc_textTiles;
DMS_CLIENT_TextTiles_inProgress = nil;
};
}
else
{
["+str (DMS_textTiles_Duration+DMS_textTiles_FadeTime) +",{_this call DMS_CLIENT_fnc_spawnTextTiles},_this,false,false] call ExileClient_system_thread_addTask;
};
");
DMS_CLIENT_fnc_hintSilent = compileFinal "hintSilent parsetext format['%1',_this];";
2016-02-07 20:24:35 +00:00
// Initialize mission variables...
2016-05-07 03:44:48 +00:00
CALLFILE("\x\addons\dms\missions\static_init.sqf");
CALLFILE("\x\addons\dms\missions\mission_init.sqf");
2017-02-24 00:50:14 +00:00
{
private _mission = _x select 0;
missionNamespace setVariable
[
format["DMS_SpecialMission_%1",_mission],
compileFinal preprocessFileLineNumbers (format ["\x\addons\DMS\missions\special\%1.sqf",_mission])
];
missionNamespace setVariable [format["DMS_SpecialMissionSpawnCount_%1",_mission], 0];
missionNamespace setVariable [format["DMS_SpecialMissionLastSpawn_%1",_mission], 0];
} forEach DMS_SpecialMissions;