Всем привет! Очень добрый человек, наш админ Ilussion, все таки помог решить задачу, за что ему огромное спасибо!
Только осталась еще одна маленькая задача. При тестах обнаружилась ошибка.
Плагин не дает задонатить больше 20 аммо, однако по 20 аммо можно перевести хоть 10 раз за 1 раунд. А нужно блокировать передачу, больше 20 аммо за раунд не давать...
Посмотрите кто нибудь и попытайтесь найти ошибку, очень нуждаюсь в этом лимите. Игроки хитреют, и моды начали уж слишком часто покупаться)
Вот сурс кода:
Код:
#include <amxmodx>
#include <cstrike>
#include <zombieplague>
#include <dhudmessage>
#define PLUGIN "ammo donate/dhud"
#define VERSION "1.5"
#define AUTHOR "user/zobie-dead bug fix/phantom fix"
new players_menu, players[32], num, i, player
new accessmenu, iName[64], callback
new g_Donate[33]
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /donate", "transfer_menu", ADMIN_ALL, "")
register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
register_clcmd("transfer", "transfer_ammo", ADMIN_ALL, "")
}
public event_round_start()
{
for (new id = 1; id <= get_maxplayers(); id++)
g_Donate[id] = 0
}
public transfer_menu(id)
{
get_players(players, num, "h")
if (num <= 1)
{
set_dhudmessage(0, 155, 0, -1.0, 0.4, 0, 0.0, 5.0, 1.0, 1.0, false)
show_dhudmessage(id,"There is nobody to transfer ammo")
return PLUGIN_HANDLED
}
new tempname[32], info[10]
players_menu = menu_create("Players", "players_menu_handler")
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)
menu_additem(players_menu, tempname, info, 0)
}
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 data[6]
menu_item_getinfo(players_menu, item, accessmenu, data, charsmax(data), iName, charsmax(iName), callback)
player = str_to_num(data)
if(id != player)
{
client_cmd(id, "messagemode ^"transfer %i^"", player)
}
return PLUGIN_CONTINUE
}
public transfer_ammo(id)
{
if(!is_user_connected(id) || !is_user_connected(player) || id == player)
return PLUGIN_HANDLED
new param[6]
read_argv(2, param, charsmax(param))
for (new x; x < strlen(param); x++)
{
if(!isdigit(param[x]))
{
set_dhudmessage(255, 0, 0, -1.0, 0.4, 0, 0.0, 5.0, 1.0, 1.0, false)
show_dhudmessage(id,"Parameter has to be number")
return 0
}
}
new limit = 20 // Устанавливем лимит для игрока
if(g_Donate[id] >= limit)
{
set_dhudmessage(255, 0, 0, -1.0, 0.4, 0, 0.0, 5.0, 1.0, 1.0, false)
show_dhudmessage(id,"LIMIT MSG") // Соообщение, когда игрок уже передал 20 аммо, и плагин блокирует дальнейщую передачу аммо
return 0
}
new amount = str_to_num(param)
if(amount > limit - g_Donate[id])
{
set_dhudmessage(255, 0, 0, -1.0, 0.4, 0, 0.0, 5.0, 1.0, 1.0, false)
show_dhudmessage(id, "%d AMMO LEFT", limit - g_Donate[id]) // Соообщение, когда игрок ввел сумму, которая больше чем он может передать
return 0
}
new ammo = zp_get_user_ammo_packs(id)
if (ammo < amount)
{
set_dhudmessage(255, 0, 0, -1.0, 0.4, 0, 0.0, 5.0, 1.0, 1.0, false)
show_dhudmessage(id,"You dont have sufficient ammo!")
return 0
}
read_argv(1, param, charsmax(param))
new player = str_to_num(param)
if(player == id)
{
set_dhudmessage(255, 0, 0, -1.0, 0.4, 0, 0.0, 5.0, 1.0, 1.0, false)
show_dhudmessage(id,"It is impossible to transfer ammo to itself")
return 0
}
g_Donate[id] += amount
new player_ammo = zp_get_user_ammo_packs(player)
zp_set_user_ammo_packs(id, ammo - amount)
zp_set_user_ammo_packs(player, player_ammo + amount)
new names[2][32]
get_user_name(id, names[0], 31)
get_user_name(player, names[1], 31)
set_dhudmessage(0, 125, 200, -1.0, 0.4, 0, 0.0, 5.0, 1.0, 1.0, false)
show_dhudmessage(0,"Player %s donate %i ammo %s", names[0], amount, names[1])
return 0
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE*{\ rtf1\ ansi\ deff0{\ fonttbl{\ f0\ fnil Tahoma;}}n\ viewkind4\ uc1\ pard\ lang1049\ f0\ fs16 n\ par }*/
Очень буду благодарен за помощь, с меня

и таранка =)
Отредактировал: sllrdp, - 13.2.2014, 15:41