Отловить команду buy для Плагина.
Как мы все знаем, обычной регистрацией функции на команду buy сделать нельзя. Есть статьи в интернете ( к примеру — http://amxxmodx.ru/other/576-lovim-komandu-buy.html ). Она работать не будет. Но есть другой способ, 100% рабочий. И сейчас я вам с радостью им поделюсь.
Для начала, добавляем в плагин код, который будет ниже ( вставлять, желательно, перед первым public в плагине ):
new g_szBuyCommands[ ][ ] = {
"usp", "glock", "deagle", "p228", "elites",
"fn57", "m3", "xm1014", "mp5", "tmp", "p90",
"mac10", "ump45", "ak47", "galil", "famas",
"sg552", "m4a1", "aug", "scout", "awp", "g3sg1",
"sg550", "m249", "vest", "vesthelm", "flash",
"hegren", "sgren", "defuser", "nvgs", "shield",
"primammo", "secammo", "km45", "9x19mm", "nighthawk",
"228compact", "fiveseven", "12gauge", "autoshotgun",
"mp", "c90", "cv47", "defender", "clarion", "krieg552",
"bullpup", "magnum", "d3au1", "krieg550",
"buy", "buyequip", "cl_autobuy",
"cl_rebuy", "cl_setautobuy", "cl_setrebuy", "client_buy_open"
}
new g_iMsgID_BuyClose, g_iMsgID_StatusIcon
Далее добавляем код, который ниже в public plugin_init():
g_iMsgID_BuyClose = get_user_msgid( "BuyClose" )
g_iMsgID_StatusIcon = get_user_msgid( "StatusIcon" )
new iBuyCommands
for( iBuyCommands = 0; iBuyCommands < sizeof g_szBuyCommands; iBuyCommands++ )
register_clcmd( g_szBuyCommands[ iBuyCommands ], "Command_BuyMenu" )
Далее добавляем код под public plugin_init() код, который будет ниже:
public Command_BuyMenu( id )
{
Buy_Menu( id )
}
Вместо Buy_Menu( id ) вставляем свое название public'а, которой делает нужную вам функцию ( в моём случае — открытие меню )
Далее, в public, который мы указали в public Command_BuyMenu( id ) вставляем код, который ниже:
message_begin( MSG_ONE, g_iMsgID_BuyClose, _, id )
message_end( )
Желательно его вставить после открытия кода, то есть:
public Buy_Menu( id )
{
message_begin( MSG_ONE, g_iMsgID_BuyClose, _, id )
message_end( )
// дальше ваш код
}
И в конец плагина добавляем следующий код:
public CPlayer__PreThink_Post( iPlayer )
{
if( !is_user_alive( iPlayer ) ) return HAM_IGNORED
UTIL_StatusIcon( iPlayer, 1, "buyzone", 0, 0, 0 )
return HAM_IGNORED
}
stock UTIL_StatusIcon( iPlayer, iStatus, szIcon[ ], iRed, iGreen, iBlue )
{
message_begin( MSG_ONE, g_iMsgID_StatusIcon, _, iPlayer )
write_byte( iStatus )
write_string( szIcon )
write_byte( iRed )
write_byte( iGreen )
write_byte( iBlue )
message_end( )
}
