Версия 1.1
Описание
Плагин позволяет мертвым администраторам наблюдать за всеми игроками при mp_forcecamera 1
Требования
SourceMod
DHooks
Переменные
По умолчанию только администраторы с флагом j могут просматривать за всеми игроками при mp_forcecamera 1.
Это может быть изменено путем переопределения через admin_overrides.cfg
Код: Выбрать все
// Администраторы могут наблюдать за противоположной командой,когда мертвы при mp_forcecamera 1.
"admin_allspec_flag" "j"
Исходный код
Код: Выбрать все
#pragma semicolon 1
#include <dhooks>
#pragma newdecls required
Handle
hIsValidTarget,
mp_forcecamera;
bool
g_bCheckNullPtr = false;
public Plugin myinfo =
{
name = "Admin all spec",
author = "Dr!fter, babka68",
description = "Allows admin to spec all players",
version = "1.1",
url = "sourcemod.net, tmb-css.ru",
};
public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max)
{
MarkNativeAsOptional("DHookIsNullParam");
return APLRes_Success;
}
public void OnPluginStart()
{
mp_forcecamera = FindConVar("mp_forcecamera");
if(!mp_forcecamera)
{
SetFailState("Failed to locate mp_forcecamera");
}
Handle temp = LoadGameConfigFile("allow-spec.games");
if(!temp)
{
SetFailState("Failed to load allow-spec.games.txt");
}
int offset = GameConfGetOffset(temp, "IsValidObserverTarget");
hIsValidTarget = DHookCreate(offset, HookType_Entity, ReturnType_Bool, ThisPointer_CBaseEntity, IsValidTarget);
DHookAddParam(hIsValidTarget, HookParamType_CBaseEntity);
CloseHandle(temp);
g_bCheckNullPtr = (GetFeatureStatus(FeatureType_Native, "DHookIsNullParam") == FeatureStatus_Available);
}
public void OnClientPostAdminCheck(int client)
{
if(IsFakeClient(client))
return;
if(CheckCommandAccess(client, "admin_allspec_flag", ADMFLAG_CHAT))
{
SendConVarValue(client, mp_forcecamera, "0");
DHookEntity(hIsValidTarget, true, client);
}
}
public MRESReturn IsValidTarget(int thisPointer, Handle hReturn, Handle hParams)
{
if (g_bCheckNullPtr && DHookIsNullParam(hParams, 1))
{
return MRES_Ignored;
}
int target = DHookGetParam(hParams, 1);
if(target <= 0 || target > MaxClients || !IsClientInGame(thisPointer) || !IsClientInGame(target) || !IsPlayerAlive(target) || IsPlayerAlive(thisPointer) || GetClientTeam(thisPointer) <= 1 || GetClientTeam(target) <= 1)
{
return MRES_Ignored;
}
DHookSetReturn(hReturn, true);
return MRES_Override;
}
Установка
1. dhooks.ext.so - установить в addons/sourcemod/extensions
2. allow-spec.games.txt - установить в addons/sourcemod/gamedata
3. admin_all_spec.smx - установить в addons/sourcemod/plugins
4. admin_all_spec.sp - addons/sourcemod/scripting(не обязательно)
5. Перезапустить сервер.