Exile update!

This commit is contained in:
eraser1 2016-06-29 16:07:01 -05:00
parent 82cea05fb8
commit 3b75fd1a26
9 changed files with 272 additions and 175 deletions

View File

@ -4,7 +4,7 @@ class CfgPatches
{ {
units[] = {}; units[] = {};
weapons[] = {}; weapons[] = {};
a3_DMS_version = "June 27, 2016"; a3_DMS_version = "June 29, 2016";
requiredVersion = 1.36; requiredVersion = 1.36;
requiredAddons[] = {"exile_client","exile_server_config"}; requiredAddons[] = {"exile_client","exile_server_config"};
}; };

View File

@ -153,13 +153,22 @@ DMS_SpawnMissions_Scheduled = false; // Whether or not to spawn missions in a sc
DMS_MinServerFPS = 5; // Minimum server FPS for missions to start DMS_MinServerFPS = 5; // Minimum server FPS for missions to start
/*Mission notification settings*/ /*Mission notification settings*/
DMS_PlayerNotificationTypes = [ // Notification types. Supported values are: ["dynamicTextRequest", "standardHintRequest", "systemChatRequest", "textTilesRequest"]. Details below DMS_PlayerNotificationTypes = [ // Notification types. Supported values are: ["dynamicTextRequest", "standardHintRequest", "systemChatRequest", "textTilesRequest", "ExileToasts"]. Details below.
"dynamicTextRequest", // You should use either "dynamicTextRequest" or "textTilesRequest", and I think "textTilesRequest" looks better, but this is less performance-intensive. //"dynamicTextRequest", // You should use either "dynamicTextRequest" or "textTilesRequest", and I think "textTilesRequest" looks better, but this is less performance-intensive.
//"standardHintRequest", // Hints are a bit wonky... //"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. This message type is also performance-intensive, so I advise against it. //"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. This message type is also performance-intensive, so I advise against it.
"systemChatRequest" // Always nice to show in chat so that players can scroll up to read the info if they need to. //"systemChatRequest", // Always nice to show in chat so that players can scroll up to read the info if they need to.
"ExileToasts" // Default notification type since Exile 0.98, see (http://www.exilemod.com/devblog/new-ingame-notifications/)
]; ];
/*Exile Toasts Notification Settings*/
DMS_ExileToasts_Title_Size = 22; // Size for Client Exile Toasts mission titles.
DMS_ExileToasts_Title_Font = "puristaMedium"; // Font for Client Exile Toasts mission titles.
DMS_ExileToasts_Message_Color = "#ff979ba1"; // Exile Toasts color for "ExileToast" client notification type.
DMS_ExileToasts_Message_Size = 19; // Exile Toasts size for "ExileToast" client notification type.
DMS_ExileToasts_Message_Font = "PuristaLight"; // Exile Toasts font for "ExileToast" client notification type.
/*Exile Toasts Notification Settings*/
/*Dynamic Text Notification Settings*/ /*Dynamic Text Notification Settings*/
DMS_dynamicText_Duration = 7; // Number of seconds that the message will last on the screen. 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_FadeTime = 1.5; // Number of seconds that the message will fade in/out (does not affect duration).
@ -253,35 +262,57 @@ DMS_SpawnMissions_Scheduled = false; // Whether or not to spawn missions in a sc
DMS_Show_Kill_Rank_Notification = true; DMS_Show_Kill_Rank_Notification = true;
DMS_Show_Party_Kill_Notification = true; // Whether or not to show in chat when a party member kills an AI. DMS_Show_Party_Kill_Notification = true; // Whether or not to show in chat when a party member kills an AI.
DMS_Spawn_AI_With_Money = true; // Whether or not to spawn AI with money that can be looted from the body.
DMS_AIMoney_PopulationMultiplier = 5; // This determines how much EXTRA money an AI will have on his body. For example, setting this to 5 and having a server population of 30 means the AI will have an extra 150 poptabs on the body. Set to 0 to disable.
DMS_GiveMoneyToPlayer_OnAIKill = true; // Whether or not to give money directly to players when they kill AI (old method of giving money).
DMS_GiveRespectToPlayer_OnAIKill = true; // Whether or not to give respect to players when they kill AI.
DMS_Bandit_Soldier_MoneyGain = 50; // The amount of Poptabs gained for killing a bandit soldier 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_Soldier_RepGain = 10; // The amount of Respect gained for killing a bandit soldier
DMS_Bandit_Soldier_RankGain = 15; DMS_Bandit_Soldier_RankGain = 15;
DMS_Bandit_Soldier_SpawnMoney = 50; // The amount of Poptabs carried by a bandit soldier
DMS_Bandit_Static_MoneyGain = 75; // The amount of Poptabs gained for killing a bandit static gunner DMS_Bandit_Static_MoneyGain = 75; // The amount of Poptabs gained for killing a bandit static gunner
DMS_Bandit_Static_RepGain = 15; // The amount of Respect gained for killing a bandit static gunner DMS_Bandit_Static_RepGain = 15; // The amount of Respect gained for killing a bandit static gunner
DMS_Bandit_Static_RankGain = 30; DMS_Bandit_Static_RankGain = 30;
DMS_Bandit_Static_SpawnMoney = 75; // The amount of Poptabs carried by a bandit static gunner
DMS_Bandit_Vehicle_MoneyGain = 100; // The amount of Poptabs gained for killing a bandit vehicle crew member DMS_Bandit_Vehicle_MoneyGain = 100; // The amount of Poptabs gained for killing a bandit vehicle crew member
DMS_Bandit_Vehicle_RepGain = 25; // The amount of Respect gained for killing a bandit vehicle crew member DMS_Bandit_Vehicle_RepGain = 25; // The amount of Respect gained for killing a bandit vehicle crew member
DMS_Bandit_Vehicle_RankGain = 50; DMS_Bandit_Vehicle_RankGain = 50;
DMS_Bandit_Vehicle_SpawnMoney = 100; // The amount of Poptabs carried by a bandit vehicle crew member
/* DonkeyPunchDMS Custom Settings for Hero AI*/ /* DonkeyPunchDMS Custom Settings for Hero AI*/
DMS_Hero_Soldier_MoneyGain = 100; // The amount of Poptabs gained for killing a hero soldier DMS_Hero_Soldier_MoneyGain = 100; // The amount of Poptabs gained for killing a hero soldier
DMS_Hero_Soldier_RepGain = 20; // The amount of Respect gained for killing a hero soldier DMS_Hero_Soldier_RepGain = 20; // The amount of Respect gained for killing a hero soldier
DMS_Hero_Soldier_RankGain = -30; DMS_Hero_Soldier_RankGain = -30;
DMS_Hero_Soldier_SpawnMoney = 100; // The amount of Poptabs carried by a hero soldier
DMS_Hero_Static_MoneyGain = 120; // The amount of Poptabs gained for killing a hero static gunner DMS_Hero_Static_MoneyGain = 120; // The amount of Poptabs gained for killing a hero static gunner
DMS_Hero_Static_RepGain = 30; // The amount of Respect gained for killing a hero static gunner DMS_Hero_Static_RepGain = 30; // The amount of Respect gained for killing a hero static gunner
DMS_Hero_Static_RankGain = -60; DMS_Hero_Static_RankGain = -60;
DMS_Hero_Static_SpawnMoney = 120; // The amount of Poptabs carried by a hero static gunner
DMS_Hero_Vehicle_MoneyGain = 200; // The amount of Poptabs gained for killing a hero vehicle crew member DMS_Hero_Vehicle_MoneyGain = 200; // The amount of Poptabs gained for killing a hero vehicle crew member
DMS_Hero_Vehicle_RepGain = 50; // The amount of Respect gained for killing a hero vehicle crew member DMS_Hero_Vehicle_RepGain = 50; // The amount of Respect gained for killing a hero vehicle crew member
DMS_Hero_Vehicle_RankGain = -100; DMS_Hero_Vehicle_RankGain = -100;
DMS_Hero_Vehicle_SpawnMoney = 200; // The amount of Poptabs carried by a hero vehicle crew member
/* DonkeyPunchDMS Custom Settings for Survivor AI*/ /* DonkeyPunchDMS Custom Settings for Survivor AI*/
DMS_Survivor_Soldier_MoneyGain = -100; // The amount of Poptabs gained for killing a Survivor soldier DMS_Survivor_Soldier_MoneyGain = -100; // The amount of Poptabs gained for killing a Survivor soldier
DMS_Survivor_Soldier_RepGain = -100; // The amount of Respect gained for killing a Survivor soldier DMS_Survivor_Soldier_RepGain = -100; // The amount of Respect gained for killing a Survivor soldier
DMS_Survivor_Soldier_RankGain = -250; DMS_Survivor_Soldier_RankGain = -250;
DMS_Survivor_Soldier_SpawnMoney = 0; // The amount of Poptabs carried by a Survivor soldier
DMS_Survivor_Static_MoneyGain = -100; // The amount of Poptabs gained for killing a Survivor static gunner DMS_Survivor_Static_MoneyGain = -100; // The amount of Poptabs gained for killing a Survivor static gunner
DMS_Survivor_Static_RepGain = -100; // The amount of Respect gained for killing a Survivor static gunner DMS_Survivor_Static_RepGain = -100; // The amount of Respect gained for killing a Survivor static gunner
DMS_Survivor_Static_RankGain = -400; DMS_Survivor_Static_RankGain = -400;
DMS_Survivor_Static_SpawnMoney = 0; // The amount of Poptabs carried by a Survivor static gunner
DMS_Survivor_Vehicle_MoneyGain = -500; // The amount of Poptabs gained for killing a Survivor vehicle crew member DMS_Survivor_Vehicle_MoneyGain = -500; // The amount of Poptabs gained for killing a Survivor vehicle crew member
DMS_Survivor_Vehicle_RepGain = -100; // The amount of Respect gained for killing a Survivor vehicle crew member DMS_Survivor_Vehicle_RepGain = -100; // The amount of Respect gained for killing a Survivor vehicle crew member
DMS_Survivor_Vehicle_RankGain = -600; DMS_Survivor_Vehicle_RankGain = -600;
DMS_Survivor_Vehicle_MoneyGain = 0; // The amount of Poptabs carried by a Survivor vehicle crew member
DMS_AIKill_DistanceBonusMinDistance = 100; // Minimum distance from the player to the AI to apply the distance bonus. DMS_AIKill_DistanceBonusMinDistance = 100; // Minimum distance from the player to the AI to apply the distance bonus.
DMS_AIKill_DistanceBonusCoefficient = 0.05; // If the distance from the player to the killed unit is more than "DMS_AIKill_DistanceBonusMinDistance" meters then the player gets a respect bonus equivalent to the distance multiplied by this coefficient. For example, killing an AI from 400 meters will give 100 extra respect (when the coefficient is 0.25). Set to 0 to disable the bonus. This bonus will not be applied if there isn't a regular AI kill bonus. DMS_AIKill_DistanceBonusCoefficient = 0.05; // If the distance from the player to the killed unit is more than "DMS_AIKill_DistanceBonusMinDistance" meters then the player gets a respect bonus equivalent to the distance multiplied by this coefficient. For example, killing an AI from 400 meters will give 100 extra respect (when the coefficient is 0.25). Set to 0 to disable the bonus. This bonus will not be applied if there isn't a regular AI kill bonus.
@ -345,7 +376,7 @@ DMS_SpawnMissions_Scheduled = false; // Whether or not to spawn missions in a sc
DMS_ai_freezeCheckingDelay = 30; // How often (in seconds) DMS will check whether to freeze/un-freeze AI. DMS_ai_freezeCheckingDelay = 30; // How often (in seconds) DMS will check whether to freeze/un-freeze AI.
DMS_ai_freezeOnSpawn = true; // Whether or not to freeze an AI group when initially spawned. DMS_ai_freezeOnSpawn = true; // Whether or not to freeze an AI group when initially spawned.
DMS_ai_share_info = true; // Share info about killer DMS_ai_share_info = false; // Share info about killer
DMS_ai_share_info_distance = 300; // The distance killer's info will be shared to other AI DMS_ai_share_info_distance = 300; // The distance killer's info will be shared to other AI
DMS_ai_nighttime_accessory_chance = 75; // Percentage chance that AI will have a flashlight or laser pointer on their guns if spawned during nighttime DMS_ai_nighttime_accessory_chance = 75; // Percentage chance that AI will have a flashlight or laser pointer on their guns if spawned during nighttime

View File

@ -140,6 +140,8 @@ try
{ {
throw format["_messages |%1|",_messages]; throw format["_messages |%1|",_messages];
}; };
_msgWIN pushBack "win";
_msgLose pushBack "lose";
if !(_onEndingScripts params if !(_onEndingScripts params

View File

@ -142,6 +142,8 @@ try
{ {
throw format["_messages |%1|",_messages]; throw format["_messages |%1|",_messages];
}; };
_msgWIN pushBack "win";
_msgLose pushBack "lose";
if !(_onEndingScripts params if !(_onEndingScripts params

View File

@ -42,7 +42,15 @@ if !(_message isEqualType "") then
_message = str _message; _message = str _message;
}; };
if (_message isEqualTo "") exitWith {}; private _status =
if ((count _this)>2) then
{
_this select 2
}
else
{
"start"
};
{ {
switch (toLower _x) do switch (toLower _x) do
@ -52,6 +60,38 @@ if (_message isEqualTo "") exitWith {};
format["%1: %2",toUpper _messageTitle,_message] remoteExecCall ["systemChat",-2]; format["%1: %2",toUpper _messageTitle,_message] remoteExecCall ["systemChat",-2];
}; };
case "ExileToasts":
{
private _toast_type =
switch (_status) do
{
case "win": {"SuccessEmpty"};
case "lose": {"ErrorEmpty"};
default {"InfoEmpty"}; // case "start":
};
[
"toastRequest",
[
_toast_type,
[
format
[
"<t color='%1' size='%2' font='%3'>%4</t><br/><t color='%5' size='%6' font='%7'>%8</t>",
_titleColor,
DMS_ExileToasts_Title_Size,
DMS_ExileToasts_Title_Font,
_messageTitle,
DMS_ExileToasts_Message_Color,
DMS_ExileToasts_Message_Size,
DMS_ExileToasts_Message_Font,
_message
]
]
]
] call ExileServer_system_network_send_broadcast;
};
case "standardhintrequest": case "standardhintrequest":
{ {
format format

View File

@ -34,190 +34,153 @@ private _playerUID = getPlayerUID _playerObj;
if ((!isNull _playerObj) && {(_playerUID != "") && {_playerObj isKindOf "Exile_Unit_Player"}}) then if ((!isNull _playerObj) && {(_playerUID != "") && {_playerObj isKindOf "Exile_Unit_Player"}}) then
{ {
private _moneyChange = missionNamespace getVariable [format ["DMS_%1_%2_MoneyGain",_AISide,_AIType],0];
private _repChange = missionNamespace getVariable [format ["DMS_%1_%2_RepGain",_AISide,_AIType],0];
private _rankChange = missionNamespace getVariable [format ["DMS_%1_%2_RankGain",_AISide,_AIType],0];
// Check for individually defined AI money/respect/rank. // Check for individually defined AI money/respect/rank.
private _unitMoney = _unit getVariable ["DMS_AI_Money",""]; private _moneyChange = _unit getVariable ["DMS_AI_Money",0];
private _unitRespect = _unit getVariable ["DMS_AI_Respect",""]; private _repChange = _unit getVariable ["DMS_AI_Respect",0];
private _unitRank = _unit getVariable ["DMS_AI_Rank",""]; //private _unitRank = _unit getVariable ["DMS_AI_Rank",0];
if !(_unitMoney isEqualTo "") then
{
_moneyChange = _unitMoney;
};
if !(_unitRespect isEqualTo "") then
{
_repChange = _unitRespect;
};
if !(_unitRank isEqualTo "") then
{
_rankChange = _unitRank;
};
if (_roadKilled && {_unit getVariable ["DMS_Diff_RepOrTabs_on_roadkill",DMS_Diff_RepOrTabs_on_roadkill]}) then if (_roadKilled && {_unit getVariable ["DMS_Diff_RepOrTabs_on_roadkill",DMS_Diff_RepOrTabs_on_roadkill]}) then
{ {
_moneyChange = missionNamespace getVariable [format ["DMS_%1_%2_RoadkillMoney",_AISide,_AIType],0]; _moneyChange = missionNamespace getVariable [format ["DMS_%1_%2_RoadkillMoney",_AISide,_AIType],0];
_repChange = missionNamespace getVariable [format ["DMS_%1_%2_RoadkillRep",_AISide,_AIType],0]; _repChange = missionNamespace getVariable [format ["DMS_%1_%2_RoadkillRep",_AISide,_AIType],0];
_rankChange = missionNamespace getVariable [format ["DMS_%1_%2_RoadkillRank",_AISide,_AIType],0]; //_rankChange = missionNamespace getVariable [format ["DMS_%1_%2_RoadkillRank",_AISide,_AIType],0];
}; };
if ((_moneyChange!=0) || {_repChange!=0} || {_rankChange!=0}) then private _playerMoney = _playerObj getVariable ["ExileMoney", 0];
private _playerRespect = _playerObj getVariable ["ExileScore", 0];
//private _playerRank = _playerObj getVariable ["ExileHumanity", 0];
private _unitName = name _unit;
private _distance = [];
/*
if (DMS_DEBUG) then
{ {
private _playerMoney = _playerObj getVariable ["ExileMoney", 0]; format ["PlayerAwardOnAIKill :: Attempting to give %1 (%2) %3 poptabs and %4 respect and %5 rank. Player currently has %6 tabs and %7 respect and &8 rank.", name _playerObj, _playerUID, _moneyChange, _repChange, _rankChange,_playerMoney, _playerRespect,_playerRank] call DMS_fnc_DebugLog;
private _playerRespect = _playerObj getVariable ["ExileScore", 0]; };
private _playerRank = _playerObj getVariable ["ExileHumanity", 0]; */
private _unitName = name _unit;
private _distance = [];
/*
if (DMS_DEBUG) then
{
format ["PlayerAwardOnAIKill :: Attempting to give %1 (%2) %3 poptabs and %4 respect and %5 rank. Player currently has %6 tabs and %7 respect and &8 rank.", name _playerObj, _playerUID, _moneyChange, _repChange, _rankChange,_playerMoney, _playerRespect,_playerRank] call DMS_fnc_DebugLog;
};
*/
if (_moneyChange!=0) then
{
// Set client's money
// I also make sure that they don't get negative poptabs
_playerMoney = (_playerMoney + _moneyChange) max 0;
_playerObj setVariable ["ExileMoney",_playerMoney];
private _msgType = "moneyReceivedRequest";
private _msgParams = [str _playerMoney, format ["killed %1",_unitName]];
if (_moneyChange<0) then
{
// Change message for players when they're actually LOSING poptabs
_msgType = "notificationRequest";
_msgParams = ["Whoops",[format ["Lost %1 poptabs for killing %2 AI!",abs _moneyChange,_AIType]]]; //changed wording, negative result is not necessarily a roadkill
// With the error message the money value won't be updated on the client, so I just directly PVC the value.
ExileClientPlayerMoney = _playerMoney;
(owner _playerObj) publicVariableClient "ExileClientPlayerMoney";
ExileClientPlayerMoney = nil;
};
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 = _playerMoney;
(owner _playerObj) publicVariableClient "ExileClientPlayerMoney";
ExileClientPlayerMoney = nil;
};
};
};
if (_repChange!=0) then
{
private _attributes = [[format ["KILLED %1",toUpper(_unitName)],_repChange]];
if (DMS_AIKill_DistanceBonusCoefficient>0) then
{
_distance = floor (_unit distance _playerObj);
if (_distance>DMS_AIKill_DistanceBonusMinDistance) then
{
private _distanceBonus = floor (_distance * DMS_AIKill_DistanceBonusCoefficient);
_attributes pushBack [format ["%1m RANGE BONUS",_distance], _distanceBonus];
_repChange = _repChange + _distanceBonus;
};
};
// Set client's respect
_playerRespect = _playerRespect + _repChange;
_playerObj setVariable ["ExileScore",_playerRespect];
if (DMS_Show_Kill_Respect_Notification) then
{
// Send frag message
[_playerObj, "showFragRequest", [_attributes]] call ExileServer_system_network_send_to;
};
// Send updated respect value to client
ExileClientPlayerScore = _playerRespect;
(owner _playerObj) publicVariableClient "ExileClientPlayerScore";
ExileClientPlayerScore = nil;
};
//DONKEYPUNCH CUSTOM KILL STAT ADD FOR AI KILL if (DMS_GiveMoneyToPlayer_OnAIKill && {_moneyChange!=0}) then
if (DMS_Add_AIKill2DB) then
{
_newKillerFrags = _killer getVariable ["ExileKills", 0];
_newKillerFrags = _newKillerFrags + 1;
_killer setVariable ["ExileKills", _newKillerFrags];
format["addAccountKill:%1", getPlayerUID _killer] call ExileServer_system_database_query_fireAndForget;
ExileClientPlayerKills = _newKillerFrags;
(owner _playerObj) publicVariableClient "ExileClientPlayerKills";
ExileClientPlayerKills = nil;
};
//DONKEYPUNCH CUSTOM KILL RANK CHANGE FOR AI KILL
if (DMS_Enable_RankChange && {_rankChange!=0}) then
{
_playerRank = (_playerRank+_rankChange);
_killer setVariable ["ExileHumanity",_playerRank];
format["modifyAccountHumanity:%1:%2",_rankChange,getPlayerUID _killer] call ExileServer_system_database_query_fireAndForget;
ExileClientPlayerHumanity = _playerRank;
(owner _playerObj) publicVariableClient "ExileClientPlayerHumanity";
ExileClientPlayerHumanity = nil;
};
if (DMS_DEBUG) then
{
format ["PlayerAwardOnAIKill :: %1 (%2) awarded %3 poptabs and %4 respect for killing %5. Player's money is now %6, and respect is now %7. Roadkill: %8", name _playerObj, _playerUID, _moneyChange, _repChange, _unit, _playerMoney, _playerRespect, _roadKilled] call DMS_fnc_DebugLog;
};
if (DMS_Show_Party_Kill_Notification) then
{
private _group = group _playerObj;
private _members = units _group;
if (!(_group isEqualTo ExileGraveyardGroup) && {(count _members)>1}) then
{
private _msg = format
[
"%1 killed %2 from %3 meters away and received %4 poptabs, and %5 respect.",
name _playerObj,
_unitName,
if (_distance isEqualTo []) then {floor(_unit distance _playerObj)} else {_distance},
_moneyChange,
_repChange
];
if (DMS_Enable_RankChange) then
{
_msg = _msg + format[" (+%1 rank)", _rankChange];
};
{
_msg remoteExecCall ["systemChat", _x];
} forEach _members;
};
};
}
else
{ {
if (DMS_DEBUG) then // Set client's money
_playerMoney = (_playerMoney + _moneyChange) max 0; //Also make sure that they don't get negative poptabs
_playerObj setVariable ["ExileMoney",_playerMoney,true];
if (DMS_Show_Kill_Poptabs_Notification) then
{ {
format ["PlayerAwardOnAIKill :: %1 (%2) was not awarded any poptabs or respect.", name _playerObj, _playerUID] call DMS_fnc_DebugLog; // Create and send message to player
_msgParams =
if (_moneyChange > 0) then
{
["SuccessTitleOnly",[format ["Gained %1 poptabs for killing %2 AI!",abs _moneyChange,_AIType]]];
}
else
{
["ErrorTitleOnly",[format ["Lost %1 poptabs for killing %2 AI!",abs _moneyChange,_AIType]]];
};
// Send notification
[_playerObj, "toastRequest", _msgParams] call ExileServer_system_network_send_to;
}; };
}; };
if (DMS_GiveRespectToPlayer_OnAIKill && {_repChange!=0}) then
{
private _attributes = [[format ["KILLED %1",toUpper(_unitName)],_repChange]];
if (DMS_AIKill_DistanceBonusCoefficient>0) then
{
_distance = floor (_unit distance _playerObj);
if (_distance>DMS_AIKill_DistanceBonusMinDistance) then
{
private _distanceBonus = floor (_distance * DMS_AIKill_DistanceBonusCoefficient);
_attributes pushBack [format ["%1m RANGE BONUS",_distance], _distanceBonus];
_repChange = _repChange + _distanceBonus;
};
};
// Set client's respect
_playerRespect = _playerRespect + _repChange;
_playerObj setVariable ["ExileScore",_playerRespect];
if (DMS_Show_Kill_Respect_Notification) then
{
// Send frag message
[_playerObj, "showFragRequest", [_attributes]] call ExileServer_system_network_send_to;
};
// Send updated respect value to client
ExileClientPlayerScore = _playerRespect;
(owner _playerObj) publicVariableClient "ExileClientPlayerScore";
ExileClientPlayerScore = nil;
};
if (DMS_Show_Party_Kill_Notification) then
{
private _group = group _playerObj;
private _members = units _group;
if (!(_group isEqualTo ExileGraveyardGroup) && {(count _members)>1}) then
{
private _msg = format
[
"%1 killed %2 from %3 meters away and received %4 poptabs, and %5 respect.",
name _playerObj,
_unitName,
if (_distance isEqualTo []) then {floor(_unit distance _playerObj)} else {_distance},
_moneyChange,
_repChange
];
/*
if (DMS_Enable_RankChange) then
{
_msg = _msg + format[" (+%1 rank)", _rankChange];
};
*/
{
_msg remoteExecCall ["systemChat", _x];
} forEach _members;
};
};
//DONKEYPUNCH CUSTOM KILL STAT ADD FOR AI KILL
if (DMS_Add_AIKill2DB) then
{
_newKillerFrags = _killer getVariable ["ExileKills", 0];
_newKillerFrags = _newKillerFrags + 1;
_killer setVariable ["ExileKills", _newKillerFrags];
format["addAccountKill:%1", getPlayerUID _killer] call ExileServer_system_database_query_fireAndForget;
ExileClientPlayerKills = _newKillerFrags;
(owner _playerObj) publicVariableClient "ExileClientPlayerKills";
ExileClientPlayerKills = nil;
};
/*
//DONKEYPUNCH CUSTOM KILL RANK CHANGE FOR AI KILL
if (DMS_Enable_RankChange && {_rankChange!=0}) then
{
_playerRank = (_playerRank+_rankChange);
_killer setVariable ["ExileHumanity",_playerRank];
format["modifyAccountHumanity:%1:%2",_rankChange,getPlayerUID _killer] call ExileServer_system_database_query_fireAndForget;
ExileClientPlayerHumanity = _playerRank;
(owner _playerObj) publicVariableClient "ExileClientPlayerHumanity";
ExileClientPlayerHumanity = nil;
};
*/
if (DMS_DEBUG) then
{
format ["PlayerAwardOnAIKill :: %1 (%2) awarded %3 poptabs and %4 respect for killing %5. Player's money is now %6, and respect is now %7. Roadkill: %8", name _playerObj, _playerUID, _moneyChange, _repChange, _unit, _playerMoney, _playerRespect, _roadKilled] call DMS_fnc_DebugLog;
};
} }
else else
{ {

View File

@ -7,6 +7,7 @@
*/ */
private _time = diag_tickTime; private _time = diag_tickTime;
private _playerCount = count allPlayers;
if (DMS_RunningBMissionCount >= DMS_MaxBanditMissions) then if (DMS_RunningBMissionCount >= DMS_MaxBanditMissions) then
{ {
@ -20,7 +21,7 @@ if ((count DMS_RunningStaticMissions) >= DMS_MaxStaticMissions) then
if (diag_fps >= DMS_MinServerFPS && {(count allPlayers) >= DMS_MinPlayerCount}) then if (diag_fps >= DMS_MinServerFPS && {_playerCount >= DMS_MinPlayerCount}) then
{ {
if (DMS_DynamicMission && {_time - DMS_BMissionLastStart > DMS_BMissionDelay}) then if (DMS_DynamicMission && {_time - DMS_BMissionLastStart > DMS_BMissionDelay}) then
{ {

View File

@ -410,14 +410,47 @@ if (_type == "Paratroopers") then
_unit addBackpackGlobal "B_Parachute"; _unit addBackpackGlobal "B_Parachute";
}; };
// Set info variables
_unit setVariable ["DMS_AISpawnTime", time]; _unit setVariable ["DMS_AISpawnTime", time];
_unit setVariable ["DMS_AI_Side", _side]; _unit setVariable ["DMS_AI_Side", _side];
_unit setVariable ["DMS_AI_Type", _type]; _unit setVariable ["DMS_AI_Type", _type];
// Set money/respect variables
_unit setVariable
[
"DMS_AI_Money",
missionNamespace getVariable [format ["DMS_%1_%2_MoneyGain",_side,_type],0]
];
_unit setVariable
[
"DMS_AI_Respect",
missionNamespace getVariable [format ["DMS_%1_%2_RepGain",_AISide,_AIType],0]
];
private _AIMoney =
if (DMS_Spawn_AI_With_Money) then
{
private _base_money_amount = missionNamespace getVariable [format["DMS_%1_%2_SpawnMoney",_side,_type], 0];
private _population_bonus = DMS_AIMoney_PopulationMultiplier * (if (isNil '_playerCount') then {count allPlayers} else {_playerCount});
_base_money_amount + _population_bonus
}
else
{
0
};
_unit setVariable
[
"ExileMoney",
_AIMoney,
true
];
if (DMS_DEBUG) then if (DMS_DEBUG) then
{ {
(format ["SpawnAISoldier :: Spawned a %1 %2 %6 AI at %3 with %4 difficulty to group %5",_class,_side,_pos,_difficulty,_group,_type]) call DMS_fnc_DebugLog; (format ["SpawnAISoldier :: Spawned a %1 %2 %6 AI at %3 with %4 difficulty carrying %7 poptabs to group %5",_class,_side,_pos,_difficulty,_group,_type,_AIMoney]) call DMS_fnc_DebugLog;
}; };

View File

@ -150,6 +150,31 @@ ___
# Changelog: # Changelog:
### Main Branch ### Main Branch
#### June 29, 2016 (4:00 PM CST-America):
* **NEW CONFIG VALUES**
DMS_ExileToasts_Title_Size
DMS_ExileToasts_Title_Font
DMS_ExileToasts_Message_Color
DMS_ExileToasts_Message_Size
DMS_ExileToasts_Message_Font
DMS_Spawn_AI_With_Money
DMS_AIMoney_PopulationMultiplier
DMS_GiveMoneyToPlayer_OnAIKill
DMS_GiveRespectToPlayer_OnAIKill
DMS_Bandit_Soldier_SpawnMoney
DMS_Bandit_Static_SpawnMoney
DMS_Bandit_Vehicle_SpawnMoney
DMS_Hero_Soldier_SpawnMoney
DMS_Hero_Static_SpawnMoney
DMS_Hero_Vehicle_SpawnMoney
DMS_Survivor_Soldier_SpawnMoney
DMS_Survivor_Static_SpawnMoney
DMS_Survivor_Vehicle_MoneyGain
* Pastebin of new config values: http://pastebin.com/eXw93CkD
* **It is also recommended to update "DMS_PlayerNotificationTypes"!!!**
* Added support for new Exile "Toasts" notification. This is now the default (and only) DMS notification type.
* Complete overhaul and update of "DMS_fnc_PlayerAwardOnAIKill", it is now more efficient and updated to new Exile standards.
#### June 27, 2016 (7:00 PM CST-America): #### June 27, 2016 (7:00 PM CST-America):
* DMS should now properly detect VEMF markers (it wasn't working before because of a minor typo). * DMS should now properly detect VEMF markers (it wasn't working before because of a minor typo).
* DMS will now detect (and avoid) ZCP missions if you're updated to the latest version of ZCP on the test branch. * DMS will now detect (and avoid) ZCP missions if you're updated to the latest version of ZCP on the test branch.