Воскресенье, 19.05.2024, 20:57
Приветствую Вас Гость

Каталог статей

Главная » Статьи » Игровые статьи

Регистрация на мастер-серверах (Обновление)
Шаги, которые нужно выполнить. чтобы ваш сервер был виден в интернете:
1. Поставить плагин:
Показать / Скрыть текст
#include <amxmodx>
#include <amxmisc>

#define TASK_UPDATE 4096
//Задержка между командами
#define DELAY 10.0

new bool:enabled = false, Masters[128][64], Count = 0, pcvar_repeat
new counter_add, counter_remove

public plugin_init()
{
register_plugin("Automatic master servers register", "2.2", "Puma")
pcvar_repeat = register_cvar("sm_repeat", "1")
set_task(10.0, "delay_load")
}

public plugin_end()
if(enabled)
setmaster_removeall()

public delay_load()
{
new configsdir[200], SetMasterFile[200], Result
new fSize, temp

get_configsdir(configsdir,199)
format(SetMasterFile,199,"%s/setmaster.ini",configsdir)
if(!file_exists(SetMasterFile))
{
server_print("Error: Coudn't find %s", SetMasterFile)
return PLUGIN_HANDLED
}
fSize = file_size(SetMasterFile,1);
if(!fSize)
{
server_print("Error: %s is empty", SetMasterFile)
return PLUGIN_HANDLED
}
for(new i=0; i < fSize; i++)
{
Result = read_file(SetMasterFile, i, Masters[i], 63, temp)
if(!Result)
continue

replace_all(Masters[i], 190, "setmaster add", "")
replace_all(Masters[i], 190, "setmaster remove", "")
Count++
}
server_print("setmaster.ini loaded (%d)", Count)
enabled = true
if(enabled)
{
counter_add = 0
set_task(0.1, "update", TASK_UPDATE+1)
}

set_task(300.0, "heartbeat", TASK_UPDATE, "", 0, "b")
return PLUGIN_CONTINUE
}

public heartbeat()
{
if(get_pcvar_num(pcvar_repeat) == 1)
{
counter_add = 0
counter_remove = 0
set_task(0.1, "update", TASK_UPDATE)
}
server_cmd("heartbeat")
}

public cmd_update(id)
{
set_task(0.1, "update", TASK_UPDATE)
}

public update(taskid)
{
//update part
if(taskid == TASK_UPDATE)
{
if(Count > counter_remove)
{
server_cmd("setmaster remove %s", Masters[counter_remove])
counter_remove++

set_task(DELAY, "update", TASK_UPDATE)
}
else
{
counter_add = 0
counter_remove = 0
set_task(0.1, "update", TASK_UPDATE+1)
}
}
//add part
else if(taskid == TASK_UPDATE+1)
{
if(Count > counter_add)
{
server_cmd("setmaster add %s", Masters[counter_add])
counter_add++

set_task(DELAY, "update", TASK_UPDATE+1)
}
else
{
counter_add = 0
counter_remove = 0
}
}
}

stock setmaster_removeall()
for(new i=0; i < Count; i++)
server_cmd("setmaster remove %s", Masters[i])


2. Открыть файл dproto.cfg и заменить переменные:
// Чтобы работа встроенного мастер клиента в дпрото выводил в логи свою работу
LoggingMode = 2

// Включим встроенный мастер-клиент
MasterClient = 1

// Выставим GameVersion, который будет отправляться на мастер-сервер.
Master_GameVersion = 1.6.3.7/Stdio

3. Запускать сервер с параметром -nomaster (в строке запуска) //по возможности

FAQ:
Q: Нужно ли прописывать в server.cfg какие-нибудь мастер-сервера?
A: Нет, всё делает плагин при инициализации

Q: Зачем мне ставить MasterClient = 1?
A: Потому что билд косячит со встроенным мастер-клиентом, в результате не у всех сервер будет виден на мастер-серверах.

Q: Я получаю в консоли сообщения типа: [DPROTO]: MasterClient: Server xxx.xxx.xxx.xxx:27010: Bad Challenge, как это исправить, и что это означает?
A: Исправит эту проблему dproto ,при дополнительном запросе на добавлений на мастер сервере , ошибка означает, что на мастер-сервере в текущее время забит мастер, и он выдаёт серверу неправильный Challenge номер)

Q: Что за сообщения: [DPROTO]: [MEMU]: Hello sent to xxx.xxx.xxx.xxx:27010 и [DPROTO]: [MEMU]: Info sent to xxx.xxx.xxx.xxx:27010?
A: Сообщения дают вам знать, что мастер-клиент dproto отправляет пакеты добавления сервера и heartbeat пакеты.

Q: А css.setti.info / сетти не забанит за эту настройку на сервере?
A: Нет, если вы не будите это использовать на своём фейковом сервере

Q: Чем тут помогает встроенный в dproto мастер-клиент (MasterClient = 1)?
A: Данный клиент исправляет косяк отображения числа игроков онлайн, с обычным мастер-клиентом это значение вело себя нестабильно, в следствии, видимость от части ухудшалась.

Q: Что написать в steam.inf ?
A: Оставить как есть ,тк если в dproto.cfg MasterClient = 1 ,то значение в steam.inf не берёться в счёт

Q: Что делает параметр -nomaster ?
A: Лишь добавляет от себя(hlds) 2 рандомных рабочих мастера ,если запускать с -nomaster + плагином то регистрация на мастер сервере всёравно проходит

Q: Зачем ставить именно 1.6.3.7/Stdio а не другое значение
A: Чтобы мастера не посчитали ваш сервер "старым" ,тк на мастерах стойт проверка данного значения ,если оно в допустимых пределах мастер добавит сервак ,в противном случий получите в консоли сообшение означаюшие что надо обновить HLDS

Q: У меня в консоли пишит Invalid address "xxx.xxx.xxx.xxx:xxx", setmaster command ignored
A: Ответ один ,или плагин выполняет часть удаления сетмастеров из себя (setmaster remove IP) когда они не добавлялись (при первом запуске обычно такое можно увидить) ,или ваш сервер уже добавлен на данный мастер сервак ,тк делая добавление реже чем примерно 5 минут мастер отвечает данным сообшением

Q: Что такое "heartbeat" ?
A: Команда которая отправляет мастер серверу пакет с некоторой инфой, это заставит мастер сервер не удалять ваш сервер через 5 минут в случий если он присутствует в списке мастер сервера


Изминения:
* Улучшен код плагина
+ Теперь список мастер серверов можно посмотреть/изменить в файле setmaster.ini (amxmodx/configs/setmaster.ini)
Категория: Игровые статьи | Добавил: (_($BART$)_) (15.01.2012)
Просмотров: 629 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]