/* * Author: Needles * https://steamcommunity.com/profiles/76561198026257137/ */ printl("*** HANDLER/WEAPON_INTERACTION"); local WeaponInteractionHandler = class extends ::Handler.BaseHandler { /* BASE CLASS self = The entity that the handler is assigned to activator = The entity that assigned the handler time = When this handler was assigned */ jarDetectionRadius = null; constructor() { base.constructor(); jarDetectionRadius = 64.0; } function OnEvent_EntTrackerKill(params) { if (self == null || self.IsValid() == false) return; if ((params.origin - self.GetOrigin()).LengthSqr() > pow(::Const.WEAPON_JAR_RADIUS + jarDetectionRadius, 2)) return; local handlerId = "none"; switch (params.classname) { case "tf_projectile_jar": handlerId = "jarate"; break; case "tf_projectile_jar_milk": handlerId = "milk"; break; case "tf_projectile_jar_gas": handlerId = "gas"; break; default: return; } ::Handler.AddHandler(self, handlerId, params.owner, ::Const.WEAPON_JAR_DURATION); } function OnEvent_DamagePre(params) { if (params.const_entity != self) return; switch (params.idef) { case ITEM_DEFINITION_INDEX.BLUTSAUGER: ::Players.HealPlayer(params.attacker, params.attacker, ::Const.WEAPON_BLUTSAUGER_HEAL); break; case ITEM_DEFINITION_INDEX.PRETTY_BOYS_POCKET_PISTOL: ::Players.HealPlayer(params.attacker, params.attacker, ::Const.WEAPON_PRETTY_BOYS_POCKET_PISTOL_HEAL); break; case ITEM_DEFINITION_INDEX.FAN_O_WAR: ::Handler.AddHandler(self, "mark", params.attacker, ::Const.WEAPON_MARK_FOR_DEATH_DURATION); break; case ITEM_DEFINITION_INDEX.SYDNEY_SLEEPER: local charge = NetProps.GetPropFloat(params.weapon, "SniperRifleLocalData.m_flChargedDamage"); if (charge > 0.0) { local sydneyDuration = ::Const.WEAPON_SYDNEY_DURATION_MIN + (charge / ::Const.SNIPER_CHARGE_MAX) * (::Const.WEAPON_SYDNEY_DURATION_MAX - ::Const.WEAPON_SYDNEY_DURATION_MIN); ::Handler.AddHandler(self, "jarate", params.attacker, sydneyDuration); } break; } if ((params.damage_type & ::Const.FDMG_BURN) == ::Const.FDMG_BURN) ::Handler.AddHandler(self, "burn", params.attacker, ::Const.BURN_DURATION_MAX); } function OnEvent_DamagePost(params) { if (params.const_entity != self) return; switch (params.weaponid) { case ITEM_ID.BLACK_BOX: ::Players.HealPlayer( params.attacker, params.attacker, ::MathN.Min(::Const.WEAPON_BLACK_BOX_HEAL_MAX, params.damage / ::Const.WEAPON_BLACK_BOX_HEAL_THRESHOLD)); break; } } } ::Handler.RegisterHandler("weapon_interaction", @() WeaponInteractionHandler());