
   #include <amxmod>
   /*
   - First Blood
     First kill since round start [red hud to all | sound to killer]
      1: Player drew first blood!
   - Head Shot
     It's all in the name [red hud to killer | sound to killer]
      1: Head Shot!!
   - Multi Kill
     Multiple  kills,  max 3 sec in between [red hud to killer | sound to
   killer]
      2: Double Kill!
      3: Multi Kill!
      4: ULTRA KILL!!
     >4: M O N S T E R K I L L !!!
   - Killing Spree
     Multiple kills without dying [blue hud to all | sound to all]
      5: Player is on a killing spree!
     10: Player is on a rampage!
     15: Player is dominating!
     20: Player is unstoppable!
     25: Player is Godlike!
   Following files are required on your server in -mod-/sound/misc:
   doublekill.wav
   multikill.wav
   ultrakill.wav
   monsterkill.wav
   killingspree.wav
   rampage.wav
   dominating.wav
   unstoppable.wav
   godlike.wav
   firstblood.wav
   headshot.wav
   (You can find these files at OLO's website:
   http://olo.counter-strike.pl.)
   */
   // MK = Multi Kill
   // KS = Killing Spree
   // FB = First Blood
   // HS = Head Shot
   // Force clients to download wav files?
   #define DL_MK true
   #define DL_KS true
   #define DL_FB true
   #define DL_HS true
   // MK
   #define MK_START 2
   #define MK_STEP 1
   #define MK_LEVELS 4
   #define MK_INTERVAL 3.0
   // KS
   #define KS_START 5
   #define KS_STEP 5
   #define KS_LEVELS 5
   #define KS_TOP KS_START + KS_STEP * (KS_LEVELS - 1)
   // MK
   new MK_timer[33] = {0,...}
   new MK_count[33] = {0,...}
   new MK_msg[MK_LEVELS][] = {
       "Double Kill!",
       "Multi Kill!",
       "ULTRA KILL!!",
       "M O N S T E R K I L L !!!"
   }
   new MK_snd[MK_LEVELS][] = {
       "misc/doublekill.wav",
       "misc/multikill.wav",
       "misc/ultrakill.wav",
       "misc/monsterkill.wav"
   }
   // KS
   new KS_count[33] = {0,...}
   new KS_msg[KS_LEVELS][] = {
       "%s is on a killing spree!",
       "%s is on a rampage!",
       "%s is dominating!",
       "%s is unstoppable!",
       "%s is Godlike!"
   }
   new KS_snd[KS_LEVELS][] = {
       "misc/killingspree.wav",
       "misc/rampage.wav",
       "misc/dominating.wav",
       "misc/unstoppable.wav",
       "misc/godlike.wav"
   }
   new KS_endmsg[] = "%s's killing spree was ended by %s"
   new KS_suicidemsg[] = "%s was looking good till he killed himself!"
   // FB
   new bool:FB = true
   new FB_msg[] = "%s drew first blood!"
   new FB_snd[] = "misc/firstblood.wav"
   // HS
   new HS_msg[] = "Head Shot!!"
   new HS_snd[] = "misc/headshot.wav"
   // General
   new Blue[3] = {0,63,191}
   new Red[3] = {255,0,0}
   public reset_MK(param[]){
       new id = param[0]
       MK_timer[id] = 0
       MK_count[id] = 0
   }
   public reset_all(id){
       if (MK_timer[id]){
           remove_task(id)
           MK_timer[id] = 0
       }
       MK_count[id] = 0
       KS_count[id] = 0
   }
   public say_KS(id){
       new name[32]
       new KS_lvl
       new msg[128]
       KS_lvl = (KS_count[id] - KS_START) / KS_STEP
       if (KS_lvl > KS_LEVELS - 1) {
           KS_lvl = KS_LEVELS - 1
       }
       get_user_name(id,name,31)
       format(msg,127,KS_msg[KS_lvl],name)
       set_hudmessage(Blue[0],Blue[1],Blue[2],0.05,0.65,2,0.02,6.0,0.01,0
   .1,2)
       show_hudmessage(0,msg)
       client_cmd(0,"spk %s",KS_snd[KS_lvl])
       client_print(0,print_chat,"* %s",msg)
   }
   public say_MK(id){
       new MK_lvl
       MK_lvl = (MK_count[id] - MK_START) / MK_STEP
       if (MK_lvl > MK_LEVELS - 1) {
           MK_lvl = MK_LEVELS - 1
       }
       set_hudmessage(Red[0],Red[1],Red[2],0.05,0.65,2,0.02,6.0,0.01,0.1,
   2)
       show_hudmessage(id,MK_msg[MK_lvl])
       client_cmd(id,"spk %s",MK_snd[MK_lvl])
   }
   public event_deathmsg(){
       new killer = read_data(1)
       new victim = read_data(2)
       new name_v[32]
       new msg[128]
       get_user_name(victim,name_v,31)
       if (killer == victim){
           if (KS_count[victim] >= KS_START){
               format(msg,127,KS_suicidemsg,name_v)
               set_hudmessage(Blue[0],Blue[1],Blue[2],0.05,0.65,2,0.02,6.
   0,0.01,0.1,2)
               show_hudmessage(0,msg)
               client_print(0,print_chat,"* %s",msg)
           }
       } else {
           if (killer){
               new name_k[32]
               get_user_name(killer,name_k,31)
               if (KS_count[victim] >= KS_START){
                   format(msg,127,KS_endmsg,name_v,name_k)
                   set_hudmessage(Blue[0],Blue[1],Blue[2],0.05,0.65,2,0.0
   2,6.0,0.01,0.1,2)
                   show_hudmessage(0,msg)
                   client_print(0,print_chat,"* %s",msg)
               }
               if (get_user_team(killer) != get_user_team(victim)){
                   // FB
                   if (FB){
                       FB = false
                       format(msg,127,FB_msg,name_k)
                       set_hudmessage(Red[0],Red[1],Red[2],0.05,0.65,2,0.
   02,6.0,0.01,0.1,2)
                       show_hudmessage(0,msg)
                       client_cmd(killer,"spk %s",FB_snd)
                       client_print(0,print_chat,"* %s",msg)
                   }
                   // HS
                   if (read_data(3)){
                       set_hudmessage(Red[0],Red[1],Red[2],0.05,0.65,2,0.
   02,6.0,0.01,0.1,2)
                       show_hudmessage(killer,HS_msg)
                       client_cmd(killer,"spk %s",HS_snd)
                   }
                   // MK
                   if (MK_timer[killer]){
                       remove_task(killer)
                       MK_timer[killer] = 0
                   }
                   MK_count[killer]++
                   if  (MK_count[killer] >= MK_START && (MK_count[killer]
   - MK_START) % MK_STEP == 0){
                       say_MK(killer)
                   }
                   new param[2]
                   param[0] = killer
                   set_task(MK_INTERVAL,"reset_MK",killer,param,1)
                   // KS
                   KS_count[killer]++
                   if  (KS_count[killer]  >= KS_START && KS_count[killer]
   <= KS_TOP && (KS_count[killer] - KS_START) % KS_STEP == 0){
                       say_KS(killer)
                   }
               }
           }
       }
       reset_all(victim)
   }
   public event_roundtime() {
       if (get_cvar_num("mp_roundtime") * 60 == read_data(1)){
           FB = true
       }
   }
   public client_putinserver(id){
       reset_all(id)
       return PLUGIN_CONTINUE
   }
   public plugin_precache()
   {
       #if DL_MK
           for (new i=0; i < MK_LEVELS; i++){
               precache_sound(MK_snd[i])
           }
       #endif
       #if DL_KS
           for (new i=0; i < KS_LEVELS; i++){
               precache_sound(KS_snd[i])
           }
       #endif
       #if DL_FB
           precache_sound(FB_snd)
       #endif
       #if DL_HS
           precache_sound(HS_snd)
       #endif
       return PLUGIN_CONTINUE
   }
   public plugin_init(){
       register_plugin("UT Sounds","0.3c","-X.Soul")
       register_event("DeathMsg","event_deathmsg","a")
       register_event("RoundTime","event_roundtime","bc")
       return PLUGIN_CONTINUE
   }
