Advertisement
supertimor

Untitled

Feb 12th, 2019
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.44 KB | None | 0 0
  1. #include <sourcemod>
  2. #include <clientprefs>
  3. #include <sdktools>
  4. #include <sdkhooks>
  5.  
  6. #define MAX_MVP_COUNT 1000
  7. #define PREFIX "\x01\x0B \x07[SF]]\x04"
  8.  
  9. #pragma newdecls required
  10.  
  11. int MVPCount, Selected[MAXPLAYERS + 1];
  12.  
  13. char Configfile[1024],
  14. g_sMVPName[MAX_MVP_COUNT + 1][1024],
  15. g_sMVPFile[MAX_MVP_COUNT + 1][1024],
  16. NameMVP[MAXPLAYERS + 1][1024];
  17.  
  18. Handle mvp_cookie, mvp_cookie2;
  19.  
  20. float VolMVP[MAXPLAYERS + 1];
  21.  
  22. public Plugin myinfo =
  23. {
  24. name = "[CS:GO] Custom MVP Anthem",
  25. author = "Kento",
  26. version = "1.10",
  27. description = "Custom MVP Anthem",
  28. url = "https://github.com/rogeraabbccdd/csgo_mvp"
  29. };
  30.  
  31. public void OnPluginStart()
  32. {
  33. RegConsoleCmd("sm_mvp", Command_MVP, "Select Your MVP Anthem");
  34. RegConsoleCmd("sm_mvpvol", Command_MVPVol, "MVP Volume");
  35.  
  36. HookEvent("round_mvp", Event_RoundMVP);
  37.  
  38. mvp_cookie = RegClientCookie("mvp_name", "Player's MVP Anthem", CookieAccess_Private);
  39. mvp_cookie2 = RegClientCookie("mvp_vol", "Player MVP volume", CookieAccess_Private);
  40.  
  41.  
  42. for(int i = 1; i <= MaxClients; i++)
  43. {
  44. if(IsValidClient(i) && !IsFakeClient(i) && !AreClientCookiesCached(i)) OnClientCookiesCached(i);
  45. }
  46. }
  47.  
  48. public void OnClientPutInServer(int client)
  49. {
  50. if (IsValidClient(client) && !IsFakeClient(client)) OnClientCookiesCached(client);
  51. }
  52.  
  53. public void OnClientCookiesCached(int client)
  54. {
  55. if(!IsValidClient(client) && IsFakeClient(client)) return;
  56.  
  57. char scookie[1024];
  58. GetClientCookie(client, mvp_cookie, scookie, sizeof(scookie));
  59. if(!StrEqual(scookie, ""))
  60. {
  61. Selected[client] = FindMVPIDByName(scookie);
  62. if(Selected[client] > 0)
  63. {
  64. if(StrContains(scookie, "VIP", false) != -1)
  65. {
  66. if(GetUserFlagBits(client) && ADMFLAG_RESERVATION)
  67. strcopy(NameMVP[client], sizeof(NameMVP[]), scookie);
  68. else
  69. {
  70. NameMVP[client] = "";
  71. SetClientCookie(client, mvp_cookie, "");
  72. }
  73. }
  74. else
  75. strcopy(NameMVP[client], sizeof(NameMVP[]), scookie);
  76. }
  77. else
  78. {
  79. NameMVP[client] = "";
  80. SetClientCookie(client, mvp_cookie, "");
  81. }
  82. }
  83. else if(StrEqual(scookie,"")) NameMVP[client] = "";
  84.  
  85. GetClientCookie(client, mvp_cookie2, scookie, sizeof(scookie));
  86. if(!StrEqual(scookie, ""))
  87. {
  88. VolMVP[client] = StringToFloat(scookie);
  89. }
  90. else if(StrEqual(scookie,"")) VolMVP[client] = 1.0;
  91. }
  92.  
  93.  
  94. public void OnConfigsExecuted()
  95. {
  96. LoadConfig();
  97. }
  98.  
  99. public Action Event_RoundMVP(Handle event, const char[] name, bool dontBroadcast)
  100. {
  101. int client = GetClientOfUserId(GetEventInt(event, "userid"));
  102.  
  103. if(StrEqual(NameMVP[client], "") || Selected[client] == 0) return;
  104.  
  105. int mvp = Selected[client];
  106.  
  107. char sound[1024];
  108. Format(sound, sizeof(sound), "*/%s", g_sMVPFile[mvp]);
  109.  
  110. if (IsValidClient(client) && !IsFakeClient(client))
  111. {
  112. for(int i = 1; i <= MaxClients; i++)
  113. {
  114. if (IsClientInGame(i) && IsValidClient(i) && !IsFakeClient(i))
  115. {
  116. PrintHintText(i, "Muzyka MVP gracza <font color='#B15BFF'>%N</font> - <font color='#FF0000'>%s</font>", client, g_sMVPName[mvp]);
  117. ClientCommand(i, "playgamesound Music.StopAllMusic");
  118.  
  119. EmitSoundToClient(i, sound, SOUND_FROM_PLAYER, SNDCHAN_STATIC, SNDLEVEL_NONE, _, VolMVP[i]);
  120. }
  121. }
  122. }
  123. }
  124.  
  125. int FindMVPIDByName(char [] name)
  126. {
  127. int id = 0;
  128.  
  129. for(int i = 1; i <= MVPCount; i++)
  130. {
  131. if(StrEqual(g_sMVPName[i], name)) id = i;
  132. }
  133.  
  134. return id;
  135. }
  136.  
  137. void LoadConfig()
  138. {
  139. BuildPath(Path_SM, Configfile, 1024, "configs/kento_mvp.cfg");
  140.  
  141. if(!FileExists(Configfile))
  142. SetFailState("Can not find config file \"%s\"!", Configfile);
  143.  
  144.  
  145. KeyValues kv = CreateKeyValues("MVP");
  146. kv.ImportFromFile(Configfile);
  147.  
  148. MVPCount = 1;
  149.  
  150. // Read Config
  151. if(kv.GotoFirstSubKey())
  152. {
  153. char name[1024];
  154. char file[1024];
  155.  
  156. do
  157. {
  158. kv.GetSectionName(name, sizeof(name));
  159. kv.GetString("file", file, sizeof(file));
  160.  
  161. strcopy(g_sMVPName[MVPCount], sizeof(g_sMVPName[]), name);
  162. strcopy(g_sMVPFile[MVPCount], sizeof(g_sMVPFile[]), file);
  163.  
  164. char filepath[1024];
  165. Format(filepath, sizeof(filepath), "sound/%s", g_sMVPFile[MVPCount])
  166. AddFileToDownloadsTable(filepath);
  167.  
  168. char soundpath[1024];
  169. Format(soundpath, sizeof(soundpath), "*/%s", g_sMVPFile[MVPCount]);
  170. FakePrecacheSound(soundpath);
  171.  
  172. MVPCount++;
  173. }
  174. while (kv.GotoNextKey());
  175. }
  176.  
  177. kv.Rewind();
  178. delete kv;
  179. }
  180.  
  181. public Action Command_MVP(int client,int args)
  182. {
  183. if (IsValidClient(client) && !IsFakeClient(client))
  184. {
  185. Menu settings_menu = new Menu(SettingsMenuHandler);
  186.  
  187. char name[1024];
  188. if(StrEqual(NameMVP[client], "")) Format(name, sizeof(name), "Brak niestandardowej muzyki MVP.", client);
  189. else Format(name, sizeof(name), NameMVP[client]);
  190.  
  191. char menutitle[1024];
  192. Format(menutitle, sizeof(menutitle), "Muzyka MVP\nWybrana:%s\nGłośność:%f", name, VolMVP[client]);
  193. settings_menu.SetTitle(menutitle);
  194.  
  195. char mvpmenu[1024], volmenu[1024];
  196. Format(mvpmenu, sizeof(mvpmenu), "Wybierz niestandardową muzykę MVP", client);
  197. Format(volmenu, sizeof(volmenu), "Wybierz głośność swojej muzyki MVP", client);
  198.  
  199. settings_menu.AddItem("mvp", mvpmenu);
  200. settings_menu.AddItem("vol", volmenu);
  201.  
  202. settings_menu.Display(client, 0);
  203. }
  204.  
  205. return Plugin_Handled;
  206. }
  207.  
  208. public int SettingsMenuHandler(Menu menu, MenuAction action, int client, int param)
  209. {
  210. if(action == MenuAction_Select)
  211. {
  212. char select[1024];
  213. GetMenuItem(menu, param, select, sizeof(select));
  214.  
  215. if(StrEqual(select, "mvp"))
  216. {
  217. DisplayMVPMenu(client);
  218. }
  219. else if(StrEqual(select, "vol"))
  220. {
  221. DisplayVolMenu(client);
  222. }
  223. }
  224. }
  225.  
  226. void DisplayMVPMenu(int client)
  227. {
  228. if (IsValidClient(client) && !IsFakeClient(client))
  229. {
  230. Menu mvp_menu = new Menu(MVPMenuHandler);
  231.  
  232. char name[1024];
  233. if(StrEqual(NameMVP[client], "")) Format(name, sizeof(name), "Brak muzyki MVP", client);
  234. else Format(name, sizeof(name), NameMVP[client]);
  235.  
  236. char mvpmenutitle[1024];
  237. Format(mvpmenutitle, sizeof(mvpmenutitle), "Wybierz swoją muzykę MVP\nWybrano :%s", name);
  238. mvp_menu.SetTitle(mvpmenutitle);
  239.  
  240. char nomvp[1024];
  241. Format(nomvp, sizeof(nomvp), "Brak muzyki MVP", client);
  242. mvp_menu.AddItem("", nomvp);
  243.  
  244. for(int i = 1; i < MVPCount; i++)
  245. {
  246. mvp_menu.AddItem(g_sMVPName[i], g_sMVPName[i]);
  247. }
  248.  
  249. mvp_menu.Display(client, 0);
  250. }
  251. }
  252.  
  253. public int MVPMenuHandler(Menu menu, MenuAction action, int client,int param)
  254. {
  255. if(action == MenuAction_Select)
  256. {
  257. char mvp_name[1024];
  258. GetMenuItem(menu, param, mvp_name, sizeof(mvp_name));
  259.  
  260. if(StrEqual(mvp_name, ""))
  261. {
  262. PrintToChat(client, "%s Twoja muzyka MVP to: Brak", PREFIX);
  263. Selected[client] = 0;
  264. }
  265. else if(StrContains(mvp_name, "VIP", false) != -1)
  266. {
  267. if(GetUserFlagBits(client) && ADMFLAG_RESERVATION)
  268. {
  269. PrintToChat(client, "%s Twoja muzyka MVP to: %s", PREFIX, mvp_name);
  270. Selected[client] = FindMVPIDByName(mvp_name);
  271. }
  272. else
  273. {
  274. PrintToChat(client, "%s Musisz posiadać VIP, aby wybrać tą muzykę!", PREFIX);
  275. return;
  276. }
  277. }
  278. else
  279. {
  280. PrintToChat(client, "%s Twoja muzyka MVP: %s", PREFIX, mvp_name);
  281. Selected[client] = FindMVPIDByName(mvp_name);
  282. }
  283.  
  284. strcopy(NameMVP[client], sizeof(NameMVP[]), mvp_name);
  285. SetClientCookie(client, mvp_cookie, mvp_name);
  286. }
  287. }
  288.  
  289. void DisplayVolMenu(int client)
  290. {
  291. if (IsValidClient(client) && !IsFakeClient(client))
  292. {
  293. Menu vol_menu = new Menu(VolMenuHandler);
  294.  
  295. char vol[1024];
  296. if(VolMVP[client] > 0.00) Format(vol, sizeof(vol), "%.2f", VolMVP[client]);
  297. else Format(vol, sizeof(vol), "Wycisz", client);
  298.  
  299. char menutitle[1024];
  300. Format(menutitle, sizeof(menutitle), "Wybierz głośność muzyki MVP\nAktualna głośność: %s\nUżyj !mvpvol aby wejść w zaawansowane opcje", vol);
  301. vol_menu.SetTitle(menutitle);
  302.  
  303. char mute[1024];
  304. Format(mute, sizeof(mute), "Wycisz", client);
  305.  
  306. vol_menu.AddItem("0", mute);
  307. vol_menu.AddItem("0.2", "20%");
  308. vol_menu.AddItem("0.4", "40%");
  309. vol_menu.AddItem("0.6", "60%");
  310. vol_menu.AddItem("0.8", "80%");
  311. vol_menu.AddItem("1.0", "100%");
  312. vol_menu.Display(client, 0);
  313. }
  314. }
  315.  
  316. public int VolMenuHandler(Menu menu, MenuAction action, int client,int param)
  317. {
  318. if(action == MenuAction_Select)
  319. {
  320. char vol[1024];
  321. GetMenuItem(menu, param, vol, sizeof(vol));
  322.  
  323. VolMVP[client] = StringToFloat(vol);
  324. PrintToChat(client, "%s Głośność jest ustawiona na: %s", PREFIX, VolMVP[client]);
  325.  
  326. SetClientCookie(client, mvp_cookie2, vol);
  327. }
  328. }
  329.  
  330. public Action Command_MVPVol(int client,int args)
  331. {
  332. if (IsValidClient(client))
  333. {
  334. char arg[20];
  335. float volume;
  336.  
  337. if (args < 1)
  338. {
  339. PrintToChat(client, "%s Przedział głośności musi być między 0.0-1.0", PREFIX);
  340. return Plugin_Handled;
  341. }
  342.  
  343. GetCmdArg(1, arg, sizeof(arg));
  344. volume = StringToFloat(arg);
  345.  
  346. if (volume < 0.0 || volume > 1.0)
  347. {
  348. PrintToChat(client, "%s Przedział głośności musi być między 0.0-1.0", PREFIX);
  349. return Plugin_Handled;
  350. }
  351.  
  352. VolMVP[client] = StringToFloat(arg);
  353. PrintToChat(client, "Głośność jest ustawiona na: %f", VolMVP[client]);
  354.  
  355. SetClientCookie(client, mvp_cookie2, arg);
  356. }
  357. return Plugin_Handled;
  358. }
  359.  
  360. stock bool IsValidClient(int client)
  361. {
  362. if (client <= 0) return false;
  363. if (client > MaxClients) return false;
  364. if (!IsClientConnected(client)) return false;
  365. return IsClientInGame(client);
  366. }
  367.  
  368. // https://wiki.alliedmods.net/Csgo_quirks
  369. stock void FakePrecacheSound(const char[] szPath)
  370. {
  371. AddToStringTable(FindStringTable("soundprecache"), szPath);
  372. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement