Hello, im using this very useful plugin on my servers, it makes every admins in my moderator team with access "H" able to spectate both teams when they are dead, instead of having to go to spectate everytime to spectate someone on the opposite team,
However, i'm experiencing some minor bugs, and i have no idea how to fix them /:
BUGS:- When you are dead, it will after some time show you in spectators and every players can see that aswell
then it will put you back to the team you were in on the next round
- When dead, and you are using normal chat it will act like if you were spectating too example:
[SPEC] Player: Dont swear please even if i was a CT player.
- Won't allow us to use amx_transfer spec, it will put us to spectator, but when round starts it will also put you back to the team you were in s: even if we use chat command /spec
Please someone if you can fix it, help me with this, it is making players very suspecious, also my mod team gets annoyed.
Heres the script code:
PHP Code:
#include <amxmodx>
#include <fakemeta>
#define PLUGIN "Admin Free Look"
#define VERSION "2.0"
#define AUTHOR "Jim"
#define ADMIN_ACCESS ADMIN_CFG //flag "h"
#define SPECT_KEYS MENU_KEY_1|MENU_KEY_2|MENU_KEY_5|MENU_KEY_6|MENU_KEY_0
#define CLASS_KEYS MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5
#define LINUXDIFF 5
#if cellbits == 32
#define OFFSET_TEAM 114
#else
#define OFFSET_TEAM 139
#endif
#define TEAM_T 1
#define TEAM_CT 2
#define TEAM_SPEC 3
new bool:g_roundend
new bool:g_corpse_made[33]
new bool:g_model_selected[33]
new g_team[33]
new g_maxplayers
stock bool:is_admin(id)
return g_team[id] && get_user_flags(id) & ADMIN_ACCESS ? true : false
stock bool:is_admin_dead(id)
return is_admin(id) && g_corpse_made[id] ? true : false
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("HLTV", "new_round", "a", "1=0", "2=0")
register_logevent("round_end", 2, "1=Round_End")
register_event("ClCorpse", "hook_corpse", "a", "12>0")
register_event("TeamInfo", "event_teaminfo", "a", "1>0")
register_event("TextMsg", "joined_a_team", "a", "1=1", "2=#Game_join_terrorist", "2=#Game_join_ct")
register_clcmd("jointeam", "join_spec_cmd")
register_clcmd("joinclass", "select_a_model")
register_menucmd(register_menuid("IG_Team_Select_Spect",1), SPECT_KEYS, "join_spec_menucmd")
register_menucmd(register_menuid("Terrorist_Select", 1), CLASS_KEYS, "select_a_model")
register_menucmd(register_menuid("CT_Select", 1), CLASS_KEYS, "select_a_model")
g_maxplayers = get_maxplayers()
}
public client_connect(id)
{
g_team[id] = 0
g_model_selected[id] = false
g_corpse_made[id] = false
}
public client_disconnect(id)
{
g_team[id] = 0
g_model_selected[id] = false
g_corpse_made[id] = false
}
public event_teaminfo()
{
new id = read_data(1)
new team[2]
read_data(2, team, 1)
switch(team[0])
{
case 'T': g_team[id] = TEAM_T
case 'C': g_team[id] = TEAM_CT
case 'S': g_team[id] = TEAM_SPEC
}
}
public stay_spec(id)
{
if(g_team[id] != TEAM_SPEC)
{
g_team[id] = TEAM_SPEC
message_begin(MSG_ALL, get_user_msgid("TeamInfo"))
write_byte(id)
write_string("SPECTATOR")
message_end()
}
}
public join_spec_cmd(id)
{
new argv[2]
read_argv(1, argv, 1)
if(argv[0] == '6')
stay_spec(id)
}
public join_spec_menucmd(id, key)
{
if(key == 5)
stay_spec(id)
}
public joined_a_team()
{
new name[32]
read_data(3, name, 31)
new id = get_user_index(name)
g_model_selected[id] = false
}
public select_a_model(id)
{
g_model_selected[id] = true
if(!g_roundend && is_admin(id))
set_task(1.0, "delay", id)
}
public delay(id)
{
if(g_team[id] && !is_user_alive(id))
{
g_corpse_made[id] = true
free_look(id)
}
}
public hook_corpse()
{
new id = read_data(12)
g_corpse_made[id] = true
if(!g_roundend && is_admin(id))
free_look(id)
}
public free_look(id)
{
if(!g_roundend && is_admin_dead(id) && g_model_selected[id])
set_pdata_int(id, OFFSET_TEAM, TEAM_SPEC, LINUXDIFF)
}
public round_end()
{
g_roundend = true
freelook_over()
}
public new_round()
{
g_roundend = false
freelook_over()
}
public freelook_over()
{
for(new id = 1; id <= g_maxplayers; id++)
{
if(is_admin_dead(id) && get_pdata_int(id, OFFSET_TEAM, LINUXDIFF) == TEAM_SPEC && g_team[id] != TEAM_SPEC)
set_pdata_int(id, OFFSET_TEAM, g_team[id], LINUXDIFF)
g_corpse_made[id] = false
}
}