Advertisement
Guest User

Untitled

a guest
Mar 19th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.51 KB | None | 0 0
  1. #include <sourcemod>
  2. #include <sdktools>
  3. #include <sdkhooks>
  4. #include <clientprefs>
  5.  
  6. #define PLUGIN_VERSION "1.0"
  7.  
  8. #pragma semicolon 1
  9.  
  10. #define EF_NODRAW 32
  11.  
  12. bool g_bShowTriggers[MAXPLAYERS+1];
  13. bool g_bTriggersPref[MAXPLAYERS+1];
  14.  
  15. Handle g_hCookieTriggers;
  16.  
  17. int g_iTransmitCount;
  18.  
  19. public Plugin myinfo =
  20. {
  21. name = "Show Push Triggers",
  22. author = "ici, hlstriker, scoutkllr",
  23. description = "Make trigger_push brushes visible.",
  24. version = PLUGIN_VERSION,
  25. url = ""
  26. };
  27.  
  28. public void OnPluginStart()
  29. {
  30. g_hCookieTriggers = RegClientCookie("SMshowtriggersPush", "sm_showtriggers trigger_push", CookieAccess_Public);
  31.  
  32. RegConsoleCmd("sm_showtriggers", Cmd_ShowTriggers);
  33.  
  34. HookEvent("player_spawn", Event_Spawn);
  35.  
  36. for(int i = 1; i <= MaxClients; i++)
  37. {
  38. if (!AreClientCookiesCached(i) && IsValidClient(i))
  39. {
  40. continue;
  41. }
  42.  
  43. OnClientPostAdminCheck(i);
  44. OnClientCookiesCached(i);
  45. }
  46. }
  47.  
  48. public void OnClientCookiesCached(int client)
  49. {
  50. char sCookie[8];
  51.  
  52. GetClientCookie(client, g_hCookieTriggers, sCookie, sizeof(sCookie));
  53. g_bTriggersPref[client] = view_as<bool>(StringToInt(sCookie));
  54. }
  55.  
  56. public void OnClientPostAdminCheck(int client)
  57. {
  58. if (AreClientCookiesCached(client))
  59. {
  60. if (!g_bShowTriggers[client] && g_bTriggersPref[client])
  61. {
  62. g_bShowTriggers[client] = !g_bShowTriggers[client];
  63. ++g_iTransmitCount;
  64. transmitTriggers( g_iTransmitCount > 0 );
  65. }
  66. }
  67. }
  68.  
  69. public Action Event_Spawn(Event event, const char[] name, bool dontBroadcast)
  70. {
  71. for(int client = 1; client <= MaxClients; client++)
  72. {
  73. if (g_bShowTriggers[client])
  74. {
  75. --g_iTransmitCount;
  76. transmitTriggers( g_iTransmitCount > 0 );
  77.  
  78. ++g_iTransmitCount;
  79. transmitTriggers( g_iTransmitCount > 0 );
  80. }
  81. }
  82. }
  83.  
  84. public Action Cmd_ShowTriggers(int client, int args)
  85. {
  86. if (!client)
  87. {
  88. return Plugin_Handled;
  89. }
  90.  
  91. g_bShowTriggers[client] = !g_bShowTriggers[client];
  92. SetCookie(client, g_hCookieTriggers, g_bShowTriggers[client]);
  93.  
  94. if (g_bShowTriggers[client])
  95. {
  96. ++g_iTransmitCount;
  97. PrintToChat(client, "[SM] Showing trigger brushes.");
  98. }
  99. else
  100. {
  101. --g_iTransmitCount;
  102. PrintToChat(client, "[SM] Stopped showing trigger brushes.");
  103. }
  104.  
  105. transmitTriggers( g_iTransmitCount > 0 );
  106.  
  107. return Plugin_Handled;
  108. }
  109.  
  110. public void OnClientDisconnect_Post(int client)
  111. {
  112. if (g_bShowTriggers[client])
  113. {
  114. g_bShowTriggers[client] = false;
  115. g_bTriggersPref[client] = false;
  116.  
  117. --g_iTransmitCount;
  118. transmitTriggers( g_iTransmitCount > 0 );
  119. }
  120. }
  121.  
  122. void transmitTriggers(bool transmit)
  123. {
  124. static bool s_bHooked = false;
  125.  
  126. if (s_bHooked == transmit)
  127. {
  128. return;
  129. }
  130.  
  131. char sBuffer[16], sClassName[64];
  132.  
  133. int lastEdictInUse = GetEntityCount();
  134. for (int entity = MaxClients+1; entity <= lastEdictInUse; ++entity)
  135. {
  136. if ( !IsValidEdict(entity) )
  137. {
  138. continue;
  139. }
  140.  
  141. if(!GetEntityClassname(entity, sClassName, sizeof(sClassName)))
  142. {
  143. continue;
  144. }
  145.  
  146. GetEntPropString(entity, Prop_Data, "m_ModelName", sBuffer, 2);
  147. if (sBuffer[0] != '*')
  148. {
  149. continue;
  150. }
  151.  
  152. if(!StrEqual(sClassName, "trigger_push"))
  153. {
  154. continue;
  155. }
  156.  
  157. if (transmit)
  158. {
  159. SetVisibility(entity, {0, 255, 255, 100});
  160.  
  161. SDKHook(entity, SDKHook_SetTransmit, Hook_SetTransmit);
  162. }
  163. else
  164. {
  165. SetEdictFlags(entity, FL_EDICT_FULL | FL_EDICT_DONTSEND);
  166. SetEntProp(entity, Prop_Send, "m_fEffects", GetEntProp(entity, Prop_Send, "m_fEffects") | EF_NODRAW);
  167.  
  168. SDKUnhook(entity, SDKHook_SetTransmit, Hook_SetTransmit);
  169. }
  170. }
  171.  
  172. s_bHooked = transmit;
  173. }
  174.  
  175. void SetVisibility(int entity, const iColor[4]={0,0,0,0})
  176. {
  177. SetEdictFlags(entity, FL_EDICT_FULL | FL_EDICT_ALWAYS);
  178. SetEntProp(entity, Prop_Send, "m_fEffects", GetEntProp(entity, Prop_Send, "m_fEffects") & ~EF_NODRAW);
  179.  
  180. SetEntityRenderFx(entity, RENDERFX_NONE);
  181. SetEntityRenderMode(entity, RENDER_TRANSALPHA);
  182. SetEntityRenderColor(entity, iColor[0], iColor[1], iColor[2], iColor[3]);
  183. }
  184.  
  185. public Action Hook_SetTransmit(int entity, int client)
  186. {
  187. if (!g_bShowTriggers[client])
  188. {
  189. return Plugin_Handled;
  190. }
  191.  
  192. return Plugin_Continue;
  193. }
  194.  
  195. stock void SetCookie(int client, Handle hCookie, int n)
  196. {
  197. char sCookie[64];
  198.  
  199. IntToString(n, sCookie, sizeof(sCookie));
  200.  
  201. SetClientCookie(client, hCookie, sCookie);
  202. }
  203.  
  204. bool IsValidClient(int client, bool bAllowBots = false)
  205. {
  206. if(!(1 <= client <= MaxClients) || !IsClientInGame(client) || (IsFakeClient(client) && !bAllowBots) || IsClientSourceTV(client) || IsClientReplay(client))
  207. {
  208. return false;
  209. }
  210. return true;
  211. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement