Ку всем,помогите пожалуйста исправить...
Код:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>
#define PLUGIN "transfer"
#define VERSION "3.0"
#define AUTHOR "Xz"
#define PREFIX "^4[SERVER]"
#define MAX_PLAYERS 33
const OFFSET_CSMENUCODE = 205
#define MENUBUTTON1 (1<<0)
#define MENUBUTTON2 (1<<1)
#define MENUBUTTON3 (1<<2)
#define MENUBUTTON0 (1<<9)
new gidPlayer[33]
new SayText;
new g_maxclients
new MaxPlayers
new bool:g_closed[MAX_PLAYERS+1][MAX_PLAYERS+1]
enum _players
{
p_players[33],
p_name[32],
p_position,
p_playersnum
}
new player[33][_players]
public plugin_init()
{
register_dictionary("transfer.txt")
register_clcmd("say /transfer", "clcmd_mainmenu", ADMIN_ALL, "")
register_clcmd("say /donate", "clcmd_mainmenu", ADMIN_ALL, "")
register_clcmd("transfer", "transfer_money", ADMIN_ALL, "")
register_clcmd("transfer_all", "transfer_money_all", ADMIN_ALL, "")
register_menucmd(register_menuid("Transfer Menu"), 1023, "MainHandler")
register_menucmd(register_menuid("Money Give Menu"), 1023, "GiveMoneyHandler")
register_menucmd(register_menuid("Money Req Menu"), 1023, "RequestMoneyHandler")
register_menucmd(register_menuid("ConfirMation Menu"), 1023, "ConfirmationHandler")
register_menucmd(register_menuid("Request Menu Closed"), 1023, "RequestClosedHandler")
RegisterHam( Ham_Spawn, "player", "fwSpawn", 1)
SayText = get_user_msgid("SayText")
g_maxclients = global_get(glb_maxClients)
MaxPlayers = get_maxplayers()
return PLUGIN_CONTINUE
}
public clcmd_mainmenu(id)
{
MainMenu( id )
return PLUGIN_HANDLED
}
public client_putinserver(id)
{
clear_list(id)
}
public client_disconnect(id)
{
clear_list(id)
}
clear_list(id)
{
for(new i = 0; i <= g_maxclients; ++i)
g_closed[id][i] = false
}
public client_infochanged(id)
{
get_user_info(id, "name", player[id][p_name], 31)
return PLUGIN_CONTINUE
}
public MainMenu(id)
{
if (!is_user_connected(id))
return PLUGIN_HANDLED;
static MenuBody[512]
new flags
new money = cs_get_user_money(id)
new len = formatex(MenuBody, 511, "%L", id, "TRANSFER_MENUTITLE", money)
len += formatex(MenuBody[len], 511 - len, "\r1. \w%L", id, "TRANSFER_MENUITEM1")
flags |= MENUBUTTON1
len += formatex(MenuBody[len], 511 - len, "\r2. \w%L", id, "TRANSFER_MENUITEM2")
flags |= MENUBUTTON2
len += formatex(MenuBody[len], 511 - len, "\r3. \w%L", id, "TRANSFER_MENUITEM3")
flags |= MENUBUTTON3
len += formatex(MenuBody[len], 511 - len, "\r0. \w%L^n", id, "TRANSFER_MENU_EXIT")
flags |= MENUBUTTON0
set_pdata_int(id, OFFSET_CSMENUCODE, 0)
show_menu(id, flags, MenuBody, -1, "Transfer Menu")
return PLUGIN_CONTINUE
}
public MainHandler(id, key)
{
if (!is_user_connected(id))
return PLUGIN_HANDLED;
switch (key)
{
case 0:
{
GiveMoneyMenu(id, player[id][p_position] = 0)
}
case 1:
{
RequestMoneyMenu(id, player[id][p_position] = 0)
}
case 2:
{
RequestMoneyMenuClosed(id, player[id][p_position] = 0)
}
}
return PLUGIN_HANDLED
}
public GiveMoneyMenu(id, pos)
{
if(pos < 0)
return PLUGIN_HANDLED
player[id][p_playersnum] = 0
for(new i = 1; i <= MaxPlayers; i++)
{
if(is_user_connected(i) && !is_user_bot(i))
{
player[id][p_players][player[id][p_playersnum]++] = i
}
}
new start = pos * 7
new end = start + 7
new MenuBody[512], name[128], key, keys = MENU_KEY_0
new len = format(MenuBody, 511, "%L", id, "TRANSFER_GIVEMENUTITLE")
for(new i = start; i < end; i++)
{
if(i < player[id][p_playersnum])
{
new pid = player[id][p_players][i]
copy(name, 31, player[pid][p_name])
new money = cs_get_user_money(pid)
if(pid == id)
{
format(name, 127, "\r%d. \d%s %L^n", ++key, name, id, "TRANSFER_PLAYERID")
}
else
{
keys |= (1 << key)
format(name, 127, "\r%d. \w%s \r(%d)^n", ++key, name, money)
}
}
else
{
format(name, 127, "")
key++
}
len += format(MenuBody[len], 511 - len, name)
}
if(end < (player[id][p_playersnum] - 1))
{
len += format(MenuBody[len], 511 - len, "^n\r8. \w%L", id, "TRANSFER_MONEYALL")
keys |= (1 << 7)
format(MenuBody[len], 511 - len, "\r9.\w %L^n\r0.\w %L^n", id, "TRANSFER_MENU_MORE", id, pos ? "TRANSFER_MENU_BACK" : "TRANSFER_MENU_EXIT", PLUGIN, VERSION, AUTHOR)
keys |= MENU_KEY_9
}
else
{
len += format(MenuBody[len], 511 - len, "^n\r8. \w%L", id, "TRANSFER_MONEYALL")
keys |= (1 << 7)
format(MenuBody[len], 511-len, "\r0.\w %L^n", id, pos ? "TRANSFER_MENU_BACK" : "TRANSFER_MENU_EXIT", PLUGIN, VERSION, AUTHOR)
}
return show_menu(id, keys, MenuBody, -1, "Money Give Menu")
}
public GiveMoneyHandler(id, key)
{
if (!is_user_connected(id))
return PLUGIN_HANDLED;
new choosed = (player[id][p_position] * 7) + key
switch(key)
{
case 7:
{
client_cmd(id, "messagemode ^"transfer_all^"")
GiveMoneyMenu(id, player[id][p_position])
}
case 8: GiveMoneyMenu(id, ++player[id][p_position])
case 9: GiveMoneyMenu(id, --player[id][p_position])
default:
{
new players = player[id][p_players][choosed]
client_cmd(id, "messagemode ^"transfer %i^"", players)
GiveMoneyMenu(id, player[id][p_position])
}
}
return PLUGIN_CONTINUE
}
public RequestMoneyMenu(id, pos)
{
if(pos < 0)
return PLUGIN_HANDLED
player[id][p_playersnum] = 0
for(new i = 1; i <= MaxPlayers; i++)
{
if(is_user_connected(i) && !is_user_bot(i))
{
player[id][p_players][player[id][p_playersnum]++] = i
}
}
new start = pos * 8
new end = start + 8
new MenuBody[512], name[128], key, keys = MENU_KEY_0
new len = format(MenuBody, 511, "%L", id, "TRANSFER_REQMENUTITLE")
for(new i = start; i < end; i++)
{
if(i < player[id][p_playersnum])
{
new pid = player[id][p_players][i]
copy(name, 31, player[pid][p_name])
new money = cs_get_user_money(pid)
if(pid == id)
{
format(name, 127, "\r%d. \d%s %L^n", ++key, name, id, "TRANSFER_PLAYERID")
}
else if(g_closed[pid][id])
{
format(name, 127, "\r%d. \d%s %L^n", ++key, name, id, "TRANSFER_ZABLOCKID")
}
else
{
keys |= (1 << key)
format(name, 127, "\r%d. \w%s \d(\r%d\d)^n", ++key, name, money)
}
}
else
{
format(name, 127, "")
key++
}
len += format(MenuBody[len], 511 - len, name)
}
if(end < (player[id][p_playersnum] - 1))
{
format(MenuBody[len], 511 - len, "^n\r9.\w %L^n\r0.\w %L^n", id, "TRANSFER_MENU_MORE", id, pos ? "TRANSFER_MENU_BACK" : "TRANSFER_MENU_EXIT", PLUGIN, VERSION, AUTHOR)
keys |= MENU_KEY_9
}
else
{
format(MenuBody[len], 511-len, "^n\r0.\w %L^n", id, pos ? "TRANSFER_MENU_BACK" : "TRANSFER_MENU_EXIT", PLUGIN, VERSION, AUTHOR)
}
return show_menu(id, keys, MenuBody, -1, "Money Req Menu")
}
public RequestMoneyHandler(id, key)
{
if (!is_user_connected(id))
return PLUGIN_HANDLED;
new choosed = (player[id][p_position] * 8) + key
switch(key)
{
case 8: RequestMoneyMenu(id, ++player[id][p_position])
case 9: RequestMoneyMenu(id, --player[id][p_position])
default:
{
new players = player[id][p_players][choosed]
gidPlayer[players] = id
RequestMoneyMenu(id, player[id][p_position])
ChatColor(id, "%s %L", PREFIX, id, "TRANSFER_PROSITMONEY", players)
ConfirmationMenu(players)
}
}
return PLUGIN_CONTINUE
}
public RequestMoneyMenuClosed(id, pos)
{
if(pos < 0)
return PLUGIN_HANDLED
player[id][p_playersnum] = 0
for(new i = 1; i <= MaxPlayers; i++)
{
if(is_user_connected(i) && !is_user_bot(i))
{
player[id][p_players][player[id][p_playersnum]++] = i
}
}
new start = pos * 7
new end = start + 7
new MenuBody[512], name[128], key, keys = MENU_KEY_0, pid
new len = format(MenuBody, 511, "%L", id, "TRANSFER_REQCLOSEDTITLE")
for(new i = start; i < end; i++)
{
if(i < player[id][p_playersnum])
{
pid = player[id][p_players][i]
copy(name, 31, player[pid][p_name])
if(pid == id)
{
format(name, 127, "\r%d. \d%s %L^n", ++key, name, id, "TRANSFER_PLAYERID")
}
else
{
keys |= (1 << key)
format(name, 127, "\r%d. \w%s %s^n", ++key, name, g_closed[id][pid] ? "\r[Заблокирован]" : "")
}
}
else
{
format(name, 127, "")
key++
}
len += format(MenuBody[len], 511 - len, name)
}
if(end < (player[id][p_playersnum] - 1))
{
keys |= (1 << 7)
len += format(MenuBody[len], 511 - len, "^n\r8. \w%L^n", LANG_PLAYER, g_closed[id][pid] ? "TRANSFER_RAZBLOCKALL" : "TRANSFER_ZABLOCKALL")
format(MenuBody[len], 511 - len, "\r9.\w %L^n\r0.\w %L^n", id, "TRANSFER_MENU_MORE", id, pos ? "TRANSFER_MENU_BACK" : "TRANSFER_MENU_EXIT", PLUGIN, VERSION, AUTHOR)
keys |= MENU_KEY_9
}
else
{
keys |= (1 << 7)
len += format(MenuBody[len], 511 - len, "^n\r8. \w%L^n", LANG_PLAYER, g_closed[id][pid] ? "TRANSFER_RAZBLOCKALL" : "TRANSFER_ZABLOCKALL")
format(MenuBody[len], 511-len, "\r0.\w %L^n", id, pos ? "TRANSFER_MENU_BACK" : "TRANSFER_MENU_EXIT", PLUGIN, VERSION, AUTHOR)
}
return show_menu(id, keys, MenuBody, -1, "Request Menu Closed")
}
public RequestClosedHandler(id, key)
{
if (!is_user_connected(id))
return PLUGIN_HANDLED;
new choosed = (player[id][p_position] * 7) + key
switch(key)
{
case 7:
{
new players = player[id][p_players][choosed]
for(players = 1; players <= MaxPlayers; players++)
{
g_closed[id][players] = g_closed[id][players] ? false : true
}
RequestMoneyMenuClosed(id, player[id][p_position])
}
case 8: RequestMoneyMenuClosed(id, ++player[id][p_position])
case 9: RequestMoneyMenuClosed(id, --player[id][p_position])
default:
{
new players = player[id][p_players][choosed]
g_closed[id][players] = g_closed[id][players] ? false : true
RequestMoneyMenuClosed(id, player[id][p_position])
}
}
return PLUGIN_CONTINUE
}
public ConfirmationMenu(id)
{
if (!is_user_connected(id))
return PLUGIN_HANDLED;
static MenuBody[512]
new flags
new Name[32]
get_user_name(gidPlayer[id], Name, 31)
new len = formatex(MenuBody, 511, "%L", id, "TRANSFER_CONFMENUTITLE", Name)
len += formatex(MenuBody[len], 511 - len, "\r1. \w%L", id, "TRANSFER_CONFMENUITEM1")
flags |= MENUBUTTON1
len += formatex(MenuBody[len], 511 - len, "\r2. \w%L", id, "TRANSFER_CONFMENUITEM2")
flags |= MENUBUTTON2
len += formatex(MenuBody[len], 511 - len, "\r3. \w%L", id, "TRANSFER_CONFMENUITEM3", Name)
flags |= MENUBUTTON3
len += formatex(MenuBody[len], 511 - len, "\r0. \w%L^n", id, "TRANSFER_MENU_EXIT")
flags |= MENUBUTTON0
set_pdata_int(id, OFFSET_CSMENUCODE, 0)
show_menu(id, flags, MenuBody, -1, "ConfirMation Menu")
return PLUGIN_CONTINUE
}
public ConfirmationHandler(id, key)
{
if (!is_user_connected(id))
return PLUGIN_HANDLED;
new challenger[32], challenged[32]
get_user_name(id, challenger, 31)
get_user_name(gidPlayer[id], challenged, 31)
switch (key)
{
case 0:
{
ChatColor(id, "%s %L", PREFIX, LANG_PLAYER, "TRANSFER_PLAYERACCEPT", challenged)
ChatColor(gidPlayer[id], "%s %L", PREFIX, LANG_PLAYER, "TRANSFER_TARGETACCEPT", challenger)
client_cmd(id, "messagemode ^"transfer %i^"", gidPlayer[id])
}
case 1:
{
ChatColor(id, "%s %L", PREFIX, LANG_PLAYER, "TRANSFER_PLAYERREFUSE", challenged)
ChatColor(gidPlayer[id], "%s %L", PREFIX, LANG_PLAYER, "TRANSFER_TARGETREFUSE", challenger)
}
case 2:
{
g_closed[id][gidPlayer[id]] = true
ChatColor(id, "%s %L", PREFIX, LANG_PLAYER, "TRANSFER_PLAYERCLOSED", challenged)
ChatColor(gidPlayer[id], "%s %L", PREFIX, LANG_PLAYER, "TRANSFER_TARGETCLOSED", challenger)
}
}
return PLUGIN_HANDLED
}
public transfer_money(id)
{
new param[9]
read_argv(2, param, charsmax(param))
for (new x; x < strlen(param); x++)
{
if(!isdigit(param[x]))
{
ChatColor(id, "%s %L", PREFIX, LANG_PLAYER, "TRANSFER_PARMCHISLO")
return PLUGIN_HANDLED
}
}
new amount = str_to_num(param)
if (!amount )
{
ChatColor(id, "%s %L", PREFIX, LANG_PLAYER, "TRANSFER_BOLNYL")
return PLUGIN_HANDLED
}
if(!is_user_connected(id))
return PLUGIN_CONTINUE
new money = cs_get_user_money(id)
if (money < amount)
{
ChatColor(id, "%s %L", PREFIX, LANG_PLAYER, "TRANSFER_ENOUGHMONEY")
return PLUGIN_HANDLED
}
read_argv(1, param, charsmax(param))
new player = str_to_num(param)
if(!is_user_connected(player))
return PLUGIN_CONTINUE
new player_money = cs_get_user_money(player)
if(id == player)
{
ChatColor(id, "%s %L", PREFIX, LANG_PLAYER, "TRANSFER_MEMONEYGIVE")
return PLUGIN_HANDLED
}
cs_set_user_money(id, money - amount, 1)
cs_set_user_money(player, player_money + amount, 1)
new names[2][32]
get_user_name(id, names[0], 31)
get_user_name(player, names[1], 31)
ChatColor(0, "%s %L", PREFIX, LANG_PLAYER, "TRANSFER_AMOUNTGIVE", names[0], names[1], amount)
return PLUGIN_HANDLED
}
public transfer_money_all(id)
{
new param[9]
read_argv(1, param, charsmax(param))
for (new x; x < strlen(param); x++)
{
if(!isdigit(param[x]))
{
ChatColor(id, "%s %L", PREFIX, LANG_PLAYER, "TRANSFER_PARMCHISLO")
return PLUGIN_HANDLED
}
}
new amount = str_to_num(param)
if (!amount )
{
ChatColor(id, "%s %L", PREFIX, LANG_PLAYER, "TRANSFER_BOLNYL")
return PLUGIN_HANDLED
}
if(!is_user_connected(id))
return PLUGIN_CONTINUE
new money = cs_get_user_money(id)
if (money < amount)
{
ChatColor(id, "%s %L", PREFIX, LANG_PLAYER, "TRANSFER_ENOUGHMONEY")
return PLUGIN_HANDLED
}
new AllPayers
new iPlayer[ 32 ], iNum, all;
get_players( iPlayer, iNum, "c" );
for( new i; i < iNum; i++ )
{
if(!is_user_connected(iPlayer[ i ]))
{
continue
}
else if(id != iPlayer[ i ])
{
all = iPlayer[ i ];
AllPayers++
}
}
cs_set_user_money(id, money - amount)
cs_set_user_money(all, cs_get_user_money(all) + amount / AllPayers)
new names[32]
get_user_name(id, names, 31)
ChatColor(0, "%s %L", PREFIX, LANG_PLAYER, "TRANSFER_AMOUNTGIVEALL", names, amount / AllPayers)
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"); // Green Color
replace_all(msg, 190, "!y", "^1"); // Default Color (у©° ж№«ој©)
replace_all(msg, 190, "!t", "^3"); // Team Color
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, SayText, _, players[i]);
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}
}
L 02/08/2014 - 20:21:55: [HAMSANDWICH] Function fwSpawn not found.
L 02/08/2014 - 20:21:55: [AMXX] Displaying debug trace (plugin "transfer.amxx")
L 02/08/2014 - 20:21:55: [AMXX] Run time error 10: native error (native "RegisterHam")
L 02/08/2014 - 20:21:55: [AMXX] [0] transfer.sma::plugin_init (line 52)