с плагином JailBreak Block Team админ может запретить игроку заход за ct. say /block . то есть игрок не сможет зайти в этом в мапе в ст, даже если он сделает reconnect. только админ может его разблокировать say /unblock.
в паблике есть рабочий плагин но он без исходника, силка :
я нашел этот плагин :
Код:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#define PLUGIN "BlockCT"
#define VERSION "1.0"
#define AUTHOR "xxxx"
new g_LoadName[81], g_Name[64]
new szLine, szNum
new Block[33]
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /block", "BlockMenu")
register_clcmd("jointeam 2", "BlockJoin")
register_dictionary( "jb_blockct.txt" );
}
public client_connect(id)
{
set_task(1.0, "CheckName", id)
}
public plugin_cfg()
{
get_configsdir(g_LoadName, 81)
format(g_LoadName, 80, "%s/jb_block.ini", g_LoadName)
}
public CheckName(id)
{
new szName[32]
for(szLine=0;read_file(g_LoadName, szLine, g_Name, 41, szNum);szLine++)
{
if(szNum>0 && g_Name[0]!=';')
{
get_user_name(id, szName, 31)
new szPos = contain(szName, g_Name)
if(szPos != -1)
{
Block[id] = true
}
}
}
}
public BlockMenu(id)
{
new szText[ 555 char ]
formatex( szText, charsmax( szText ), "%L", id, "JB_BLOCKMENU_TITLE")
new menu = menu_create( szText, "BlockMenu_handler" )
new s_Players[32], i_Num, i_Player
new s_Name[32], s_Player[10]
get_players(s_Players, i_Num)
for (new i; i < i_Num; i++)
{
i_Player = s_Players[i]
if(get_user_team(i_Player)!=2 && !Block[i_Player])
continue
get_user_name(i_Player, s_Name, charsmax(s_Name))
num_to_str(i_Player, s_Player, charsmax(s_Player))
if(!Block[i_Player])
{
menu_additem(menu, s_Name, s_Player, 0)
}else{
formatex( szText, charsmax( szText ), "%s - %L", s_Name, id, "JB_BLOCK_PLAYER")
menu_additem(menu, szText, s_Player, 0)
}
}
menu_setprop( menu, MPROP_EXIT, MEXIT_ALL );
menu_setprop( menu, MPROP_NEXTNAME, "Далее")
menu_setprop( menu, MPROP_BACKNAME, "Назад")
menu_setprop( menu, MPROP_EXITNAME, "Выход")
if(get_user_flags(id) & ADMIN_BAN)
{
menu_display(id, menu, 0)
}else{
ChatColor(id, "%L",0,"JB_BLOCK_NOACCESS")
}
}
public BlockMenu_handler(id, menu, item)
{
if (item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED
}
new s_Data[6], s_Name[64], i_Access, i_Callback, i_Name[32], i_Text[555 char]
menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
new i_Player = str_to_num(s_Data)
get_user_name(i_Player, i_Name, 31)
if(Block[i_Player])
{
for(szLine=0;read_file(g_LoadName, szLine, g_Name, 41, szNum);szLine++)
{
if(szNum>0 && g_Name[0]!=';')
{
new szPos = contain(i_Name, g_Name)
if(szPos != -1)
{
Block[i_Player] = false
formatex( i_Text, charsmax( i_Text ), ";%s", i_Name)
write_file(g_LoadName, i_Text, szLine)
ChatColor(0, "%L",0,"JB_BLOCK_DEL", i_Name)
}
}
}
}else{
Block[i_Player] = true
write_file(g_LoadName, i_Name, -1)
ChatColor(0, "%L",0,"JB_BLOCK_ADD", i_Name)
user_kill(i_Player)
cs_set_user_team(i_Player, CS_TEAM_T)
engclient_cmd(i_Player, "jointeam", "1")
engclient_cmd(i_Player, "joinclass", "1")
}
menu_destroy(menu)
return PLUGIN_HANDLED
}
public BlockJoin(id)
{
if(Block[id])
{
user_kill(id)
cs_set_user_team(id, CS_TEAM_T)
engclient_cmd(id, "jointeam", "1")
engclient_cmd(id, "joinclass", "1")
ChatColor(id, "%L",0,"JB_YOU_BLOCKCT")
}
}
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();
}
}
}
}
но он чуть чуть другой, он проста перебрасывает игрока в tt. ну если кто то его переделает и добавить save block & /unblock будет просто класс.