#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fun>
#include <colorchat>
#define PLUGIN "Spec Switch"
#define VERSION "0.1.3"
#define AUTHOR "many"
#define DEAD_FLAG (1<<0)
#define MAX_PLAYERS 32
new CsTeams:zTeam[33];
new zDeath[33];
new bool:type_spec[33] = false;
new g_cvar;
new gmsgScoreAttrib;
new g_invisible[MAX_PLAYERS+1][2]
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
/* Cvar */
g_cvar = register_cvar("amx_specmode", "1"); // 0 - enable use to all, 1 - enable use only ADMINs
/* Client Commands */
register_clcmd("say /spec", "cmdSpec", ADMIN_KICK, "- go to spectator");
register_clcmd("say_team /spec", "cmdSpec", ADMIN_KICK, "- go to spectator");
register_clcmd("say /back", "cmdBack");
register_clcmd("say_team /back", "cmdBack", ADMIN_KICK, "- go back to your team");
gmsgScoreAttrib = get_user_msgid("ScoreAttrib")
register_message( gmsgScoreAttrib, "msg_ScoreAttrib")
}
public cmdSpec(id)
{
if(!get_user_flags(id) & ADMIN_KICK)
{
return PLUGIN_HANDLED;
}
if(!get_pcvar_num(g_cvar)) Spec(id);
else if( get_pcvar_num(g_cvar) && (get_user_flags(id) & ADMIN_KICK)) Spec(id);
else if( get_pcvar_num(g_cvar) && !(get_user_flags(id) & ADMIN_KICK)) PrintUserNotAdmin(id);
return PLUGIN_CONTINUE;
}
public cmdBack(id)
{
if (type_spec[id] && cs_get_user_team(id) == CS_TEAM_SPECTATOR && zTeam[id] != CS_TEAM_SPECTATOR ) Back(id);
//else if( get_pcvar_num(g_cvar) && !(get_user_flags(id) & ADMIN_KICK) ) PrintUserNotAdmin(id)
}
public Spec(id)
{
zDeath[id] = cs_get_user_deaths(id);
if (cs_get_user_team(id) == CS_TEAM_SPECTATOR)
return;
else{
g_invisible[id][0] = 1;
type_spec[id] = true;
zTeam[id] = cs_get_user_team(id);
cs_set_user_team(id, CS_TEAM_SPECTATOR);
user_silentkill(id);
send_ScoreAttrib(id, 0)
ColorChat(id,GREEN,"[SPEC]^x03 Wpisz^x01 /back^x03 zeby wrocic do CT!");
ColorChat(id,GREEN,"[SPEC]^x03 Obecny status Niewidzialny");
}
return
}
public Back(id)
{
cs_set_user_team(id, zTeam[id]);
cs_set_user_deaths(id, zDeath[id]);
g_invisible[id][0] = 0;
send_ScoreAttrib(id, 1)
ColorChat(id,GREEN,"[SPEC]^x03 Obecny status Widzialny");
}
PrintUserNotAdmin(id)
{
client_print(id,print_chat,"[SPEC]^x03 Komenda^x01 /spec^x03,^x01 /back^x03 tylko dla adminow!");
}
public msg_ScoreAttrib(msg_type, msg_dest, target) {
if(!g_invisible[get_msg_arg_int(1)][0])
return PLUGIN_CONTINUE
new flags = get_msg_arg_int(2)
if(flags & DEAD_FLAG)
set_msg_arg_int(2, 0, 0)
return PLUGIN_CONTINUE
}
send_ScoreAttrib(id, flags)
{
message_begin(MSG_ALL, gmsgScoreAttrib, _, 0)
write_byte(id)
write_byte(flags)
message_end()
}
public client_disconnected(id) type_spec[id] = false;
public client_connect(id) type_spec[id] = false;