Перейти к содержанию

CrazyHackGUT

Клуб TESALL
  • Постов

    577
  • Зарегистрирован

  • Посещение

  • Победитель дней

    1

Записи блога, опубликованные CrazyHackGUT

  1. CrazyHackGUT
    Посвящается тем, кто хочет знать, когда друг последний раз действительно был в сети.

    Приблизительно летом 2018 года (даже приблизительную дату не помню: память уже не та), в Steam ввели обновленный чат. Он хорош, спору нет. Вместе с ним были полностью "утилизированы" старые статусы "Хочет играть" и "Хочет обменяться", и добавлен один новый: "Невидимый".
    Чем отличается "Невидимый" от простого "Не в сети"? Вы по прежнему прибываете в Сети, но когда Вы выходите из Steam, для всех по прежнему висит старая дата оффлайна. А так же функционал чата не блокируется. Вы можете общаться с друзьями, как ни в чём не бывало.
    Для тех, кому новый дизайн не по душе, так же были добавлены новые параметры запуска клиента: -nofriendsui и -nochatui. Первый выключал новый интерфейс списка друзей, а второй - новый интерфейс самого чата.

    Не так давно, эти аргументы перестали работать. Можете прописывать сколько угодно раз их, Steam по прежнему будет запускаться с новым интерфейсом списка друзей и чата. На Реддите быстро нашли сразу два решения:[list="1"]
    [*]Замена файлов Steam и прописывание аргументов запуска, вроде как "отключение проверки целостности файлов клиента" и т.д.. Решает вопрос, но если игра требует новый Steam API - полная жопа.
    [*]SteamOS. У Стима есть ещё один ключ запуска: -steamos. Как я понимаю из его названия, с ним запускается клиент на операционке SteamOS от Valve, которая ещё базируется на Линуксе. Вдруг кто не слышал о ней, можно прочитать здесь, а скачать - здесь.
    [/list]Первый вариант я не пробовал, сразу честно скажу. Мне куда больше приглянулся второй.
    Прописываем -steamos в аргументы запуска клиента. Это "Объект" у ярлыка.



    Вот так вот

    Если путь к EXE-файлу в кавычках - прописываем после них. Если не в кавычках - просто после самого пути через пробел.
    При запуске клиента лицезреем старый, привычный интерфейс друзей и чата.



    Старый, привычный глазу интерфейс друзей и чата.

    До какого-то момента всё в принципе устраивало. Здесь, пожалуй, сделаю небольшое отступление.
    В домашней сети у меня два компьютера. Везде прописаны, на данный момент, разные Steam-аккаунты, хоть они друг с другом и зафрендленные (один есть в друзьях у другого, and vice versa).
    Понимаете, о чём пойдёт речь дальше?

    Я вхожу в ту категорию людей, которая с новым интерфейсом всегда сидит в невидимке. Конкретно в данный момент, таковым устройством является только ноутбук. А эксперименты проводились со стационарного компа, где я всегда "В сети", ибо об аккаунте знают не все, и потому личка пустует.
    Случайно обратил внимание на дату оффлайна моего аккаунта, который прописан на ноутбуке. Она, практически, совпадала с датой, когда я последний раз выключал ноутбук. И даже отличалась с той, которая пишется на самой странице профиля.



    о_О

    При этом, отмечу тот факт, что клиент запущен менее часа назад, разрывов с сетью не было (у старого интерфейса был баг, что после восстановления соединения со Steam, у всех оффлайн-пользователей становилась единая дата последнего оффлайна: когда был разрыв с Интернетом).
    Т.е., по сути, просто включив старый интерфейс друзей (через костыли, да), можно увидеть реальную дату оффлайна каждого игрока.
    А что, если именно это и послужило причиной отключения возможности мирного перехода на старый интерфейс друзей?.. :rolleyes:

    P.S.: Справедливости ради, отмечу:[list]
    [*]На старом интерфейсе Вам не покажет ни одного пользователя, как "В сети", который, на самом деле, пребывает в невидимке. Хоть что-то Валв предусмотрели.
    [*]На старом интерфейсе, так же, Вам сразу после выхода любого пользователя из клиента, не покажет, что он был в сети только что. Для этого Вам придётся в любом случае перезапустить клиент.
    [*]Даже после перезапуска клиента сразу после того, как другой пользователь закрыл его, Вам не покажет, что он "Был в сети только что". Я сейчас тестировал специально этот момент. Нужно перезапускать клиент через 5 минут, или позже, чтобы изменения в дате последнего онлайна отобразились.
    [/list]

    При этом, при перезапуске через 5 минут, Вам напишет, что пользователь был в сети последний раз именно 5 минут назад, а не "Только что".
  2. CrazyHackGUT

    Форматы файлов
    CKM, или (возможная расшифровка) Creation Kit Mod - "архив" от Беседки, созданный для "бандлинга" модов из Creation Kit в Воркшоп. Применялся ранее до введения системы платных модов, после файлы начали скачиваться "как есть", без каких либо архивов.
    Очень примитивный формат. Открыв в HEX-редакторе, и немного включив мозг, можно понять, что к чему.

    Первыми четырьмя байтами в архиве всегда записан размер BSA-архива в Little Endian формате (байты идут наоборот). Возможно, есть моды и без BSA в CKM. У меня таких нет, пока что. В таких случаях, скорее всего будет восемь нолей в HEX-представлении.




    Открытый в HEX-редакторе CKM, свойства записанного внутри BSA-архива и переведённый размер в HEX
    При переводе берём за основу именно фактический размер (100 506 607 байт), а не тот, который в итоге на диске (100 507 648 байт).
    Вводим число в калькулятор в режиме программиста, предварительно выбрав DEC, после тыкаем на HEX-режим. Добавляем ноль в начале, если кол-во знаков не кратно двум, получаем размер в HEX: 05 FD 9B EF.
    Теперь переворачиваем: EF 9B FD 05. Видим полное совпадение. Значит первыми четырьмя байтами у нас действительно идёт размер BSA-архива. Странно, кстати, что заголовка у файла нет, ну да ладно...
    Сразу после размера записан сам BSA, "как есть". Вообще без изменений. Без сжатия и вот этого всего. Видимо, решили не экономить на трафике. Печально, конечно.
    Скипнем весь BSA, ведь нам известен размер (записан первыми четырьмя байтами). Идёт четыре нулевых байта (кстати, они идут, даже если BSA архива в файле нет (таки нашёл CKM без BSA)), и сразу начинается сам ESP/ESM. Видно по заголовку (TES4):



    Всё, что идёт до красной черты - BSA + 4 нулевых байта (смещающие?). После - ESP.
    Идёт сам файл плагина до конца файла. Т.е. как только поток закончился - всё, это конец ESP.
    На коленке набросал на Шарпе класс, который принимает на вход:[list]
    [*]Путь к файлу или поток с CKM.
    [*]Путь к папке, куда надо распаковать.
    [*]Имя мода (используется при формировании имён BSP и ESP-файла).
    [/list]Можно посмотреть здесь. Возможно, как-нибудь сделаю и упаковщик, и оформлю в виде библиотеки в NuGet. Пока работает - и хрен с ним...

    Для себя написал небольшую консольную утилитку, которая умеет распаковывать файлы, если:[list]
    [*]Дропнуть файл на неё исполняемый (Drag'n'Drop);
    [*]Передать аргументом запуска (можно не в кавычках, если пробелы; я не предусматривал наличие каких-либо иных аргументов);
    [*]Просто запустить, ввести вручную или вставить в окно консоли путь к файлу.
    [/list]Можно указать путь относительно бинарника. Сожрёт всё равно.
    По предложению одного из форумчан в комментарии, публикую архив с ней. Писалось для себя, потому если возникнет какая-нибудь ошибка - отрапортует в консоли полностью все технические детали.
    [sharedmedia="downloads:files:10360"]




    Небольшая демонстрация
  3. CrazyHackGUT

    Steam Workshop
    Переустановив Винду очередной раз на компьютере, и захотев сыграть в Скайрим, пропало всякое желание скачивать на компьютер Steam, снова проходить авторизацию и искать, на каком из телефонов сейчас установлен аутентификатор.
    Как человек, купивший однажды уже Скайрим, и имеющий в локалке компьютер с уже установленнным и залогиненным Стимом, выкачал Скайрим оттуда и сам вылечил. Но тема сейчас не об этом. Я использую для Скайрима Steam Workshop. Бывают там иногда годные моды, да. Но суть не в этом. Мне хотелось иметь всю свою коллекцию модов из Воркшопа так же на "пиратке". Даже вручную скачанные. На Нексусе искать лень, а я ж программист немного, и когда-то давно писал утилитку для скачивания модов из Воркшопа по ссылке (огромное спасибо Керберу, который помог разобраться и написать тот самый загрузчик, который уже сотню раз переписывался на различных ЯП).
    Выдернул перечень ссылок на подписки с ноута, начал кормить программе. А она часть файлов (в частности, выложенных после событий с платными модами) не могла скачать: Стим попросту ссылки не отдавал. А те, что скачивала, хранились в непонятном формате CKM (Creation Kit Mod?).



    Новый формат! Слава Беседке!
    На удивление, какой-либо информации о нём в Сети не нашёл. Или плохо искал... Всё, на что натыкался - скриншоты разных пользователей о том, что лаунчер рапортует о невозможности распаковать CKM. В основном всё на Гитхабе в репозитории Протона (форк Wine для запуска Виндоигр под Линуксом). Как пример.
    О том, что из себя представляет этот формат, я напишу чуть позже. Расковырял таки за один вечер. Очень примитивный формат.
    Суть этой статьи вот в чём: у всех модов, выпущенных после первого введения платных модов в Воркшопе, напрочь отсутствует прямая ссылка на скачивание в ответе API!



    Зато присутствует ID в UGC. Но всё равно, верните ссылку! :(
    И даже если сделать запрос к методу, который возвращает ссылки и данные обо всём UGC (User Generated Content), тоже ничего нет: Steam сообщает, что у него такого файла нет.



    Код 9 означает, что файла нет, и никогда не было. Заставляет задуматься.
    И это странно выглядит. Часть бесплатных файлов можно свободно скачать, имея доступ к Steam Web API, а другую часть - нет.
    Если поковыряться дальше, отчасти становится ясно, почему.
    Раньше моды бандлились на пользовательский компьютер в виде этого самого CKM-файла, который в дальнейшем распаковывался лаунчером при первом запуске. Теперь они сразу идут несколькими файлами: сам BSA и ESP. Ещё может поставляться превьюшка мода:



    Все файлы, которые качает для Скайрима Steam, хранятся в %STEAMAPPS%/workshop/content/72850
    API не может вернуть более одной ссылки, но и "архивами" собственного производства Беседки, почему-то теперь они не поставляются. Потому когда происходит скачивание мода, клиент идёт на свои собственные сервера, откуда качает игры. В моём случае, он всегда ходил на valve520.steamcontent.com.
    Я пока ещё не придумал, как качать такие моды, кроме как иметь всегда запущенный где-нибудь инстанс SteamCMD с активной авторизацией в Стиме, и качать через него. Анонимно качать оно не даёт: сразу в лицо кидает Failure. А на выложенных до появления платных модов просто таймаут. А жаль, очень хотелось анонимно...



    У Стима есть чудесная команда: workshop_download_item.
    Первым в ней указывается AppID (72850 для Скайрима), вторым - идентификатор предмета.
    Первый Failure - мод, выложенный/обновлённый ПОСЛЕ появления платных. А там, где таймауты - ДО.
×
×
  • Создать...