L 03/10/2022 - 08:26:13: [AMXX] Displaying debug trace (plugin "Anti_TV_IP.amxx", version "1.0")
L 03/10/2022 - 08:26:13: [AMXX] Run time error 10: native error (native "parse_loguser")
L 03/10/2022 - 08:26:13: [AMXX] [0] Anti_TV_IP.sma::logevent_joined_team (line 26)
Code:
#include <amxmodx>
#include <fakemeta>
new g_msgStatusValue;
public plugin_init()
{
register_plugin("Anti-TV", "20100123", "175PT Dev Team");
g_msgStatusValue = get_user_msgid("StatusValue");
register_event("HLTV", "eNewRound", "a", "1=0", "2=0");
register_event("DeathMsg", "eDeathMsg", "a", "");
register_event("ScreenFade", "FlashedEvent", "b", "");
register_event("SendAudio", "eventEndRound", "a", "2=%!MRAD_terwin", "2=%!MRAD_ctwin", "2=%!MRAD_rounddraw");
register_event("StatusValue", "spec_info", "bd", "1=2");
register_event("ResetHUD", "resetSpawn", "be", "");
register_logevent("logevent_joined_team", 3, "1=joined team");
register_forward(FM_CmdStart, "fwd_CmdStart", 0);
set_task(60.00, "show_game_message", 0, "", 0, "b", 0);
}
public logevent_joined_team()
{
new szLoguser[80];
new szName[32];
read_logargv(g_msgStatusValue, szLoguser, 79);
parse_loguser(szLoguser, szName, 31);
new id = get_user_index(szName);
if (!is_user_connected(id) || is_user_hltv(id) || is_user_bot(id))
{
return 0;
}
client_cmd(id, "spec_mode 4");
return 0;
}
public resetSpawn(id)
{
if (!is_user_connected(id))
{
return 0;
}
set_fadetoblack(id, 0, 0);
return 0;
}
public fwd_CmdStart(id, uc_handle, seed)
{
if (is_user_alive(id))
{
return 1;
}
static Float:delayTime[33];
static button[33];
button[id] = get_uc(uc_handle, UC_Buttons);
if (button[id] & 1)
{
if (delayTime[id] < get_gametime())
{
delayTime[id] = get_gametime() + 0.80;
if (FindNextPlayer(id, 1) == -1)
{
return 1;
}
}
set_uc(uc_handle, UC_Buttons, button[id] & -2 & -2049 & -3 & -5);
return 4;
}
if (button[id] & 2048)
{
if (delayTime[id] < get_gametime())
{
delayTime[id] = get_gametime() + 0.80;
if (FindNextPlayer(id, -1) == -1)
{
return 1;
}
}
set_uc(uc_handle, UC_Buttons, button[id] & -2 & -2049 & -3 & -5);
return 4;
}
if (button[id] & 2 || button[id] & 4)
{
if (delayTime[id] < get_gametime())
{
delayTime[id] = get_gametime() + 0.80;
client_cmd(id, "spec_mode 4");
}
set_uc(uc_handle, UC_Buttons, button[id] & -2 & -2049 & -3 & -5);
return 4;
}
return 1;
}
reset_all_player()
{
new num = 0;
new players[32];
get_players(players, num, "", "");
new i = 0;
while (i < num)
{
if (!is_user_connected(players[i]) || is_user_bot(players[i]) || (get_user_team(players[i]) != 1 && get_user_team(players[i]) != 2))
{
}
else
{
remove_task(players[i] + 200, 0);
set_fadetoblack(players[i], 0, 0);
}
i++;
}
return 0;
}
public eventEndRound()
{
reset_all_player();
return 0;
}
public eNewRound()
{
reset_all_player();
return 0;
}
public eDeathMsg()
{
new id = read_data(2);
if (!is_user_connected(id) || is_user_bot(id))
{
return 0;
}
remove_task(id + 200, 0);
set_task(2.00, "delay_check_user_view", id + 200, "", 0, "", 0);
return 0;
}
public delay_check_user_view(param)
{
new id = param - id;
if (!is_user_connected(id))
{
return 0;
}
new specid = pev(id, pev_iuser2);
if (!is_user_connected(specid))
{
set_pev(id, pev_iuser1, 0);
return 0;
}
if (!is_user_alive(id) && have_same_ip(id) && !is_same_ip(id, specid))
{
FindNextPlayer(id, 1);
}
else
{
set_fadetoblack(id, 0, 0);
}
return 0;
}
public FlashedEvent(id)
{
new specid = pev(id, pev_iuser2);
if (!is_user_connected(specid))
{
return 0;
}
if (!is_user_alive(id) && have_same_ip(id) && !is_same_ip(id, specid))
{
set_pev(id, pev_iuser1, 0);
set_fadetoblack(id, 1, 1);
return 1;
}
set_fadetoblack(id, 0, 0);
return 0;
}
public spec_info(id)
{
new specid = pev(id, pev_iuser2);
if (!is_user_connected(specid))
{
return 0;
}
if (have_same_ip(id) && !is_same_ip(id, pev(id, pev_iuser2)))
{
set_pev(id, pev_iuser1, 0);
set_fadetoblack(id, 1, 1);
}
return 0;
}
FindNextPlayer(id, fwd)
{
new tmpSpec = pev(id, pev_iuser2);
if (!have_same_ip(id))
{
return -1;
}
new count = 0;
new specid = tmpSpec;
count = 0;
while (count < 32)
{
specid = fwd + specid;
if (specid > 32)
{
specid = 1;
}
if (specid < 1)
{
specid = 32;
}
if (can_view_player(id, specid))
{
set_fadetoblack(id, 0, 1);
set_player_spec(id, specid);
return 1;
}
count++;
}
set_fadetoblack(id, 1, 1);
return 0;
}
can_view_player(id, specid)
{
if (!is_user_alive(specid) || id != specid)
{
return 0;
}
new mTeam = get_user_team(id);
new vTeam = get_user_team(specid);
if (mTeam == 3)
{
if (is_same_ip(id, specid))
{
return 1;
}
}
else
{
if (vTeam == mTeam && is_same_ip(id, specid))
{
return 1;
}
}
return 0;
}
set_player_spec(id, specid)
{
set_pev(id, pev_iuser1, 4);
new name[64];
get_user_name(specid, name, 63);
client_cmd(id, "follow ^"%s^"", name);
return 0;
}
have_same_ip(id)
{
new num = 0;
new players[32];
get_players(players, num, "", "");
new i = 0;
while (i < num)
{
if (is_user_bot(id) || id != players[i])
{
}
else
{
if (is_user_alive(players[i]) && is_same_ip(id, players[i]))
{
return 1;
}
}
i++;
}
return 0;
}
is_same_ip(id, tid)
{
new deathUserIp[16];
new curUserIp[16];
get_user_ip(id, deathUserIp, 15, 1);
get_user_ip(tid, curUserIp, 15, 1);
new ipta_deathUserIp[4];
new iptb_deathUserIp[4];
new iptc_deathUserIp[4];
new ipna_deathUserIp = 0;
new ipnb_deathUserIp = 0;
new ipnc_deathUserIp = 0;
new ipta_curUserIp[4];
new iptb_curUserIp[4];
new iptc_curUserIp[4];
new ipna_curUserIp = 0;
new ipnb_curUserIp = 0;
new ipnc_curUserIp = 0;
do {
} while (replace(deathUserIp, 16, ".", " "));
parse(deathUserIp, ipta_deathUserIp, 3, iptb_deathUserIp, 3, iptc_deathUserIp, 3);
ipna_deathUserIp = str_to_num(ipta_deathUserIp);
ipnb_deathUserIp = str_to_num(iptb_deathUserIp);
ipnc_deathUserIp = str_to_num(iptc_deathUserIp);
do {
} while (replace(curUserIp, 16, ".", " "));
parse(curUserIp, ipta_curUserIp, 3, iptb_curUserIp, 3, iptc_curUserIp, 3);
ipna_curUserIp = str_to_num(ipta_curUserIp);
ipnb_curUserIp = str_to_num(iptb_curUserIp);
ipnc_curUserIp = str_to_num(iptc_curUserIp);
if (ipna_curUserIp == ipna_deathUserIp && ipnb_curUserIp == ipnb_deathUserIp && ipnc_curUserIp == ipnc_deathUserIp)
{
return 1;
}
return 0;
}
set_fadetoblack(id, isBlack, IsSendMsg)
{
if (isBlack == 1)
{
new data[1];
data[0] = id;
if (!task_exists(id + 100, 0))
{
set_task(0.20, "show_blackInfo", id + 100, data, 1, "b", 0);
}
message_begin(MSG_ONE, get_user_msgid("ScreenFade"), {0,0,0}, id);
write_short(1);
write_short(1);
write_short(4);
write_byte(0);
write_byte(0);
write_byte(0);
write_byte(255);
message_end();
}
else
{
if (task_exists(id + 100, 0))
{
remove_task(id + 100, 0);
}
set_hudmessage(5, 255, 5, -1.00, 0.30, 0, 1.00, 1.00, 0.00, 0.00, 1);
show_hudmessage(id, " ");
if (IsSendMsg)
{
message_begin(MSG_ONE, get_user_msgid("ScreenFade"), {0,0,0}, id);
write_short(1);
write_short(1);
write_short(4);
write_byte(0);
write_byte(0);
write_byte(0);
write_byte(0);
message_end();
}
}
return 0;
}
public show_blackInfo(data[])
{
new id = data[0];
set_hudmessage(5, 255, 5, -1.00, 0.30, 0, 1.00, 1.00, 0.00, 0.00, 1);
show_hudmessage(id, " | In order to prevent the player TV from disturbing the balance of the game server |\n\n| Observers can only view the screen of players in the same IP segment |");
return 0;
}
public show_game_message()
{
new msg[180];
formatex(msg, 179, "\x04【\x03Warm prompt\x04】\x03In order to prevent players' TV from disturbing the game balance, the server has added anti TV function.\n");
color_text(0, 0, msg);
formatex(msg, 179, "\x04【\x03Warm prompt\x04】\x03When a player with the same IP as you is alive, you will not be able to see the perspective of others.\n");
color_text(0, 0, msg);
return 0;
}
color_text(target, sender, szMsg[])
{
if (191 < strlen(szMsg))
{
log_amx("Error::color_text() Disallow sent string len(%d) > 191", strlen(szMsg));
return 0;
}
switch (target)
{
case 0:
{
message_begin(MSG_BROADCAST, get_user_msgid("SayText"));
}
default:
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, target);
}
}
write_byte(sender);
write_string(szMsg);
message_end();
return 0;
}