
   /* AMX Mod script.
   *
   * ::Ultimate sounds::
   *  by Hephaistos (hephaistos@djeyl.net)
   *
   *  cvar:
   *   streak_mode < flags >
   *   "a" - messages
   *   "b" - sounds
   *
   *   bomb_mode < flags >
   *   "a" - exploded
   *   "b" - planting
   *   "c" - defusing
   *   "d" - planted
   *   "e" - defused
   *   "f" - failed to defuse
   *   "g" - pickup
   *   "h" - dropped
   *   "i" - sounds
   *
   *   hekill_mode < flags >
   *   "a" - show normal HE-Kill in hud
   *   "b" - show suicide HE-Kill in hud
   *   "c" - play sound on HE-Kill
   *
   *   kniff_mode < flags >
   *   "a" - messages
   *   "b" - sounds
   *
   *   hs_mode < flags >
   *   "a" - messages
   *   "b" - sounds
   *
   *   lastman_mode < flags >
   *   "a" - messages
   *   "b" - hp
   *   "c" - sounds
   *
   *
   *   Thank  ToT|V!PER  ,OLO ,JustinHoMi ,PsychoGuard and dJeyL for your
   plugins
   *
   *
   */
   #include <amxmod>
   #define KNIFFMESSAGES   4
   #define  HEMESSAGES   4              /*  Number of Random Messages for
   Normal HE Kills */
   #define  HESMESSAGES  4              /*  Number of Random Messages for
   Suicide HE Kills */
   #define LEVELS 5
   #define MESSAGESNOHP 4
   #define MESSAGESHP 4
   new planter
   new defuser
   new c4timer
   new defusing
   new Float:last_omg
   new Float:last_plan
   new kills[33] = {0,...};
   new deaths[33] = {0,...};
   new alone_ann = 0
   new levels[5] = {3, 5, 7, 9, 10};
   new stksounds[5][] = {"misc/multikill", "misc/ultrakill",
                      "misc/monsterkill",            "misc/killingspree",
   "misc/godlike"};
   new  stkmessages[5][]  = {"%s: Multi-Kill!", "%s: Ultra-Kill!!!", "%s:
   Monster-kill!!!",
                        "%s  IS  ON A KILLING SPREE!!!", "%s IS GODLIKE."
   };
   new kniffmessages[KNIFFMESSAGES][] = {
   "%s sliced and diced %s",
   "%s pulled out knife and gutted %s",
   "%s sneaks carefully behind and knifed %s",
   "%s knived %s"}
   new he_messages[HEMESSAGES][] = {
   "%s sends a little gift to %s",
   "%s throws a small present to %s",
   "%s made a precision throw to %s",
   "%s  got  a  big  explosion  for  %s"}          /* Random Messages for
   Normal HE Kills */
   new hes_messages[HESMESSAGES][] = {
   "%s detonated himself with a grenade",
   "%s trys the effect of a HE Grenade",
   "%s kicked a grenade into his own ass",
   "%s  explodes!"}                  /*  Random  Messages  for Suicide HE
   Kills */
   new  messagesnohp[MESSAGESNOHP][]  =  {"%i terrorist vs %i CT^n%s: Now
   all depend on you!",
   "%i terrorist vs %i CT^n%s: I hope you still have a healthpack.",
   "%i  terrorist  vs  %i  CT^n%s:  All  your teammates were killed. Good
   luck!",
   "%i terrorist vs %i CT^n%s: Now you are alone. Have fun!"}
   new  messageshp[MESSAGESHP][]  =  {"%i terrorist vs %i CT^n%s (%i hp):
   Now all depend on you!",
   "%i  terrorist  vs  %i  CT^n%s  (%i  hp):  I  hope  you  still  have a
   healthpack.",
   "%i  terrorist  vs  %i CT^n%s (%i hp): All your teammates were killed.
   Good luck!",
   "%i terrorist vs %i CT^n%s (%i hp): Now you are alone. Have fun!"}
   get_streak() {
       new streak[3]
       get_cvar_string("streak_mode",streak,2)
       return read_flags(streak)
   }
   get_bemode() {
       new bemode[10]
       get_cvar_string("bomb_mode",bemode,9)
       return read_flags(bemode)
   }
   public death_event(id) {
       new streak = get_streak()
       if ((streak&1) || (streak&2)){
       new killer = read_data(1);
       new victim = read_data(2);
       kills[killer] += 1;
       kills[victim] = 0;
       deaths[killer] = 0;
       deaths[victim] += 1;
       for (new i = 0; i < LEVELS; i++) {
           if (kills[killer] == levels[i]) {
               announce(killer, i);
               return PLUGIN_CONTINUE;
           }
           }
       }
       return PLUGIN_CONTINUE;
   }
   announce(killer, level) {
       new streak = get_streak()
       if (streak&1){
       new name[32];
       get_user_name(killer, name, 32);
       set_hudmessage(0,  100,  200, 0.05, 0.65, 2, 0.02, 6.0, 0.01, 0.1,
   2);
       show_hudmessage(0, stkmessages[level], name);
       }
       if (streak&2){
       client_cmd(0, "spk %s", stksounds[level]);
       }
   }
   public reset_hud(id) {
       new streak = get_streak()
       if (streak&1){
       if (kills[id] > levels[0]) {
           client_print(id, print_chat,
                        "*  You  are  on  a  killstreak  with %d kills.",
   kills[id]);
       } else if (deaths[id] > 1) {
           client_print(id, print_chat,
                        "*  Take  care,  you are on a deathstreak with %d
   deaths in a row.", deaths[id]);
       }
       }
   }
   public client_connect(id) {
       new streak = get_streak()
       if ((streak&1) || (streak&2)){
       kills[id] = 0;
       deaths[id] = 0;
       }
   }
   public got_bomb(id){
       new bemode = get_bemode()
       if (bemode&1){
           planter = id
           defuser = defusing = 0
           if ((read_data(1)==2) && (last_omg < get_gametime())){
               new bplayers_t[32], numte
               get_players(bplayers_t,numte,"e","TERRORIST")
               last_omg = get_gametime() + 15.0
               new name[32]
               get_user_name(planter, name , 32)
               set_hudmessage(200,  100, 0, -1.0, 0.30, 0, 6.0, 6.0, 0.5,
   0.15, 1)
               show_hudmessage(bplayers_t[0],"Omg!    %s    reached   the
   target!",name)
           }
       }
   }
   public bdef_g(id){
       new bemode = get_bemode()
       if (read_data(1) == 3){
           if (last_plan < get_gametime()){
               if (bemode&2){
                   new bplayers_t[32], numte
                   get_players(bplayers_t,numte,"e","TERRORIST")
                   last_plan = get_gametime() + 15.0
                   new name[32]
                   set_hudmessage(200,  100,  0, -1.0, 0.30, 0, 6.0, 6.0,
   0.5, 0.15, 1)
                   get_user_name(planter, name , 32)
                   show_hudmessage(bplayers_t[0],"%s   is   planting  the
   bomb!",name)
               }
           }
       }
       else {
           defuser = defusing = id
           if (last_plan < get_gametime()){
               if (bemode&4){
                   new bplayers_ct[32], numct
                   get_players(bplayers_ct,numct,"e","CT")
                   last_plan = get_gametime() + 15.0
                   new name[32]
                   set_hudmessage(200,  100,  0, -1.0, 0.30, 0, 6.0, 6.0,
   0.5, 0.15, 1)
                   get_user_name(defusing, name , 32)
                   show_hudmessage(bplayers_ct[0],"%s   is  defusing  the
   bomb :D",name)
               }
           }
       }
   }
   public bdef_l(id)
       defusing = 0
   public disable_c4(){
       c4timer = 0
       last_plan = 0.0
       last_omg = 0.0
       remove_task(8038)
   }
   public bomb_planted(){
       new bemode = get_bemode()
       if (bemode&256){
       client_cmd(0,"spk djeyl/c4powa")
       }
       if (bemode&8){
           new name[32]
           get_user_name(planter, name , 32)
           set_hudmessage(200,  100,  0,  -1.0,  0.30,  0, 6.0, 6.0, 0.5,
   0.15, 1)
           show_hudmessage(0,"%s set us up the bomb!!!",name)
           c4timer = get_cvar_num("mp_c4timer") - 2
           set_task(1.0,"bomb_c",8038,"",0,"b")
           last_plan = 0.0
       }
   }
   public bomb_c(){
       new bemode = get_bemode()
       if (--c4timer > 0){
           if (c4timer == 30 || c4timer == 20){
               if (bemode&256){
               new temp[48]
               num_to_word(c4timer,temp,48)
               client_cmd(0,"spk       ^"vox/%s       seconds       until
   explosion^"",temp)
               }
           }
           else if (c4timer < 11){
               if (bemode&256){
               new temp[48]
               num_to_word(c4timer,temp,48)
               client_cmd(0,"spk ^"vox/%s^"",temp)
               }
           }
           if (defusing)
               client_print(defusing,print_center,"%d",c4timer)
       }
       else{
           remove_task(8038)
       }
   }
   public bomb_defused(){
       new bemode = get_bemode()
       if (bemode&256){
       client_cmd(0,"spk djeyl/laugh")
       }
       if (bemode&16){
           new name[32]
           get_user_name(defuser, name , 32)
           set_hudmessage(200,  100,  0,  -1.0,  0.30,  0, 6.0, 6.0, 0.5,
   0.15, 1)
           show_hudmessage(0,"%s defused the bomb!",name)
           disable_c4()
       }
   }
   public bomb_failure(){
       new bemode = get_bemode()
       if (defuser){
           if (bemode&256){
           client_cmd(0,"spk djeyl/witch")
           }
           if (bemode&32){
               new name[32]
               get_user_name(defuser, name , 32)
               set_hudmessage(200,  100, 0, -1.0, 0.30, 0, 6.0, 6.0, 0.5,
   0.15, 1)
               show_hudmessage(0,"%s  failed to defuse the bomb...",name)
           }
       }
   }
   public bomb_pickup(id){
       new bemode = get_bemode()
       if (bemode&64){
           new bplayers_t[32], numte
           get_players(bplayers_t,numte,"e","TERRORIST")
           new name[32]
           get_user_name(id, name , 32)
           set_hudmessage(200,  100,  0,  -1.0,  0.30,  0, 6.0, 6.0, 0.5,
   0.15, 1)
           show_hudmessage(bplayers_t[0],"%s pick up the bomb...",name)
       }
   }
   public bomb_drop(){
       new bemode = get_bemode()
       if (bemode&128){
           new bplayers_t[32], numte
           get_players(bplayers_t,numte,"e","TERRORIST")
           new name[32]
           get_user_name(planter, name , 32)
           set_hudmessage(200,  100,  0,  -1.0,  0.30,  0, 6.0, 6.0, 0.5,
   0.15, 1)
           show_hudmessage(bplayers_t[0],"%s dropped the bomb!!!",name)
       }
   }
   public he_kills(){
      new killer_id = read_data(1)
      new victim_id = read_data(2)
      new killer_name[32], victim_name[33]

      get_user_name(killer_id,killer_name,33)
      get_user_name(victim_id,victim_name,33)
      new hekmode[8]
      get_cvar_string("hekill_mode",hekmode,8)
      new hekmode_bit = read_flags(hekmode)
      if (hekmode_bit & 1) {
       if (victim_id != killer_id)
        {
       if (hekmode_bit & 4) {
        client_cmd(0,"spk djeyl/grenade")
       }
       set_hudmessage(200, 100, 0, -1.0, 0.30, 0, 6.0, 6.0, 0.5, 0.15, 1)
       show_hudmessage(0,he_messages[
   random_num(0,HEMESSAGES-1)],killer_name,victim_name)
        }
      }
      if (hekmode_bit & 2) {
       if (victim_id == killer_id)
        {
       if (hekmode_bit & 4) {
        client_cmd(0,"spk djeyl/witch")
       }
       set_hudmessage(200, 100, 0, -1.0, 0.30, 0, 6.0, 6.0, 0.5, 0.15, 1)
       show_hudmessage(0,hes_messages[        random_num(0,HESMESSAGES-1)
   ],victim_name)
        }
      }
   }
   public knife_kill(){
      new kniffmode[4]
      get_cvar_string("kniff_mode",kniffmode,4)
      new kniffmode_bit = read_flags(kniffmode)
      if (kniffmode_bit & 1) {
       new killer_id = read_data(1)
       new victim_id = read_data(2)
       new killer_name[33], victim_name[33]
       get_user_name(killer_id,killer_name,33)
       get_user_name(victim_id,victim_name,33)
       set_hudmessage(200, 100, 0, -1.0, 0.30, 0, 6.0, 6.0, 0.5, 0.15, 1)
       show_hudmessage(0,kniffmessages[     random_num(0,KNIFFMESSAGES-1)
   ],killer_name,victim_name)
      }
      if (kniffmode_bit & 2) {
       client_cmd(0,"spk misc/humiliation")
      }
   }
   public roundend_msg(id)
      alone_ann = 0
   public death_msg(id){
      new lmmode[8]
      get_cvar_string("lastman_mode",lmmode,8)
      new lmmode_bit = read_flags(lmmode)
      new players_ct[32], players_t[32], ict, ite, last
      get_players(players_ct,ict,"ae","CT")
      get_players(players_t,ite,"ae","TERRORIST")
      if (ict==1&&ite==1){
         new name1[32], name2[32]
         get_user_name(players_ct[0],name1,32)
         get_user_name(players_t[0],name2,32)
         set_hudmessage(200,  100, 0, -1.0, 0.30, 0, 6.0, 6.0, 0.5, 0.15,
   1)
            if (lmmode_bit & 1){
               if (lmmode_bit & 2){
               show_hudmessage(0,"%s     (%i     hp)     vs.    %s    (%i
   hp)",name1,get_user_health(players_ct[0]),name2,get_user_health(player
   s_t[0]))
               }
               else {
               show_hudmessage(0,"%s vs. %s",name1,name2)
               }
            if (lmmode_bit & 4){
            client_cmd(0,"spk misc/maytheforce")
            }
         }
      }
      else {
         if (ict==1&&ite>1&&alone_ann==0&&(lmmode_bit & 4)){
            last=players_ct[0]
            client_cmd(last,"spk misc/oneandonly")
         }
         else if (ite==1&&ict>1&&alone_ann==0&&(lmmode_bit & 4)){
            last=players_t[0]
            client_cmd(last,"spk misc/oneandonly")
         }
         else {
            return PLUGIN_CONTINUE
         }
         alone_ann = last
         new name[32]
         get_user_name(last,name,32)
            if (lmmode_bit & 1){
         set_hudmessage(200,  100, 0, -1.0, 0.30, 0, 6.0, 6.0, 0.5, 0.15,
   1)
               if (lmmode_bit & 2){
         show_hudmessage(0,messageshp[  random_num(0,MESSAGESHP-1)  ],ite
   ,ict ,name,get_user_health(last))
            }
            else {
         show_hudmessage(0,messagesnohp[     random_num(0,MESSAGESNOHP-1)
   ],ite ,ict ,name )
            }
      }
            if (lmmode_bit & 4){
         client_cmd(last,"spk misc/maytheforce")
            }
      }
      return PLUGIN_CONTINUE
   }
   public hs(){
      new hsmode[4]
      get_cvar_string("hs_mode",hsmode,4)
      new hsmode_bit = read_flags(hsmode)
      if (hsmode_bit & 1){
         new killer_id = read_data(1)
         new victim_id = read_data(2)
         new victim_name[33]
         get_user_name(victim_id,victim_name,33)
         set_hudmessage(200, 100, 0, -1.0, 0.30, 0, 3.0, 3.0, 0.15, 0.15,
   1)
         show_hudmessage(killer_id,"::HEADSHOT::^nYou       oWnEd      %s
   !!",victim_name)
      }
      if (hsmode_bit & 2){
         client_cmd(0,"spk misc/headshot")
      }
   }
   public plugin_precache()
   {
       precache_sound( "djeyl/c4powa.wav")
       precache_sound( "djeyl/laugh.wav")
       precache_sound( "djeyl/grenade.wav")
       precache_sound( "djeyl/witch.wav")
       precache_sound( "misc/monsterkill.wav")
       precache_sound( "misc/godlike.wav")
       precache_sound( "misc/headshot.wav")
       precache_sound( "misc/humiliation.wav")
       precache_sound( "misc/killingspree.wav")
       precache_sound( "misc/multikill.wav")
       precache_sound( "misc/ultrakill.wav")
       precache_sound( "misc/maytheforce.wav")
       precache_sound( "misc/oneandonly.wav")
       return PLUGIN_CONTINUE
   }
   public plugin_init() {
      register_plugin("Ultimate sound","0.76","hephaistos@djeyl.net")
      register_event("DeathMsg","hs","a","3=1")
      register_event("DeathMsg","knife_kill","a","4&kni")
      register_event("DeathMsg","he_kills","a","4&gren")
      register_event("StatusIcon",   "got_bomb",   "be",   "1=1",  "1=2",
   "2=c4")
      register_event("SendAudio", "bomb_planted", "a", "2&%!MRAD_BOMBPL")
      register_event("SendAudio",           "bomb_defused",          "a",
   "2&%!MRAD_BOMBDEF")
      register_event("TextMsg", "bomb_failure", "a", "2&#Target_B")
      register_event("BarTime", "bdef_g", "be", "1=10", "1=5","1=3")
      register_event("BarTime", "bdef_l", "be", "1=0")
      register_event("TextMsg", "bomb_pickup", "bc", "2&#Got_bomb")
      register_event("TextMsg", "bomb_drop", "bc", "2&#Game_bomb_d")
      register_event("SendAudio",            "disable_c4",           "a",
   "2&%!MRAD_terwin","2&%!MRAD_ctwin","2&%!MRAD_rounddraw")
      register_event("TextMsg","disable_c4","a","2&#Game_C","2&#Game_w")
      register_event("ResetHUD", "reset_hud", "b");
      register_event("DeathMsg", "death_event", "a")
      register_event("SendAudio","roundend_msg","a","2=%!MRAD_terwin","2=
   %!MRAD_ctwin","2=%!MRAD_rounddraw")
      register_event("TextMsg","roundend_msg","a","2&#Game_C","2&#Game_w"
   )
      register_event("DeathMsg","death_msg","a")
      register_cvar("lastman_mode","abc")
      register_cvar("streak_mode","ab")
      register_cvar("bomb_mode","abcdefghi")
      register_cvar("hekill_mode","abc")
      register_cvar("kniff_mode","ab")
      register_cvar("hs_mode","ab")
      return PLUGIN_CONTINUE
   }
