#include <amxmodx>
#include <sqlx>
#include <IQ>
new const g_szRegister_plugin[][] = {"[SQL] Core", "1.2 BETA", "Mittu"};
// Данные пользователя c БД
enum _:DATA_USERS { ID, LOGIN[40], PASSWORD[64]/*250>>64*/, EMAIL[64]/*255>>64*/, ROUTE[32], REGDATE[32], /* AVATAR[255], */ RIGHTS[10], NAME[15], NICK[32+1], SKYPE[32], VK[30], /* BIRTH[255], */
/* SIGNATURE[255], */ ANSWERS, SHILINGS[30], STICKERS, THANKS, LAST_ACTIVITY[20], DELL, LAST_TOPIC, REIT, PROC, STEAM_ID[35], STEAM_API[100], VK_API[25],
/*FB[20], FB_API[20], */ ACTIVE, IM, TELEGRAM[50], PREFIX[30], GAME_TIME, PROTECT, INVITED, EMAIL_NOTICE, IP[64], BROWSER[32],
MULTI_ACCOUNT[32], GAG, MEMBER_ONLINE, GAME_MONEY, /* PLUGINS_SETTINGS[512], */ DISCORD[32] }
new g_BDUserInfo[MAX_PLAYERS + 1][DATA_USERS];
enum _:SERVICE_DATA { SERVICE_ID, SERVICE_NAME[255], SERVICE_FLAGS[32], TRIM, IMMUNITY, SALE, USERS_GROUP, SHOW_ADM, SERVER_SERVICE, SERVER_PRICE, PRICE_RENEWAL, TIME, DISCOUNT}
new g_BDServiceInfo[32][SERVICE_DATA];
enum _:SETTINGS_DB { HOST, USER, PASSWORD, DATABASE, TABLE_USERS[64], TABLE_ADMINS, TABLE_ADMINS_LIST };
new g_szDataBase[SETTINGS_DB][64];
enum _:DATA_ADMIN { ID_ADM, NAME_ADMIN[15], PASS[32], PASS_MD5[64], TYPE[2], SERVER, USER_ID, ACTIVE_ADMIN, LINK[255], CAUSE[255], PRICE[10], PAUSE,/* COMMENT[1000], */ SERVICE, BUY_DATE[24], END_DATE[24], FLAG[33]}
new g_BDUserAdminInfo[8][MAX_PLAYERS + 1][DATA_ADMIN];
new g_iBDUserPrivilegis[MAX_PLAYERS + 1];
new g_szBDUserPrivilegis[MAX_PLAYERS + 1][32];
new Handle:g_SqlTuple/* , Handle:g_SqlConnection */;
new g_szQuery[1024];
new g_iResultService;
new g_szPlayerSteam[MAX_PLAYERS + 1][34],
g_szPlayerIp[MAX_PLAYERS + 1][23];
new g_iServerPid
/*
Запрос занял 0.0001 сек.
Запрос занял 0.26 сек.
*/
new g_iMakeDbTupleTimeOut = 3;
public plugin_cfg()
{
g_SqlTuple = SQL_MakeDbTuple(g_szDataBase[HOST], g_szDataBase[USER], g_szDataBase[PASSWORD], g_szDataBase[DATABASE], g_iMakeDbTupleTimeOut);
SQL_SetCharset(g_SqlTuple, "utf8");
Pre_QueryConnection_Service();
}
Pre_QueryConnection_Service()
{
format(g_szQuery, charsmax(g_szQuery), "\
SELECT\
`services`.*,\
`services__tarifs`.`service`,\
`services__tarifs`.`price`,\
`services__tarifs`.`price_renewal`,\
`services__tarifs`.`time`,\
`services__tarifs`.`discount`\
FROM\
`services`\
JOIN `services__tarifs` ON `services`.`id` = `services__tarifs`.`service` AND `services`.`server` = '%d' AND `services`.`sale` = '1'\
ORDER BY\
`services__tarifs`.`service`\
DESC\
", g_iServerPid);
SQL_ThreadQuery(g_SqlTuple, "SQL_QueryConnection_Service", g_szQuery);
}
public SQL_QueryConnection_Service(iState, Handle:hQuery, const szError[], iErrorCode, const szData[], iDataSize) // Получает список всех привилегий
{
if(iState == TQUERY_CONNECT_FAILED || iState == TQUERY_QUERY_FAILED) return MySQL_connection_failed(iState, szError, iErrorCode, szData, iDataSize);
if(SQL_NumResults(hQuery))
{
new iResults = SQL_NumResults(hQuery), Coll, iStrSize[] = {"255", "32"};
g_iResultService = iResults
while(iResults)
{
g_BDServiceInfo[Coll][SERVICE_ID] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "id"));
SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "name"), g_BDServiceInfo[Coll][SERVICE_NAME], iStrSize[0] - 1); // size = 255
SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "rights"), g_BDServiceInfo[Coll][SERVICE_FLAGS], iStrSize[1] - 1); // size = 32
g_BDServiceInfo[Coll][TRIM] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "trim"));
g_BDServiceInfo[Coll][IMMUNITY] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "immunity"));
g_BDServiceInfo[Coll][SALE] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "sale"));
g_BDServiceInfo[Coll][USERS_GROUP] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "users_group"));
g_BDServiceInfo[Coll][SHOW_ADM] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "show_adm"));
g_BDServiceInfo[Coll][SERVER_SERVICE] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "service"));
g_BDServiceInfo[Coll][SERVER_PRICE] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "price"));
g_BDServiceInfo[Coll][PRICE_RENEWAL] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "price_renewal"));
g_BDServiceInfo[Coll][TIME] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "time"));
g_BDServiceInfo[Coll][DISCOUNT] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "discount"));
SQL_NextRow(hQuery);
Coll++;
iResults--;
}
}
return PLUGIN_HANDLED;
}
public plugin_precache()
{
new szCfgDir[64], szCfgFile[128], szBuffer[256], szKey[64], szValue[960], iFile;
get_localinfo("amxx_configsdir", szCfgDir, charsmax(szCfgDir));
formatex(szCfgFile, charsmax(szCfgFile), "%s/unmq_engine/SQL.ini", szCfgDir);
if(!file_exists(szCfgFile))
{
new szError[100];
formatex(szError, charsmax(szError), "Отсутствует файл: %s", szCfgFile);
set_fail_state(szError);
return;
}
new iCaseSelect;
iFile = fopen(szCfgFile, "rt");
while(iFile && !feof(iFile))
{
fgets(iFile, szBuffer, charsmax(szBuffer));
replace(szBuffer, charsmax(szBuffer), "^n", "");
if(!szBuffer[0] || szBuffer[0] == ';' || szBuffer[0] == '{' || szBuffer[0] == '}' || szBuffer[0] == '#') continue;
if(szBuffer[0] == '[')
{
iCaseSelect++;
continue;
}
parse(szBuffer, szKey, charsmax(szKey), szValue, charsmax(szValue));
trim(szKey);
trim(szValue);
switch(iCaseSelect)
{
case 1:
{
if(equal(szKey, "DB_ID_SERVER")) g_iServerPid = str_to_num(szValue);
else if(equal(szKey, "DB_HOST")) copy(g_szDataBase[HOST], charsmax(g_szDataBase[]), szValue);
else if(equal(szKey, "DB_USER")) copy(g_szDataBase[USER], charsmax(g_szDataBase[]), szValue);
else if(equal(szKey, "DB_PASSWORD")) copy(g_szDataBase[PASSWORD], charsmax(g_szDataBase[]), szValue);
else if(equal(szKey, "DB_DATABASE")) copy(g_szDataBase[DATABASE], charsmax(g_szDataBase[]), szValue);
else if(equal(szKey, "DB_TABLE_USERS")) copy(g_szDataBase[TABLE_USERS], charsmax(g_szDataBase[]), szValue);
else if(equal(szKey, "DB_TABLE_ADMINS")) copy(g_szDataBase[TABLE_ADMINS], charsmax(g_szDataBase[]), szValue);
else if(equal(szKey, "DB_TABLE_ADMINS_LIST")) copy(g_szDataBase[TABLE_ADMINS_LIST], charsmax(g_szDataBase[]), szValue);
}
}
}
fclose(iFile);
}
public plugin_init()
{
register_plugin(g_szRegister_plugin[0], g_szRegister_plugin[1], g_szRegister_plugin[2]);
}
#define user_valid(%0) (%0 && %0 <= MaxClients)
public client_putinserver(id)
{
if(!is_user_hltv(id) && !is_user_bot(id) && user_valid(id))
{
new iParams[1];
iParams[0] = get_user_userid(id);
get_user_authid(id, g_szPlayerSteam[id], charsmax(g_szPlayerSteam[]));
get_user_ip(id, g_szPlayerIp[id], charsmax(g_szPlayerIp[]), 1);
format(g_szQuery, charsmax(g_szQuery), "\
SELECT `%s`.*\
FROM `%s`\
WHERE `%s`.`ip` = '%s' OR `%s`.`steam_id` = '%s'\
",
g_szDataBase[TABLE_USERS],
g_szDataBase[TABLE_USERS],
g_szDataBase[TABLE_USERS],
g_szPlayerIp[id],
g_szDataBase[TABLE_USERS],
g_szPlayerSteam[id]);
SQL_ThreadQuery(g_SqlTuple, "SQL_QueryConnection_Users", g_szQuery, iParams, sizeof iParams);
}
}
public client_disconnected(id)
{
remove_user_flags(id, read_flags("abcdefghijklmnopqrstu"));
g_szBDUserPrivilegis[id] = ""
}
public SQL_QueryConnection_Users(iState, Handle:hQuery, const szError[], iErrorCode, const szData[], iDataSize)
{
if(iState == TQUERY_CONNECT_FAILED || iState == TQUERY_QUERY_FAILED) return MySQL_connection_failed(iState, szError, iErrorCode, szData, iDataSize);
new UserId = szData[0];
new id = find_player_ex(FindPlayer_MatchUserId, UserId);
if(!id) return PLUGIN_HANDLED;
if(SQL_NumResults(hQuery))
{
new iStrSize[] = {"40","250","255","32","10","15","128","30","20","35","100","25","50","64","512"};
g_BDUserInfo[id][ID] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "id"));
SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "login"), g_BDUserInfo[id][LOGIN], iStrSize[0] - 1); // size = 40
SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "password"), g_BDUserInfo[id][PASSWORD], iStrSize[1] - 1); // size = 250
SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "email"), g_BDUserInfo[id][EMAIL], iStrSize[2] - 1); // size = 255
SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "route"), g_BDUserInfo[id][ROUTE], iStrSize[3] - 1); // size = 32
SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "regdate"), g_BDUserInfo[id][REGDATE], iStrSize[3] - 1); // size = 32
// SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "avatar"), g_BDUserInfo[id][AVATAR], iStrSize[2] - 1); // size = 255
SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "rights"), g_BDUserInfo[id][RIGHTS], iStrSize[4] - 1); // size = 10
SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "name"), g_BDUserInfo[id][NAME], iStrSize[5] - 1); // size = 15
SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "nick"), g_BDUserInfo[id][NICK], iStrSize[6] - 1); // size = 128
SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "skype"), g_BDUserInfo[id][SKYPE], iStrSize[3] - 1); // size = 32
SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "vk"), g_BDUserInfo[id][VK], iStrSize[7] - 1); // size = 30
// SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "birth"), g_BDUserInfo[id][BIRTH], iStrSize[2] - 1); // size = 255
// SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "signature"), g_BDUserInfo[id][SIGNATURE], iStrSize[2] - 1); // size = 255
g_BDUserInfo[id][ANSWERS] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "answers"));
SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "shilings"), g_BDUserInfo[id][SHILINGS], iStrSize[3] - 1); // size = 32
g_BDUserInfo[id][STICKERS] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "stickers"));
g_BDUserInfo[id][THANKS] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "thanks"));
SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "last_activity"), g_BDUserInfo[id][LAST_ACTIVITY], iStrSize[8] - 1); // size = 20
g_BDUserInfo[id][DELL] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "dell"));
g_BDUserInfo[id][LAST_TOPIC] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "last_topic"));
g_BDUserInfo[id][REIT] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "reit"));
g_BDUserInfo[id][PROC] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "proc"));
SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "steam_id"), g_BDUserInfo[id][STEAM_ID], iStrSize[9] - 1); // size = 35
SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "steam_api"), g_BDUserInfo[id][STEAM_API], iStrSize[10] - 1); // size = 100
SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "vk_api"), g_BDUserInfo[id][VK_API], iStrSize[11] - 1); // size = 25
// SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "fb"), g_BDUserInfo[id][FB], iStrSize[8] - 1); // size = 20
// SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "fb_api"), g_BDUserInfo[id][FB_API], iStrSize[8] - 1); // size = 20
g_BDUserInfo[id][ACTIVE] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "active"));
g_BDUserInfo[id][IM] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "im"));
SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "telegram"), g_BDUserInfo[id][TELEGRAM], iStrSize[12] - 1); // size = 50
SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "prefix"), g_BDUserInfo[id][PREFIX], iStrSize[7] - 1); // size = 30
g_BDUserInfo[id][GAME_TIME] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "game_time"));
g_BDUserInfo[id][PROTECT] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "protect"));
g_BDUserInfo[id][INVITED] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "invited"));
g_BDUserInfo[id][EMAIL_NOTICE] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "email_notice"));
SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "ip"), g_BDUserInfo[id][IP], iStrSize[13] - 1); // size = 64
SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "browser"), g_BDUserInfo[id][BROWSER], iStrSize[3] - 1); // size = 32
SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "multi_account"), g_BDUserInfo[id][MULTI_ACCOUNT], iStrSize[3] - 1); // size = 32
g_BDUserInfo[id][GAG] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "gag"));
g_BDUserInfo[id][MEMBER_ONLINE] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "member_online"));
g_BDUserInfo[id][GAME_MONEY] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "game_money"));
// SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "plugins_settings"), g_BDUserInfo[id][PLUGINS_SETTINGS], iStrSize[14] - 1); // size = 512
SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "discord"), g_BDUserInfo[id][DISCORD], iStrSize[3] - 1); // size = 32
Task_while_is_privilegis(UserId);
new szName[250];
get_user_name(id, szName, charsmax(szName));
while(replace(g_BDUserInfo[id][NAME], charsmax(szName), "'", "'")) {}
if(!equali(g_BDUserInfo[id][NAME], szName) && g_BDUserInfo[id][ID] && UserId)
{
while(replace(szName, charsmax(szName), "'", "'")) {}
new iParams[1];
iParams[0] = UserId;
format(g_szQuery, charsmax(g_szQuery), "UPDATE `%s` SET `nick` = '%s' WHERE `id` = %d", g_szDataBase[TABLE_USERS],
szName, g_BDUserInfo[id][ID]);
SQL_ThreadQuery(g_SqlTuple, "SQL_QueryConnection_Users_AutoNick", g_szQuery, iParams, sizeof iParams);
}
}
return PLUGIN_HANDLED;
}
public Task_while_is_privilegis(UserId)
{
new id = find_player_ex(FindPlayer_MatchUserId, UserId);
if(g_BDUserInfo[id][ID] && id)
{
new iParams[1]; iParams[0] = UserId;
format(g_szQuery, charsmax(g_szQuery), " \
SELECT \
`%s`.*, \
`%s`.`service`, \
`%s`.`admin_id`, \
`%s`.`bought_date`, \
UNIX_TIMESTAMP(`%s`.`ending_date`), \
`%s`.`rights_und` \
FROM \
`%s`, \
`%s` \
WHERE \
`%s`.`id` = `%s`.`admin_id` AND `%s`.`server` = %d AND `%s`.`user_id` = %d",
g_szDataBase[TABLE_ADMINS],
g_szDataBase[TABLE_ADMINS_LIST],
g_szDataBase[TABLE_ADMINS_LIST],
g_szDataBase[TABLE_ADMINS_LIST],
g_szDataBase[TABLE_ADMINS_LIST], // @return UNIX_TIMESTAMP(`%s`.`ending_date`) ? unix code
g_szDataBase[TABLE_ADMINS_LIST],
// FROM
g_szDataBase[TABLE_ADMINS],
g_szDataBase[TABLE_ADMINS_LIST],
// WHERE
g_szDataBase[TABLE_ADMINS], g_szDataBase[TABLE_ADMINS_LIST], /* AND */ g_szDataBase[TABLE_ADMINS], g_iServerPid, g_szDataBase[TABLE_ADMINS], g_BDUserInfo[id][ID]);
SQL_ThreadQuery(g_SqlTuple, "SQL_QueryConnection_Users_Admins", g_szQuery, iParams, sizeof iParams);
}
}
public SQL_QueryConnection_Users_AutoNick(iState, Handle:hQuery, const szError[], iErrorCode, const szData[], iDataSize)
{
if(iState == TQUERY_CONNECT_FAILED || iState == TQUERY_QUERY_FAILED) return MySQL_connection_failed(iState, szError, iErrorCode, szData, iDataSize);
new UserId = szData[0];
new id = find_player_ex(FindPlayer_MatchUserId, UserId);
// if(!id) return PLUGIN_HANDLED;
// ? debug
new iResult = SQL_NumResults(hQuery);
if(iResult)
{
server_print("Sql result [%d] data[%d] id[%d]", iResult, szData[0], id);
}
new szBuffer[512];
SQL_GetQueryString(hQuery, szBuffer, charsmax(szBuffer));
server_print("[%s]", szBuffer);
return PLUGIN_HANDLED;
}
public SQL_QueryConnection_Users_Admins(iState, Handle:hQuery, const szError[], iErrorCode, const szData[], iDataSize)
{
if(iState == TQUERY_CONNECT_FAILED || iState == TQUERY_QUERY_FAILED) return MySQL_connection_failed(iState, szError, iErrorCode, szData, iDataSize);
new UserId = szData[0];
new id = find_player_ex(FindPlayer_MatchUserId, UserId);
if(!id) return PLUGIN_HANDLED;
if(SQL_NumResults(hQuery))
{
new results = SQL_NumResults(hQuery), Coll, iStrSize[] = {"15","32","64","2","255","10","1000", "20", "25"};
g_iBDUserPrivilegis[id] = SQL_NumResults(hQuery);
while(results)
{
// g_BDUserAdminInfo[Coll][id][ID_ADM] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "id"));
SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "name"), g_BDUserAdminInfo[Coll][id][NAME_ADMIN], iStrSize[0] - 1); // size = 15
SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "pass"), g_BDUserAdminInfo[Coll][id][PASS], iStrSize[1] - 1); // size = 32
SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "pass_md5"), g_BDUserAdminInfo[Coll][id][PASS_MD5], iStrSize[2] - 1); // size = 64
SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "type"), g_BDUserAdminInfo[Coll][id][TYPE], iStrSize[3] - 1); // size = 2
g_BDUserAdminInfo[Coll][id][SERVER] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "server"));
g_BDUserAdminInfo[Coll][id][USER_ID] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "user_id"));
g_BDUserAdminInfo[Coll][id][ACTIVE_ADMIN] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "active"));
SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "link"), g_BDUserAdminInfo[Coll][id][LINK], iStrSize[4] - 1); // size = 255
SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "cause"), g_BDUserAdminInfo[Coll][id][CAUSE], iStrSize[4] - 1); // size = 255
SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "price"), g_BDUserAdminInfo[Coll][id][PRICE], iStrSize[5] - 1); // size = 10
g_BDUserAdminInfo[Coll][id][PAUSE] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "pause"));
// SQL_IsNull(hQuery, SQL_FieldNameToNum(hQuery, "comment")) ? g_BDUserAdminInfo[Coll][id][COMMENT] = 0 : SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "comment"), g_BDUserAdminInfo[Coll][id][COMMENT], iStrSize[6] - 1); // size = 1000
g_BDUserAdminInfo[Coll][id][SERVICE] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "service"));
SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "bought_date"), g_BDUserAdminInfo[Coll][id][BUY_DATE], iStrSize[7] - 1); // size = 20
SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "UNIX_TIMESTAMP(`admins__services`.`ending_date`)"), g_BDUserAdminInfo[Coll][id][END_DATE], iStrSize[7] - 1); // size = 20
SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "rights_und"), g_BDUserAdminInfo[Coll][id][FLAG], iStrSize[8] - 1); // size = 25
if(g_BDUserAdminInfo[Coll][id][SERVICE]) fl_set_flages(id, g_BDUserAdminInfo[Coll][id][SERVICE]);
SQL_NextRow(hQuery);
Coll++;
results--; // декремент
}
}
return PLUGIN_HANDLED;
}
/** Функция установки флагов игрогроку преоброзуюя из таблици `services`
* @param id index игрока (требует предворительной проверки на валидность).
* @param service Номерация для поиска.
* @return 0 | 1
*/
public fl_set_flages(id, service)
{
for(new i; i <= g_iResultService; i++) // Цикл по кол-во приивилегиям у пользователя
{
if(g_BDServiceInfo[i][SERVICE_ID] == service)
{
if(!equal(g_szBDUserPrivilegis[id], g_BDServiceInfo[i][SERVICE_FLAGS])) strcat(g_szBDUserPrivilegis[id], g_BDServiceInfo[i][SERVICE_FLAGS], 32);
set_user_flags(id, read_flags(g_szBDUserPrivilegis[id]))
}
}
return 1;
}
public MySQL_connection_failed(iState, const szError[], iErrorCode, const szData[], iDataSize)
{
log_amx("[Error] MySQL connection failed");
log_amx("[Error] ERROR %d | %s", iErrorCode, szError);
if(iDataSize) log_amx("Query state: %d", szData[iState == TQUERY_CONNECT_FAILED ? 0 : 1]);
set_fail_state(szError);
return PLUGIN_HANDLED;
}
//! Нативы
public plugin_natives()
{
register_native("unmq_get_users_id", "_sql_get_users_id", 1);
register_native("unmq_get_users_login", "_sql_get_users_login");
register_native("unmq_get_users_balans", "_sql_get_users_balans");
register_native("unmq_while_users", "_sql_while_users");
}
public _sql_get_users_id(iPlayer)
{
// new iPlayer = get_param(1);
if(g_BDUserInfo[iPlayer][ID] == 0) return 0;
return g_BDUserInfo[iPlayer][ID];
}
public _sql_get_users_login(iPlayer, Login[])
{
new iPlayer = get_param(1);
new szBuffer[40 + 1];
new szBufferNul[7 + 1];
if(g_BDUserInfo[iPlayer][ID])
{
formatex(szBuffer, 40, "%s", g_BDUserInfo[iPlayer][LOGIN]);
set_string(2, szBuffer, 40);
}
else
{
formatex(szBufferNul, 7, "unnamed");
set_string(2, szBufferNul, 7);
}
}
public _sql_get_users_balans(iPlayer, Balanse[])
{
new iPlayer = get_param(1), szBuffer[10 + 1];
formatex(szBuffer, 10, "%s", g_BDUserInfo[iPlayer][SHILINGS]);
set_string(2, szBuffer, 10);
}
public _sql_while_users(iPlayer)
{
new iPlayer = get_param(1);
if(is_user_hltv(iPlayer) || is_user_bot(iPlayer) || !user_valid(iPlayer)) return 0;
new iParams[1];
iParams[0] = get_user_userid(iPlayer);
get_user_authid(iPlayer, g_szPlayerSteam[iPlayer], charsmax(g_szPlayerSteam[]));
get_user_ip(iPlayer, g_szPlayerIp[iPlayer], charsmax(g_szPlayerIp[]), 1);
format(g_szQuery, charsmax(g_szQuery), "\
SELECT `%s`.*\
FROM `%s`\
WHERE `%s`.`ip` = '%s' OR `%s`.`steam_id` = '%s'\
",
g_szDataBase[TABLE_USERS],
g_szDataBase[TABLE_USERS],
g_szDataBase[TABLE_USERS],
g_szPlayerIp[iPlayer],
g_szDataBase[TABLE_USERS],
g_szPlayerSteam[iPlayer]);
SQL_ThreadQuery(g_SqlTuple, "SQL_QueryConnection_Users", g_szQuery, iParams, sizeof iParams);
return 1;
}