Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <sourcemod>
- #include <sdktools>
- #include <sdkhooks>
- #include <clientprefs>
- #define PLUGIN_VERSION "1.0"
- #pragma semicolon 1
- #define EF_NODRAW 32
- bool g_bShowTriggers[MAXPLAYERS+1];
- bool g_bTriggersPref[MAXPLAYERS+1];
- Handle g_hCookieTriggers;
- int g_iTransmitCount;
- public Plugin myinfo =
- {
- name = "Show Push Triggers",
- author = "ici, hlstriker, scoutkllr",
- description = "Make trigger_push brushes visible.",
- version = PLUGIN_VERSION,
- url = ""
- };
- public void OnPluginStart()
- {
- g_hCookieTriggers = RegClientCookie("SMshowtriggersPush", "sm_showtriggers trigger_push", CookieAccess_Public);
- RegConsoleCmd("sm_showtriggers", Cmd_ShowTriggers);
- HookEvent("player_spawn", Event_Spawn);
- for(int i = 1; i <= MaxClients; i++)
- {
- if (!AreClientCookiesCached(i) && IsValidClient(i))
- {
- continue;
- }
- OnClientPostAdminCheck(i);
- OnClientCookiesCached(i);
- }
- }
- public void OnClientCookiesCached(int client)
- {
- char sCookie[8];
- GetClientCookie(client, g_hCookieTriggers, sCookie, sizeof(sCookie));
- g_bTriggersPref[client] = view_as<bool>(StringToInt(sCookie));
- }
- public void OnClientPostAdminCheck(int client)
- {
- if (AreClientCookiesCached(client))
- {
- if (!g_bShowTriggers[client] && g_bTriggersPref[client])
- {
- g_bShowTriggers[client] = !g_bShowTriggers[client];
- ++g_iTransmitCount;
- transmitTriggers( g_iTransmitCount > 0 );
- }
- }
- }
- public Action Event_Spawn(Event event, const char[] name, bool dontBroadcast)
- {
- for(int client = 1; client <= MaxClients; client++)
- {
- if (g_bShowTriggers[client])
- {
- --g_iTransmitCount;
- transmitTriggers( g_iTransmitCount > 0 );
- ++g_iTransmitCount;
- transmitTriggers( g_iTransmitCount > 0 );
- }
- }
- }
- public Action Cmd_ShowTriggers(int client, int args)
- {
- if (!client)
- {
- return Plugin_Handled;
- }
- g_bShowTriggers[client] = !g_bShowTriggers[client];
- SetCookie(client, g_hCookieTriggers, g_bShowTriggers[client]);
- if (g_bShowTriggers[client])
- {
- ++g_iTransmitCount;
- PrintToChat(client, "[SM] Showing trigger brushes.");
- }
- else
- {
- --g_iTransmitCount;
- PrintToChat(client, "[SM] Stopped showing trigger brushes.");
- }
- transmitTriggers( g_iTransmitCount > 0 );
- return Plugin_Handled;
- }
- public void OnClientDisconnect_Post(int client)
- {
- if (g_bShowTriggers[client])
- {
- g_bShowTriggers[client] = false;
- g_bTriggersPref[client] = false;
- --g_iTransmitCount;
- transmitTriggers( g_iTransmitCount > 0 );
- }
- }
- void transmitTriggers(bool transmit)
- {
- static bool s_bHooked = false;
- if (s_bHooked == transmit)
- {
- return;
- }
- char sBuffer[16], sClassName[64];
- int lastEdictInUse = GetEntityCount();
- for (int entity = MaxClients+1; entity <= lastEdictInUse; ++entity)
- {
- if ( !IsValidEdict(entity) )
- {
- continue;
- }
- if(!GetEntityClassname(entity, sClassName, sizeof(sClassName)))
- {
- continue;
- }
- GetEntPropString(entity, Prop_Data, "m_ModelName", sBuffer, 2);
- if (sBuffer[0] != '*')
- {
- continue;
- }
- if(!StrEqual(sClassName, "trigger_push"))
- {
- continue;
- }
- if (transmit)
- {
- SetVisibility(entity, {0, 255, 255, 100});
- SDKHook(entity, SDKHook_SetTransmit, Hook_SetTransmit);
- }
- else
- {
- SetEdictFlags(entity, FL_EDICT_FULL | FL_EDICT_DONTSEND);
- SetEntProp(entity, Prop_Send, "m_fEffects", GetEntProp(entity, Prop_Send, "m_fEffects") | EF_NODRAW);
- SDKUnhook(entity, SDKHook_SetTransmit, Hook_SetTransmit);
- }
- }
- s_bHooked = transmit;
- }
- void SetVisibility(int entity, const iColor[4]={0,0,0,0})
- {
- SetEdictFlags(entity, FL_EDICT_FULL | FL_EDICT_ALWAYS);
- SetEntProp(entity, Prop_Send, "m_fEffects", GetEntProp(entity, Prop_Send, "m_fEffects") & ~EF_NODRAW);
- SetEntityRenderFx(entity, RENDERFX_NONE);
- SetEntityRenderMode(entity, RENDER_TRANSALPHA);
- SetEntityRenderColor(entity, iColor[0], iColor[1], iColor[2], iColor[3]);
- }
- public Action Hook_SetTransmit(int entity, int client)
- {
- if (!g_bShowTriggers[client])
- {
- return Plugin_Handled;
- }
- return Plugin_Continue;
- }
- stock void SetCookie(int client, Handle hCookie, int n)
- {
- char sCookie[64];
- IntToString(n, sCookie, sizeof(sCookie));
- SetClientCookie(client, hCookie, sCookie);
- }
- bool IsValidClient(int client, bool bAllowBots = false)
- {
- if(!(1 <= client <= MaxClients) || !IsClientInGame(client) || (IsFakeClient(client) && !bAllowBots) || IsClientSourceTV(client) || IsClientReplay(client))
- {
- return false;
- }
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement