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

Помощь GameCMS BonusSystem + anew

Deaglusha

Участник
Сообщения
8
Реакции
1
Баллы
3
Всем привет. Хотел привлечь игроков регистрироваться на сайте и за это им бы выдавались бонусы. Нашёл плагин GameCMS BonusSystem 1.1. Но в нём происходит выдача игровой валюты $, мне же нужна выдача бонусов anew от плагина BonusMenu RBS (есть include данного плагина). Каким образом заменить выдачу на anew? Думаю переделка плагина будет полезна многим владельцам серверов.

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

#if defined AMXX_VERSION_RELEASE
    #define    client_disconnect client_disconnected
#endif

enum _:pl_state
{
    bool:give,
    thanks,
    answers
}
new cvhThanks, cvhAnswers, cvhStart, cvhMaxMoney, cvhRound;
new g_player[33][pl_state];
new giRoundCount;

public plugin_init()
{
    register_plugin("GameCMS BonusSystem", "1.1", "+- DUKKHAZ0R");
    register_logevent("LogERoundStart", 2, "1=Round_Start");
    register_event("TextMsg", "eRestart", "a", "2&#Game_C", "2&#Game_w");
    register_clcmd("say /bonus", "ShowAwardPlayers");
    
    cvhRound = register_cvar("cms_bonus_round", "3");
    cvhThanks = register_cvar("cms_bonus_thanks", "5");
    cvhAnswers = register_cvar("cms_bonus_answers", "10");
    cvhStart = register_cvar("cms_bonus_startmoney", "50");
    cvhMaxMoney = register_cvar("cms_bonus_maxmoney", "16000");
}

public plugin_cfg()
{
    if(is_plugin_loaded("GameCMS_API") == INVALID_PLUGIN_ID)
    {
        log_amx("WARNING: gamecms_api.amxx isn't loaded! Plugin Stopped.")
        pause("a");
        return;
    }
}

public client_disconnect(id)
    arrayset(g_player[id], 0, pl_state);

public client_connect(id)
    arrayset(g_player[id], 0, pl_state);

public OnAPIMemberConnected(id, memberId, memberName[])
{
    new Data[4];
    new bool:status = cmsapi_get_forum_data(id, Data) != 0 ? true : false;
    
    if(!status)
        return;
    
    g_player[id][thanks] = Data[0];
    g_player[id][answers] = Data[1];
    g_player[id][give] = true;
}

public ShowAwardPlayers(user)
{
    new plName[33], message[191];
    new id, len, bool:plFirst = true;
    
    len = format(message, charsmax(message), "^1[^4Bonus^1] Получают бонусы:");
    
    for(id = 1 ; id <= get_maxplayers() ; id++)
    {
        if(!is_user_connected(id))
            continue;

        if(!g_player[id][give])
            continue;

        if(len + sizeof(plName) > sizeof(message)/2)
        {
            ChatColor(user, message);
            len = 0, message[0] = EOS, plFirst = true;
        }

        get_user_name(id, plName, charsmax(plName));
        len += format(message[len], charsmax(message)-len, "%s %s", plFirst ? "^4 " : ",^4", plName);
        plFirst = false;
    }
    
    if(plFirst)
        ChatColor(user, "^1[^4Bonus^1] Сейчас никто не получает бонусы.");
    else
        ChatColor(user, message);
}

public eRestart()
    giRoundCount = 0;

public LogERoundStart()
{
    if(++giRoundCount < get_pcvar_num(cvhRound))
        return;
    
    new pl[32], name[32], pnum, iAddMoney, id;
    get_players(pl, pnum, "ach");
    
    for(new i; i < pnum; i++)
    {
        id = pl[i];
        if(g_player[id][give])
        {
            iAddMoney = get_pcvar_num(cvhStart) + g_player[id][answers] * get_pcvar_num(cvhAnswers) + g_player[id][thanks] * get_pcvar_num(cvhThanks);
            cs_set_user_money(id, min(cs_get_user_money(id) + iAddMoney, get_pcvar_num(cvhMaxMoney)));
            ChatColor(id, "^1[^4Bonus^1] Вы получаете каждый раунд ^3%d$ ^1 за активность на форуме [^4%d ^1сообщений + ^4%d ^1благодарностей^1]", iAddMoney, g_player[id][answers], g_player[id][thanks]);
        }
        else
        {
            get_user_name(id, name, charsmax(name));
            ChatColor(id, "^1[^4Bonus^1] Привет, ^3%s^1! Чтобы получать бонусы каждый раунд, зарегистрируйтесь на форуме!", name);
        }
    }
}

public plugin_natives()
{
    set_native_filter("native_filter");
}

public native_filter(const GName[], index, trap)
    return !trap ? PLUGIN_HANDLED : PLUGIN_CONTINUE;


    
stock ChatColor(const id, const szRawMessage[], any:...)
{
    static szMsg[191];
    vformat(szMsg, charsmax(szMsg), szRawMessage, 3);
    
    if(is_user_connected(id))
    {
        message_begin(MSG_ONE_UNRELIABLE, 76, .player = id);
        write_byte(id);
        write_string(szMsg);
        message_end();
    }
}
Код:
/* BonusMenu RBS Functions
*
* by SKAJIbnEJIb
*
* This file is provided as is (no warranties).
*/

#if defined _bonusmenu_rbs_included
  #endinput
#endif
#define _bonusmenu_rbs_included

// Возвратит поинты игрока
native bonusmenu_get_user_points(id);

// Откроет меню игроку
native bonusmenu_open_menu(id);

// Добавить/Отнять количество поинтов
//    points - количество добавляемых поинтов (отрицательное значение отнимет поинты)
// Возвратит количество очков игрока. -1 в случаи не удачи
native bonusmenu_add_user_points(id, points);

// Обновит поинты игрока
native bonusmenu_update_player(id);

// Вызывается при добавлении/убавлении поинтов
//    points - количество прибавленных/убавленных поинтов
forward bonusmenu_fwd_addpoints(id, points);
 
Deaglusha, данный плагин (BonusSystem 1.1) выдает игровую валюту каждый раунд. Вы уверены что хотите выдавать бонусы Anew каждый раунд игрокам?
 
Deaglusha, данный плагин (BonusSystem 1.1) выдает игровую валюту каждый раунд. Вы уверены что хотите выдавать бонусы Anew каждый раунд игрокам?
Думаю да, поставлю по 1 бонусу + максимальное ограничение допустим 50 в кфг сделать. Есть ещё идеи? Выдача один раз после регистрации не вариант..
 
Deaglusha, пробуйте. Я не проверял. Не на чем.
C++:
#include <amxmodx>
//#include <cstrike>
#include <gamecms5>
#include <bonusmenu_rbs>
#if defined AMXX_VERSION_RELEASE
    #define    client_disconnect client_disconnected
#endif
enum _:pl_state
{
    bool:give,
    thanks,
    answers
}
new cvhThanks, cvhAnswers, cvhStart, cvhMaxMoney, cvhRound;
new g_player[33][pl_state];
new giRoundCount;
public plugin_init()
{
    register_plugin("GameCMS BonusSystem", "1.1", "+- DUKKHAZ0R");
    register_logevent("LogERoundStart", 2, "1=Round_Start");
    register_event("TextMsg", "eRestart", "a", "2&#Game_C", "2&#Game_w");
    register_clcmd("say /bonus", "ShowAwardPlayers");
    
    cvhRound = register_cvar("cms_bonus_round", "3");
    cvhThanks = register_cvar("cms_bonus_thanks", "5");
    cvhAnswers = register_cvar("cms_bonus_answers", "10");
    cvhStart = register_cvar("cms_bonus_startmoney", "50");
    cvhMaxMoney = register_cvar("cms_bonus_maxmoney", "16000");
}
public plugin_cfg()
{
    if(is_plugin_loaded("GameCMS_API") == INVALID_PLUGIN_ID)
    {
        log_amx("WARNING: gamecms_api.amxx isn't loaded! Plugin Stopped.")
        pause("a");
        return;
    }
}
public client_disconnect(id)
    arrayset(g_player[id], 0, pl_state);
public client_connect(id)
    arrayset(g_player[id], 0, pl_state);
public OnAPIMemberConnected(id, memberId, memberName[])
{
    new Data[4];
    new bool:status = cmsapi_get_forum_data(id, Data) != 0 ? true : false;
    
    if(!status)
        return;
    
    g_player[id][thanks] = Data[0];
    g_player[id][answers] = Data[1];
    g_player[id][give] = true;
}
public ShowAwardPlayers(user)
{
    new plName[33], message[191];
    new id, len, bool:plFirst = true;
    
    len = format(message, charsmax(message), "^1[^4Bonus^1] Получают бонусы:");
    
    for(id = 1 ; id <= get_maxplayers() ; id++)
    {
        if(!is_user_connected(id))
            continue;
        if(!g_player[id][give])
            continue;
        if(len + sizeof(plName) > sizeof(message)/2)
        {
            ChatColor(user, message);
            len = 0, message[0] = EOS, plFirst = true;
        }
        get_user_name(id, plName, charsmax(plName));
        len += format(message[len], charsmax(message)-len, "%s %s", plFirst ? "^4 " : ",^4", plName);
        plFirst = false;
    }
    
    if(plFirst)
        ChatColor(user, "^1[^4Bonus^1] Сейчас никто не получает бонусы.");
    else
        ChatColor(user, message);
}
public eRestart()
    giRoundCount = 0;
public LogERoundStart()
{
    if(++giRoundCount < get_pcvar_num(cvhRound))
        return;
    
    new pl[32], name[32], pnum, iAddMoney, id;
    get_players(pl, pnum, "ach");
    
    for(new i; i < pnum; i++)
    {
        id = pl[i];
        if(g_player[id][give])
        {
            iAddMoney = get_pcvar_num(cvhStart) + g_player[id][answers] * get_pcvar_num(cvhAnswers) + g_player[id][thanks] * get_pcvar_num(cvhThanks);
            //cs_set_user_money(id, min(cs_get_user_money(id) + iAddMoney, get_pcvar_num(cvhMaxMoney)));
            bonusmenu_add_user_points(id, min(iAddMoney, get_pcvar_num(cvhMaxMoney)));
            ChatColor(id, "^1[^4Bonus^1] Вы получаете каждый раунд ^3%d$ ^1 за активность на форуме [^4%d ^1сообщений + ^4%d ^1благодарностей^1]", iAddMoney, g_player[id][answers], g_player[id][thanks]);
        }
        else
        {
            get_user_name(id, name, charsmax(name));
            ChatColor(id, "^1[^4Bonus^1] Привет, ^3%s^1! Чтобы получать бонусы каждый раунд, зарегистрируйтесь на форуме!", name);
        }
    }
}
public plugin_natives()
{
    set_native_filter("native_filter");
}
public native_filter(const GName[], index, trap)
    return !trap ? PLUGIN_HANDLED : PLUGIN_CONTINUE;

    
stock ChatColor(const id, const szRawMessage[], any:...)
{
    static szMsg[191];
    vformat(szMsg, charsmax(szMsg), szRawMessage, 3);
    
    if(is_user_connected(id))
    {
        message_begin(MSG_ONE_UNRELIABLE, 76, .player = id);
        write_byte(id);
        write_string(szMsg);
        message_end();
    }
}
 
Deaglusha, пробуйте. Я не проверял. Не на чем.
C++:
#include <amxmodx>
//#include <cstrike>
#include <gamecms5>
#include <bonusmenu_rbs>
#if defined AMXX_VERSION_RELEASE
    #define    client_disconnect client_disconnected
#endif
enum _:pl_state
{
    bool:give,
    thanks,
    answers
}
new cvhThanks, cvhAnswers, cvhStart, cvhMaxMoney, cvhRound;
new g_player[33][pl_state];
new giRoundCount;
public plugin_init()
{
    register_plugin("GameCMS BonusSystem", "1.1", "+- DUKKHAZ0R");
    register_logevent("LogERoundStart", 2, "1=Round_Start");
    register_event("TextMsg", "eRestart", "a", "2&#Game_C", "2&#Game_w");
    register_clcmd("say /bonus", "ShowAwardPlayers");
   
    cvhRound = register_cvar("cms_bonus_round", "3");
    cvhThanks = register_cvar("cms_bonus_thanks", "5");
    cvhAnswers = register_cvar("cms_bonus_answers", "10");
    cvhStart = register_cvar("cms_bonus_startmoney", "50");
    cvhMaxMoney = register_cvar("cms_bonus_maxmoney", "16000");
}
public plugin_cfg()
{
    if(is_plugin_loaded("GameCMS_API") == INVALID_PLUGIN_ID)
    {
        log_amx("WARNING: gamecms_api.amxx isn't loaded! Plugin Stopped.")
        pause("a");
        return;
    }
}
public client_disconnect(id)
    arrayset(g_player[id], 0, pl_state);
public client_connect(id)
    arrayset(g_player[id], 0, pl_state);
public OnAPIMemberConnected(id, memberId, memberName[])
{
    new Data[4];
    new bool:status = cmsapi_get_forum_data(id, Data) != 0 ? true : false;
   
    if(!status)
        return;
   
    g_player[id][thanks] = Data[0];
    g_player[id][answers] = Data[1];
    g_player[id][give] = true;
}
public ShowAwardPlayers(user)
{
    new plName[33], message[191];
    new id, len, bool:plFirst = true;
   
    len = format(message, charsmax(message), "^1[^4Bonus^1] Получают бонусы:");
   
    for(id = 1 ; id <= get_maxplayers() ; id++)
    {
        if(!is_user_connected(id))
            continue;
        if(!g_player[id][give])
            continue;
        if(len + sizeof(plName) > sizeof(message)/2)
        {
            ChatColor(user, message);
            len = 0, message[0] = EOS, plFirst = true;
        }
        get_user_name(id, plName, charsmax(plName));
        len += format(message[len], charsmax(message)-len, "%s %s", plFirst ? "^4 " : ",^4", plName);
        plFirst = false;
    }
   
    if(plFirst)
        ChatColor(user, "^1[^4Bonus^1] Сейчас никто не получает бонусы.");
    else
        ChatColor(user, message);
}
public eRestart()
    giRoundCount = 0;
public LogERoundStart()
{
    if(++giRoundCount < get_pcvar_num(cvhRound))
        return;
   
    new pl[32], name[32], pnum, iAddMoney, id;
    get_players(pl, pnum, "ach");
   
    for(new i; i < pnum; i++)
    {
        id = pl[i];
        if(g_player[id][give])
        {
            iAddMoney = get_pcvar_num(cvhStart) + g_player[id][answers] * get_pcvar_num(cvhAnswers) + g_player[id][thanks] * get_pcvar_num(cvhThanks);
            //cs_set_user_money(id, min(cs_get_user_money(id) + iAddMoney, get_pcvar_num(cvhMaxMoney)));
            bonusmenu_add_user_points(id, min(iAddMoney, get_pcvar_num(cvhMaxMoney)));
            ChatColor(id, "^1[^4Bonus^1] Вы получаете каждый раунд ^3%d$ ^1 за активность на форуме [^4%d ^1сообщений + ^4%d ^1благодарностей^1]", iAddMoney, g_player[id][answers], g_player[id][thanks]);
        }
        else
        {
            get_user_name(id, name, charsmax(name));
            ChatColor(id, "^1[^4Bonus^1] Привет, ^3%s^1! Чтобы получать бонусы каждый раунд, зарегистрируйтесь на форуме!", name);
        }
    }
}
public plugin_natives()
{
    set_native_filter("native_filter");
}
public native_filter(const GName[], index, trap)
    return !trap ? PLUGIN_HANDLED : PLUGIN_CONTINUE;

   
stock ChatColor(const id, const szRawMessage[], any:...)
{
    static szMsg[191];
    vformat(szMsg, charsmax(szMsg), szRawMessage, 3);
   
    if(is_user_connected(id))
    {
        message_begin(MSG_ONE_UNRELIABLE, 76, .player = id);
        write_byte(id);
        write_string(szMsg);
        message_end();
    }
}
L20200329.log
Код:
L 03/29/2020 - 23:16:11: [dp_gamecms_bonus.amxx] WARNING: gamecms_api.amxx isn't loaded! Plugin Stopped.

Код:
amxx plugins
[ 2] GameCMS         v5.3.5       Deaglusha         gamecms.amxx  running

Менять имя API на gamecms_api.amxx ?
 
Deaglusha, Не надо менять ни названия, ни тем более, авторов.
 
Deaglusha, установите официальный GameCMS API!
Ок, понял. Всё установил с сайта, протестировал. Единственное - "Вы получаете каждый раунд 126 бонусов за активность на форуме [33 сообщений + 92 спасибок]", но ограничение, которое указано в конфиге (50), срабатывает. Бонусы выдаются и всё остальное работает. Подскажите, можно-ли добавить условие: если у игрока имеется N и большое бонусов, то бонусы не будут выдаваться? Ну а в целом, как альтернатива, всё супер! Спасибо!
 
Deaglusha, Чему у Вас равер квар cms_bonus_maxmoney ?
cms_bonus_maxmoney "50". Я протестировал и он выдаёт бонусов не больше, чем указано в этом кваре каждый раунд.
Т.е. "Вы получаете каждый раунд 126 бонусов за активность на форуме [33 сообщений + 92 спасибок]" должно выдавать 126 бонусов, но выдаёт 50 из-за квара
 
Deaglusha, ну так увеличьте лимит, и будет Вам выдавать столько, сколько нужно.
 
Назад
Сверху