Всем, привет, статья не имеет смысла, если вы не знаете, что с этим делать.
Сегодня я вам покажу, как средствами Steam Works создать свой сервер, чтобы он был виден ISteamApps/GetServersAtAddress (Если правильно я думаю: если мы получаем информацию о сервере через этот интерфейс, то он находится в мастер сервере?)
1. Скачиваем SDK Steam Works
2. Подключаем библиотеки (папка redistributable_bin)
3. Подключаем заголовочные файлы (папка public/steam)
4. Теперь сам код:
Теперь по коду:
Сегодня я вам покажу, как средствами Steam Works создать свой сервер, чтобы он был виден ISteamApps/GetServersAtAddress (Если правильно я думаю: если мы получаем информацию о сервере через этот интерфейс, то он находится в мастер сервере?)
1. Скачиваем SDK Steam Works
2. Подключаем библиотеки (папка redistributable_bin)
3. Подключаем заголовочные файлы (папка public/steam)
4. Теперь сам код:
Код:
#include <steam_gameserver.h>
#include <isteamgameserver.h>
int main()
{
SteamGameServer_Init(0, 27020, MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE, eServerModeAuthentication, "1.38.2.8");
SteamGameServer()->SetProduct("730");
SteamGameServer()->SetGameDescription("My server");
SteamGameServer()->SetDedicatedServer(true);
SteamGameServer()->SetModDir("csgo");
SteamGameServer()->LogOn("Ваш токен");
SteamGameServer()->SetBotPlayerCount(0);
SteamGameServer()->SetMaxPlayerCount(32);
SteamGameServer()->SetPasswordProtected(false);
SteamGameServer()->SetRegion("255");
SteamGameServer()->SetServerName("Server Test");
SteamGameServer()->SetMapName("de_dust2");
SteamGameServer()->SetSpectatorPort(0);
SteamGameServer()->SetAdvertiseServerActive(true);
SteamGameServer()->SetGameTags("fake_server");
return 0;
}
Код:
inline bool SteamGameServer_Init( uint32 unIP, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString )
/*
unIP - IP адрес сервера (dec)
usGamePort - Порт, к которому будут подключаться клиенты для игры.
usQueryPort - Порт, который будет управлять обязанностями, связанными с окном поиска серверов, и запросами информации от клиентов.
eServerMode - Задаёт метод аутентификации сервера.
pchVersionString - Строка с версией обычно представлена в формате x.x.x.x, она используется мастер-сервером для определения, что сервер устарел. (Будут перечислены только серверы с последней версией).
Методы авторизации:
eServerModeNoAuthentication - Не аутентифицировать сервер и не показывать в списке серверов
eServerModeAuthentication - Аутентифицировать сервер, показывать его в списке серверов и без vac
eServerModeAuthenticationAndSecure - Аутентифицировать сервер, показывать его в списке серверов и защищать игроков vac
Про usQueryPort: Если вы передадите MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE в usQueryPort, API игрового сервера будет использовать режим GameSocketShare, что будет означать, что игра несет ответственность за отправку и получение UDP-пакетов для средства обновления мастер-сервера.
*/
Код:
SteamGameServer()->LogOn("Ваш токен");
/*
Токен сервера https://steamcommunity.com/dev/managegameservers
*/
Код:
SteamGameServer()->SetAdvertiseServerActive(true);
/*Это метод отвечает за показ сервер в мастер сервере и за обратботку покетов на стороне нашего сервера*/
Код:
Чтобы узнать актуальную версию CSGO, то клик
Чего здесь не хватает? Ну например обработки A2S запросов, ваш сервер будет находиться в списке серверов, но получить от него информацию вы не сможете, так как нет обработки A2S и S2A запросов.
Смогут ли игроки подключиться к серверу ? Нет - так как нет логики по обработки пакетов между сервером и клиентом и нет открытого сокета, где мы будем получать и отправлять пакеты.
Зачем эта статья? Просто было скучно и решил написать ее, так как пример по Steam Works видел мало
Смогу ли я создавать свои фейк сервера с помощью этого примера? Ну кто знает, все в твоих руках!
Спасибо за внимание!
Так же рядом с исполняемым файлом создайте txt файл с названием steam_appid.txt и напишите в нем 730
steam_api.dll так же разместите с исполняемым файлом (можно найти в папке с сервером /bin) или если вы компилировали под x64, То библиотека и динамическая библиотека находятся в redistributable_bin/win64