Major UI Improvements, Fixes, Improved readme

* **NEW CONFIG VALUES**:
|DMS_Show_Kill_Poptabs_Notification|
|DMS_Show_Kill_Respect_Notification|
|DMS_dynamicText_Duration|
|DMS_dynamicText_FadeTime|
|DMS_dynamicText_Title_Size|
|DMS_dynamicText_Title_Font|
|DMS_dynamicText_Message_Color|
|DMS_dynamicText_Message_Size|
|DMS_dynamicText_Message_Font|
|DMS_standardHint_Title_Size|
|DMS_standardHint_Title_Font|
|DMS_standardHint_Message_Color|
|DMS_standardHint_Message_Size|
|DMS_standardHint_Message_Font|
|DMS_textTiles_Duration|
|DMS_textTiles_FadeTime|
|DMS_textTiles_Title_Size|
|DMS_textTiles_Title_Font|
|DMS_textTiles_Message_Color|
|DMS_textTiles_Message_Size|
|DMS_textTiles_Message_Font|
* "DMS_PlayerNotificationTypes" has been adjusted to include
"systemChatRequest" and the brand new "textTilesRequest". **NOTE:** Due
to the way "text tiles" work, a player can only have one on his screen
at a time. As a result, if another text tile is created while the
mission message is up, the message will immediately disappear to display
the new text tile. Currently, the "Frag Messages" (the ones that say
"Player Kill  +100") use text tiles. I don't think it should be a major
issue (especially if you use "systemChatRequest", so the player can just
scroll up), but if I get reports of it being stupid, I will default to
"dynamicTextRequest", which should also look pretty damn nice.
* These changes should make it much easier for people to use DMS
notification functions for other purposes.
* Fixed AI waypoints - the AI should now properly circle the objective
at the proper radius.
* Tweaked "DMS_AI_WP_Radius_moderate" and "DMS_AI_WP_Radius_difficult"
(reduced the radii). Due to the AI pathing fix.
* Fixed a couple typos in "DMS_fnc_SpawnAISoldier". "_customGearSet"
should work now (although I'm fairly certain nobody uses it since nobody
ever complained :P )
* Improved "DMS_fnc_SpawnNonPersistentVehicle"; Vehicles should no
longer spawn jumbled up in most cases (like cardealer). Also, it's
updated to the latest Exile methods to ensure that vehicles have no
nightvision/thermal if configured to do so in Exile configs. Also added
the "MPKilled" EH used by Exile for non-persistent (persistent vehicles
already had it).
* You can now choose whether or not you want to display the poptabs or
respect kill messages when killing an AI with
"DMS_Show_Kill_Poptabs_Notification" and
"DMS_Show_Kill_Respect_Notification". Both are enabled by default.
* Fixed typos in the "OnKilled" EH (didn't really affect anything)
* Fixed cases when "currentMuzzle" would return a number. Thanks to
[azmodii](https://github.com/azmodii) for the reminder.
* Optimized the "AI share info" function in "OnKilled"
This commit is contained in:
eraser1 2015-10-08 19:16:48 -05:00
parent a1f4933b4b
commit ed45b5d55c
11 changed files with 226 additions and 68 deletions

View File

@ -88,13 +88,41 @@ DMS_DEBUG = false;
DMS_MinServerFPS = 5; // Minimum server FPS for missions to start
/*Mission notification settings*/
DMS_PlayerNotificationTypes = [ // Notification types. Supported values are: ["dynamicTextRequest", "standardHintRequest", "systemChatRequest"]
"dynamicTextRequest",
//"standardHintRequest",
"systemChatRequest"
DMS_PlayerNotificationTypes = [ // Notification types. Supported values are: ["dynamicTextRequest", "standardHintRequest", "systemChatRequest", "textTilesRequest"]
//"dynamicTextRequest", // You should use either "dynamicTextRequest" or "textTilesRequest", and I think "textTilesRequest" looks better.
//"standardHintRequest", // Hints are a bit wonky...
"textTilesRequest", // Keep in mind you can only have 1 "text tile" message up at a time, so the message will disappear if the player gets a kill or something while the message is shown.
"systemChatRequest" // Always nice to show in chat so that players can scroll up to read the info if they need to.
];
DMS_dynamicText_Size = 0.65; // Dynamic Text size for "dynamicTextRequest" notification type.
DMS_dynamicText_Color = "#FFFFFF"; // Dynamic Text color for "dynamicTextRequest" notification type.
/*Dynamic Text Notification Settings*/
DMS_dynamicText_Duration = 7; // Number of seconds that the message will last on the screen.
DMS_dynamicText_FadeTime = 1.5; // Number of seconds that the message will fade in/out (does not affect duration).
DMS_dynamicText_Title_Size = 1.2; // Size for Client Dynamic Text mission titles.
DMS_dynamicText_Title_Font = "puristaMedium"; // Font for Client Dynamic Text mission titles.
DMS_dynamicText_Message_Color = "#FFFFFF"; // Dynamic Text color for "dynamicTextRequest" client notification type.
DMS_dynamicText_Message_Size = 0.65; // Dynamic Text size for "dynamicTextRequest" client notification type.
DMS_dynamicText_Message_Font = "OrbitronMedium"; // Dynamic Text font for "dynamicTextRequest" client notification type.
/*Dynamic Text Notification Settings*/
/*Standard Hint Notification Settings*/
DMS_standardHint_Title_Size = 2.5; // Size for Client Standard Hint mission titles.
DMS_standardHint_Title_Font = "puristaMedium"; // Font for Client Standard Hint mission titles.
DMS_standardHint_Message_Color = "#FFFFFF"; // Standard Hint color for "standardHintRequest" client notification type.
DMS_standardHint_Message_Size = 1; // Standard Hint size for "standardHintRequest" client notification type.
DMS_standardHint_Message_Font = "OrbitronMedium"; // Standard Hint font for "standardHintRequest" client notification type.
/*Standard Hint Notification Settings*/
/*Text Tiles Notification Settings*/
DMS_textTiles_Duration = 7; // Number of seconds that the message will last on the screen.
DMS_textTiles_FadeTime = 1.5; // Number of seconds that the message will fade in/out (does not affect duration).
DMS_textTiles_Title_Size = 2.3; // Size for Client Text Tiles mission titles.
DMS_textTiles_Title_Font = "puristaMedium"; // Font for Client Text Tiles mission titles.
DMS_textTiles_Message_Color = "#FFFFFF"; // Text Tiles color for "textTilesRequest" client notification type.
DMS_textTiles_Message_Size = 1.25; // Text Tiles size for "textTilesRequest" client notification type.
DMS_textTiles_Message_Font = "OrbitronMedium"; // Text Tiles font for "textTilesRequest" client notification type.
/*Text Tiles Notification Settings*/
/*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
@ -125,6 +153,9 @@ DMS_DEBUG = false;
/* AI Settings */
DMS_Show_Kill_Poptabs_Notification = true; // Whether or not to show the poptabs gained/lost message on the player's screen when killing an AI. (It will still change the player's money, it just won't show the "Money Received" notification)
DMS_Show_Kill_Respect_Notification = true; // Whether or not to show the "Frag Message" on the player's screen when killing an AI. (It will still change the player's respect, it just won't show the "AI Killed" frag message)
DMS_Bandit_Soldier_MoneyGain = 50; // The amount of Poptabs gained for killing a bandit soldier
DMS_Bandit_Soldier_RepGain = 10; // The amount of Respect gained for killing a bandit soldier
DMS_Bandit_Static_MoneyGain = 75; // The amount of Poptabs gained for killing a bandit static gunner
@ -169,8 +200,8 @@ DMS_DEBUG = false;
DMS_ai_skill_hardcore = [["aimingAccuracy",1.00],["aimingShake",1.00],["aimingSpeed",1.00],["spotDistance",1.00],["spotTime",1.00],["courage",1.00],["reloadSpeed",1.00],["commanding",1.00],["general",1.00]]; // Hardcore
DMS_ai_skill_random = ["hardcore","difficult","difficult","difficult","moderate","moderate","moderate","moderate","easy","easy"]; // Skill frequencies for "random" AI skills | Default: 10% hardcore, 30% difficult, 40% moderate, and 20% easy
DMS_AI_WP_Radius_easy = 20; // Waypoint radius for "easy" AI
DMS_AI_WP_Radius_moderate = 40; // Waypoint radius for "moderate" AI
DMS_AI_WP_Radius_difficult = 55; // Waypoint radius for "difficult" AI
DMS_AI_WP_Radius_moderate = 30; // Waypoint radius for "moderate" AI
DMS_AI_WP_Radius_difficult = 50; // Waypoint radius for "difficult" AI
DMS_AI_WP_Radius_hardcore = 75; // Waypoint radius for "hardcore" AI
DMS_AI_WP_Radius_base = 5; // Waypoint radius for AI in bases

View File

@ -28,18 +28,37 @@ if (DMS_DynamicMission) then
{
DMS_AttemptsUntilThrottle = DMS_AttemptsUntilThrottle + 1;
DMS_CLIENT_fnc_spawnDynamicText =
{
DMS_CLIENT_fnc_spawnDynamicText = compileFinal
("
[
_this,
0,
safeZoneY,
"+str DMS_dynamicText_Duration+",
"+str DMS_dynamicText_FadeTime+",
0,
24358
] spawn BIS_fnc_dynamicText;
");
publicVariable "DMS_CLIENT_fnc_spawnDynamicText";
DMS_CLIENT_fnc_spawnTextTiles = compileFinal
("
[
parseText _this,
[
_this,
0,
safeZoneY,
10,
1,
1
] spawn BIS_fnc_dynamicText;
};
publicVariable "DMS_CLIENT_fnc_spawnDynamicText";
],
[10,10],
"+str DMS_textTiles_Duration+",
"+str DMS_textTiles_FadeTime+",
0
] spawn BIS_fnc_textTiles;
");
publicVariable "DMS_CLIENT_fnc_spawnTextTiles";
call compileFinal preprocessFileLineNumbers "\x\addons\dms\missions\mission_init.sqf";
execFSM "\x\addons\dms\FSM\missions.fsm";

View File

@ -3,11 +3,15 @@
Created by eraser1
Usage:
_message call DMS_fnc_BroadcastMissionStatus;
[
_messageTitle,
[
_messageColor,
_message
]
] call DMS_fnc_BroadcastMissionStatus;
Requires "DMS_PlayerNotificationTypes".
Notification type "dynamicTextRequest" requires "DMS_dynamicText_Size" and "DMS_dynamicText_Color".
Returns nothing
*/
@ -52,20 +56,55 @@ if ((typeName _message) != "STRING") then
case "standardhintrequest":
{
[_x, [format ["<t color='%1' size='1.25'>%2</t><br/> %3",_titleColor,_missionName,_message]]] call ExileServer_system_network_send_broadcast;
[
_x,
[
format
[
"<t color='%1' size='%2' font='%3'>%4</t><br/><t color='%5' size='%6' font='%7'>%8</t>",
_titleColor,
DMS_standardHint_Title_Size,
DMS_standardHint_Title_Font,
_missionName,
DMS_standardHint_Message_Color,
DMS_standardHint_Message_Size,
DMS_standardHint_Message_Font,
_message
]
]
] call ExileServer_system_network_send_broadcast;
};
case "dynamictextrequest":
{
(format
[
'<t color="%1" size="1" >%2</t><br/><t color="%3" size="%4" >%5</t>',
[
"<t color='%1' size='%2' font='%3'>%4</t><br/><t color='%5' size='%6' font='%7'>%8</t>",
_titleColor,
DMS_dynamicText_Title_Size,
DMS_dynamicText_Title_Font,
_missionName,
DMS_dynamicText_Color,
DMS_dynamicText_Size,_message
])
remoteExecCall ["DMS_CLIENT_fnc_spawnDynamicText", -2];
DMS_dynamicText_Message_Color,
DMS_dynamicText_Message_Size,
DMS_dynamicText_Message_Font,
_message
]) remoteExecCall ["DMS_CLIENT_fnc_spawnDynamicText", -2];
};
case "texttilesrequest":
{
(format
[
"<t color='%1' size='%2' font='%3' align='center'>%4</t><br/><t color='%5' size='%6' font='%7' align='center'>%8</t>",
_titleColor,
DMS_textTiles_Title_Size,
DMS_textTiles_Title_Font,
_missionName,
DMS_textTiles_Message_Color,
DMS_textTiles_Message_Size,
DMS_textTiles_Message_Font,
_message
]) remoteExecCall ["DMS_CLIENT_fnc_spawnTextTiles", -2];
};
default { diag_log format ["DMS ERROR :: Unsupported Notification Type in DMS_PlayerNotificationTypes: %1 | Calling parameters: %2",_x,_this]; };

View File

@ -38,11 +38,11 @@ _removeAll =
{_this unlinkItem _x;} forEach (assignedItems _this);
{_this removeItem _x;} forEach (items _this);
removeAllItemsWithMagazines _unit;
removeHeadgear _unit;
removeUniform _unit;
removeVest _unit;
removeBackpackGlobal _unit;
removeAllItemsWithMagazines _this;
removeHeadgear _this;
removeUniform _this;
removeVest _this;
removeBackpackGlobal _this;
};
moveOut _unit;
@ -283,15 +283,20 @@ if (isPlayer _killer) then
{
_revealAmount = 4.0;
_silencer = _playerObj weaponAccessories currentMuzzle _playerObj select 0;
if (!isNil "_silencer" && {_silencer != ""}) then
_muzzle = currentMuzzle _playerObj;
if ((typeName _muzzle)=="STRING") then
{
_revealAmount = 2.0;
_silencer = _playerObj weaponAccessories _muzzle select 0;
if (!isNil "_silencer" && {_silencer != ""}) then
{
_revealAmount = 2.0;
};
};
{
if ((alive _x) && {!(isPlayer _x) && {((getPosWorld _x) distance2D (getPosWorld _unit)) <= DMS_ai_share_info_distance}}) then
if ((alive _x) && {!(isPlayer _x) && {(_x distance2D _unit) <= DMS_ai_share_info_distance}}) then
{
_x reveal [_killer, _revealAmount max (_x knowsAbout _playerObj)];
};
@ -325,12 +330,12 @@ if ((!isNull _playerObj) && {((getPlayerUID _playerObj) != "") && {_playerObj is
_money = (_money + _moneyChange) max 0;
_playerObj setVariable ["ExileMoney",_money];
// Change message for players when they're actually LOSING poptabs
_msgType = "moneyReceivedRequest";
_msgParams = [str _money, format ["killing a %1 AI",_type]];
if (_moneyChange<0) then
{
// Change message for players when they're actually LOSING poptabs
_msgType = "notificationRequest";
_msgParams = ["Whoops",[format ["Lost %1 poptabs from running over a %2 AI!",abs _moneyChange,_type]]];
@ -340,8 +345,21 @@ if ((!isNull _playerObj) && {((getPlayerUID _playerObj) != "") && {_playerObj is
ExileClientPlayerMoney = nil;
};
// Send notification and update client's money stats
[_playerObj, _msgType, _msgParams] call ExileServer_system_network_send_to;
if (DMS_Show_Kill_Poptabs_Notification) then
{
// Send notification and update client's money stats
[_playerObj, _msgType, _msgParams] call ExileServer_system_network_send_to;
}
else
{
// Player's money will already be updated for negative values, so let's not create unnecessary network traffic by sending another PVC
if (_moneyChange>0) then
{
ExileClientPlayerMoney = _money;
(owner _playerObj) publicVariableClient "ExileClientPlayerMoney";
ExileClientPlayerMoney = nil;
};
};
};
if (_repChange!=0) then
@ -350,8 +368,11 @@ if ((!isNull _playerObj) && {((getPlayerUID _playerObj) != "") && {_playerObj is
_respect = _respect + _repChange;
_playerObj setVariable ["ExileScore",_respect];
// Send frag message
[_playerObj, "showFragRequest", [ [[format ["%1 AI KILL",toUpper _type],_repChange]] ] ] call ExileServer_system_network_send_to;
if (DMS_Show_Kill_Respect_Notification) then
{
// Send frag message
[_playerObj, "showFragRequest", [ [[format ["%1 AI KILL",toUpper _type],_repChange]] ] ] call ExileServer_system_network_send_to;
};
// Send updated respect value to client
ExileClientPlayerScore = _respect;

View File

@ -25,6 +25,7 @@ _OK = params
if (!_OK) exitWith
{
diag_log format ["DMS ERROR :: Calling DMS_fnc_SelectOffsetPos with invalid parameters: %1",_this];
[0,0,0]
};
_npos = [(_pos select 0)+(sin(_dir)*_dis),(_pos select 1)+(cos(_dir)*_dis),0];

View File

@ -55,10 +55,10 @@ for "_i" from count (waypoints _group) to 1 step -1 do
// Add waypoints around the center position.
for "_i" from 0 to 359 step 45 do
{
_npos = [(_pos select 0) + (sin(_i)*_radius), (_pos select 1) + (cos(_i)*_radius)];
_wp = _group addWaypoint [_npos,(_radius/5)];
_npos = [_pos,_radius,_i] call DMS_fnc_SelectOffsetPos;
_wp = _group addWaypoint [_npos,5];
_wp setWaypointType "MOVE";
};
_wp = _group addWaypoint [_pos,_radius];
_wp = _group addWaypoint [[_pos,_radius,0] call DMS_fnc_SelectOffsetPos,0];
_wp setWaypointType "CYCLE";

View File

@ -12,7 +12,7 @@
_side, // "bandit","hero", etc.
_type, // Type of AI: "soldier","static","vehicle","heli", etc.
_customGearSet // OPTIONAL: Manually defined AI gear.
] call DMS_fnc_SpawnAIGroup;
] call DMS_fnc_SpawnAISoldier;
Usage for _customGearSet:
[
@ -32,7 +32,7 @@
Returns AI Unit
*/
private ["_OK", "_useCustomGear", "_unarmed", "_class", "_customGear", "_type", "_unit", "_side", "_nighttime", "_weapon", "_muzzle", "_suppressor", "_pistols", "_pistol", "_customGearSet", "_helmet", "_uniform", "_vest", "_backpack", "_launcher", "_magazines", "_weaponAttachments", "_pistolAttachments", "_items", "_difficulty", "_skillArray"];
private ["_OK", "_useCustomGear", "_unarmed", "_class", "_type", "_unit", "_side", "_nighttime", "_weapon", "_muzzle", "_suppressor", "_pistols", "_pistol", "_customGearSet", "_helmet", "_uniform", "_vest", "_backpack", "_launcher", "_magazines", "_weaponAttachments", "_pistolAttachments", "_items", "_difficulty", "_skillArray"];
_OK = params
[
@ -55,7 +55,7 @@ else
{
if ((_class == "custom") && {((count _this)>6)}) then
{
_customGear = _this select 5;
_customGearSet = _this select 5;
_useCustomGear = true;
};
};

View File

@ -33,11 +33,11 @@ if (!_OK) exitWith
};
_vehpos = [];
_maxDistance = 10;
_maxDistance = 5;
while{count _vehpos < 1} do
{
_vehpos = _position findEmptyPosition [20,_maxDistance,_vehicleClass];
_vehpos = _position findEmptyPosition [0,_maxDistance,_vehicleClass];
_maxDistance = (_maxDistance + 5);
};
@ -50,13 +50,27 @@ clearItemCargoGlobal _vehObj;
clearMagazineCargoGlobal _vehObj;
clearWeaponCargoGlobal _vehObj;
if (_className isKindOf "I_UGV_01_F") then
{
createVehicleCrew _vehObj;
};
if (getNumber (configFile >> "CfgSettings" >> "VehicleSpawn" >> "nightVision") isEqualTo 0) then
{
_vehObj disableNVGEquipment true;
};
if (getNumber (configFile >> "CfgSettings" >> "VehicleSpawn" >> "thermalVision") isEqualTo 0) then
{
_vehObj disableTIEquipment true;
};
_vehObj setFuel (0.75+(random 0.25));
_vehObj setDir (random 360);
_vehObj setPosATL _vehpos;
_vehObj setVectorUp (surfaceNormal _vehpos);
_vehObj setVariable ["ExileIsPersistent", false];
_vehObj addEventHandler ["GetIn", { _this call ExileServer_object_vehicle_event_onGetIn}];
_vehObj addMPEventHandler ["MPKilled", { if !(isServer) exitWith {}; _this call ExileServer_object_vehicle_event_onMPKilled;}];
_vehObj addEventHandler ["GetIn", {_this call ExileServer_object_vehicle_event_onGetIn}];
if (_vehObj isKindOf "Helicopter") then
{
_vehObj addEventHandler ["RopeAttach",

View File

@ -78,9 +78,8 @@ try
_vehObj = [_vehicleClass,_pos] call DMS_fnc_SpawnNonPersistentVehicle;
_vehObj setPosATL _pos;
// Set up EHs
// Save vehicle on exit.
_vehObj addEventHandler ["GetOut", { _this call ExileServer_object_vehicle_event_onGetOut}];
_vehObj addMPEventHandler ["MPKilled", { _this call ExileServer_object_vehicle_event_onMPKilled}];
// Set up vars
_vehObj setVariable ["ExileIsPersistent", true];

Binary file not shown.

View File

@ -4,14 +4,10 @@ See also: http://www.exilemod.com/topic/61-dms-defents-mission-system/?do=findCo
## To install:
Put the pre-packed PBO in your ```@ExileServer\addons\``` directory. It should be alongside ```exile_server``` and ```exile_server_config```.
### NOTE: [Also look at the first part of this comment](http://www.exilemod.com/topic/61-dms-defents-mission-system/?do=findComment&comment=920). This will solve a few issues that you may encounter.
If you are using Vilayer or some other GameServer hosting service, and/or the above step did not work, then create a new folder called @a3_dms in the root ArmA 3 folder, create a subfolder called "addons", and place the "a3_dms.pbo" in the "addons" subfolder. Then, edit your startup parameters/modline to include "@a3_dms". For example: ```-serverMod=@ExileServer;@a3_dms;```
If you are using infiSTAR and want to keep ```_CGM = true;```, then set ```_UMW = true;```, and add ```DMS_MissionMarkerCircle```, ```DMS_MissionMarkerDot``` to ```_aLocalM```,
so your ```_aLocalM``` would look like:
```
_aLocalM = ["DMS_MissionMarkerCircle","DMS_MissionMarkerDot"];
```
## infiSTAR:
If you are using infiSTAR and want to keep ```_CGM = true;```, then set ```_UMW = true;``` (the latest version of infiSTAR already has DMS markers whitelisted in ```_aLocalM```).
## Optional:
@ -20,15 +16,14 @@ so your ```_aLocalM``` would look like:
* Download the a3_dms folder
* Edit the config.sqf to your preferences.
* Pack the a3_dms folder with a PBO tool (**PBO Manager**, Eliteness, or Arma 3 Tools suite)
* Follow the "To install:" steps using the PBO you just created instead of the pre-packed one.
* Follow the ["To install:" steps](https://github.com/Defent/DMS_Exile#to-install) using the PBO you just created instead of the pre-packed one.
### ~~HEADLESS CLIENT:~~
![Warning](https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Achtung.svg/200px-Achtung.svg.png)
### HEADLESS CLIENT:
**Headless Client is currently broken in ArmA as of the 4th of September, do not use it as it WILL crash your server.**
**People have reported Headless Client working properly in ArmA v1.52**
~~Add this code to the TOP of your initPlayerLocal.sqf~~
Add this code to the TOP of your initPlayerLocal.sqf
```
if (!hasInterface && !isServer) then
@ -41,17 +36,56 @@ if (!hasInterface && !isServer) then
};
};
```
#### Thanks:
- [Defent](https://github.com/Defent) for creating Defent's Mission System.
- [eraser1](https://github.com/eraser1) for his constant codebase improvments.
## Credits:
### Authors:
- [Defent](https://github.com/Defent) from [NumenaDayZ](http://numenadayz.com/).
- [eraser1](https://github.com/eraser1) from [TrainwreckDayZ](http://www.trainwreckdayz.com/home).
### Thanks:
- [Zupa](https://github.com/Windmolders) for suggestions and coding help.
- [Nawuko](https://github.com/Nawuko) for catching a silly mistake :P
- [shaworth](https://github.com/shaworth) and [KawaiiPotato](https://github.com/KawaiiPotato) for making the README all nice and pretty :)
- Everbody's feedback on [the DMS thread on exile forums](http://www.exilemod.com/topic/61-dms-defents-mission-system/?do=findComment&comment=242)
- [maca134](http://maca134.co.uk/portfolio/m3editor-arma-3-map-editor/) for M3Editor Stuff
- Everbody's feedback on [the DMS thread on exile forums](http://www.exilemod.com/topic/61-dms-defents-mission-system/?do=findComment&comment=242)
## Changelog:
#### October 8, 2015 (7:00 PM CST-America):
* **NEW CONFIG VALUES**:
|DMS_Show_Kill_Poptabs_Notification|
|DMS_Show_Kill_Respect_Notification|
|DMS_dynamicText_Duration|
|DMS_dynamicText_FadeTime|
|DMS_dynamicText_Title_Size|
|DMS_dynamicText_Title_Font|
|DMS_dynamicText_Message_Color|
|DMS_dynamicText_Message_Size|
|DMS_dynamicText_Message_Font|
|DMS_standardHint_Title_Size|
|DMS_standardHint_Title_Font|
|DMS_standardHint_Message_Color|
|DMS_standardHint_Message_Size|
|DMS_standardHint_Message_Font|
|DMS_textTiles_Duration|
|DMS_textTiles_FadeTime|
|DMS_textTiles_Title_Size|
|DMS_textTiles_Title_Font|
|DMS_textTiles_Message_Color|
|DMS_textTiles_Message_Size|
|DMS_textTiles_Message_Font|
* "DMS_PlayerNotificationTypes" has been adjusted to include "systemChatRequest" and the brand new "textTilesRequest". **NOTE:** Due to the way "text tiles" work, a player can only have one on his screen at a time. As a result, if another text tile is created while the mission message is up, the message will immediately disappear to display the new text tile. Currently, the "Frag Messages" (the ones that say "Player Kill +100") use text tiles. I don't think it should be a major issue (especially if you use "systemChatRequest", so the player can just scroll up), but if I get reports of it being stupid, I will default to "dynamicTextRequest", which should also look pretty damn nice.
* These changes should make it much easier for people to use DMS notification functions for other purposes.
* Fixed AI waypoints - the AI should now properly circle the objective at the proper radius.
* Tweaked "DMS_AI_WP_Radius_moderate" and "DMS_AI_WP_Radius_difficult" (reduced the radii). Due to the AI pathing fix.
* Fixed a couple typos in "DMS_fnc_SpawnAISoldier". "_customGearSet" should work now (although I'm fairly certain nobody uses it since nobody ever complained :P )
* Improved "DMS_fnc_SpawnNonPersistentVehicle"; Vehicles should no longer spawn jumbled up in most cases (like cardealer). Also, it's updated to the latest Exile methods to ensure that vehicles have no nightvision/thermal if configured to do so in Exile configs. Also added the "MPKilled" EH used by Exile for non-persistent (persistent vehicles already had it).
* You can now choose whether or not you want to display the poptabs or respect kill messages when killing an AI with "DMS_Show_Kill_Poptabs_Notification" and "DMS_Show_Kill_Respect_Notification". Both are enabled by default.
* Fixed typos in the "OnKilled" EH (didn't really affect anything)
* Fixed cases when "currentMuzzle" would return a number. Thanks to [azmodii](https://github.com/azmodii) for the reminder.
* Optimized the "AI share info" function in "OnKilled"
#### October 4, 2015 (10:30 PM CST-America):
* **NEW CONFIG VALUES**: