Hide: just dumping my code here. currently eating waaaay too much CPU. maybe useful at some point tho.
This commit is contained in:
parent
49fd4f8d65
commit
4dd4ff521b
203
Hide/scripting/Hide.sp
Normal file
203
Hide/scripting/Hide.sp
Normal file
@ -0,0 +1,203 @@
|
||||
#include <multicolors>
|
||||
#include <sourcemod>
|
||||
#include <sdkhooks>
|
||||
#include <zombiereloaded>
|
||||
|
||||
/* BOOLS */
|
||||
bool g_bHideEnabled;
|
||||
bool g_bHidePlayers[MAXPLAYERS+1][MAXPLAYERS+1];
|
||||
|
||||
/* INTEGERS */
|
||||
int g_iHideDistance[MAXPLAYERS+1];
|
||||
|
||||
/* CONVARS */
|
||||
ConVar g_hCVar_HideEnabled;
|
||||
ConVar g_hCVar_HideMinimumDistance;
|
||||
ConVar g_hCVar_HideMaximumDistance;
|
||||
ConVar g_hCVar_HideDefaultDistance;
|
||||
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
public Plugin myinfo =
|
||||
{
|
||||
name = "Hide Teammates",
|
||||
author = "Neon",
|
||||
description = "A plugin that can !hide teammates with individual distances",
|
||||
version = "1.0.0",
|
||||
url = "https://steamcommunity.com/id/n3ontm"
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
public void OnPluginStart()
|
||||
{
|
||||
|
||||
g_hCVar_HideEnabled = CreateConVar("sm_hide_enabled", "1", "", FCVAR_NONE, true, 0.0, true, 1.0);
|
||||
g_hCVar_HideMinimumDistance = CreateConVar("sm_hide_minimum_distance", "10", "", FCVAR_NONE, true, 1.0);
|
||||
g_hCVar_HideMaximumDistance = CreateConVar("sm_hide_maximum_distance", "50000", "", FCVAR_NONE, true, 1.0);
|
||||
g_hCVar_HideDefaultDistance = CreateConVar("sm_hide_default_distance", "10000", "", FCVAR_NONE, true, 1.0);
|
||||
g_bHideEnabled = g_hCVar_HideEnabled.BoolValue;
|
||||
g_hCVar_HideEnabled.AddChangeHook(OnConVarChanged);
|
||||
|
||||
|
||||
RegAdminCmd("sm_hide", Command_Hide, ADMFLAG_RCON);
|
||||
|
||||
for(int client = 1; client <= MaxClients; client++)
|
||||
{
|
||||
if(IsClientInGame(client))
|
||||
OnClientPutInServer(client);
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
public void OnMapStart()
|
||||
{
|
||||
CreateTimer(0.3, UpdateHide, INVALID_HANDLE, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
public void OnConVarChanged(ConVar convar, const char[] oldValue, const char[] newValue)
|
||||
{
|
||||
g_bHideEnabled = convar.BoolValue;
|
||||
|
||||
for(int client = 1; client <= MaxClients; client++)
|
||||
{
|
||||
for(int target = 1; target <= MaxClients; target++)
|
||||
g_bHidePlayers[client][target] = false;
|
||||
|
||||
if(IsClientInGame(client))
|
||||
{
|
||||
if(g_bHideEnabled)
|
||||
SDKHook(client, SDKHook_SetTransmit, Hook_SetTransmit);
|
||||
else
|
||||
SDKUnhook(client, SDKHook_SetTransmit, Hook_SetTransmit);
|
||||
}
|
||||
}
|
||||
|
||||
if(g_bHideEnabled)
|
||||
CPrintToChatAll("{cyan}[Hide] {white}has been allowed.");
|
||||
else
|
||||
CPrintToChatAll("{cyan}[Hide] {white}has been disabled.");
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
public void OnClientPutInServer(int client)
|
||||
{
|
||||
if(!g_bHideEnabled)
|
||||
return;
|
||||
|
||||
SDKHook(client, SDKHook_SetTransmit, Hook_SetTransmit);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
public void OnClientDisconnect(int client)
|
||||
{
|
||||
g_iHideDistance[client] = 0;
|
||||
for(int target = 1; target <= MaxClients; target++)
|
||||
{
|
||||
g_bHidePlayers[client][target] = false;
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
public Action Command_Hide(int client, int args)
|
||||
{
|
||||
if(!g_bHideEnabled)
|
||||
{
|
||||
ReplyToCommand(client, "[Hide] is currently not allowed.");
|
||||
return Plugin_Handled;
|
||||
}
|
||||
|
||||
int iDistance;
|
||||
|
||||
if(args == 0)
|
||||
{
|
||||
if(g_iHideDistance[client])
|
||||
{
|
||||
g_iHideDistance[client] = 0;
|
||||
ReplyToCommand(client, "[Hide] is now disabled.");
|
||||
return Plugin_Handled;
|
||||
}
|
||||
else
|
||||
iDistance = g_hCVar_HideDefaultDistance.IntValue;
|
||||
}
|
||||
else
|
||||
{
|
||||
char sArgs[8];
|
||||
GetCmdArg(1, sArgs, sizeof(sArgs));
|
||||
iDistance = StringToInt(sArgs);
|
||||
}
|
||||
|
||||
if((iDistance == 0) || (iDistance < g_hCVar_HideMinimumDistance.IntValue) || (iDistance > g_hCVar_HideMaximumDistance.IntValue))
|
||||
{
|
||||
ReplyToCommand(client, "[Hide] Wrong input! Allowed range: %d-%d", g_hCVar_HideMinimumDistance.IntValue, g_hCVar_HideMaximumDistance.IntValue);
|
||||
return Plugin_Handled;
|
||||
}
|
||||
|
||||
g_iHideDistance[client] = iDistance;
|
||||
ReplyToCommand(client, "[Hide] Humans within range %d are now hidden.", g_iHideDistance[client]);
|
||||
return Plugin_Handled;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
public Action UpdateHide(Handle timer)
|
||||
{
|
||||
if(!g_bHideEnabled)
|
||||
return Plugin_Continue;
|
||||
|
||||
for(int client = 1; client <= MaxClients; client++)
|
||||
{
|
||||
if(!g_iHideDistance[client])
|
||||
continue;
|
||||
|
||||
if(!IsClientInGame(client) || !IsPlayerAlive(client) || !ZR_IsClientHuman(client))
|
||||
continue;
|
||||
|
||||
float fOriginClient[3];
|
||||
float fOriginTarget[3];
|
||||
|
||||
for(int target = 1; target <= MaxClients; target++)
|
||||
{
|
||||
if(target != client && IsClientInGame(target) && IsPlayerAlive(target) && ZR_IsClientHuman(target))
|
||||
{
|
||||
GetClientAbsOrigin(target, fOriginTarget);
|
||||
GetClientAbsOrigin(client, fOriginClient);
|
||||
if(GetVectorDistance(fOriginTarget, fOriginClient, true) < float(g_iHideDistance[client]))
|
||||
g_bHidePlayers[client][target] = true;
|
||||
else
|
||||
g_bHidePlayers[client][target] = false;
|
||||
}
|
||||
else
|
||||
g_bHidePlayers[client][target] = false;
|
||||
}
|
||||
}
|
||||
return Plugin_Continue;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
public Action Hook_SetTransmit(int target, int client)
|
||||
{
|
||||
if(!g_bHideEnabled)
|
||||
return Plugin_Continue;
|
||||
|
||||
if(g_bHidePlayers[client][target])
|
||||
return Plugin_Handled;
|
||||
|
||||
return Plugin_Continue;
|
||||
}
|
Loading…
Reference in New Issue
Block a user