Advertisement
ardwin22

DGCore_fnc_addEventHandlers

Oct 11th, 2024
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQF 4.94 KB | Gaming | 0 0
  1. /*
  2.  
  3.     DGCore_fnc_addEventHandlers
  4.  
  5.     Purpose: adds eventhandlers to spawned AI
  6.  
  7.     Parameters:
  8.         _unit: AI unit
  9.         _killed: Add the MPKILLED event handler to this unit. DEFAULT=true
  10.  
  11.     Example: [_unit, true] call DGCore_fnc_addEventHandlers;
  12.  
  13.     Returns: None
  14.  
  15.     Copyright 2023 by Dagovax
  16. */
  17.  
  18. params[["_unit", objNull], ["_killed", true]];
  19. if(isNull _unit || !alive _unit) exitWith
  20. {
  21.     [format["Tried to add event handlers to <NULL> unit (or dead)! -> _unit = %1", _unit], "DGCore_fnc_addEventHandlers", "error"] call DGCore_fnc_log;
  22. };
  23. if(_killed) then
  24. {
  25.     _unit addMPEventHandler ["MPKILLED",  
  26.     {
  27.         _this spawn
  28.         {
  29.             params ["_unit", "_killer", "_instigator"];
  30.             _group = group _unit;
  31.             // if (isNull _killer || {isNull _instigator}) exitWith {};
  32.             if (side _group == DGCore_playerSide) then // This unit is from the same side as the player.
  33.             {
  34.                 _targetPlayer = _group getVariable ["_DGCore_targetPlayer", objNull];
  35.                 if(!isNil "_targetPlayer" && !isNull _targetPlayer && DGCore_EnableKillMessage) then
  36.                 {
  37.                     _left = [_group] call DGCore_fnc_countAI;
  38.                    
  39.                     _msg = format[
  40.                         "%1 lost group member %2! Only %3 group member(s) left!",
  41.                         name _targetPlayer,
  42.                         name _unit,
  43.                         _left
  44.                     ];
  45.                     [_msg] remoteExec["systemChat",-2];
  46.                 };
  47.             } else
  48.             {  
  49.                 _instigatorIsPlayer = false;
  50.                 if(isPlayer _instigator) then
  51.                 {
  52.                     _instigatorIsPlayer = true;
  53.                 };
  54.                 if(!_instigatorIsPlayer) then
  55.                 {
  56.                     {
  57.                         if(_instigator isKindOf _x) then
  58.                         {
  59.                             _instigatorIsPlayer = true;
  60.                         };
  61.                     } forEach DG_playerUnitTypes;
  62.                 };
  63.                 if (_instigatorIsPlayer) then
  64.                 {
  65.                     if(DGCore_EnableKillMessage) then
  66.                     {
  67.                         ["FD_CP_Clear_F"] remoteExec ["playSound",_instigator];
  68.                         _killerVehicle = objectParent _instigator;
  69.                         private ["_killerWeapon", "_weaponMsg", "_killDistance", "_distMsg"];
  70.                         _killDistance = _unit distance _instigator;
  71.                         if(!isNull _killerVehicle) then
  72.                         {
  73.                             _killerWeapon = getText (configFile >> "CfgVehicles" >> (typeOf _killerVehicle) >> "displayName");
  74.                         }
  75.                         else
  76.                         {
  77.                             _killerWeapon = getText(configFile >> "CfgWeapons" >> currentWeapon _instigator >> "displayName");
  78.                         };
  79.                         if(isNil "_killerWeapon" || _killerWeapon isEqualTo "") then
  80.                         {
  81.                             _weaponMsg = "";
  82.                         } else
  83.                         {
  84.                             _weaponMsg = format[" with %1", _killerWeapon];
  85.                         };
  86.                        
  87.                         if(isNil "_killDistance" || _killDistance isEqualTo "") then
  88.                         {
  89.                             _distMsg = "";
  90.                         } else
  91.                         {
  92.                             _distMsg = format[" at %1 meters", round(_killDistance)];
  93.                         };
  94.                        
  95.                         _msg = format[
  96.                             "%1 killed %2 (AI)%3%4!",
  97.                             name _instigator,
  98.                             name _unit,
  99.                             _weaponMsg,
  100.                             _distMsg
  101.                         ];
  102.                         [_msg] remoteExec["systemChat",-2];
  103.                     };
  104.  
  105.                     [_instigator, 25] call DGCore_fnc_giveTakeTabs; // Increase the Poptabs for this player
  106.                     [_instigator, 50] call DGCore_fnc_giveTakeRespect; // Increase the Respect for this player
  107.                 } else
  108.                 {
  109.                     // Check if intigator is in player group
  110.                     _instigatorGroup = group _instigator;
  111.                     _targetPlayer = _instigatorGroup getVariable "DGCore_targetPlayer";
  112.                     if(isNil "_targetPlayer") exitWith{};
  113.                     if(!isNull _targetPlayer && (_targetPlayer in units _instigatorGroup)) then // Target Player is part of this group
  114.                     {
  115.                         if(DGCore_EnableKillMessage) then
  116.                         {
  117.                             ["FD_CP_Clear_F"] remoteExec ["playSound",_targetPlayer];
  118.                             _killerVehicle = objectParent _instigator;
  119.                             private ["_killerWeapon", "_weaponMsg", "_killDistance", "_distMsg"];
  120.                             _killDistance = _unit distance _instigator;
  121.                             if(!isNull _killerVehicle) then
  122.                             {
  123.                                 _killerWeapon = getText (configFile >> "CfgVehicles" >> (typeOf _killerVehicle) >> "displayName");
  124.                             }
  125.                             else
  126.                             {
  127.                                 _killerWeapon = getText(configFile >> "CfgWeapons" >> currentWeapon _instigator >> "displayName");
  128.                             };
  129.                             if(isNil "_killerWeapon" || _killerWeapon isEqualTo "") then
  130.                             {
  131.                                 _weaponMsg = "";
  132.                             } else
  133.                             {
  134.                                 _weaponMsg = format[" with %1", _killerWeapon];
  135.                             };
  136.                            
  137.                             if(isNil "_killDistance" || _killDistance isEqualTo "") then
  138.                             {
  139.                                 _distMsg = "";
  140.                             } else
  141.                             {
  142.                                 _distMsg = format[" at %1 meters", round(_killDistance)];
  143.                             };
  144.                            
  145.                             _msg = format[
  146.                                 "%1 (AI group member of %2) killed %3 (AI)%4%5!",
  147.                                 name _instigator,
  148.                                 name _targetPlayer,
  149.                                 name _unit,
  150.                                 _weaponMsg,
  151.                                 _distMsg
  152.                             ];
  153.                             [_msg] remoteExec["systemChat",-2];
  154.                         };
  155.                         [_targetPlayer, 1] call DGCore_fnc_updatePlayerKills; // Increase the score for this player
  156.                         [_targetPlayer, 25] call DGCore_fnc_giveTakeTabs; // Increase the Poptabs for this player
  157.                         [_targetPlayer, 50] call DGCore_fnc_giveTakeRespect; // Increase the Respect for this player
  158.                     };
  159.                 };
  160.             };
  161.         };
  162.     }];
  163. };
  164.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement