Код:
#include <amxmodx>
#include <cstrike>
#define PREFIX "^3[^4Информация^3]^1"
#define is_valid_team(%1) ( 0 < %1 < 3 )
new players_menu, money_menu, num, i, accessmenu, money_coef, money_amount, callback, players[32], sName[64], msg[128]
public plugin_init()
{
register_plugin("Money Transferer", "1.4", "kalash1k, Edit by sOynd, Last edit miRror")
register_clcmd("say /tm", "transfer_menu")
register_clcmd("say tm", "transfer_menu")
register_clcmd("say_team /tm", "transfer_menu")
register_clcmd("say_team tm", "transfer_menu")
register_clcmd("tm", "transfer_menu")
register_clcmd("transfer", "transfer_money")
}
public transfer_menu(id)
{
new iTeam = _:cs_get_user_team ( id )
if ( !is_valid_team ( iTeam ) )
{
ChatColor(id, "%s Зайдите за одну из команд, чтобы передать деньги!", PREFIX)
return PLUGIN_HANDLED
}
if (!is_user_alive(id))
{
ChatColor(id, "%s Вы мертвы", PREFIX)
return PLUGIN_HANDLED;
}
get_players(players, num, "ch")
if (num <= 1)
{
ChatColor(id, "%s Некому передавать деньги", 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)
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)
return PLUGIN_HANDLED
}
new sData[6], menuTitle[127]
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) / 1000.0)
formatex(menuTitle, charsmax(menuTitle), "\wПередать деньги^n\dУ вас \y%d$^n", 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]
menu_item_getinfo(money_menu, item, accessmenu, sData, 5, sName, 63, callback)
sData[0] = str_to_num(sData)
switch(item)
{
case 0 .. 4:
{
new iName = str_to_num(sName)
formatex(msg, 127, "transfer %i %i", sData[0], iName)
}
default:
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_connected(player))
{
ChatColor(id, "%s Игрока ^4%s нет на сервере", PREFIX, names[1])
return PLUGIN_HANDLED
}
if(player == id)
{
ChatColor(id, "%s Нельзя передать деньги себе.", 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 Параметр должен быть числом", PREFIX)
return PLUGIN_HANDLED
}
}
new amount = str_to_num(param)
new money = cs_get_user_money(id)
if (money < amount)
{
ChatColor(id, "%s У вас не хватает денег", PREFIX)
return PLUGIN_HANDLED
}
if(amount < 100)
{
ChatColor(id, "%s Нельзя передать меньше 100 $", PREFIX)
return PLUGIN_HANDLED
}
new player_money = cs_get_user_money(player)
if(player_money == 16000)
{
ChatColor(id, "%s У игрока ^4%s ^3уже ^4$%i", PREFIX, names[1], 16000)
return PLUGIN_HANDLED
}
get_user_name(id, names[0], 31)
new maxmoney = 16000 - 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 ^1Вы ^3передали ^4$%i ^3%s", PREFIX, amount, names[1])
ChatColor(player, "%s Вам пришло^4 %d$ ^1от игрока ^3%s", PREFIX, amount, names[0])
return PLUGIN_HANDLED
}
cs_set_user_money(id, money - maxmoney, 1)
cs_set_user_money(player, 16000, 1)
ChatColor(id, "%s ^1Вы ^3передали ^4$%i ^3%s", PREFIX, maxmoney, names[1])
ChatColor(player, "%s Вам пришло^4 %d$ ^1от игрока ^3%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
}