Amxbans Forum Index Amxbans

 RSS   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 


New development is now @ amxbans.de

This forum will still be up for some time but please visit the new continued amxbans development site.
Regards Lantz69

Client Checker

 
Post new topic   Reply to topic    Amxbans Forum Index -> Support and Help
View previous topic :: View next topic  
Author Message
w2zzaaa
Peon

Joined: 25 Feb 2010


PostPosted: Thu Feb 25, 2010 8:13 am    Post subject: Client Checker Reply with quote

http://forums.alliedmods.net/showthread.php?t=46198

what is wrong this code:(or my amxbans)

new ipa[32]
get_user_ip(id, ipa, 31, 1)
server_cmd("amx_ban 2800 %s;writeid", uID)
}
else
{
server_cmd("amx_ban 2800 %s kick;writeid", uID)
}
client_print(id, print_console, "Banned: constant invalid settings!")
server_cmd("Ban %s^"Banned: constant invalid settings!^"", uID)
client_print(0, print_chat, "[ClientChecker] %s, got Banned due to constant changing to invalid settings!", name)


when i go server and test this...

[ClientChecker] NAME, got Banned due to constant changing to invalid settings

but I am not banned, I get to play
Back to top
View user's profile Send private message
GameFreak
Peon

Joined: 31 Oct 2009
Location: Belgium

PostPosted: Fri Mar 05, 2010 4:54 pm    Post subject: Reply with quote

Please provide us the whole code.
_________________
- GameFreak
AmxBans.de Moderator
Back to top
View user's profile Send private message Visit poster's website
w2zzaaa
Peon

Joined: 25 Feb 2010


PostPosted: Sun Mar 07, 2010 10:13 am    Post subject: Reply with quote

Code:
/*
Client Checker

What does it do?

It can check client rates
It can check client CVARS which can be configured in a config file
It can show a (dis)connect message from clients (possibility to show from which country the player connects)
It can kick players with high ping (Used / Modified the HPK code)

CVARS:F

    * cc_connectmsg - Shows who is (dis)connecting
    * cc_showgeoip - Shows connecting player country
    * cc_ratecheck - Check client rates
    * cc_cvarcheck - Check client cvars (using the config file)
    * cc_pingcheck - High ping kick
    * cc_writelog - Write invalid client settings and Admin actions to a log file
    * cc_chkdelay - Delay between checks in seconds
    * cc_maxping - Maximum allowed ping
    * cc_maxpingwarns - Ping check cycles before kick
    * cc_minupdaterate - Minimum allowed cl_updaterate
    * cc_mincmdrate - Minimum allowed cl_cmdrate
    * cc_minrate - Minimum allowed rate
    * cc_messagetype - Show message about invalid settings to:
          + 0 = Nobody
          + 1 = AMX Admins
          + 2 = Checked Player + AMX Admins
          + 3 = All players
    * cc_agreemenu - This will show the agreement menu
    * cc_agreetimeout - How long the client has to accept
    * cc_maxitems - This is to set how many cvars will be checked in one check cycle
    * cc_writecfg - Write changes to the client checker config file
    * cc_maxinvalid - Maximum allowed invalid changes of settings from a client before they will be kicked
    * cc_showinfo - Show info in client console
    * cc_realoadcfg - Reload the cvar checker config file
    * cc_daystosave - How long the agreement of a client should be saved

CVAR Check Config:

cvar {
   max_value     - Use this for numeric values only
   min_value     - Use this for numeric values only

   set_value     - Value that will replace the invalid value (when using '*' as value it will set to the avg of the min and max value)

   equal_to    - Value must be equal to this, if not change it to the set_value
   !equal_to   - Value can not be equal to this, if it is change it to the set_value
   contains   - Value contains this. Change value to set_value (use comma to use spererate values)
   !contains   - Value does not contain this. Change value to set_value (use comma to use spererate values)
   regex      - Use a regex pattern (http://www.troubleshooters.com/codecorn/littperl/perlreg.htm
}

Examples:

gl_polyoffset {
   max_value 4
   set_value 4
}

max_smokepuffs {
   min_value 120
   set_value 120
}

name {
   contains fuck,shit,cunt
   set_value BANNED_NAME
}

Requirements:
This plugin requires amxmodx 1.7 or later to work!

Change log:
1.0.1:
- Changed the CVAR checker config (it will still read its old config)
- Agree save is now using nvault to store steamid's. And it will remove entries older than 14 days by default (only if the SQL version is not used).
1.0.0:
- Added SQL support
0.0.9:
- Bugfix: Always showing agreement menu even while steamid was in saved list!
- Did some optimization
0.0.8 Optimized:
- Optimized the code
- Added option to show the info in console when client joins the server (cc_showinfo)
0.0.8:
- Bugfix: now using get_players instead of get_playersnum so all messages should be working now.
0.0.7:
- Changed the maximum save value to 512 (this is defined in the source code and can be changed to use a low or higher number)
- Added quick cvar check when a client joins the server.
- Added option to auto kick clients that keep changing there settings to an invalid value. (The number of invalid changes can be set in the config. And will only start after the first check).
- Added option to automaticly write admin changes to the config file.
0.0.6:
- Added option to show a agreement menu before the client checker starts. If the user doesnt agree he/she will be removed from the server.
- Added option to keep a little save file of the users who agreed (up to 64 records)
- Added a limit to maximum cvar checks in one check cycle. This is to prevent flooding with big cvar check lists. The maximum items to check can be set with "cc_maxitems".
0.0.5:
- Small bug fix with geoip when a bot joins the server. Also added some code to check if the country isnt matching error.
0.0.4:
- Fixed the cc_showgeoip cvar (it did not check if it was en/dis-abled)
- Added messages for High ping kick
- Added pcvars to make it faster
0.0.3:
- Fixed bug in Cvar checker
- Code revision (cleaned up some of the mess)
0.0.2: Public version
0.0.1: Private test version
*/



// Log file
new const logfile[] =    "ClientChecker.log"
// Config file
new const cfgfile[]  =    "ClientChecker.cfg"
// CVARs config file
new const cvarsfile[] =    "chk_cvars.cfg"

// Uncomment next line to make use of the SQL stuff
//#define USESQL

// Maximum cvar items 256 items should be enough
#define MAXITEMS    256




/*************************/
/* Code starts from here */
/*************************/

#include <amxmodx>
#include <amxmisc>
#include <geoip>
#include <nvault>
#include <regex>

#if defined USESQL
   #include <dbi>
   #define VERSION "1.0.1-SQL"
#else
   #define VERSION "1.0.1"
#endif
#define PLUGIN "Client Checker"
#define AUTHOR "Crazed"

new iPingkick[33] // High Ping count
new menu_timer[33] // Agree menu timer
new cvar_chkitem[33] // Current checked item (for fast chk)
new client_isettings[33] // Invalid settings count
new cvars_buf[MAXITEMS+1][64] // Holds all CVARs that needs to be checked
new cvar_items // CVAR item count
new bool:b_geoip // Holds true when GeoIP module is loaded
new keys = (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9)  // Menu keys
new bool:b_oldcfg // if set to true still use old cvar check stuff

new g_configfile[128]
new g_chkcvarfile[128]
#if !defined USESQL
   new const g_savefile[] = "agreesavefile"
#endif

#if defined USESQL
   new Sql:sql
   new sql_host[256], sql_user[128], sql_pass[128], sql_dbname[128]
   // SQL pcvars
   new cvar_sqlhost, cvar_sqluser, cvar_sqlpass, cvar_sqldbname
#else
   new cvar_daystosave
#endif

// pcvars
new cvar_connectmsg, cvar_ratecheck, cvar_pingcheck,
     cvar_cvarcheck, cvar_messagetype, cvar_showgeoip,
     cvar_writelog, cvar_chkdelay, cvar_maxping,
     cvar_maxpingwarns, cvar_minupdaterate, cvar_mincmdrate,
     cvar_minrate, cvar_agreetimeout, cvar_agreemenu,
     cvar_maxitems, cvar_maxinvalid, cvar_writecfg,
     cvar_showinfo
   
// enable / disable cvars
#define AdminCMDs1 9
static const array_enable_disable[AdminCMDs1][] =
{
   "cc_connectmsg",
   "cc_ratecheck",
   "cc_pingcheck",
   "cc_cvarcheck",
   "cc_showgeoip",
   "cc_writelog",
   "cc_agreemenu",
   "cc_writecfg",
   "cc_showinfo"
}
// Other cvars
#define AdminCMDs2 11
static const array_cmd_cvars[AdminCMDs2][] = {
   "cc_chkdelay",
   "cc_maxping",
   "cc_maxpingwarns",
   "cc_minupdaterate",
   "cc_mincmdrate",
   "cc_minrate",
   "cc_messagetype",
   "cc_agreetimeout",
   "cc_maxitems",
   "cc_maxinvalid",
   "cc_daystosave"
}
// Initiate Plugin
public plugin_init()
{
   register_plugin(PLUGIN, VERSION, AUTHOR)
   cvar_connectmsg = register_cvar("cc_connectmsg", "1")
   
   cvar_ratecheck = register_cvar("cc_ratecheck", "1")
   cvar_pingcheck = register_cvar("cc_pingcheck", "1")
   cvar_cvarcheck = register_cvar("cc_cvarcheck", "1")
   cvar_messagetype = register_cvar("cc_messagetype", "1")
   cvar_showgeoip = register_cvar("cc_showgeoip", "1")
   cvar_writelog = register_cvar("cc_writelog", "1")
   
   cvar_chkdelay = register_cvar("cc_chkdelay", "3")
   cvar_maxping = register_cvar("cc_maxping", "100")
   cvar_maxpingwarns = register_cvar("cc_maxpingwarns", "5")
   
   cvar_minupdaterate = register_cvar("cc_minupdaterate", "60")
   cvar_mincmdrate = register_cvar("cc_mincmdrate", "60")
   cvar_minrate = register_cvar("cc_minrate", "15000")
   
   cvar_agreetimeout = register_cvar("cc_agreetimeout", "30")
   cvar_agreemenu = register_cvar("cc_agreemenu", "1")
   
   cvar_maxitems = register_cvar("cc_maxitems", "5")
   cvar_maxinvalid = register_cvar("cc_maxinvalid", "10")
   cvar_writecfg = register_cvar("cc_writecfg", "1")
   cvar_showinfo = register_cvar("cc_showinfo", "1")
   
   #if defined USESQL
      cvar_sqlhost = register_cvar("cc_sqlhost", "localhost:3306")
      cvar_sqluser = register_cvar("cc_sqluser", "my_user")
      cvar_sqlpass = register_cvar("cc_sqlpass", "my_pass")
      cvar_sqldbname = register_cvar("cc_sqldbname", "ClientChecker")
   #else
      cvar_daystosave = register_cvar("cc_daystosave", "14")
   #endif
   
   // agreement menu
   register_menucmd(register_menuid("\yClient Checker"), 1023, "cc_menuhandle")
   
   
   new i
   // Register Admin Commands
   for (i = 0;i < AdminCMDs1;i++)
      register_concmd(array_enable_disable[i], "Admin_Commands", ADMIN_CFG)
   for (i = 0;i < AdminCMDs2;i++)
      register_concmd(array_cmd_cvars[i], "Admin_Commands", ADMIN_CFG)
   
   register_concmd("cc_reloadcfg", "Admin_Commands", ADMIN_CFG)
   
   // Check if the GeoIP Module is loaded
   if (is_module_loaded("geoip") != -1)
      b_geoip = true
}
// Plugin Configure
public plugin_cfg()
{
   new cfgdir[32]
   // Load CFG file
   get_configsdir(cfgdir, 31)
   formatex(g_configfile, 63, "%s/%s", cfgdir, cfgfile)
   if (file_exists(g_configfile))
   {
      server_print("[ClientChecker] Loading %s", cfgfile)
      server_cmd("exec %s", g_configfile)
   }
   // Load cvars + settings to buffer
   formatex(g_chkcvarfile, 63, "%s/%s", cfgdir, cvarsfile)
   if (file_exists(g_chkcvarfile))
   {
      server_print("[ClientChecker] Loading %s", cvarsfile)
      load_cvarsconfig()
   }
   #if !defined USESQL
      // Clear old entries
      new vault = nvault_open(g_savefile)
      nvault_prune(vault, 0, get_systime() - (get_pcvar_num(cvar_daystosave)*86400))
      nvault_close(vault)
   #endif
}
#if !defined USESQL
// Write Save file
Write_AgreeSave(id)
{
   new auth[35]
   get_user_authid(id, auth, 34)
   new vault = nvault_open(g_savefile)
   nvault_set(vault, auth, "1")
   nvault_close(vault)
}
// Check if user has agreed in the past
Check_AgreeSave(id)
{
   new auth[35], bool:out, timestamp, value[2]
   get_user_authid(id, auth, 34)
   new vault = nvault_open(g_savefile)
   if (nvault_lookup(vault, auth, value, sizeof(value)-1, timestamp))
   {
      out = true
      nvault_touch(vault, auth)
   }
   nvault_close(vault)
   return out
}
#endif
// Client left the server
public client_disconnect(id)
{
   // Print message about disconnecting user if enabled
   if (get_pcvar_num(cvar_connectmsg))
   {
      new name[32]
      get_user_name(id, name, 31)
      client_print(0, print_chat, "%s, disconnected.", name)
   }
   // Remove checker task
   if (task_exists(id))
      remove_task(id)
      
   return PLUGIN_CONTINUE
}

// Client put in server
public client_putinserver(id)
{
   new is_bot = is_user_bot(id)
   new is_hltv = is_user_hltv(id)
   // Print message about connecting user if enabled
   if (get_pcvar_num(cvar_connectmsg))
   {
      new name[32]
      get_user_name(id, name, 31)
      // Use GeoIP Module if it is loaded
      if (b_geoip && get_pcvar_num(cvar_showgeoip) && !is_bot && !is_hltv)
      {
         // Check the GeoIP for country
         new country[46], ip[33]
         get_user_ip(id, ip, 32)
         geoip_country(ip, country, 45)
         if (!equali(country, "error"))
            client_print(0, print_chat, "%s, connected. (%s)", name, country)
         else
            client_print(0, print_chat, "%s, connected.", name)
      }
      else
         client_print(0, print_chat, "%s, connected.", name)
   }
   iPingkick[id] = 0 // Reset ping kick counter
   cvar_chkitem[id] = 0 // Reset invalid settings counter
   
   if (!is_bot && !is_hltv)
   {
      new param[1]
      param[0] = id
      if (get_pcvar_num(cvar_agreemenu))
      {
         #if defined USESQL
            if (!sql_checkid(id))
               set_task(0.5, "cc_showmenu", id, _,_, "b")
            else
               set_task(5.0, "startchk", id, param, 1)
         #else
            if (!Check_AgreeSave(id))
               set_task(0.5, "cc_showmenu", id, _,_, "b")
            else
               set_task(5.0, "startchk", id, param, 1)
         #endif
      } else
         set_task(5.0, "startchk", id, param, 1)
   }
   return PLUGIN_CONTINUE
}

// Format the menu for agreement
stock format_menu(id)
{
   new menu[1024],tmp[256]
   formatex(tmp, sizeof(tmp)-1, "\yClient Checker (%d secs)^n^n", menu_timer[id]) // Menu Topic
   strcat(menu, tmp, sizeof(menu)-1)
   formatex(tmp, sizeof(tmp)-1, "This server is using Client Checker to validate your settings.^n") // Menu 1st rule
   strcat(menu, tmp, sizeof(menu)-1)
   formatex(tmp, sizeof(tmp)-1, "This means that all your invalid settings will be set^n") // Menu 2nd rule
   strcat(menu, tmp, sizeof(menu)-1)
   formatex(tmp, sizeof(tmp)-1, "to the allowed value on this server.^n") // Menu 3rd rule
   strcat(menu, tmp, sizeof(menu)-1)
   formatex(tmp, sizeof(tmp)-1, "Do you agree with this?^n^n") // Menu 4th rule
   strcat(menu, tmp, sizeof(menu)-1)
   formatex(tmp, sizeof(tmp)-1, "1. Yes, I agree^n") // Menu 5th rule (Agree)
   strcat(menu, tmp, sizeof(menu)-1)
   formatex(tmp, sizeof(tmp)-1, "2. No, I disagree (this will remove you from this server!)") // Menu 6th rule (Disagree)
   strcat(menu, tmp, sizeof(menu)-1)
   return menu
}
// Show agreement menu
public cc_showmenu(id)
{
   new team[16], teamID = get_user_team(id, team, 15);
   if (teamID == 1 || teamID == 2 || equal(team, "SPECTATOR"))
   {
      // remove old task
      if (task_exists(id))
         remove_task(id)
         
      menu_timer[id] = get_pcvar_num(cvar_agreetimeout)
      show_menu(id, keys, format_menu(id))
      set_task(1.0, "cc_updatemenu", id, _,_, "a", menu_timer[id]+1)
   }
}
// Update agreement menu
public cc_updatemenu(id)
{
   --menu_timer[id]
   if (menu_timer[id] < 0) {
      new name[32], uID = get_user_userid(id)
      get_user_name(id, name, 31)
      client_print(0, print_chat, "[ClientChecker] %s, did not agree with the agreement. (Time out)", name)
      server_cmd("kick #%d ^"You did not agree with the agreement! (Time out)^"", uID)
   } else
      show_menu(id, keys, format_menu(id))
}
// Handle the keys for agreement menu
public cc_menuhandle(id, key)
{
   switch(key)
   {
      case 0: // Agree
      {
         // Remove Menu update task
         if (task_exists(id))
            remove_task(id)
         new param[1];param[0] = id
         startchk(param)
         // save agreement
         #if defined USESQL
            sql_addid(id)
         #else
            if (!Check_AgreeSave(id))
            {
               Write_AgreeSave(id)
            }
         #endif
      }
      case 1: // Disagree
      {
         // Remove Menu update task
         if (task_exists(id))
            remove_task(id)
            
         new name[32], uID = get_user_userid(id)
         get_user_name(id, name, 31)
         client_print(0, print_chat, "[ClientChecker] %s, did not agree with the agreement.", name)
         server_cmd("kick #%d ^"You did not agree with the agreement!^"", uID)
      }
      default: // Wrong key press
         cc_showmenu(id)
   }
}
// Start Checks
public startchk(param[])
{
   new id = param[0]
   // Print crap in console
   if (get_pcvar_num(cvar_showinfo))
   {
      client_print(id, print_console, "------[ Client Checker ]------")
      client_print(id, print_console, "Version: %s", VERSION)
      client_print(id, print_console, "Ping check: %s", get_num_str(cvar_pingcheck))
      client_print(id, print_console, "Rate check: %s", get_num_str(cvar_ratecheck))
      client_print(id, print_console, "Cvar check: %s", get_num_str(cvar_cvarcheck))
      client_print(id, print_console, "------------------------------")
      client_print(id, print_console, "Max Ping: %d", get_pcvar_num(cvar_maxping))
      client_print(id, print_console, "Warnings: %d", get_pcvar_num(cvar_maxpingwarns))
      client_print(id, print_console, "Min rate: %d", get_pcvar_num(cvar_minrate))
      client_print(id, print_console, "Min updaterate: %d", get_pcvar_num(cvar_minupdaterate))
      client_print(id, print_console, "Min cmdrate: %d", get_pcvar_num(cvar_mincmdrate))
      client_print(id, print_console, "------------------------------")
   }
   
   // Ping check messages
   if (get_pcvar_num(cvar_pingcheck))
      client_print(id, print_chat, "[ClientChecker] Players with ping above %d will be kicked!", get_pcvar_num(cvar_maxping))
   // Run all checks before check cycle starts.
   set_task(0.5, "FastCheck", id, param, 1, "b")
}
public FastCheck(param[])
{
   new id = param[0]
   // Check rates
   if ((get_pcvar_num(cvar_ratecheck)) && (cvar_chkitem[id] == 0))
   {
      query_client_cvar(id, "rate", "ClientCvarResult")
      query_client_cvar(id, "cl_updaterate", "ClientCvarResult")
      query_client_cvar(id, "cl_cmdrate", "ClientCvarResult")
   }
   // Check other cvars
   if (get_pcvar_num(cvar_cvarcheck))
   {
      new left[64], right[64]
      strtok(cvars_buf[cvar_chkitem[id]], left, 63,right,63,' ')
      if (get_pcvar_num(cvar_showinfo))
         client_print(id, print_console, "[ClientChecker] Checking: %s", left)
      query_client_cvar(id, left, "ClientCvarResult")
   }
   if (!get_pcvar_num(cvar_cvarcheck) || (cvar_chkitem[id] >= cvar_items-1))
   {
      cvar_chkitem[id] = 0
      remove_task(id)
      // Set task to check every X seconds
      set_task(float(get_pcvar_num(cvar_chkdelay)), "CheckClient", id, param, 1, "b")
      return PLUGIN_HANDLED
   }
   cvar_chkitem[id]++
   return PLUGIN_CONTINUE
}
get_num_str(pcvar) {
   new tmp[9]
   switch(get_pcvar_num(pcvar))
   {
      case 0:
         tmp = "disabled"
      case 1:
         tmp = "enabled"
   }
   return tmp
}
public CheckClient(param[])
{
   new id = param[0]
   
   if (!is_user_connected(id))
   {
      remove_task(id)
      return PLUGIN_HANDLED
   }
      
   // Ping Check if enabled
   if (get_pcvar_num(cvar_pingcheck))
   {
      new ping, loss
      get_user_ping(id, ping, loss)
      if (ping > get_pcvar_num(cvar_maxping))
      {
         ++iPingkick[id]
         client_print(id, print_chat, "[ClientChecker] Your ping is to high! (%d/%d)", iPingkick[id],get_pcvar_num(cvar_maxpingwarns))
      }
      else if (iPingkick[id] > 0)
         --iPingkick[id]
      if (iPingkick[id] > get_pcvar_num(cvar_maxpingwarns))
         KickPlayer(id)
   }
   // Check rates
   if (get_pcvar_num(cvar_ratecheck))
   {
      query_client_cvar(id, "rate", "ClientCvarResult")
      query_client_cvar(id, "cl_updaterate", "ClientCvarResult")
      query_client_cvar(id, "cl_cmdrate", "ClientCvarResult")
   }
   // Check other cvars
   if (get_pcvar_num(cvar_cvarcheck))
   {
      new left[64],right[64]
      new tmp = cvar_chkitem[id] + get_pcvar_num(cvar_maxitems)
      if (tmp > cvar_items)
         tmp = cvar_items
         
      for (new i = cvar_chkitem[id]; i < tmp; i++)
      {
         strtok(cvars_buf[i], left, 63,right,63,' ')
         query_client_cvar(id, left, "ClientCvarResult")
      }
      if (tmp >= cvar_items)
         cvar_chkitem[id] = 0
      else
         cvar_chkitem[id] += get_pcvar_num(cvar_maxitems)
   }
   return PLUGIN_CONTINUE
}

public ClientCvarResult(id, const cvar[], const value[])
{
   new minrate, mincmdrate, minupdrate
   minrate = get_pcvar_num(cvar_minrate)
   mincmdrate = get_pcvar_num(cvar_mincmdrate)
   minupdrate = get_pcvar_num(cvar_minupdaterate)
   new Float:f_value = str_to_float(value)
   if (equali(value, "Bad CVAR request"))
      return PLUGIN_HANDLED
   // Check Rates
   else if ((equal(cvar, "rate")) && (f_value < minrate))
   { 
      cc_messagetype(id, cvar,  value)
      console_cmd(id, "rate %d", minrate)
      return PLUGIN_HANDLED
   }
   else if ((equal(cvar, "cl_updaterate")) && (f_value < minupdrate))
   {
      cc_messagetype(id, cvar, value)
      console_cmd(id, "cl_updaterate %d", minupdrate)
      return PLUGIN_HANDLED
   }
   else if ((equal(cvar, "cl_cmdrate")) && (f_value < mincmdrate))
   {
      cc_messagetype(id, cvar,value)
      console_cmd(id, "cl_cmdrate %d", mincmdrate)
      return PLUGIN_HANDLED
   }
   else
   {
      // Check Other Cvars
      if (b_oldcfg)
      {
         new left[64], right[64], chkcvar[64], chkvalue[64],  setvalue[64], methode[64]
         new Float:f_chkvalue
         for (new i = 1; i < cvar_items; i++)
         {
            strtok(cvars_buf[i], left, 63, right, 63, ';');chkcvar = left;setvalue = right
            strtok(chkcvar, left, 63, right, 63, ' ',1);chkcvar = left;methode = right
            strtok(methode, left, 63, right, 63, ' ',1);methode = left;chkvalue = right
      
            f_chkvalue = str_to_float(chkvalue)
            // cvar must be equal
            if ((equal(methode, "=")) && (equal(chkcvar, cvar)) && (!equal(chkvalue, value)))
            {
               cc_messagetype(id,cvar,value)
               console_cmd(id, "%s %s", cvar, setvalue)
            }
            // cvar must be bigger
            else if ((equal(methode, ">")) && (equal(chkcvar, cvar)) && (f_value > f_chkvalue))
            {
               cc_messagetype(id,cvar,value)
               console_cmd(id, "%s %s", cvar, setvalue)
            }
            // cvar must be smaller
            else if  ((equal(methode, "<"))  && (equal(chkcvar, cvar)) && (f_value < f_chkvalue))
            {
               cc_messagetype(id,cvar,value)
               console_cmd(id, "%s %s", cvar, setvalue)
            }
            // cvar can be all except
            else if ((equal(methode, "!"))  && (equal(chkcvar, cvar)) && (equal(value, chkvalue)))
            {
               cc_messagetype(id,cvar,value)
               console_cmd(id, "%s %s", cvar, setvalue)
            }
         }
      }
      else
      {
         new v_value[1024], timestamp
         new vault = nvault_open("CvarCheck")
         new x = nvault_lookup(vault, cvar, v_value, sizeof(v_value)-1, timestamp)
         nvault_close(vault)
         if (!x)
            return PLUGIN_HANDLED
         new setvalue[32], getvalue[32]
         new Float:maxvalue, Float:minvalue
         copy(setvalue, sizeof(setvalue)-1, get_value(v_value,"set_value"))
         if (contain(v_value, "min_value") >= 0)
         {
            copy(getvalue, sizeof(getvalue)-1, get_value(v_value, "min_value"))
            minvalue = str_to_float(getvalue)
            if (equal(setvalue, "*") && contain(v_value, "max_value")  != -1)
            {
               copy(getvalue, sizeof(getvalue)-1, get_value(v_value, "max_value"))
               maxvalue = str_to_float(getvalue)
               if (f_value <  minvalue || f_value > maxvalue)
               {
                  new avgvalue[32]
                  float_to_str((minvalue+maxvalue)/2, avgvalue, sizeof(avgvalue)-1)
                  cc_messagetype(id,cvar,value)
                  console_cmd(id, "%s %s", cvar, avgvalue)
                  return PLUGIN_HANDLED
               }
            }
            else if (f_value < minvalue)
            {
               cc_messagetype(id,cvar,value)
               console_cmd(id, "%s %s", cvar, setvalue)
               return PLUGIN_HANDLED
            }
         }
         if (contain(v_value, "max_value")  >= 0)
         {
            maxvalue  = Float:str_to_float(get_value(v_value, "max_value"))
            if (f_value > maxvalue)
            {
               cc_messagetype(id,cvar,value)
               console_cmd(id, "%s %s", cvar, setvalue)
               return PLUGIN_HANDLED
            }
         }
         if (contain(v_value, "equal_to")  >= 0)
         {
            if (cc_compare(value, get_value(v_value, "equal_to"), 1))
            {
               cc_messagetype(id,cvar,value)
               console_cmd(id, "%s %s", cvar, setvalue)
               return PLUGIN_HANDLED
            }
         }
         if (contain(v_value, "!equal_to")  >= 0)
         {
            if (!cc_compare(value, get_value(v_value, "!equal_to"), 1))
            {
               cc_messagetype(id,cvar,value)
               console_cmd(id, "%s %s", cvar, setvalue)
               return PLUGIN_HANDLED
            }
         }
         if (contain(v_value, "contains")  >= 0)
         {
            if (cc_compare(value, get_value(v_value, "contains"), 2))
            {
               cc_messagetype(id,cvar,value)
               console_cmd(id, "%s %s", cvar, setvalue)
               return PLUGIN_HANDLED
            }
         }
         if (contain(v_value, "!contains")  >= 0)
         {
            if (!cc_compare(value, get_value(v_value, "!contains"), 2))
            {
               cc_messagetype(id,cvar,value)
               console_cmd(id, "%s %s", cvar, setvalue)
               return PLUGIN_HANDLED
            }
         }
         if (contain(v_value, "regex") >= 0)
         {
            new pattern[256], Regex:re, ret , error[128]
            copy(pattern, sizeof(pattern)-1, get_value(v_value, "regex"))
            re = regex_match(value, pattern, ret, error, sizeof(error)-1)
            if (re >= REGEX_OK)
            {
               cc_messagetype(id,cvar,value)
               console_cmd(id, "%s %s", cvar, setvalue)
               return PLUGIN_HANDLED
            }
         }
      }
   }
   return PLUGIN_CONTINUE
}
cc_messagetype(id, const cvar[], const value[])
{
   new name[32], is_admin, is_hltv, num
   get_user_name(id, name, 31)
   new type = get_pcvar_num(cvar_messagetype)
   /*
      type 1: Admins only
      type 2: Checked Player + Admins
      type 3: All Players
   */
   if (type == 3)
      client_print(0, print_chat, "%d %s: %s %s", id, name, cvar, value)
   else
   {
      new players[32], player
      get_players(players, num, "c")
      for (new i = 0;i < num;i++)
      {
         player = players[i]
         is_hltv = is_user_hltv(player)
         if (!is_hltv)
         {
            is_admin = is_user_admin(player)
            switch(type)
            {
               case 1:
               {
                  if (is_admin)
                     client_print(player, print_chat, "%d %s: %s %s", id, name, cvar, value)
               }
               case 2:
               {
                  client_print(id, print_chat, "%d %s: %s %s", id, name ,cvar, value)
                  if (is_admin && id != player)
                     client_print(player, print_chat, "%d %s: %s %s", id, name, cvar, value)
               }
            }
         }
      }
   }
   // Write log
   if (get_pcvar_num(cvar_writelog))
   {
      new auth [35]
      get_user_authid(id, auth, 34)
      log_to_file(logfile, "(%s) %s: %s %s",auth, name, cvar, value)
   }
   // Invalid settings counter
   num = get_pcvar_num(cvar_maxinvalid)
   if (num > 0)
   {
      client_isettings[id]++
      if (client_isettings[id] >= num)
      {
         new uID = get_user_userid(id)
         new auth [35]
         get_user_authid(id, auth, 34)
         if (equal("4294967295", auth)
            || equal("HLTV", auth)
            || equal("STEAM_ID_LAN", auth)
            || equal("STEAM_ID_PENDING", auth)
            || equal("VALVE_ID_PENDING", auth)
            || equali("VALVE_ID_LAN", auth))
         {
            new ipa[32]
            get_user_ip(id, ipa, 31, 1)
            server_cmd("amx_ban 2800 %s kick;writeid", uID)
         }
         else
         {
            server_cmd("amx_ban 2800 %s kick;writeid", uID)
         }
         client_print(id, print_console, "Banned: constant invalid settings!")
         server_cmd("amx_Ban %s ^"Banned: constant invalid settings!^"", uID)
         client_print(0, print_chat, "[ClientChecker] %s, got Banned due to constant changing to invalid settings!", name)
      }
   }
   return PLUGIN_CONTINUE
}

KickPlayer(id)
{
   new name[32]
   get_user_name(id, name, 31)
   new uID = get_user_userid(id)
   server_cmd("banid 2800 #%d", uID)
   client_print(id, print_console, "Kicked due to high ping!")
   server_cmd("kick #%d ^"Kicked due to high ping!^"", uID)
   client_print(0, print_chat, "[ClientChecker] %s, got kicked due to high ping!", name)
}
// Admin Commands
public Admin_Commands(id)
{
   new value[8], num_value, cmd[16], name[32], uID[35], uIP[32], i
   if (!is_user_admin(id))
   {
      client_print(id, print_console, "Access denied!")
      return PLUGIN_HANDLED   
   }
      
   read_argv(1, value, 7)
   read_argv(0, cmd, 15)
   num_value = str_to_num(value)
   get_user_name(id, name, 31)
   get_user_ip(id, uIP, 31)
   get_user_authid(id, uID, 34)
   if (equali(cmd, "cc_reloadcfg"))
   {
      client_print(id, print_console, "Reloading CVAR Checker")
      cvar_items = 0
      load_cvarsconfig()
   }
   for (i = 0;i < AdminCMDs1;i++)
   {
      if (equali(array_enable_disable[i], cmd))
      {
         if (equali(value, ""))
         {
            client_print(id, print_console, "^"%s^" ^"%d^"", cmd, get_cvar_num(cmd))
         }
         else if (!is_str_num(value))
         {
            client_print(id, print_console, "0 = Disable")
            client_print(id, print_console, "1 = Enable")
         }
         else if ((num_value == 0) || (num_value == 1))
         {
            if (get_cvar_num(cmd) != num_value)
            {
               set_cvar_num(cmd, num_value)
               client_print(id, print_console, "Changed cvar: %s %d", cmd, num_value)
               // Write to log (if enabled)
               if (get_pcvar_num(cvar_writelog) || equali(cmd, "cc_writelog"))
                  log_to_file(logfile, "Changed cvar: %s %d (by %s : %s : %s)", cmd, num_value, name, uID, uIP)
               // Write new setting to config (if enabled)
               if (get_pcvar_num(cvar_writecfg) || equali(cmd, "cc_writecfg"))
                  write_cfg(id, cmd, value)
            }
            else
               client_print(id, print_console, "Nothing to be changed")
         }
         else {
            client_print(id, print_console, "0 = Disable")
            client_print(id, print_console, "1 = Enable")
         }
         return PLUGIN_HANDLED
      }
   }
   for (i = 0;i < AdminCMDs2;i++)
   {
      if (equali(array_cmd_cvars[i], cmd))
      {
         if (equali(value, "") || strlen(value) == 0)
         {
            client_print(id, print_console, "^"%s^" ^"%d^"", cmd, get_cvar_num(cmd))
         }
         else if (!is_str_num(value))
         {
            client_print(id, print_console, "No valid value given.")
         }
         // Check delay changed: Update tasks with new check delay
         else if ((equali("cc_chkdelay", cmd)) && (get_pcvar_num(cvar_chkdelay) != num_value))
         {
            new players[32], num, player
            get_players(players, num, "c")
            for (i = 0; i < num;i++)
            {
               player = players[i]
               if (task_exists(player))
                  change_task(player, str_to_float(value))
            }
         }
         else if (get_cvar_num(cmd) != num_value)
         {
            set_cvar_num(cmd, num_value)
            client_print(id, print_console, "Changed cvar: %s %d", cmd, num_value)
            // Write to log (if enabled)
            if (get_pcvar_num(cvar_writelog) || equali(cmd, "cc_writelog"))
               log_to_file(logfile, "Changed cvar: %s %d (by %s : %s : %s)", cmd, num_value, name, uID, uIP)
            // Write new setting to config (if enabled)
            if (get_pcvar_num(cvar_writecfg) || equali(cmd, "cc_writecfg"))
               write_cfg(id, cmd, value)
         }
         else
            client_print(id, print_console, "Nothing to be changed")
         break // Break the loop
      }
   }
   return PLUGIN_HANDLED
}

// Write new setting to config file
write_cfg(id, const cmd[], const value[])
{
   new  buffer[1024], bool:b_wrote, line = 0, len
   new bufsize = sizeof(buffer)-1
   if (file_exists(g_configfile))
   {
      new left[64], right[32], data[1024]
      while(read_file(g_configfile, line, buffer, bufsize, len))
      {
         strtok(buffer,left, 63, right, 31)
         if (equal(left, cmd))
         {
            formatex(data, 1023, "%s %s", cmd, value)
            write_file(g_configfile, data, line)
            b_wrote = true
         }
         ++line
      }
      if (strfind(buffer, "^n") == -1)
         write_file(g_configfile, "")
   }
   if (!b_wrote)
   {
      formatex(buffer, bufsize, "%s %s", cmd, value)
      write_file(g_configfile, buffer)
   }
   client_print(id, print_console, "Wrote ^"%s %s^" to ^"%s^"", cmd, value, cfgfile)
   return PLUGIN_CONTINUE
}


cc_compare(const value1[], const value2[], method)
{
   new left[128], right[1024]
   new bool:loop = true
   strtok(value2, left, sizeof(left)-1, right, sizeof(right)-1, ',')
   while(loop)
   {
      switch(method)
      {
         case 1: // equal to
         {
            // check if value is numeric
            if (is_str_num(left))
               if (str_to_float(left) == str_to_float(value1))
                  return true
            if (equali(left, value1))
               return true
         }
         case 2: // contains
         {
            if (containi(value1,left) >= 0)
               return true
         }
      }
      strtok(right, left, sizeof(left)-1, right, sizeof(right)-1, ',')
      if (contain(right, ",") == -1 && strlen(left) == 0)
         loop = false
   }
   return false
}
get_value(const value[], const type[])
{
   new pos = strfind(value, type)
   new len = strlen(type)
   new left[1024]
   new right[2]
   strtok(value[len+pos+1], left, sizeof(left)-1, right, sizeof(right)-1, ';')
   return left
}
load_cvarsconfig()
{
   new line, text[1024], txtlen, bool:b_open
      
   // remove old nvault file
   new nvault_file[92]
   get_datadir(nvault_file, sizeof(nvault_file)-1)
   format(nvault_file, sizeof(nvault_file)-1, "%s/vault/CvarCheck.vault", nvault_file)
   if (file_exists(nvault_file))
      delete_file(nvault_file)
   
   new item[64], value[2048], timestamp
   new vault = nvault_open("CvarCheck")
   new left[64], right[256]
   new Regex:re, ret, error[128]
   while (read_file(g_chkcvarfile, line, text, sizeof(text)-1, txtlen))
   {
      trim(text)
      if ((strfind(text, "//", 0, 0) != 0 || strfind(text, ";", 0, 0) != 0) && txtlen > 0)
      {
         // check if using the old config file
         re = regex_match(text, ".+\s[=,>,<,!]\s.+;.+", ret, error, sizeof(error)-1)
         if (re >= REGEX_OK)
         {
            server_print("[ClientChecker] Detected the old config file")
            b_oldcfg = true
            break
         }
         strtok(text, left, sizeof(left)-1, right, sizeof(right)-1) // split line
         if (b_open)
         {
            if (equal(text, "}"))
            {
               b_open = false
               nvault_set(vault, item, value)
               copy(value, sizeof(value)-1, "") // Clear value
               continue
            }
            else if (equal(left, "min_value"))
            {
               format(value, sizeof(value)-1, "%s;min_value:%s", value, right)
            }
            else if (equal(left, "max_value"))
            {
               format(value, sizeof(value)-1, "%s;max_value:%s", value, right)
            }
            else if (equal(left, "set_value"))
            {
               format(value, sizeof(value)-1, "set_value:%s%s", right, value)
            }
            else if (equal(left, "contains"))
            {
               format(value, sizeof(value)-1, "%s;contains:%s", value, right)
            }
            else if (equal(left, "!contains"))
            {
               format(value, sizeof(value)-1, "%s;!contains:%s", value, right)
            }
            else if (equal(left, "equal_to"))
            {
               format(value, sizeof(value)-1, "%s;equal_to:%s", value, right)
            }
            else if (equal(left, "!equal_to"))
            {
               format(value, sizeof(value)-1, "%s;!equal_to:%s", value, right)
            }
            else if(equal(left, "regex"))
            {
               format(value, sizeof(value)-1, "%s;regex:%s", value, right)
            }
         }
      }
      if (strlen(left) > 0 && equal(right, "{")) // Check line for "item {"
      {
         b_open = true
         copy(item, sizeof(item)-1, left)
         nvault_lookup(vault, item, value , sizeof(value)-1, timestamp)
         cvars_buf[cvar_items] = item
         cvar_items++
      }
      line++
   }
   nvault_close(vault)
   if (b_oldcfg)
   {
      new buf[64]
      new fp=fopen(g_chkcvarfile, "rt")
      cvar_items = 0
      new len, x
      while  (!feof(fp))
      {
         fgets(fp, buf, sizeof(buf)-1)
         trim(buf)
         len = strlen(buf)
         if (len > 0)
         {
            // Check if line starts with comment sign
            if (cvar_items == MAXITEMS)
               break
            x = strfind(buf, "//", 0, 0)
            if (x != 0)
            {
               cvars_buf[cvar_items] = buf
               cvar_items++
            }
         }
      }
      fclose(fp)
   }
}
#if defined USESQL
public sql_connect()
{
   new error[256]
   get_pcvar_string(cvar_sqlhost, sql_host, sizeof(sql_host))
   get_pcvar_string(cvar_sqluser, sql_user, sizeof(sql_user))
   get_pcvar_string(cvar_sqlpass, sql_pass, sizeof(sql_pass))
   get_pcvar_string(cvar_sqldbname, sql_dbname, sizeof(sql_dbname))
   sql = dbi_connect(sql_host, sql_user, sql_pass, sql_dbname, error, sizeof(error)-1)
   if (sql <= SQL_FAILED)
      log_amx("SQL CONNECT ERROR: %s", error)
}
public sql_checkid(id)
{
   sql_connect()
   if (sql <= SQL_FAILED)
   {
      log_amx("Could not check database due to a connection error!")
      return 0
   }
   else
   {
      new steamid[35]
      get_user_authid(id, steamid, sizeof(steamid)-1)
      new query[256]
      formatex(query, sizeof(query)-1, "SELECT steamid FROM s_SteamIDs WHERE steamid = '%s'", steamid)
      new Result:result = dbi_query(sql, query)
      dbi_close(sql)
      if (result >= RESULT_OK)
      {
         new temp[35]
         dbi_result(result, "steamid", temp, sizeof(temp)-1)
         dbi_free_result(result)
         if (equali(temp, steamid))
            return 1
      }
   }
   return 0
}
public sql_addid(id)
{
   sql_connect()
   if (sql <= SQL_FAILED)
      log_amx("Could not add a new steamid to the database due to a connection error!")
   else
   {
      new steamid[35]
      get_user_authid(id, steamid, sizeof(steamid)-1)
      new query[256]
      formatex(query, sizeof(query)-1, "INSERT INTO s_SteamIDs (steamid) values ('%s')", steamid)
      new Result:result = dbi_query(sql, query)
      if (result == RESULT_FAILED)
         log_amx("SQL Failed to add new steamid to database")
   }
   dbi_close(sql)
}
#endif
Back to top
View user's profile Send private message
GameFreak
Peon

Joined: 31 Oct 2009
Location: Belgium

PostPosted: Wed Mar 24, 2010 10:54 am    Post subject: Reply with quote

Try this at line 827:

Code:
        server_cmd("amx_ban 0 %s ^"Banned: constant invalid settings!^"", uID)

_________________
- GameFreak
AmxBans.de Moderator
Back to top
View user's profile Send private message Visit poster's website
Display posts from previous:   
Post new topic   Reply to topic    Amxbans Forum Index -> Support and Help All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You cannot download files in this forum


Powered by phpBB © 2001, 2005 phpBB Group