Изменение квара

Nekro

Терра инкогнита
Сообщения
4,042
Реакции
2,295
Ребят, как изменить значение квара не так (так как он пишет в чат об изменении значения):
C-подобный:
ServerCommand("mp_friendlyfire 0");
А как ни будь так

C-подобный:
hFriendlyFire = FindConVar("mp_friendlyfire");
bFriendlyFireLocal = GetConVarBool(hFriendlyFire);
bFriendlyFireLocal = false;

Второй вариант естественно не работает
 

Nekro

Терра инкогнита
Сообщения
4,042
Реакции
2,295
емнип, тебе нужна функция SetConVarInt()
Работает, но всё равно выходит уведомление об изменении

C-подобный:
Переменная сервера 'mp_friendlyfire' изменена на 1
Переменная сервера 'sv_tags' изменена на bots,friendlyfire,startmoney
Переменная сервера 'sv_tags' изменена на bots,friendlyfire,startmoney

Причём меняю только mp_friendlyfire
 

Paranoiiik

хачю клиентмод
Сообщения
2,047
Реакции
1,491
А не проще
C-подобный:
public void OnPluginStart()
{
    HookEvent("server_cvar", eventServerCvar, EventHookMode_Pre);
}

public Action eventServerCvar(Event event, const char[] name, bool dontBroadcast)
{
    if(!dontBroadcast) event.BroadcastDisabled = true;
}
?
 

Nekro

Терра инкогнита
Сообщения
4,042
Реакции
2,295
А не проще
C-подобный:
public void OnPluginStart()
{
    HookEvent("server_cvar", eventServerCvar, EventHookMode_Pre);
}

public Action eventServerCvar(Event event, const char[] name, bool dontBroadcast)
{
    if(!dontBroadcast) event.BroadcastDisabled = true;
}
?
Мм попробую, но не уверен что подойдёт. Мне же надо менять число переодически. Сейчас активно, а спустя 10 секунд выключено
 

Mr_panica

XenForo one 💖
Сообщения
931
Реакции
441
void SetConVarInt(Handle convar, int value, bool replicate, bool notify)
Как мне кажется, именно это будет отвечать за уведомления игрокам, разве нет?
 

rejchev

менеджер клоунов
Сообщения
1,669
Реакции
1,291
Ребят, как изменить значение квара не так (так как он пишет в чат об изменении значения):
C-подобный:
ServerCommand("mp_friendlyfire 0");
А как ни будь так

C-подобный:
hFriendlyFire = FindConVar("mp_friendlyfire");
bFriendlyFireLocal = GetConVarBool(hFriendlyFire);
bFriendlyFireLocal = false;

Второй вариант естественно не работает
->
Обычные геттеры/сеттеры:
ConVar cvar = FindConVar("ConVar");
cvar.BoolValue = false;

// или

cvar.SetBool(false, false, false); // https://hlmod.ru/sp-api/convars.15/function/394/
 
Последнее редактирование:

Nekro

Терра инкогнита
Сообщения
4,042
Реакции
2,295
void SetConVarInt(Handle convar, int value, bool replicate, bool notify)
Как мне кажется, именно это будет отвечать за уведомления игрокам, разве нет?
Уведомление есть
C-подобный:
SetConVarInt(hFriendlyFire, iFriendlyFire, _, false);
Сообщения автоматически склеены:

->
Обычные геттеры/сеттеры:
ConVar cvar = FindConVar("ConVar");
cvar.BoolValue = false;

// или

cvar.SetBool(false, false, false); // https://hlmod.ru/sp-api/convars.15/function/394/
К сожалению также при
C-подобный:
cFriendlyFire.BoolValue = true;
выводит оповещение

C-подобный:
Переменная сервера 'mp_friendlyfire' изменена на 1
Переменная сервера 'sv_tags' изменена на bots,friendlyfire,startmoney
Переменная сервера 'sv_tags' изменена на bots,friendlyfire,startmoney
Сообщения автоматически склеены:

Попробовал
C-подобный:
cFriendlyFire.SetBool(false, false, false);
работает как то странно и оповещение так же есть
 
Последнее редактирование:

Nekro

Терра инкогнита
Сообщения
4,042
Реакции
2,295
Последнее редактирование:

RusJJ

Доброе утро девачьки
Сообщения
2,582
Реакции
1,075
@Nekro,
C-подобный:
public void OnPluginStart()
{
    ConVar cvTemp;
    if((cvTemp = FindConVar("mp_friendlyfire")) != null) cvTemp.Flags = cvTemp.Flags & ~FCVAR_NOTIFY;
    if((cvTemp = FindConVar("sv_tags")) != null) cvTemp.Flags = cvTemp.Flags & ~FCVAR_NOTIFY;
}

А может и так заработает:
C-подобный:
public void OnPluginStart()
{
    ConVar cvTemp;
    if((cvTemp = FindConVar("mp_friendlyfire")) != null) cvTemp.Flags &= ~FCVAR_NOTIFY;
    if((cvTemp = FindConVar("sv_tags")) != null) cvTemp.Flags &= ~FCVAR_NOTIFY;
}
 

Nekro

Терра инкогнита
Сообщения
4,042
Реакции
2,295
@Nekro,
C-подобный:
public void OnPluginStart()
{
    ConVar cvTemp;
    if((cvTemp = FindConVar("mp_friendlyfire")) != null) cvTemp.Flags = cvTemp.Flags & ~FCVAR_NOTIFY;
    if((cvTemp = FindConVar("sv_tags")) != null) cvTemp.Flags = cvTemp.Flags & ~FCVAR_NOTIFY;
}

А может и так заработает:
C-подобный:
public void OnPluginStart()
{
    ConVar cvTemp;
    if((cvTemp = FindConVar("mp_friendlyfire")) != null) cvTemp.Flags &= ~FCVAR_NOTIFY;
    if((cvTemp = FindConVar("sv_tags")) != null) cvTemp.Flags &= ~FCVAR_NOTIFY;
}
Добавил первый вариант и оповещение пропало, большое спасибо !)
 

Dragokas

Добрая душа
Сообщения
229
Реакции
213
Хорошо бы флаги затем возвращать на место.

C-подобный:
...
{
    SetCvarSilent(FindConVar("mp_friendlyfire"), "0");
}

stock void SetCvarSilent( ConVar cv, char[] value )
{
    if( !cv )
    {
        return;
    }
    int flags = cv.Flags;
    cv.Flags &= ~FCVAR_NOTIFY;
    cv.SetString(value, true, false);
    cv.Flags = flags;
}
 

Dragokas

Добрая душа
Сообщения
229
Реакции
213
Ну так положено по правилам хорошего тона. Если где-то похозяйничал, вернуть всё как было, иначе потом не найдёшь концов.
Но ТС может и незачем.
 

RusJJ

Доброе утро девачьки
Сообщения
2,582
Реакции
1,075
Изменение битового флага максимально простая вещь, которую можно провести с кваром, и от которой ничего важного не зависит вообще. Просто показ в чате при изменении, а так же в Help показывает флаг notify.
Гораздо лучше один раз убрать этот флаг, чем нагружать сервер лишней затеей.
 

Dragokas

Добрая душа
Сообщения
229
Реакции
213
Изменение битового флага максимально простая вещь, которую можно провести с кваром, и от которой ничего важного не зависит вообще. Просто показ в чате при изменении, а так же в Help показывает флаг notify.
Для вас это может быть не важным, а для кого-то важным (для решения в последующем каких-то проблем по логам, к примеру).

Гораздо лучше один раз убрать этот флаг, чем нагружать сервер лишней затеей.
Тогда можно вообще отредактировать плагин basecommands.sp, убрав все оповещения, чтобы не нагружать сервер лишней битовой операцией :)
 

RusJJ

Доброе утро девачьки
Сообщения
2,582
Реакции
1,075
@Dragokas, язвить нет нужды.
Тогда можно вообще отредактировать плагин basecommands.sp, убрав все оповещения
Никто не мешает. При чём здесь он и квар mp_friendlyfire | sv_tags?
для решения в последующем каких-то проблем по логам, к примеру
Каких? И какая зависимость от написания нового значения квара в чат игрокам?
чтобы не нагружать сервер лишней битовой операцией
Тут даже не 2 и не 3 "операции" будет. Как минимум вызов функции отдельной с названием SetCvarSilent уже 1.
 

Dragokas

Добрая душа
Сообщения
229
Реакции
213
@Dragokas, язвить нет нужды.
Так не я начал язвить. Я только написал, как это делается грамотно.

Каких? И какая зависимость от написания нового значения квара в чат игрокам?
Да, здесь я ошибся, он вроде и так тоже попадёт в лог.
Каких, гадать не буду, пусть ТС сам решает, нужно это ему оповещение в чат в дальнейшем или нет.

Тут даже не 2 и не 3 "операции" будет. Как минимум вызов функции отдельной с названием SetCvarSilent уже 1.
Складывается впечатление, что CS:GO будут запускать на калькуляторах.
Чтобы почувствовать разницу в производительности, я даже не осмелюсь предположить, сколько придётся запустить таких циклов.
 

RusJJ

Доброе утро девачьки
Сообщения
2,582
Реакции
1,075
Лишняя трата процессорного времени - далеко не грамотно.
FindConVar - уже два цикла есть:
1619445689691.png

Если устанавливать, например, каждый раунд, то нагрузка конечно будет минимальной. Но зачем так вообще делать, если логичнее и правильнее просто отключить вывод текста штатными средствами?) Лично я не хочу наблюдать при 99% нагруженности процессора фриз на старте раунда.
 
Сверху Снизу