[EXTENSION] SteamWorks - получение SteamID владельца при использовании Family Sharing

Тема в разделе "Расширения", создана пользователем KorDen, 28 ноя 2013.

  1. KorDen

    KorDen Atra esterní ono thelduin! Ньюсмейкер

    Сообщения:
    2.194
    Симпатии:
    1.398
    Это расширение никак не связано со SteamTools!

    WTF?
    Не так давно Valve добавили в Steam новую возможность - Steam Family Sharing, позволяющий делиться библиотекой игр с другими людьми. Аккаунты с VAC-баном не могут им воспользоваться.
    Однако это ввело довольно серьезную проблему для администраторов - читер может зайти с другого аккаунта, поделившись библиотекой основного. Появились даже вот такие группы.
    После обсуждения Valve ввели новую функцию в библиотеку авторизации - возможность получения SteamID основного аккаунта.
    KyleS с AlliedModders сделал простое расширение, которое добавляет возможность использования этого forward'а в SM.

    ВНИМАНИЕ!
    Поскольку игры не обновлялись с момента добавления этой возможности, вам нужно будет заменить библиотеки авторизации на обновленные! Старые библиотеки будут выдавать мусор в переменной OwnerID. Библиотеки взяты из последнего Steamworks SDK (126a), их нужно скинуть в папку bin в корне сервера. Помните, что при запуске обновления через SteamCMD они могут замениться стандартными!

    Поставил. Что теперь?
    Теперь появился новый форвард SW_OnValidateClient(OwnerID, ClientID), который при авторизации (обычно после OnClientAuthorized) передает ID пользователя в формате, аналогичном нативу GetSteamAccountID

    Если вы используете SourceBans, то вам нужно добавить в конец плагина sourcebans.sp следующий код:
    PHP:
    #include <SteamWorks>
    public SW_OnValidateClient(OwnerSteamIDClientSteamID)
    {
        if(
    OwnerSteamID && OwnerSteamID!=ClientSteamID)
        {
            new 
    tmp;
            for(new 
    1<= MaxClientsi++)
            {
                if(
    IsClientConnected(i))
                {
                    
    tmp GetSteamAccountID(i);
                    if(
    tmp && tmp == ClientSteamID)
                    {
                        
    decl String:steamid[32];
                        
    Format(steamid,sizeof(steamid),"STEAM_0:%d:%d",OwnerSteamID%2,OwnerSteamID/2);
                        
    LogMessage("[SB] Checking FamilySharing user %L Owner: %s (OSID: %d, CSID: %d)",i,steamid,OwnerSteamID,ClientSteamID);
                        
    OnClientAuthorized(i,steamid);
                        break;
                    }
                }
            }
        }
    }
    Затем скопировать из архива SteamWorks.inc в папку scripting/include и скомпилировать плагин.
    PS: плагин работает, но ругается добавление в лог банов..

    Оригинал
     

    Вложения:

    Серый™, SaInT.P, CTe6eJIeK_vRn и ещё 1-му нравится это.
  2. SaInT.P

    SaInT.P

    Сообщения:
    1.270
    Симпатии:
    237
    Не качает libraries_linux.zip , пишет нет такой страницы, перезалейте, а я покачто качну с оригинала ;)
     
  3. KorDen

    KorDen Atra esterní ono thelduin! Ньюсмейкер

    Сообщения:
    2.194
    Симпатии:
    1.398
    SaInT.P нравится это.
  4. SaInT.P

    SaInT.P

    Сообщения:
    1.270
    Симпатии:
    237
    KorDen, Спасибо что перезалил, но я уже качнул с оригинала под линь)
    как я понял, в сб при бане такого игрока будут указано два STeam ID?
    и вообще как я понял, допустим, у чувака нет контры, я с ним поделился библеотекой и он может играть в контру?
    я чето невкурил))
     
  5. KorDen

    KorDen Atra esterní ono thelduin! Ньюсмейкер

    Сообщения:
    2.194
    Симпатии:
    1.398
    SaInT.P, Поясню систему работы Family Sharing.
    У твоего друга нет контры. Ты логинишься с его компа своим аккаунтом, утанавливаешь контру, авторизуешь этот комп в настройках. Далее перелогиниваешься в учетку друга, при первом запуске тебе на почту придет запрос на разрешение использования твоей библиотеки с аккаунта друга. Ты подтверждаешь (переходишь по ссылке в письме), и друг может играть.
    При этом учти, что дается библиотека. Т.е. одновременно играть в игры нельзя, при этом нельзя в том числе играть и в разные игры. Т.е. грубо говоря все равно что если бы он сидел с твоего акка, однако достижения и статистика идет личная, а не твоя. Если ты зайдешь в какую-то игру, его выкинет через 5 минут, предварительно предупредив.

    Если друг, играя в игру с твоей библиотеки сыграет с читом, который детектится VAC-ом, VAC-бан получат оба(!) аккаунта.

    Теперь о расширении. Расширение просто передает ID аккаунтов. Текущий вариант изменения SB предполагает только проверку, не забанен ли владелец игры на сервере. Позже думаю допилить функцию бана, чтобы банило владельца.
     
    Sam_Fisher и SaInT.P нравится это.
  6. SaInT.P

    SaInT.P

    Сообщения:
    1.270
    Симпатии:
    237
    KorDen, Понятно, спасибо )