• Пожалуйста, создайте название темы отражающее ее смысл
  • Для ускорения решения Вашего вопроса заполните обязательные поля и подробно опишите возникшую проблему

Помощь переделка Aes_Bonus_Flags

Glaus

Пользователь
Сообщения
3
Реакции
0
Баллы
1
Добрый день, есть небольшая переделка в Aes_Bonus_Flags (цель- при покупке в игре за бонусы в /anew флага, отображение привилегий на сайте было)

Сам код
Код:
#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

В итоге на сайте пишет, но все же не работает, можно ли это исправить ? или что бы это заработала придётся полностью плагин переписывать ?
2 (1).png

1.png
 
Glaus, Сказали же... Слитым движкам не помогают...
 
Glaus, речь идет о помощи с работой API.
Идите пишите автору сего чуда, может быть возьмет и исправит. Ну или обращайтесь к "авторам" слива движка, может быть они Вам помогут...
 
Glaus, в этом плагине проблем не видно.
 
Назад
Сверху