Advertisement
MGT

ExileServer_object_player_event_onMpKilled.sqf

MGT
Dec 18th, 2015
452
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.73 KB | None | 0 0
  1. 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"];
  2. if (!isServer || hasInterface) exitWith {};
  3. _victim = _this select 0;
  4. _killer = _this select 1;
  5. if( isNull _victim ) exitWith {};
  6. _victim setVariable ["ExileDiedAt", time];
  7. if !(isPlayer _victim) exitWith {};
  8. _victimPosition = getPos _victim;
  9. 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;
  10. format["deletePlayer:%1", _victim getVariable ["ExileDatabaseId", -1]] call ExileServer_system_database_query_fireAndForget;
  11. _victim setVariable ["ExileIsDead", true];
  12. _victim setVariable ["ExileName", name _victim, true];
  13. _victim call ExileServer_object_flies_spawn;
  14. _addDeathStat = true;
  15. _addKillStat = true;
  16. _normalkill = true;
  17. _killerRespectPoints = [];
  18. _fragAttributes = [];
  19. if (_victim isEqualTo _killer) then
  20. {
  21. _log = format["%1 commited suicide", (name _victim)];
  22. 'ARMA_LOG' callExtension format['A3_EXILE_KILLED:%1',_log];
  23. ["systemChatRequest", [format["%1 commited suicide!", (name _victim)]]] call ExileServer_object_player_event_killFeed;
  24. }
  25. else
  26. {
  27. if (vehicle _victim isEqualTo _killer) then
  28. {
  29. _log = format["%1 crashed to death", (name _victim)];
  30. 'ARMA_LOG' callExtension format['A3_EXILE_KILLED:%1',_log];
  31. ["systemChatRequest", [format["%1 crashed to death!", (name _victim)]]] call ExileServer_object_player_event_killfeed;
  32. }
  33. else
  34. {
  35. if (isNull _killer) then
  36. {
  37. _log = format["%1 died for an unknown reason", (name _victim)];
  38. 'ARMA_LOG' callExtension format['A3_EXILE_KILLED:%1',_log];
  39. ["systemChatRequest", [format["%1 died for an unknown reason!", (name _victim)]]] call ExileServer_object_player_event_killfeed;
  40. }
  41. else
  42. {
  43. _player = objNull;
  44. if (isPlayer _killer) then
  45. {
  46. if ((typeOf _killer) isEqualTo "Exile_Unit_Player") then
  47. {
  48. _player = _killer;
  49. }
  50. else
  51. {
  52. _uid = getPlayerUID _killer;
  53. {
  54. if ((getPlayerUID _x) isEqualTo _uid) exitWith
  55. {
  56. _player = _x;
  57. };
  58. }
  59. forEach allPlayers;
  60. };
  61. }
  62. else
  63. {
  64. if (isUAVConnected _killer) then
  65. {
  66. _player = (UAVControl _killer) select 0;
  67. };
  68. };
  69. if !(isNull _player) then
  70. {
  71. _killer = _player;
  72. if (_victim getVariable ["ExileIsBambi", false]) then
  73. {
  74. _addKillStat = false;
  75. _addDeathStat = false;
  76. _fragAttributes pushBack "Bambi Slayer";
  77. _killerRespectPoints pushBack ["BAMBI SLAYER", (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Frags" >> "bambi"))];
  78. }
  79. else
  80. {
  81. _grpvictim = _victim getVariable ["ExileGroup",(group _victim)];
  82. _grpkiller = _killer getVariable ["ExileGroup",(group _killer)];
  83. if((_grpvictim isEqualTo _grpkiller)&&!(ExileGraveyardGroup isEqualTo _grpkiller))then
  84. {
  85. _log = format["%2 was team-killed by %1!", (name _killer), (name _victim)];
  86. 'ARMA_LOG' callExtension format['A3_EXILE_KILLED:%1',_log];
  87. ["systemChatRequest", [_log]] call ExileServer_object_player_event_killfeed;
  88. _fragAttributes pushBack "Teamkill";
  89. _killerRespectPoints pushBack ["TEAMKILL", (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Frags" >> "friendlyFire"))];
  90. _normalkill = false;
  91. }
  92. else
  93. {
  94. _lastVictims = _killer getVariable ["ExileLastVictims", ["0", "1", "2"]];
  95. _victimUID = _victim getVariable ["ExileOwnerUID", getPlayerUID _victim];
  96. if (_victimUID in _lastVictims) then
  97. {
  98. _log = format["%1 keeps killing %2!", (name _killer), (name _victim)];
  99. 'ARMA_LOG' callExtension format['A3_EXILE_KILLED:%1',_log];
  100. ["systemChatRequest", [_log]] call ExileServer_object_player_event_killfeed;
  101. _fragAttributes pushBack "Domination";
  102. _killerRespectPoints pushBack ["DOMINATION BONUS", (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Frags" >> "domination"))];
  103. }
  104. else
  105. {
  106. _lastVictims deleteAt 0;
  107. _lastVictims pushBack _victimUID;
  108. _killer setVariable ["ExileLastVictims", _lastVictims];
  109. if ((vehicle _killer) isEqualTo _killer) then
  110. {
  111. if ((currentWeapon _killer) isEqualTo "Exile_Melee_Axe") then
  112. {
  113. _fragAttributes pushBack "Humiliation";
  114. _killerRespectPoints pushBack ["HUMILIATION", (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Frags" >> "humiliation"))];
  115. }
  116. else
  117. {
  118. _killerRespectPoints pushBack ["ENEMY FRAGGED", (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Frags" >> "standard"))];
  119. };
  120. }
  121. else
  122. {
  123. _vehicleRole = assignedVehicleRole _killer;
  124. switch (toLower (_vehicleRole select 0)) do
  125. {
  126. case "driver":
  127. {
  128. _vehicle = vehicle _killer;
  129. switch (true) do
  130. {
  131. case (_vehicle isKindOf "ParachuteBase"):
  132. {
  133. _fragAttributes pushBack "Chute > Chopper";
  134. _killerRespectPoints pushBack ["CHUTE > CHOPPER", (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Frags" >> "chuteGreaterChopper"))];
  135. };
  136. case (_vehicle isKindOf "Air"):
  137. {
  138. _fragAttributes pushBack "Big Bird";
  139. _killerRespectPoints pushBack ["BIG BIRD", (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Frags" >> "bigBird"))];
  140. };
  141. default
  142. {
  143. _fragAttributes pushBack "Road Kill";
  144. _killerRespectPoints pushBack ["ROAD KILL", (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Frags" >> "roadKill"))];
  145. };
  146. };
  147. };
  148. case "turret":
  149. {
  150. if ((currentWeapon _killer) isKindOf "StaticWeapon") then
  151. {
  152. _fragAttributes pushBack "Let it Rain";
  153. _killerRespectPoints pushBack ["LET IT RAIN", (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Frags" >> "letItRain"))];
  154. }
  155. else
  156. {
  157. _fragAttributes pushBack "Mad Passenger";
  158. _killerRespectPoints pushBack ["MAD PASSENGER", (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Frags" >> "passenger"))];
  159. };
  160. };
  161. default
  162. {
  163. _fragAttributes pushBack "Mad Passenger";
  164. _killerRespectPoints pushBack ["MAD PASSENGER", (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Frags" >> "passenger"))];
  165. };
  166. };
  167. };
  168. };
  169. };
  170. };
  171. if (_addKillStat) then
  172. {
  173. if(_normalkill)then
  174. {
  175. _lastKillAt = _killer getVariable ["ExileLastKillAt", 0];
  176. _killStack = _killer getVariable ["ExileKillStack", 0];
  177. _killStack = _killStack + 1;
  178. if (isNil "ExileServerHadFirstBlood") then
  179. {
  180. ExileServerHadFirstBlood = true;
  181. _fragAttributes pushBack "First Blood";
  182. _killerRespectPoints pushBack ["FIRST BLOOD", getNumber (configFile >> "CfgSettings" >> "Respect" >> "Bonus" >> "firstBlood")];
  183. }
  184. else
  185. {
  186. if (time - _lastKillAt < (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Bonus" >> "killStreakTimeout"))) then
  187. {
  188. _fragAttributes pushBack (format ["%1x Kill Streak", _killStack]);
  189. _killerRespectPoints pushBack [(format ["%1x KILL STREAK", _killStack]), _killStack * (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Bonus" >> "killStreak"))];
  190. }
  191. else
  192. {
  193. _killStack = 1;
  194. };
  195. };
  196. _killer setVariable ["ExileKillStack", _killStack];
  197. _killer setVariable ["ExileLastKillAt", time];
  198. };
  199. _distance = floor(_victim distance _killer);
  200. _fragAttributes pushBack (format ["%1m Distance", _distance]);
  201. _distanceBonus = (floor ((_distance min 3000) / 100)) * getNumber (configFile >> "CfgSettings" >> "Respect" >> "Bonus" >> "per100mDistance");
  202. if (_distanceBonus > 0) then
  203. {
  204. _killerRespectPoints pushBack [(format ["%1m RANGE BONUS", _distance]), _distanceBonus];
  205. };
  206. _flagNextToKiller = (getPos _killer) call ExileClient_util_world_getTerritoryAtPosition;
  207. if !(isNull _flagNextToKiller) then
  208. {
  209. if ((getPlayerUID _killer) in (_flagNextToKiller getVariable ["ExileTerritoryBuildRights", []])) then
  210. {
  211. _homieBonus = getNumber (configFile >> "CfgSettings" >> "Respect" >> "Bonus" >> "homie");
  212. if (_homieBonus > 0) then
  213. {
  214. _fragAttributes pushBack "Homie";
  215. _killerRespectPoints pushBack ["HOMIE BONUS", _homieBonus];
  216. };
  217. };
  218. };
  219. _flagNextToVictim = (getPos _victim) call ExileClient_util_world_getTerritoryAtPosition;
  220. if !(isNull _flagNextToVictim) then
  221. {
  222. if ((getPlayerUID _victim) in (_flagNextToVictim getVariable ["ExileTerritoryBuildRights", []])) then
  223. {
  224. _raidBonus = getNumber (configFile >> "CfgSettings" >> "Respect" >> "Bonus" >> "raid");
  225. if (_raidBonus > 0) then
  226. {
  227. _fragAttributes pushBack "Raid";
  228. _killerRespectPoints pushBack ["RAID BONUS", _raidBonus];
  229. };
  230. };
  231. };
  232. };
  233. _overallRespectChange = 0;
  234. {
  235. _overallRespectChange = _overallRespectChange + (_x select 1);
  236. }
  237. forEach _killerRespectPoints;
  238. _newKillerScore = _killer getVariable ["ExileScore", 0];
  239. _newKillerScore = _newKillerScore + _overallRespectChange;
  240. _killer setVariable ["ExileScore", _newKillerScore];
  241. format["setAccountScore:%1:%2", _newKillerScore,getPlayerUID _killer] call ExileServer_system_database_query_fireAndForget;
  242. if(_normalkill)then
  243. {
  244. _killMessage = format ["%1 was killed by %2", (name _victim), (name _killer)];
  245. if !(count _fragAttributes isEqualTo 0) then
  246. {
  247. _log = _killMessage;
  248. 'ARMA_LOG' callExtension format['A3_EXILE_KILLED:%1',_log];
  249. _killMessage = _killMessage + " (" + (_fragAttributes joinString ", ") + ")";
  250. };
  251. ["systemChatRequest", [_killMessage]] call ExileServer_object_player_event_killfeed;
  252. if (_addKillStat isEqualTo true) then
  253. {
  254. _newKillerFrags = _killer getVariable ["ExileKills", 0];
  255. _newKillerFrags = _newKillerFrags + 1;
  256. _killer setVariable ["ExileKills", _newKillerFrags];
  257. format["addAccountKill:%1", getPlayerUID _killer] call ExileServer_system_database_query_fireAndForget;
  258. };
  259. };
  260. [_killer, "showFragRequest", [_killerRespectPoints]] call ExileServer_system_network_send_to;
  261. _killer call ExileServer_object_player_sendStatsUpdate;
  262. }
  263. else
  264. {
  265. _log = format["%1 was killed by an NPC (%2m Distance)", (name _victim), floor(_victim distance _killer)];
  266. 'ARMA_LOG' callExtension format['A3_EXILE_KILLED:%1',_log];
  267. ["systemChatRequest", [format["%1 was killed by an NPC! (%2m Distance)", (name _victim), floor(_victim distance _killer)]]] call ExileServer_object_player_event_killfeed;
  268. };
  269. };
  270. };
  271. };
  272. if (_addDeathStat isEqualTo true) then
  273. {
  274. _newVictimDeaths = _victim getVariable ["ExileDeaths", 0];
  275. _newVictimDeaths = _newVictimDeaths + 1;
  276. _victim setVariable ["ExileDeaths", _newVictimDeaths];
  277. format["addAccountDeath:%1", getPlayerUID _victim] call ExileServer_system_database_query_fireAndForget;
  278. _victim call ExileServer_object_player_sendStatsUpdate;
  279. };
  280. [_victim] joinSilent ExileGraveyardGroup;
  281. true
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement