#include <amxmodx>
#include <reapi>
#pragma semicolon 1
///Burayi kendinize gore ayarlayaniz
#define ACCESS_LEVEL_INVISIBLE (ADMIN_BAN) // Amx_Spectate komutunu kullanma yetkisi
/*(Kapatmak icin basina // isaretini koyup pasiflestirin | Acmak icin isaretleri kaldirin) */
#define LOCK_SAY // Spec takiminin say ve say_team kullanma yasagi
//#define AUTO_INVISIBLE_SPECTATOR // Spec takiminin otomatik gorunmez olmasi
///Burayi kendinize gore ayarlayaniz
new HookChain:g_hSV_WriteFullClientUpdate;
new bool:g_bPlayerInVisible[33];
/// === CSDURAGI.COM ===
// Bu Eklenti PurposeLess tarafindan ReHLDS Team kodlari kullanilarak yeniden, en iyi sekilde kodlanmistir ve Turkce'ye ceviri yapilmistir.
//Eklenti kodlarini editleyip veya editlemeden baska forumlarda ben yaptim diye sunan arkadaslara hakkimi helal etmiyorum. Izinsiz hicbir forumda paylasmayiniz.
/// === CSDURAGI.COM ===
public plugin_init() {
register_plugin("Invisible Spectator", "1.0", "ReHLDS Team");
#if defined LOCK_SAY
register_clcmd("say", "clcmd_say");
register_clcmd("say_team", "clcmd_say");
#endif
#if defined AUTO_INVISIBLE_SPECTATOR
register_event("TeamInfo", "Event_TeamInfo", "a", "2=TERRORIST", "2=CT", "2=SPECTATOR");
#else
register_event("TeamInfo", "Event_TeamInfo", "a", "2=TERRORIST", "2=CT");
register_clcmd("amx_spectate", "ClCmd_Spectate", ACCESS_LEVEL_INVISIBLE);
#endif
DisableHookChain((g_hSV_WriteFullClientUpdate = RegisterHookChain(RH_SV_WriteFullClientUpdate, "SV_WriteFullClientUpdate")));
}
public SV_WriteFullClientUpdate(const id, buffer, const receiver)
{
if(g_bPlayerInVisible[id])
{
set_key_value(buffer, "", "");
}
}
public client_putinserver(id)
{
g_bPlayerInVisible[id] = false;
}
#if defined LOCK_SAY
public clcmd_say(id)
{
if (g_bPlayerInVisible[id])
{
client_print_color(id, id, "^4Sen ^3gizli bir izleyicisin. ^4Konusmaman ^3gerek^1!");
return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}
#endif
#if !defined AUTO_INVISIBLE_SPECTATOR
public ClCmd_Spectate(id, level, cid)
{
if(!(get_user_flags(id) & level))
{
return PLUGIN_HANDLED;
}
if (get_member(id, m_iTeam) != TEAM_SPECTATOR)
{
client_print_color(id, id, "^4Gorunmez olabilmen icin ^3once izleyici ^4olmalisin^1.");
return PLUGIN_HANDLED;
}
g_bPlayerInVisible[id] ^= true;
client_print_color(id, id, "^3Sen ^4suan ^3%s^1.", g_bPlayerInVisible[id] ? "gorunmezsin":"gorunmez degilsin");
if (!TryDisableHookChain())
{
EnableHookChain(g_hSV_WriteFullClientUpdate);
}
rh_update_user_info(id);
return PLUGIN_HANDLED;
}
#endif
stock bool:TryDisableHookChain()
{
new nCount;
for(new id = 1; id <= MAX_CLIENTS; id++)
{
if(is_user_bot(id) || !is_user_connected(id))
{
continue;
}
if(g_bPlayerInVisible[id])
{
++nCount;
}
}
if (nCount <= 0)
{
DisableHookChain(g_hSV_WriteFullClientUpdate);
return true;
}
return false;
}
public client_disconnected(id)
{
if (g_bPlayerInVisible[id])
{
g_bPlayerInVisible[id] = false;
TryDisableHookChain();
}
}
//Endif komutu yuzunden { isareti kapanmiyor. Kapattiginiz takdirde hata veriyor
//Birakalim boyle kalsin.
public Event_TeamInfo()
{
new id = read_data(1);
#if defined AUTO_INVISIBLE_SPECTATOR
new bool:bState = g_bPlayerInVisible[id];
new szTeamName[2];
read_data(2, szTeamName, charsmax(szTeamName));
switch (szTeamName[0])
{
case 'C', 'T', 'S': {
g_bPlayerInVisible[id] = false;
}
}
if (g_bPlayerInVisible[id] != bState)
{
if (!TryDisableHookChain())
{
EnableHookChain(g_hSV_WriteFullClientUpdate);
}
#else
if (g_bPlayerInVisible[id])
{
g_bPlayerInVisible[id] = false;
#endif
rh_update_user_info(id);
}
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ ansicpg1254\\ deff0\\ deflang1055{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ f0\\ fs16 \n\\ par }
*/