SteamID3 получение.

Kruzya

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

Jafa

Участник
Сообщения
159
Реакции
3
@Kruzya, @R1KO,
PHP:
void ConvertSIDv2ToSIDv3(char[] szSID, char[] szOutput, int iMaxLength) 
{
    PrintToChatAll("Входит: %s", szSID);
    FormatEx(szOutput, iMaxLength, "[U:1:%d]", (StringToInt(szSID[9]) * 2) + (szSID[8]-48));
    PrintToChatAll("Выходит: %s", szOutput);
    return true;
}
Входит: STEAM_1:0:1980690970
Выходит: [U:1:0]
 

Jafa

Участник
Сообщения
159
Реакции
3
@Kruzya,
sm version
SourceMod Version Information:
SourceMod Version: 1.9.0.6079
SourcePawn Engine: 1.9.0.6079, jit-x86 (build 1.9.0.6079)
SourcePawn API: v1 = 4, v2 = 12
Compiled on: Apr 26 2017 04:00:51
Built from: Force build for hl2sdk-csgo update. · alliedmodders/sourcemod@3671a69 · GitHub
Build ID: 6079:3671a69
SourceMod: Half-Life 2 Scripting
--- Добавлено позже ---
Выполняются арифметические действия только же... разве не без разницы как SM ? Убедитесь сами что не один из вариантов не работает корректно.
--- Добавлено позже ---
PHP:
void ConvertSIDv2ToSIDv3(char[] szSID, char[] szOutput, int iMaxLength) 
{
    PrintToChatAll("Входит: %s", szSID);
    char parts[3][10];
    int universe;
    int steamid32;
    ExplodeString(szSID, ":", parts, sizeof(parts), sizeof(parts[]));
    ReplaceString(parts[0], sizeof(parts[]), "STEAM_", "");
    universe = StringToInt(parts[0]);
    if (universe == 0) universe = 1;
    steamid32 = StringToInt(parts[1]) + (StringToInt(parts[2]) << 1);
    Format(szOutput, iMaxLength, "U:%d:%d", universe, steamid32);
    PrintToChatAll("Выходит: %s", szOutput);
    return true;
}
Так работает только не хватает 1 цифры... почему?

Входит: STEAM_1:0:2135656012
Выходит: U:1:427131202 //а должно быть U:1:4271312024
--- Добавлено позже ---
Ребятки помогите пожалуйста.
--- Добавлено позже ---
char parts[3][15]; и все отлично работает... если у вас есть желание проанализировать что в ваших вариантах не так - буду только рад =)
 
Последнее редактирование:

Kailo

Участник
Сообщения
194
Реакции
896
Проверил, работает.
PHP:
stock void ConvertSIDv2ToSIDv3(char[] szSID, char[] szOutput, int iMaxLength)
{
    FormatEx(szOutput, iMaxLength, "[U:1:%u]", (StringToInt(szSID[10]) * 2) + (szSID[8] - 48));
}
Было 2 проблемы:
1) %d поменял на %u;
2) Ошибка с позицией символа, откуда начинается число, было 9 надо 10.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #27
@Jafa, да. константа. там всегда 1
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #28
@Jafa, обозначает то, что это пользователь.
 

Jafa

Участник
Сообщения
159
Реакции
3
@Kailo, [U:1: - подключившиеся из сети Интернет
[U:0: - подключившиеся из локальной сети?
--- Добавлено позже ---
Еще 1 вопросик бывают такие моменты когда Steamid3 сервер получает с ошибкой типо как на SteamID2 - STEAM_ID_PENDING и подобные.. когда просто сревер не получает реальный стимид клиента.. не раз такое встречал... как можно предусмотреть все эти варианты ошибки получения стим и просто кикать таких игроков.. ?
--- Добавлено позже ---
U_Regex = CompileRegex("/^\[U:[01]:[0-9]{3,12}\]$/i");
@R1KO, нашел ваш код для проверки SteamID3 ошибка error 027: invalid character constant по всей видимости что-то внутри "" не нравиться... подскажите что не так?
--- Добавлено позже ---
А что будет если
GetClientAuthId(int client, AuthIdType authType, char[] auth, int maxlen, bool validate)

bool validate

Check backend validation status. DO NOT PASS FALSE UNLESS YOU UNDERSTAND THE CONSEQUENCES, You WILL KNOW if you need to use this, MOST WILL NOT.

Перевел и ниче не понял)) для чего последний параметр?
 
Последнее редактирование:

MeowKus

Участник
Сообщения
98
Реакции
5
@Jafa, да. константа. там всегда 1
Добрый день подскажи пожалуйста как стим id поместить в "" чтоб было не STEAM_1:0:541622947 а "STEAM_1:0:541622947" без скобок не работает а в настройках шопа не ставится шоп от @stwx.
код rcon запроса (ПРИКРЕПЛЯЮ С ЦЕЛЬЮ ПОЛУЧЕНИЕ ПОМОЩИ):
protected function sendRcon($server, $cmd, $value)
    {
        $steam = new SteamID($_SESSION['steamid64']);
        $steamid_64 = $_SESSION['steamid64'];
        $steamid_32 = $_SESSION['steamid32'];
        $account_id = $steam->accountId();

        $cmd = str_replace("{steamid_64}", $steamid_64, $cmd);
        $cmd = str_replace("{steamid_32}", $steamid_32, $cmd);
        $cmd = str_replace("{account_id}", $account_id, $cmd);
        $cmd = str_replace("{value}", $value, $cmd);

        $ip = explode(":", $server->ip)[0];
        $port = explode(":", $server->ip)[1];

        $_RCON = new Rcon($ip, $port);
        if ($_RCON->Connect()) {
            $_RCON->RconPass($server->rcon);
            $_RCON->Command($cmd);
            $_RCON->Disconnect();
            return true;
        }
        return false;
    }

    // Запсукаем при покупке
    public function onBuyEvent($data)
    {
        $server = ServerController::getServer($data['item']->sid);
        $web_server = ServerController::getWebServer($server->web_sid);

        if ($this->sendRcon($web_server, $data['item']->value, $data['price']->value))
            return ["status" => "success", "message" => Store::translate("_RCON_ACQUIRED", ['item' => $data['item']->name])];
        return ["status" => "fail", "message" => Store::translate("_SERVER_ERROR")];
    }
 
Последнее редактирование модератором:

White Wolf

🍉
Сообщения
2,382
Реакции
2,187
  • Команда форума
  • #32
Добрый день подскажи пожалуйста как стим id поместить в "" чтоб было не STEAM_1:0:541622947 а "STEAM_1:0:541622947" без скобок не работает а в настройках шопа не ставится шоп от @stwx.
код rcon запроса (ПРИКРЕПЛЯЮ С ЦЕЛЬЮ ПОЛУЧЕНИЕ ПОМОЩИ):
protected function sendRcon($server, $cmd, $value)
    {
        $steam = new SteamID($_SESSION['steamid64']);
        $steamid_64 = $_SESSION['steamid64'];
        $steamid_32 = $_SESSION['steamid32'];
        $account_id = $steam->accountId();

        $cmd = str_replace("{steamid_64}", $steamid_64, $cmd);
        $cmd = str_replace("{steamid_32}", $steamid_32, $cmd);
        $cmd = str_replace("{account_id}", $account_id, $cmd);
        $cmd = str_replace("{value}", $value, $cmd);

        $ip = explode(":", $server->ip)[0];
        $port = explode(":", $server->ip)[1];

        $_RCON = new Rcon($ip, $port);
        if ($_RCON->Connect()) {
            $_RCON->RconPass($server->rcon);
            $_RCON->Command($cmd);
            $_RCON->Disconnect();
            return true;
        }
        return false;
    }

    // Запсукаем при покупке
    public function onBuyEvent($data)
    {
        $server = ServerController::getServer($data['item']->sid);
        $web_server = ServerController::getWebServer($server->web_sid);

        if ($this->sendRcon($web_server, $data['item']->value, $data['price']->value))
            return ["status" => "success", "message" => Store::translate("_RCON_ACQUIRED", ['item' => $data['item']->name])];
        return ["status" => "fail", "message" => Store::translate("_SERVER_ERROR")];
    }

Попробуйте для каждого реплейса где вам нужны кавычки сделать так:

PHP:
str_replace("{steamid_32}", "\"".$steamid_32."\"", $cmd);
 
Сверху Снизу