|
Member
Join Date: Nov 2007
Location: msk
|

10-24-2009
, 23:57
Name Checker - help a bit!
|
#1
|
Hi guys. I was trying to make a plugin with ability of name checking such as HLG has.
Here's what I got:
PHP Code:
/* Another name checker. Duplicates HLG original functions of name checking cos this is only thing i need.
CVARS:
nm_namechecks 1 // Enables players name checking nm_namechanges 3 // How many name changes allowed (0 - infinite) nm_nametime 900.0 // Name changes within x seconds. MUST be float.
Changelog
24.10.2009 v1.0 Initial release
Put cheaternames.ini file in your configs dir, or plugin will fail to load.
Default cheaternames.ini contain:
; This is NameChecker database file. Feel free to add your own checks. ; ; Format is: ; ; "name" "flags" "message" "reason" ; ; Maxchars: ; ; name - 31 ; flags - 2 ; message 50 ; reason -30 ; ; Flag reference: ; k - Kick ; p - Log and Say and Ban 30 min ; q - Log, Say and Ban Permanently ; ; Checking reference: ; ; a - Name must contain any of characters ; b - Name must be equal to characters ; ; Examlpe ; ; "Player" "ka" "Player! Change nickname!" "[HLG]_Change_Nickname!"
; Unwanted names "Player" "kb" "Player! Change nickname!" "[HLG] Change Nickname!"
; Cheaters "Use_Cheat" "qb" "DIE CHEATING BASTARD!" "[HLG] Cheater detected" "myg0t" "qa" "DIE CHEATING BASTARD!" "[HLG] Cheater detected" "mygot" "qa" "DIE CHEATING BASTARD!" "[HLG] Cheater detected"
; Cheating clans "4uTepbI" "qa" "DIE CHEATING BASTARD!" "[HLG] Cheating clans prohibited" "FPTeam" "qa" "DIE CHEATING BASTARD!" "[HLG] Cheating clans prohibited"
*/
#include <amxmodx> #include <amxmisc>
// Uncomment to enable logging to file in configs dir //#define LOG_TO_DIR 1 // Uncomment to enable debug messages. Logging must be enabled //#define DEBUG_MODE 1
#define MAX_STRINGS 16 #define MAX_CHARS 128 #define DELAY 3.0 #define BANTIME 30 new const PREFIX[] = "HLG" // Customization ends HERE. If you edit something below - unexpected behavior is possible.
#if defined LOG_TO_DIR new NamesLog[200] #endif new MemoryString[MAX_STRINGS][MAX_CHARS], g_name[MAX_STRINGS][32], g_namekey[MAX_STRINGS][3], g_message[MAX_STRINGS][51], g_reason[MAX_STRINGS][31] new cv_namechecks, cv_namechanges, cv_nametime new TotalNAMES new Float:g_namechanged[33],Float:g_lastban[33], g_nccount[33], bool:g_verifyed[33]
public plugin_init() { register_plugin("NameChecker","1.0","Lethal") cv_namechecks = register_cvar( "nm_namechecks", "1" ); cv_namechanges = register_cvar( "nm_namechanges", "3" ); cv_nametime = register_cvar( "nm_nametime", "900.0" ); }
public plugin_cfg() { new configsdir[200] new NamesFile[200] new NumNames = 0
get_configsdir(configsdir,199) #if defined LOG_TO_DIR format(NamesLog, 199, "%s/cheaternames.log", configsdir) #endif format(NamesFile,199,"%s/cheaternames.ini",configsdir)
if (!file_exists(NamesFile)) { server_print("[%s] Error: No %s found.",PREFIX,NamesFile) return PLUGIN_HANDLED; } NumNames = file_size(NamesFile,1) new tempi TotalNAMES = 0 for(new i=0;i<NumNames;i++) { MemoryString[TotalNAMES][0] = '^0' read_file(NamesFile,i,MemoryString[TotalNAMES],MAX_CHARS,tempi) if (!equal(MemoryString[TotalNAMES],"",strlen(MemoryString[TotalNAMES])) && (contain(MemoryString[TotalNAMES],";") == -1)) TotalNAMES++ }
new db_name[34], db_namekey[5], db_message[53], db_reason[33] db_name[0] = '^0' db_namekey[0] = '^0' db_message[0] = '^0' db_reason[0] = '^0'
for(new i=0;i<TotalNAMES;i++) { if (strlen(MemoryString[i]) > MAX_CHARS) { server_print("[%s] Error: String in too long: %s.", PREFIX, MemoryString[i]) return PLUGIN_HANDLED; } parse(MemoryString[i],db_name,33,db_namekey,4,db_message,52,db_reason,32) remove_quotes(db_name) remove_quotes(db_namekey) remove_quotes(db_message) remove_quotes(db_reason) copy(g_name[i], strlen(db_name), db_name) copy(g_namekey[i], strlen(db_namekey), db_namekey) copy(g_message[i], strlen(db_message), db_message) copy(g_reason[i], strlen(db_reason), db_reason) #if defined DEBUG_MODE log_to_file(NamesLog, "[%s] Reading ^"%s^" length %d.", PREFIX, MemoryString[i], strlen(MemoryString[i])) log_to_file(NamesLog, "[%s] Copy ^"%s^" ^"%s^" ^"%s^" ^"%s^".", PREFIX, db_name, db_namekey, db_message, db_reason) log_to_file(NamesLog, "[%s] Result ^"%s^" ^"%s^" ^"%s^" ^"%s^".", PREFIX, g_name[i], g_namekey[i], g_message[i], g_reason[i]) #endif }
server_print("[%s] Loaded %d cheater names.",PREFIX,TotalNAMES)
return PLUGIN_CONTINUE; }
public client_putinserver(id) { g_namechanged[id] = get_gametime() g_nccount[id] = 0 g_verifyed[id] = false;
if(!get_pcvar_num(cv_namechecks)) return PLUGIN_CONTINUE;
set_task(DELAY, "verify", id);
return PLUGIN_CONTINUE; }
public client_infochanged(id) { new newname[32], oldname[32] get_user_info(id, "name", newname, 31) get_user_name(id, oldname, 31)
if (!equal(newname, oldname)) { g_verifyed[id] = false;
if(get_pcvar_num(cv_namechecks)) set_task(DELAY, "verify", id);
g_namechanged[id] = get_gametime() g_nccount[id]++ }
if (get_pcvar_num(cv_namechanges) && (g_nccount[id] >= get_pcvar_num(cv_namechanges)) && (get_gametime() - g_namechanged[id] < get_pcvar_float(cv_nametime))) { new inf_message[41], inf_reason[61] format(inf_message, 40, "%d name changes in %d seconds",get_pcvar_num(cv_namechanges),get_pcvar_num(cv_nametime)) format(inf_reason, 60, "[%s] Banned due to reaching changenames limit for %d min.", PREFIX, BANTIME)
if (get_gametime() - g_lastban[id] > 1.0) { new inf_userid = get_user_userid(id) server_cmd("amx_banip #%d %d ^"%s^"", inf_userid, BANTIME, inf_reason) show_hudmessage(0, "[%s] - Violation Detected:^nPlayer ^"%s^" violation ^"%s^"^nPunishment: Ban for %d minutes...", PREFIX, newname, inf_message, BANTIME) g_lastban[id] = get_gametime() #if defined LOG_TO_DIR new inf_authid[32], inf_ip[32] get_user_ip(id, inf_ip, 31, 1) get_user_authid(id, inf_authid, 31) log_to_file(NamesLog, "[%s] Banned ^"%s<%d><%s><>^" (IP ^"%s^") (minutes ^"%d^") (reason ^"%s^")", PREFIX, newname, inf_userid, inf_authid, inf_ip, BANTIME, inf_reason) #endif } }
return PLUGIN_CONTINUE; }
public client_disconnect(id) { g_nccount[id] = 0 g_verifyed[id] = false; }
public verify(id) { if(!is_user_connected(id) || g_verifyed[id]) return PLUGIN_CONTINUE; set_hudmessage(200, 100, 0, 0.05, 0.65, 2, 0.02, 6.0, 0.01, 0.1, 2)
new name[32], i, j; get_user_name(id, name, 31); #if defined DEBUG_MODE log_to_file(NamesLog, "[%s] Verify ^"%s^".", PREFIX, name) #endif
for(i = 0; i < sizeof(g_name); i++) { if(containi(name, g_name[i][j]) != -1) { #if defined DEBUG_MODE log_to_file(NamesLog, "[%s] ^"%s^" match with ^"%s^".", PREFIX, name, g_name[i]) #endif if((containi(g_namekey[i], "b") != -1) && !equal(g_name[i], name)) return PLUGIN_CONTINUE; #if defined DEBUG_MODE log_to_file(NamesLog, "[%s] ^"%s^" equal with ^"%s^".", PREFIX, name, g_name[i]) #endif new v_userid = get_user_userid(id) if(containi(g_namekey[i], "k") != -1) { server_cmd("amx_kick #%d ^"%s^"", v_userid, g_reason[i]) show_hudmessage(0, "[%s] - Violation Detected:^nPlayer ^"%s^" violation ^"%s^"^nPunishment: KIKC...", PREFIX, name, g_message[i]) #if defined LOG_TO_DIR new v_authid[32], v_ip[32] get_user_ip(id, v_ip, 31, 1) get_user_authid(id, v_authid, 31) log_to_file(NamesLog, "[%s] Kicked ^"%s<%d><%s><>^" (IP ^"%s^") (reason ^"%s^")", PREFIX, name, v_userid, v_authid, v_ip, g_reason[i]) #endif } else if((containi(g_namekey[i], "p") != -1) && (get_gametime() - g_lastban[id] > 1.0)) { server_cmd("amx_banip #%d %d ^"%s^"", v_userid, BANTIME, g_reason[i]) show_hudmessage(0, "[%s] - Violation Detected:^nPlayer ^"%s^" violation ^"%s^"^nPunishment: Ban for %d minutes...", PREFIX, name, g_message[i], BANTIME) g_lastban[id] = get_gametime() #if defined LOG_TO_DIR new v_authid[32], v_ip[32] get_user_ip(id, v_ip, 31, 1) get_user_authid(id, v_authid, 31) log_to_file(NamesLog, "[%s] Banned ^"%s<%d><%s><>^" (IP ^"%s^") (minutes ^"%d^") (reason ^"%s^")", PREFIX, name, v_userid, v_authid, v_ip, BANTIME, g_reason[i]) #endif } else if((containi(g_namekey[i], "q") != -1) && (get_gametime() - g_lastban[id] > 1.0)) { server_cmd("amx_punch #%d 0", v_userid) show_hudmessage(0, "[%s] - Violation Detected:^nPlayer ^"%s^" violation ^"%s^"^nPunishment: Banned PERMANENTLY...", PREFIX, name, g_message[i]) g_lastban[id] = get_gametime() #if defined LOG_TO_DIR new v_authid[32], v_ip[32] get_user_ip(id, v_ip, 31, 1) get_user_authid(id, v_authid, 31) log_to_file(NamesLog, "[%s] Banned ^"%s<%d><%s><>^" (IP ^"%s^") (minutes ^"0^") (reason ^"%s^")", PREFIX, name, v_userid, v_authid, v_ip, g_reason[i]) #endif } else { server_print("[%s] Error: No proper action for ^"%s^"! ^"%s^" found.", PREFIX, g_name[i], g_namekey[i]) } } } g_verifyed[id] = true;
#if defined DEBUG_MODE log_to_file(NamesLog, "[%s] ^"%s^" verifyed successfully.", PREFIX, name) #endif return PLUGIN_CONTINUE; }
On tests it works just fine, but i want to add one feature, that i tryed to add several times and failed. If player changes name more then 3 times in 900 secs he got banned. I want this plugin to verify each namechange and if third namechange got something like "Use Cheat" ban player permanently. Now this plugins bans only for 30 mins
I tryed modify this:
PHP Code:
new inf_message[41], inf_reason[61] format(inf_message, 40, "%d name changes in %d seconds",get_pcvar_num(cv_namechanges),get_pcvar_num(cv_nametime)) format(inf_reason, 60, "[%s] Banned due to reaching changenames limit for %d min.", PREFIX, BANTIME)
if (get_gametime() - g_lastban[id] > 1.0) { new inf_userid = get_user_userid(id) server_cmd("amx_banip #%d %d ^"%s^"", inf_userid, BANTIME, inf_reason)
to this
PHP Code:
new inf_message[41], inf_reason[61] format(inf_message, 40, "%d name changes in %d seconds",get_pcvar_num(cv_namechanges),get_pcvar_num(cv_nametime)) format(inf_reason, 60, "[%s] Banned due to reaching changenames limit for %d min.", PREFIX, BANTIME)
if (get_gametime() - g_lastban[id] > 1.0 && g_verifyed[id]) { new inf_userid = get_user_userid(id) server_cmd("amx_banip #%d %d ^"%s^"", inf_userid, BANTIME, inf_reason)
But that stopped namechange ban at all cos g_verifyed[id] always false. Can you help me optimize this plugin cos im a newbie and add this mighty feature?
__________________
Last edited by retribution; 10-25-2009 at 00:00.
|
|