From 3b75fd1a2678157c09cdeae06664cec7e137c8a7 Mon Sep 17 00:00:00 2001 From: eraser1 Date: Wed, 29 Jun 2016 16:07:01 -0500 Subject: [PATCH] Exile update! --- @ExileServer/addons/a3_dms/config.cpp | 2 +- @ExileServer/addons/a3_dms/config.sqf | 39 ++- .../a3_dms/scripts/fn_AddMissionToMonitor.sqf | 2 + .../scripts/fn_AddMissionToMonitor_Static.sqf | 2 + .../scripts/fn_BroadcastMissionStatus.sqf | 42 ++- .../a3_dms/scripts/fn_PlayerAwardOnAIKill.sqf | 297 ++++++++---------- .../a3_dms/scripts/fn_SelectMission.sqf | 3 +- .../a3_dms/scripts/fn_SpawnAISoldier.sqf | 35 ++- README.md | 25 ++ 9 files changed, 272 insertions(+), 175 deletions(-) diff --git a/@ExileServer/addons/a3_dms/config.cpp b/@ExileServer/addons/a3_dms/config.cpp index 120cf0e..aea454f 100644 --- a/@ExileServer/addons/a3_dms/config.cpp +++ b/@ExileServer/addons/a3_dms/config.cpp @@ -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"}; }; diff --git a/@ExileServer/addons/a3_dms/config.sqf b/@ExileServer/addons/a3_dms/config.sqf index 4c6ef9f..dfe7628 100644 --- a/@ExileServer/addons/a3_dms/config.sqf +++ b/@ExileServer/addons/a3_dms/config.sqf @@ -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 diff --git a/@ExileServer/addons/a3_dms/scripts/fn_AddMissionToMonitor.sqf b/@ExileServer/addons/a3_dms/scripts/fn_AddMissionToMonitor.sqf index e8e8cc3..e18b66c 100644 --- a/@ExileServer/addons/a3_dms/scripts/fn_AddMissionToMonitor.sqf +++ b/@ExileServer/addons/a3_dms/scripts/fn_AddMissionToMonitor.sqf @@ -140,6 +140,8 @@ try { throw format["_messages |%1|",_messages]; }; + _msgWIN pushBack "win"; + _msgLose pushBack "lose"; if !(_onEndingScripts params diff --git a/@ExileServer/addons/a3_dms/scripts/fn_AddMissionToMonitor_Static.sqf b/@ExileServer/addons/a3_dms/scripts/fn_AddMissionToMonitor_Static.sqf index 4f8e13f..bc9d3a8 100644 --- a/@ExileServer/addons/a3_dms/scripts/fn_AddMissionToMonitor_Static.sqf +++ b/@ExileServer/addons/a3_dms/scripts/fn_AddMissionToMonitor_Static.sqf @@ -142,6 +142,8 @@ try { throw format["_messages |%1|",_messages]; }; + _msgWIN pushBack "win"; + _msgLose pushBack "lose"; if !(_onEndingScripts params diff --git a/@ExileServer/addons/a3_dms/scripts/fn_BroadcastMissionStatus.sqf b/@ExileServer/addons/a3_dms/scripts/fn_BroadcastMissionStatus.sqf index 579193d..072b1f8 100644 --- a/@ExileServer/addons/a3_dms/scripts/fn_BroadcastMissionStatus.sqf +++ b/@ExileServer/addons/a3_dms/scripts/fn_BroadcastMissionStatus.sqf @@ -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 + [ + "%4
%8", + _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 diff --git a/@ExileServer/addons/a3_dms/scripts/fn_PlayerAwardOnAIKill.sqf b/@ExileServer/addons/a3_dms/scripts/fn_PlayerAwardOnAIKill.sqf index c48efbc..9e4d773 100644 --- a/@ExileServer/addons/a3_dms/scripts/fn_PlayerAwardOnAIKill.sqf +++ b/@ExileServer/addons/a3_dms/scripts/fn_PlayerAwardOnAIKill.sqf @@ -34,190 +34,153 @@ 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 _unitName = name _unit; + private _distance = []; + + /* + if (DMS_DEBUG) 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 - { - 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; - }; + 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; + }; + */ - //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; - 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_GiveMoneyToPlayer_OnAIKill && {_moneyChange!=0}) then { - 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 { diff --git a/@ExileServer/addons/a3_dms/scripts/fn_SelectMission.sqf b/@ExileServer/addons/a3_dms/scripts/fn_SelectMission.sqf index 1a8fe15..34694c5 100644 --- a/@ExileServer/addons/a3_dms/scripts/fn_SelectMission.sqf +++ b/@ExileServer/addons/a3_dms/scripts/fn_SelectMission.sqf @@ -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 { diff --git a/@ExileServer/addons/a3_dms/scripts/fn_SpawnAISoldier.sqf b/@ExileServer/addons/a3_dms/scripts/fn_SpawnAISoldier.sqf index 07f067c..d747338 100644 --- a/@ExileServer/addons/a3_dms/scripts/fn_SpawnAISoldier.sqf +++ b/@ExileServer/addons/a3_dms/scripts/fn_SpawnAISoldier.sqf @@ -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; }; diff --git a/README.md b/README.md index 34634bf..4ec9938 100644 --- a/README.md +++ b/README.md @@ -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.