Плагин для knfie серверов Knife_and_dm .
После смены карты запускается голосование с выбором режима игры
Classic или
DeathmatchПлагин писался на заказ год назад, решила поделиться с вами пользуйтесь )
Автор: Adidasman
Код:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fun>
#include <fakemeta_util>
#include <hamsandwich>
#define PLUGIN "DM Knife and Classic"
#define VERSION "1.0"
#define AUTHOR "Adidasman"
new g_VoteMenu
new g_Votes[2]
new g_Voting
new gdmserver
new g_iMsgTeamInfo, g_iMsgSayText
new g_msgScreenFade
new g_MaxPlayers
enum Color {
NORMAL = 1,
GREEN,
RED,
BLUE
};
new TeamName[][] = {
"",
"TERRORIST",
"CT",
"SPECTATOR"
};
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_cvar("server_knife_version", VERSION, FCVAR_SERVER|FCVAR_SPONLY);
g_MaxPlayers = global_get(glb_maxClients)
g_iMsgSayText = get_user_msgid( "SayText" );
g_iMsgTeamInfo = get_user_msgid( "TeamInfo" );
g_msgScreenFade = get_user_msgid("ScreenFade")
register_clcmd("say /knifevote", "open_startmenu")
set_task(55.0,"StartVote")
}
public client_putinserver(id)
{
if(gdmserver)
{
set_task(15.0,"DispInfo", id)
}
}
public open_startmenu(id)
{
if(get_user_flags(id) & ADMIN_RCON)
{
StartVote()
}
}
public DispInfo(id)
{
ColorChat(id, RED, "[AMXX]^1 На Сервере Играется Knife [^4DM^1]")
}
public StartVote()
{
for(new plr = 1; plr <= g_MaxPlayers; plr++)
{
if(is_user_alive(plr) && is_user_connected(plr))
{
set_pev(plr, pev_flags, pev(plr, pev_flags) | FL_FROZEN)
}
}
set_task(0.1, "ScreenFade", 0)
g_VoteMenu = menu_create("\oВ какой Мод Вы хотите Играть? \rClassic\o \wили \rDM Knife\o?", "menu_handler")
menu_additem(g_VoteMenu, "Я хочу \r[Классик]\w!", "0", 0)
menu_additem(g_VoteMenu, "Мне нравится \rKnife [DM]\w!", "1", 0)
new s_Players[32], i_Num, i_Player
get_players(s_Players, i_Num)
for (new i; i < i_Num; i++)
{
i_Player = s_Players[i]
menu_display(i_Player, g_VoteMenu, 0)
g_Voting++
}
set_task(15.1, "EndVote")
g_Votes[0] = g_Votes[1] = 0
return PLUGIN_HANDLED
}
public menu_handler(id, menu, item)
{
if(item == MENU_EXIT)
{
return PLUGIN_HANDLED
}
new s_Data[6], s_Name[64], i_Access, i_Callback
new name[32]
get_user_name(id, name, 31)
menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
new i_Vote = str_to_num(s_Data)
ColorChat(0, RED, "[AMXX] ^4%s ^1проголосовал за ^4%s", name, (item ? "DM Knife" : "Classic Knife"))
g_Votes[i_Vote]++
return PLUGIN_HANDLED
}
public EndVote()
{
if (g_Votes[0] > g_Votes[1])
{
gdmserver = false
ColorChat(0, RED, "[AMXX]^1 Голоса Разделились, Играем Текущий Режим [^4Классик^1]")
server_cmd("sv_restart 1")
server_exec()
}
else if (g_Votes[1] > g_Votes[0])
{
gdmserver = true
RegisterHam(Ham_Killed, "player", "Killed_respawn");
register_event("TeamInfo", "join_team", "a");
ColorChat(0, RED, "[AMXX]^1 Играем Knife [^4DM^1]")
server_cmd("sv_restart 1")
server_exec ()
}
else if (g_Votes[1] >= g_Votes[0])
{
ColorChat(0, RED, "[AMXX]^1 Играем Knife [^4Классик^1]")
}
menu_destroy(g_VoteMenu)
for( new plr = 1; plr <= g_MaxPlayers; plr++ )
{
if (is_user_alive(plr) && is_user_connected(plr))
{
set_pev(plr, pev_flags, pev(plr, pev_flags) & ~FL_FROZEN)
}
}
set_task(0.1, "DelScreenFade", 0)
g_Voting = 0
return PLUGIN_CONTINUE
}
public Killed_respawn(id)
{
if(gdmserver)
{
set_task(0.5, "respawn", id)
}
}
public respawn(id)
{
if(is_user_connected(id))
{
if(cs_get_user_team(id) == CS_TEAM_SPECTATOR || cs_get_user_team(id) == CS_TEAM_UNASSIGNED)
return
ExecuteHamB(Ham_CS_RoundRespawn, id)
}
}
public join_team()
{
if(gdmserver)
{
static Player, TeamName[32];
Player = read_data(1);
read_data(2, TeamName, sizeof TeamName - 1);
switch(TeamName[0])
{
case 'C':
{
set_task(2.0, "respawn_join", Player)
}
case 'T':
{
set_task(2.0, "respawn_join", Player)
}
}
}
return 0;
}
public respawn_join(id)
{
if(is_user_connected(id))
{
if(is_user_alive(id))
return
if(cs_get_user_team(id) == CS_TEAM_SPECTATOR || cs_get_user_team(id) == CS_TEAM_UNASSIGNED)
return
ExecuteHamB(Ham_CS_RoundRespawn, id)
}
}
public ScreenFade()
{
message_begin(MSG_ALL, g_msgScreenFade, _, 0)
write_short(1<<0)
write_short(1<<0)
write_short(1<<2)
write_byte(0)
write_byte(0)
write_byte(0)
write_byte(255)
message_end()
}
public DelScreenFade()
{
message_begin(MSG_ALL, g_msgScreenFade, _, 0)
write_short(1<<0)
write_short(1<<0)
write_short(1<<0)
write_byte(0)
write_byte(0)
write_byte(0)
write_byte(0)
message_end()
}
ColorChat( id, Color:type, const szMessage[], {Float,Sql,Result,_}:... )
{
if(!get_playersnum()) return;
new message[192];
switch( type )
{
case NORMAL: message[0] = 0x01;
case GREEN: message[0] = 0x04;
default: message[0] = 0x03;
}
vformat(message[1], 192, szMessage, 4);
message[191] = '^0';
replace_all( message, 191, "\YEL", "^1" );
replace_all( message, 191, "\GRN", "^4" );
replace_all( message, 191, "\TEM", "^3" );
new iTeam, ColorChange, index, MSG_Type;
if( id )
{
MSG_Type = MSG_ONE_UNRELIABLE;
index = id;
}else{
index = CC_FindPlayer();
MSG_Type = MSG_BROADCAST;
}
iTeam = get_user_team( index );
ColorChange = CC_ColorSelection(index, MSG_Type, type);
CC_ShowColorMessage(index, MSG_Type, message);
if( ColorChange )
CC_Team_Info(index, MSG_Type, TeamName[iTeam]);
}
CC_ShowColorMessage( id, type, message[] )
{
message_begin( type, g_iMsgSayText, _, id );
write_byte( id );
write_string( message );
message_end();
}
CC_Team_Info( id, type, team[] )
{
message_begin( type, g_iMsgTeamInfo, _, id );
write_byte( id );
write_string( team );
message_end( );
return 1;
}
CC_ColorSelection( index, type, Color:Type )
{
switch( Type )
{
case RED: return CC_Team_Info(index, type, TeamName[1]);
case BLUE: return CC_Team_Info(index, type, TeamName[2]);
}
return 0;
}
CC_FindPlayer()
{
for( new i = 1; i <= g_MaxPlayers; i++ )
if( is_user_connected(i) )
return i;
return -1;
}