Re: help blacklist system
PHP Code:
#define PLUGINNAME "BlackList" #define VERSION "0.2" #define AUTHOR "JH
#include <amxmodx> #include <dbi> #include <amxmisc> #include <engine>
// ---------- Adjust below settings to your liking --------------------------------------- // nothing... // ---------- Adjust above settings to your liking ---------------------------------------
#define CVAR_WHOST "host" #define CVAR_WUSER "user" #define CVAR_WPASS "pass" #define CVAR_WDB "db" #define CVAR_KICKNONREGGED "kicknonregged" #define CVAR_REGURL "regurl" #define CVAR_PREPEND "prepend" #define WWWREGTABLE "listblack"
// Global vars below new g_regged[33] new g_names[33][32] // Max length of name is 31 // Global vars above
public plugin_modules() { require_module("engine") require_module("dbi") }
public client_authorized(id) { if (is_user_bot(id)) return PLUGIN_CONTINUE
const LEN = 32
new authid[LEN + 1], name[32]
get_user_authid(id, authid, LEN) get_user_name(id, name, 31)
g_regged[id] = checkreg(authid, name)
if (g_regged[id]) server_print("[%s] %s (%s) is registered.", PLUGINNAME, name, authid) if (get_cvar_num(CVAR_KICKNONREGGED)) { new regurl[128] get_cvar_string(CVAR_REGURL, regurl, 127) server_cmd("kick #%d your Steam ID %s is been blacklisted at %s .", get_user_userid(id), authid, regurl) else { server_print("[%s] %s (%s) is not blacklisted.", PLUGINNAME, name, authid) } }
return PLUGIN_CONTINUE }
public client_infochanged(id) { if (is_user_bot(id) || is_user_connecting(id)) return PLUGIN_CONTINUE
get_user_name(id, g_names[id], 31) new idd[1] idd[0] = id set_task(0.1, "checkname", 0, idd, 1)
return PLUGIN_CONTINUE }
localtrim(stringtotrim[], const LEN, charstotrim, const bool:FROMLEFT = true) { if (charstotrim <= 0) return
if (FROMLEFT) { new maxlen = strlen(stringtotrim) if (charstotrim > maxlen) charstotrim = maxlen
format(stringtotrim, LEN, "%s", stringtotrim[charstotrim]) } else { new maxlen = strlen(stringtotrim) - charstotrim if (maxlen < 0) maxlen = 0
format(stringtotrim, maxlen, "%s", stringtotrim) } }
public checkname(idd[1]) { if (is_user_bot(idd[0])) // Somehow some realbots slipped past the bot check in client_infochanged! :-( return
new name[32], prepend[32], prependlength get_user_name(idd[0], name, 31) get_cvar_string(CVAR_PREPEND, prepend, 31) prependlength = strlen(prepend) if (g_regged[idd[0]]) { // Registered users shouldn't have names starting with CVAR_PREPEND // If length of set name is shorter than prepend string, user's name can't be prepend string. :-) if (strlen(name) >= prependlength && equali(name, prepend, prependlength)) { // case insensitive... // Trim name prependlength chars from left localtrim(name, 31, prependlength) entity_set_string(idd[0], EV_SZ_netname, name) set_user_info(idd[0], "name", name) client_print(idd[0], print_console, "Sorry, you can't use the public prefix ^"%s^"in your name because you are blacklisted!", prepend) } if (!equal(name, g_names[idd[0]])) { // Update lastusedname in db if it changed update_db_name(idd[0], name) } } else { if (!equal(prepend, name, strlen(prepend))) { //server_print("Forcing Pub: name on %s", name) format(name, 31, "%s%s", prepend, name) entity_set_string(idd[0], EV_SZ_netname, name) set_user_info(idd[0], "name", name) } } }
update_db_name(id, name[32]) { const LEN = 32 const LONGER = 128 new authid[LEN + 1], query[LONGER + 1]
get_user_authid(id, authid, LEN)
new Sql:sql if (!connect(sql)) { log_amx("Error - Couldn't connect to SQL db and thus couldn't update %s to it.", authid) return }
format(query, LONGER, "UPDATE `%s` SET `lastactivity` = ^"%d^", `lastusedname` = ^"%s^" WHERE `steamid` = ^"%s^"", WWWREGTABLE, get_systime(), name, authid)
new Result:result = dbi_query(sql, query) if (result <= RESULT_FAILED) { new error[256] dbi_error(sql, error, 255) log_amx("Error while quering SQL server for update of %s: %s", authid, error) }
dbi_close(sql) }
bool:checkreg(authid[], name[]) { new Sql:sql if (!connect(sql)) return false
const LONGER = 128 new query[LONGER + 1]
format(query, LONGER, "SELECT `regtime` FROM %s WHERE `steamid` = ^"%s^" LIMIT 1", WWWREGTABLE, authid) new Result:result = dbi_query(sql, query) if (result <= RESULT_FAILED) { new error[256] dbi_error(sql, error, 255) log_amx("Error while quering SQL server for %s, can't check registration: %s", authid, error) dbi_close(sql) return false } else if (result == RESULT_NONE) { dbi_close(sql) return false }
if (!dbi_nextrow(result)) { dbi_close(sql) return false // not regged }
new regtime[64] dbi_field(result, 1, regtime, 63) format_time(regtime, sizeof regtime - 1, "%y%m%d - %H:%M:%S", str_to_num(regtime))
server_print("[%s] %s registered at %s", PLUGINNAME, authid, regtime)
format(query, LONGER, "UPDATE `%s` SET `lastactivity` = ^"%d^", `lastusedname` = ^"%s^" WHERE `steamid` = ^"%s^"", WWWREGTABLE, get_systime(), name, authid)
dbi_free_result(result)
result = dbi_query(sql, query) if (result <= RESULT_FAILED) { new error[256] dbi_error(sql, error, 255) log_amx("Error while trying to update %s's (%s) reg info to SQL database. User is regged though.", authid, error) } dbi_close(sql)
return true }
bool:connect(&Sql:sql) { const LEN = 128 new host[LEN], user[LEN], pass[LEN], db[LEN], error_msg[LEN]
get_cvar_string(CVAR_WHOST, host, LEN - 1) get_cvar_string(CVAR_WUSER, user, LEN - 1) get_cvar_string(CVAR_WPASS, pass, LEN - 1) get_cvar_string(CVAR_WDB, db, LEN - 1)
sql = dbi_connect(host, user, pass, db, error_msg, LEN - 1)
if (!sql) { log_amx("ERROR - Can't connect to SQL db: %s", error_msg) return false }
return true }
bool:createtable(&Sql:sql) { new query[1024] = "CREATE TABLE IF NOT EXISTS `%s` (`steamid` varchar(30) NOT NULL default '', `regtime` int(11) NOT NULL default '0', `lastactivity` int(11) default '0', `lastusedname` varchar(33) NOT NULL default '', PRIMARY KEY (`steamid`)) TYPE=MyISAM;" format(query, 1023, query, WWWREGTABLE)
new Result:result = dbi_query(sql, query) if (result <= RESULT_FAILED) { new error[256] dbi_error(sql, error, 255) log_amx("Error while trying to create tables: %s", error) return false }
return true }
public plugin_init() { register_plugin(PLUGINNAME, VERSION, AUTHOR) register_cvar(CVAR_WHOST, "localhost") register_cvar(CVAR_WUSER, "blist") register_cvar(CVAR_WPASS, "bpass") register_cvar(CVAR_WDB, "blacklist_23")
register_cvar(CVAR_KICKNONREGGED, "1") register_cvar(CVAR_REGURL, "www.vsite.com") register_cvar(CVAR_PREPEND, "")
new sqlcfgpath[128] get_configsdir(sqlcfgpath, 127) format(sqlcfgpath, 127, "%s/sql.cfg", sqlcfgpath) server_cmd("exec %s", sqlcfgpath) server_exec()
new Sql:sql if (!connect(sql)) { log_amx("Couldn't connect to SQL database at plugin_init! Pausing plugin.") pause("a") return } else if (!createtable(sql)) { log_amx("Failed creating tables in SQL database at plugin_init! Pausing plugin.") pause("a") return } else server_print("[%s] Connected successfully to SQL database.", PLUGINNAME) dbi_close(sql) }
|