Всем привет. Хотел привлечь игроков регистрироваться на сайте и за это им бы выдавались бонусы. Нашёл плагин 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);