/* * Author: Needles * https://steamcommunity.com/profiles/76561198026257137/ * * Big thanks to Braindawg * https://steamcommunity.com/id/HahaMoreLikeBraindead/ */ ::Debug.Print("*** RESPAWN_OVERRIDE"); if ("RespawnOverride" in getroottable()) { if (::RespawnOverride.ent_respawnOverride && ::RespawnOverride.ent_respawnOverride.IsValid()) { ::Debug.Print("*** RESPAWN_OVERRIDE - Destroying existing respawn_override entity " + ::RespawnOverride.ent_respawnOverride); ::RespawnOverride.ent_respawnOverride.Destroy(); } } ::RespawnOverride <- {}; ::RespawnOverride.ent_respawnOverride <- SpawnEntityFromTable("trigger_player_respawn_override", { RespawnTime = 0.0, // The time it takes to respawn RespawnName = "gamerules", // An entity that always exists spawnflags = 1, // Spawnflags determine what can touch this trigger. 1 = clients. }); local RespawnStartTouch = function() { return (activator == null) ? false : true; } local RespawnEndTouch = function() { return (activator == null) ? false : true; } ::RespawnOverride.ent_respawnOverride.ValidateScriptScope(); ::RespawnOverride.ent_respawnOverride.GetScriptScope().InputStartTouch <- RespawnStartTouch; ::RespawnOverride.ent_respawnOverride.GetScriptScope().Inputstarttouch <- RespawnStartTouch; ::RespawnOverride.ent_respawnOverride.GetScriptScope().InputEndTouch <- RespawnEndTouch; ::RespawnOverride.ent_respawnOverride.GetScriptScope().Inputendtouch <- RespawnEndTouch; ::RespawnOverride.playerList <- []; ::RespawnOverride.filterList <- [ ::Filter.BotFilter(false), ]; function RespawnOverride::SetRespawnOverride(respawnTime) { NetProps.SetPropFloat(::RespawnOverride.ent_respawnOverride, "m_flRespawnTime", respawnTime); } function RespawnOverride::AddPlayer(player) { if (::RespawnOverride.playerList.find(player) == null) { EntFireByHandle(::RespawnOverride.ent_respawnOverride, "starttouch", "!activator", -1.0, player, player); ::RespawnOverride.playerList.append(player); } } function RespawnOverride::RemovePlayer(player) { local index = ::RespawnOverride.playerList.find(player); if (index != null) { EntFireByHandle(::RespawnOverride.ent_respawnOverride, "endtouch", "!activator", -1.0, params.player, params.player); ::RespawnOverride.playerList.remove(index); } } function RespawnOverride::SetFilterList(filterList) { ::RespawnOverride.filterList = filterList; } ::Events.GetGlobalEvent(EVENT.PLAYER_SPAWN_POST).AddListener( function(params) { //local player = GetPlayerFromUserID(params.userid); if (::RespawnOverride.ent_respawnOverride == null || !::RespawnOverride.ent_respawnOverride.IsValid() || !::Players.IsPlayerValid(params.player)) { return; } foreach (filter in ::RespawnOverride.filterList) { if (!filter.Filter(params.player)) { return; } } ::Debug.Print("*** RESPAWN_OVERRIDE - Assigning on-spawn override to " + params.player); ::RespawnOverride.AddPlayer(params.player); }, PRIORITY.FIRST );