Своя ConVar в server.cfg

GermanIvanov

Участник
Сообщения
40
Реакции
1
Мне необходимо идентифицировать экземпляр сервера CS:GO для чего была заведена переменная которую я благополучно читал-писал до тех пор, пока сервера были на разных компах.
C-подобный:
ConVar cv;
    cv = CreateConVar("sv_myserverid", "0", "serverid");
    AutoExecConfig(true, "myconfigs");
    sv_myserverid = cv.IntValue;
    CloseHandle(cv);
  LogMessage("====myuser========================================================== sv_myserverid  %i",sv_myserverid);

Теперь встала задача запускать несколько одинаковых серверов на одном компе. Сделал разные конфиги server.cfg, которые я запускаю через +servercfgfile, положил туда уникальные для каждого сервера настройки и вроде бы все хорошо кроме моего конфига, лежащего в /cfg/sourcemod

Переносить из-за него весь sourcemod как то не охота, возможно ли запихать в server.cfg мою переменную sv_myserverid так, чтобы я имел к ней доступ из скрипта?
Если тупо прописать ее туда она не считывается показанным выше кодом....
 

GermanIvanov

Участник
Сообщения
40
Реакции
1
HookConVarChange прилепи и будет реагировать на изменения.


C-подобный:
public void OnPluginStart()
{
    ConVar cv = FindConVar("sv_myserverid");
    if(cv!=INVALID_HANDLE)
    {
        sv_myserverid=cv.IntValue;
        HookConVarChange(cv, ConVarChange_sv_myserverid);
    }else{
        LogMessage("=== no sv_myserverid")
    }
    LogMessage("=== sv_myserverid  %i",sv_myserverid);
}


public void  ConVarChange_sv_myserverid(ConVar convar, const char[] oldValue, const char[] newValue)
{
    sv_myserverid=convar.IntValue;
    LogMessage("====myuser========================================================== sv_myserverid  %i",sv_myserverid);
}

при перезапуске плагина отрабатывает === no sv_myserverid , ConVarChange_sv_myserverid вообще не вызывается так как не найти такую Cver

боюсь это не совсем подойдет, мне ведь все равно нужно будет как то указать какой конфиг читать, насколько я понимаю из доступного только командная строка при запуске сервера.
 

GermanIvanov

Участник
Сообщения
40
Реакции
1
этот cvar я прописал в server1.cfg стартуемый из командной строки по +servercfgfile server1.cfg

стоп! а так вообще можно? добавлять свои выдуманные команды в конфиг?
 

GermanIvanov

Участник
Сообщения
40
Реакции
1
этот квар нужен для идентификации сервера. он потом в базу данных пишется, например старт раунда на сервере 1.
Читаться он будет несколькими моими плагинами.
Меняться не будет, то есть жестко задается в конфиге сервера.

Стартую я несколько серверов командами

start srcds.exe -port 27015 +servercfgfile server1.cfg -gamemodes_serverfile gamemodes_server1.txt ......
start srcds.exe -port 27016 +servercfgfile server2.cfg -gamemodes_serverfile gamemodes_server2.txt ......

Соответственно мне нужен какой то идентификатор который я могу поместить в serverX.cfg или gamemodes_serverX.txt
Сейчас как временную некрасивую заплатку я прописал этот параметр в hostname
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
жестко задается в конфиге сервера
Ловим порт сервера: 27015 - автоматом опознаём и присваиваем квару номер 1, 2016 - номер 2 и т.д. Они же, по сути, и есть идентификаторы?
Таким образом, хоть сервера из одной папки запустим - все правильно распределит одним и тем же плагином.
 

GermanIvanov

Участник
Сообщения
40
Реакции
1
Идея красивая, но могут быть еще несколько физических компов с дублирующимися номерами портов :(
 

GermanIvanov

Участник
Сообщения
40
Реакции
1
Тогда, собственно, как ты определяешь, кто будет №1, а кто №2?

Руками прописываю в конфиге server1.cfg на каждом конкретном сервере.
в принципе нашел "крайне полезную" переменную которую можно заюзать под это дело mp_backup_round_file "2" разумеется предварительно прописав

mp_backup_round_file 0
mp_backup_round_file_last 0
mp_backup_round_file_pattern 0

неужели никому до меня не требовалась такая функциональность или она в принципе не реализуема(своя переменная в конфигах csgo)?
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Руками прописываю
ConVar cv = FindConVar("sv_myserverid");
А зачем заранее ищешь квар? Создаёшь, отлавливаешь его изменения, меняешь впиской в конфиг. А уже в применяемых плагинах ищешь через:
Или уж, если после всех конфигов, разово:
C-подобный:
OnConfigsExecuted()
Нашёл, получил значение - всё готово.
 

GermanIvanov

Участник
Сообщения
40
Реакции
1
А зачем заранее ищешь квар? Создаёшь, отлавливаешь его изменения, меняешь впиской в конфиг.

Ищу надеясь что он автоматом создался, так как есть в конфиге, подобно тому же "hostname". Как я уже выяснил это не так :(

Создаю понял. изменения не понял, его же никто не меняет кроме server.cfg ?

Конструкция вида
PHP:
ConVar cv1;
public void OnPluginStart()
{
cv1 = CreateConVar("sv_myserverid", "0", "serverid");
}

public void OnConfigsExecuted()
{
  ConVar cv = FindConVar("sv_myserverid");
  LogMessage("[myuser.OnConfigsExecuted]=== sv_myserverid  %i",cv.IntValue);
}

Ругается в консоль Unknown command "sv_myserverid"
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Конструкция вида
PHP:
#pragma newdecls required
public void OnPluginStart()
{
	CreateConVar("sv_myserverid", "0", "serverid")//.AddChangeHook(ChangeCvar);
}

/*public void ChangeCvar(ConVar convar, const char[] oldValue, const char[] newValue)
{
	LogMessage("====myuser========================================================== sv_myserverid  %s", newValue);
}*/
PHP:
#pragma newdecls required

int ServerID;

public void OnConfigsExecuted()
{
	if (ServerID == 0)
	{
		ConVar cv = FindConVar("sv_myserverid");
		if (cv != null)
		{
			ServerID = cv.IntValue;
			LogMessage("====myuser========================================================== sv_myserverid  %i", ServerID);
		}
	}
}
Прописал в server.cfg квар со своим значением и получил его в лог.
 
Сверху Снизу