<?xml version="1.0"?>
<rss version="2.0"><channel><title/><link>https://tesall.club/blogs/blog/443-razborki-so-steam-web-api/</link><description>&#x41E;&#x445; &#x443;&#x436; &#x44D;&#x442;&#x43E; &#x43F;&#x43E;&#x43B;&#x43D;&#x43E;&#x435; "&#x43D;&#x430;&#x43B;&#x438;&#x447;&#x438;&#x435;" &#x434;&#x43E;&#x43A;&#x443;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x446;&#x438;&#x438;</description><language>ru</language><item><title>Steam &#x438; "&#x41D;&#x435;&#x432;&#x438;&#x434;&#x438;&#x43C;&#x44B;&#x439;" &#x440;&#x435;&#x436;&#x438;&#x43C;</title><link>https://tesall.club/blogs/entry/2262-steam-i-34-nevidimyy-34-rejim/</link><description><![CDATA[Посвящается тем, кто хочет знать, когда друг последний раз действительно был в сети.<br>
 <br>
Приблизительно летом 2018 года (даже приблизительную дату не помню: память уже не та), в Steam ввели обновленный чат. Он хорош, спору нет. Вместе с ним были полностью "утилизированы" старые статусы "Хочет играть" и "Хочет обменяться", и добавлен один новый: "Невидимый".<br>
Чем отличается "Невидимый" от простого "Не в сети"? Вы по прежнему прибываете в Сети, но когда Вы выходите из Steam, для всех по прежнему висит старая дата оффлайна. А так же функционал чата не блокируется. Вы можете общаться с друзьями, как ни в чём не бывало.<br>
Для тех, кому новый дизайн не по душе, так же были добавлены новые параметры запуска клиента: <strong>-nofriendsui</strong> и <strong>-nochatui</strong>. Первый выключал новый интерфейс списка друзей, а второй - новый интерфейс самого чата.<br>
 <br>
Не так давно, эти аргументы перестали работать. Можете прописывать сколько угодно раз их, Steam по прежнему будет запускаться с новым интерфейсом списка друзей и чата. <a href="https://www.reddit.com/r/Steam/comments/9veipa/nofriendsui_nochatui_parameters_are_now/e9cnmti/" rel="nofollow external noopener noreferrer" target="_blank">На Реддите</a> быстро нашли сразу два решения:[list="1"]<br>
[*]<strong>Замена файлов Steam и прописывание аргументов запуска, вроде как "отключение проверки целостности файлов клиента" и т.д.</strong>. Решает вопрос, но если игра требует новый Steam API - полная жопа.<br>
[*]<strong>SteamOS</strong>. У Стима есть ещё один ключ запуска: <strong>-steamos</strong>. Как я понимаю из его названия, с ним запускается клиент на операционке SteamOS от Valve, которая ещё базируется на Линуксе. Вдруг кто не слышал о ней, можно прочитать <a href="https://store.steampowered.com/steamos/buildyourown" rel="nofollow external noopener noreferrer" target="_blank">здесь</a>, а скачать - <a href="https://store.steampowered.com/steamos/download/?ver=custom" rel="nofollow external noopener noreferrer" target="_blank">здесь</a>.<br>
[/list]Первый вариант я не пробовал, сразу честно скажу. Мне куда больше приглянулся второй.<br>
Прописываем <strong>-steamos</strong> в аргументы запуска клиента. Это "Объект" у ярлыка.<br>
 <br>
<br>
<p style="text-align: center;"><img alt="ayi958b.png" class="ipsImage ipsImage_thumbnailed" data-fileid="147000" data-ratio="1.50" style="height:auto;" width="398" data-src="https://tesall.club/uploads/monthly_2019_01/ayi958b.png.di2gjb0kpeso6wfnrcau1xqlhv79ty5m.png" src="https://tesall.club/applications/core/interface/js/spacer.png"><br>
<span style="color: #a9a9a9"><span style="font-size: medium;"><em>Вот так вот</em></span></span></p><br>
Если путь к EXE-файлу в кавычках - прописываем после них. Если не в кавычках - просто после самого пути через пробел.<br>
При запуске клиента лицезреем старый, привычный интерфейс друзей и чата.<br>
 <br>
<br>
<p style="text-align: center;"><img alt="5moc3pg.png" class="ipsImage ipsImage_thumbnailed" data-fileid="147001" data-ratio="0.95" style="height:auto;" width="754" data-src="https://tesall.club/uploads/monthly_2019_01/5moc3pg.png.nl15euyvdw4aif82mjrpxh9gk0tboz63.png" src="https://tesall.club/applications/core/interface/js/spacer.png"><br>
<span style="color: #a9a9a9"><span style="font-size: medium;"><em>Старый, привычный глазу интерфейс друзей и чата.</em></span></span></p><br>
До какого-то момента всё в принципе устраивало. Здесь, пожалуй, сделаю небольшое отступление.<br>
В домашней сети у меня два компьютера. Везде прописаны, на данный момент, разные Steam-аккаунты, хоть они друг с другом и зафрендленные (один есть в друзьях у другого, and vice versa).<br>
Понимаете, о чём пойдёт речь дальше?<br>
 <br>
Я вхожу в ту категорию людей, которая с новым интерфейсом всегда сидит в невидимке. Конкретно в данный момент, таковым устройством является только ноутбук. А эксперименты проводились со стационарного компа, где я всегда "В сети", ибо об аккаунте знают не все, и потому личка пустует.<br>
Случайно обратил внимание на дату оффлайна моего аккаунта, который прописан на ноутбуке. Она, практически, совпадала с датой, когда я последний раз выключал ноутбук. И даже отличалась с той, которая пишется на самой странице профиля.<br>
 <br>
<br>
<p style="text-align: center;"><a href="https://tesall.club/uploads/monthly_2019_01/hunwnz6.png.tjv7w5mc489n2zafbodipq0kl13sgrx6.png" class="ipsAttachLink ipsAttachLink_image"><img alt="hunwnz6.png" class="ipsImage ipsImage_thumbnailed" data-fileid="147002" data-ratio="2.52" style="height:auto;" width="1000" data-src="https://tesall.club/uploads/monthly_2019_01/hunwnz6.thumb.png.84lk6tp975vmyfgaoursbhd2xeci0wj1.png" src="https://tesall.club/applications/core/interface/js/spacer.png"></a><br>
<span style="color: #a9a9a9"><span style="font-size: medium;"><em>о_О</em></span></span></p><br>
При этом, отмечу тот факт, что клиент запущен менее часа назад, разрывов с сетью не было (у старого интерфейса был баг, что после восстановления соединения со Steam, у всех оффлайн-пользователей становилась единая дата последнего оффлайна: когда был разрыв с Интернетом).<br>
Т.е., по сути, просто включив старый интерфейс друзей (через костыли, да), можно увидеть реальную дату оффлайна каждого игрока.<br>
А что, если именно это и послужило причиной отключения возможности мирного перехода на старый интерфейс друзей?.. :rolleyes:<br>
 <br>
<strong>P.S.</strong>: Справедливости ради, отмечу:[list]<br>
[*]На старом интерфейсе Вам не покажет ни одного пользователя, как "В сети", который, на самом деле, пребывает в невидимке. Хоть что-то Валв предусмотрели.<br>
[*]На старом интерфейсе, так же, Вам сразу после выхода любого пользователя из клиента, не покажет, что он был в сети только что. Для этого Вам придётся в любом случае перезапустить клиент.<br>
[*]Даже после перезапуска клиента сразу после того, как другой пользователь закрыл его, Вам не покажет, что он "Был в сети только что". Я сейчас тестировал специально этот момент. Нужно перезапускать клиент через 5 минут, или позже, чтобы изменения в дате последнего онлайна отобразились.<br>
[/list]<br>
<p style="text-align: center;"><a href="https://tesall.club/uploads/monthly_2019_01/ozy9bhl.png.n0digj38x7tbzel451uomqkypvsfc6rh.png" class="ipsAttachLink ipsAttachLink_image"><img alt="ozy9bhl.png" class="ipsImage ipsImage_thumbnailed" data-fileid="147003" data-ratio="2.44" style="height:auto;" width="1000" data-src="https://tesall.club/uploads/monthly_2019_01/ozy9bhl.thumb.png.gp4fc56qa3tvbw7zdsnyrhm2o1lu9iej.png" src="https://tesall.club/applications/core/interface/js/spacer.png"></a><br>
<span style="color: #a9a9a9"><span style="font-size: medium;"><em>При этом, при перезапуске через 5 минут, Вам напишет, что пользователь был в сети последний раз именно 5 минут назад, а не "Только что".</em></span></span></p>]]></description><guid isPermaLink="false">2262</guid><pubDate>Sun, 13 Jan 2019 20:00:59 +0000</pubDate></item><item><title>CKM, &#x438;&#x43B;&#x438; Creation Kit Mod</title><link>https://tesall.club/blogs/entry/2254-ckm-ili-creation-kit-mod/</link><description><![CDATA[<strong>CKM</strong>, или (возможная расшифровка) <strong>Creation Kit Mod</strong> - "архив" от Беседки, созданный для "бандлинга" модов из Creation Kit в Воркшоп. Применялся ранее до введения системы платных модов, после файлы начали скачиваться "как есть", без каких либо архивов.<br>
Очень примитивный формат. Открыв в HEX-редакторе, и немного включив мозг, можно понять, что к чему.<br>
<br>
Первыми четырьмя байтами в архиве всегда записан размер BSA-архива <a href="https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA_%D0%B1%D0%B0%D0%B9%D1%82%D0%BE%D0%B2#%D0%9F%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA_%D0%BE%D1%82_%D0%BC%D0%BB%D0%B0%D0%B4%D1%88%D0%B5%D0%B3%D0%BE_%D0%BA_%D1%81%D1%82%D0%B0%D1%80%D1%88%D0%B5%D0%BC%D1%83" rel="nofollow external noopener noreferrer" target="_blank">в Little Endian формате (байты идут наоборот)</a>. Возможно, есть моды и без BSA в CKM. У меня таких нет, пока что. В таких случаях, скорее всего будет восемь нолей в HEX-представлении.<br>
<br>
<br>
<br>
<p style="text-align: center;"><img alt="explorer_jNXwtA4yHV.png" class="ipsImage ipsImage_thumbnailed" data-fileid="146997" data-ratio="1.93" style="height:auto;" width="899" data-src="https://tesall.club/uploads/monthly_2019_01/explorer-jnxwta4yhv.png.vuicx3jb09fl2mnr7541qzwat8gpsoyh.png" src="https://tesall.club/applications/core/interface/js/spacer.png"><br>
<span style="color: #a9a9a9"><span style="font-size: medium;"><em>Открытый в HEX-редакторе CKM, свойства записанного внутри BSA-архива и переведённый размер в HEX</em></span></span></p>При переводе берём за основу именно фактический размер (100 506 607 байт), а не тот, который в итоге на диске (100 507 648 байт).<br>
Вводим число в калькулятор в режиме программиста, предварительно выбрав DEC, после тыкаем на HEX-режим. Добавляем ноль в начале, если кол-во знаков не кратно двум, получаем размер в HEX: <strong>05 FD 9B EF</strong>.<br>
Теперь переворачиваем: <strong>EF 9B FD 05</strong>. Видим полное совпадение. Значит первыми четырьмя байтами у нас действительно идёт размер BSA-архива. Странно, кстати, что заголовка у файла нет, ну да ладно...<br>
Сразу после размера записан сам BSA, "как есть". Вообще без изменений. Без сжатия и вот этого всего. Видимо, решили не экономить на трафике. Печально, конечно.<br>
Скипнем весь BSA, ведь нам известен размер (записан первыми четырьмя байтами). Идёт четыре нулевых байта (кстати, они идут, даже если BSA архива в файле нет (таки нашёл CKM без BSA)), и сразу начинается сам ESP/ESM. Видно по заголовку (TES4):<br>
 <br>
<br>
<p style="text-align: center;"><img alt="HxD_IddbSwvOBB.png" class="ipsImage ipsImage_thumbnailed" data-fileid="146998" data-ratio="1.51" style="height:auto;" width="664" data-src="https://tesall.club/uploads/monthly_2019_01/hxd-iddbswvobb.png.ufnxqyst6a85wv1k9g4b3zr2mp07cheo.png" src="https://tesall.club/applications/core/interface/js/spacer.png"><br>
<span style="color: #a9a9a9"><span style="font-size: medium;"><em>Всё, что идёт до красной черты - BSA + 4 нулевых байта (смещающие?). После - ESP.</em></span></span></p>Идёт сам файл плагина до конца файла. Т.е. как только поток закончился - всё, это конец ESP.<br>
На коленке набросал на Шарпе класс, который принимает на вход:[list]<br>
[*]Путь к файлу или поток с CKM.<br>
[*]Путь к папке, куда надо распаковать.<br>
[*]Имя мода (используется при формировании имён BSP и ESP-файла).<br>
[/list]Можно посмотреть <a href="https://gist.github.com/CrazyHackGUT/eaa11ff6cb7f8160f6245b3236aed277" rel="nofollow external noopener noreferrer" target="_blank">здесь</a>. Возможно, как-нибудь сделаю и упаковщик, и оформлю в виде библиотеки в NuGet. Пока работает - и хрен с ним...<br>
<br>
Для себя написал небольшую консольную утилитку, которая умеет распаковывать файлы, если:[list]<br>
[*]Дропнуть файл на неё исполняемый (Drag'n'Drop);<br>
[*]Передать аргументом запуска (можно не в кавычках, если пробелы; я не предусматривал наличие каких-либо иных аргументов);<br>
[*]Просто запустить, ввести вручную или вставить в окно консоли путь к файлу.<br>
[/list]Можно указать путь относительно бинарника. Сожрёт всё равно.<br>
По предложению одного из форумчан в комментарии, публикую архив с ней. Писалось для себя, потому если возникнет какая-нибудь ошибка - отрапортует в консоли полностью все технические детали.<br>
[sharedmedia="downloads:files:10360"]<br>
<br>
 <br>
<br>
<p style="text-align: center;"><img alt="MuIwRRxnPS.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="146999" data-ratio="1.26" style="height:auto;" width="723" data-src="https://tesall.club/uploads/monthly_2019_01/muiwrrxnps.gif.yr38zomnuf7lbgi49w60eat2jxcqshvp.gif" src="https://tesall.club/applications/core/interface/js/spacer.png"><br>
<span style="color: #a9a9a9"><span style="font-size: medium;"><em>Небольшая демонстрация</em></span></span></p>]]></description><guid isPermaLink="false">2254</guid><pubDate>Mon, 07 Jan 2019 11:19:00 +0000</pubDate></item><item><title>Steam Workshop &#x438; Skyrim</title><link>https://tesall.club/blogs/entry/2253-steam-workshop-i-skyrim/</link><description><![CDATA[Переустановив Винду очередной раз на компьютере, и захотев сыграть в Скайрим, пропало всякое желание скачивать на компьютер Steam, снова проходить авторизацию и искать, на каком из телефонов сейчас установлен аутентификатор.<br>
Как человек, купивший однажды уже Скайрим, и имеющий в локалке компьютер с уже установленнным и залогиненным Стимом, выкачал Скайрим оттуда и сам вылечил. Но тема сейчас не об этом. Я использую для Скайрима Steam Workshop. Бывают там иногда годные моды, да. Но суть не в этом. Мне хотелось иметь всю свою коллекцию модов из Воркшопа так же на "пиратке". Даже вручную скачанные. На Нексусе искать лень, а я ж программист немного, и когда-то давно писал утилитку для скачивания модов из Воркшопа по ссылке (огромное спасибо Керберу, который помог разобраться и написать тот самый загрузчик, который уже сотню раз переписывался на различных ЯП).<br>
Выдернул перечень ссылок на подписки с ноута, начал кормить программе. А она часть файлов (в частности, выложенных после событий с платными модами) не могла скачать: Стим попросту ссылки не отдавал. А те, что скачивала, хранились в непонятном формате <em>CKM</em> (<em>Creation Kit Mod?</em>).<br>
<br>
<br>
<p style="text-align: center;"><img alt="firefox_BtfBVHsiYw.png" class="ipsImage ipsImage_thumbnailed" data-fileid="146992" data-ratio="1.24" style="height:auto;" width="902" data-src="https://tesall.club/uploads/monthly_2019_01/firefox-btfbvhsiyw.png.h2d45omzlk6nyfxwpibsgra3uq079t1v.png" src="https://tesall.club/applications/core/interface/js/spacer.png"><br>
<span style="color: #a9a9a9"><span style="font-size: medium;"><em>Новый формат! Слава Беседке!</em></span></span></p>На удивление, какой-либо информации о нём в Сети не нашёл. Или плохо искал... Всё, на что натыкался - скриншоты разных пользователей о том, что лаунчер рапортует о невозможности распаковать CKM. В основном всё на Гитхабе в репозитории Протона (форк Wine для запуска Виндоигр под Линуксом). <a href="https://github.com/ValveSoftware/Proton/issues/460#issuecomment-421073575" rel="nofollow external noopener noreferrer" target="_blank">Как пример</a>.<br>
О том, что из себя представляет этот формат, я <a href="/blog/443/entry-2254-ckm-ili-creation-kit-mod/">напишу чуть позже</a>. Расковырял таки за один вечер. Очень примитивный формат.<br>
Суть этой статьи вот в чём: у всех модов, выпущенных после первого введения платных модов в Воркшопе, напрочь отсутствует прямая ссылка на скачивание в ответе API!<br>
<br>
<br>
<p style="text-align: center;"><img alt="firefox_LXgP1O6Mwi.png" class="ipsImage ipsImage_thumbnailed" data-fileid="146993" data-ratio="1.89" style="height:auto;" width="439" data-src="https://tesall.club/uploads/monthly_2019_01/firefox-lxgp1o6mwi.png.u4y3ks27anqj56hgtedfpv0ilc1wzo9x.png" src="https://tesall.club/applications/core/interface/js/spacer.png"><br>
<span style="color: #a9a9a9"><span style="font-size: medium;"><em>Зато присутствует ID в UGC. Но всё равно, верните ссылку! :(</em></span></span></p>И даже если сделать запрос к методу, который возвращает ссылки и данные обо всём UGC (User Generated Content), тоже ничего нет: Steam сообщает, что у него такого файла нет.<br>
<br>
<br>
<p style="text-align: center;"><img alt="firefox_2oD26lUctc.png" class="ipsImage ipsImage_thumbnailed" data-fileid="146994" data-ratio="2.60" style="height:auto;" width="527" data-src="https://tesall.club/uploads/monthly_2019_01/firefox-2od26luctc.png.8yl62zhiwq3ov95mxcfdrngpteasj04k.png" src="https://tesall.club/applications/core/interface/js/spacer.png"><br>
<span style="color: #a9a9a9"><span style="font-size: medium;"><em>Код 9 означает, что файла нет, и никогда не было. Заставляет задуматься.</em></span></span></p>И это странно выглядит. Часть бесплатных файлов можно свободно скачать, имея доступ к Steam Web API, а другую часть - нет.<br>
Если поковыряться дальше, отчасти становится ясно, почему.<br>
Раньше моды бандлились на пользовательский компьютер в виде этого самого CKM-файла, который в дальнейшем распаковывался лаунчером при первом запуске. Теперь они сразу идут несколькими файлами: сам BSA и ESP. Ещё может поставляться превьюшка мода:<br>
<br>
<br>
<p style="text-align: center;"><img alt="explorer_xmxBwN0o13.png" class="ipsImage ipsImage_thumbnailed" data-fileid="146995" data-ratio="2.04" style="height:auto;" width="510" data-src="https://tesall.club/uploads/monthly_2019_01/explorer-xmxbwn0o13.png.yn5i0674ogcz3j1ev92krswqfbmladhu.png" src="https://tesall.club/applications/core/interface/js/spacer.png"><br>
<span style="color: #a9a9a9"><span style="font-size: medium;"><em>Все файлы, которые качает для Скайрима Steam, хранятся в %STEAMAPPS%/workshop/content/72850</em></span></span></p>API не может вернуть более одной ссылки, но и "архивами" собственного производства Беседки, почему-то теперь они не поставляются. Потому когда происходит скачивание мода, клиент идёт на свои собственные сервера, откуда качает игры. В моём случае, он всегда ходил на <em>valve520.steamcontent.com</em>.<br>
Я пока ещё не придумал, как качать такие моды, кроме как иметь всегда запущенный где-нибудь инстанс SteamCMD с активной авторизацией в Стиме, и качать через него. Анонимно качать оно не даёт: сразу в лицо кидает Failure. А на выложенных до появления платных модов просто таймаут. А жаль, очень хотелось анонимно...<br>
<br>
<br>
<p style="text-align: center;"><img alt="steamcmd_98fA0dCjRS.png" class="ipsImage ipsImage_thumbnailed" data-fileid="146996" data-ratio="1.31" style="height:auto;" width="677" data-src="https://tesall.club/uploads/monthly_2019_01/steamcmd-98fa0dcjrs.png.bfsv9qrnwojt20ek7x4g5hz18u3amip6.png" src="https://tesall.club/applications/core/interface/js/spacer.png"><br>
<span style="color: #a9a9a9"><span style="font-size: medium;"><em>У Стима есть чудесная команда: <strong>workshop_download_item</strong>.<br>
Первым в ней указывается AppID (72850 для Скайрима), вторым - идентификатор предмета.<br>
Первый Failure - мод, выложенный/обновлённый ПОСЛЕ появления платных. А там, где таймауты - ДО.</em></span></span></p>]]></description><guid isPermaLink="false">2253</guid><pubDate>Mon, 07 Jan 2019 11:16:00 +0000</pubDate></item></channel></rss>
