Thursday, June 04, 2026 7:04:02 AM
> ExileServer_object_player_event_onMpKilled.sqf
/**
 * ExileServer_object_player_event_onMpKilled
 *
 * Exile Mod
 * www.exilemod.com
 * © 2015 Exile Mod Team
 *
 * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
 * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
 */

private["_victim","_killer","_victimPosition","_addDeathStat","_addKillStat","_normalkill","_killerRespectPoints","_fragAttributes","_player","_grpvictim","_grpkiller","_log","_lastVictims","_victimUID","_vehicleRole","_vehicle","_lastKillAt","_killStack","_distance","_distanceBonus","_flagNextToKiller","_homieBonus","_flagNextToVictim","_raidBonus","_overallRespectChange","_newKillerScore","_killMessage","_newKillerFrags","_newVictimDeaths"];
if (!isServer || hasInterface) exitWith {};
_victim = _this select 0;
_killer = _this select 1;
if( isNull _victim ) exitWith {};
_victim setVariable ["ExileDiedAt", time];
if !(isPlayer _victim) exitWith {};
_victimPosition = getPos _victim;
format["insertPlayerHistory:%1:%2:%3:%4:%5", getPlayerUID _victim, name _victim, _victimPosition select 0, _victimPosition select 1, _victimPosition select 2] call ExileServer_system_database_query_fireAndForget;
format["deletePlayer:%1", _victim getVariable ["ExileDatabaseId", -1]] call ExileServer_system_database_query_fireAndForget;
_victim setVariable ["ExileIsDead", true];
_victim setVariable ["ExileName", name _victim, true];
// Advanced Banking
private["_wallet","_grave"];
_wallet = _victim getVariable ["ExileMoney",0];
if (_wallet > 0) then {
    _grave = createVehicle["Land_Suitcase_F",[((_victimPosition select 0) + 0.7),(_victimPosition select 1),_victimPosition select 2],[],0,"CAN_COLLIDE"];
    _grave setDir (getDir _victim);
    _grave setVariable ["ExileName", name _victim, true];
    _grave setVariable ["DroppedAmount",_wallet,true];
    _victim setVariable ["ExileMoney",0];
    format["setAccountMoney:%1:%2",0,(getPlayerUID _victim)] call ExileServer_system_database_query_fireAndForget;
};
// Advanced Banking
_victim call ExileServer_object_flies_spawn;
_addDeathStat = true;
_addKillStat = true;
_normalkill = true;
_killerRespectPoints = [];
_fragAttributes = [];
if (_victim isEqualTo _killer) then
{
	["systemChatRequest", [format["%1 commited suicide!", (name _victim)]]] call ExileServer_object_player_event_killFeed;
}
else
{
	if (vehicle _victim isEqualTo _killer) then
	{
		["systemChatRequest", [format["%1 crashed to death!", (name _victim)]]] call ExileServer_object_player_event_killfeed;
	}
	else
	{
		if (isNull _killer) then
		{
			["systemChatRequest", [format["%1 died for an unknown reason!", (name _victim)]]] call ExileServer_object_player_event_killfeed;
		}
		else
		{
			_player = objNull;
			if (isPlayer _killer) then
			{
				if ((typeOf _killer) isEqualTo "Exile_Unit_Player") then
				{
					_player = _killer;
				}
				else
				{
					_uid = getPlayerUID _killer;
					{
						if ((getPlayerUID _x) isEqualTo _uid) exitWith
						{
							_player = _x;
						};
					}
					forEach allPlayers;
				};
			}
			else
			{
				if (isUAVConnected _killer) then
				{
					_player = (UAVControl _killer) select 0;
				};
			};
			if !(isNull _player) then
			{
				_killer = _player;
				if (_victim getVariable ["ExileIsBambi", false]) then
				{
					_addKillStat = false;
					_addDeathStat = false;
					_fragAttributes pushBack "Bambi Slayer";
					_killerRespectPoints pushBack ["BAMBI SLAYER", (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Frags" >> "bambi"))];
				}
				else
				{
					_grpvictim = _victim getVariable ["ExileGroup",(group _victim)];
					_grpkiller = _killer getVariable ["ExileGroup",(group _killer)];
					if((_grpvictim isEqualTo _grpkiller)&&!(ExileGraveyardGroup isEqualTo _grpkiller))then
					{
						_log = format["%2 was team-killed by %1!", (name _killer), (name _victim)];
						["systemChatRequest", [_log]] call ExileServer_object_player_event_killfeed;
						_fragAttributes pushBack "Teamkill";
						_killerRespectPoints pushBack ["TEAMKILL", (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Frags" >> "friendlyFire"))];
						_normalkill = false;
					}
					else
					{
						_lastVictims = _killer getVariable ["ExileLastVictims", ["0", "1", "2"]];
						_victimUID = _victim getVariable ["ExileOwnerUID", getPlayerUID _victim];
						if (_victimUID in _lastVictims) then
						{
							_log = format["%1 keeps killing %2!", (name _killer), (name _victim)];
							["systemChatRequest", [_log]] call ExileServer_object_player_event_killfeed;
							_fragAttributes pushBack "Domination";
							_killerRespectPoints pushBack ["DOMINATION BONUS", (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Frags" >> "domination"))];
						}
						else
						{
							_lastVictims deleteAt 0;
							_lastVictims pushBack _victimUID;
							_killer setVariable ["ExileLastVictims", _lastVictims];
							if ((vehicle _killer) isEqualTo _killer) then
							{
								if ((currentWeapon _killer) isEqualTo "Exile_Melee_Axe") then
								{
									_fragAttributes pushBack "Humiliation";
									_killerRespectPoints pushBack ["HUMILIATION", (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Frags" >> "humiliation"))];
								}
								else
								{
									_killerRespectPoints pushBack ["ENEMY FRAGGED", (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Frags" >> "standard"))];
								};
							}
							else
							{
								_vehicleRole = assignedVehicleRole _killer;
								switch (toLower (_vehicleRole select 0)) do
								{
									case "driver":
									{
										_vehicle = vehicle _killer;
										switch (true) do
										{
											case (_vehicle isKindOf "ParachuteBase"):
											{
												_fragAttributes pushBack "Chute > Chopper";
												_killerRespectPoints pushBack ["CHUTE > CHOPPER", (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Frags" >> "chuteGreaterChopper"))];
											};
											case (_vehicle isKindOf "Air"):
											{
												_fragAttributes pushBack "Big Bird";
												_killerRespectPoints pushBack ["BIG BIRD", (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Frags" >> "bigBird"))];
											};
											default
											{
												_fragAttributes pushBack "Road Kill";
												_killerRespectPoints pushBack ["ROAD KILL", (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Frags" >> "roadKill"))];
											};
										};
									};
									case "turret":
									{
										if ((currentWeapon _killer) isKindOf "StaticWeapon") then
										{
											_fragAttributes pushBack "Let it Rain";
											_killerRespectPoints pushBack ["LET IT RAIN", (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Frags" >> "letItRain"))];
										}
										else
										{
											_fragAttributes pushBack "Mad Passenger";
											_killerRespectPoints pushBack ["MAD PASSENGER", (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Frags" >> "passenger"))];
										};
									};
									default
									{
										_fragAttributes pushBack "Mad Passenger";
										_killerRespectPoints pushBack ["MAD PASSENGER", (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Frags" >> "passenger"))];
									};
								};
							};
						};
					};
				};
				if (_addKillStat) then
				{
					if(_normalkill)then
					{
						_lastKillAt = _killer getVariable ["ExileLastKillAt", 0];
						_killStack = _killer getVariable ["ExileKillStack", 0];
						_killStack = _killStack + 1;
						if (isNil "ExileServerHadFirstBlood") then
						{
							ExileServerHadFirstBlood = true;
							_fragAttributes pushBack "First Blood";
							_killerRespectPoints pushBack ["FIRST BLOOD", getNumber (configFile >> "CfgSettings" >> "Respect" >> "Bonus" >> "firstBlood")];
						}
						else
						{
							if (time - _lastKillAt < (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Bonus" >> "killStreakTimeout"))) then
							{
								_fragAttributes pushBack (format ["%1x Kill Streak", _killStack]);
								_killerRespectPoints pushBack [(format ["%1x KILL STREAK", _killStack]), _killStack * (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Bonus" >> "killStreak"))];
							}
							else
							{
								_killStack = 1;
							};
						};
						_killer setVariable ["ExileKillStack", _killStack];
						_killer setVariable ["ExileLastKillAt", time];
					};
					_distance = floor(_victim distance _killer);
					_fragAttributes pushBack (format ["%1m Distance", _distance]);
					_distanceBonus = (floor ((_distance min 3000) / 100)) * getNumber (configFile >> "CfgSettings" >> "Respect" >> "Bonus" >> "per100mDistance");
					if (_distanceBonus > 0) then
					{
						_killerRespectPoints pushBack [(format ["%1m RANGE BONUS", _distance]), _distanceBonus];
					};
					_flagNextToKiller = _killer call ExileClient_util_world_getTerritoryAtPosition;
					if !(isNull _flagNextToKiller) then
					{
						if ((getPlayerUID _killer) in (_flagNextToKiller getVariable ["ExileTerritoryBuildRights", []])) then
						{
							_homieBonus = getNumber (configFile >> "CfgSettings" >> "Respect" >> "Bonus" >> "homie");
							if (_homieBonus > 0) then
							{
								_fragAttributes pushBack "Homie";
								_killerRespectPoints pushBack ["HOMIE BONUS", _homieBonus];
							};
						};
					};
					_flagNextToVictim = _victim call ExileClient_util_world_getTerritoryAtPosition;
					if !(isNull _flagNextToVictim) then
					{
						if ((getPlayerUID _victim) in (_flagNextToVictim getVariable ["ExileTerritoryBuildRights", []])) then
						{
							_raidBonus = getNumber (configFile >> "CfgSettings" >> "Respect" >> "Bonus" >> "raid");
							if (_raidBonus > 0) then
							{
								_fragAttributes pushBack "Raid";
								_killerRespectPoints pushBack ["RAID BONUS", _raidBonus];
							};
						};
					};
				};
				_overallRespectChange = 0;
				{
					_overallRespectChange = _overallRespectChange + (_x select 1);
				}
				forEach _killerRespectPoints;
				_newKillerScore = _killer getVariable ["ExileScore", 0];
				_newKillerScore = _newKillerScore + _overallRespectChange;
				_killer setVariable ["ExileScore", _newKillerScore];
				format["setAccountScore:%1:%2", _newKillerScore,getPlayerUID _killer] call ExileServer_system_database_query_fireAndForget;
				if(_normalkill)then
				{
					_killMessage = format ["%1 was killed by %2", (name _victim), (name _killer)];
					if !(count _fragAttributes isEqualTo 0) then
					{
						_killMessage = _killMessage + " (" + (_fragAttributes joinString ", ") + ")";
					};
					["systemChatRequest", [_killMessage]] call ExileServer_object_player_event_killfeed;
					if (_addKillStat isEqualTo true) then
					{
						_newKillerFrags = _killer getVariable ["ExileKills", 0];
						_newKillerFrags = _newKillerFrags + 1;
						_killer setVariable ["ExileKills", _newKillerFrags];
						format["addAccountKill:%1", getPlayerUID _killer] call ExileServer_system_database_query_fireAndForget;
					};
				};
				[_killer, "showFragRequest", [_killerRespectPoints]] call ExileServer_system_network_send_to;
				_killer call ExileServer_object_player_sendStatsUpdate;
			}
			else
			{
				["systemChatRequest", [format["%1 was killed by an NPC! (%2m Distance)", (name _victim), floor(_victim distance _killer)]]] call ExileServer_object_player_event_killfeed;
			};
		};
	};
};
if (_addDeathStat isEqualTo true) then
{
	_newVictimDeaths = _victim getVariable ["ExileDeaths", 0];
	_newVictimDeaths = _newVictimDeaths + 1;
	_victim setVariable ["ExileDeaths", _newVictimDeaths];
	format["addAccountDeath:%1", getPlayerUID _victim] call ExileServer_system_database_query_fireAndForget;
	_victim call ExileServer_object_player_sendStatsUpdate;
};
[_victim] joinSilent ExileGraveyardGroup;
true
All opinions represented herein are my own
- © 2024 - 2026 itsthedevman
- build 4294fb2