HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <fakemeta>
  3. #include <hamsandwich>
  4. #include <nvault>
  5.  
  6. #define PLUGIN_VERSION "1.0 [Full]"
  7. #define XO_PLAYER 5
  8. #define MAX_STREAK 5
  9.  
  10. new g_iSound[33], g_iCrit[33], g_iCritR[33], g_iKillstreak[33], g_iStreak[33]
  11. new m_LastHitGroup = 75
  12. new g_iVault
  13.  
  14. new const g_szMiscSounds[][] = {
  15. "hsnd/crit_hit.wav",
  16. "hsnd/crit_received.wav",
  17. "hsnd/killstreak.wav"
  18. }
  19.  
  20. new const g_szHitSounds[][] = {
  21. "hsnd/hitsound_default.wav",
  22. "hsnd/hitsound_beepo.wav",
  23. "hsnd/hitsound_electro1.wav",
  24. "hsnd/hitsound_electro2.wav",
  25. "hsnd/hitsound_electro3.wav",
  26. "hsnd/hitsound_note1.wav",
  27. "hsnd/hitsound_note2.wav",
  28. "hsnd/hitsound_note3.wav",
  29. "hsnd/hitsound_note4.wav",
  30. "hsnd/hitsound_note5.wav",
  31. "hsnd/hitsound_note6.wav",
  32. "hsnd/hitsound_note7.wav",
  33. "hsnd/hitsound_note7b.wav",
  34. "hsnd/hitsound_note8.wav",
  35. "hsnd/hitsound_note9.wav",
  36. "hsnd/hitsound_percussion1.wav",
  37. "hsnd/hitsound_percussion2.wav",
  38. "hsnd/hitsound_percussion3.wav",
  39. "hsnd/hitsound_percussion4.wav",
  40. "hsnd/hitsound_percussion5.wav",
  41. "hsnd/hitsound_retro1.wav",
  42. "hsnd/hitsound_retro2.wav",
  43. "hsnd/hitsound_retro3.wav",
  44. "hsnd/hitsound_retro4.wav",
  45. "hsnd/hitsound_retro5.wav",
  46. "hsnd/hitsound_space.wav",
  47. "hsnd/hitsound_squasher.wav",
  48. "hsnd/hitsound_vortex1.wav",
  49. "hsnd/hitsound_vortex2.wav",
  50. "hsnd/hitsound_vortex3.wav",
  51. "hsnd/hitsound_vortex4.wav",
  52. "hsnd/hitsound_vortex5.wav"
  53. }
  54.  
  55. new const g_szSoundNames[][] = {
  56. "TF2",
  57. "Beepo",
  58. "Electro",
  59. "Notes",
  60. "Percussion",
  61. "Retro",
  62. "Space",
  63. "Squasher",
  64. "Vortex",
  65. "\rOff"
  66. }
  67.  
  68. public plugin_init()
  69. {
  70. register_plugin("TF2: Hit Sounds", PLUGIN_VERSION, "OciXCrom")
  71. register_cvar("TF2HitSounds", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
  72. register_event("DeathMsg", "eventKilled", "a")
  73. RegisterHam(Ham_Spawn, "player", "eventSpawn", 1)
  74. RegisterHam(Ham_TakeDamage, "player", "eventDamage", 0)
  75. register_clcmd("say /hitsounds", "menuSounds")
  76. register_clcmd("say_team /hitsounds", "menuSounds")
  77. register_clcmd("say /hsnd", "menuSounds")
  78. register_clcmd("say_team /hsnd", "menuSounds")
  79. g_iVault = nvault_open("TF2HitSounds")
  80. }
  81.  
  82. public client_putinserver(id)
  83. LoadData(id)
  84.  
  85. public client_disconnect(id)
  86. SaveData(id)
  87.  
  88. public SaveData(id)
  89. {
  90. new szVaultKey[64], szVaultData[256], szName[32]
  91. get_user_name(id, szName, charsmax(szName))
  92. format(szVaultKey, charsmax(szVaultKey), "%s", szName)
  93. format(szVaultData, charsmax(szVaultData), "%i#%i#%i#%i#", g_iSound[id], g_iCrit[id], g_iCritR[id], g_iKillstreak[id])
  94. nvault_set(g_iVault, szVaultKey, szVaultData)
  95. return PLUGIN_CONTINUE
  96. }
  97.  
  98. LoadData(id)
  99. {
  100. new szVaultKey[64], szVaultData[256], szName[32]
  101. get_user_name(id, szName, charsmax(szName))
  102. format(szVaultKey, charsmax(szVaultKey), "%s", szName)
  103. format(szVaultData, charsmax(szVaultData), "%i#%i#%i#%i#", g_iSound[id], g_iCrit[id], g_iCritR[id], g_iKillstreak[id])
  104. nvault_get(g_iVault, szVaultKey, szVaultData, charsmax(szVaultData))
  105. replace_all(szVaultData, charsmax(szVaultData), "#", " ")
  106.  
  107. new iSound[2], iCrit[2], iCritR[2], iKillstreak[2]
  108. parse(szVaultData, iSound, charsmax(iSound), iCrit, charsmax(iCrit), iCritR, charsmax(iCritR), iKillstreak, charsmax(iKillstreak))
  109.  
  110. g_iSound[id] = str_to_num(iSound)
  111. g_iCrit[id] = str_to_num(iCrit)
  112. g_iCritR[id] = str_to_num(iCritR)
  113. g_iKillstreak[id] = str_to_num(iKillstreak)
  114.  
  115. return PLUGIN_CONTINUE
  116. }
  117.  
  118. public menuSounds(id)
  119. {
  120. new szTitle[128], szItem[64], iSound = g_iSound[id]
  121. formatex(szTitle, charsmax(szTitle), "\r[Hitsounds] \ySebzés Hangok")
  122. new iSoundsMenu = menu_create(szTitle, "handlerSounds")
  123.  
  124. formatex(szItem, charsmax(szItem), "Sebzés hang: \y%s", g_szSoundNames[iSound])
  125. menu_additem(iSoundsMenu, szItem, "0", 0)
  126.  
  127. formatex(szItem, charsmax(szItem), "%sHang meghallgatása", iSound == 9 ? "\d" : "")
  128. menu_additem(iSoundsMenu, szItem, "1", 0)
  129.  
  130. formatex(szItem, charsmax(szItem), "Kritikus találat hang: %s", !g_iCrit[id] ? "\yBekapcsolva" : "\Kikapcsolva")
  131. menu_additem(iSoundsMenu, szItem, "2", 0)
  132.  
  133. formatex(szItem, charsmax(szItem), "Kapott kritikus sebzés hang: %s", !g_iCritR[id] ? "\yBekapcsolva" : "\Kikapcsolva")
  134. menu_additem(iSoundsMenu, szItem, "3", 0)
  135.  
  136. formatex(szItem, charsmax(szItem), "Killstreak hang: %s", !g_iKillstreak[id] ? "\yBekapcsolva" : "\Kikapcsolva")
  137. menu_additem(iSoundsMenu, szItem, "4", 0)
  138.  
  139. menu_setprop(iSoundsMenu, MPROP_EXITNAME, "\rMenü bezárása")
  140. menu_display(id, iSoundsMenu, 0)
  141. return PLUGIN_HANDLED
  142. }
  143.  
  144. public handlerSounds(id, iSoundsMenu, iItem)
  145. {
  146. if(iItem == MENU_EXIT)
  147. {
  148. menu_destroy(iSoundsMenu)
  149. return PLUGIN_HANDLED
  150. }
  151.  
  152. new iName[64], szData[6], access, callback
  153. menu_item_getinfo(iSoundsMenu, iItem, access, szData, charsmax(szData), iName, charsmax(iName), callback)
  154. new iKey = str_to_num(szData)
  155.  
  156. switch(iKey)
  157. {
  158. case 0:
  159. {
  160. if(g_iSound[id] < sizeof(g_szSoundNames) - 1) g_iSound[id]++
  161. else g_iSound[id] = 0
  162. }
  163. case 1: player_hitsound(id)
  164. case 2: g_iCrit[id] = g_iCrit[id] ? 0 : 1
  165. case 3: g_iCritR[id] = g_iCritR[id] ? 0 : 1
  166. case 4: g_iKillstreak[id] = g_iKillstreak[id] ? 0 : 1
  167. }
  168.  
  169. menu_destroy(iSoundsMenu)
  170. menuSounds(id)
  171. return PLUGIN_HANDLED
  172. }
  173.  
  174. public player_hitsound(id)
  175. {
  176. new iSound
  177. switch(g_iSound[id])
  178. {
  179. case 1: iSound = 1
  180. case 2: iSound = random_num(2, 4)
  181. case 3: iSound = random_num(5, 14)
  182. case 4: iSound = random_num(15, 19)
  183. case 5: iSound = random_num(20, 24)
  184. case 6: iSound = 25
  185. case 7: iSound = 26
  186. case 8: iSound = random_num(27, 31)
  187. case 9: return
  188. }
  189.  
  190. client_cmd(id, "spk %s", g_szHitSounds[iSound])
  191. }
  192.  
  193. public player_critsound(id, iType)
  194. client_cmd(id, "spk %s", g_szMiscSounds[iType])
  195.  
  196. public player_streaksound(id)
  197. client_cmd(id, "spk %s", g_szMiscSounds[2])
  198.  
  199. public eventKilled()
  200. {
  201. new iAttacker = read_data(1), iVictim = read_data(2)
  202.  
  203. if(!is_user_connected(iAttacker) || !is_user_connected(iVictim) || iAttacker == iVictim)
  204. return
  205.  
  206. if(g_iStreak[iAttacker] < MAX_STREAK - 1) g_iStreak[iAttacker]++
  207. else
  208. {
  209. g_iStreak[iAttacker] = 0
  210.  
  211. if(!g_iKillstreak[iAttacker])
  212. player_streaksound(iAttacker)
  213. }
  214. }
  215.  
  216. public eventSpawn(id)
  217. g_iKillstreak[id] = 0
  218.  
  219. public eventDamage(iVictim, iInflictor, iAttacker, Float:flDamage, iDamageBits)
  220. {
  221. if(!is_user_connected(iAttacker) || !is_user_connected(iVictim) || get_user_team(iAttacker) == get_user_team(iVictim) || iAttacker == iVictim)
  222. return HAM_IGNORED
  223.  
  224. if(get_pdata_int(iVictim, m_LastHitGroup, XO_PLAYER) == HIT_HEAD)
  225. {
  226. if(!g_iCrit[iAttacker]) player_critsound(iAttacker, 0)
  227. else player_hitsound(iAttacker)
  228. if(!g_iCritR[iVictim]) player_critsound(iVictim, 1)
  229. }
  230. else player_hitsound(iAttacker)
  231. return HAM_IGNORED
  232. }
  233.  
  234. public plugin_precache()
  235. {
  236. for(new i = 0; i < sizeof(g_szMiscSounds); i++)
  237. precache_sound(g_szMiscSounds[i])
  238.  
  239. for(new i = 0; i < sizeof(g_szHitSounds); i++)
  240. precache_sound(g_szHitSounds[i])
  241. }