- 1. Исправить проблему с передачей денег. Бывает, что пишет "Некому передавать деньги" хотя на сервере игроки есть
2. Сделать чтобы передавать можно было всем игрокам, а не только своей команде (настраивается кваром)
3. Выбор суммы денег для перевода сделать не на отдельно странице, а как помните в AMXBans 5.0 выбиралось время бана? На 8 по-моему нажимаешь и время менялось, так же и тут, но с суммой (показ баланса перенести на первую страницу, где выбираем игроков)
4. В спектрах чтобы меню недоступно было, в чат писалось некое уведомление
- Код: Выделить всё
#include <amxmodx>
#include <cstrike>
#define PLUGIN "Money Transferer"
#define VERSION "1.3"
#define AUTHOR "sOynd"
#define PREFIX "^4[Money Transferer]"
#define MAX_MONEY 99999
#define BASE_MONEY_AMOUNT 1000.0 // Need to be a float for calculations
/*
If you have $800 menus will be:
1) $100 * floatround(your_current_money_amount / BASE_MONEY_AMOUNT)
2) $200 * floatround(your_current_money_amount / BASE_MONEY_AMOUNT)
3) $300 * floatround(your_current_money_amount / BASE_MONEY_AMOUNT)
4) $500 * floatround(your_current_money_amount / BASE_MONEY_AMOUNT)
5) your_current_money_amount ($800 in our case)
6) "Type your own number"
*/
new players_menu, money_menu, players[32], num, i
new accessmenu, sName[64], callback
new msg[128]
new money_coef, money_amount
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /tm", "transfer_menu", ADMIN_ALL, "") // TM - Transfer Money
register_clcmd("say tm", "transfer_menu", ADMIN_ALL, "")
register_clcmd("say_team /tm", "transfer_menu", ADMIN_ALL, "")
register_clcmd("say_team tm", "transfer_menu", ADMIN_ALL, "")
register_clcmd("tm", "transfer_menu", ADMIN_ALL, "")
register_clcmd("transfer", "transfer_money", ADMIN_ALL, "") // Just for using messagemode
}
public transfer_menu(id)
{
get_players(players, num, "che", cs_get_user_team(id)==CS_TEAM_CT ? "CT" : "TERRORIST")
if (num <= 1)
{
ChatColor(id, "%s ^3К сожалению, некому передавать деньги", PREFIX)
return PLUGIN_HANDLED
}
/*
if (!is_user_alive(id))
{
ChatColor(id, "%s ^3Вы мертвы, передача денег невозможна", PREFIX)
return PLUGIN_HANDLED;
}
*/
players_menu = menu_create("Выберите игрока", "players_menu_handler")
new tempname[32], info[10], main[172]
for(i = 0; i < num; i++)
{
if(players[i] == id || is_user_bot(players[i]))
continue
get_user_name(players[i], tempname, 31)
num_to_str(players[i], info, 9)
formatex(main, charsmax(main), "\w%s \r[\y%i\r]", tempname, cs_get_user_money(players[i]) );
menu_additem(players_menu, main, info, 0)
}
menu_setprop(players_menu, MPROP_NEXTNAME, "Далее")
menu_setprop(players_menu, MPROP_BACKNAME, "Назад")
menu_setprop(players_menu, MPROP_EXITNAME, "Выход")
menu_setprop(players_menu, MPROP_EXIT, MEXIT_ALL)
menu_display(id, players_menu, 0)
return PLUGIN_CONTINUE
}
public players_menu_handler(id, players_menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(players_menu)
client_cmd(id, "optionsmenu")
return PLUGIN_HANDLED
}
new sData[6], menuTitle[127] // target id
menu_item_getinfo(players_menu, item, accessmenu, sData, 5, sName, 63, callback)
new user_money = cs_get_user_money(id)
money_coef = floatround(float(user_money) / BASE_MONEY_AMOUNT)
formatex(menuTitle, charsmax(menuTitle), "\yУкажите сумму перевода^n\dВаш баланс: \r%d $", user_money );
money_menu = menu_create(menuTitle, "money_menu_handler")
new str[6]
for (new i = 1; i < 5; i++)
{
if(i == 4)
money_amount = 500 * money_coef
else
money_amount = 100 * i * money_coef
num_to_str(money_amount, str, 5)
menu_additem(money_menu, str, sData, 0)
}
num_to_str(user_money, str, 5)
menu_additem(money_menu, str, sData, 0)
// menu_additem(money_menu, "Другое кол-во", sData, 0)
menu_setprop(money_menu, MPROP_EXIT, MEXIT_ALL)
menu_setprop(money_menu, MPROP_EXITNAME, "Назад")
menu_display(id, money_menu, 0)
return PLUGIN_CONTINUE
}
public money_menu_handler(id, money_menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(money_menu)
menu_display(id, players_menu, 0)
return PLUGIN_CONTINUE
}
new sData[6] //target id
menu_item_getinfo(money_menu, item, accessmenu, sData, 5, sName, 63, callback)
sData[0] = str_to_num(sData)
switch(item)
{
case 0:
{
new iName = str_to_num(sName) // money amount
formatex(msg, 127, "transfer %i %i", sData[0], iName)
}
case 1:
{
new iName = str_to_num(sName)
formatex(msg, 127, "transfer %i %i", sData[0], iName)
}
case 2:
{
new iName = str_to_num(sName)
formatex(msg, 127, "transfer %i %i", sData[0], iName)
}
case 3:
{
new iName = str_to_num(sName)
formatex(msg, 127, "transfer %i %i", sData[0], iName)
}
case 4:
{
new iName = str_to_num(sName)
formatex(msg, 127, "transfer %i %i", sData[0], iName)
}
case 5:
formatex(msg, 127, "messagemode ^"transfer %i^"", sData[0])
}
client_cmd(id, msg)
return PLUGIN_CONTINUE
}
public transfer_money(id)
{
new param[9]
read_argv(1, param, 5)
new player = str_to_num(param)
new names[2][32]
get_user_name(player, names[1], 31)
if(is_user_bot(player) || !is_user_connected(player))
{
ChatColor(id, "%s ^3Игрок ^4%s вышел с сервера", PREFIX, names[1])
return PLUGIN_HANDLED
}
if(player == id)
{
ChatColor(id, "%s ^3Нельзя передать деньги себе", PREFIX)
return PLUGIN_HANDLED
}
read_argv(2, param, 5)
new p_len = strlen(param)
for (new x; x < p_len; x++)
{
if(!isdigit(param[x]))
{
ChatColor(id, "%s ^3Параметр должен быть корректным числом", PREFIX)
return PLUGIN_HANDLED
}
}
new amount = str_to_num(param)
new money = cs_get_user_money(id)
if (money < amount)
{
ChatColor(id, "%s ^3К сожалению, у Вас не хватает денег", PREFIX)
return PLUGIN_HANDLED
}
if(amount < 100)
{
ChatColor(id, "%s ^3Нельзя передать меньше^4 100$", PREFIX)
return PLUGIN_HANDLED
}
new player_money = cs_get_user_money(player)
if(player_money == MAX_MONEY)
{
ChatColor(id, "%s ^3У игрока ^4%s ^3уже ^4%i$", PREFIX, names[1], MAX_MONEY)
return PLUGIN_HANDLED
}
get_user_name(id, names[0], 31)
new maxmoney = MAX_MONEY - player_money
if(maxmoney >= amount)
{
cs_set_user_money(id, money - amount, 1)
cs_set_user_money(player, player_money + amount, 1)
ChatColor(id, "%s ^3Выполнено, Вы передали ^4%i$ ^3игроку ^4%s", PREFIX, amount, names[1])
ChatColor(player, "%s ^3Вам пришло ^4%d$ ^3от игрока ^4%s", PREFIX, amount, names[0])
return PLUGIN_HANDLED
}
cs_set_user_money(id, maxmoney, 1)
cs_set_user_money(player, MAX_MONEY, 1)
ChatColor(id, "%s ^3Выполнено, Вы передали ^4%i$ ^3игроку ^4%s", PREFIX, maxmoney, names[1])
ChatColor(player, "%s ^3Вам пришло ^4%d$ ^3от игрока ^4%s", PREFIX, maxmoney, names[0])
return PLUGIN_HANDLED
}
stock ChatColor(const id, const input[], any:...)
{
new count = 1, players[32]
static msg[191]
vformat(msg, 190, input, 3)
replace_all(msg, 190, "!g", "^4")
replace_all(msg, 190, "!y", "^1")
replace_all(msg, 190, "!team", "^3")
if (id) players[0] = id
else get_players(players, count, "ch")
for (new i = 0; i < count; i++)
{
if (is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
write_byte(players[i])
write_string(msg)
message_end()
}
}
return PLUGIN_CONTINUE
}