- Сообщения
- 3
- Реакции
- 0
- Баллы
- 1
- Ошибка
Can't use keys or values with a \ SPAM CONSOLE
- AMX Mod X
v1.9.0.5294
- Билд сервера
ReHLDS version: 3.14.0.857-dev
- ReGameDLL
5.28.0.756
- Metamod версия
Metamod-r v1.3.0.149, API (5:13)
- Metamod плагины
[ 1] Accuracy Fix RUN - accuracyfix_mm.so v1.1.17 ini ANY ANY
[ 2] Reunion RUN - reunion_mm_i386.so v0.2.0.34 ini Start Never
[ 3] Rechecker RUN - rechecker_mm_i386.so v2.7 ini Chlvl ANY
[ 4] AMX Mod X RUN - amxmodx_mm_i386.so v1.9.0.5294 ini Start ANY
[ 5] ReSemiclip RUN - resemiclip_mm_i386.so v2.4.3 ini Chlvl ANY
[ 6] WHBlocker RUN - whblocker_mm_i386.so v1.5.697 ini Chlvl ANY
[ 7] HitBox Fix RUN - hitbox_fix_mm_i386.so v2.0.4 ini Start ANY
[ 8] Revoice RUN - revoice_mm_i386.so v0.1.0.34 ini Start Never
[ 9] MySQL RUN - mysql_amxx_i386.so v1.9.0.5294 pl4 ANY ANY
[10] SQLite RUN - sqlite_amxx_i386.so v1.9.0.5294 pl4 ANY ANY
[11] Amxx Easy Http RUN - easy_http_amxx_i386.so v1.4.0 pl4 ANY ANY
[12] ReAPI RUN - reapi_amxx_i386.so v5.26.0.338-dev pl4 ANY Never
[13] FakeMeta RUN - fakemeta_amxx_i386.so v1.9.0.5294 pl4 ANY ANY
[14] Engine RUN - engine_amxx_i386.so v1.9.0.5294 pl4 ANY ANY
[15] CStrike RUN - cstrike_amxx_i386.so v1.9.0.5294 pl4 ANY ANY
[16] Ham Sandwich RUN - hamsandwich_amxx_i386.so v1.9.0.5294 pl4 ANY ANY
[17] Fun RUN - fun_amxx_i386.so v1.9.0.5294 pl4 ANY ANY
[18] CURL AMXX RUN - curl_amxx_i386.so v1.1.1 pl4 ANY ANY
[19] ReAimDetector RUN - reaimdetector_amxx_i386.so v0.2.2 pl4 ANY Never
- Список плагинов
[ 1] AwpLimit per team 1.0 med awplimit.amxx running
[ 2] Warmup & Menu guns 1.0 med gunsmenu.amxx running
[ 3] FreshBans 1.4.8b kanagava fresh_bans.amxx running
[ 4] [190] Damager RBS 20.06.06 SKAJIbnEJIb damager_rbs.amx running
[ 5] [190] ESP RBS 20.06.06 SKAJIbnEJIb & Ko esp_rbs.amxx running
[ 6] Simple Demo Recorder 2.0 OciXCrom crx_demorecorde running
[ 7] OciXCrom's Admin Chat 4.2 OciXCrom crx_adminchat.a running
[ 8] Chat Manager 4.8 OciXCrom crx_chatmanager running
[ 9] CM: Toggle Chat 4.1 OciXCrom crx_chatmanager running
[ 10] Style C4 Timer 3.1 OciXCrom crx_c4timer.amx running
[ 11] [190] CmdMenu RBS 20.06.06 SKAJIbnEJIb & AM cmdmenu_rbs.amx running
[ 12] Change Bomb Planted So Premium PaXeL Change_Bomb_Pla running
[ 13] Blinding Time 0.0.1_opti Albertio blinding_time.a running
[ 14] Menus Front-End 20.06.06 SKAJIbnEJIb & AM amxmodmenu_rbs. running
[ 15] [190] AfkKicker RBS 25.05.18 SKAJIbnEJIb afkkicker_rbs.a running
[ 16] [182] AdminCmd RBS 22.11.15 SKAJIbnEJIb & AM admincmd_rbs.am running
[ 17] ACS injection med-kit 1.0.7.2 DEV-CS.RU acs_injection_1 running
[ 18] Admin Loader 3.5 neygomon admin_loader.am running
[ 19] Lite Vampire + Fade 1.3 neygomon vampire.amxx running
[ 20] TimeLeft 1.9.0.5294 AMXX Dev Team timeleft.amxx running
[ 21] Mode 2x2 2.5re s1lent mode.amxx running
[ 22] Slaylosers lite 0.1.16 iG_os slay_losers.amx running
[ 23] Safe Userinfo 1.0.4 the_hunter saveuserinfo.am running
[ 24] Weapon Restrict 1.7 s1lent rest.amxx running
[ 25] [ReAPI] Hint blocker 0.1.0 F@tn0M reapi_hint_bloc running
[ 26] [ReAPI] Block 'Fire in 0.0.1 sergrib reapi_block_FIT running
[ 27] ChatManger 2.1 med gag.amxx running
[ 28] Fake Ping 1.1 MeRcyLeZZ/gyxoBk ping_faker.amxx running
[ 29] [190] Parachute RBS 25.01.26BE SKAJIbnEJIb & KR parachute_rbs.a running
[ 30] [190] ECD Helper 25.06.24 SKAJIbnEJIb ecd_helper.amxx running
[ 31] Pause Plugins 1.9.0.5294 AMXX Dev Team pausecfg.amxx running
[ 32] [190] Ad From Server 20.06.06 SKAJIbnEJIb ad_from_server. running
[ 33] resetscore(ReAPI) 1.0 Phantom resetscore.amxx running
[ 34] [190] MOTD RBS 25.01.26BE SKAJIbnEJIb motd_rbs.amxx running
[ 35] Lite TeamBalancer 1.20 neygomon lite_balancer.a debug
[ 36] [ReAPI:AMXX] Buy Nades 0.0.3a steelzorrr buy_nades_limit running
[ 37] Advanced Kill Assists 1.6 Xelson next21_kill_ass debug
[ 38] ReAimDetector API 0.2.2 ReHLDS Team reaimdetector.a running
[ 39] Smoke 1.1.9 fast505 smoke.amxx running
I got this
Can't use keys or values with a \
I use rehlds launcher rehlds-m by hunter
Edited Adminloader
Can't use keys or values with a \
I use rehlds launcher rehlds-m by hunter
Edited Adminloader
Код:
#include <amxmodx>
#include <sqlx>
#include <reapi>
#define CUSTOM_DEF_FLAG
// Adds cvar amx_default_access
#if !defined MAX_PLAYERS
#define MAX_PLAYERS 32
#endif
#if !defined MAX_NAME_LENGTH
#define MAX_NAME_LENGTH 32
#endif
enum _:UserInfo { Auth[MAX_NAME_LENGTH], Passwd[64], Nick[MAX_NAME_LENGTH], Access, Flags, Expired } // g_sUser
enum _:ServerData { IP[24] } // g_szServerData
enum _:SqlData { ServerInfo[32], Prefix[10] } // g_szSqlData
new Handle:g_hSqlTuple;
new g_Data[1], g_szQuery[512];
enum FWDS { AdminLoad, AdminLoad2 }
new g_fwdHandle[FWDS] = { INVALID_HANDLE, INVALID_HANDLE };
new g_iAdminExpired[MAX_PLAYERS + 1];
new g_szServerData[ServerData];
new g_szSqlData[SqlData];
new Array:g_aUsers;
new g_sUser[UserInfo];
new g_szPassField[5];
new g_bitDefaultAccess = ADMIN_USER;
new g_iBanSystem;
new g_szBackupAdminPath[128];
public plugin_natives()
{
register_library("Admin Loader");
register_native("admin_expired", "admin_expired_callback", true);
register_native("amxbans_get_expired", "admin_expired_callback", true); // support AmxBans RBS by SKAJIbnEJIb
register_native("adminload_get_expired", "admin_expired_callback", true); // support Admin Load by Fant0M
}
public admin_expired_callback(id)
return g_iAdminExpired[id];
public plugin_end()
{
if(g_hSqlTuple != Empty_Handle)
SQL_FreeHandle(g_hSqlTuple);
ArrayDestroy(g_aUsers);
}
public plugin_init()
{
#define PLUGIN_VERSION "3.5"
register_plugin("Admin Loader", PLUGIN_VERSION, "neygomon");
register_concmd("amx_reloadadmins", "cmdReload", ADMIN_CFG);
RegisterHookChain(RG_CBasePlayer_SetClientUserInfoName, "SetClientUserInfoName_Post", true);
new szPath[64], szPathFile[128];
get_localinfo("amxx_configsdir", szPath, charsmax(szPath));
formatex(szPathFile, charsmax(szPathFile), "%s/fb/main.cfg", szPath);
if(file_exists(szPathFile))
RegisterFreshBans(szPathFile);
// If FreshBans config is missing, the plugin will fall back to users.ini backup (no SQL mode)
g_aUsers = ArrayCreate(UserInfo);
RegisterDefaultCvars();
ExecConfigs(szPath);
ReadCvars();
if(g_iBanSystem)
SqlInit();
else LoadBackUp(0);
RegForwards();
}
public client_putinserver(id)
UserAccess(id);
public SetClientUserInfoName_Post(const id, infobuffer[], szNewName[MAX_NAME_LENGTH])
UserAccess(id, szNewName);
public cmdReload(id, level)
{
if(get_user_flags(id) & level)
{
if(g_iBanSystem)
adminSql(id);
else LoadBackUp(id);
}
return PLUGIN_HANDLED;
}
public SQL_Handler(failstate, Handle:query, err[], errcode, dt[], datasize)
{
switch(failstate)
{
case TQUERY_CONNECT_FAILED, TQUERY_QUERY_FAILED:
{
log_amx("[DB issue. Error code: #%d] Error: %s", errcode, err);
LoadBackUp(0);
return;
}
}
if(!SQL_NumResults(query))
{
log_amx("Admins for server %s not found in DB! Trying to load from users.ini...", g_szServerData[IP]);
LoadBackUp(0);
return;
}
if(g_aUsers == Invalid_Array)
{
log_error(AMX_ERR_NOTFOUND, "Dynamic array g_aUsers is invalid!");
return;
}
new sBuffer[32];
new iLoadAdmins;
ArrayClear(g_aUsers);
while(SQL_MoreResults(query))
{
SQL_ReadResult(query, 0, g_sUser[Auth], charsmax(g_sUser[Auth]));
SQL_ReadResult(query, 1, g_sUser[Passwd], charsmax(g_sUser[Passwd]));
SQL_ReadResult(query, 2, g_sUser[Nick], charsmax(g_sUser[Nick]));
SQL_ReadResult(query, 6, sBuffer, charsmax(sBuffer)); trim(sBuffer);
if(!sBuffer[0]) SQL_ReadResult(query, 3, sBuffer, charsmax(sBuffer));
g_sUser[Access] = read_flags(sBuffer);
SQL_ReadResult(query, 4, sBuffer, charsmax(sBuffer)); g_sUser[Flags] = read_flags(sBuffer);
g_sUser[Expired] = SQL_ReadResult(query, 5);
ArrayPushArray(g_aUsers, g_sUser);
iLoadAdmins++;
SQL_NextRow(query);
}
new szText[128];
if(iLoadAdmins == 1)
formatex(szText, charsmax(szText), "Loaded 1 admin from MySQL");
else formatex(szText, charsmax(szText), "Loaded %d admins from MySQL", iLoadAdmins);
if(dt[0]) console_print(dt[0], szText);
log_amx(szText);
new pNum, players[MAX_PLAYERS];
get_players(players, pNum);
for(new i; i < pNum; i++)
UserAccess(players[i]);
BackUpAdmins();
}
public KickPlayer(const account[], id)
{
new usr = get_user_userid(id);
new szName[MAX_NAME_LENGTH]; get_user_name(id, szName, charsmax(szName));
new szAuth[25]; get_user_authid(id, szAuth, charsmax(szAuth));
new szIP[16]; get_user_ip(id, szIP, charsmax(szIP), 1);
server_cmd("kick #%d Invalid password! Use setinfo ^"%s^" ^"your pass^"", usr, g_szPassField);
log_amx("Login: ^"%s<%d><%s><>^" kicked due to invalid password (account ^"%s^") (address ^"%s^")",
szName, usr, szAuth, account, szIP);
}
public LoadMapConfigs()
{
new amxxcfgpath[64], map[32], fmt[64], prefix[32];
get_localinfo("amxx_configsdir", amxxcfgpath, charsmax(amxxcfgpath));
get_mapname(map, charsmax(map));
formatex(fmt, charsmax(fmt), "%s/maps/%s.cfg", amxxcfgpath, map);
if(file_exists(fmt)) ExecCfg(fmt);
else
{
strtok(map, prefix, charsmax(prefix), "", 0, '_');
formatex(fmt, charsmax(fmt), "%s/maps/prefix_%s.cfg", amxxcfgpath, prefix);
if(file_exists(fmt)) ExecCfg(fmt);
}
}
adminSql(id)
{
g_Data[0] = id;
formatex(g_szQuery, charsmax(g_szQuery), "SELECT \
`a`.`steamid`, \
`a`.`password`, \
`a`.`nickname`, \
`a`.`access`, \
`a`.`flags`, \
`a`.`expired`, \
`b`.`custom_flags` \
FROM `%s_amxadmins` AS `a`, `%s_admins_servers` AS `b` \
WHERE `b`.`admin_id` = `a`.`id` \
AND `b`.`server_id` = (SELECT `id` FROM `%s` WHERE `address` = '%s') \
AND (`a`.`days` = '0' OR `a`.`expired` > UNIX_TIMESTAMP(NOW()))",
g_szSqlData[Prefix], g_szSqlData[Prefix], g_szSqlData[ServerInfo], g_szServerData[IP]
);
SQL_ThreadQuery(g_hSqlTuple, "SQL_Handler", g_szQuery, g_Data, sizeof(g_Data));
}
UserAccess(id, name[MAX_NAME_LENGTH] = "")
{
remove_user_flags(id);
new authid[25]; get_user_authid(id, authid, charsmax(authid));
new ip[16]; get_user_ip(id, ip, charsmax(ip), 1);
if(!name[0]) get_user_name(id, name, charsmax(name));
new bitsNewFlags, szName[sizeof g_sUser[Nick]], szAuth[sizeof g_sUser[Auth]];
for(new i, password[64], aSize = ArraySize(g_aUsers); i < aSize; i++)
{
ArrayGetArray(g_aUsers, i, g_sUser);
if(g_sUser[Flags] & FLAG_AUTHID)
{
if(strcmp(authid, g_sUser[Auth]) != 0)
continue;
}
else if(g_sUser[Flags] & FLAG_IP)
{
if(strcmp(ip, g_sUser[Auth]) != 0)
continue;
}
else if(strcmp(name, g_sUser[Auth]) != 0)
continue;
g_iAdminExpired[id] = g_sUser[Expired];
if(g_sUser[Flags] & FLAG_NOPASS)
{
bitsNewFlags |= g_sUser[Access];
copy(szName, charsmax(szName), g_sUser[Nick]);
copy(szAuth, charsmax(szAuth), g_sUser[Auth]);
}
else
{
get_user_info(id, g_szPassField, password, charsmax(password));
// First, try plain-text match (users.ini can now store plain passwords)
if(strcmp(password, g_sUser[Passwd]) == 0)
{
bitsNewFlags |= g_sUser[Access];
copy(szName, charsmax(szName), g_sUser[Nick]);
copy(szAuth, charsmax(szAuth), g_sUser[Auth]);
}
else if(g_sUser[Flags] & FLAG_KICK)
set_task(0.2, "KickPlayer", id, g_sUser[Auth], sizeof g_sUser[Auth]);
}
}
if(bitsNewFlags)
{
new sFlags[36];
set_user_flags(id, bitsNewFlags);
get_flags(bitsNewFlags, sFlags, charsmax(sFlags));
ExecuteFwd(id, bitsNewFlags, g_sUser[Expired]);
log_amx("Login: ^"%s<%d><%s><>^" became an admin (account ^"%s^") (nickname ^"%s^") (access ^"%s^") (address ^"%s^")",
name, get_user_userid(id), authid, szAuth, szName, sFlags, ip);
}
else
{
g_iAdminExpired[id] = -1;
set_user_flags(id, g_bitDefaultAccess);
ExecuteFwd(id, g_bitDefaultAccess, g_iAdminExpired[id]);
}
return PLUGIN_HANDLED;
}
RegisterDefaultCvars()
{
register_cvar("amx_votekick_ratio", "0.40");
register_cvar("amx_voteban_ratio", "0.40");
register_cvar("amx_votemap_ratio", "0.40");
register_cvar("amx_vote_ratio", "0.02");
register_cvar("amx_vote_time", "10");
register_cvar("amx_vote_answers", "1");
register_cvar("amx_vote_delay", "60");
register_cvar("amx_last_voting", "0");
register_cvar("amx_show_activity", "2", FCVAR_PROTECTED);
register_cvar("amx_password_field", "_pw",FCVAR_PROTECTED);
#if defined CUSTOM_DEF_FLAG
register_cvar("amx_default_access", "z", FCVAR_PROTECTED);
#endif
register_cvar("admin_loader_version", PLUGIN_VERSION, FCVAR_SERVER | FCVAR_SPONLY);
}
RegisterSqlCfg()
{
register_cvar("amx_sql_table", "admins", FCVAR_PROTECTED);
register_cvar("amx_sql_host", "127.0.0.1", FCVAR_PROTECTED);
register_cvar("amx_sql_user", "root", FCVAR_PROTECTED);
register_cvar("amx_sql_pass", "", FCVAR_PROTECTED);
register_cvar("amx_sql_db", "amx", FCVAR_PROTECTED);
register_cvar("amx_sql_type", "mysql", FCVAR_PROTECTED);
}
RegisterFreshBans(fbcfg[])
{
g_iBanSystem = 1;
register_cvar("fb_sql_host", "", FCVAR_PROTECTED);
register_cvar("fb_sql_user", "", FCVAR_PROTECTED);
register_cvar("fb_sql_pass", "", FCVAR_PROTECTED);
register_cvar("fb_sql_db", "", FCVAR_PROTECTED);
register_cvar("fb_servers_table", "", FCVAR_PROTECTED);
register_cvar("fb_server_ip", "");
register_cvar("fb_server_port", "");
ExecCfg(fbcfg);
}
ExecConfigs(amxxcfgdir[])
{
new szFullDir[128];
formatex(szFullDir, charsmax(szFullDir), "%s/amxx.cfg", amxxcfgdir);
ExecCfg(szFullDir);
formatex(szFullDir, charsmax(szFullDir), "%s/sql.cfg", amxxcfgdir);
RegisterSqlCfg(); ExecCfg(szFullDir);
formatex(g_szBackupAdminPath, charsmax(g_szBackupAdminPath), "%s/users.ini", amxxcfgdir);
}
ReadCvars()
{
get_cvar_string("amx_password_field", g_szPassField, charsmax(g_szPassField));
#if defined CUSTOM_DEF_FLAG
new szDefaultAccess[32];
get_cvar_string("amx_default_access", szDefaultAccess, charsmax(szDefaultAccess));
g_bitDefaultAccess = read_flags(szDefaultAccess);
#endif
set_cvar_float("amx_last_voting", 0.0);
#if AMXX_VERSION_NUM < 183
set_task(6.1, "LoadMapConfigs");
#endif
}
RegForwards()
{
for(new plId, plNum = get_pluginsnum(); plId < plNum; plId++)
{
if(g_fwdHandle[AdminLoad] == INVALID_HANDLE)
{
if(get_func_id("client_admin", plId) != -1)
g_fwdHandle[AdminLoad] = CreateMultiForward("client_admin", ET_IGNORE, FP_CELL, FP_CELL);
}
if(g_fwdHandle[AdminLoad2] == INVALID_HANDLE)
{
if(get_func_id("amxx_admin_access", plId) != -1)
g_fwdHandle[AdminLoad2] = CreateMultiForward("amxx_admin_access", ET_IGNORE, FP_CELL, FP_CELL, FP_CELL);
}
}
}
SqlInit()
{
new sHost[32], sUser[32], sPasswd[64], sDbName[32];
switch(g_iBanSystem)
{
case 1:
{
get_cvar_string("fb_sql_host", sHost, charsmax(sHost));
get_cvar_string("fb_sql_user", sUser, charsmax(sUser));
get_cvar_string("fb_sql_pass", sPasswd, charsmax(sPasswd));
get_cvar_string("fb_sql_db", sDbName, charsmax(sDbName));
new ip[16]; get_cvar_string("fb_server_ip", ip, charsmax(ip));
new port[8]; get_cvar_string("fb_server_port", port, charsmax(port));
formatex(g_szServerData[IP], charsmax(g_szServerData[IP]), "%s:%s", ip, port);
get_cvar_string("fb_servers_table", g_szSqlData[ServerInfo], charsmax(g_szSqlData[ServerInfo]));
strtok(g_szSqlData[ServerInfo], g_szSqlData[Prefix], charsmax(g_szSqlData[Prefix]), "", 0, '_');
}
}
SQL_SetAffinity("mysql");
g_hSqlTuple = SQL_MakeDbTuple(sHost, sUser, sPasswd, sDbName, 1);
new errcode, errstr[128], Handle:hSqlTest = SQL_Connect(g_hSqlTuple, errcode, errstr, charsmax(errstr));
if(hSqlTest == Empty_Handle)
{
log_amx("[DB issue. Error code: #%d] Error: %s", errcode, errstr);
LoadBackUp(0);
}
else
{
SQL_FreeHandle(hSqlTest);
#if AMXX_VERSION_NUM >= 183
SQL_SetCharset(g_hSqlTuple, "utf8");
#endif
adminSql(0);
}
}
ExecCfg(const cfg[])
{
server_cmd("exec %s", cfg);
server_exec();
}
ExecuteFwd(id, flags, timestamp)
{
new ret;
if(g_fwdHandle[AdminLoad] != INVALID_HANDLE)
ExecuteForward(g_fwdHandle[AdminLoad], ret, id, flags);
if(g_fwdHandle[AdminLoad2] != INVALID_HANDLE)
ExecuteForward(g_fwdHandle[AdminLoad2], ret, id, flags, timestamp);
}
BackUpAdmins()
{
unlink(g_szBackupAdminPath);
new fp = fopen(g_szBackupAdminPath, "w+");
new szDate[30]; get_time("%d.%m.%Y - %H:%M:%S", szDate, charsmax(szDate));
if(!fprintf(fp, "; BackUP SQL admins. Date %s ^n^n", szDate))
{
fclose(fp);
return;
}
for(new i, sAFlags[30], sCFlags[10], szTime[25], aSize = ArraySize(g_aUsers); i < aSize; i++)
{
ArrayGetArray(g_aUsers, i, g_sUser);
get_flags(g_sUser[Access], sAFlags, charsmax(sAFlags));
get_flags(g_sUser[Flags], sCFlags, charsmax(sCFlags));
if(g_sUser[Expired])
format_time(szTime, charsmax(szTime), "%d.%m.%Y - %H:%M:%S", g_sUser[Expired]);
else formatex(szTime, charsmax(szTime), "lifetime");
fprintf(fp,
"^"%s^" ^"%s^" ^"%s^" ^"%s^" ^"%s^" ^"%s^"^n",
g_sUser[Auth], g_sUser[Passwd], sAFlags, sCFlags, g_sUser[Nick], szTime
);
}
fclose(fp);
}
LoadBackUp(index)
{
new fp = fopen(g_szBackupAdminPath, "rt");
if(!fp)
{
log_amx("File '%s' not found or cannot be read! Admins NOT loaded!", g_szBackupAdminPath);
return;
}
else ArrayClear(g_aUsers);
new szBuffer[200];
new szBuff[3][64];
new load, systime = get_systime();
while(!feof(fp))
{
fgets(fp, szBuffer, charsmax(szBuffer));
trim(szBuffer);
if(!szBuffer[0] || szBuffer[0] == ';')
continue;
if(parse(szBuffer,
g_sUser[Auth], charsmax(g_sUser[Auth]),
g_sUser[Passwd], charsmax(g_sUser[Passwd]),
szBuff[0], charsmax(szBuff[]),
szBuff[1], charsmax(szBuff[]),
g_sUser[Nick], charsmax(g_sUser[Nick]),
szBuff[2], charsmax(szBuff[])
) == 6
)
{
g_sUser[Access] = read_flags(szBuff[0]);
g_sUser[Flags] = read_flags(szBuff[1]);
g_sUser[Expired]= (strcmp(szBuff[2], "lifetime") == 0) ? 0 : parse_time(szBuff[2], "%d.%m.%Y - %H:%M:%S");
if(!g_sUser[Expired] || g_sUser[Expired] > systime)
{
ArrayPushArray(g_aUsers, g_sUser);
load++;
}
}
}
fclose(fp);
new szInfoMessage[190];
if(!load)
formatex(szInfoMessage, charsmax(szInfoMessage), "No admins found in users.ini or an entry is incorrect");
else if(load == 1)
formatex(szInfoMessage, charsmax(szInfoMessage), "Loaded 1 admin from users.ini");
else formatex(szInfoMessage, charsmax(szInfoMessage), "Loaded %d admins from users.ini", load);
if(index) console_print(index, szInfoMessage);
log_amx(szInfoMessage);
}