HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. /*
  2. Автор плагина: Анатолий (AcE) Бойко.
  3. Моя страничка: https://vk.com/e1337ace
  4. Профиль Steam: http://steamcommunity.com/profiles/76561198038775603/
  5. Отдельное спасибо за код Vagtincha и d3m37r4.
  6. */
  7.  
  8. #include <amxmodx>
  9. #include <reapi>
  10.  
  11. #if !defined MAX_CLIENTS
  12. const MAX_CLIENTS = 32
  13. #endif
  14. #if !defined MAX_MENU_LENGTH
  15. const MAX_MENU_LENGTH = 512
  16. #endif
  17.  
  18. //#define FFA_MODE /* Поддержка CSDM FFA. */
  19. #define HUD_MSG_TIME 5.0 /* Время показа сообщения. */
  20. #define HUD_RGB 0, 255, 0 /* Цвет сообщения в формате R, G, B */
  21. #define HUD_X_Y -1.0, 0.20 /* Позиция сообщения по оси X, Y */
  22. #define KILLSTREAK_TIME 10.0 /* Интервал для серии убийств */
  23.  
  24. new const MENU_SOUND[] = "killstreak/openmenu.wav"
  25. new const HEADSHOT_SOUND[] = "killstreak/headshot.wav"
  26. new const FIRSTBLOOD_SOUND[] = "killstreak/firstblood.wav"
  27. new const KILLSTREAK_SOUND[][] =
  28. {
  29. "killstreak/doublekill.wav",
  30. "killstreak/triplekill.wav",
  31. "killstreak/multikill.wav",
  32. "killstreak/megakill.wav",
  33. "killstreak/ultrakill.wav",
  34. "killstreak/monsterkill.wav",
  35. "killstreak/killingspree.wav",
  36. "killstreak/wickedsick.wav",
  37. "killstreak/rampage.wav",
  38. "killstreak/ludacrisskill.wav",
  39. "killstreak/godlike.wav",
  40. "killstreak/holyshit.wav"
  41. }
  42.  
  43. const keys = MENU_KEY_0|MENU_KEY_1|MENU_KEY_2
  44. new const commands[][] = {"killmenu", "say /killmenu", "say_team /killmenu"}
  45. new g_SyncHudMsg, bool:g_FirstKill, bool:g_MsgSwitch[MAX_CLIENTS +1], bool:g_SndSwitch[MAX_CLIENTS +1]
  46.  
  47. public plugin_precache()
  48. {
  49. precache_sound(MENU_SOUND)
  50. precache_sound(HEADSHOT_SOUND)
  51. precache_sound(FIRSTBLOOD_SOUND)
  52. for (new i; i < sizeof KILLSTREAK_SOUND; i ++)
  53. precache_sound(KILLSTREAK_SOUND[i])
  54. }
  55.  
  56. public plugin_init()
  57. {
  58. register_plugin("Re Kill Streak", "1.1", "AcE, Vagtincha, d3m37r4")
  59. g_SyncHudMsg = CreateHudSyncObj()
  60. RegisterHookChain(RG_CSGameRules_DeathNotice, "CSGameRules_DeathNotice", .post = true)
  61. RegisterHookChain(RG_CSGameRules_RestartRound, "CSGameRules_RestartRound", .post = true)
  62. register_menucmd(register_menuid("Menu"), keys, "show_kill_menu")
  63. for (new i; i < sizeof commands; i ++)
  64. register_clcmd(commands[i], "kill_menu")
  65. }
  66.  
  67. public client_putinserver(id)
  68. {
  69. g_SndSwitch[id] = true
  70. g_MsgSwitch[id] = true
  71. }
  72.  
  73. public CSGameRules_RestartRound() g_FirstKill = false
  74.  
  75. public kill_menu(id)
  76. {
  77. static menu[MAX_MENU_LENGTH]
  78. static const onoff[2][] = {{"\rKikapcsolva"}, {"\yBekapcsolva"}}
  79. formatex(menu, charsmax(menu), "\r[\yKill Streak\r] \wMenu^n\
  80. \r1. \wHangok: %s^n\
  81. \r2. \wUzenetek: %s^n\
  82. \r0. \wKilepes", onoff[g_SndSwitch[id]], onoff[g_MsgSwitch[id]]
  83. )
  84. show_menu(id, keys, menu, -1, "Menu")
  85. }
  86.  
  87. public show_kill_menu(id, key)
  88. {
  89. client_cmd(id, "spk ^"%s^"", MENU_SOUND)
  90. switch(key)
  91. {
  92. case 0:
  93. {
  94. g_SndSwitch[id] = !g_SndSwitch[id]
  95. kill_menu(id)
  96. }
  97. case 1:
  98. {
  99. g_MsgSwitch[id] = !g_MsgSwitch[id]
  100. kill_menu(id)
  101. }
  102. }
  103. }
  104.  
  105. public CSGameRules_DeathNotice(const victim, const killer, pevInflictor)
  106. {
  107. if (!is_user_connected(killer) || killer == victim)
  108. return HC_CONTINUE
  109.  
  110. #if !defined FFA_MODE
  111. if (get_member(killer, m_iTeam) == get_member(victim, m_iTeam))
  112. return HC_CONTINUE
  113. #endif
  114.  
  115. ClearSyncHud(killer, g_SyncHudMsg)
  116. set_hudmessage(HUD_RGB, HUD_X_Y, 0, 0.0, HUD_MSG_TIME)
  117. static Sound_Id, Float:Time, Float:LastKill[MAX_CLIENTS +1], KillStreak[MAX_CLIENTS +1]
  118.  
  119. static const KILLSTREAK_MESSAGE[][] =
  120. {
  121. "", "Double-Kill!", "Triple-Kill!", "Multi-Kill!", "Mega-Kill!",
  122. "Ultra-Kill!", "Monster-Kill!", "Killing Spree!", "Wicked Sick!",
  123. "Rampage!", "Ludacriss-Kill", "Godlike!", "Holy Shit!"
  124. }
  125. Time = get_gametime()
  126. if (KillStreak[killer] >= sizeof KILLSTREAK_SOUND || (Time - LastKill[killer]) > KILLSTREAK_TIME)
  127. {
  128. KillStreak[killer] = 0
  129. if (!g_FirstKill)
  130. {
  131. g_FirstKill = true
  132. if (g_MsgSwitch[killer])
  133. ShowSyncHudMsg(killer, g_SyncHudMsg, "First-Blood!")
  134. if (g_SndSwitch[killer])
  135. client_cmd(killer, "spk ^"%s^"", FIRSTBLOOD_SOUND)
  136. }
  137. else
  138. {
  139. if (get_member(victim, m_bHeadshotKilled))
  140. {
  141. if (g_MsgSwitch[killer])
  142. ShowSyncHudMsg(killer, g_SyncHudMsg, "Headshot!")
  143. if (g_SndSwitch[killer])
  144. client_cmd(killer, "spk ^"%s^"", HEADSHOT_SOUND)
  145. }
  146. }
  147. }
  148. else
  149. {
  150. KillStreak[killer] ++
  151. Sound_Id = clamp(KillStreak[killer] -1, 0, sizeof KILLSTREAK_SOUND -1)
  152. if (g_MsgSwitch[killer])
  153. ShowSyncHudMsg(killer, g_SyncHudMsg, "%s", KILLSTREAK_MESSAGE[KillStreak[killer]])
  154. if (g_SndSwitch[killer])
  155. client_cmd(killer, "spk ^"%s^"", KILLSTREAK_SOUND[Sound_Id])
  156. }
  157. LastKill[killer] = Time
  158. LastKill[victim] = 0.0
  159. KillStreak[victim] = 0
  160. return HC_CONTINUE
  161. }