Как сделать продажу Званий

Newell

Новичок
Сообщения
22
Реакции
0
Здравствуйте у меня на сервере стоит плагин Army Ranks Ultimate - я хочу сделать продажу званий от Рядового до Генерала - даже купил дополнение GameCMS цифровой магазин - нашёл плагин для активаций промокода - но звания не выдаются что нужно вписать чтобы при покупке промокода Рядового давался рядовой - При покупке промокода Сержант - Сержант.

Код

Код:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <sqlx>
#include <gamecms5>

new const PLUGIN[] = "GameCMS_Digital_Store";
new const VERSION[] = "1.0.0";
new const AUTHOR[] = "DalgaPups";

new const PREFIX[] = "Русская Армия | Код"

//#define DEBUG

#define MsgId_SayText 76

new g_iUserPromoKod[MAX_PLAYERS + 1][MAX_NAME_LENGTH];

const QUERY_LENGTH =    512    // размер переменной sql запроса

#define PROMO_TABLE         "digital_store__action"

new Handle:g_hSqlHandle;

#define FormatMain(%0)                             (iLen = formatex(szMenu, charsmax(szMenu), %0))
#define FormatItem(%0)                             (iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, %0))

new g_iFwdLoagPromo;
enum _:sql_que_type    // тип sql запроса
{
    SQL_PRELOAD,
    SQL_LOADPROMO
}

enum _:EXT_DATA_STRUCT {
    EXT_DATA__SQL,
    EXT_DATA__INDEX,
    EXT_DATA__PRODUCT_ID
}

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);
    
    register_clcmd("сodmrdra" , "clcmd_promokod");
    
    
    #define RegisterMenu(%1,%2) register_menucmd(register_menuid(%1), 1023, %2)
    
    RegisterMenu("Show_MainMenu",                  "Handle_MainMenu");
    
    #undef RegisterMenu
    
    
    g_iFwdLoagPromo = CreateMultiForward("gamecms_promo_load", ET_CONTINUE, FP_CELL, FP_STRING, FP_CELL);
}

public gamecms_promo_load(pId, PromoString[], Product_Key)
{
    UTIL_SayText(pId, "!g[%s] !yУспешно активировал промокод %d, %s", PREFIX, Product_Key, PromoString);
}

public OnAPIPluginLoaded(Handle:sqlTuple)
{
    g_hSqlHandle = sqlTuple;
    
    SQL_SetCharset(g_hSqlHandle, "utf8");
    
    new query[QUERY_LENGTH];
    
    formatex(query, charsmax(query) ,"\
        CREATE TABLE IF NOT EXISTS %s \
        ( \
            `id` int(11) NOT NULL AUTO_INCREMENT, \
            `user_id` int(11) NOT NULL, \
            `product` VARCHAR(32) NOT NULL default '', \
            `product_id` int(11) NOT NULL, \
            PRIMARY KEY (`id`)\
        )\
        COLLATE='utf8_general_ci',\
        ENGINE=InnoDB;", PROMO_TABLE
    );
    
    SQL_ThreadQuery(g_hSqlHandle, "IgnoreHandle", query);
}

public plugin_end()
{
    DestroyForward(g_iFwdLoagPromo);
}

public client_disconnected(pId)
{
    if(strlen(g_iUserPromoKod[pId]) > 0) formatex(g_iUserPromoKod[pId], charsmax(g_iUserPromoKod[]), "")
}

public clcmd_promokod(id)
{
    read_argv(1, g_iUserPromoKod[id], charsmax(g_iUserPromoKod[]))
    
    if((strlen(g_iUserPromoKod[id]) < 1) || strlen(g_iUserPromoKod[id]) > 31)
    {
        formatex(g_iUserPromoKod[id], charsmax(g_iUserPromoKod[]), "")

        UTIL_SayText(id, "!g%s !yНекоректные данные, введите от 1 до 31 символов!", PREFIX);
        return Show_MainMenu(id);
    }
    return Show_MainMenu(id)
}

public clcmd_promomenu(pId) return Show_MainMenu(pId);

Show_MainMenu(pId)
{
    new szMenu[512], iKey = (1<<0|1<<9), iLen;
    
    FormatMain("\yРусская Армия Активация Кода^n^n");
    
    if(strlen(g_iUserPromoKod[pId]) > 0)
    {
        FormatItem("\r[\w1\r] \r[\wКод Активаций\r]\r%s^n", g_iUserPromoKod[pId]);
        iKey |= (1<<1);
    }
    else FormatItem("\r[\w1\r] \r[\wВведите Код\r]^n");
    
    FormatItem("\r[\w2\r] \r[\wАктивировать\r]^n");
    
    FormatItem("^n^n^n\r[\w0\r] \wВыход");
    
    return show_menu(pId, iKey, szMenu, -1, "Show_MainMenu");
}


public Handle_MainMenu(pId, iKey)
{
    switch(iKey)
    {
        case 0:
        {
            client_cmd(pId, "messagemode ^"promokod^"") 
            UTIL_SayText(pId, "!g[%s] !yВведите код который вы купили на форуме", PREFIX);
        }
        case 1:
        {
            if(cmsapi_is_user_member(pId))
            {
                HANDLE_user(pId);
            }
            else
            {
                UTIL_SayText(pId, "!g[%s] !yК сожелению вы не зарегитрированы на форуме или не указали STEAM ID", PREFIX);
                return PLUGIN_HANDLED;
            }
        }
        case 9: return PLUGIN_HANDLED;
    }
    return Show_MainMenu(pId);

}

HANDLE_user(pId)
{
    if(strlen(g_iUserPromoKod[pId]) < 1)
        return Show_MainMenu(pId);
            
    new queryData[QUERY_LENGTH];

    formatex(queryData, charsmax(queryData), "SELECT * FROM digital_store__keys WHERE `pay` != '0' AND `content` = '<p>%s</p>';",  g_iUserPromoKod[pId]);

    new sData[EXT_DATA_STRUCT];
    sData[EXT_DATA__SQL] = SQL_PRELOAD;
    sData[EXT_DATA__INDEX] = pId;

    #if defined DEBUG
    server_print("HANDLE_user | SQL_PRELOAD | %s", g_iUserPromoKod[pId]);
    #endif

    SQL_ThreadQuery(g_hSqlHandle, "selectQueryHandler", queryData, sData, sizeof(sData));
    
    return PLUGIN_HANDLED;
}

public selectQueryHandler(failstate, Handle:query, err[], errNum, data[], datalen, Float:queuetime)
{
    switch(failstate)
    {
        case TQUERY_CONNECT_FAILED, TQUERY_QUERY_FAILED:  // ошибка соединения с mysql сервером
        {
            new szText[128];
            formatex(szText, charsmax(szText), "[Проблемы с БД. Код ошибки: #%d]", errNum);
            if(datalen) log_to_file("mysqlt.log", "Query state: %d", data[0]);
            log_to_file("mysqlt.log","%s", szText)
            log_to_file("mysqlt.log","%s",err)
            
            if(failstate == TQUERY_QUERY_FAILED)
            {
                new lastQue[QUERY_LENGTH]

                SQL_GetQueryString(query, lastQue, charsmax(lastQue)) // узнаем последний SQL запрос
                log_to_file("mysqlt.log","[ SQL ] %s",lastQue)
            }
            return PLUGIN_CONTINUE;
        }
    }

    switch(data[EXT_DATA__SQL])
    {
        case SQL_PRELOAD:
        {
            new pId = data[EXT_DATA__INDEX];
            
            if(!is_user_connected(pId)) return PLUGIN_HANDLED;
            
            if(SQL_NumResults(query))
            {
                new product_id = SQL_ReadResult(query, SQL_FieldNameToNum(query,"product"));
                
                new queryData[QUERY_LENGTH];
            
                formatex(queryData, charsmax(queryData), "SELECT `product` FROM %s WHERE `product` = '<p>%s</p>'", PROMO_TABLE,  g_iUserPromoKod[pId]);
                
                new sData[EXT_DATA_STRUCT];
                sData[EXT_DATA__SQL] = SQL_LOADPROMO;
                sData[EXT_DATA__INDEX] = pId;
                sData[EXT_DATA__PRODUCT_ID] = product_id;
                
                #if defined DEBUG
                server_print("selectQueryHandler | SQL_LOADPROMO | %d | %s", product_id, g_iUserPromoKod[pId]);
                #endif
                SQL_ThreadQuery(g_hSqlHandle, "selectQueryHandler", queryData, sData, sizeof(sData));
            }
            else
            {
                formatex(g_iUserPromoKod[pId], charsmax(g_iUserPromoKod[]), "")
                UTIL_SayText(pId, "!g[%s] !yК сожелению данный промокод не найден.", PREFIX);
                return PLUGIN_HANDLED;
            }
        
        }
        case SQL_LOADPROMO:
        {
            new pId = data[EXT_DATA__INDEX];
                
            if(!is_user_connected(pId)) return PLUGIN_HANDLED;
            
            if(!SQL_NumResults(query))
            {
                new index_member_id = cmsapi_is_user_member(pId);
                
                if(index_member_id)
                {
                    new queryData[QUERY_LENGTH];
                    
                    new product_id = data[EXT_DATA__PRODUCT_ID]
                    
                    #if defined DEBUG
                    server_print("IgnoreHandle | SQL_IGORE | %d | %s | %d", product_id, g_iUserPromoKod[pId], index_member_id);
                    #endif
                    
                    formatex(queryData, charsmax(queryData), "INSERT INTO %s \
                    (`user_id`, `product`, `product_id`) \
                    VALUES ('%d', '<p>%s</p>', '%d')",PROMO_TABLE, index_member_id, g_iUserPromoKod[pId], product_id);
                    
                    SQL_ThreadQuery(g_hSqlHandle, "IgnoreHandle", queryData);
                    
                    new iRet;
                    ExecuteForward(g_iFwdLoagPromo, iRet, pId, g_iUserPromoKod[pId], product_id);
                }

            }
            else
            {
                formatex(g_iUserPromoKod[pId], charsmax(g_iUserPromoKod[]), "")
                UTIL_SayText(pId, "!g[%s] !yДанный промокод неактивный, т.к. его уже активировали", PREFIX);
                return Show_MainMenu(pId);
            }
            
        }
    }
    return PLUGIN_HANDLED;
}
public IgnoreHandle(failstate, Handle:query, err[], errNum, data[], datalen, Float:queuetime)
{
    switch(failstate)
    {
        case TQUERY_CONNECT_FAILED, TQUERY_QUERY_FAILED:  // ошибка соединения с mysql сервером
        {
            new szText[128];
            formatex(szText, charsmax(szText), "[Проблемы с БД. Код ошибки: #%d]", errNum);
            if(datalen) log_to_file("mysqlt.log", "Query state: %d", data[0]);
            log_to_file("mysqlt.log","%s", szText)
            log_to_file("mysqlt.log","%s",err)
            
            if(failstate == TQUERY_QUERY_FAILED)
            {
                new lastQue[QUERY_LENGTH]

                SQL_GetQueryString(query, lastQue, charsmax(lastQue)) // узнаем последний SQL запрос
                log_to_file("mysqlt.log","[ SQL ] %s",lastQue)
            }
            return PLUGIN_CONTINUE;
        }
    }

    SQL_FreeHandle(query);
    return PLUGIN_CONTINUE;
}

stock UTIL_SayText(pPlayer, const szMessage[], any:...)
{
    new szBuffer[190];
    if(numargs() > 2) vformat(szBuffer, charsmax(szBuffer), szMessage, 3);
    else copy(szBuffer, charsmax(szBuffer), szMessage);
    
    while(replace(szBuffer, charsmax(szBuffer), "!y", "^1")) {}
    while(replace(szBuffer, charsmax(szBuffer), "!t", "^3")) {}
    while(replace(szBuffer, charsmax(szBuffer), "!g", "^4")) {}

    switch(pPlayer)
    {
        case 0:
        {
            for(new iPlayer = 1; iPlayer <= MaxClients; iPlayer++)
            {
                if(!is_user_connected(iPlayer)) continue;
                
                engfunc(EngFunc_MessageBegin, MSG_ONE_UNRELIABLE, MsgId_SayText, {0.0, 0.0, 0.0}, iPlayer);
                write_byte(iPlayer);
                write_string(szBuffer);
                message_end();
            }
        }
        default:
        {
            engfunc(EngFunc_MessageBegin, MSG_ONE_UNRELIABLE, MsgId_SayText, {0.0, 0.0, 0.0}, pPlayer);
            write_byte(pPlayer);
            write_string(szBuffer);
            message_end();
        }
    }
    
    
}
 
Сверху
Назад