// Mattie EventScripts v1.0.0+
// Ace Rates v 3.9.999
// init is always called when the addon is loaded
block load
{
  es_setinfo ace_rates 3.9.999
  es_makepublic ace_rates
  //
  // SET YOUR MIN RATES HERE
  es_xsetinfo ace_min_rate 10000
  es_xsetinfo ace_min_cmdrate 33
  es_xsetinfo ace_min_updaterate 33
  //
  // SET YOUR MAX RATES HERE (Actually minus 1)
  es_xsetinfo ace_max_rate 30000
  es_xsetinfo ace_max_cmdrate 100
  es_xsetinfo ace_max_updaterate 100
  //
  // CHANGE TO 1 IF YOU WANT TO FORCE RATERS TO RECONNECT
  es_xsetinfo ace_rate_reconnect 0
  //
  // CHANGE TO 1 IF YOU WANT TO SIMPLY AUTO KICK RATERS
  es_xsetinfo ace_rate_kick 0
  //
  // 0 = NO LOGGING OF RATES, 1 = WRITES RATES TO LOG 
  es_xsetinfo ace_rate_log 0
  //
  // 0 = NO ANNOUNCING OF RATE ADJUSTMENT, 1 = ANNOUNCES RATE ADJUSTMENT TO PLAYER CHAT
  es_xsetinfo ace_rate_announce 1
  //
  es_log ::: Ace Rates v server_var(ace_rates) loaded :::
}
event player_spawn
{
// es_log ACE RATES checking for bot
es_doblock ace_rates/ace_bot_check
}
event player_team
{
// es_log ACE RATES checking for bot
es_doblock ace_rates/ace_bot_check
}
block ace_bot_check
{
// checks that player is actually on a team T or CT
// then checks if he is a bot 
// this avoids rate checking HLTV, Fake clients and BOTs
es_xsetinfo ace_rate_bot 0
es_xsetinfo ace_rate_team 0
es_getplayerteam ace_rate_team event_var(userid) 
if (server_var(ace_rate_team) greaterthan 1) do
  {
    if (server_var(ace_rate_team) lessthan 4) do
      {
        es_isbot ace_rate_bot event_var(userid)
        if (server_var(ace_rate_bot) notequalto 1) do
          {
            es_doblock ace_rates/ace_rate_check
          } 
      }
  }
}
block ace_rate_check
{
  // Setinfos
  es_setinfo ace_rate_rate 0
  es_setinfo ace_rate_cmdrate 0
  es_setinfo ace_rate_updaterate 0
  es_setinfo ace_rate_interp 0
  es_setinfo ace_rate_interpolate 0
  //
  // Reads rates and player name etc.
  es_getclientvar ace_rate_rate event_var(userid) rate
  es_getclientvar ace_rate_cmdrate event_var(userid) cl_cmdrate
  es_getclientvar ace_rate_updaterate event_var(userid) cl_updaterate
  es_getclientvar ace_rate_interp event_var(userid) cl_interp
  es_getclientvar ace_rate_interpolate event_var(userid) cl_interpolate
  //
  if (server_var(ace_rate_log) equalto 1) do
    {
      // Logs player joining and log indicates player's current rates
      if (server_var(ace_rate_bot) equalto 0) then es_xlog :Ace Rates: event_var(es_username) - rate was: server_var(ace_rate_rate) - cmd rate was: server_var(ace_rate_cmdrate) - upd rate was: server_var(ace_rate_updaterate)
    }
  //
  // checks the rates against server minimums and maximums
  // 
  if (server_var(ace_rate_rate) lessthan server_var(ace_min_rate)) do
    {
      es_cexec event_var(userid) rate server_var(ace_min_rate)
      if (server_var(ace_rate_announce) equalto 1) do
        {
          es_msg #multi #default :Ace Rates:#lightgreen event_var(es_username)#green rate was:#lightgreen server_var(ace_rate_rate)#green raised to server min:#lightgreen server_var(ace_min_rate)
          if (server_var(ace_rate_reconnect) equalto 1) do
	         { 
	           es_msg #multi #default :Ace Rates:#lightgreen event_var(es_username)#green has been forced to reconnect for a rate violation
	         }
          if (server_var(ace_rate_kick) equalto 1) do
	         {
	           es_msg #multi #default :Ace Rates:#lightgreen event_var(es_username)#green has been kicked for a rate violation
	         }
        }
      if (server_var(ace_rate_reconnect) equalto 1) do
	     {
	       es_tell event_var(userid) #multi #default :Ace Rates:#lightgreen You were forced to reconnect because your rate is too low
	       es_delayed 5 esnq es_cexec event_var(userid) retry
	     }
      if (server_var(ace_rate_kick) equalto 1) do
	     {
	       es kickid event_var(userid) You were kicked because your rate is too low
	     }
    }
  if (server_var(ace_rate_rate) greaterthan server_var(ace_max_rate)) do
    {
      es_cexec event_var(userid) rate server_var(ace_max_rate)
      if (server_var(ace_rate_announce) equalto 1) do
        {
          es_msg #multi #default :Ace Rates:#lightgreen event_var(es_username)#green rate was:#lightgreen server_var(ace_rate_rate)#green lowered to server max:#lightgreen server_var(ace_max_rate)
          if (server_var(ace_rate_reconnect) equalto 1) do
	     {
	       es_msg #multi #default :Ace Rates:#lightgreen event_var(es_username)#green has been forced to reconnect for a rate violation
	     }
      if (server_var(ace_rate_kick) equalto 1) do
	       {
	         es_msg #multi #default :Ace Rates:#lightgreen event_var(es_username)#green has been kicked for a rate violation
	       }
        }
      if (server_var(ace_rate_reconnect) equalto 1) do
	     {
	       es_tell event_var(userid) #multi #default :Ace Rates:#lightgreen You were forced to reconnect because your rate is too high
	       es_delayed 5 esnq es_cexec event_var(userid) retry
	     }
      if (server_var(ace_rate_kick) equalto 1) do
	       {
	         es kickid event_var(userid) You were kicked because your rate is too high
	       }
    }
  if (server_var(ace_rate_cmdrate) lessthan server_var(ace_min_cmdrate)) do
    {
      es_cexec event_var(userid) cl_cmdrate server_var(ace_min_cmdrate)
      if (server_var(ace_rate_announce) equalto 1) do
        {
          es_msg #multi #default :Ace Rates:#lightgreen event_var(es_username)#green cmd rate was:#lightgreen server_var(ace_rate_cmdrate)#green raised to server min:#lightgreen server_var(ace_min_cmdrate)
          if (server_var(ace_rate_reconnect) equalto 1) do
	     {
	       es_msg #multi #default :Ace Rates:#lightgreen event_var(es_username)#green has been forced to reconnect for a rate violation
	     }
      if (server_var(ace_rate_kick) equalto 1) do
	       {
	         es_msg #multi #default :Ace Rates:#lightgreen event_var(es_username)#green has been kicked for a rate violation
	       }
        }
      if (server_var(ace_rate_reconnect) equalto 1) do
	     {
	       es_tell event_var(userid) #multi #default :Ace Rates:#lightgreen You were forced to reconnect because your command rate is too low
	       es_delayed 5 esnq es_cexec event_var(userid) retry
	     }
      if (server_var(ace_rate_kick) equalto 1) do
	       {
	         es kickid event_var(userid) You were kicked because your command rate is too low
	       }
    }
  if (server_var(ace_rate_cmdrate) greaterthan server_var(ace_max_cmdrate)) do
    {
      es_cexec event_var(userid) cl_cmdrate server_var(ace_max_cmdrate)
      if (server_var(ace_rate_announce) equalto 1) do
        {     
          es_msg #multi #default :Ace Rates:#lightgreen event_var(es_username)#green cmd rate was:#lightgreen server_var(ace_rate_cmdrate)#green lowered to server max:#lightgreen server_var(ace_max_cmdrate)
          if (server_var(ace_rate_reconnect) equalto 1) do
	     {
	       es_msg #multi #default :Ace Rates:#lightgreen event_var(es_username)#green has been forced to reconnect for a rate violation
	     }
      if (server_var(ace_rate_kick) equalto 1) do
	     {
	       es_msg #multi #default :Ace Rates:#lightgreen event_var(es_username)#green has been kicked for a rate violation
	     }
        }
      if (server_var(ace_rate_reconnect) equalto 1) do
	     {
	       es_tell event_var(userid) #multi #default :Ace Rates:#lightgreen You were forced to reconnect because your command rate is too high
	       es_delayed 5 esnq es_cexec event_var(userid) retry
	     }
      if (server_var(ace_rate_kick) equalto 1) do
	     {
         es kickid event_var(userid)You were kicked because your command rate is too high
	     }
    }
  if (server_var(ace_rate_updaterate) lessthan server_var(ace_min_updaterate)) do
    {
      es_cexec event_var(userid) cl_updaterate server_var(ace_min_updaterate)
      if (server_var(ace_rate_announce) equalto 1) do
        {
          es_msg #multi #default :Ace Rates:#lightgreen event_var(es_username)#green upd rate was:#lightgreen server_var(ace_rate_updaterate)#green raised to server min:#lightgreen server_var(ace_min_updaterate)
          if (server_var(ace_rate_reconnect) equalto 1) do
	     {
	       es_msg #multi #default :Ace Rates:#lightgreen event_var(es_username)#green has been forced to reconnect for a rate violation
	     }
      if (server_var(ace_rate_kick) equalto 1) do
	       {
	         es_msg #multi #default :Ace Rates:#lightgreen event_var(es_username)#green has been kicked for a rate violation
	       }
        }
      if (server_var(ace_rate_reconnect) equalto 1) do
	     {
	       es_tell event_var(userid) #multi #default :Ace Rates:#lightgreen You were forced to reconnect because your update rate is too low
	       es_delayed 5 esnq es_cexec event_var(userid) retry
	     }
      if (server_var(ace_rate_kick) equalto 1) do
	       {
           es kickid event_var(userid)You were kicked because your update rate is too low
	       }
    }
  if (server_var(ace_rate_updaterate) greaterthan server_var(ace_max_updaterate)) do
    {
    es_cexec event_var(userid) cl_updaterate server_var(ace_max_updaterate)
    if (server_var(ace_rate_announce) equalto 1) do
      {
        es_msg #multi #default :Ace Rates:#lightgreen event_var(es_username)#green upd rate was:#lightgreen server_var(ace_rate_updaterate)#green lowered to server max:#lightgreen server_var(ace_max_updaterate)
        if (server_var(ace_rate_reconnect) equalto 1) do
	     {
	       es_msg #multi #default :Ace Rates:#lightgreen event_var(es_username)#green has been forced to reconnect for a rate violation
	     }
  if (server_var(ace_rate_kick) equalto 1) do
	    {
	      es_msg #multi #default :Ace Rates:#lightgreen event_var(es_username)#green has been kicked for a rate violation
	    }
      }
    if (server_var(ace_rate_reconnect) equalto 1) do
	     {
	       es_tell event_var(userid) #multi #default :Ace Rates:#lightgreen You were forced to reconnect because your update rate is too jigh
	       es_delayed 5 esnq es_cexec event_var(userid) retry
	     }
  if (server_var(ace_rate_kick) equalto 1) do
	    {
        es kickid event_var(userid)You were kicked because your update rate is too low
	    }
    }
   //
}
event player_say
{
if (event_var(text) = "rates") then es_doblock ace_rates/print_rates
}
block print_rates
{
   es_xsetinfo acer_list 0
   es_xsetinfo acec_list 0
   es_xsetinfo aceu_list 0
   es_xsetinfo acerplname 0
   es_setinfo acer_players 0
   es_createplayerlist acer_players
   es_foreachkey acerpl in acer_players "es_getplayername acerplname server_var(acerpl);es_getclientvar acer_list server_var(acerpl) rate;es_getclientvar acec_list server_var(acerpl) cl_cmdrate;es_getclientvar aceu_list server_var(acerpl) cl_updaterate;es_tell event_var(userid) #multi #default :Ace Rates: #lightgreen server_var(acerplname) - rate: server_var(acer_list) - cmd rate: server_var(acec_list) - upd rate: server_var(aceu_list)" 
   es_keygroupdelete acer_players
}
