Glaus
Пользователь
- Сообщения
- 3
- Реакции
- 0
- Баллы
- 1
Добрый день, есть небольшая переделка в Aes_Bonus_Flags (цель- при покупке в игре за бонусы в /anew флага, отображение привилегий на сайте было)
Сам код
Проблема возникает следующая данный плагин вызывает натив для добавления аккаунта, фактическое добавление производится API. При добавлении выбивает ошибку синтаксиса запроса в БД.
В итоге на сайте пишет, но все же не работает, можно ли это исправить ? или что бы это заработала придётся полностью плагин переписывать ?
Сам код
Код:
#include <amxmodx>
#include <sqlx>
#include <gamecms5>
#if AMXX_VERSION_NUM < 183
#include <colorchat>
#endif
forward amxbans_sql_initialized(Handle:sqlTuple, const dbPrefix[]);
forward fbans_sql_connected(Handle:sqlTuple);
enum (+=1) {
NONE = 0,
AMX,
FB,
CMS
}
enum _:qState { AddOne, AddTwo }
new g_System = NONE;
new Handle:g_DBTuple;
new g_TableAdmins[32], g_TableSAdmins[32], g_TableSInfo[32], g_ServerIp[25];
new g_szQuery[512], g_Data[2];
public plugin_init()
{
#define PNAME ""
#define PVERSION ""
#define PAUTHOR ""
register_plugin(PNAME, PVERSION, PAUTHOR);
}
public amxbans_sql_initialized(Handle:sqlTuple, const dbPrefix[])
{
if (g_System != NONE) {
return PLUGIN_CONTINUE;
}
g_DBTuple = sqlTuple;
g_System = AMX;
formatex(g_TableAdmins, charsmax(g_TableAdmins), "%s_amxadmins", dbPrefix);
formatex(g_TableSInfo, charsmax(g_TableSInfo), "%s_serverinfo", dbPrefix);
formatex(g_TableSAdmins, charsmax(g_TableSAdmins), "%s_admins_servers", dbPrefix);
get_cvar_string("amxbans_server_address", g_ServerIp, charsmax(g_ServerIp));
if (!g_ServerIp[0]) {
get_user_ip(0, g_ServerIp, charsmax(g_ServerIp), 0);
}
return PLUGIN_CONTINUE;
}
public fbans_sql_connected(Handle:sqlTuple)
{
new i_Ip[16], i_Port[8];
if (g_System != NONE) {
return PLUGIN_CONTINUE;
}
g_DBTuple = sqlTuple;
g_System = FB;
if (!get_cvar_string("amx_amxadmins_table", g_TableAdmins, charsmax(g_TableAdmins)))
g_TableAdmins = "amx_amxadmins";
if (!get_cvar_string("amx_admins_table", g_TableSAdmins, charsmax(g_TableSAdmins)))
g_TableSAdmins = "amx_admins_servers";
get_cvar_string("fb_servers_table", g_TableSInfo, charsmax(g_TableSInfo));
get_cvar_string("fb_server_ip", i_Ip, charsmax(i_Ip));
get_cvar_string("fb_server_port", i_Port, charsmax(i_Port));
formatex(g_ServerIp, charsmax(g_ServerIp), "%s:%s", i_Ip, i_Port);
return PLUGIN_CONTINUE;
}
public OnAPIAdminsLoaded()
{
g_System = CMS;
}
public SQL_Handler(failstate, Handle:query, err[], errcode, dt[], datasize)
{
switch(failstate)
{
case TQUERY_CONNECT_FAILED, TQUERY_QUERY_FAILED:
{
log_amx("[SQL ERROR #%d][Query State %d] %s", errcode, dt[0], err);
SQL_FreeHandle(query);
return;
}
}
switch(dt[0])
{
case AddOne:
{
g_Data[0] = AddTwo;
new szAuth[25], iID = SQL_GetInsertId(query);
get_user_authid(dt[1], szAuth, charsmax(szAuth));
formatex(g_szQuery, charsmax(g_szQuery), "INSERT INTO %s (admin_id, server_id, custom_flags, use_static_bantime) VALUES ('%d', (SELECT id FROM %s WHERE address = '%s'), '', 'no')", g_TableSAdmins, iID, g_TableSInfo, g_ServerIp);
SQL_ThreadQuery(g_DBTuple, "SQL_Handler", g_szQuery, g_Data, sizeof(g_Data));
}
case AddTwo:
{
SQL_FreeHandle(query);
server_cmd("amx_reloadadmins");
}
}
}
public pointBonus_GiveFlags(id, flags[], days)
{
if(!flags[0] || !days)
return 0;
if (g_System == NONE)
{
client_print_color(id, id, "^4[AES] ^3Отсутствует подключение к Базе!");
return 0;
}
if (get_user_flags(id) & read_flags(flags))
{
client_print_color(id, id, "^4[AES] ^3У вас уже есть данная привилегия!");
return 0;
}
new szAuth[25], szName[32];
get_user_authid(id, szAuth, charsmax(szAuth));
get_user_name(id, szName, charsmax(szName));
//если нужно выдать только флаг "t", как сейчас в настройках бонуса, то должна быть создана услуга с таким единственным флагом
if(g_System == CMS)
{
cmsapi_add_account(id, szAuth, days*24*60, "", flags);
return PLUGIN_HANDLED;
}
new szPlayerEnd;
szPlayerEnd = get_systime() + days * 86400;
g_Data[0] = AddOne;
g_Data[1] = id;
formatex(g_szQuery, charsmax(g_szQuery), "INSERT INTO %s (username, access, flags, steamid, nickname, ashow, created, expired, days) VALUES ('%s', '%s', 'ce', '%s', '%s', '0', UNIX_TIMESTAMP(NOW()), '%d', '%d')", g_TableAdmins, szAuth, flags, szAuth, szName, szPlayerEnd, days);
SQL_ThreadQuery(g_DBTuple, "SQL_Handler", g_szQuery, g_Data, sizeof(g_Data));
return 1;
}
Проблема возникает следующая данный плагин вызывает натив для добавления аккаунта, фактическое добавление производится API. При добавлении выбивает ошибку синтаксиса запроса в БД.
Код:
L 04/23/2020 - 08:05:57: "Swed48<1><STEAM_1:0:501347798><CT>" say "/anew"
L 04/23/2020 - 08:05:59: [gamecms_api_5.4.4.amxx] FnFindUserService not found b(0)
L 04/23/2020 - 08:05:59: [gamecms_api_5.4.4.amxx] INSERT IGNORE INTO admins (name, type, pass, server, user_id) values ('Swed48', 'STEAM_1:0:', '', '1', '0');INSERT INTO admins__services (rights_und, service_time, bought_date, ending_date, admin_id, service) values ('b', '1', '2020-04-23 08:05:59', '2020-04-24 08:05:59', LAST_INSERT_ID(), (SELECT `id` FROM `services` WHERE `servi
L 04/23/2020 - 08:05:59: [gamecms_api_5.4.4.amxx] [API-AddAdmin] Админ №37 (услуга ) успешно добавлен
L 04/23/2020 - 08:05:59: [gamecms_api_5.4.4.amxx] SELECT `a`.`id`, `a`.`name` as `auth`,`pass`, COALESCE(REPLACE(`ad`.`rights_und`,'none',`s`.`rights`),`ad`.`rights_und`) AS `flags`, `a`.`type`, `ending_date` as `expired`,`ad`.`id` AS `admin_service_id`,`ad`.`service`,`service_time`,`a`.`active`,`a`.`pause`, `s`.`name` as `service_name`, `cause`, UNIX_TIMESTAMP(`ending_date`) as
L 04/23/2020 - 08:05:59: [gamecms_api_5.4.4.amxx] [Error] Query error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '`id' at line 1 (1064)
L 04/23/2020 - 08:05:59: [gamecms_api_5.4.4.amxx] "0" services was 'Reloaded' from database. Total on server: "1" services.
L 04/23/2020 - 08:05:59: [gamecms_api_5.4.4.amxx] Access after reload - / 0 / 0
В итоге на сайте пишет, но все же не работает, можно ли это исправить ? или что бы это заработала придётся полностью плагин переписывать ?