Code: Select all
L 05/03/2011 - 16:38:09: [AMXX] Displaying debug trace (plugin "admin_amxbans.amxx")L 05/03/2011 - 16:38:09: [AMXX] Run time error 4: index out of boundsL 05/03/2011 - 16:38:09: [AMXX] [0] admin_amxbans.sma::getAccess (line 561)L 05/03/2011 - 16:38:09: [AMXX] [1] admin_amxbans.sma::accessUser (line 662)L 05/03/2011 - 16:38:09: [AMXX] [2] admin_amxbans.sma::cmdReload (line 536)
kodas:
Code: Select all
public cmdReload(id, level, cid){ if (!cmd_access(id, level, cid, 1)) return PLUGIN_HANDLED //strip original flags (patch submitted by mrhunt) remove_user_flags(0, read_flags("z")) #if !defined USING_SQL new filename[128] get_configsdir(filename, 127) format(filename, 63, "%s/users.ini", filename) g_aNum = 0 loadSettings(filename) // Re-Load admins accounts if (id != 0) { if (g_aNum == 1) console_print(id, "[AMXX] %L", LANG_SERVER, "LOADED_ADMIN") else console_print(id, "[AMXX] %L", LANG_SERVER, "LOADED_ADMINS", g_aNum) }#else g_aNum = 0 adminSql() if (id != 0) { if (g_aNum == 1) console_print(id, "[AMXX] %L", LANG_SERVER, "SQL_LOADED_ADMIN") else console_print(id, "[AMXX] %L", LANG_SERVER, "SQL_LOADED_ADMINS", g_aNum) }#endif new players[32], num, pv new name[32] get_players(players, num) for (new i=0; i<num; i++) { pv = players[i] get_user_name(pv, name, 31) accessUser(pv, name) // čia meta } return PLUGIN_HANDLED} getAccess(id, name[], authid[], ip[], password[]){ new index = -1 new result = 0 for (new i = 0; i < g_aNum; ++i) { if (g_aFlags[i] & FLAG_AUTHID) { if (equal(authid, g_aName[i])) { index = i break } } else if (g_aFlags[i] & FLAG_IP) { new c = strlen(g_aName[i]) if (g_aName[i][c - 1] == '.') /*ir čia */ /* check if this is not a xxx.xxx. format */ { if (equal(g_aName[i], ip, c)) { index = i break } } /* in other case an IP must just match */ else if (equal(ip, g_aName[i])) { index = i break } } else { if (g_aFlags[i] & FLAG_TAG) { if (contain(name, g_aName[i]) != -1) { index = i break } } else if (equal(name, g_aName[i])) { index = i break } } } if (index != -1) { if (g_aFlags[index] & FLAG_NOPASS) { result |= 8 new sflags[32] get_flags(g_aAccess[index], sflags, 31) set_user_flags(id, g_aAccess[index]) log_amx("Login: ^"%s<%d><%s><>^" became an admin (account ^"%s^") (access ^"%s^") (address ^"%s^")", name, get_user_userid(id), authid, g_aName[index], sflags, ip) } else if (equal(password, g_aPassword[index])) { result |= 12 set_user_flags(id, g_aAccess[index]) new sflags[32] get_flags(g_aAccess[index], sflags, 31) log_amx("Login: ^"%s<%d><%s><>^" became an admin (account ^"%s^") (access ^"%s^") (address ^"%s^")", name, get_user_userid(id), authid, g_aName[index], sflags, ip) } else { result |= 1 if (g_aFlags[index] & FLAG_KICK) { result |= 2 log_amx("Login: ^"%s<%d><%s><>^" kicked due to invalid password (account ^"%s^") (address ^"%s^")", name, get_user_userid(id), authid, g_aName[index], ip) } } } else if (get_cvar_float("amx_mode") == 2.0) { result |= 2 } else { new defaccess[32] get_cvar_string("amx_default_access", defaccess, 31) if (!strlen(defaccess)) copy(defaccess, 32, "z") new idefaccess = read_flags(defaccess) if (idefaccess) { result |= 8 set_user_flags(id, idefaccess) } } return result} accessUser(id, name[] = ""){ remove_user_flags(id) new userip[32], userauthid[32], password[32], passfield[32], username[32] get_user_ip(id, userip, 31, 1) get_user_authid(id, userauthid, 31) if (name[0]) copy(username, 31, name) else get_user_name(id, username, 31) get_cvar_string("amx_password_field", passfield, 31) get_user_info(id, passfield, password, 31) new result = getAccess(id, username, userauthid, userip, password) //čia if (result & 1) client_cmd(id, "echo ^"* %L^"", id, "INV_PAS") if (result & 2) { client_cmd(id, "%s", g_cmdLoopback) return PLUGIN_HANDLED } if (result & 4) client_cmd(id, "echo ^"* %L^"", id, "PAS_ACC") if (result & 8) client_cmd(id, "echo ^"* %L^"", id, "PRIV_SET") return PLUGIN_CONTINUE}