Иконка ресурса

amxx reapi Digital Store Online [PromoCode for GameCMS] 1.0

Нет прав для скачивания
Установка
1. Переместить файл конфигурации на сервер
2. Настроить конфиг, указать тип сохранения, логин бд
3. Скомпилировать плагин (инструкция)
4. Прописать плагин в plugins.ini , выше тех которые его используют
Настройки
Для установки промо-кодов, достаточно в модуле "Магазин цифровых товаров" указать только сам промокод:
например "d6s7afsg"

При успешной активации вызывается форвард:
gamecms_promo_load(pId, PromoString[], Product_Key)

Например:
Код:
public gamecms_promo_load(pId, PromoString[], Product_Key)
{
    UTIL_SayText(pId, "!g[%s] !yУспешно активировал промокод %d, %s", PREFIX, Product_Key, PromoString);
}
Мануал как выдать модельку
1)Создаем услугу _access_skin в АЦ
2)

Код:
//Ловим Успешный активированный промокод
public gamecms_promo_load(pId, PromoString[], Product_Key)
{
    //При создание промо для начало узнаем айди промо, Узнать можно выводом в чат этой данной
    //UTIL_SayText(pId, "!g[%s] !yУспешно активировал промокод !g%d", PREFIX, Product_Key);
    switch(Product_Key)
    {
        case 1:
        {
            //Проверяем, имеется ли у игрока данная услуга?
            if(cmsapi_get_user_services(pId, "",  "_access_skin", 0))
            {
                //Имеем?, прекращаем дальнейшие действие
                return PLUGIN_HANDLED;
            }
     
            //в Нашем случая прописываем услугу по нику
            new szName[32]; get_user_name(pId, szName, charsmax(szName));
            //Генерируем пароль в диапазоне от 100000 до 600000
            new Password[32]
     
            //форматируем числовой генерацию в строковую
            formatex(Password, charsmax(Password), "%d", random_num(100000, 600000));

            //Выдаем услугу 43200 минут = 1 месяц
            /**
            *    Добаление аккаунтов в базу данных
            *
            *    @iClient        Индекс игрока
            *    @szAuthType[]    Тип авторизации (смотри amxconst.inc: Admin authentication behavior flags)
            *    @szFlags[]        Флаги (уровни) доступа (смотри amxconst.inc: Admin level constants)
            *    @iTime            Время в минутах, 0- навсегда (если время не указано, значит 0)
            *    @szPasswd[]        Пароль доступа (если нужен)
            *    @iServiceId        Номер услуги на сайте (если известен)
            *    @check_params    Проверка введенных данных (true- включить).
            *
            *    @note            При отключеной функции check_params существует вероятность ошибок со стороны пользователя
            *
            *    @note            Пример:
            *                    cmsapi_add_account(id, "a", "180", "parol", "prt", 0, false)
            *                    игроку №id с его ником выданы флаги "prt" на 180 минут, пароль- "parol"
            */
            cmsapi_add_account(pId, "a", 43200,  Password , "_access_skin",  0, false)

     
            //Уведомляем игроку что тот купил услугу, и выводим Ник и Пароль
     
            UTIL_SayText(pId, "!g[%s] !yУспешно активировал промокод !g%d", PREFIX, Product_Key);
            UTIL_SayText(pId, "!g[%s] !yВаш Ник к серверу: !g%s", PREFIX, szName);
            UTIL_SayText(pId, "!g[%s] !yВаш Пароль к серверу: !g%s", PREFIX, Password);
            UTIL_SayText(pId, "!g[%s] !yПароль можете сменить в личном кабинете на форуме", PREFIX);
        }
        case 2: return PLUGIN_HANDLED;
        case 3: return PLUGIN_HANDLED;
    }
    return PLUGIN_HANDLED;
}
3) дальше делаем проверку при спавне:

Код:
public plugin_init()
{
    RegisterHam(Ham_Spawn,             "Ham_PlayerSpawn_Post", true)
}
//ловим спавн игрока
public Ham_PlayerSpawn_Post(pId)
{
    //Проверяем, имеется ли у игрока услуга
    if(cmsapi_get_user_services(pId, "",  "_access_skin", 0))
    {
        //Выдаем ему свою модельку
        cs_set_user_model(id, "vipmodel");

    }
}

Код:
#include <amxmodx>
#include <reapi>
#include <gamecms5>
#include <fakemeta>
#include <cstrike>

new gmodels[][] =
{
    "vip_model",
    "vip_sonic"
}

//native jbe_set_user_2data(pId, iType);
//native jbe_is_user_2data(pId);



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

new g_iUserSelect[MAX_PLAYERS + 1];



public plugin_init()
{

    
    //RegisterHookChain(Ham_Spawn,             "Ham_PlayerSpawn_Post", true);
    RegisterHookChain(RG_CBasePlayer_Spawn,                     "fwdPlayerSpawn_Post", true);
    
    register_menucmd(register_menuid("Show_UserMainMenu"), (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9), "Handle_UserMainMenu");
    
    register_clcmd("say /skinmenu", "UserPromoMenu"); //меню для игрока
    
    
}



public UserPromoMenu(pId) return Show_UserMainMenu(pId);

public client_disconnected(pId)
{
    g_iUserSelect[pId] = 0;
}




public plugin_precache()
{
    for(new i; i < sizeof(gmodels); i++)
    {
        new str[128];
        formatex(str, charsmax(str), "models/player/%s/%s.mdl", gmodels[i], gmodels[i]);
        precache_model(str);
    }
}

Show_UserMainMenu(pId)
{
    new szMenu[512], iBitKeys, iLen;

    FormatMain("\yВыбор модели^n^n");

    if(cmsapi_get_user_services(pId, "",  "_store_ded", 0))
        if(g_iUserSelect[pId] == 1)
            FormatItem("\y1. \rVIP^n");
        else FormatItem("\y1. \wVIP^n"), iBitKeys |= (1<<0);
    else FormatItem("\y1. \dVIP \rНе актвивирован^n");
    
    if(cmsapi_get_user_services(pId, "",  "_storepi", 0))
        if(g_iUserSelect[pId] == 2)
            FormatItem("\y2. \rSonic^n");
        else FormatItem("\y2. \wSonic^n"), iBitKeys |= (1<<1);
    else FormatItem("\y2. \dSonic \rНе актвивирован^n");
    
    

    FormatItem("^n^n\y0. \wВыход"), iBitKeys |= (1<<9);

    return show_menu(pId, iBitKeys, szMenu, -1, "Show_UserMainMenu");
}

public Handle_UserMainMenu(pId, iKeys)
{
    if(iKeys <= 7)
    {
        g_iUserSelect[pId] = iKeys + 1;
        
        //jbe_set_user_2data(pId, g_iUserSelect[pId]);
        
        if(g_iUserSelect[pId] == 1)
        {
            UTIL_SayText(pId, "!g• !yВы выбрали модельку !g[VIP] !y, поменяется при при возраждение");
        }
        else
        if(g_iUserSelect[pId] == 2)
        {
            UTIL_SayText(pId, "!g• !yВы выбрали модельку !g[Sonic] !y, поменяется при при возраждение");
        }
        return PLUGIN_HANDLED;
    }
    if(iKeys == 9) return PLUGIN_HANDLED;

    return Show_UserMainMenu(pId);
}

public gamecms_promo_load(pId, PromoString[], Product_Key)
{
    switch(Product_Key)
    {
        case 1: //ТУТ ДОЛЖЕН БЫТЬ НОМЕР АЙДИ ОТ DIGATELEСТОРЕ
        {   
            new iDay = 30;            // Дней
            new Time = (60 * 24 * iDay);
            
            new iServiceId = 12;    //ТОТ ДОЛЖЕН БЫТЬ АЙДИ УСЛУГИ УСЛУГИ
            cmsapi_add_account(pId, "ce", Time,  "", "", iServiceId);
            
            UTIL_SayText(0, "!g• !yИгрок!g %n !yактивировал промокод на !gGraffiti первой категории", pId);
        }
        case 2: //
        {
            
            new iDay = 30;            // Дней
            
            new Time = (60 * 24 * iDay);
            new iServiceId = 13;
            cmsapi_add_account(pId, "ce", Time,  "", "", iServiceId);
            
            UTIL_SayText(0, "!g• !yИгрок!g %n !yактивировал промокод на !gGraffiti второй категории", pId);
        }

    }
}

public fwdPlayerSpawn_Post(pId)
{
    if(!is_user_alive(pId))
        return;
        
    //g_iUserSelect[pId] = jbe_is_user_2data(pId);
    
    //if(g_iUserSelect[pId] == 0)
    //    return;
        
    set_task(0.5, "task_player", pId);
    
}

public task_player(pId)
{
    
    new TeamName:iTeam = get_member(pId, m_iTeam);
    
    if(cmsapi_get_user_services(pId, "",  "_store_ded", 0) && g_iUserSelect[pId] == 1)
    {
        //cs_reset_user_model(pId);
        switch(iTeam)
        {
            case TEAM_CT: cs_set_user_model(pId, gmodels[0]);
            case TEAM_TERRORIST: cs_set_user_model(pId, gmodels[1]);
        }
        return;
    }
    if(cmsapi_get_user_services(pId, "",  "_storepi", 0) && g_iUserSelect[pId] == 2)
    {
        //cs_reset_user_model(pId);
        switch(iTeam)
        {
            case TEAM_CT: cs_set_user_model(pId, gmodels[0]);
            case TEAM_TERRORIST: cs_set_user_model(pId, gmodels[1]);
        }
        return;
    }

}

const MsgId_SayText = 76;

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();
        }
    }
}
API
Единственный форвард где активируется промокод при вводе с сайта
gamecms_promo_load(pId, PromoString[], Product_Key)
Сверху Снизу