это на каждую команду надо отдельный плагин ставить, может есть какой нибудь который действует на все?
Вы имете ввиду карты?это на каждую команду надо отдельный плагин ставить, может есть какой нибудь который действует на все?
#pragma newdecls required
public void OnPluginStart()
{
HookConVarChange(FindConVar("mp_roundtime"), ChangeCvar_Roundtime);
HookConVarChange(FindConVar("mp_freezetime"), ChangeCvar_Roundtime1);
}
public void ChangeCvar_Roundtime(ConVar cvar, const char[] oldValue, const char[] newValue)
{
if (cvar.IntValue == 10) cvar.IntValue = StringToInt(oldValue);
}
public void ChangeCvar_Roundtime1(ConVar cvar, const char[] oldValue, const char[] newValue)
{
if (cvar.IntValue == 2) cvar.IntValue = StringToInt(oldValue);
}
ОффтопОффтоп@Ровный Кент, если бы он умел кодить, он бы не задавал такой простецкий вопрос.
а если время карты не 10 мин а 9 или 12 и тдВы имете ввиду карты?
Я бы так сделал (если вы про карты) :
1. Установил этот плагин :
Map configs with prefix support 1.3 - AlliedModders
2. Установил плагин который, я вам выше давал.
И в файлах .cfg (для нужных мне карт) от Map with prefix support (просто бы выгружал тот самый плагин типа - sm plugins unload blabla.smx, я так раньше с одним плагином делал...)
А если вы про команды то возьмите тот код как пример (если умеете кодить) пример (хотя я не кодер...) :
C-подобный:#pragma newdecls required public void OnPluginStart() { HookConVarChange(FindConVar("mp_roundtime"), ChangeCvar_Roundtime); HookConVarChange(FindConVar("mp_freezetime"), ChangeCvar_Roundtime1); } public void ChangeCvar_Roundtime(ConVar cvar, const char[] oldValue, const char[] newValue) { if (cvar.IntValue == 10) cvar.IntValue = StringToInt(oldValue); } public void ChangeCvar_Roundtime1(ConVar cvar, const char[] oldValue, const char[] newValue) { if (cvar.IntValue == 2) cvar.IntValue = StringToInt(oldValue); }
#pragma newdecls required
public void OnPluginStart()
{
HookConVarChange(FindConVar("mp_roundtime"), ChangeCvar_Roundtime);
}
public void ChangeCvar_Roundtime(ConVar cvar, const char[] oldValue, const char[] newValue)
{
if (cvar.IntValue == 15) cvar.IntValue = StringToInt(oldValue);
if (cvar.IntValue == 14) cvar.IntValue = StringToInt(oldValue);
if (cvar.IntValue == 13) cvar.IntValue = StringToInt(oldValue);
if (cvar.IntValue == 12) cvar.IntValue = StringToInt(oldValue);
if (cvar.IntValue == 11) cvar.IntValue = StringToInt(oldValue);
if (cvar.IntValue == 10) cvar.IntValue = StringToInt(oldValue);
if (cvar.IntValue == 9) cvar.IntValue = StringToInt(oldValue);
if (cvar.IntValue == 8) cvar.IntValue = StringToInt(oldValue);
if (cvar.IntValue == 7) cvar.IntValue = StringToInt(oldValue);
if (cvar.IntValue == 6) cvar.IntValue = StringToInt(oldValue);
}
static const char sEntity[][] =
{
"point_servercommand",
"logic_auto",
"logic_timer",
//"point_clientcommand"
};
а если время карты не 10 мин а 9 или 12 и тд
--- Добавлено позже ---
так можно?
C-подобный:#pragma newdecls required public void OnPluginStart() { HookConVarChange(FindConVar("mp_roundtime"), ChangeCvar_Roundtime); } public void ChangeCvar_Roundtime(ConVar cvar, const char[] oldValue, const char[] newValue) { if (cvar.IntValue == 15) cvar.IntValue = StringToInt(oldValue); if (cvar.IntValue == 14) cvar.IntValue = StringToInt(oldValue); if (cvar.IntValue == 13) cvar.IntValue = StringToInt(oldValue); if (cvar.IntValue == 12) cvar.IntValue = StringToInt(oldValue); if (cvar.IntValue == 11) cvar.IntValue = StringToInt(oldValue); if (cvar.IntValue == 10) cvar.IntValue = StringToInt(oldValue); if (cvar.IntValue == 9) cvar.IntValue = StringToInt(oldValue); if (cvar.IntValue == 8) cvar.IntValue = StringToInt(oldValue); if (cvar.IntValue == 7) cvar.IntValue = StringToInt(oldValue); if (cvar.IntValue == 6) cvar.IntValue = StringToInt(oldValue); }
public void ChangeCvar_Roundtime(ConVar cvar, const char[] oldValue, const char[] newValue)
{
if (cvar.IntValue == 15) cvar.IntValue = StringToInt(oldValue);
if (cvar.IntValue == 14) cvar.IntValue = StringToInt(oldValue);
if (cvar.IntValue == 13) cvar.IntValue = StringToInt(oldValue);
if (cvar.IntValue == 12) cvar.IntValue = StringToInt(oldValue);
if (cvar.IntValue == 11) cvar.IntValue = StringToInt(oldValue);
if (cvar.IntValue == 10) cvar.IntValue = StringToInt(oldValue);
if (cvar.IntValue == 9) cvar.IntValue = StringToInt(oldValue);
if (cvar.IntValue == 8) cvar.IntValue = StringToInt(oldValue);
if (cvar.IntValue == 7) cvar.IntValue = StringToInt(oldValue);
if (cvar.IntValue == 6) cvar.IntValue = StringToInt(oldValue);
}
Это не нужно, так как есть консольная переменная sv_allow_point_servercommandОбычно если карта не использует entity "point_servercommand" - кроме как вывод сообщения или изменение кваров (как в данном случае), то попробовать удалить её до исполнения, в каждом новом раунде, возможно, решит проблему.
В ином случае можно парсировать:
Или хукать event "server_cvar" - блокировать, если возможно или изменять на прежнее значение.PHP:static const char sEntity[][] = { "point_servercommand", "logic_auto", "logic_timer", //"point_clientcommand" };
P.S.: при этом хукать "round_end", "round_start* + некоторое время" - где после задоного времени разрешаеться изменять квар.
Она существует в игре TC?Это не нужно, так как есть консольная переменная sv_allow_point_servercommand
:ac:Нет там такой команды.
Обычно если карта не использует entity "point_servercommand" - кроме как вывод сообщения или изменение кваров (как в данном случае), то попробовать удалить её до исполнения, в каждом новом раунде, возможно, решит проблему.
#pragma semicolon 1
#include <sdktools_functions>
#include <sdktools_entinput>
#if SOURCEMOD_V_MAJOR == 1 && SOURCEMOD_V_MINOR < 7
#else
#pragma newdecls required
#endif
#if SOURCEMOD_V_MAJOR == 1 && SOURCEMOD_V_MINOR < 7
public OnPluginStart()
#else
public void OnPluginStart()
#endif
{
HookEvent("round_start", round_start, EventHookMode_Pre); //EventHookMode_PostNoCopy
}
#if SOURCEMOD_V_MAJOR == 1 && SOURCEMOD_V_MINOR < 7
public Action:round_start(Handle:event, const String:name[], bool:dontBroadcast)
#else
public Action round_start(Event event, const char[] name, bool dontBroadcast)
#endif
{
#if SOURCEMOD_V_MAJOR == 1 && SOURCEMOD_V_MINOR < 7
new i_pservcmd = -1;
#else
int i_pservcmd = -1;
#endif
while ((i_pservcmd = FindEntityByClassname(i_pservcmd, "point_servercommand")) != INVALID_ENT_REFERENCE)
{
if (IsValidEdict(i_pservcmd))
{
AcceptEntityInput(i_pservcmd, "Kill");
RemoveEdict(i_pservcmd);
}
}
}
не помогло@Kanny, @LDblue,
PHP:#pragma semicolon 1 #include <sdktools_functions> #include <sdktools_entinput> #if SOURCEMOD_V_MAJOR == 1 && SOURCEMOD_V_MINOR < 7 #else #pragma newdecls required #endif #if SOURCEMOD_V_MAJOR == 1 && SOURCEMOD_V_MINOR < 7 public OnPluginStart() #else public void OnPluginStart() #endif { HookEvent("round_start", round_start, EventHookMode_Pre); //EventHookMode_PostNoCopy } #if SOURCEMOD_V_MAJOR == 1 && SOURCEMOD_V_MINOR < 7 public Action:round_start(Handle:event, const String:name[], bool:dontBroadcast) #else public Action round_start(Event event, const char[] name, bool dontBroadcast) #endif { #if SOURCEMOD_V_MAJOR == 1 && SOURCEMOD_V_MINOR < 7 new i_pservcmd = -1; #else int i_pservcmd = -1; #endif while ((i_pservcmd = FindEntityByClassname(i_pservcmd, "point_servercommand")) != INVALID_ENT_REFERENCE) { if (IsValidEdict(i_pservcmd)) { AcceptEntityInput(i_pservcmd, "Kill"); RemoveEdict(i_pservcmd); } } }
Попробуй это скомпилировать:не помогло
public OnEntityCreated(entity, const String:classname[])
{
if (strcmp(classname, "point_servercommand") == 0 && entity != -1) RemoveEdict(entity);
}