Программное обеспечение: запуск режима League of Legends spectator из командной строки (Mac)

фон: tl; dr В конце

League of Legends имеет режим зрителя, в котором вы можете смотреть чужую игру (по существу повтор) с задержкой в 3 минуты.
популярный сайт LOL OP.GG придумал умный способ размещения этих игр для зрителей на своих собственных серверах, тем самым делая их воспроизводимыми, а не доступными только во время игры (как это делает Riot).

если вы запрашиваете повтор из OP.GG, оно посылает серию файл, который ищет, где находится лига, а затем происходит волшебство:

    @start "" "League of Legends.exe" "8394" "LoLLauncher.exe" "" "spectator fspectate.op.gg:4081 tjJbtRLQ/HMV7HuAxWV0XsXoRB4OmFBr 1391881421 NA1"

это прекрасно работает на Windows. Я пытаюсь заставить его работать на Mac (есть официальный клиент).

сначала я попытался запустить ту же команду вручную, (разъемной для удобства)

/Applications/ ... /LeagueOfLegends.app/ ... /LeagueofLegends 8393 LoLLauncher 
/Applications/ ... /LolClient spectator fspectate.op.gg:4081 tjJbtRLQ/HMV7HuAxWV0XsXoRB4OmFBr 1391881421 NA1

запуск этого, однако, просто запускает LoLLauncher, который закрывает все активные процессы Лиги. То же самое происходит, если я просто звоните /Applications/ ... /LeagueOfLegends.app/ ... /LeagueofLegends

затем я попытался увидеть, что на самом деле происходит, когда режим наблюдателя инициируется, поэтому я побежал $ ps -axf | grep -i lol, который показал

UID   PID  PPID   C STIME   TTY           TIME CMD
503  3085     1   0 Wed02pm ??         0:00.00 (LolClient)
503 24607     1   0  9:19am ??         0:00.98 /Applications/League of Legends.app/Contents/LOL/RADS/system/UserKernel.app/Contents/MacOS/UserKernel updateandrun lol_launcher LoLLauncher.app
503 24610 24607   0  9:19am ??         1:08.76 /Applications/League of Legends.app/Contents/LoL/RADS/projects/lol_launcher/releases/0.0.0.122/deploy/LoLLauncher.app/Contents/MacOS/LoLLauncher
503 24611 24610   0  9:19am ??         1:23.02 /Applications/League of Legends.app/Contents/LoL/RADS/projects/lol_air_client/releases/0.0.0.127/deploy/bin/LolClient -runtime . -nodebug META-INFAIRapplication.xml . -- 8393
503 24927 24610   0  9:44am ??         0:03.37 /Applications/League of Legends.app/Contents/LoL/RADS/solutions/lol_game_client_sln/releases/0.0.0.117/deploy/LeagueOfLegends.app/Contents/MacOS/LeagueofLegends 8394 LoLLauncher /Applications/League of Legends.app/Contents/LoL/RADS/projects/lol_air_client/releases/0.0.0.127/deploy/bin/LolClient spectator 216.133.234.17:8088 Yn1oMX/n3LpXNebibzUa1i3Z+s2HV0ul 1400781241 NA1

Процентов:

  • здесь (LolClient) который я не могу убить, это PID.
  • UserKernel updateandrun lol_launcher LoLLauncher.app впервые запущен.
  • LoLLauncher начинается UserKernel (как видно из PPID)
  • очень длинные команды (ПИД: 24927) как зритель запустил режим и и запустил UserKernel.
  • режим наблюдателя запускается точно так же, как и OP.GG .бат хотел, с той лишь разницей, что режим зрителя подключается к Riot, а не к OP.Сервер наблюдения GG.

я попытался прикрепить GDB к LolClient, но я не мог получить от него ничего значимого, так как это приложение Adobe AIR (и я никогда не использовал GDB с кодом, отличным от моего собственного).

далее я побежал dtruss -a -b 100m -f -p $PID на все, что я мог думать: о LolClient на LolLauncher и UserKernel и снял полмиллиона произведенных линий. Я нашел такие вещи, как запрос GET, используемый для получения информации об игре для наблюдения, но я не мог видеть никакого запуска эквивалента League of Legends.exe с параметрами зрителя.

наконец, я побежал lsof | grep -i lol чтобы увидеть, если что-то еще было открыто в процессе, но не нашел ничего, что казалось целесообразным. Открытые были UserKernel,LolLauncher,LolClient, Adobe AIR,LeagueofLegends а то Bugsplat, все из которых ожидают. Ничто из этого не казалось особенно актуальным для выяснения как LeagueofLegends был открыт в режиме наблюдения.

очевидно can быть сделано, так как режим зрителя доступен изнутри клиента.
Кажется вероятным, что это может быть сделано от CLI, так как Windows может сделать это, и клиенты, как предполагается, равны. Если я не упускаю что-то в разнице между тем, как UNIX и окна ручки запускает программы CLI.

мой вопрос в том, есть ли какие-либо другие вещи, которые я могу попытаться выяснить, как запустить режим наблюдателя сам.

tl; dr:

попытка войти в режим наблюдателя из CLI. Это возможно в Windows (см. Первый блок кода), но он просто перезапускает League на Mac. Что еще я могу попробовать найти, какой звонок сделан, и как его воспроизвести?

EDIT 1: я нашел точную строку (в GDB), когда запускается режим наблюдателя. Это все dtruss появился за один шаг.

PS: пожалуйста, дайте мне знать, как я могу улучшить этот вопрос или его форматирование, я хотел бы использовать StackOverflow/SuperUser, но, как сказали ребята на подкасте на этой неделе (Ep. 59) это очень пугает. Извините за публикацию этого на StackOverflow в первый раз: (

10
задан Alex Popov
09.12.2022 8:25 Количество просмотров материала 3305
Распечатать страницу

2 ответа

мне было интересно то же самое, и Вы были так близки ... но, вот ответ, по крайней мере для 4.14.14_08_11_13_42 (см. ниже). К твоему сведению, я провел кучу поисков, и никто больше, похоже, не понял этого для Мака, поэтому я надеюсь, что получу кредит за то, что был первым ... ; -)

сначала запустите клиент Лиги и войдите в систему как обычно. Тогда в терминале:

$ cd "/Applications/League of Legends.app/Contents/LoL/RADS/solutions/lol_game_client_sln/releases/0.0.0.131/deploy/LeagueOfLegends.app/Contents/MacOS"

$ riot_launched=true "/Applications/League of Legends.app/Contents/LoL/RADS/solutions/lol_game_client_sln/releases/0.0.0.131/deploy/LeagueOfLegends.app/Contents/MacOS/LeagueofLegends" 8394 LoLLauncher "/Applications/League of Legends.app/Contents/LoL/RADS/projects/lol_air_client/releases/0.0.0.140/deploy/bin/LolClient" "spectator [ip:port] [token] [number] [region]"

это сработало для меня. Единственная проблема в том, что после просмотра игры лобби не сбрасывается должным образом -- "игра закончилась" событие не отложилось, когда зритель клиент запущен таким образом. Так, я просто закрыть приложение и перезапустить ... но, по крайней мере, таким образом я могу наблюдать за играми людей, с которыми я не "дружу".

2
отвечен dossy 2022-12-10 16:13

расширяя ответ Досси, я сделал функцию bash, чтобы сделать это легко сделать:

spectator() { ( export LOL_APP="/Applications/League*of*Legends.app" && export LOL_GAME_CLIENT_DIR="$LOL_APP/Contents/LoL/RADS/solutions/lol_game_client_sln/releases/*/deploy/LeagueOfLegends.app/Contents/MacOS" && cd $LOL_GAME_CLIENT_DIR && riot_launched=true nohup "$(ls -1 $LOL_GAME_CLIENT_DIR/LeagueofLegends)" 8394 LoLLauncher "$LOL_APP/Contents/LoL/RADS/projects/lol_air_client/releases/*/deploy/bin/LolClient" "spectator    " >/dev/null 2>&1 & ) }

добавьте это в ваш ~/.bash_profile и spectator функция будет доступна каждый раз, когда вы открываете новый терминал.

Я делаю некоторую магию подстановочных знаков, чтобы автоматически быть совместимым с будущими версиями тоже.

использование:

spectator [ip:port] [token] [number] [region]

для проверки используйте lolquickfind найти живую игру популярный стример зрителем.

(Я некоторые проблемы с переменными окружения + подстановочные знаки + каталоги с пробелами. Независимо от того, как я избежал пространства, это, кажется, не работает. Однако использование подстановочных знаков для пробелов исправило это.)

Ура.

3
отвечен Eric Boehs 2022-12-10 18:30

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх