SteamID3 получение.

Jafa

Участник
Сообщения
159
Реакции
3
[U:1:1256976798] - как получить такого вида стимид?
 

Rabb1t

Амбассадор
Сообщения
2,968
Реакции
1,429
  • Команда форума
  • #5
@Jafa,
PHP:
char szAuth[32];
GetClientAuthId(iCilent, AuthId_Steam3, szAuth, sizeof(szAuth));
На новом синтаксисе.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #6
@Rabb1t, аргументы перепутал, сначала AuthId_Steam3, а потом szAuth, sizeof(szAuth)
 

Rabb1t

Амбассадор
Сообщения
2,968
Реакции
1,429
  • Команда форума
  • #7
@R1KO, я думаю что-то не так, полез в API SM, нашел, пошел исправлять, уже ответ.
С телефона быстро не выйдет.
 

Jafa

Участник
Сообщения
159
Реакции
3
@R1KO, @Rabb1t, ребят а подскажите как перевести SteamID в SteamID3 и наоборот.?

[PHP] Регулярные выражения и Steamid3 - нашел тут тему но это для PHP но для уврененности хотеб бы чтоб более опытные пользователи подсказали код на SM...

Также нужно учест STEAM_0:1:XXX , так и STEAM_0:0:XXX и подобные вещи.
 

Rabb1t

Амбассадор
Сообщения
2,968
Реакции
1,429
  • Команда форума
  • #9
@Jafa, единица и нуль в начале, т.е. сразу после STEAM_0/1 и зависит это насколько знаю от того, откуда был взять стим ид, т.е. с сайтов - нуль (0), а из игры - единица (1), лично такое замечаю всегда.
Насчет преобразования все просто, вместо iClient указывай переменную с уже полученным стим ид, т.е. если брать с моего примера, то так:
PHP:
char szSteam2[32], szSteam3[32];
GetClientAuthId(iClient, AuthId_Steam2, szSteam2, sizeof(szSteam2));
PrintToChatAll("SteamID2: %s", szSteam2);
GetClientAuthId(szSteam2, AuthId_Steam3, szSteam3, sizeof(szSteam3));
PrintToChatAll("SteamID3: %s", szSteam3);
Обратно думаю понятно как.
 
Последнее редактирование:

Kailo

Участник
Сообщения
194
Реакции
896
@R1KO, @Rabb1t, ребят а подскажите как перевести SteamID в SteamID3 и наоборот.?

[PHP] Регулярные выражения и Steamid3 - нашел тут тему но это для PHP но для уврененности хотеб бы чтоб более опытные пользователи подсказали код на SM...

Также нужно учест STEAM_0:1:XXX , так и STEAM_0:0:XXX и подобные вещи.
STEAM_X:Y:Z - [U:1:Z*2+Y]
А так же можно вместо Z * 2 + Y проделать Z << 1 | Y
SteamID - Valve Developer Community
 
Последнее редактирование:

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #12
@Jafa, как-то так.
PHP:
public bool ConvertSIDv2ToSIDv3(char[] szSID, char[] szOutput, int iMaxLength) {
    if (StrContains(szSID, "STEAM_") != 0)
        return false;

    char szExplodedStr[3][20];
    if (ExplodeString(szSID, ":", szExplodedStr, 3, sizeof(szExplodedStr[])) != 3)
        return false;

    FormatEx(szOutput, iMaxLength, "[U:1:%d]", (StringToInt(szExplodedString[2]) * 2) + StringToInt(szExplodedString[1]));
    return true;
}

Пример применения:
PHP:
char szSteam2[32];
char szSteam3[20];

strcopy(szSteam2, sizeof(szSteam2), "STEAM_0:0:55665612");
ConvertSIDv2ToSIDv3(szSteam2, szSteam3, sizeof(szSteam3));
PrintToServer("SteamID v2: %s\nSteamID v3: %s", szSteam2, szSteam3);
// выведет:
// SteamID v2: STEAM_0:0:55665612
// SteamID v3: [U:1:111331224]
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #13
if (StrContains(szSID, "STEAM_") != 0)
return
false;
if(!strncmp(szSID, "STEAM_", 6))
но и куда оптимизировать есть
--- Добавлено позже ---
PHP:
stock bool ConvertSIDv2ToSIDv3(char[] szSID, char[] szOutput, int iMaxLength) {
    if (StrContains(szSID, "STEAM_") != 0)
        return false;

    FormatEx(szOutput, iMaxLength, "[U:1:%d]", (StringToInt(szSID[9]) * 2) + (szSID[8]-48));
    return true;
}
вроде так
 
Последнее редактирование:

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #14
@R1KO, а откуда берётся у Вас szExplodedString[9], если он даже толком не объявлен?)
 

Rabb1t

Амбассадор
Сообщения
2,968
Реакции
1,429
  • Команда форума
  • #15
@Kruzya, он объявлен у тебя.
Рико твой вариант подправил, но забыл его объявить.
Ну суть все поняли же.
 

Jafa

Участник
Сообщения
159
Реакции
3
if(!strncmp(szSID, "STEAM_", 6))
но и куда оптимизировать есть
--- Добавлено позже ---
PHP:
stock bool ConvertSIDv2ToSIDv3(char[] szSID, char[] szOutput, int iMaxLength) {
    if (StrContains(szSID, "STEAM_") != 0)
        return false;

    FormatEx(szOutput, iMaxLength, "[U:1:%d]", (StringToInt(szSID[9]) * 2) + (szSID[8]-48));
    return true;
}
вроде так
возвращает [U:1:1]... что-то не то.
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #19
@Jafa, покажите входные данные.
 

Jafa

Участник
Сообщения
159
Реакции
3
@R1KO, @Kruzya,

PHP:
void ConvertSIDv2ToSIDv3(char[] szSID, char[] szOutput, int iMaxLength) 
{
    PrintToChatAll("Входит: %s", szSID);
    if (StrContains(szSID, "STEAM_") != 0)
        return false;

    char szExplodedStr[3][20];
    if (ExplodeString(szSID, ":", szExplodedStr, 3, sizeof(szExplodedStr[])) != 3)
        return false;

    FormatEx(szOutput, iMaxLength, "[U:1:%d]", (StringToInt(szExplodedStr[2]) * 2) + StringToInt(szExplodedStr[1]));
    PrintToChatAll("Выходит: %s", szOutput);
    return true;
}
Входит: STEAM_1:0:1985510017
Выходит: [U:1:-323947262]
 
Сверху Снизу