ну так придумай что нибудь , нельзя просто взять рабочий noscope.smx убрать вывод в чат добавить csay и растояние@Mizuri, значит нужно тестить (точнее сделать тестовую версию с выводом информации в консоль и смотреть что там показывает)
Как же я не люблю этот долбаный КСГО с его обновлениями.
Ну или попробовать сделать через SDKHooks_TakeDamage
У всех террористов в начале раунда?Есть ли плагин , который изменяет FOV у террористов ?
Чет все обыскал , не найду никак (
Игра CS GO
Попробуй@ololoex, У всех , вот только с начала раунда не выйдет , так как при round_start все находятся за кт
Нужно для ZR , так как встроенный там не работает (ну по крайней мере у меня)
#include <sourcemod>
#include <sdktools>
#include <sdkhooks>
#include <zombiereloaded>
public Plugin myinfo =
{
name = "[ZR] Change FOV",
author = "Extr1m (Michail)",
description = "Adds a unique class of zombies",
version = "1.0",
url = "https://sourcemod.net/"
};
#define DEFAULT_FOV 90
ConVar gCV_PEnabled = null;
ConVar gCV_PFovZombie = null;
bool gB_PEnabled = true;
int gI_PFovZombie;
bool g_Fov[MAXPLAYERS+1];
public void OnPluginStart()
{
HookEvent("player_spawn", Event_PlayerSpawn);
gCV_PEnabled = CreateConVar("sm_fov_enabled", "1", "Включить/Выключить плагин", 0, true, 0.0, true, 1.0);
gCV_PFovZombie = CreateConVar("sm_fov_number", "110.0", "Значение FOV", 0, true, 0.0, true, 200.0);
gCV_PEnabled.AddChangeHook(ConVarChange);
gCV_PFovZombie.AddChangeHook(ConVarChange);
gB_PEnabled = gCV_PEnabled.BoolValue;
gI_PFovZombie = gCV_PFovZombie.IntValue;
}
public void ConVarChange(ConVar CVar, const char[] oldVal, const char[] newVal)
{
gB_PEnabled = gCV_PEnabled.BoolValue;
gI_PFovZombie = gCV_PFovZombie.IntValue;
}
public void Event_PlayerSpawn(Event hEvent, const char[] sEvName, bool bDontBroadcast)
{
new client = GetClientOfUserId(GetEventInt(hEvent, "userid"));
if(gB_PEnabled && IsPlayerAlive(client) && ZR_IsClientHuman(client))
{
g_Fov[client] = false;
SetEntProp(client, Prop_Send, "m_iDefaultFOV", DEFAULT_FOV);
SetEntProp(client, Prop_Send, "m_iFOV", DEFAULT_FOV);
}
}
public ZR_OnClientHumanPost(client, bool:respawn, bool:protect)
{
g_Fov[client] = false;
SetEntProp(client, Prop_Send, "m_iDefaultFOV", DEFAULT_FOV);
SetEntProp(client, Prop_Send, "m_iFOV", DEFAULT_FOV);
}
public ZR_OnClientInfected(client, attacker, bool:motherInfect, bool:respawnOverride, bool:respawn)
{
if(gB_PEnabled)
{
g_Fov[client] = true;
SetEntProp(client, Prop_Send, "m_iDefaultFOV", gI_PFovZombie);
SetEntProp(client, Prop_Send, "m_iFOV", gI_PFovZombie);
}
}
public OnGameFrame()
{
for (new i = 1; i <= MaxClients; i++)
{
if (IsValidClient(i) && IsPlayerAlive(i))
{
if(g_Fov[i])
{
SetEntProp(i, Prop_Send, "m_iDefaultFOV", gI_PFovZombie);
SetEntProp(i, Prop_Send, "m_iFOV", gI_PFovZombie);
}
else
{
SetEntProp(i, Prop_Send, "m_iDefaultFOV", DEFAULT_FOV);
SetEntProp(i, Prop_Send, "m_iFOV", DEFAULT_FOV);
}
}
}
}
bool:IsValidClient(client)
{
if(!(1<= client<=MaxClients) || !IsClientInGame(client) || client == 0)
{
return false;
}
return true;
}
Если что ниже я поправил квар sm_fov_enabled@ololoex, Все отлично ) спасибо большое , а я что то искал и не нашел ( ленивый стал........
#include <sourcemod>
#include <sdktools>
#include <sdkhooks>
#include <zombiereloaded>
public Plugin myinfo =
{
name = "[ZR] Change FOV",
author = "Extr1m (Michail)",
description = "Adds a unique class of zombies",
version = "1.0",
url = "https://sourcemod.net/"
};
#define DEFAULT_FOV 90
ConVar gCV_PEnabled = null;
ConVar gCV_PFovZombie = null;
bool gB_PEnabled = true;
int gI_PFovZombie;
bool g_Fov[MAXPLAYERS+1];
public void OnPluginStart()
{
HookEvent("player_spawn", Event_PlayerSpawn);
gCV_PEnabled = CreateConVar("sm_fov_enabled", "1", "Включить/Выключить плагин", 0, true, 0.0, true, 1.0);
gCV_PFovZombie = CreateConVar("sm_fov_number", "110.0", "Значение FOV", 0, true, 0.0, true, 200.0);
gCV_PEnabled.AddChangeHook(ConVarChange);
gCV_PFovZombie.AddChangeHook(ConVarChange);
gB_PEnabled = gCV_PEnabled.BoolValue;
gI_PFovZombie = gCV_PFovZombie.IntValue;
}
public void ConVarChange(ConVar CVar, const char[] oldVal, const char[] newVal)
{
gB_PEnabled = gCV_PEnabled.BoolValue;
gI_PFovZombie = gCV_PFovZombie.IntValue;
}
public void Event_PlayerSpawn(Event hEvent, const char[] sEvName, bool bDontBroadcast)
{
new client = GetClientOfUserId(GetEventInt(hEvent, "userid"));
if(gB_PEnabled && IsPlayerAlive(client) && ZR_IsClientHuman(client))
{
g_Fov[client] = false;
SetEntProp(client, Prop_Send, "m_iDefaultFOV", DEFAULT_FOV);
SetEntProp(client, Prop_Send, "m_iFOV", DEFAULT_FOV);
}
}
public ZR_OnClientHumanPost(client, bool:respawn, bool:protect)
{
if(gB_PEnabled)
{
g_Fov[client] = false;
SetEntProp(client, Prop_Send, "m_iDefaultFOV", DEFAULT_FOV);
SetEntProp(client, Prop_Send, "m_iFOV", DEFAULT_FOV);
}
}
public ZR_OnClientInfected(client, attacker, bool:motherInfect, bool:respawnOverride, bool:respawn)
{
if(gB_PEnabled)
{
g_Fov[client] = true;
SetEntProp(client, Prop_Send, "m_iDefaultFOV", gI_PFovZombie);
SetEntProp(client, Prop_Send, "m_iFOV", gI_PFovZombie);
}
}
public OnGameFrame()
{
if(gB_PEnabled)
{
for (new i = 1; i <= MaxClients; i++)
{
if (IsValidClient(i) && IsPlayerAlive(i))
{
if(g_Fov[i])
{
SetEntProp(i, Prop_Send, "m_iDefaultFOV", gI_PFovZombie);
SetEntProp(i, Prop_Send, "m_iFOV", gI_PFovZombie);
}
else
{
SetEntProp(i, Prop_Send, "m_iDefaultFOV", DEFAULT_FOV);
SetEntProp(i, Prop_Send, "m_iFOV", DEFAULT_FOV);
}
}
}
}
}
bool:IsValidClient(client)
{
if(!(1<= client<=MaxClients) || !IsClientInGame(client) || client == 0)
{
return false;
}
return true;
}
Без геймфрейма не работает что ли? Если ты поставил FOV игроку после заражения, то зачем ему выставлять значение потом каждый тик??public OnGameFrame()
{
if(gB_PEnabled)
{
for (new i = 1; i <= MaxClients; i++)
{
if (IsValidClient(i) && IsPlayerAlive(i))
{
if(g_Fov)
{
SetEntProp(i, Prop_Send, "m_iDefaultFOV", gI_PFovZombie);
SetEntProp(i, Prop_Send, "m_iFOV", gI_PFovZombie);
}
else
{
SetEntProp(i, Prop_Send, "m_iDefaultFOV", DEFAULT_FOV);
SetEntProp(i, Prop_Send, "m_iFOV", DEFAULT_FOV);
}
}
}
}
}
При тесте я заметил что если человек умирает, то ему ставится FOV другой (не знаю с чем связано). Если идет заражение или обратно то все нормально. Конечно можно попробовать через таймер сделать, но в тот когда писал плагин задумывался об этом.Без геймфрейма не работает что ли? Если ты поставил FOV игроку после заражения, то зачем ему выставлять значение потом каждый тик??
Цикличная проверка всех игроков 66, 100 (в зависимости от тикрейта) раз В СЕКУНДУ? Это достаточно сильно бьёт по нагрузке.
#include <sourcemod>
#include <sdktools>
#include <sdkhooks>
#include <zombiereloaded>
public Plugin myinfo =
{
name = "[ZR] Change FOV",
author = "Extr1m (Michail)",
description = "Adds a unique class of zombies",
version = "1.1",
url = "https://sourcemod.net/"
};
#define DEFAULT_FOV 90
ConVar gCV_PEnabled = null;
ConVar gCV_PFovZombie = null;
bool gB_PEnabled = true;
int gI_PFovZombie;
Handle SpawnTimer[MAXPLAYERS+1];
public void OnPluginStart()
{
HookEvent("player_spawn", Event_PlayerSpawn);
gCV_PEnabled = CreateConVar("sm_fov_enabled", "1", "Включить/Выключить плагин", 0, true, 0.0, true, 1.0);
gCV_PFovZombie = CreateConVar("sm_fov_number", "110.0", "Значение FOV", 0, true, 0.0, true, 200.0);
gCV_PEnabled.AddChangeHook(ConVarChange);
gCV_PFovZombie.AddChangeHook(ConVarChange);
gB_PEnabled = gCV_PEnabled.BoolValue;
gI_PFovZombie = gCV_PFovZombie.IntValue;
}
public void OnClientDisconnect(int client)
{
if (SpawnTimer[client] != null)
{
KillTimer(SpawnTimer[client]);
SpawnTimer[client] = null;
}
}
public void ConVarChange(ConVar CVar, const char[] oldVal, const char[] newVal)
{
gB_PEnabled = gCV_PEnabled.BoolValue;
gI_PFovZombie = gCV_PFovZombie.IntValue;
}
public void Event_PlayerSpawn(Event hEvent, const char[] sEvName, bool bDontBroadcast)
{
new client = GetClientOfUserId(GetEventInt(hEvent, "userid"));
SpawnTimer[client] = CreateTimer(0.2, SpawnPlayer, client);
}
public Action SpawnPlayer(Handle timer, any client)
{
if(gB_PEnabled && IsPlayerAlive(client))
{
if(ZR_IsClientHuman(client))
{
SetEntProp(client, Prop_Send, "m_iDefaultFOV", DEFAULT_FOV);
SetEntProp(client, Prop_Send, "m_iFOV", DEFAULT_FOV);
}
else
{
SetEntProp(client, Prop_Send, "m_iDefaultFOV", gI_PFovZombie);
SetEntProp(client, Prop_Send, "m_iFOV", gI_PFovZombie);
}
}
}
public ZR_OnClientHumanPost(client, bool:respawn, bool:protect)
{
if(gB_PEnabled)
{
SetEntProp(client, Prop_Send, "m_iDefaultFOV", DEFAULT_FOV);
SetEntProp(client, Prop_Send, "m_iFOV", DEFAULT_FOV);
}
}
public ZR_OnClientInfected(client, attacker, bool:motherInfect, bool:respawnOverride, bool:respawn)
{
if(gB_PEnabled)
{
SetEntProp(client, Prop_Send, "m_iDefaultFOV", gI_PFovZombie);
SetEntProp(client, Prop_Send, "m_iFOV", gI_PFovZombie);
}
}
При тесте я заметил что если человек умирает, то ему ставится FOV другой (не знаю с чем связано). Если идет заражение или обратно то все нормально. Конечно можно попробовать через таймер сделать, но в тот когда писал плагин задумывался об этом.
--- Добавлено позже ---
Сделал через таймер и убрал OnGameFrame, теперь работает как надо.
C-подобный:#include <sourcemod> #include <sdktools> #include <sdkhooks> #include <zombiereloaded> public Plugin myinfo = { name = "[ZR] Change FOV", author = "Extr1m (Michail)", description = "Adds a unique class of zombies", version = "1.1", url = "https://sourcemod.net/" }; #define DEFAULT_FOV 90 ConVar gCV_PEnabled = null; ConVar gCV_PFovZombie = null; bool gB_PEnabled = true; int gI_PFovZombie; Handle SpawnTimer[MAXPLAYERS+1]; public void OnPluginStart() { HookEvent("player_spawn", Event_PlayerSpawn); gCV_PEnabled = CreateConVar("sm_fov_enabled", "1", "Включить/Выключить плагин", 0, true, 0.0, true, 1.0); gCV_PFovZombie = CreateConVar("sm_fov_number", "110.0", "Значение FOV", 0, true, 0.0, true, 200.0); gCV_PEnabled.AddChangeHook(ConVarChange); gCV_PFovZombie.AddChangeHook(ConVarChange); gB_PEnabled = gCV_PEnabled.BoolValue; gI_PFovZombie = gCV_PFovZombie.IntValue; } public void OnClientDisconnect(int client) { if (SpawnTimer[client] != null) { KillTimer(SpawnTimer[client]); SpawnTimer[client] = null; } } public void ConVarChange(ConVar CVar, const char[] oldVal, const char[] newVal) { gB_PEnabled = gCV_PEnabled.BoolValue; gI_PFovZombie = gCV_PFovZombie.IntValue; } public void Event_PlayerSpawn(Event hEvent, const char[] sEvName, bool bDontBroadcast) { new client = GetClientOfUserId(GetEventInt(hEvent, "userid")); SpawnTimer[client] = CreateTimer(0.2, SpawnPlayer, client); } public Action SpawnPlayer(Handle timer, any client) { if(gB_PEnabled && IsPlayerAlive(client)) { if(ZR_IsClientHuman(client)) { SetEntProp(client, Prop_Send, "m_iDefaultFOV", DEFAULT_FOV); SetEntProp(client, Prop_Send, "m_iFOV", DEFAULT_FOV); } else { SetEntProp(client, Prop_Send, "m_iDefaultFOV", gI_PFovZombie); SetEntProp(client, Prop_Send, "m_iFOV", gI_PFovZombie); } } } public ZR_OnClientHumanPost(client, bool:respawn, bool:protect) { if(gB_PEnabled) { SetEntProp(client, Prop_Send, "m_iDefaultFOV", DEFAULT_FOV); SetEntProp(client, Prop_Send, "m_iFOV", DEFAULT_FOV); } } public ZR_OnClientInfected(client, attacker, bool:motherInfect, bool:respawnOverride, bool:respawn) { if(gB_PEnabled) { SetEntProp(client, Prop_Send, "m_iDefaultFOV", gI_PFovZombie); SetEntProp(client, Prop_Send, "m_iFOV", gI_PFovZombie); } }
Моя школаА зачем используешь ново-старый синтаксис?
Не красиво(Не вижу в этом проблемы
L 11/25/2017 - 09:08:32: SourceMod error session started
L 11/25/2017 - 09:08:32: Info (map "zm_dust2v2_v3") (file "errors_20171125.log")
L 11/25/2017 - 09:08:32: [SM] Exception reported: Invalid timer handle 42c039b (error 3)
L 11/25/2017 - 09:08:32: [SM] Blaming: zombiereloaded/zr_change_fov.smx
L 11/25/2017 - 09:08:32: [SM] Call stack trace:
L 11/25/2017 - 09:08:32: [SM] [0] KillTimer
L 11/25/2017 - 09:08:32: [SM] [1] Line 43, C:\Users\User\YandexDisk\Mr. GiG Servers\Compil\Компилятор\ZR Compil\zr_change_fov.sp::OnClientDisconnect
[CS:GO/ANY] Advanced Noscop v1.1.0 - AlliedModders уже нашел полностью рабочий с hudom@Mizuri, ну так дай ссыль на рабочий носкоп