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

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

pollfank

Участник
Сообщения
167
Решения
1
Реакции
32
Баллы
28
Здравствуйте дорогие знатоки.
Суть моей проблемы, даже точнее не проблемы, а небольшого нюанса такой.
Есть плагин aes_bonus_flags.amxx для выдачи определенных флагов за бонусы. Так вот, все бы ничего но он записывает данные только в базу AmxBans движка.
Кто может подсказать, как сделать так чтобы данные при записи в базу AmxBans еще и дублировались в базу данных сайта GameCMS. Или хотя бы записывались только туда. Так как пользуюсь Плагин АМХХ - GameCMS API, и загрузка админов происходит исключительно из базы сайта GameCMS.
Буду очень признателен за помощь.
Код:
#include <amxmodx>
#include <sqlx>

forward amxbans_sql_initialized(Handle:sqlTuple, const dbPrefix[]);
forward fbans_sql_connected(Handle:sqlTuple);
forward lite_bans_sql_init(Handle:sqlTuple);

enum (+=1) {
    NONE = 0,
    AMX,
    FB,
    LB
}

enum _:qState     { AddOne, AddTwo }

new g_System = NONE;
new Handle:g_DBTuple;
new g_TableAdmins[100], g_TableSAdmins[100], g_TableSInfo[100], g_ServerIp[25];
new g_szQuery[1024], g_Data[2];

public plugin_init()
{
#define PNAME "AES Bonus: Flags"
#define PVERSION "0.2"
#define PAUTHOR "Sonyx"
    register_plugin(PNAME, PVERSION, PAUTHOR);
    register_dictionary("aes.txt");
}

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 lite_bans_sql_init(Handle:sqlTuple)
{
    new dbPrefix[64];

    if (g_System != NONE) {
        return PLUGIN_CONTINUE;
    }

    g_DBTuple = sqlTuple;
    g_System = LB;   

    get_cvar_string("lb_sql_pref", dbPrefix, charsmax(dbPrefix));

    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("lb_server_ip", 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 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, print_team_default, "%L %L", id, "AES_TAG", id, "AES_FLAG_ERROR");
        return 0;
    }
    if (get_user_flags(id) & read_flags(flags))
    {
        client_print_color(id, print_team_default, "%L %L", id, "AES_TAG", id, "AES_FLAG_READY");
        return 0;
    }
    new szAuth[25], szName[32], szPlayerEnd;

    get_user_authid(id, szAuth, charsmax(szAuth));
    get_user_name(id, szName, charsmax(szName));
    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));
    client_print_color(id, print_team_default, "%L %L", id, "AES_TAG", id, "AES_FLAG_BUY");
    
    return 1;
}
 

Вложения

  • aes_bonus_flags.sma
    4.3 KB · Просмотры: 5
pollfank, как-то так
C++:
#include <amxmodx>
#include <gamecms5>

public plugin_init()
{
#define PNAME "AES Bonus: Flags"
#define PVERSION "0.2"
#define PAUTHOR "Sonyx"
    register_plugin(PNAME, PVERSION, PAUTHOR);
    register_dictionary("aes.txt");
}

public pointBonus_GiveFlags(id, flags[], days)
{
    if(!flags[0] || !days)
        return 0;
    if (get_user_flags(id) & read_flags(flags))
    {
        client_print_color(id, print_team_default, "%L %L", id, "AES_TAG", id, "AES_FLAG_READY");
        return 0;
    }

    cmsapi_add_account(id, "ce", days/24/60, "", flags);
    client_print_color(id, print_team_default, "%L %L", id, "AES_TAG", id, "AES_FLAG_BUY");
   
    return 1;
}
 
zhorzh78, вроде запись появилась, только почему то нет флага, или может попробовать поставить выдачу тех флагов, которые стоят в услуге на сайте

911
 
pollfank, Наверное, строгий режим вставки у MySQL. Надо смотреть
 
zhorzh78, увы тоже самое. Может я что то не так делаю, вот как сделал.
Код:
#include <amxmodx>
#include <gamecms5>
#include <sqlx>

forward amxbans_sql_initialized(Handle:sqlTuple, const dbPrefix[]);
forward fbans_sql_connected(Handle:sqlTuple);
forward lite_bans_sql_init(Handle:sqlTuple);

enum (+=1) {
    NONE = 0,
    AMX,
    FB,
    LB
}

enum _:qState     { AddOne, AddTwo }

new g_System = NONE;
new Handle:g_DBTuple;
new g_TableAdmins[100], g_TableSAdmins[100], g_TableSInfo[100], g_ServerIp[25];
new g_szQuery[1024], g_Data[2];

public plugin_init()
{
#define PNAME "AES Bonus: Flags"
#define PVERSION "0.2"
#define PAUTHOR "Sonyx"
    register_plugin(PNAME, PVERSION, PAUTHOR);
    register_dictionary("aes.txt");
}

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 lite_bans_sql_init(Handle:sqlTuple)
{
    new dbPrefix[64];

    if (g_System != NONE) {
        return PLUGIN_CONTINUE;
    }

    g_DBTuple = sqlTuple;
    g_System = LB;   

    get_cvar_string("lb_sql_pref", dbPrefix, charsmax(dbPrefix));

    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("lb_server_ip", 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 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, print_team_default, "%L %L", id, "AES_TAG", id, "AES_FLAG_ERROR");
        return 0;
    }
    if (get_user_flags(id) & read_flags(flags))
    {
        client_print_color(id, print_team_default, "%L %L", id, "AES_TAG", id, "AES_FLAG_READY");
        return 0;
    }
    new szAuth[25], szName[32], szPlayerEnd;

    get_user_authid(id, szAuth, charsmax(szAuth));
    get_user_name(id, szName, charsmax(szName));
    szPlayerEnd = get_systime() + days * 86400;
    
    g_Data[0] = AddOne;
    g_Data[1] = id;

    cmsapi_add_account(id, "ce", days/24/60, "", flags);
    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));
    client_print_color(id, print_team_default, "%L %L", id, "AES_TAG", id, "AES_FLAG_BUY");
    
    return 1;
}
 
pollfank, Логи есть для поиска проблем. Ставьте cms_debug "3"
 
zhorzh78, у меня идея. Если сделать импорт с базы CsBans в сайт движка, тогда все отлично работает. Может тогда есть команда для выполнения такого скрипта, сделать например с помощью task , задать время,.. команда импорта.
Возможно такое?
 
pollfank, Конечно, так и делайте. А логи пусть дают ленивые
 
Назад
Сверху