// Mattie EventScripts v1.5.0.000+
//  Hunter's Bomb Timer Addon v3
//      for Counter-Strike: Source
//
// * Description:
//    This scriptpack is an expanded bomb timer.
//    You can add sounds and texts for the remaining seconds.
//    Players can activate a popup with the timer.
//
//
// * Install instructions:
//       1. Install Mattie's EventScripts plugins:
//           http://mattie.info/cs
//
//       2. Copy and upload this script to:
//           cstrike/addons/eventscripts/bomb_timer/es_bomb_timer.txt
//
//       3. Add the following line somewhere in autoexec.cfg:
//           es_load bomb_timer
//
//       4. Review the config settings below and tweak
//
// ******************************

block config
{
  // ***********************
  // ** Start config/edit **
  // ***********************

  // Look into:
  //  addons/eventscripts/bomb_timer/es_bomb_timer_settings_db.txt

  // How much days should inactive users be stored, before their settings get deleted? ( default = 30 )
  bomb_timer_savetime 30

  // Should the sounds be auto-downloaded with EventScripts?
  // Note: Use only with custom, non Valve sounds and do NOT use it if you have the sounds be downloaded with Mani!
  // 1 / 0
  bomb_timer_soundload 1

  // Should BOMB DEFUSED or BOMB EXPLODED be annouced at the end of a round?
  // 1 / 0
  bomb_timer_endannounce 1
  
  // Should the bomb timer be shown in the middle of the screen?
  // 1 / 2 / 0
  // 1 = HudHint
  // 2 = CenterMsg 
  bomb_timer_middle_screen 1
  
  // Default settings for new connecting players
  // on / off
  bomb_timer_default_display 1
  bomb_timer_default_texts 1
  bomb_timer_default_sounds 1

  // *********************
  // ** End config/edit **
  // *********************
}

// ************************
// ** DO NOT EDIT BELOW! **
// ************************
event load
{
  es_xset _tempcore 0
  es_xexists _tempcore script popup
  ifx false(_tempcore) do
  {
    es_xload popup
  }
  es_xexists _tempcore script keymenu
  ifx false(_tempcore) do
  {
    es_xload keymenu
  }
  es_xexists _tempcore script setting
  ifx false(_tempcore) do
  {
    es_xload setting
  }

  clientcmd create say !bombtimer "bomb_timer/bomb_timer_clientcmd" "change_setting" #known

  es_xset hunter_bomb_timer_ver "3.0-17.04.07"
  es_formatv hunter_bomb_timer_text "Hunters Bomb Timer, www.sourceplugins.de, %1, ES 1.5.0.000+ (Addon Version)" hunter_bomb_timer_ver
  es_logv hunter_bomb_timer_text

  es_xset hu_bt "3.0"
  es_xmakepublic hu_bt

  es_xset bomb_timer_dir "|bomb_timer"
  es_xset bomb_timer_exists 0
  es_xset bomb_timer_setting 0
  es_xset bomb_timer_message 0
  es_xset bomb_timer_planted 0
  es_xset bomb_timer_userid 0
  es_xset bomb_timer_diff 0
  es_xset bomb_timer_remain 0
  es_xset bomb_timer_temp 0
  es_xset bomb_timer_text 0
  es_xset bomb_timer_team 0
  es_xset bomb_timer_sound_ct 0
  es_xset bomb_timer_sound_t 0
  es_xset bomb_timer_sound_spec 0
  es_xset bomb_timer_savetime 30
  es_xset bomb_timer_endannounce 0
  es_xset bomb_timer_soundload 0
  es_xset bomb_timer_default_display 1
  es_xset bomb_timer_default_texts 1
  es_xset bomb_timer_default_sounds 1
  es_xset bomb_timer_middle_screen 0
  es_xset bomb_timer_time 0
  es_xset bomb_timer_key 0
  es_xset bomb_timer_val 0
  es_xset bomb_timer_command 0
  es_xdoblock bomb_timer/config
  es_xmath bomb_timer_savetime * 86400

  setting exists bomb_timer_temp bombtimer
  ifx false(bomb_timer_temp) do
  {
    setting create bombtimer "Bomb Timer Settings" toggle
    setting addoption bombtimer display "Display"
    setting addoption bombtimer texts "Text"
    setting addoption bombtimer sounds "Sound"
    es setting setdefault bombtimer display server_var(bomb_timer_default_display)
    es setting setdefault bombtimer texts server_var(bomb_timer_default_texts)
    es setting setdefault bombtimer sounds server_var(bomb_timer_default_sounds)
    setting addsound bombtimer "ui/buttonclick.wav"
  }

  keygroupremove bomb_timer_settings
  es_keygroupload bomb_timer_settings server_var(bomb_timer_dir)
  es_xkeygroupcreate bomb_timer_temp
  es_xkeycreate bomb_timer_temp temptime

  es_xmsg #multi #green[BombTimer] #defaultLoaded
}
event unload
{
  es_xkeygroupdelete bomb_timer_settings
  es_xkeygroupdelete bomb_timer_temp

  clientcmd delete say !bombtimer

  es_xmsg #multi #green[BombTimer] #defaultUnloaded
}
event server
{
  es_xdoblock bomb_timer/config
  es_xmath bomb_timer_savetime * 86400
  es setting clear bombtimer server_var(bomb_timer_savetime)

  keygroupremove bomb_timer_settings
  es_keygroupload bomb_timer_settings server_var(bomb_timer_dir)

  ifx true(bomb_timer_soundload) do
  {
    es_xforeachval bomb_timer_val in bomb_timer_settings sounds_ct "es_xdoblock bomb_timer/bomb_timer_addsound_ct"
    es_xforeachval bomb_timer_val in bomb_timer_settings sounds_t "es_xdoblock bomb_timer/bomb_timer_addsound_t"
    es_xforeachval bomb_timer_val in bomb_timer_settings sounds_spec "es_xdoblock bomb_timer/bomb_timer_addsound_spec"
  }
}
event player_activate
{
  es_delayed 30 es_xcexec event_var(userid) echo server_var(hunter_bomb_timer_text)
  
  es uniqueid bomb_timer_key event_var(userid)
  if (server_var(bomb_timer_key) != "BOT") do
  {
    es_xformat bomb_timer_text "#green[BombTimer] #defaultSay '!bombtimer' for settings menu"
    es_delayed 15 es_xtell event_var(userid) #multi server_var(bomb_timer_text)
  }
}
event es_client_command
{
  if (event_var(command) == "!hunter_bomb_timer_ver") then es_xcexec event_var(userid) echo server_var(hunter_bomb_timer_text)
  if (event_var(command) == "!hunter_all_ver") then es_xcexec event_var(userid) echo server_var(hunter_bomb_timer_text)
}
block bomb_timer_clientcmd
{
  es_xgetcmduserid bomb_timer_userid
  ifx true(bomb_timer_userid) do
  {
    es setting send bombtimer server_var(bomb_timer_userid)
  }
}
event bomb_planted
{
  ifx false(bomb_timer_planted) do
  {
    es_xkeygroupdelete bomb_timer_temp
    es_xkeygroupcreate bomb_timer_temp
    es_xkeycreate bomb_timer_temp temptime

    es_xset bomb_timer_temp 0
    es_xset bomb_timer_start 0
    es_xgettimestamp bomb_timer_start
    es_xset bomb_timer_planted 1

    es_xkeygroupcreate bomb_timer_cache
    foreach player bomb_timer_key #human "es_xdoblock bomb_timer/bomb_timer_settingcache"

    es_xkeygetvalue bomb_timer_text bomb_timer_settings texts P
    es_xkeygetvalue bomb_timer_sound_ct bomb_timer_settings sounds_ct P
    es_xkeygetvalue bomb_timer_sound_t bomb_timer_settings sounds_t P
    es_xkeygetvalue bomb_timer_sound_spec bomb_timer_settings sounds_spec P
    es_xkeygetvalue bomb_timer_command bomb_timer_settings commands P
    
    es_xset bomb_timer_message "Bomb Planted" 
    foreach player bomb_timer_userid #human "es_xdoblock bomb_timer/bomb_timer_do"

    ifx true(bomb_timer_command) do
    {
      es_xcommandv bomb_timer_command
    }

    es_xdoblock bomb_timer/bomb_timer_run
  }
}
block bomb_timer_settingcache
{
  es_keycreate bomb_timer_cache server_var(bomb_timer_key)
  es setting get bomb_timer_setting bombtimer display server_var(bomb_timer_key)
  es_keysetvalue bomb_timer_cache server_var(bomb_timer_key) display server_var(bomb_timer_setting)
  es setting get bomb_timer_setting bombtimer texts server_var(bomb_timer_key)
  es_keysetvalue bomb_timer_cache server_var(bomb_timer_key) texts server_var(bomb_timer_setting)
  es setting get bomb_timer_setting bombtimer sounds server_var(bomb_timer_key)
  es_keysetvalue bomb_timer_cache server_var(bomb_timer_key) sounds server_var(bomb_timer_setting)
}
block bomb_timer_addsound_ct
{
  es_keygetvalue bomb_timer_val bomb_timer_settings sounds_ct server_var(bomb_timer_val)
  es_xformatv bomb_timer_key "sound/%1" bomb_timer_val
  es_stringtable downloadables server_var(bomb_timer_key)
}
block bomb_timer_addsound_t
{
  es_keygetvalue bomb_timer_val bomb_timer_settings sounds_t server_var(bomb_timer_val)
  es_xformatv bomb_timer_key "sound/%1" bomb_timer_val
  es_stringtable downloadables server_var(bomb_timer_key)
}
block bomb_timer_addsound_spec
{
  es_keygetvalue bomb_timer_val bomb_timer_settings sounds_spec server_var(bomb_timer_val)
  es_xformatv bomb_timer_key "sound/%1" bomb_timer_val
  es_stringtable downloadables server_var(bomb_timer_key)
}
block bomb_timer_run
{
  ifx true(bomb_timer_planted) do
  {
    es_xgettimestamp bomb_timer_diff
    es_math bomb_timer_diff - server_var(bomb_timer_start)
    es_xcopy bomb_timer_remain mp_c4timer
    es_math bomb_timer_remain - server_var(bomb_timer_diff)

    es_keygetvalue bomb_timer_temp bomb_timer_temp temptime server_var(bomb_timer_remain)
    ifx false(bomb_timer_temp) do
    {
      es_keysetvalue bomb_timer_temp temptime server_var(bomb_timer_remain) 1
      es_keygetvalue bomb_timer_text bomb_timer_settings texts server_var(bomb_timer_remain)
      es_keygetvalue bomb_timer_sound_ct bomb_timer_settings sounds_ct server_var(bomb_timer_remain)
      es_keygetvalue bomb_timer_sound_t bomb_timer_settings sounds_t server_var(bomb_timer_remain)
      es_keygetvalue bomb_timer_sound_spec bomb_timer_settings sounds_spec server_var(bomb_timer_remain)
      es_keygetvalue bomb_timer_command bomb_timer_settings commands server_var(bomb_timer_remain)

      es_xformatv bomb_timer_message "%1 sec" bomb_timer_remain
      foreach player bomb_timer_userid #human "es_xdoblock bomb_timer/bomb_timer_do"

      ifx true(bomb_timer_command) do
      {
        es_xcommandv bomb_timer_command
      }
    }
    ifx true(bomb_timer_remain) do
    {
      es_xdelayed 1 es_xdoblock bomb_timer/bomb_timer_run
    }
  }
}
block bomb_timer_do
{
  es_exists bomb_timer_exists key bomb_timer_cache server_var(bomb_timer_userid)
  ifx true(bomb_timer_exists) do
  {
    es_getplayerteam bomb_timer_team server_var(bomb_timer_userid)
    ifx true(bomb_timer_middle_screen) do
    {
      es_keygetvalue bomb_timer_setting bomb_timer_cache server_var(bomb_timer_userid) display
      ifx true(bomb_timer_setting) do
      {
        if (server_var(bomb_timer_middle_screen) == 1) do
        {
          es_xusermsg create hudhint HintText
          es_xusermsg write short hudhint -1
          es_usermsg write string hudhint server_var(bomb_timer_message)
          es_usermsg send hudhint server_var(bomb_timer_userid)
          es_xusermsg delete hudhint
        }
        else do
        {
          es_xusermsg create centermsg TextMsg
          es_xusermsg write byte centermsg 4
          es_usermsg write string centermsg server_var(bomb_timer_message)
          es_usermsg send centermsg server_var(bomb_timer_userid)
          es_xusermsg delete centermsg
        }
      }
    }
    ifx true(bomb_timer_text) do
    {
      es_keygetvalue bomb_timer_setting bomb_timer_cache server_var(bomb_timer_userid) texts
      ifx true(bomb_timer_setting) do
      {
        es_tell server_var(bomb_timer_userid) #multi server_var(bomb_timer_text)
      }
    }
    es_keygetvalue bomb_timer_setting bomb_timer_cache server_var(bomb_timer_userid) sounds
    ifx true(bomb_timer_setting) do
    {
      if (server_var(bomb_timer_team) == "3") do
      {
        ifx true(bomb_timer_sound_ct) do
        {
          es_cexec server_var(bomb_timer_userid) play server_var(bomb_timer_sound_ct)
        }
      }
      if (server_var(bomb_timer_team) == "2") do
      {
        ifx true(bomb_timer_sound_t) do
        {
          es_cexec server_var(bomb_timer_userid) play server_var(bomb_timer_sound_t)
        }
      }
      if (server_var(bomb_timer_team) < "2") do
      {
        ifx true(bomb_timer_sound_spec) do
        {
          es_cexec server_var(bomb_timer_userid) play server_var(bomb_timer_sound_spec)
        }
      }
    }
  }
}
event round_start
{
  keygroupremove bomb_timer_cache
  es_xset bomb_timer_planted 0
}
event round_end
{
  if (event_var(reason) == 1) do
  {
    es_xdelayed 1 es_xset bomb_timer_planted 0
    ifx true(bomb_timer_endannounce) do
    {
      es_xkeygetvalue bomb_timer_text bomb_timer_settings texts E
      es_xkeygetvalue bomb_timer_sound_ct bomb_timer_settings sounds_ct E
      es_xkeygetvalue bomb_timer_sound_t bomb_timer_settings sounds_t E
      es_xkeygetvalue bomb_timer_sound_spec bomb_timer_settings sounds_spec E
      es_xkeygetvalue bomb_timer_command bomb_timer_settings commands E
    
      es_xset bomb_timer_message "Bomb Exploded"
      foreach player bomb_timer_userid #human "es_xdoblock bomb_timer/bomb_timer_do"
      
      ifx true(bomb_timer_command) do
      {
        es_xcommandv bomb_timer_command
      }
    }
  }
  if (event_var(reason) == 7) do
  {
    es_xdelayed 1 es_xset bomb_timer_planted 0
    ifx true(bomb_timer_endannounce) do
    {
      es_xkeygetvalue bomb_timer_text bomb_timer_settings texts D
      es_xkeygetvalue bomb_timer_sound_ct bomb_timer_settings sounds_ct D
      es_xkeygetvalue bomb_timer_sound_t bomb_timer_settings sounds_t D
      es_xkeygetvalue bomb_timer_sound_spec bomb_timer_settings sounds_spec D
      es_xkeygetvalue bomb_timer_command bomb_timer_settings commands D
    
      es_xset bomb_timer_message "Bomb Defused"
      foreach player bomb_timer_userid #human "es_xdoblock bomb_timer/bomb_timer_do"
      
      ifx true(bomb_timer_command) do
      {
        es_xcommandv bomb_timer_command
      }
    }
  }
}
