Консольные команды на карте

LDblue

Участник
Сообщения
37
Реакции
2
подскажите, как отключить каманды на карте из мастерской и заставить работать те которые прописаны в конфиге сервера
Например: время на раунда на карте 10 мин а на сервере установлено 5
 

Ровный Кент

Участник
Сообщения
703
Реакции
121
это на каждую команду надо отдельный плагин ставить, может есть какой нибудь который действует на все?
Вы имете ввиду карты?

Я бы так сделал (если вы про карты) :

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);
}
 
Последнее редактирование:

Ровный Кент

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

LDblue

Участник
Сообщения
37
Реакции
2
Вы имете ввиду карты?

Я бы так сделал (если вы про карты) :

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);
}
а если время карты не 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);
}
 

DarklSide

Участник
Сообщения
931
Реакции
468
Обычно если карта не использует entity "point_servercommand" - кроме как вывод сообщения или изменение кваров (как в данном случае), то попробовать удалить её до исполнения, в каждом новом раунде, возможно, решит проблему.
В ином случае можно парсировать:
PHP:
static const char sEntity[][] =
{
    "point_servercommand",
    "logic_auto",
    "logic_timer",
    //"point_clientcommand"
};
Или хукать event "server_cvar" - блокировать, если возможно или изменять на прежнее значение.
P.S.: при этом хукать "round_end", "round_start* + некоторое время" - где только после задоного времени разрешаеться изменять квар.
 
Последнее редактирование:

Ровный Кент

Участник
Сообщения
703
Реакции
121
а если время карты не 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);
}

C-подобный:
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);
}

Introduction to SourcePawn 1.7 - AlliedModders Wiki
Раздел :
If Statements
 

Vit_ amin

Добрая душа
Сообщения
1,504
Реакции
660
Обычно если карта не использует entity "point_servercommand" - кроме как вывод сообщения или изменение кваров (как в данном случае), то попробовать удалить её до исполнения, в каждом новом раунде, возможно, решит проблему.
В ином случае можно парсировать:
PHP:
static const char sEntity[][] =
{
    "point_servercommand",
    "logic_auto",
    "logic_timer",
    //"point_clientcommand"
};
Или хукать event "server_cvar" - блокировать, если возможно или изменять на прежнее значение.
P.S.: при этом хукать "round_end", "round_start* + некоторое время" - где после задоного времени разрешаеться изменять квар.
Это не нужно, так как есть консольная переменная sv_allow_point_servercommand
 

Vit_ amin

Добрая душа
Сообщения
1,504
Реакции
660
Если не прав, прошу прощения.
P.S. В CS: Source 100%
 

EaglEs

Гуру пробития усилений
Сообщения
924
Реакции
192
Нет там такой команды.
 

DarklSide

Участник
Сообщения
931
Реакции
468
@Kanny, @LDblue,
Обычно если карта не использует entity "point_servercommand" - кроме как вывод сообщения или изменение кваров (как в данном случае), то попробовать удалить её до исполнения, в каждом новом раунде, возможно, решит проблему.
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);
        }
    }
}
 
Последнее редактирование:

LDblue

Участник
Сообщения
37
Реакции
2
так можно?
@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);
        }
    }
}
не помогло
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Попробуй это скомпилировать:
PHP:
public OnEntityCreated(entity, const String:classname[])
{
	if (strcmp(classname, "point_servercommand") == 0 && entity != -1) RemoveEdict(entity);
}
Если и это не поможет, значит такого объекта вообще не бывает на карте, либо он не отвечает за данную проблему.
 
Сверху Снизу