Advertisement
Guest User

Untitled

a guest
Feb 20th, 2020
709
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.13 KB | None | 0 0
  1. private["_raidKill","_territoryKill","_vehicle","_logStat","_killerID","_killerNPC","_systemChat","_killer","_respectTransferVictim", "_instigator","_countDeath","_countKill","_killSummary","_killingPlayer","_killType","_oldVictimRespect","_newVictimRespect","_oldKillerRespect","_newKillerRespect","_unknownReasons","_systemChat","_modifyVictimRespect","_respectLoss","_perks","_minRespectTransfer","_respectTransfer","_perkNames","_killerStatsNeedUpdate","_newKillerFrags","_victimStatsNeedUpdate","_newVictimDeaths","_victimPosition"];
  2. _victim = _this select 0;
  3. _killer = _this select 1;
  4. _instigator = _this select 2;
  5. _bambislayer = 0;
  6. _killerNPC = 0;
  7. _territoryKill = 0;
  8. _raidKill = 0;
  9. _logStat = true;
  10. diag_log "[STAT TRACKER] FIRED MPKILLED!";
  11. params[["_victim",objNull],["_killer",objNull]];
  12. if(isNil "XG_DataBaseLog") then
  13. {
  14. XG_DataBaseLog = compileFinal
  15. "
  16. params[['_killer',objNull],['_victim',objNull]];
  17. _killerName = name _killer;
  18. _killerUID = getPlayerUID _killer;
  19. _victimName = name _victim;
  20. _victimUID = getPlayerUID _victim;
  21. _killerWeapon = getText(configFile >> 'CfgWeapons' >> (currentWeapon _killer) >> 'displayName');
  22. _killerVehicle = getText(configFile >> 'CfgVehicles' >> (typeof (vehicle _killer)) >> 'displayName');
  23. _distance = round(_killer distance _victim);
  24. format['XG_LogKill:%1:%2:%3:%4:%5:%6:%7',_victimUID,_victimName,_killerUID,_killerName,_killerWeapon,_killerVehicle,_distance] call ExileServer_system_database_query_fireAndForget;
  25. ";
  26. };
  27. _XG_Fnc_Killed_Handle =
  28. {
  29. _vehicleMessage =
  30. {
  31. params[["_killer",objNull],["_victim",objNull],"_type"];
  32. _vehicle = vehicle _killer;
  33. _display = getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName");
  34. _vehicleRole = _killer call ExileClient_util_vehicle_getRole;
  35. switch (_vehicleRole) do
  36. {
  37. case "driver":
  38. {
  39. switch (true) do
  40. {
  41. case (_vehicle isKindOf "ParachuteBase"):
  42. {
  43. _type = "Driver:Para";
  44. };
  45. case (_vehicle isKindOf "Air"):
  46. {
  47. _type = "Driver:Air";
  48. };
  49. default
  50. {
  51. _type = "Driver:Vehicle";
  52. };
  53. };
  54. };
  55. case "turret":
  56. {
  57. if ((currentWeapon _killer) isKindOf "StaticWeapon") then
  58. {
  59. _type = "Turret:Static";
  60. }
  61. else
  62. {
  63. _type = "Turret:Vehicle";
  64. };
  65. };
  66. default
  67. {
  68. _type = "Cargo:Vehicle";
  69. };
  70. };
  71.  
  72. ["Vehicle",_type,_killer,_victim] call _XG_fnc_Send_Killed;
  73. };
  74.  
  75. _playerMessage =
  76. {
  77. params[["_killer",objNull],["_victim",objNull],"_type"];
  78. if!((currentWeapon _killer) isEqualTo "") then
  79. {
  80. _type = "Weapon";
  81. }
  82. else
  83. {
  84. _type = "NoWeapon";
  85. };
  86. ["Player",_type,_killer,_victim] call _XG_fnc_Send_Killed;
  87. };
  88.  
  89. params[["_killer",objNull],["_victim",objNull],"_return"];
  90.  
  91. _vehicle = vehicle _killer;
  92. if(_vehicle isEqualTo _killer) then
  93. {
  94. if((typeOf _vehicle) isEqualTo "Exile_Unit_Player") then
  95. {
  96. [_killer,_victim] call _playerMessage;
  97. }
  98. else
  99. {
  100. [_killer,_victim] call _vehicleMessage;
  101. };
  102. }
  103. else
  104. {
  105. [_killer,_victim] call _vehicleMessage;
  106. };
  107. [_killer,_victim] call XG_DataBaseLog;
  108. };
  109. _XG_fnc_Send_Killed =
  110. {
  111. [
  112. "KillMessages",
  113. _this
  114. ] call ExileServer_system_network_send_broadcast;
  115. };
  116. if (!isserver || hasinterface || isNull _victim) exitWith {};
  117. _victim setVariable ["ExileDiedAt", time];
  118. if !(isPlayer _victim) exitWith {};
  119. _victim setVariable ["ExileIsDead", true];
  120. _victim setVariable ["ExileName", name _victim, true];
  121. _countDeath = false;
  122. _countKill = false;
  123. _killSummary = [];
  124. _killingPlayer = _killer call ExileServer_util_getFragKiller;
  125. _killType = [_victim, _killer, _killingPlayer, _instigator] call ExileServer_util_getFragType;
  126. _oldVictimRespect = _victim getVariable ["ExileScore", 0];
  127. _newVictimRespect = _oldVictimRespect;
  128. _oldKillerRespect = 0;
  129. if !(isNull _killingPlayer) then
  130. {
  131. _oldKillerRespect = _killingPlayer getVariable ["ExileScore", 0];
  132. };
  133. _newKillerRespect = _oldKillerRespect;
  134. switch (_killType) do
  135. {
  136. default
  137. {
  138. _unknownReasons =
  139. [
  140. "%1 died because... Arma.",
  141. "%1 died because the universe hates him.",
  142. "%1 died a mysterious death.",
  143. "%1 died and nobody knows why.",
  144. "%1 died because that's why.",
  145. "%1 died because %1 was very unlucky.",
  146. "%1 died due to Arma bugs and is probably very salty right now.",
  147. "%1 died an awkward death.",
  148. "%1 died because he died.",
  149. "%1 died because he likes Fortnite.",
  150. "%1 died. Yes, %1 is dead. Like really dead-dead."
  151. ];
  152. _countDeath = true;
  153. _systemChat = format [selectRandom _unknownReasons, name _victim];
  154. ["Exile","Unknown",_killer,_victim] call _XG_fnc_Send_Killed;
  155. _newVictimRespect = _oldVictimRespect - round ((abs _oldVictimRespect) / 100 * (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Percentages" >> "unlucky")));
  156. _logStat = false;
  157. };
  158. case 1:
  159. {
  160. private["_zombieKill"];
  161. _victimPosition = position _victim;
  162. _bystanders = _victimPosition nearEntities ['Man',5];
  163. _zombieKill = false;
  164. {
  165. _zombieKill = getText(configFile >> 'CfgVehicles' >> typeOf _x >> 'author') isEqualTo 'Ryan';
  166. } forEach _bystanders;
  167.  
  168. if(_zombieKill) then
  169. {
  170. _countDeath = false;
  171. _modifyVictimRespect = true;
  172. _zombieDeath = selectRandom ["was killed", "was eaten", "got absolutely obliterated"]; //Add more messages here to change the killed text
  173. _systemChat = format ["%1 %2 by a zombie!", name _victim, _zombieDeath];
  174. _newVictimRespect = _oldVictimRespect - round ((abs _oldVictimRespect) / 100 * (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Percentages" >> "suicide")));
  175. ["Exile","Zombie",_killer,_victim] call _XG_fnc_Send_Killed;
  176. }
  177. else
  178. {
  179. _countDeath = false;
  180. _modifyVictimRespect = true;
  181. _systemChat = format ["%1 commited suicide!", name _victim];
  182. _newVictimRespect = _oldVictimRespect - round ((abs _oldVictimRespect) / 100 * (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Percentages" >> "suicide")));
  183. ["Exile","Suicide",_killer,_victim] call _XG_fnc_Send_Killed;
  184. _logStat = false;
  185. };
  186. };
  187.  
  188. case 2:
  189. {
  190. _countDeath = false;
  191. _countKill = false;
  192. _systemChat = format ["%1 died while playing Russian Roulette!", name _victim];
  193. ["Exile","Roulette",_killer,_victim] call _XG_fnc_Send_Killed;
  194. _newVictimRespect = _oldVictimRespect;
  195. _victim call ExileServer_system_russianRoulette_event_onPlayerDied;
  196. _logStat = false;
  197. };
  198. case 3:
  199. {
  200. _countDeath = false;
  201. _countKill = false;
  202. _systemChat = format ["%1 crashed to death!", name _victim];
  203. ["Exile","Crashed",_killer,_victim] call _XG_fnc_Send_Killed;
  204. _newVictimRespect = _oldVictimRespect - round ((abs _oldVictimRespect) / 100 * (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Percentages" >> "crash")));
  205. _logStat = false;
  206. };
  207. case 4:
  208. {
  209. _countDeath = false;
  210. _countKill = false;
  211. _systemChat = format ["%1 was killed by an NPC!", name _victim];
  212. ["Exile","NPC",_killer,_victim] call _XG_fnc_Send_Killed;
  213. _newVictimRespect = _oldVictimRespect - round ((abs _oldVictimRespect) / 100 * (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Percentages" >> "npc")));
  214. _killerNPC = 1;
  215. _logStat = true;
  216. };
  217. case 5:
  218. {
  219. _countDeath = false;
  220. _countKill = false;
  221. _systemChat = format ["%2 team-killed %1!", name _victim, name _killingPlayer];
  222. ["Exile","TK",_killer,_victim] call _XG_fnc_Send_Killed;
  223. _systemChat call _XG_fnc_Send_Killed;
  224. _respectLoss = round ((abs _oldKillerRespect) / 100 * (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Percentages" >> "friendyFire")));
  225. _newKillerRespect = _oldKillerRespect - _respectLoss;
  226. _killSummary pushBack ["FRIENDLY FIRE", -1 * _respectLoss];
  227. _logStat = false;
  228. };
  229. case 6:
  230. {
  231. _countDeath = false;
  232. _countKill = false;
  233. _systemChat = format ["%2 killed %1! (BAMBI SLAYER)", name _victim, name _killingPlayer];
  234. ["Exile","BAMBI",_killer,_victim] call _XG_fnc_Send_Killed;
  235. _respectLoss = round ((abs _oldKillerRespect) / 100 * (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Percentages" >> "bambiKill")));
  236. _newKillerRespect = _oldKillerRespect - _respectLoss;
  237. _killSummary pushBack ["BAMBI SLAYER", -1 * _respectLoss];
  238. _bambislayer = 1;
  239. _logStat = true;
  240. diag_log "[STAT TRACKER] BAMBI KILLED!";
  241. };
  242. case 7:
  243. {
  244. _logStat = true;
  245. private["_weapon","_weaponDisplayName","_weaponScope","_weaponScopeDisplayName","_vehicle"];
  246. _countDeath = true;
  247. _countKill = true;
  248. _perks = [_victim, _killer, _killingPlayer] call ExileServer_util_getFragPerks;
  249. _minRespectTransfer = getNumber (configFile >> "CfgSettings" >> "Respect" >> "minRespectTransfer");
  250. _respectTransfer = round ((abs _oldVictimRespect) / 100 * (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Percentages" >> "frag")));
  251. _respectTransferVictim = round ((abs _oldVictimRespect) / 100 * (getNumber (configFile >> "CfgSettings" >> "Respect" >> "Percentages" >> "fragvictim")));
  252. // _weapon = currentWeapon _killer;
  253. if !((vehicle _killer) isEqualTo _killer) then
  254. {
  255. _weapon = currentWeapon (gunner (vehicle _killer));
  256. };
  257.  
  258.  
  259.  
  260. _weapon = currentWeapon _killer;
  261. if (currentWeapon _killer isEqualTo secondaryWeapon _killer && {!((primaryWeapon _killer) isEqualTo "")} || (currentWeapon _killer isEqualTo "Binocular") || (currentWeapon _killer isEqualTo "Rangefinder")) then
  262. {
  263. _weapon = primaryWeapon _killer;
  264. };
  265.  
  266. _weaponDisplayName = getText (configfile >> "CfgWeapons" >> _weapon >> "displayName");
  267.  
  268.  
  269. _weaponScope = "";
  270. _weaponScopeDisplayName = "Iron Sights";
  271. if ((vehicle _killer) isEqualTo _killer) then
  272. {
  273. _weaponScope = (_killer weaponAccessories (currentWeapon _killer)) select 2;
  274. if !(_weaponScope isEqualTo "") then
  275. {
  276. _weaponScopeDisplayName = getText (configfile >> "CfgWeapons" >> _weaponScope >> "displayName");
  277. };
  278. };
  279.  
  280. if (_respectTransfer < _minRespectTransfer) then
  281. {
  282. _respectTransfer = _minRespectTransfer;
  283. };
  284. _newVictimRespect = _oldVictimRespect - _respectTransferVictim; // NEW VARIABLE 10% VICTIM
  285. _newKillerRespect = _oldKillerRespect + _respectTransfer;
  286. _killSummary pushBack ["ENEMY FRAGGED", _respectTransfer];
  287. if (_perks isEqualTo []) then
  288. {
  289. if ((vehicle _killer) isEqualTo _killer) then
  290. {
  291. _systemChat = format ["%2 killed %1 with a %3 (%4)", name _victim, name _killingPlayer, _weaponDisplayName, _weaponScopeDisplayName];
  292. }
  293. else
  294. {
  295. _systemChat = format ["%2 killed %1", name _victim, name _killingPlayer];
  296. };
  297. [_killer,_victim] call _XG_Fnc_Killed_Handle;
  298. }
  299. else
  300. {
  301. if ((vehicle _killer) isEqualTo _killer) then
  302. {
  303. _perkNames = [];
  304. {
  305. _perkNames pushBack (_x select 0);
  306. _killSummary pushBack _x;
  307. _newKillerRespect = _newKillerRespect + (_x select 1);
  308. }
  309. forEach _perks;
  310. _systemChat = format ["%2 killed %1 with a %3 (%4)! (%5)", name _victim, name _killingPlayer, _weaponDisplayName, _weaponScopeDisplayName, _perkNames joinString ", "];
  311. [_killer,_victim] call _XG_Fnc_Killed_Handle;
  312. }
  313. else
  314. {
  315. _perkNames = [];
  316. {
  317. _perkNames pushBack (_x select 0);
  318. _killSummary pushBack _x;
  319. _newKillerRespect = _newKillerRespect + (_x select 1);
  320. }
  321. forEach _perks;
  322. _systemChat = format ["%2 killed %1! (%3)", name _victim, name _killingPlayer, _perkNames joinString ", "];
  323. [_killer,_victim] call _XG_Fnc_Killed_Handle;
  324. };
  325. };
  326. // ROADKILL TEST
  327. if !(_vehicle isEqualTo _killingPlayer) then
  328. {
  329. _vehicleRole = _killingPlayer call ExileClient_util_vehicle_getRole;
  330. switch (_vehicleRole) do
  331. {
  332. case "driver":
  333. {
  334. _weapontxt = "RoadKill";
  335. };
  336. };
  337. _systemChat = format ["%2 drove over %1! *SPLAT*", name _victim, name _killingPlayer];
  338. [_killer,_victim] call _XG_Fnc_Killed_Handle;
  339. };
  340. // ROADKILL TEST
  341.  
  342. };
  343. };
  344. if !(isNull _killingPlayer) then
  345. {
  346. if !(_killSummary isEqualTo []) then
  347. {
  348. [_killingPlayer, "showFragRequest", [_killSummary]] call ExileServer_system_network_send_to;
  349. };
  350. };
  351. if !(isNull _killingPlayer) then
  352. {
  353. _killerStatsNeedUpdate = false;
  354. if (_countKill) then
  355. {
  356. _newKillerFrags = _killingPlayer getVariable ["ExileKills", 0];
  357. _newKillerFrags = _newKillerFrags + 1;
  358. _killerStatsNeedUpdate = true;
  359. _killingPlayer setVariable ["ExileKills", _newKillerFrags];
  360. format["addAccountKill:%1", getPlayerUID _killingPlayer] call ExileServer_system_database_query_fireAndForget;
  361. };
  362. if !(_newKillerRespect isEqualTo _oldKillerRespect) then
  363. {
  364. _killingPlayer setVariable ["ExileScore", _newKillerRespect];
  365. _killerStatsNeedUpdate = true;
  366. format["setAccountScore:%1:%2", _newKillerRespect, getPlayerUID _killingPlayer] call ExileServer_system_database_query_fireAndForget;
  367. };
  368. if (_killerStatsNeedUpdate) then
  369. {
  370. _killingPlayer call ExileServer_object_player_sendStatsUpdate;
  371. };
  372. };
  373. _victimStatsNeedUpdate = false;
  374. if (_countDeath) then
  375. {
  376. _newVictimDeaths = _victim getVariable ["ExileDeaths", 0];
  377. _newVictimDeaths = _newVictimDeaths + 1;
  378. _victim setVariable ["ExileDeaths", _newVictimDeaths];
  379. _victimStatsNeedUpdate = true;
  380. format["addAccountDeath:%1", getPlayerUID _victim] call ExileServer_system_database_query_fireAndForget;
  381. };
  382. if !(_newVictimRespect isEqualTo _oldVictimRespect) then
  383. {
  384. _victim setVariable ["ExileScore", _newVictimRespect];
  385. _victimStatsNeedUpdate = true;
  386. format["setAccountScore:%1:%2", _newVictimRespect, getPlayerUID _victim] call ExileServer_system_database_query_fireAndForget;
  387. };
  388. if (_victimStatsNeedUpdate) then
  389. {
  390. _victim call ExileServer_object_player_sendStatsUpdate;
  391. };
  392. if ((vehicle _victim) isEqualTo _victim) then
  393. {
  394. if !(underwater _victim) then
  395. {
  396. if !(_victim call ExileClient_util_world_isInTraderZone) then
  397. {
  398. _victim call ExileServer_object_flies_spawn;
  399. };
  400. };
  401. };
  402. if !(_systemChat isEqualTo "") then
  403. {
  404. if ((getNumber (configFile >> "CfgSettings" >> "KillFeed" >> "showKillFeed")) isEqualTo 1) then
  405. {
  406. ["systemChatRequest", [_systemChat]] call ExileServer_system_network_send_broadcast;
  407. };
  408. };
  409. if !(_systemChat isEqualTo "") then
  410. {
  411. if ((getNumber (configFile >> "CfgSettings" >> "Logging" >> "deathLogging")) isEqualTo 1) then
  412. {
  413. "extDB2" callExtension format["1:DEATH:%1", _systemChat];
  414. ['A3_KILL_LOG',_systemChat] call FNC_A3_CUSTOMLOG;
  415. _weapon = currentWeapon _killer;
  416. _weapontxt = (gettext (configFile >> 'cfgWeapons' >> _weapon >> 'displayName'));
  417. _distance = floor(_victim distance _killer);
  418. _killerID = (getPlayerUID _killer);
  419. _vehicle = vehicle _killingPlayer;
  420.  
  421. _territory = _killer call ExileClient_util_world_getTerritoryAtPosition;
  422. if(!isNull _territory)then
  423. {
  424. if((getPlayerUID _killer) in (_territory getVariable ["ExileTerritoryBuildRights",[]]))then
  425. {
  426. _territoryKill = 1;
  427. };
  428. };
  429.  
  430. _flagNextToVictim = _victim call ExileClient_util_world_getTerritoryAtPosition;
  431. if !(isNull _flagNextToVictim) then
  432. {
  433. if ((getPlayerUID _victim) in (_flagNextToVictim getVariable ["ExileTerritoryBuildRights", []])) then
  434. {
  435. _raidKill = 1;
  436. };
  437. };
  438.  
  439. if !(_vehicle isEqualTo _killingPlayer) then
  440. {
  441. _vehicleRole = _killingPlayer call ExileClient_util_vehicle_getRole;
  442. switch (_vehicleRole) do
  443. {
  444. case "driver":
  445. {
  446. _weapontxt = "RoadKill";
  447. };
  448. };
  449. };
  450. if (_killerNPC == 1) then {
  451. _killerID = "NPC";
  452.  
  453. };
  454. if (_logStat) then {
  455. if (_weapontxt == "") then {
  456. _weapontxt = "Explosive";
  457. };
  458. format["updatePlayerStats:%1:%2:%3:%4:%5:%6:%7", _killerID, (getPlayerUID _victim), _weapontxt, _distance, _bambislayer, _territoryKill, _raidKill ] call ExileServer_system_database_query_fireAndForget;
  459. diag_log format ["[STAT TRACKER] weapon used for kill: %1!", _weapontxt];
  460.  
  461. };
  462. _logStat = true;
  463. _bambislayer = 0;
  464. _killerNPC = 0;
  465. _territoryKill = 0;
  466. _raidKill = 0;
  467. };
  468. };
  469. _victimPosition = getPos _victim;
  470. 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;
  471. format["deletePlayer:%1", _victim getVariable ["ExileDatabaseId", -1]] call ExileServer_system_database_query_fireAndForget;
  472. true
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement