DMS_Exile/@ExileServer/addons/a3_dms/scripts/OnKilled.sqf
eraser1 cb7338c16a Set up OnKilled + cleanup
!!!!!
NOTE: The behavior of commands "gunner" and "driver" are not extensively
documented on the wiki. I'm not sure if respect/money increase will work
properly for kills from vehicles! I need to test these commands later
!!!!!
Cleaned up obsolete/already created functions from preInit

Created config values "DMS_BanditMoneyGainOnKill" and
"DMS_BanditRepGainOnKill" and "DMS_RemoveNVG"

OnKilled should now give respect and pop tabs to clients (if configured
to do so).

It should also give the onscreen popup for kills for respect and update
the values on the client (as well as updating the corresponding stats on
the server and database)

Use "MPKilled" EH instead of "Killed" for potential issues with
offloading.
2015-08-30 00:01:00 -05:00

122 lines
2.8 KiB
Plaintext

/*
DMS_OnKilled
Created by eraser1 and Defent
Influenced by WAI
Usage:
[
[
_killedUnit,
_killer
],
_side, // "bandit" only for now
_type // not currently used
] call DMS_OnKilled;
*/
private ["_unit", "_player", "_playerObj", "_side", "_type", "_launcher", "_rockets", "_money", "_respect", "_moneyGain", "_repGain"];
_unit = _this select 0 select 0;
_player = _this select 0 select 1;
_side = _this select 1;
_type = _this select 2;
_launcher = secondaryWeapon _unit;
if (isPlayer _player) then
{
_playerObj = _player;
if (DMS_ai_share_info) then
{
{
if (((position _x) distance (position _unit)) <= DMS_ai_share_info_distance ) then {
_x reveal [_player, 4.0];
};
} count allUnits;
};
}
else
{
_playerObj = gunner _player;
if (isNull _playerObj) then
{
_playerObj = driver _player;
};
if (DMS_clear_AI_body || {DMS_remove_roadkill && {(random 100) <= DMS_remove_roadkill_chance}}) then
{
removeAllWeapons _unit;
removeAllAssignedItems _unit;
removeAllItemsWithMagazines _unit;
removeUniform _unit;
removeVest _unit;
removeBackpack _unit;
};
};
if(DMS_ai_remove_launchers && {_launcher != ""}) then
{
_rockets = _launcher call DMS_selectMagazine;
_unit removeWeapon _launcher;
{
if(_x == _rockets) then {
_unit removeMagazine _x;
};
false;
} count magazines _unit;
};
if(DMS_RemoveNVG) then
{
_unit unlinkItem "NVGoggles";
};
if ((!isNull _playerObj) && {(getPlayerUID _playerObj) != ""}) then
{
_moneyGain = missionNamespace getVariable [format ["DMS_%1MoneyGainOnKill",_side],0];
_repGain = missionNamespace getVariable [format ["DMS_%1RepGainOnKill",_side],0];
if ((_moneyGain>0) || (_repGain>0)) then
{
_money = _playerObj getVariable ["ExileMoney", 0];
_respect = _playerObj getVariable ["ExileScore", 0];
if (_moneyGain>0) then
{
// Set client's money
_money = _money + _moneyGain;
_playerObj setVariable ["ExileMoney",_money];
// Send updated money value to client
ExileClientPlayerMoney = _money;
(owner _playerObj) publicVariableClient "ExileClientPlayerMoney";
ExileClientPlayerMoney = nil;
};
if (_repGain>0) then
{
// Set client's respect
_respect = _respect + _repGain;
_playerObj setVariable ["ExileScore",_respect];
// Send frag message
[_playerObj, "showFragRequest", [["AI Kill",_repGain]]] call ExileServer_system_network_send_to;
// Send updated respect value to client
ExileClientPlayerScore = _respect;
(owner _playerObj) publicVariableClient "ExileClientPlayerScore";
ExileClientPlayerScore = nil;
};
// Update client database entry
format["setAccountMoneyAndRespect:%1:%2:%3", _money, _respect, (getPlayerUID _playerObj)] call ExileServer_system_database_query_fireAndForget;
};
};
DMS_CleanUpList pushBack [_unit,diag_tickTime,DMS_CompletedMissionCleanupTime];