Advertisement
Guest User

Untitled

a guest
Dec 14th, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.65 KB | None | 0 0
  1. #pragma semicolon 1
  2.  
  3. // ====[ INCLUDES ]============================================================
  4. #include <sourcemod>
  5.  
  6. // ====[ DEFINES ]=============================================================
  7. #define PLUGIN_NAME "Server Hud Logo"
  8. #define PLUGIN_VERSION "2.2"
  9. #define MAX_CHANNELS 12
  10.  
  11. // ====[ HANDLES | CVARS ]=====================================================
  12. new Handle:g_hCvarEnabled;
  13. new Handle:g_hHudSync[MAX_CHANNELS];
  14.  
  15. // ====[ VARIABLES ]===========================================================
  16. new bool:g_bCvarEnabled;
  17. new String:g_strConfigFile[255];
  18. new g_iRedValue[MAX_CHANNELS];
  19. new g_iGreenValue[MAX_CHANNELS];
  20. new g_iBlueValue[MAX_CHANNELS];
  21. new g_iAlphaValue[MAX_CHANNELS];
  22. new g_iEffectValue[MAX_CHANNELS];
  23. new bool:g_bChannelEnabled[MAX_CHANNELS];
  24. new bool:g_bTeamColor[MAX_CHANNELS];
  25. new Float:g_flHoldTime[MAX_CHANNELS];
  26. new Float:g_flXPosition[MAX_CHANNELS];
  27. new Float:g_flYPosition[MAX_CHANNELS];
  28. new Float:g_flStartTime[MAX_CHANNELS];
  29. new String:g_strMessage[MAX_CHANNELS][255];
  30.  
  31. // ====[ PLUGIN ]==============================================================
  32. public Plugin:myinfo =
  33. {
  34. name = PLUGIN_NAME,
  35. author = "ReFlex",
  36. description = "Add a custom hud logo for everyone to see",
  37. version = PLUGIN_VERSION,
  38. url = "http://forums.alliedmods.net/showthread.php?p=1664292"
  39. }
  40.  
  41. // ====[ EVENTS ]==============================================================
  42. public OnPluginStart()
  43. {
  44. CreateConVar("sm_logo_version", PLUGIN_VERSION, PLUGIN_NAME, FCVAR_PLUGIN | FCVAR_SPONLY | FCVAR_DONTRECORD | FCVAR_NOTIFY);
  45.  
  46. g_hCvarEnabled = CreateConVar("sm_logo_enabled", "1", "Enable Server Hud Logo\n0 = Disabled\n1 = Enabled", FCVAR_PLUGIN, true, 0.0, true, 1.0);
  47. g_bCvarEnabled = GetConVarBool(g_hCvarEnabled);
  48. HookConVarChange(g_hCvarEnabled, ConVarChange);
  49.  
  50. HookEvent("player_spawn", Event_PlayerSpawn);
  51. HookEvent("player_death", Event_PlayerDeath);
  52. HookEvent("player_team", Event_PlayerChangeTeam);
  53.  
  54. RegAdminCmd("sm_serverlogo_reload", Command_Reload, ADMFLAG_ROOT);
  55.  
  56. for(new iChannel = 0; iChannel < MAX_CHANNELS; iChannel++)
  57. {
  58. g_hHudSync[iChannel] = CreateHudSynchronizer();
  59. if(g_hHudSync[iChannel] == INVALID_HANDLE)
  60. SetFailState("HUD synchronisation is not supported by this mod");
  61. }
  62.  
  63. BuildPath(Path_SM, g_strConfigFile, sizeof(g_strConfigFile), "configs/serverhudlogo.cfg");
  64. }
  65.  
  66. public ConVarChange(Handle:hConvar, const String:strOldValue[], const String:strNewValue[])
  67. {
  68. if(hConvar == g_hCvarEnabled)
  69. g_bCvarEnabled = GetConVarBool(g_hCvarEnabled);
  70. }
  71.  
  72. public OnConfigsExecuted()
  73. {
  74. if(!FileExists(g_strConfigFile))
  75. {
  76. SetFailState("Configuration file %s not found!", g_strConfigFile);
  77. return;
  78. }
  79.  
  80. new Handle:hKeyValues = CreateKeyValues("Server Hud Logo");
  81. if(!FileToKeyValues(hKeyValues, g_strConfigFile) || !KvGotoFirstSubKey(hKeyValues))
  82. {
  83. SetFailState("Improper structure for configuration file %s!", g_strConfigFile);
  84. return;
  85. }
  86.  
  87. for(new iChannel = 0; iChannel < MAX_CHANNELS; iChannel++)
  88. {
  89. g_bChannelEnabled[iChannel] = false;
  90. g_iRedValue[iChannel] = 0;
  91. g_iGreenValue[iChannel] = 0;
  92. g_iBlueValue[iChannel] = 0;
  93. g_iAlphaValue[iChannel] = 0;
  94. g_iEffectValue[iChannel] = 0;
  95. g_bTeamColor[iChannel] = false;
  96. g_flHoldTime[iChannel] = 0.0;
  97. g_flXPosition[iChannel] = -1.0;
  98. g_flYPosition[iChannel] = -1.0;
  99. g_flStartTime[iChannel] = -1.0;
  100. strcopy(g_strMessage[iChannel], sizeof(g_strMessage[]), "");
  101. }
  102.  
  103. new iChannel;
  104. do
  105. {
  106. g_bChannelEnabled[iChannel] = true;
  107. g_iRedValue[iChannel] = KvGetNum(hKeyValues, "red");
  108. g_iGreenValue[iChannel] = KvGetNum(hKeyValues, "green");
  109. g_iBlueValue[iChannel] = KvGetNum(hKeyValues, "blue");
  110. g_iAlphaValue[iChannel] = KvGetNum(hKeyValues, "alpha");
  111. g_iEffectValue[iChannel] = KvGetNum(hKeyValues, "effect");
  112. g_bTeamColor[iChannel] = bool:KvGetNum(hKeyValues, "teamcolor");
  113. g_flHoldTime[iChannel] = KvGetFloat(hKeyValues, "holdtime");
  114. g_flXPosition[iChannel] = KvGetFloat(hKeyValues, "xposition");
  115. g_flYPosition[iChannel] = KvGetFloat(hKeyValues, "yposition");
  116. g_flStartTime[iChannel] = KvGetFloat(hKeyValues, "startime");
  117. KvGetString(hKeyValues, "message", g_strMessage[iChannel], sizeof(g_strMessage[]));
  118. iChannel++;
  119. }
  120. while(KvGotoNextKey(hKeyValues, false));
  121. CloseHandle(hKeyValues);
  122. }
  123.  
  124. public Action:Event_PlayerSpawn(Handle:hEvent, const String:strName[], bool:bBroadcast)
  125. {
  126. if(!g_bCvarEnabled)
  127. return;
  128.  
  129. new iClient = GetClientOfUserId(GetEventInt(hEvent, "userid"));
  130. ClearSyncHud(iClient, g_hHudSync[iChannel]);
  131.  
  132. for(new iChannel = 0; iChannel < MAX_CHANNELS; iChannel++)
  133. {
  134.  
  135. if(g_bChannelEnabled[iChannel])
  136. {
  137. new Handle:hDataPack;
  138. CreateDataTimer(g_flStartTime[iChannel], Timer_ServerHudLogo, hDataPack, TIMER_FLAG_NO_MAPCHANGE);
  139. WritePackCell(hDataPack, GetClientUserId(iClient));
  140. WritePackCell(hDataPack, iChannel);
  141. }
  142. }
  143. }
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150. public Action:Event_PlayerDeath(Handle:hEvent, const String:strName[], bool:bBroadcast)
  151. {
  152. new iClient = GetClientOfUserId(GetEventInt(hEvent, "userid"));
  153. if(!IsValidClient(iClient))
  154. return;
  155.  
  156. for(new iChannel = 0; iChannel < MAX_CHANNELS; iChannel++)
  157. ClearSyncHud(iClient, g_hHudSync[iChannel]);
  158. }
  159.  
  160. public Action:Event_PlayerChangeTeam(Handle:hEvent, const String:strName[], bool:bBroadcast)
  161. {
  162. if(!g_bCvarEnabled)
  163. return;
  164.  
  165. new iClient = GetClientOfUserId(GetEventInt(hEvent, "userid"));
  166. if(!IsValidClient(iClient) || IsFakeClient(iClient) || GetEventInt(hEvent, "team") > 1)
  167. return;
  168.  
  169. for(new iChannel = 0; iChannel < MAX_CHANNELS; iChannel++)
  170. {
  171. ClearSyncHud(iClient, g_hHudSync[iChannel]);
  172. if(g_bChannelEnabled[iChannel])
  173. {
  174. new Handle:hDataPack;
  175. CreateDataTimer(0.2, Timer_ServerHudLogo, hDataPack, TIMER_FLAG_NO_MAPCHANGE);
  176. WritePackCell(hDataPack, GetClientUserId(iClient));
  177. WritePackCell(hDataPack, iChannel);
  178. }
  179. }
  180. }
  181.  
  182. // ====[ COMMANDS ]============================================================
  183. public Action:Command_Reload(iClient, iArgs)
  184. {
  185. OnConfigsExecuted();
  186. ReplyToCommand(iClient, "[SM] Server Hud Logo config (%s) reloaded.", g_strConfigFile);
  187. }
  188.  
  189. // ====[ TIMERS ]==============================================================
  190. public Action:Timer_ServerHudLogo(Handle:hTimer, Handle:hDataPack)
  191. {
  192. if(!g_bCvarEnabled)
  193. return;
  194.  
  195. ResetPack(hDataPack);
  196.  
  197. new iUserId = ReadPackCell(hDataPack);
  198. new iClient = GetClientOfUserId(iUserId);
  199. if(!IsValidClient(iClient))
  200. return;
  201.  
  202. if(!IsPlayerAlive(iClient) && GetClientTeam(iClient) > 1)
  203. return;
  204.  
  205. new iChannel = ReadPackCell(hDataPack);
  206. if(!g_bChannelEnabled[iChannel])
  207. return;
  208.  
  209. if(g_bTeamColor[iChannel])
  210. {
  211. switch(GetClientTeam(iClient))
  212. {
  213. case 2:
  214. {
  215. if(g_flHoldTime[iChannel] >= 0 && g_flHoldTime[iChannel] < 1)
  216. SetHudTextParams(g_flXPosition[iChannel], g_flYPosition[iChannel], 604800.0, 255, 64, 64, g_iAlphaValue[iChannel], g_iEffectValue[iChannel]);
  217. else
  218. SetHudTextParams(g_flXPosition[iChannel], g_flYPosition[iChannel], g_flHoldTime[iChannel], 255, 64, 64, g_iAlphaValue[iChannel], g_iEffectValue[iChannel]);
  219. }
  220. case 3:
  221. {
  222. if(g_flHoldTime[iChannel] >= 0 && g_flHoldTime[iChannel] < 1)
  223. SetHudTextParams(g_flXPosition[iChannel], g_flYPosition[iChannel], 604800.0, 153, 204, 255, g_iAlphaValue[iChannel], g_iEffectValue[iChannel]);
  224. else
  225. SetHudTextParams(g_flXPosition[iChannel], g_flYPosition[iChannel], g_flHoldTime[iChannel], 153, 204, 255, g_iAlphaValue[iChannel], g_iEffectValue[iChannel]);
  226. }
  227. default:
  228. {
  229. if(g_flHoldTime[iChannel] >= 0 && g_flHoldTime[iChannel] < 1)
  230. SetHudTextParams(g_flXPosition[iChannel], g_flYPosition[iChannel], 604800.0, 204, 204, 204, g_iAlphaValue[iChannel], g_iEffectValue[iChannel]);
  231. else
  232. SetHudTextParams(g_flXPosition[iChannel], g_flYPosition[iChannel], g_flHoldTime[iChannel], 204, 204, 204, g_iAlphaValue[iChannel], g_iEffectValue[iChannel]);
  233. }
  234. }
  235. }
  236. else
  237. {
  238. if(g_flHoldTime[iChannel] >= 0 && g_flHoldTime[iChannel] < 1)
  239. SetHudTextParams(g_flXPosition[iChannel], g_flYPosition[iChannel], 604800.0, g_iRedValue[iChannel], g_iGreenValue[iChannel], g_iBlueValue[iChannel], g_iAlphaValue[iChannel], g_iEffectValue[iChannel]);
  240. else
  241. SetHudTextParams(g_flXPosition[iChannel], g_flYPosition[iChannel], g_flHoldTime[iChannel], g_iRedValue[iChannel], g_iGreenValue[iChannel], g_iBlueValue[iChannel], g_iAlphaValue[iChannel], g_iEffectValue[iChannel]);
  242. }
  243.  
  244. ShowSyncHudText(iClient, g_hHudSync[iChannel], g_strMessage[iChannel]);
  245. }
  246.  
  247. // ====[ STOCKS ]==============================================================
  248. stock bool:IsValidClient(iClient)
  249. {
  250. if(iClient <= 0 || iClient > MaxClients || !IsClientInGame(iClient))
  251. return false;
  252. return true;
  253. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement