В разработке веб-сервисов: Как определить тип движка сервера (например, GoldSource или Source) на основе названия игры игровым сервисом?
При разработке веб-сервисов, работающих с игровыми серверами (например, мониторинг серверов, статистика, панели управления), часто возникает задача определить тип движка сервера по названию игры. Это необходимо для выбора правильного протокола опроса, парсинга ответов и корректного отображения данных.
## Основные движки и их игры
Наиболее распространённые движки в контексте Valve-игр:
**GoldSource (Half-Life Engine)**
Игры: Half-Life, Counter-Strike 1.6, Counter-Strike: Condition Zero, Day of Defeat, Team Fortress Classic, Deathmatch Classic, Ricochet, Opposing Force и другие моды на базе HL1.
**Source Engine**
Игры: Half-Life 2, Counter-Strike: Source, Day of Defeat: Source, Team Fortress 2, Left 4 Dead, Left 4 Dead 2, Garry’s Mod, Portal, Portal 2, Alien Swarm и другие.
**Source 2**
Игры: Dota 2, Counter-Strike 2, Deadlock.
## Алгоритм определения движка
Самый надёжный способ — использовать словарь (map/dictionary), где ключом является короткое название игры (gamedir или appid), а значением — тип движка.
### Пример на Python:
python
GOLDSOURCE_GAMES = {
«valve», «cstrike», «czero», «dod», «tfc»,
«dmc», «ricochet», «gearbox», «bshift»
}
SOURCE_GAMES = {
«hl2mp», «cstrike_source», «dod_source», «tf»,
«garrysmod», «l4d», «l4d2», «portal», «portal2»,
«alien_swarm», «insurgency», «nmrih»
}
SOURCE2_GAMES = {
«dota2», «cs2», «deadlock»
}
def get_engine(game_dir: str) -> str:
game = game_dir.lower().strip()
if game in GOLDSOURCE_GAMES:
return «GoldSource»
elif game in SOURCE_GAMES:
return «Source»
elif game in SOURCE2_GAMES:
return «Source 2»
else:
return «Unknown»
### Использование AppID Steam
Ещё более точный способ — использовать Steam AppID, который возвращается при опросе сервера через протокол A2S_INFO. Каждому AppID соответствует конкретная игра и движок. Например:
— AppID 10 → Half-Life → GoldSource
— AppID 240 → Counter-Strike: Source → Source
— AppID 440 → Team Fortress 2 → Source
— AppID 570 → Dota 2 → Source 2
— AppID 730 → CS2 → Source 2
### Fallback через протокол
Если информация о движке недоступна напрямую, можно определить его по формату ответа A2S_INFO: GoldSource использует устаревший формат (заголовок 0x6D), тогда как Source — современный (заголовок 0x49).
## Рекомендации
1. Храните таблицу соответствий в конфигурационном файле или базе данных для удобного обновления.
2. Используйте AppID как приоритетный идентификатор, а gamedir — как запасной.
3. Предусмотрите категорию «Unknown» для новых или неизвестных игр.
4. Регулярно обновляйте список при выходе новых игр.
