HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <fakemeta>
  3. #include <hamsandwich>
  4. #include <colorchat>
  5.  
  6. #define PLUGIN_NAME "LoL Kill Sounds"
  7. #define PLUGIN_VERSION "v1.1"
  8. #define PLUGIN_AUTHOR "KISKE"
  9.  
  10. enum _:Teams {
  11. FM_CS_TEAM_UNASSIGNED = 0,
  12. FM_CS_TEAM_T,
  13. FM_CS_TEAM_CT,
  14. FM_CS_TEAM_SPECTATOR
  15. };
  16.  
  17. new const LOL_SOUNDS[][] = {
  18. "sound/lol_sounds/double_kill.mp3",
  19. "sound/lol_sounds/triple_kill.mp3",
  20. "sound/lol_sounds/quadra_kill.mp3",
  21. "sound/lol_sounds/penta_kill.mp3"
  22. }
  23.  
  24. new const E_LOL_SOUNDS[][] = {
  25. "sound/lol_sounds/e_double_kill.mp3",
  26. "sound/lol_sounds/e_triple_kill.mp3",
  27. "sound/lol_sounds/e_quadra_kill.mp3",
  28. "sound/lol_sounds/e_penta_kill.mp3"
  29. }
  30.  
  31. new const LOL_MESSAGE[][] = {
  32. "LOL_MSG_DOUBLE_KILL",
  33. "LOL_MSG_TRIPLE_KILL",
  34. "LOL_MSG_QUADRA_KILL",
  35. "LOL_MSG_PENTA_KILL"
  36. }
  37.  
  38. #define TASK_SOUND 957121
  39.  
  40. #define is_user_valid_connected(%1) (1 <= %1 <= g_MaxPlayers && is_user_connected(%1))
  41.  
  42. new g_Kills[33];
  43.  
  44. new g_MaxPlayers;
  45. new g_KillerId = 0;
  46.  
  47. new g_pCVAR_ResetKills;
  48.  
  49. new g_pCVAR_TimeBet_FirstDouble;
  50. new g_pCVAR_TimeBet_DoubleTriple;
  51. new g_pCVAR_TimeBet_TripleQuadra;
  52. new g_pCVAR_TimeBet_QuadraPenta;
  53.  
  54. new g_pCVAR_OnlyVictimListen;
  55. new g_pCVAR_OnlyKillerListen;
  56.  
  57. new g_pCVAR_ShowMessage;
  58.  
  59. new Float:g_TimeBet_FirstDouble;
  60. new Float:g_TimeBet_DoubleTriple;
  61. new Float:g_TimeBet_TripleQuadra;
  62. new Float:g_TimeBet_QuadraPenta;
  63.  
  64. new g_ShowMessage;
  65.  
  66. public plugin_precache()
  67. {
  68. new i;
  69. for(i = 0; i < 4; ++i)
  70. {
  71. precache_generic(LOL_SOUNDS[i]);
  72. precache_generic(E_LOL_SOUNDS[i]);
  73. }
  74. }
  75.  
  76. public plugin_init()
  77. {
  78. register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);
  79.  
  80. register_dictionary("lol_sounds.txt");
  81.  
  82. register_event("HLTV", "event_HLTV", "a", "1=0", "2=0");
  83.  
  84. RegisterHam(Ham_Killed, "player", "fw_PlayerKilled");
  85.  
  86. g_pCVAR_ResetKills = register_cvar("lol_reset_kills_with_penta", "1"); // Kills reset when you do a penta kill ? [0=NO || 1=YES]
  87.  
  88. g_pCVAR_TimeBet_FirstDouble = register_cvar("lol_time_between_first_and_double", "7.0"); // Time to make a double kill after first
  89. g_pCVAR_TimeBet_DoubleTriple = register_cvar("lol_time_between_double_and_triple", "7.0"); // Time to make a triple kill after double kill
  90. g_pCVAR_TimeBet_TripleQuadra = register_cvar("lol_time_between_triple_and_quadra", "7.0"); // Time to make a quadra kill after triple kill
  91. g_pCVAR_TimeBet_QuadraPenta = register_cvar("lol_time_between_quadra_and_penta", "15.0"); // Time to make a penta kill after quadra kill
  92.  
  93. g_pCVAR_OnlyVictimListen = register_cvar("lol_only_victim_listen", "0"); // Only the victim listen "enemy double/triple/quadra/penta kill" sounds? [0=NO (ALL THE ENEMY TEAM LISTEN) || 1=YES]
  94. g_pCVAR_OnlyKillerListen = register_cvar("lol_only_killer_listen", "0"); // Only the killer listen "double/triple/quadra/penta kill" sounds? [0=NO (ALL THE TEAM LISTEN) || 1=YES]
  95.  
  96. g_pCVAR_ShowMessage = register_cvar("lol_show_message_in_chat", "1"); // Show message in chat? [0=NO || 1=YES]
  97.  
  98. g_MaxPlayers = get_maxplayers();
  99. }
  100.  
  101. public event_HLTV()
  102. {
  103. g_TimeBet_FirstDouble = get_pcvar_float(g_pCVAR_TimeBet_FirstDouble);
  104. g_TimeBet_DoubleTriple = get_pcvar_float(g_pCVAR_TimeBet_DoubleTriple);
  105. g_TimeBet_TripleQuadra = get_pcvar_float(g_pCVAR_TimeBet_TripleQuadra);
  106. g_TimeBet_QuadraPenta = get_pcvar_float(g_pCVAR_TimeBet_QuadraPenta);
  107.  
  108. g_ShowMessage = get_pcvar_num(g_pCVAR_ShowMessage);
  109. }
  110.  
  111. public client_putinserver(id)
  112. {
  113. g_Kills[id] = 0;
  114. }
  115.  
  116. public fw_PlayerKilled(const victim, const killer, const shouldgib)
  117. {
  118. if(victim == killer || !is_user_valid_connected(killer))
  119. return;
  120.  
  121. if(g_KillerId != killer)
  122. {
  123. g_Kills[g_KillerId] = 0;
  124. g_KillerId = killer;
  125. }
  126.  
  127. ++g_Kills[killer];
  128.  
  129. remove_task(TASK_SOUND);
  130.  
  131. switch(g_Kills[killer])
  132. {
  133. case 1: set_task(g_TimeBet_FirstDouble, "removeSound", TASK_SOUND);
  134. case 2: set_task(g_TimeBet_DoubleTriple, "removeSound", TASK_SOUND);
  135. case 3: set_task(g_TimeBet_TripleQuadra, "removeSound", TASK_SOUND);
  136. case 4: set_task(g_TimeBet_QuadraPenta, "removeSound", TASK_SOUND);
  137. }
  138.  
  139. if(g_Kills[killer] > 1 && g_Kills[killer] < 6)
  140. {
  141. if(g_ShowMessage)
  142. {
  143. new sKillerName[32];
  144. new sVictimName[32];
  145.  
  146. get_user_name(killer, sKillerName, 31)
  147. get_user_name(victim, sVictimName, 31)
  148.  
  149. colorChat(0, (getUserTeam(killer) == FM_CS_TEAM_T) ? CT : TERRORIST, "%L", LANG_SERVER, LOL_MESSAGE[g_Kills[killer] - 2], sKillerName, sVictimName);
  150. }
  151.  
  152. if(!get_pcvar_num(g_pCVAR_OnlyVictimListen) && !get_pcvar_num(g_pCVAR_OnlyKillerListen))
  153. playSound(0);
  154. else if(get_pcvar_num(g_pCVAR_OnlyVictimListen) && !get_pcvar_num(g_pCVAR_OnlyKillerListen))
  155. playSound(1);
  156. else if(!get_pcvar_num(g_pCVAR_OnlyVictimListen) && get_pcvar_num(g_pCVAR_OnlyKillerListen))
  157. playSound(2);
  158.  
  159. if(get_pcvar_num(g_pCVAR_OnlyVictimListen))
  160. client_cmd(victim, "mp3 play ^"%s^"", E_LOL_SOUNDS[g_Kills[killer] - 2])
  161.  
  162. if(get_pcvar_num(g_pCVAR_OnlyKillerListen))
  163. client_cmd(killer, "mp3 play ^"%s^"", LOL_SOUNDS[g_Kills[killer] - 2])
  164. }
  165.  
  166. if(g_Kills[killer] == 5 && get_pcvar_num(g_pCVAR_ResetKills))
  167. g_Kills[killer] = 0;
  168. }
  169.  
  170. public removeSound()
  171. {
  172. g_Kills[g_KillerId] = 0;
  173. g_KillerId = 0;
  174. }
  175.  
  176. playSound(const who)
  177. {
  178. new iUsers[32];
  179. new iNum;
  180. new iUser;
  181. new i;
  182.  
  183. switch(who)
  184. {
  185. case 0: // BOTH TEAMS LISTEN THE SOUNDS
  186. {
  187. get_players(iUsers, iNum, "ac");
  188.  
  189. new iKillerTeam;
  190. new iTeam;
  191.  
  192. iKillerTeam = getUserTeam(g_KillerId);
  193.  
  194. for(i = 0; i < iNum; i++)
  195. {
  196. iUser = iUsers[i]
  197.  
  198. iTeam = getUserTeam(iUser);
  199.  
  200. if(iTeam == iKillerTeam)
  201. client_cmd(iUser, "mp3 play ^"%s^"", LOL_SOUNDS[g_Kills[g_KillerId] - 2])
  202. else if(iTeam != FM_CS_TEAM_UNASSIGNED && iTeam != FM_CS_TEAM_SPECTATOR)
  203. client_cmd(iUser, "mp3 play ^"%s^"", E_LOL_SOUNDS[g_Kills[g_KillerId] - 2])
  204. }
  205. }
  206. case 1: // ONLY KILLER TEAM LISTEN THE SOUNDS
  207. {
  208. if(getUserTeam(g_KillerId) == FM_CS_TEAM_T)
  209. get_players(iUsers, iNum, "ace", "TERRORIST");
  210. else
  211. get_players(iUsers, iNum, "ace", "CT");
  212.  
  213. for(i = 0; i < iNum; i++)
  214. {
  215. iUser = iUsers[i]
  216. client_cmd(iUser, "mp3 play ^"%s^"", LOL_SOUNDS[g_Kills[g_KillerId] - 2])
  217. }
  218. }
  219. case 2: // ONLY VICTIM TEAM LISTEN THE SOUNDS
  220. {
  221. if(getUserTeam(g_KillerId) == FM_CS_TEAM_T)
  222. get_players(iUsers, iNum, "ace", "CT");
  223. else
  224. get_players(iUsers, iNum, "ace", "TERRORIST");
  225.  
  226. for(i = 0; i < iNum; i++)
  227. {
  228. iUser = iUsers[i]
  229. client_cmd(iUser, "mp3 play ^"%s^"", LOL_SOUNDS[g_Kills[g_KillerId] - 2])
  230. }
  231. }
  232. }
  233. }
  234.  
  235. stock getUserTeam(const id) // FROM ZP
  236. {
  237. if(pev_valid(id) != 2)
  238. return FM_CS_TEAM_UNASSIGNED;
  239.  
  240. return get_pdata_int(id, 114, 5);
  241. }