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[] = {};
weapons[] = {};
a3_DMS_version = "June 27, 2016";
a3_DMS_version = "June 29, 2016";
requiredVersion = 1.36;
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
/*Mission notification settings*/
DMS_PlayerNotificationTypes = [ // Notification types. Supported values are: ["dynamicTextRequest", "standardHintRequest", "systemChatRequest", "textTilesRequest"]. Details below
"dynamicTextRequest", // You should use either "dynamicTextRequest" or "textTilesRequest", and I think "textTilesRequest" looks better, but this is less performance-intensive.
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.
//"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.
"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*/
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).
@ -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_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_RepGain = 10; // The amount of Respect gained for killing a bandit soldier
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_RepGain = 15; // The amount of Respect gained for killing a bandit static gunner
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_RepGain = 25; // The amount of Respect gained for killing a bandit vehicle crew member
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*/
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_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_RepGain = 30; // The amount of Respect gained for killing a hero static gunner
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_RepGain = 50; // The amount of Respect gained for killing a hero vehicle crew member
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*/
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_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_RepGain = -100; // The amount of Respect gained for killing a Survivor static gunner
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_RepGain = -100; // The amount of Respect gained for killing a Survivor vehicle crew member
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_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_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_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];
};
_msgWIN pushBack "win";
_msgLose pushBack "lose";
if !(_onEndingScripts params

View File

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

View File

@ -42,7 +42,15 @@ if !(_message isEqualType "") then
_message = str _message;
};
if (_message isEqualTo "") exitWith {};
private _status =
if ((count _this)>2) then
{
_this select 2
}
else
{
"start"
};
{
switch (toLower _x) do
@ -52,6 +60,38 @@ if (_message isEqualTo "") exitWith {};
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":
{
format

View File

@ -34,44 +34,23 @@ private _playerUID = getPlayerUID _playerObj;
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.
private _unitMoney = _unit getVariable ["DMS_AI_Money",""];
private _unitRespect = _unit getVariable ["DMS_AI_Respect",""];
private _unitRank = _unit getVariable ["DMS_AI_Rank",""];
if !(_unitMoney isEqualTo "") then
{
_moneyChange = _unitMoney;
};
if !(_unitRespect isEqualTo "") then
{
_repChange = _unitRespect;
};
if !(_unitRank isEqualTo "") then
{
_rankChange = _unitRank;
};
private _moneyChange = _unit getVariable ["DMS_AI_Money",0];
private _repChange = _unit getVariable ["DMS_AI_Respect",0];
//private _unitRank = _unit getVariable ["DMS_AI_Rank",0];
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];
_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 _playerRank = _playerObj getVariable ["ExileHumanity", 0];
private _unitName = name _unit;
private _distance = [];
@ -82,46 +61,33 @@ if ((!isNull _playerObj) && {(_playerUID != "") && {_playerObj isKindOf "Exile_U
};
*/
if (_moneyChange!=0) then
if (DMS_GiveMoneyToPlayer_OnAIKill && {_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;
};
_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
{
// Send notification and update client's money stats
[_playerObj, _msgType, _msgParams] call ExileServer_system_network_send_to;
// Create and send message to player
_msgParams =
if (_moneyChange > 0) then
{
["SuccessTitleOnly",[format ["Gained %1 poptabs for killing %2 AI!",abs _moneyChange,_AIType]]];
}
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;
["ErrorTitleOnly",[format ["Lost %1 poptabs for killing %2 AI!",abs _moneyChange,_AIType]]];
};
// Send notification
[_playerObj, "toastRequest", _msgParams] call ExileServer_system_network_send_to;
};
};
if (_repChange!=0) then
if (DMS_GiveRespectToPlayer_OnAIKill && {_repChange!=0}) then
{
private _attributes = [[format ["KILLED %1",toUpper(_unitName)],_repChange]];
@ -155,35 +121,6 @@ if ((!isNull _playerObj) && {(_playerUID != "") && {_playerObj isKindOf "Exile_U
};
//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;
};
if (DMS_Show_Party_Kill_Notification) then
{
private _group = group _playerObj;
@ -200,23 +137,49 @@ if ((!isNull _playerObj) && {(_playerUID != "") && {_playerObj isKindOf "Exile_U
_repChange
];
/*
if (DMS_Enable_RankChange) then
{
_msg = _msg + format[" (+%1 rank)", _rankChange];
};
*/
{
_msg remoteExecCall ["systemChat", _x];
} forEach _members;
};
};
}
else
//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) was not awarded any poptabs or respect.", name _playerObj, _playerUID] call DMS_fnc_DebugLog;
};
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

View File

@ -7,6 +7,7 @@
*/
private _time = diag_tickTime;
private _playerCount = count allPlayers;
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
{

View File

@ -410,14 +410,47 @@ if (_type == "Paratroopers") then
_unit addBackpackGlobal "B_Parachute";
};
// Set info variables
_unit setVariable ["DMS_AISpawnTime", time];
_unit setVariable ["DMS_AI_Side", _side];
_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
{
(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:
### 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):
* 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.