Исходный код
Код: Выбрать все
#include <sourcemod>
#include <sendproxy>
#pragma semicolon 1
#pragma newdecls required
#define IsValidClient(%0) (1 <= %0 <= MaxClients && IsClientInGame(%0) && !IsFakeClient(%0))
#define PLUGIN_VERSION "2.9"
int iFlag;
bool bEnableWeaponGlow;
ConVar sv_competitive_official_5v5,
mp_weapons_glow_on_ground;
public Plugin myinfo = {
name = "CS:GO Esl Admin ESP (mmcs.pro)",
author = "SAZONISCHE",
description = "ESP/WH for Admins",
version = PLUGIN_VERSION,
url = "https://mmcs.pro/"
};
public void OnPluginStart() {
if(GetEngineVersion() != Engine_CSGO)
SetFailState("This plugin works only on CS:GO. Disabling plugin...");
if(GetConVarInt(FindConVar("sv_parallel_send")) == 1)
SetFailState("Please set convar sv_parallel_send to 0. Disabling plugin...");
if(GetConVarInt(FindConVar("sv_parallel_sendsnapshot")) == 1)
SetFailState("Please set convar sv_parallel_sendsnapshot to 0. Disabling plugin...");
if(GetConVarInt(FindConVar("sv_parallel_packentities")) == 1)
SetFailState("Please set convar sv_parallel_packentities to 0. Disabling plugin...");
CreateConVar("sm_esl_adminesp_version", PLUGIN_VERSION, "Version of CS:GO Esl Admin ESP", FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY);
ConVar CVAR;
(CVAR = CreateConVar("sm_esl_adminesp_flag", "d", "Admin flag, blank=any flag", FCVAR_NOTIFY)).AddChangeHook(OnCvarChanged);
OnCvarChanged(CVAR, NULL_STRING, NULL_STRING);
(CVAR = CreateConVar("sm_esl_adminesp_weapons_glow_on_ground", "1", "Enable glow weapons on ground", 0, true, 0.0, true, 1.0)).AddChangeHook(OnCvarChanged);
OnCvarChanged(CVAR, NULL_STRING, NULL_STRING);
AutoExecConfig(true, "esl_admin_esp");
sv_competitive_official_5v5 = FindConVar("sv_competitive_official_5v5");
mp_weapons_glow_on_ground = FindConVar("mp_weapons_glow_on_ground");
AutoExecConfig(true, "esl_admin_esp");
HookEvent("player_death", ReloadEvent);
HookEvent("player_team", ReloadEvent);
HookEvent("player_spawn", ReloadEvent);
HookEvent("player_spawned", ReloadEvent); // дебилизм валв происходит только после pending team или в данный момент (обязательно дублировать если используем player_spawn)
}
public void OnClientDisconnect(int client) {
if (!IsFakeClient(client))
SetEspHook(client, false);
}
public void OnCvarChanged(ConVar convar, const char[] oldValue, const char[] newValue) {
char convar_name[32];
convar.GetName(convar_name, sizeof(convar_name));
if (StrEqual(convar_name, "sm_esl_adminesp_flag")) {
char szFlag[16];
convar.GetString(szFlag, sizeof(szFlag));
iFlag = ReadFlagString(szFlag);
for (int client = 1; client <= GetMaxHumanPlayers(); client++) {
if (IsValidClient(client)) {
SetEspHook(client, false);
SetEspClient(client, false);
}
}
} else if (StrEqual(convar_name, "sm_esl_adminesp_weapons_glow_on_ground")) {
bEnableWeaponGlow = convar.BoolValue;
}
}
public Action ReloadEvent(Event event, const char[] name, bool dontBroadcast) {
int client = GetClientOfUserId(event.GetInt("userid"));
if (IsValidClient(client)) {
int bits = GetUserFlagBits(client);
switch (name[7]) {
case 'd':{
if(bits & (iFlag|ADMFLAG_ROOT)) {
SetEspHook(client, true);
SetEspClient(client, true);
}
}
case 't':{
int team = event.GetInt("team");
if (team >= 2 && IsPlayerAlive(client)) {
SetEspHook(client, false);
SetEspClient(client, false);
} else if (team <= 1 && (bits & (iFlag|ADMFLAG_ROOT))) {
SetEspHook(client, false);
SetEspClient(client, true);
} else if (bits & (iFlag|ADMFLAG_ROOT)) {
SetEspHook(client, true);
SetEspClient(client, true);
}
}
case 's':{
if (IsPlayerAlive(client)) {
SetEspHook(client, false);
if (bits & (iFlag|ADMFLAG_ROOT))
SetEspClient(client, false);
}
}
}
}
return Plugin_Continue;
}
public bool SetEspHook(int client, bool value) {
if (value) {
if (!SendProxy_IsHooked(client, "m_iTeamNum"))
SendProxy_Hook(client, "m_iTeamNum", Prop_Int, Set_Esp);
} else {
if (SendProxy_IsHooked(client, "m_iTeamNum"))
SendProxy_Unhook(client, "m_iTeamNum", Set_Esp);
}
}
public bool SetEspClient(int client, bool value) {
if(bEnableWeaponGlow)
mp_weapons_glow_on_ground.ReplicateToClient(client, value ? "1" : "0");
sv_competitive_official_5v5.ReplicateToClient(client, value ? "1" : "0");
}
public Action Set_Esp(int entity, const char[] PropName, int &iValue, int element) {
if (iValue) {
iValue = 1;
return Plugin_Changed;
}
return Plugin_Continue;
}
Установка
Скомпилируйте плагин, перетащив файл исходника (esl_admin_esp.sp) мышью на (addons/sourcemod/scripting/spcomp.exe).
Скопируйте скомпилированный файл esl_admin_esp.smx в директорию: addons/sourcemod/plugins
Скопируйте файл расширения sendproxy.ext.2.csgo.so в директорию: addons/sourcemod/extensions
Скопируйте файл геймдаты sendproxy.txt в директорию: addons/sourcemod/gamedata
Полностью отключив сервер распаковать содержимое архива в папку csgo
Настройки
sm_esl_adminesp_flag // Флаг игрока для доступа к ESP
sm_esl_adminesp_weapons_glow_on_ground // Включение подсветки дропнутого оружия на земле
Требования
SendProxy Manager (вложено в архив)
Команды
Клавиша X в наблюдении | Вкл/Выкл
либо spec_show_xray 1/0 | Вкл/Выкл