mp_forcecamera для админов

Phrog

Участник
Сообщения
261
Реакции
100
Здравствуйте. На сервере стоит переменная mp_forcecamera 1, т.е. игроки могут после смерти смотреть только за своими игроками. Интересует вопрос, можно ли стандартными способами разрешить админам смотреть за всеми игроками после смерти, или же нужно с помощью стороннего плагина такую возможность добавлять?
 

R1KO

fuck society
Сообщения
9,460
Реакции
7,799
  • Команда форума
  • #2
egorka2, нет. Только плагином
 

Sam_Fisher

Участник
Сообщения
703
Реакции
204
Konstantin, либо я плохо искал, либо тут его нет :)
 

Sam_Fisher

Участник
Сообщения
703
Реакции
204

пытался скомпилировать под флаг ADMINFLAG_BAN и чет не вышло... Может кто сделать или подсказать, в чем моя ошибка.
А ошибка при компилировании следующая:
C-подобный:
//SourceMod Batch Compiler
// by the SourceMod Dev Team


//// admin-allspec.sp
// C:\servers\css\27015\cstrike\addons\sourcemod\scripting\admin-allspec.sp(2) :
 fatal error 120: cannot read from file: "dhooks"
//
// Compilation aborted.
// 1 Error.
//
// Compilation Time: 0,69 sec
// ----------------------------------------

Press enter to exit ...
Я, конечно, не сильно разбираюсь в коде, но вот это, походу и дает ошибку:
C-подобный:
#include <dhooks>
Я про dhooks впервые слышу...

Вот сам исходник:
C-подобный:
#include <sourcemod>
#include <dhooks>

#define PLUGIN_VERSION "1.0.2"

new Handle:hIsValidTarget;
new Handle:mp_forcecamera;
new bool:g_bCheckNullPtr = false;

public Plugin:myinfo = 
{
	name = "Admin all spec",
	author = "Dr!fter",
	description = "Allows admin to spec all players",
	version = PLUGIN_VERSION,
	url = "http://www.sourcemod.net"
}

public APLRes:AskPluginLoad2(Handle:myself, bool:late, String:error[], err_max)
{
	MarkNativeAsOptional("DHookIsNullParam");
	
	return APLRes_Success;
}

public OnPluginStart()
{
	mp_forcecamera = FindConVar("mp_forcecamera");
	
	if(!mp_forcecamera)
	{
		SetFailState("Failed to locate mp_forcecamera");
	}
	
	new Handle:temp = LoadGameConfigFile("allow-spec.games");
	
	if(!temp)
	{
		SetFailState("Failed to load allow-spec.games.txt");
	}
	
	new 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);
	
	CreateConVar("admin_allspec_version", PLUGIN_VERSION, "Plugin version", FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY|FCVAR_DONTRECORD);
}
public OnClientPostAdminCheck(client)
{
	if(IsFakeClient(client))
		return;
	
	if(CheckCommandAccess(client, "admin_allspec_flag", ADMFLAG_BAN))
	{
		SendConVarValue(client, mp_forcecamera, "0");
		DHookEntity(hIsValidTarget, true, client);
	}
}
public MRESReturn:IsValidTarget(this, Handle:hReturn, Handle:hParams)
{
	// As of DHooks 1.0.12 we must check for a null param.
	if (g_bCheckNullPtr && DHookIsNullParam(hParams, 1))
		return MRES_Ignored;
	
	new target = DHookGetParam(hParams, 1);
	if(target <= 0 || target > MaxClients || !IsClientInGame(this) || !IsClientInGame(target) || !IsPlayerAlive(target) || IsPlayerAlive(this) || GetClientTeam(this) <= 1 || GetClientTeam(target) <= 1)
	{
		return MRES_Ignored;
	}
	else
	{
		DHookSetReturn(hReturn, true);
		return MRES_Override;
	}
}
 
Сверху Снизу