/* * Author: Needles * https://steamcommunity.com/profiles/76561198026257137/ */ ::Debug.Print("*** HOOKS"); ::Hooks <- {}; function Hooks::OnGameEvent_round_start(params) { } function Hooks::OnGameEvent_player_spawn(params) { ::Events.GetGlobalEvent(EVENT.PLAYER_SPAWN).FireListeners(params); ::Handler.HandleEvent(EVENT.PLAYER_SPAWN, params); local player = GetPlayerFromUserID(params.userid); EntFireByHandle(player, "RunScriptCode", "::Events.GetGlobalEvent(EVENT.PLAYER_SPAWN_POST).FireListeners({player = self}); ::Handler.HandleEvent(EVENT.PLAYER_SPAWN_POST, {player = self});", 0.0, null, null); // Evaluated at end of frame } function Hooks::OnGameEvent_player_death(params) { ::Events.GetGlobalEvent(EVENT.PLAYER_DEATH).FireListeners(params); ::Handler.HandleEvent(EVENT.PLAYER_DEATH, params); local player = GetPlayerFromUserID(params.userid); EntFireByHandle(player, "RunScriptCode", "::Events.GetGlobalEvent(EVENT.PLAYER_DEATH_POST).FireListeners({player = self}); ::Handler.HandleEvent(EVENT.PLAYER_DEATH_POST, {player = self});", 0.0, null, null); // Evaluated at end of frame } function Hooks::OnGameEvent_player_hurt(params) { local newParams = { const_entity = GetPlayerFromUserID(params.userid), health = params.health, damage = params.damageamount, attacker = GetPlayerFromUserID(params.attacker), weaponid = ("weaponid" in params ? params.weaponid : -1), }; ::Events.GetGlobalEvent(EVENT.DAMAGE_POST).FireListeners(newParams); ::Handler.HandleEvent(EVENT.DAMAGE_POST, newParams); } function Hooks::OnGameEvent_npc_hurt(params) { local newParams = { const_entity = EntIndexToHScript(params.entindex), health = params.health, damage = params.damageamount, attacker = GetPlayerFromUserID(params.attacker_player), weaponid = ("weaponid" in params ? params.weaponid : -1), }; ::Events.GetGlobalEvent(EVENT.DAMAGE_POST).FireListeners(newParams); ::Handler.HandleEvent(EVENT.DAMAGE_POST, newParams); } function Hooks::OnScriptHook_OnTakeDamage(params) { if (params.weapon != null && params.weapon.IsValid() == true) params.idef <- ::Weapons.GetItemDefintionIndex(params.weapon); else params.idef <- -1; params.crit <- CRIT_TYPE.NONE; ::Events.GetGlobalEvent(EVENT.DAMAGE_PRE).FireListeners(params); ::Handler.HandleEvent(EVENT.DAMAGE_PRE, params); } function Hooks::OnGameEvent_mvm_begin_wave(params) { ::Events.GetGlobalEvent(EVENT.WAVE_START).FireListeners(params); ::Handler.HandleEvent(EVENT.WAVE_START, params); } function Hooks::OnGameEvent_mvm_wave_complete(params) { ::Events.GetGlobalEvent(EVENT.WAVE_END).FireListeners(params); ::Handler.HandleEvent(EVENT.WAVE_END, params); } function Hooks::OnGameEvent_player_connect(params) { ::Events.GetGlobalEvent(EVENT.PLAYER_CONNECT).FireListeners(params); ::Handler.HandleEvent(EVENT.PLAYER_CONNECT, params); } function Hooks::OnGameEvent_player_disconnect(params) { ::Events.GetGlobalEvent(EVENT.PLAYER_DISCONNECT).FireListeners(params); ::Handler.HandleEvent(EVENT.PLAYER_DISCONNECT, params); } /* * Destroy the event tick helper entity if it already exists. */ if ("EventTickEnt" in getroottable()) { ::Debug.Print("*** HOOKS - Killing existing event tick helper entity."); if (::EventTickEnt != null && ::EventTickEnt.IsValid()) ::EventTickEnt.Kill(); } /* * Spawn and initialize the event tick helper entity. */ ::EventTickEnt <- SpawnEntityFromTable("env_glow", { targetname = "needles_event_tick_helper", }); ::EventTickEnt.ValidateScriptScope(); ::EventTickEnt.GetScriptScope().prevTickTime <- Time(); ::EventTickEnt.GetScriptScope().EventTick <- function() { local params = {time = Time() - prevTickTime}; ::Events.GetGlobalEvent(EVENT.TICK).FireListeners(params); ::Handler.HandleEvent(EVENT.TICK, params); prevTickTime = Time(); } AddThinkToEnt(::EventTickEnt, "EventTick"); __CollectGameEventCallbacks(::Hooks);