Admin all spectate  [На сервере]

Плагины и дополнения / Plugins and add-ons

Модераторы: Dame-danners, Longipongeoos

Аватар пользователя
Longipongeoos
Сообщений: 199
Зарегистрирован: 12 апр 2017, 16:50

Admin all spectate  [На сервере]

Сообщение Longipongeoos » 22 май 2024, 13:18

Версия 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. Перезапустить сервер.
Вложения
Admin all spectate.zip
(272.16 KiB) Загружено 46 раз

Вернуться в «SourceMod»

Кто сейчас на форуме

Количество пользователей, которые сейчас просматривают этот форум: нет зарегистрированных пользователей и 7 гостей