软件:从命令行启动英雄联盟观众模式(Mac)

软件:从命令行启动英雄联盟观众模式(Mac)

背景:最后再做个总结

英雄联盟有一个观众模式,您可以在该模式下观看其他人的游戏(基本上是重播),延迟 3 分钟。 热门英雄联盟网站 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-INF\AIR\application.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 中我们可以看出)启动的
  • 很长的命令(PID:24927)是如何启动观众模式的,并且由 推出UserKernel
  • 旁观者模式的启动方式与 OP.GG .bat 完全相同,唯一的区别是旁观者模式连接到 Riot 而不是 OP.GG 的旁观服务器。

我尝试将 GDB 附加到 LolClient,但是由于它是一个 Adob​​e AIR 应用程序(并且我从未将 GDB 与我自己的代码以外的代码一起使用过),所以我无法从中获得任何有意义的东西。

接下来,我运行了dtruss -a -b 100m -f -p $PID所有我能想到的程序: 、LolClientLolLauncherUserKernel并浏览了生成的五十万行代码。我发现了用于获取游戏信息以供观看的 GET 请求之类的东西,但我看不到任何与英雄联盟.exe 相当的带有观看选项的启动。

最后,我跑去查看是否在此过程中打开了其他内容lsof | grep -i lol,但没有找到任何合适的内容。打开的是,,,,,UserKernel然后是,所有这些都是预期的。所有这些似乎都与弄清楚LolLauncherLolClientAdobe AIRLeagueofLegendsBugsplat如何英雄联盟已开放观看模式。

显然可以完成,因为 Spectator 模式可以从客户端内部访问。似乎可以从 CLI 完成,因为 Windows 可以做到这一点,并且客户端应该是平等的。除非我遗漏了 UNIX 和 Windows 处理 CLI 应用程序启动方式之间的差异。

我的问题是,我是否可以尝试其他方法来自己弄清楚如何启动观众模式。

总结:

尝试从 CLI 进入观察者模式。在 Windows 上可以这样做(参见第一个代码块),但在 Mac 上它只会重新启动 League。我还能尝试什么来查找进行了什么调用,以及如何重现它?

编辑 1:我找到了启动观察者模式的确切行(在 GDB 中)。这是dtruss出现的一切为了那一步。

附言:请告诉我如何改进这个问题或其格式,我很想使用 StackOverflow/SuperUser,但正如本周播客(第 59 集)中的人所说,它非常令人生畏。抱歉第一次在 StackOverflow 上发布此内容 :(

答案1

我也想知道同样的问题,你离答案太近了……但是,这是答案,至少是针对 4.14.14_08_11_13_42(见下文)。仅供参考,我进行了大量搜索,似乎没有其他人为 Mac 找到答案,所以我希望我是第一个找到答案的人…… ;-)

首先,启动联盟客户端并正常登录。然后,在终端中:

$ 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 的答案,我创建了一个 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 $1 $2 $3 $4" >/dev/null 2>&1 & ) }

将其添加到您的终端后,每次打开新终端时~/.bash_profile该功能将可用。spectator

我正在做一些通配符魔法,以便自动与未来版本兼容。

用法:

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

要测试,请使用lolquickfind找到一个受欢迎的主播的现场比赛来观看。

(我在环境变量 + 通配符 + 带空格的目录方面遇到了一些问题。无论我如何转义空格,它似乎都不起作用。不过,使用通配符代替空格可以解决问题。)

干杯。

相关内容