Yes there is a download since you dont like to scroll down and look here you go.
p.s Next time use ur search, and scroll down. ty + all you do is take this code and compile it in the compiler,
Code:
/* AMX Mod X script
*
*PLUGIN CVARS:
*------------------
* amx.cfg> ftb_auto 1 // 0 - OFF, 1 - ON
* If ftb_auto is set to 1, this plugin automatically
* detects potential "ghosters" (by idential IP).
*
* amx.cfg> ftb_mode 2 // 0 - OFF, 1 - A & B, 2 - A only
* A. It allows to spectate upon players from group/team
* only. Also first person only (mp_forcechasecam-like)
* B. It fades the screen after death while other
* players from group are alive (mp_fadetoblack-like)
*
* amx.cfg> ftb_alpha "alpha" // 0-255
* amx.cfg> ftb_color "red green blue" // 0-255 0-255 0-255
* These cvars are for fun only. (It is color by default)
*
* client console> setinfo ftb "red green blue"
* Also players may set color of the screen.
*
* server console> ftb_debug 1 // 0 - OFF, 1 - ON
* Enable debug mode.
*
* immunity is "M" ..or custom level_A
*
* COMMANDS:
* ---------------
* amx.cfg> ftb_addip "group name" "part of IP:Port/WONID"
* This command adds IP(s)/WONID to the specified group.
*
* EXAMPLE A:
* ----------
* ftb_auto 1
* ftb_mode 2
*
* ftb_addip "LAN A" "192.168.10."
*
* ftb_addip "club A" "192.168.20.10:"
* ftb_addip "club A" "192.168.20.11:"
* ftb_addip "club A" "192.168.20.12:"
*
* EXAMPLE B:
* ----------
* ftb_auto 0
* ftb_mode 1
*
* ftb_addip "LAN A" "192.168.10."
*
* ftb_addip "club A" "192.168.20.10:"
* ftb_addip "club A" "192.168.20.11:"
* ftb_addip "club A" "192.168.20.12:"
*
* ftb_addip "club B" "192.168.30.10:"
* ftb_addip "club C" "192.168.40.10:"
* ftb_addip "club D" "192.168.50.10:"
*/
#include <amxmodx>
#include <amxmisc>
#define IMMUNITY_LEVEL ADMIN_LEVEL_A
#define ON 1
#define OFF 0
#define MAXREC 32
#define MAXLEN 24
#define DBGLEN 64
#define NAMELEN 32
#define DELTA_DELAY 0
#define DEATH_DELAY 3
new vers[] = "1.7.0"
new logfile[] = "ftb.log"
new gmsgFade
new plugin_mode = 1
new debug = 0
new ip_num = 0
new ip_table[MAXREC][MAXLEN]
new ip_alias[MAXREC][MAXLEN]
new ips[33][MAXLEN]
new state[33]
new smode[33]
new dtime[33]
new bool:joinmenu[33]
new bool:immunity[33]
new bool:forceftb[33]
new direction[33]
new color[33][3], fadealpha
new amxftb_prminfo[] = "<immunity/auto> <authid, nick or #userid>"
public debug_info(id, msg[])
{
if(debug) {
if (id) {
log_to_file(logfile, "#%02u %s", id, msg)
} else {
log_to_file(logfile, "--- %s", msg)
}
client_print(id, print_console, "[FTB] %s", msg)
}
}
public screenfade_event(id)
{
debug_info(id, "Event: ScreenFade")
if (state[id] == 3) {
new tmp[2]; tmp[0] = id
screen_fade(tmp)
}
return PLUGIN_HANDLED
}
public screen_fade(index[])
{
new id = index[0], ftime = 4096, fhold = 1024, flags = 0
switch (state[id]) {
case 1: {
state[id] = 2
set_task(1.0, "screen_fade", 0, index, 2)
flags = 1
}
case 2, 3: {
state[id] = 3
ftime = 1
fhold = 1
flags = 4
}
case 4: {
state[id] = 0
flags = 2
}
}
if (flags && !is_user_alive(id)) {
debug_info(id, "Plugin: ScreenFade")
message_begin(MSG_ONE, gmsgFade, {0,0,0}, id)
write_short(ftime)
write_short(fhold)
write_short(flags)
write_byte(color[id][0])
write_byte(color[id][1])
write_byte(color[id][2])
write_byte(fadealpha)
message_end()
}
}
public fade_to_black(id, value, delay)
{
debug_info(id, (value == ON) ? "fadetoblack on" : "fadetoblack off")
if ( ( (state[id] == 0 && value == ON) && !immunity[id]) ||
(state[id] == 3 && value == OFF) ) {
new tmp[2]; tmp[0] = id
state[id]++
set_task(delay + 0.1, "screen_fade", 0, tmp, 2)
} else if (value == OFF) {
state[id] = 0
}
return PLUGIN_CONTINUE
}
public set_specmode(index[])
{
new id = index[0]
if (!immunity[id]) {
switch (plugin_mode) {
case 1:
if (state[id] > 2) {
dtime[id] = 1
client_cmd(id, "spec_mode 4;spec_menu 1;follownext 1")
} else if (state[id] > 0) {
set_task(1.0, "set_specmode", 0, index, 2)
}
case 2:
if (smode[id]) {
dtime[id] = 1
client_cmd(id, "spec_mode 4;spec_menu 1;follownext 1")
}
}
}
}
public check(id, exec_cmd, delay)
{
if (plugin_mode == 0 || get_cvar_num("mp_fadetoblack"))
return PLUGIN_CONTINUE
new pnum, target, t = 0, ct = 0, others = 0
new players[32]
new sameip_cnt = 0
new sameip_ids[32]
new usrip[MAXLEN]
usrip = ips[id]
get_players(players, pnum);
for(new i = 0; i < pnum; i++) {
target = players[i]
if (id != target) {
if (equal(usrip, ips[target])) {
sameip_ids[sameip_cnt++] = target
if (is_user_alive(target)) {
switch (get_user_team(target)) {
case 1: t++
case 2: ct++
}
}
} else if (is_user_alive(target)) {
others++
}
}
}
if (sameip_cnt) {
new tmp[2]; tmp[0] = id
new flag
if (plugin_mode == 1) {
flag = (t == 0 && ct == 0) || others == 0
if (flag) {
for(new i = 0; i < sameip_cnt; i++)
fade_to_black(sameip_ids[i], OFF, DELTA_DELAY)
}
if (exec_cmd) {
fade_to_black(id, flag ? OFF : ON, flag ? DELTA_DELAY : delay)
}
}
if (ct == 0) {
flag = (t == 0) ? 0 : 2
} else {
flag = (t == 0) ? 3 : 1
}
smode[id] = flag = others ? flag : 0
for(new i = 0; i < sameip_cnt; i++) {
smode[sameip_ids[i]] = flag
}
if (exec_cmd && flag) {
set_task(DEATH_DELAY + 0.1, "set_specmode", 0, tmp, 2)
}
}
return PLUGIN_CONTINUE
}
public update_colors(id)
{
new setinfo[16]
get_user_info(id, "ftb", setinfo, 15)
if (!equal(setinfo, "")) {
new r[4], g[4], b[4]
parse(setinfo, r, 3, g, 3, b, 3)
color[id][0] = str_to_num(r) % 256
color[id][1] = str_to_num(g) % 256
color[id][2] = str_to_num(b) % 256
} else {
color[id][0] = color[0][0]
color[id][1] = color[0][1]
color[id][2] = color[0][2]
}
}
public client_connect(id)
{
debug_info(id, "client_connect")
return PLUGIN_CONTINUE
}
public client_putinserver(id)
{
debug_info(id, "client_putinserver")
new user_immunity = get_user_flags(id) & IMMUNITY_LEVEL
new alias[MAXLEN]
new usrip[MAXLEN]
new wonid[MAXLEN]
new a = get_cvar_num("ftb_auto")
get_user_ip(id, alias, MAXLEN-1, a)
get_user_ip(id, usrip, MAXLEN-1, 0)
get_user_authid(id, wonid, MAXLEN-1)
for(new i = 0; i < ip_num; i++) {
if (contain(usrip, ip_table[i]) != -1 || equal(wonid, ip_table[i])) {
alias = ip_alias[i]
break
}
}
ips[id] = alias
joinmenu[id] = true
immunity[id] = (user_immunity || is_user_bot(id)) ? true : false
forceftb[id] = false
direction[id] = 0
update_colors(id)
return PLUGIN_CONTINUE
}
public reset(id)
{
debug_info(id, "ResetHUD")
state[id] = 0
smode[id] = 0
dtime[id] = 0
return PLUGIN_CONTINUE
}
public death()
{
new id = read_data(2)
debug_info(id, "DeathMsg")
update_colors(id)
check(id, ON, DEATH_DELAY)
return PLUGIN_CONTINUE
}
public client_disconnect(id)
{
debug_info(id, "client_disconnect")
check(id, OFF, DELTA_DELAY)
state[id] = 0
smode[id] = 0
dtime[id] = 0
return PLUGIN_CONTINUE
}
public status(id)
{
new target = read_data(2)
if (plugin_mode && dtime[id] && target) {
new flag = 1
switch (smode[id]) {
case 0: flag = 1
case 1: flag = equal(ips[id], ips[target])
case 2: flag = get_user_team(target) == 1
case 3: flag = get_user_team(target) == 2
}
switch (plugin_mode) {
case 1, 2: if (!flag) client_cmd(id, "follownext %i", direction[id])
}
}
return PLUGIN_CONTINUE
}
public chooseteam(id)
{
debug_info(id, "ClientCmd: chooseteam")
joinmenu[id] = true
return PLUGIN_CONTINUE
}
public allow_spec(id)
{
if (joinmenu[id] && !is_user_alive(id)) {
new arg[16], value
read_argv(1, arg, 15)
value = str_to_num(arg)
debug_info(id, "ClientCmd: jointeam")
switch (value) {
case 1, 2, 5: check(id, ON, DEATH_DELAY)
case 6:
{
new pnum, count = 0
new players[32]
get_players(players, pnum);
for(new i = 0; i < pnum; i++) {
if (equal(ips[id], ips[players[i]])) {
count++
if (count > 1) break
}
}
if (count > 1 && !immunity[id]) {
client_cmd(id, "chooseteam")
client_print(id, print_chat, "[FTB] Spectator has been disabled!")
return PLUGIN_HANDLED
}
}
}
}
joinmenu[id] = false
return PLUGIN_CONTINUE
}
public spec_menu(id)
{
new arg[16]
read_argv(1, arg, 15)
if (smode[id] && dtime[id] && !equal(arg, "4"))
return PLUGIN_HANDLED
return PLUGIN_CONTINUE
}
public spec_mode(id)
{
if (smode[id] && dtime[id])
client_cmd(id, "spec_mode 4")
return PLUGIN_CONTINUE
}
public follownext(id)
{
new arg[16]
read_argv(1, arg, 15)
direction[id] = str_to_num(arg)
return PLUGIN_CONTINUE
}
public round_time(id)
{
new Float:rtime = get_cvar_float("mp_roundtime") * 60.0
debug = get_cvar_num("ftb_debug")
if (rtime == read_data(1)) {
new setinfo[16], r[4], g[4], b[4]
get_cvar_string("ftb_color", setinfo, 15)
parse(setinfo, r, 3, g, 3, b, 3)
color[0][0] = str_to_num(r) % 256
color[0][1] = str_to_num(g) % 256
color[0][2] = str_to_num(b) % 256
fadealpha = get_cvar_num("ftb_alpha") % 256
plugin_mode = get_cvar_num("ftb_mode")
if (debug) {
new pnum, players[32]
new dbg[DBGLEN], name[NAMELEN]
debug_info(0, "------------------------------------------------------------")
format(dbg, DBGLEN-1, "Round Begin (plugin version: %s, mode: %u, alpha: %u)",
vers, plugin_mode, fadealpha)
debug_info(0, dbg)
get_players(players, pnum);
for(new i = 0; i < pnum; i++) {
get_user_name(players[i], name, NAMELEN-1)
format(dbg, DBGLEN-1, "Player: %s, Alias: %s", name, ips[players[i]])
debug_info(players[i], dbg)
}
}
}
return PLUGIN_CONTINUE
}
public end_round(id)
{
new players[32], pnum
debug_info(0, "Round End")
get_players(players, pnum, "bc")
for(new i = 0; i < pnum; i++) {
dtime[id] = 0
smode[id] = 0
fade_to_black(players[i], OFF, DELTA_DELAY)
}
return PLUGIN_CONTINUE
}
public ftb_addip()
{
if (read_argc() != 3) {
server_print("Usage: ftb_addip <alias> <IP/WONID>")
return PLUGIN_HANDLED
} else if (ip_num >= MAXREC) {
server_print("[FTB] The internal data structure is full.")
return PLUGIN_HANDLED
} else {
new usrip[MAXLEN], alias[MAXLEN]
read_argv(1, alias, MAXLEN-1)
read_argv(2, usrip, MAXLEN-1)
for(new i = 0; i < ip_num; i++) {
if (equal(usrip, ip_table[i])) {
server_print("[FTB] The IP/WONID %s is already existed.", usrip)
return PLUGIN_HANDLED
}
}
ip_table[ip_num] = usrip
ip_alias[ip_num] = alias
ip_num++
server_print("[FTB] The IP/WONID %s (%s) has been added!", usrip, alias)
}
return PLUGIN_CONTINUE
}
public amx_ftb(id, level, cid)
{
if(!cmd_access(id, level, cid, 2)) return PLUGIN_HANDLED
new target
new arg1[NAMELEN], arg2[NAMELEN]
new name[NAMELEN], target_name[NAMELEN]
read_argv(1, arg1, NAMELEN-1)
read_argv(2, arg2, NAMELEN-1)
target = cmd_target(id, arg2, 5)
if(!target) return PLUGIN_HANDLED
if (equal(arg1, "immunity")) {
debug_info(target, "amx_ftb: Immunity on")
immunity[target] = true
forceftb[target] = false
if (!is_user_alive(target))
fade_to_black(target, OFF, DELTA_DELAY)
} else if (equal(arg1, "force")) {
debug_info(target, "amx_ftb: ForceFTB on")
immunity[target] = false
forceftb[target] = true
if (!is_user_alive(target))
fade_to_black(target, ON, DELTA_DELAY)
} else if (equal(arg1, "auto")) {
debug_info(target, "amx_ftb: Default mode")
immunity[target] = false
forceftb[target] = false
} else {
console_print(id, "Usage: amx_ftb %s", amxftb_prminfo)
return PLUGIN_HANDLED
}
get_user_name(id, name, NAMELEN-1)
get_user_name(target, target_name, NAMELEN-1)
switch(get_cvar_num("amx_show_activity")) {
case 1: client_print(0, 3, "ADMIN: ftb'ed %s", target_name)
case 2: client_print(0, 3, "ADMIN %s: ftb'ed %s", name, target_name)
}
console_print(id, "Client ^"%s^" ftb'ed", target_name)
return PLUGIN_HANDLED
}
public plugin_init()
{
gmsgFade = get_user_msgid("ScreenFade")
register_plugin("Auto-FTB", vers, "beast")
register_concmd("amx_ftb", "amx_ftb", ADMIN_KICK, amxftb_prminfo)
register_srvcmd("ftb_addip", "ftb_addip")
register_clcmd("chooseteam", "chooseteam")
register_clcmd("menuselect", "allow_spec")
register_clcmd("jointeam", "allow_spec")
register_clcmd("follownext", "follownext")
register_clcmd("specmode", "spec_menu")
register_event("StatusValue", "status", "bd", "1=2")
register_event("RoundTime", "round_time", "bc")
register_event("TextMsg", "spec_mode", "bd", "2&Spec_Mode")
register_event("ResetHUD", "reset", "b")
register_event("DeathMsg", "death", "a")
register_event("SendAudio", "end_round","a", "2=%!MRAD_terwin", "2=%!MRAD_ctwin")
register_event("ScreenFade", "screenfade_event", "b")
register_cvar("autoftb_version", vers, FCVAR_SERVER)
register_cvar("amx_show_activity","2")
register_cvar("ftb_auto", "1")
register_cvar("ftb_mode", "1")
register_cvar("ftb_color", "0 0 0")
register_cvar("ftb_alpha", "255")
register_cvar("ftb_debug", "0")
return PLUGIN_CONTINUE
}