В этой статье я расскажу, как можно конвертировать между собой все виды SteamID, а также получать SteamID из пригласительных ссылок или наоборот – генерировать их. Это может быть полезно для сайтов игровых серверов или для разработки динамических MOTD для серверов на движке Source.
Какие бывают виды SteamID пользователей
- Steam 2 ID, его еще часто называют SteamID 32, выглядит так:
STEAM_1:1:125018747
- Steam 3 ID, выглядит так:
[U:1:250037495]
- SteamID, он же UInt64, он же SteamID 64, выглядит так:
76561198210303223
и по нему можно найти профиль пользователя, подставив в ссылку, например:https://steamcommunity.com/profiles/76561198210303223
Ссылки-приглашения
В Steam существуют ссылки-приглашения или быстрые приглашения, позволяющие мгновенно добавить в друзья того, кто перешел по этой ссылке. Выглядят они так: https://s.team/p/vvk-ggwk/FBWQQDJB
. Есть также более длинная версия таких ссылок: https://steamcommunity.com/user/vvk-ggwk/FBWQQDJB
Последняя часть ссылки временная и может быть использована лишь 1 раз. А вот предпоследняя часть ссылки является закодированным в HEX вашим SteamID, поэтому ссылка без последней части всегда будет вести на ваш профиль. Например эта короткая ссылка ведет на мой профиль: https://s.team/p/vvk-ggwk
Эти ссылки вы можете создавать на этой странице. Там же вы найдете “код для друга”, который является не чем иным, как вашим AccountID.
Конвертируем SteamID и SteamInvite
Для этого нам потребуется библиотека в виде всего одного файла. Если у вас PHP 8, скачайте этот файл и загрузите к себе на сайт, например в папку inc
или lib
. Если же у вас PHP 7.3 или 7.4, скачайте более старую версию файла.
Подключаем библиотеку в ваш PHP скрипт:
require __DIR__ . '/inc/SteamID.php';
Создаем переменную с любым известным вам SteamID и экземпляр класса:
$sid = 'STEAM_1:1:125018747';
$s = new SteamID($sid);
Теперь мы можем получать конвертированные данные.
Получить Steam 2 ID (SteamID32):
echo $s->RenderSteam2();
Обратите внимание: эта функция вернет вам SteamID следующего вида: STEAM_1:1:125018747
. Но в старых играх, таких как Garry’s Mod или Counter Strike, ваш SteamID может начинаться на STEAM_0
, а не на STEAM_1
и корректный SteamID32, например для Garry’s Mod, в моем случае выглядит так: STEAM_0:1:125018747
. Если вы столкнулись с той же проблемой, то для ее решения вам нужно лишь добавить одну строчку перед получением Steam2:
$s->SetAccountUniverse(0);
echo $s->RenderSteam2();
Получить Steam 3 ID:
echo $s->RenderSteam3();
Получить SteamID (SteamID 64):
echo $s->ConvertToUInt64();
Получить AccountID:
echo $s->GetAccountID();
Получить SteamInvite (короткую ссылку на профиль):
echo 'http://s.team/p/'.$s->RenderSteamInvite();
Получить код приглашения друга в CS: GO:
echo $s->RenderCsgoFriendCode();
Как видите, здесь все просто. Однако, я рекомендую оборачивать функции в try … catch во избежание проблем, особенно, если вы не контролируете ввод. Это может выглядеть примерно так:
$sid = 'STEAM_1:1:125018747';
$s = new SteamID($sid);
try {
$sid32 = $s->RenderSteam2();
// далее ваш код
}
catch(InvalidArgumentException $e) {
// тут можно обработать ошибку
}
Если из всего перечисленного в статье вам, как и мне, требуется лишь получать SteamID32 и SteamID64, вы можете подключить библиотеку в файле ваших функций и создать там для себя 2 функции, которые будете дальше использовать на вашем сайте и в которые будете передавать известный SteamID:
function GetSteamID32($sid) {
$s = new SteamID($sid);
try {
//$s->SetAccountUniverse(0); // для старых игр
$sid32 = $s->RenderSteam2();
return $sid32;
}
catch(InvalidArgumentException $e) {
return false;
}
}
function GetSteamID64($sid) {
$s = new SteamID($sid);
try {
$sid64 = $s->ConvertToUInt64();
return $sid64;
}
catch(InvalidArgumentException $e) {
return false;
}
}
Библиотека имеет и другие функции, ознакомиться с ними вы можете на GitHub проекта. Обратите внимание на VanityURLs.php, его функции способны парсить любой ввод, будь то SteamID или ссылка на профиль или что-то еще. Мне это не понадобилось, но может быть будет интересно вам.