Скриптер
Маппер
Участник
Пользователь
- Сообщения
- 74
- Реакции
- 35
В одном из обновлений кс го добавили фейд при смерти игрока и только при серверном значении mp_forcecamera 1, хотелось бы увидеть предложение по удалению фейда без костылей приведенных ниже
Сразу говорю фейд не стандартный его не закрыть обычным ивентом фейда и тд
Скрывать игроков с радара юзая m_bPlayerSpotted тож зашквар
C++:
#pragma semicolon 1
#pragma newdecls required
#include <sourcemod>
#include <dhooks>
#include <sdktools>
#define IsValidClient(%0) (1 <= %0 <= MaxClients && IsClientInGame(%0) && !IsFakeClient(%0))
#define HIDE_RADAR_CSGO 1<<12
Handle hIsValidTarget;
Handle mp_forcecamera;
Handle mp_teamcashawards;
Handle mp_playercashawards;
bool Warmup_time;
bool g_bCheckNullPtr = false;
ConVar g_Cvar_HideTime = null;
public Plugin myinfo = {
name = "Admin all spec",
author = "Dr!fter",
description = "Allows admin to spec all players",
version = "1.0.4",
url = "http://www.sourcemod.net"
};
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");
mp_teamcashawards = FindConVar("mp_teamcashawards");
mp_playercashawards = FindConVar("mp_playercashawards");
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);
HookEvent("player_death",Event_PlayerDeath, EventHookMode_Pre);
HookEvent("player_spawn", Event_PlayerSpawn, EventHookMode_PostNoCopy);
HookEvent("player_team", Event_PlayerTeam, EventHookMode_Pre);
g_Cvar_HideTime = CreateConVar("sm_allspec_hide_time", "4.2", "Hide time", 0, true, 0.0);
AutoExecConfig(true, "admin-allspec");
}
public void OnClientPostAdminCheck(int client) {
if(IsValidClient(client))
if(IsPlayerReservationAdmin(client))
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;
}
public void Event_PlayerDeath(Event event, const char[] name, bool dontBroadcast) {
int client = GetClientOfUserId(GetEventInt(event, "userid"));
if(IsValidClient(client)) {
SendConVarValue(client, mp_forcecamera, "0"); // Видно для всех
if (!IsPlayerReservationAdmin(client) && !Warmup_time) {
SendConVarValue(client, mp_teamcashawards, "0"); // Удаляем бабки
SendConVarValue(client, mp_playercashawards, "0"); // Удаляем бабки
SetEntProp(client, Prop_Send, "m_iHideHUD", GetEntProp(client, Prop_Send, "m_iHideHUD") | HIDE_RADAR_CSGO); // Удаляем Радар
CreateTimer(g_Cvar_HideTime.FloatValue, Timer_FadeOff, client, TIMER_FLAG_NO_MAPCHANGE);
}
}
}
public Action Timer_FadeOff(Handle timer, any client) {
if(IsValidClient(client)) {
SendConVarValue(client, mp_forcecamera, "1"); // Ставим Стандарт
SendConVarValue(client, mp_teamcashawards, "1"); // Показываем бабки
SendConVarValue(client, mp_playercashawards, "1"); // Показываем бабки
SetEntProp(client, Prop_Send, "m_iHideHUD", GetEntProp(client, Prop_Send, "m_iHideHUD") & ~HIDE_RADAR_CSGO); // Показываем Радар
}
return Plugin_Stop;
}
public void Event_PlayerSpawn(Event event, const char[] name, bool dontBroadcast) {
Warmup_time = view_as<bool>(GameRules_GetProp("m_bWarmupPeriod"));
int client = GetClientOfUserId(GetEventInt(event, "userid"));
if(IsValidClient(client) && !Warmup_time) {
SendConVarValue(client, mp_forcecamera, "0"); // Видно для всех (Фикс черного экрана)
CreateTimer(0.1, ChangeCameraTimer, client, TIMER_FLAG_NO_MAPCHANGE);
}
}
public Action ChangeCameraTimer(Handle timer, any client) {
if(IsValidClient(client)) {
SendConVarValue(client, mp_teamcashawards, "1"); // Показываем бабки
SendConVarValue(client, mp_playercashawards, "1"); // Показываем бабки
SetEntProp(client, Prop_Send, "m_iHideHUD", GetEntProp(client, Prop_Send, "m_iHideHUD") & ~HIDE_RADAR_CSGO); // Показываем Радар
}
}
public void Event_PlayerTeam(Event event, const char[] name, bool dontBroadcast) {
int client = GetClientOfUserId(GetEventInt(event, "userid"));
if (IsValidClient(client) && !Warmup_time) {
if (!IsPlayerReservationAdmin(client))
SendConVarValue(client, mp_forcecamera, "1"); // Ставим Стандарт (Если не админ)
SendConVarValue(client, mp_teamcashawards, "1"); // Показываем бабки
SendConVarValue(client, mp_playercashawards, "1"); // Показываем бабки
SetEntProp(client, Prop_Send, "m_iHideHUD", GetEntProp(client, Prop_Send, "m_iHideHUD") & ~HIDE_RADAR_CSGO); // Показываем Радар
}
}
stock bool IsPlayerReservationAdmin(int client) {
if (CheckCommandAccess(client, "admin_allspec_flag", ADMFLAG_BAN, false))
return true;
return false;
}
Сразу говорю фейд не стандартный его не закрыть обычным ивентом фейда и тд
Скрывать игроков с радара юзая m_bPlayerSpotted тож зашквар
Последнее редактирование: