tag:crieit.net,2005:https://crieit.net/tags/game/feed 「game」の記事 - Crieit Crieitでタグ「game」に投稿された最近の記事 2023-11-03T22:58:23+09:00 https://crieit.net/tags/game/feed tag:crieit.net,2005:PublicArticle/18640 2023-11-03T22:58:23+09:00 2023-11-03T22:58:23+09:00 https://crieit.net/posts/Go-ZUIKI 電Go!! の ZUIKI コンは製造時期による違いがある? <p><a target="_blank" rel="nofollow noopener" href="https://www.zuiki.co.jp/mascon/">電車でGO!!専用ワンハンドルコントローラー - 瑞起 ZUIKI</a> (以下、 ZUIKIコン) には、 <a target="_blank" rel="nofollow noopener" href="https://amzn.to/49hrvNp">型番 : ZKNS-001 の通常版</a> と、 <a target="_blank" rel="nofollow noopener" href="https://amzn.to/3SlNxIV">型番:‎ZKNS-002 の EXCLUSIVE EDITION</a> の二種類ある。</p> <p>ただどうも、それ以外に製造時期による違いもあるようだ。</p> <p>その違いのせいで、 <a target="_blank" rel="nofollow noopener" href="https://www.jreast.co.jp/simulator/">JR東日本トレインシミュレータ</a> で ZUIKIコン 使うツールがな機能しなくなって困ったので、その対処をした話。</p> <h2 id="きっかけ"><a href="#%E3%81%8D%E3%81%A3%E3%81%8B%E3%81%91">きっかけ</a></h2> <p>元々、2021年の発売当初から通常版の ZUIKIコン を購入しており、公式で対応している <a target="_blank" rel="nofollow noopener" href="https://amzn.to/3MnYg1K">電車でGo!! Switch 版</a> や ソニックパワードの 鉄道にっぽん! シリーズ <a target="_blank" rel="nofollow noopener" href="https://amzn.to/3FIY9Kc">Real Pro など</a> に加え、 <a target="_blank" rel="nofollow noopener" href="https://steamcommunity.com/app/2111630/discussions/0/3360272431836180307/">Switch版電車でGOワンハンドルマスコンで操作できるようにしてみました - Steam コミュニティー</a> で紹介されてるツールを使って <a target="_blank" rel="nofollow noopener" href="https://www.jreast.co.jp/simulator/">JR東トレシム</a> で使っていたりしていた。</p> <p>程よい重量感や操作感で臨場感が爆上がり… というか、無いと面白みが8割減レベルに気に入っており、最近 EXCLUSIVE EDITION を買い増した。</p> <p>…ところが買い増しした ZKNS-002 は、Switch 版や 鉄道にっぽん! シリーズでは問題なく動くのに、上記ツールを使って JR東トレシム しようとすると以下のようなエラーが出て動かない。<br /> ```text/plain<br /> Traceback (most recent call last):<br /> File "main.py", line 24, in <module><br /> File "SwitchDenGo.py", line 32, in loadStatus<br /> pygame.error: Invalid joystick button<br /> [33064] Failed to execute script 'main' due to unhandled exception!</p> <pre><code><br />存在しない joystick 番号を指定されてエラーになってる。 …つまりボタン配置が違う? しかしそもそも、この ZUIKIコン は汎用 USB コントローラ として認識されるモノだし、Windows OS 側のデバイスの設定を見ても、どちらも同じ "One Handle MasCon for Nintendo Switch" と認識され、全くボタン配置で認識されている。 なんでボタン配置がズレるのか、訳がわからないよ。 [![](https://aquasoftware.net/blog/wp-content/uploads/2023/11/zuiki-dengo-controller-11-old-237x300.png)](https://aquasoftware.net/blog/wp-content/uploads/2023/11/zuiki-dengo-controller-11-old.png)[![](https://aquasoftware.net/blog/wp-content/uploads/2023/11/zuiki-dengo-controller-21-new-237x300.png)](https://aquasoftware.net/blog/wp-content/uploads/2023/11/zuiki-dengo-controller-21-new.png) [上記 Steam コミュニティー](https://steamcommunity.com/app/2111630/discussions/0/3360272431836180307/) でも、同じような問題に遭遇している人が何人かいる。 しかも、 通常版 ZKNS-001 か EXCLUSIVE EDITION ZKNS-002 かを問わず発生するようだ。 つまり、型番違いによる仕様変更が原因ではない…? ## 意外なる原因 せっかく、エラーが出るデバイスと出ないデバイスが揃っているので、もう少し深く掘って調べてみる。 このツール [mipsparc/JRESim_Dengo](https://github.com/mipsparc/JRESim_Dengo/blob/v1.0/SwitchDenGo.py) のソースを取って Python のデバックをしてみたところ、やはりというか [pygame](https://www.pygame.org/news) というライブラリでコントローラーを操作するあたりでエラーがでている。 ```text/plain 031: # ○ボタン 032: if self.joy.get_button(15): # <- ここでエラー 033: self.buttons.append("SW_CIRCLE") 034: # HOMEボタン 035: if self.joy.get_button(5): 036: self.buttons.append("SW_HOME") </code></pre> <p>試しに、 <a target="_blank" rel="nofollow noopener" href="https://github.com/pygame/pygame/blob/2.1.2/examples/joystick.py">pygame のジョイスティック実行例コード joystick.py</a> を実行して、 pygame 側でどのように認識されているか確認してみる。<br /> <a target="_blank" rel="nofollow noopener" href="https://aquasoftware.net/blog/wp-content/uploads/2023/11/zuiki-dengo-controller-12-old.png"><img src="https://aquasoftware.net/blog/wp-content/uploads/2023/11/zuiki-dengo-controller-12-old.png" alt="" /></a><a target="_blank" rel="nofollow noopener" href="https://aquasoftware.net/blog/wp-content/uploads/2023/11/zuiki-dengo-controller-22-new.png"><img src="https://aquasoftware.net/blog/wp-content/uploads/2023/11/zuiki-dengo-controller-22-new.png" alt="" /></a></p> <p>んん゙っ!?<br /> ZKNS-002 のほうは "One Handle MasCon for Nintendo Switch Exclusive Edition" として認識されるものの、<br /> <strong>発売日に買った方の ZKNS-001 が "Nintendo Switch Pro Controller" と認識されて、ボタンの認識軸数が大きく変わっている。</strong></p> <p><a target="_blank" rel="nofollow noopener" href="https://www.pygame.org/news">pygame</a> は、内部的に <a target="_blank" rel="nofollow noopener" href="https://github.com/libsdl-org/SDL">SDL2 (libsdl-org/SDL)</a> というライブラリでジョイスティック操作をしている。<br /> その SDL では、既知の様々なコントローラに様々な特殊対応が為されているので、そこらへんが影響していそうだ。</p> <p>こういったものは、 USB の VID (ベンダーID) と PID (プロダクトID) で場合分けしているものと相場が決まっている。<br /> ということで、デバイスマネージャーのプロパティ(ハードウェアID)から VID と PID を確認してみる。</p> <ul> <li>発売日購入の通常版 ZKNS-001: <ul> <li><code>HID\VID_0F0D&PID_00C1&REV_0106</code></li> </ul></li> <li>最近買った EXCLUSIVE EDITION ZKNS-002: <ul> <li><code>HID\VID_33DD&PID_0002&REV_0111</code></li> </ul></li> </ul> <p>VID ちゃうやんけ。</p> <p><a target="_blank" rel="nofollow noopener" href="https://www.usb.org/developers">https://www.usb.org/developers</a> で USB ベンダーID を検索してみると…<br /> 0x0F0D (3853): HORI CO., LTD.<br /> 0x33DD (13277): ZUIKI Inc.</p> <p>?? HORI ??</p> <p>とりあえず、上記の VID と PID をもとに、 SDL2 (SDL 2.0.18) でどのように動作が定義されているか調べてみる。</p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/libsdl-org/SDL/blob/release-2.0.18/src/joystick/controller_type.h#L576">SDL/src/joystick/controller_type.h at release-2.0.18 · libsdl-org/SDL</a></p> <pre><code class="c"> { MAKE_CONTROLLER_ID( 0x0f0d, 0x00c1 ), k_eControllerType_SwitchInputOnlyController, NULL }, // HORIPAD for Nintendo Switch </code></pre> <p><strong><a target="_blank" rel="nofollow noopener" href="https://amzn.to/3Qkb0rj">ホリパッド for Nintendo Switch</a> って書いてあるぞ。</strong></p> <p>更にここら辺 (<a target="_blank" rel="nofollow noopener" href="https://github.com/libsdl-org/SDL/blob/release-2.0.18/src/joystick/SDL_joystick.c#L2062-L2069">SDL/src/joystick/SDL_joystick.c</a>) の処理を経て、 VID: 0x0F0D & PID: 0x00C1 の組み合わせのものが "Nintendo Switch Pro Controller" と認識されているようだ。</p> <p>なお、 VID: 0x33DD & PID: 0x0002 については、特に SDL 側での特殊処理は定義されていなそうだった。<br /> このため、 USB H/W 側で定義されている "One Handle MasCon for Nintendo Switch Exclusive Edition" の名前がそのまま pygame での認識名として表示されていたのだろう。</p> <p>うーん、製造当初は適当に(Switch に対応した)ホリパッドを偽装してたのを、後のロットではちゃんと VID や PID とって設定したってコトかしら…?<br /> ライセンス品としてどうなんだソレ。</p> <p>とりあえず、以下の2点が今回の問題が発生していることがわかった。</p> <ol> <li><strong>製造時期?によって、ホリパッドを偽装しているものとそうでないものがある</strong></li> <li><strong>ホリパッドは SDL 側に特殊対応があり、偽装の有無でライブラリからとれるキー配置が異なっている</strong></li> </ol> <h2 id="JRESim_Dengo の修正"><a href="#JRESim_Dengo+%E3%81%AE%E4%BF%AE%E6%AD%A3">JRESim_Dengo の修正</a></h2> <p>原因がわかったところで、 <a target="_blank" rel="nofollow noopener" href="https://github.com/mipsparc/JRESim_Dengo/">JRESim_Dengo</a> の方をどちらの ZUIKIコン にも対応させたい。</p> <p>とはいえ、 VID や PID で動作し分けるにしても、私が持っている2台とは別の VID や PID を持つものもありそうだ。<br /> (製造時期の違いからか同じ不具合に遭遇していた、通常版の ZKNS-001 とか)</p> <p>SDL が動作を書き換えなければ、 USB から出ている信号は同じボタン配置で出ているっぽい為、コントローラーの軸数やボタン数で SDL 側での書き換えが行われたか判別すればよさそうだ。</p> <pre><code class="diff">--- ./SwitchDenGo_old.py 2022-10-03 18:55:53 +0900 +++ ./SwitchDenGo.py 2023-10-08 05:51:32 +0900 @@ -7,36 +7,64 @@ def __init__(self): pygame.init() self.joy = pygame.joystick.Joystick(0) + self.ctrl_nums = (self.joy.get_numaxes(), self.joy.get_numballs(), self.joy.get_numbuttons(), self.joy.get_numhats()) + if self.ctrl_nums not in [(6, 0, 16, 0), (4, 0, 14, 1)]: + raise Exception("サポートされていないコントローラです") self.joy.init() def loadStatus(self): self.brake_knotch = 0 self.accel_knotch = 0 self.buttons = [] pygame.event.get() - # Xボタン - if self.joy.get_button(2): - self.buttons.append("SW_X") - # Yボタン - if self.joy.get_button(3): - self.buttons.append("SW_Y") - # Aボタン - if self.joy.get_button(0): - self.buttons.append("SW_A") - # Bボタン - if self.joy.get_button(1): - self.buttons.append("SW_B") - # ○ボタン - if self.joy.get_button(15): - self.buttons.append("SW_CIRCLE") - # HOMEボタン - if self.joy.get_button(5): - self.buttons.append("SW_HOME") - - knotch_level = self.joy.get_axis(1) + # ロンチ版 + if self.ctrl_nums == (6, 0, 16, 0): + # Xボタン + if self.joy.get_button(2): + self.buttons.append("SW_X") + # Yボタン + if self.joy.get_button(3): + self.buttons.append("SW_Y") + # Aボタン + if self.joy.get_button(0): + self.buttons.append("SW_A") + # Bボタン + if self.joy.get_button(1): + self.buttons.append("SW_B") + # ○ボタン + if self.joy.get_button(15): + self.buttons.append("SW_CIRCLE") + # HOMEボタン + if self.joy.get_button(5): + self.buttons.append("SW_HOME") + + knotch_level = self.joy.get_axis(1) + elif self.ctrl_nums == (4, 0, 14, 1): + # Xボタン + if self.joy.get_button(3): + self.buttons.append("SW_X") + # Yボタン + if self.joy.get_button(0): + self.buttons.append("SW_Y") + # Aボタン + if self.joy.get_button(2): + self.buttons.append("SW_A") + # Bボタン + if self.joy.get_button(1): + self.buttons.append("SW_B") + # ○ボタン + if self.joy.get_button(13): + self.buttons.append("SW_CIRCLE") + # HOMEボタン + if self.joy.get_button(12): + self.buttons.append("SW_HOME") + + knotch_level = self.joy.get_axis(1) + else: + raise Exception("サポートされていないコントローラです") if knotch_level > 0.95: self.accel_knotch = 5 elif knotch_level > 0.75: </code></pre> <p>こんな感じの修正を入れてビルドしたものを以下のリリースで展開した。</p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/advanceboy/JRESim_Dengo/releases/tag/v1.0p1">Release JRESim_Dengo v1.0p1 · advanceboy/JRESim_Dengo</a></p> <p>もし、最近 ZUIKIコン を JREトレシム で使おうと思って困っている人がいればどうぞ。</p> <p>元の作者の方にもプルリク投げとくか。</p> <h2 id="補足"><a href="#%E8%A3%9C%E8%B6%B3">補足</a></h2> <p>実装のために調査した、各環境・デバイス毎の、キー割り当ては以下の通りだった。</p> <h3 id="DirectInput からの取得 (ロンチ版, 最近の Exclusive Edition 共通):"><a href="#DirectInput+%E3%81%8B%E3%82%89%E3%81%AE%E5%8F%96%E5%BE%97+%28%E3%83%AD%E3%83%B3%E3%83%81%E7%89%88%2C+%E6%9C%80%E8%BF%91%E3%81%AE+Exclusive+Edition+%E5%85%B1%E9%80%9A%29%3A">DirectInput からの取得 (ロンチ版, 最近の Exclusive Edition 共通):</a></h3> <p>```text/plain<br /> index 1軸: マスコン<br /> Button 1: Y<br /> Button 2: B<br /> Button 3: A<br /> Button 4: X<br /> Button 5: L<br /> Button 6: R<br /> Button 7: ZL, EB<br /> Button 8: ZR<br /> Button 9: -<br /> Button 10: +<br /> Button 11: N/A<br /> Button 12: N/A<br /> Button 13: HOME<br /> Button 14: Capture<br /> PoVハット 1: 方向キー</p> <pre><code><br />### pygame 経由の、ロンチ版 ```text/plain index 1軸: マスコン index 4軸: ZL index 5軸: ZR Button 0: A Button 1: B Button 2: X Button 3: Y Button 4: - Button 5: Home Button 6: + Button 7: N/A Button 8: N/A Button 9: L Button 10: R Button 11: Up Button 12: Left Button 13: Down Button 14: Right Button 15: Capture </code></pre> <p><a target="_blank" rel="nofollow noopener" href="https://aquasoftware.net/blog/wp-content/uploads/2023/11/zuiki-dengo-controller-12-old.png"><img src="https://aquasoftware.net/blog/wp-content/uploads/2023/11/zuiki-dengo-controller-12-old.png" alt="" /></a></p> <pre><code class="python"># ハードウェアID: 'HID\VID_0F0D&PID_00C1&REV_0106' joy = pygame.joystick.Joystick(0) joy.get_guid() # -&gt; '030000000d0f0000c100000006016800' joy.get_name() # -&gt; 'Nintendo Switch Pro Controller' joy.get_numaxes() # -&gt; 6 joy.get_numballs() # -&gt; 0 joy.get_numbuttons() # -&gt; 16 joy.get_numhats() # -&gt; 0 </code></pre> <h3 id="pygame 経由の、 Exclusive Edition"><a href="#pygame+%E7%B5%8C%E7%94%B1%E3%81%AE%E3%80%81+Exclusive+Edition">pygame 経由の、 Exclusive Edition</a></h3> <p>```text/plain<br /> index 1軸: マスコン<br /> Button 0: Y<br /> Button 1: B<br /> Button 2: A<br /> Button 3: X<br /> Button 4: L<br /> Button 5: R<br /> Button 6: ZL<br /> Button 7: ZR<br /> Button 8: -<br /> Button 9: +<br /> Button 10: N/A<br /> Button 11: N/A<br /> Button 12: Home<br /> Button 13: Capture<br /> PoVハット 1: 方向キー</p> <pre><code>[![](https://aquasoftware.net/blog/wp-content/uploads/2023/11/zuiki-dengo-controller-22-new.png)](https://aquasoftware.net/blog/wp-content/uploads/2023/11/zuiki-dengo-controller-22-new.png) ```python # ハードウェアID: 'HID\VID_33DD&PID_0002&REV_0111' joy = pygame.joystick.Joystick(0) joy.get_guid() # -&gt; '03000000dd3300000200000000000000' joy.get_name() # -&gt; 'One Handle MasCon for Nintendo Switch Exclusive Edition' joy.get_numaxes() # -&gt; 4 joy.get_numballs() # -&gt; 0 joy.get_numbuttons() # -&gt; 14 joy.get_numhats() # -&gt; 1 </code></pre> advanceboy tag:crieit.net,2005:PublicArticle/18455 2023-06-15T14:45:52+09:00 2023-06-15T14:45:52+09:00 https://crieit.net/posts/MMR-Boost-com-Dota-2 MMR-Boost.com と他の Dota 2 ブースティングサービスの比較分析 <p>はじめに</p> <p>競技ゲームの世界では、Dota 2 は最も人気があり、挑戦的なタイトルの一つとして際立っています。多くのプレイヤーがブースティングサービスからのサポートを求め、マッチメイキングレート(MMR)を向上させ、ランクを上げるために利用しています。このブログでは、<a target="_blank" rel="nofollow noopener" href="http://mmr-boost.com/">MMR-Boost.com</a> と他の Dota 2 ブースティングサービスを包括的に比較分析し、読者がサービスプロバイダーを選ぶ際に情報を得られるようにします。</p> <p>Dota 2 ブースティングサービスの理解</p> <p>Dota 2 ブースティングサービスは、熟練したプレイヤーやプロのブースターの専門知識を活用して、プレイヤーがより高いMMRランクを達成することを支援するために設計されています。これらのサービスは、ソロまたはパーティブースティング、アカウントのキャリブレーション、コーチングなど、さまざまなオプションを提供しています。</p> <p>比較分析に考慮すべき要素</p> <p>MMR-Boost.com と他の Dota 2 ブースティングサービスを効果的に評価するためには、いくつかの重要な要素を考慮する必要があります:</p> <p>口コミと評価</p> <p>評判はブースティングサービスを選ぶ際に重要な役割を果たします。まず最初に、Sitejabber や Trustpilot などの信頼性のあるプラットフォームで顧客のレビューを探索します。<a target="_blank" rel="nofollow noopener" href="https://mmr-boost.com/">mmr-boost</a> のレビューは以下のURLで見つけることができます:</p> <p>MMR-Boost.com on <a target="_blank" rel="nofollow noopener" href="https://www.sitejabber.com/reviews/mmr-boost.com">Sitejabber</a><br /> MMR-Boost.com on <a target="_blank" rel="nofollow noopener" href="https://www.trustpilot.com/review/mmr-boost.com">Trustpilot</a></p> <p>顧客のフィードバックを分析することで、サービスを利用したユーザーの経験や信頼性、総合的な満足度についての洞察を得ることができます。また、レビューの真正性と数量を考慮して、よりバランスの取れた意見を形成することが重要です。</p> <p>経験と専門知識</p> <p>ブースティングサービスプロバイダーの経験と専門知識は重要な要素です。雇用されているブースターのバックグラウンド、彼らのスキルレベル、Dota 2 のメカニクスと戦略に対する理解を評価することで、サービスの品質の指標を得ることができます。サービスのチームと彼らの資格についての情報を探し、効果的にMMRをブーストするために必要な知識を持っているかどうかを判断してください。</p> <p>セキュリティとプライバシー</p> <p>ブースティングサービスを利用する際には、アカウントのセキュリティとプライバシーが最も重要です。個人情報やアカウントの詳細の機密性を重視するサービスプロバイダーを選ぶことが重要です。安全な支払いゲートウェイを使用し、アカウントの盗難や不正アクセスなどのリスクに対処するための対策を講じているブースティングサービスを探してください。</p> <p>価格とパッケージ</p> <p>異なるブースティングサービスの価格とパッケージを比較することで、その手頃さとコストパフォーマンスを判断することができます。ブースティングサービスの期間、特定のランクの選択の柔軟性、追加の機能やボーナスなど、利用可能なオプションの範囲を考慮してください。</p> <p>カスタマーサポート</p> <p>信頼性のあるかつ迅速なカスタマーサポートは、ブースティングサービスの総合的な体験を大幅に向上させることができます。ライブチャットやメールサポートなど、明確なコミュニケーションチャネルを提供しており、疑問や懸念に対応できるように常に利用可能であるプロバイダーを探してください。</p> <p>結論</p> <p>Dota 2 ブースティングサービスを選ぶ際には、包括的な比較分析が重要です。評判、経験、セキュリティ、価格、およびカスタマーサポートなどの要素を考慮することで、情報を得た上で適切なサービスプロバイダーを見つけることができます。<a target="_blank" rel="nofollow noopener" href="https://mmr-boost.com/">MMR-BOOST</a> は分析対象のサービスの一つですが、信頼性のある適切なサービスプロバイダーを見つけるためには、徹底的な調査と様々な選択肢の探求が重要です。</p> <p>覚えておいてください、MMRの向上はゲームの一部に過ぎず、個人のスキルの発展に焦点を当て、より良いDota 2 プレイヤーになる旅を楽しむことも同じくらい重要です。</p> <p>FAQs</p> <p>Q1: Dota 2 ブースティングサービスは合法ですか? A1: Dota 2 ブースティングサービスは、ゲームの利用規約に明確に禁止されているわけではありません。ただし、ブースティングに関わるアカウント共有は、利用規約に違反する可能性があります。ブースティングサービス自体が罰則を受けることはないかもしれませんが、アカウントの一時停止や進行の喪失などのリスクが存在します。ブースティングサービスの利用を検討する前に、潜在的な結果を考慮してください。</p> <p>Q2: ブースティングサービスの完了にはどれくらいの時間がかかりますか?</p> <p>A2: ブースティングサービスの所要時間は、目標のMMRの増加、現在のMMR、およびサービスプロバイダーの作業量など、さまざまな要因によって異なります。一部のサービスは、異なるランクブラケットの見積もり完了時間を提供しています。購入前に見積もり時間について問い合わせることをおすすめします。</p> <p>Q3: ブースティングサービスを利用している間に他のゲームをプレイできますか?</p> <p>A3: 一般的には、ブースティングサービスが進行中の間はアカウントで他のゲームをプレイしないことが推奨されます。アカウント情報を他人と共有することには潜在的なリスクがあり、ブースティング中にゲームをプレイすると疑わしい活動が発生する可能性があり、ペナルティやアカウントの問題を引き起こす可能性があります。</p> <p>Q4: アカウントのセキュリティを確保するためにどのような対策が必要ですか? A4: アカウントのセキュリティを確保するためには、強力なパスワードを使用し、2要素認証を有効にすることをおすすめします。また、ブースティングサービスプロバイダーがセキュリティ対策を講じているかどうかを確認し、信頼できる支払い方法を使用することも重要です。</p> <p>Q5: ブースティングサービスを利用した後、自分のスキルが向上するでしょうか?</p> <p>A5: ブースティングサービスによってMMRが増加したとしても、自分のスキルが直接的に向上するわけではありません。ブースティングサービスは、一時的にランクを上げる手段ですが、個人の努力やプレイスキルの向上によって本当の成長が得られます。ブースティングサービスを利用する際は、ゲームの理解と戦略を学ぶことにも注力することをおすすめします。</p> AlexMak tag:crieit.net,2005:PublicArticle/16234 2020-11-23T14:24:47+09:00 2020-12-20T14:14:17+09:00 https://crieit.net/posts/Among-Us-Discord-bot-AutoMuteUs-Discord-is-rate-limiting-me Among Us 用超便利 Discord bot “AutoMuteUs” をセルフホストした (公式推奨簡単版) <p><strong>注: この記事は、 2020年11月23日~25日 時点の話だよ。 状況は今後も刻々と変わる可能性が高いよ。</strong>  <br /> なお 12月20日 現在、 Among Us <code>v2020.12.9s</code> では、 以下の手順で問題なく動いていることを確認している。</p> <p>今年の夏あたりから、日本でも爆発的なブームが続いている、 <strong>宇宙人狼</strong> こと <strong>Among Us</strong>。</p> <p>Discord でボイスチャットしながらやるのが面白いのだけれど、 ゲームの仕様上、ミュート管理が結構面倒だ。</p> <p>そこに、 Among Us のゲーム画面に同期してミュート管理を超いい感じに自動で行ってくれる Discord bot が存在する。</p> <p><strong>それが <a target="_blank" rel="nofollow noopener" href="https://github.com/denverquane/automuteus">AutoMuteUs</a> だ。</strong></p> <p>このツールは、 以前は "AmongUs AutoMute" などとも呼ばれ、 誰か一人が Windows Steam 版 Among Us のゲームと一緒にキャプチャープログラムを立ち上げ、 公式の Discord Bot と連携させるだけで超お手軽に使える…<br /> <strong>…はずだった。</strong></p> <p>11月下旬現在、 AutoMuteUs 公式の手順に従って、 bot の <code>.au new</code> コマンドでゲームを作成しようとすると、<strong>以下のような悲しいメッセージを目にするだろう。</strong></p> <p><a href="https://crieit.now.sh/upload_images/c5d20f926b8515b20d82a4895eb57cc65fbb466f47b1c.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/c5d20f926b8515b20d82a4895eb57cc65fbb466f47b1c.png?mw=700" alt="among-us-bot-limit-000.png" /></a></p> <blockquote> <p>I'm very sorry, but Discord is rate-limiting me and I cannot accept any new games right now :frowning:<br /> Please try again in a few minutes.</p> </blockquote> <p>Discord のレート制限に引っかかってるって。<br /> Among Us は人気すぎるし仕方ないね!</p> <p>そして、仮にゲームの作成が無事にできたとしても、 bot のミュート変更が遅れたり、変更しそびれたりと不安定だったり…</p> <p><strong>…何とかしたい。</strong></p> <h2 id="ちょっと古い v2.4.3 をセルフホストするのが推奨"><a href="#%E3%81%A1%E3%82%87%E3%81%A3%E3%81%A8%E5%8F%A4%E3%81%84+v2.4.3+%E3%82%92%E3%82%BB%E3%83%AB%E3%83%95%E3%83%9B%E3%82%B9%E3%83%88%E3%81%99%E3%82%8B%E3%81%AE%E3%81%8C%E6%8E%A8%E5%A5%A8">ちょっと古い v2.4.3 をセルフホストするのが推奨</a></h2> <p>2020/11/14 時点の <a target="_blank" rel="nofollow noopener" href="https://discord.gg/ZkqZSWF">AutoMuteUs の 公式 Discord サーバー</a> では、 このレート制限について以下のようにアナウンスされている。</p> <blockquote> <p>Soup 2020/11/14</p> <p>Hey all,</p> <p>We know the Official Bot has been having some serious issues lately, and we're sorry it keeps going down.<br /> We're looking at it right now and coming up with solutions, but we're fairly certain that the Bot is hitting the GLOBAL bot rate limit, and this is causing the outages (IP gets banned for 10 minutes upon hitting the limit). The bot is distributed across multiple IPs, but we need clever solutions to make sure we address the problem fully.</p> <p>It certainly makes sense that this would be the culprit, given that Discord has no "mass mute" API request option, and thus every single game is using ~10 requests to mute players, additional requests to update the status message, etc.</p> <p>We're developing solutions right now, but it might take some time. If you have some critical games coming up, we recommend self-hosting with version 2.4.3 while we get things ironed out with the official bot. The video detailing how to self-host version 2.4.3 is here: <a target="_blank" rel="nofollow noopener" href="https://www.youtube.com/watch?v=LUptOv5ohNc">https://www.youtube.com/watch?v=LUptOv5ohNc</a>, and the release is here: <a target="_blank" rel="nofollow noopener" href="https://github.com/denverquane/automuteus/releases/tag/2.4.3">https://github.com/denverquane/automuteus/releases/tag/2.4.3</a></p> <p>Thanks everyone for the patience, love you guys :kissing_heart:</p> </blockquote> <p>ざっくりいうと、</p> <ul> <li>公式ボットが Discord のレート制限に引っかかっているが、これは根本的な仕組みの問題。</li> <li>完全な対処には複雑な解決策が必要なので、解決には時間がかかるかもしれない。</li> <li>プレイしたい大事なゲームがあるなら、バージョン2.4.3でセルフホストすることをお勧めする。</li> </ul> <p>という感じ。</p> <p>AutoMuteUs はめっちゃアクティブに開発が進んでおり、 2020/11/14 の時点ですでに <a target="_blank" rel="nofollow noopener" href="https://github.com/denverquane/automuteus/releases/tag/4.0.3">バージョン 4.0.3</a> までリリースされているのだが、 敢えて割と古い 2.4.3 の利用が推奨されている。<br /> これはおそらく、 3.0.0 以降のバージョンのセルフホストでは、 docker が必須になっているなど、導入の敷居がかなり高くなっているためだろう。</p> <p>技術力に自信があるなら最新版を使ってもかまわないのだが、 とにかくすぐに遊びたいだけなら、 おとなしく 2.4.3 を使っておくのがよい。<br /> (2.4.4 も存在するけど、 x86 版 Windows で動かす分には差が無いようだ)</p> <p>古いバージョンでも、 bot の機能は十二分に便利… というか、主要な機能では最新版と差が無い。</p> <p>但し、あくまで古いバージョンのままであるという点は注意したい。<br /> 例えば、安定性は最新版に及ばないかも知れないし、 近くリリースされるらしい Among Us の(日本語を含めた)多言語対応などではうまく動かないかもしれない。<br /> (後者は 後述の AmongUsCapture が吸収してくれそうではあるけど。)</p> <h2 id="v2.4.3 の導入手順"><a href="#v2.4.3+%E3%81%AE%E5%B0%8E%E5%85%A5%E6%89%8B%E9%A0%86">v2.4.3 の導入手順</a></h2> <p>ということで、 v2.4.3 のセルフホストの導入手順について簡単に紹介してみようと思う。</p> <p>… といっても、 上記の <a target="_blank" rel="nofollow noopener" href="https://www.youtube.com/watch?v=LUptOv5ohNc">https://www.youtube.com/watch?v=LUptOv5ohNc</a> の動画をなぞっているだけだが。<br /> (英語の動画ではあるけど、 YouTube の自動字幕&自動翻訳で割と簡単に理解できる内容だと思う)</p> <p>実施にあたっては <strong>自己責任</strong> でお願いします。<br /> 状況が日々刻々とかわる話題なので、 記事のコメントで質問されても、答えるつもりはないので悪しからず。<br /> 他の方が回答してくれるのは大歓迎ですけどもね。</p> <p>後述するプリコンパイル済みの exe ファイルが信用できないと感じる場合は、ソースコードの内容を確認し、自身で exe をビルドすると良いだろう。<br /> 私は面倒くさかったので、プリコンパイル済みの exe 使うけど。</p> <h3 id="1. Among Us の 公式 Steam版 を用意する"><a href="#1.+Among+Us+%E3%81%AE+%E5%85%AC%E5%BC%8F+Steam%E7%89%88+%E3%82%92%E7%94%A8%E6%84%8F%E3%81%99%E3%82%8B">1. Among Us の 公式 Steam版 を用意する</a></h3> <p>まず、 <strong><a target="_blank" rel="nofollow noopener" href="https://store.steampowered.com/app/945360/Among_Us/">Among Us の Steam版</a> を買おう。</strong><br /> Andoroid版 や iOS版 の Among Us では AutoMuteUs は動作ないので。</p> <p>なお、 プレイヤーのうち誰か一人だけが AutoMuteUs を動かしていれば良く、 クロスプラットフォームで対戦もできるので、 全員 Steam版 である必要は無い。</p> <h3 id="2. GitHub から automuteus_windows と AmongUsCapture を DL"><a href="#2.+GitHub+%E3%81%8B%E3%82%89+automuteus_windows+%E3%81%A8+AmongUsCapture+%E3%82%92+DL">2. GitHub から automuteus_windows と AmongUsCapture を DL</a></h3> <p>開発者の GitHub リポジトリのリリースページから、以下の二つのファイルを、適当なフォルダに DL しよう。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://github.com/denverquane/automuteus/releases/tag/2.4.3">AutoMuteUs バージョン2.4.3</a> の <code>automuteus_windows.exe</code></li> <li><a target="_blank" rel="nofollow noopener" href="https://github.com/denverquane/amonguscapture/releases/">AmongUsCapture 最新版</a> の <code>AmongUsCapture.exe</code> <ul> <li><code>AmongUsCapture.zip</code> をダウンロードして解凍した中に入っている</li> </ul></li> </ul> <p>一度アプリを起動したら保存フォルダを移動しないほうが良いので、どこか固定のフォルダを決めてそこへ移動させておくとよい。</p> <p>ネットワークからダウンロードした exe ファイルは ZoneId が付与されていて、実行時に Windowns による制限がかかるので、 それぞれの exe ファイルを右クリックしてプロパティを開き、「ブロックの解除」をしておこう。</p> <p><a href="https://crieit.now.sh/upload_images/b17d36eadce2adf681510a076e329bbb5fcfc11c61ee4.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/b17d36eadce2adf681510a076e329bbb5fcfc11c61ee4.png?mw=700" alt="among-us-bot-limit-050.png" /></a></p> <p>なお、 AmongUsCapture の Readme には、 <a target="_blank" rel="nofollow noopener" href="https://dotnet.microsoft.com/download/dotnet-core/3.1">.NET Core 3.1 系ランタイム</a> のインストールが別途必要と書かれているが、 AmongUsCapture 2.4 系以上であれば不要だと思う。 多分。<br /> そもそも、 2.4.5 以降 TargetFramework が <code>net5.0-windows</code> に設定されてて、 .NET 5 のランタイムで動いてるし。 ランタイムは exe に同梱されているから別途インストールは不要なはず。</p> <h3 id="3. Discord の bot を作成する"><a href="#3.+Discord+%E3%81%AE+bot+%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B">3. Discord の bot を作成する</a></h3> <p><a target="_blank" rel="nofollow noopener" href="https://discord.com/developers/applications">https://discord.com/developers/applications</a></p> <p>上記の Discord の開発者ページに移動して、 bot を作成しよう。</p> <p><a href="https://crieit.now.sh/upload_images/7207ec3a30a86188ccd1b5232d4fcbd45fbb46a3f0a16.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/7207ec3a30a86188ccd1b5232d4fcbd45fbb46a3f0a16.png?mw=700" alt="among-us-bot-limit-010.png" /></a><br /> <a href="https://crieit.now.sh/upload_images/35c8cad24ebb45cc15d40d1ff30e36035fbb46ad824dd.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/35c8cad24ebb45cc15d40d1ff30e36035fbb46ad824dd.png?mw=700" alt="among-us-bot-limit-011.png" /></a></p> <p>まず、 New Application ボタンから Discord アプリを作成して、 Bot タブから Add Bot をクリックして、 bot を作成する。</p> <p><a href="https://crieit.now.sh/upload_images/0c9a38322a22aa0ac9444f0518eb80b85fbb46c4b91bb.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/0c9a38322a22aa0ac9444f0518eb80b85fbb46c4b91bb.png?mw=700" alt="among-us-bot-limit-012.png" /></a></p> <p>PUBLIC BOT のスイッチを OFF にして、 変更点を保存する。</p> <p><a href="https://crieit.now.sh/upload_images/8e5c4222fe1edb4fbb3d7196b0db26a45fbb46cb22d1e.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/8e5c4222fe1edb4fbb3d7196b0db26a45fbb46cb22d1e.png?mw=700" alt="among-us-bot-limit-013.png" /></a></p> <p>Token の Copy ボタンをクリックして、 bot のトークンコードをメモ帳など適当なところに控えておく。</p> <p><a href="https://crieit.now.sh/upload_images/4fa6a340f3ff5ecfca740551312fc49b5fbb46d1f0ac1.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/4fa6a340f3ff5ecfca740551312fc49b5fbb46d1f0ac1.png?mw=700" alt="among-us-bot-limit-014.png" /></a></p> <p>OAuth タブに移動して、<br /> ① <strong>SCOPES から bot をチェック</strong><br /> ② <strong>BOT PERMISSIONS から Administrator をチェック</strong><br /> ③ <strong>Copy ボタンで 認可 リンクをコピー</strong><br /> の順に実行。</p> <p>そして ③ でコピーしたリンクをブラウザで開き、 Discord にログインしてどのサーバーに bot を追加するかを選択する。</p> <p>…とここまでで、 bot の作成は完了。</p> <h3 id="4. AutoMuteUs の設定"><a href="#4.+AutoMuteUs+%E3%81%AE%E8%A8%AD%E5%AE%9A">4. AutoMuteUs の設定</a></h3> <p>先ほどダウンロードした <code>automuteus_windows.exe</code> を一度起動させよう。</p> <p>すると、以下のようなエラーが表示され、 10秒後にプログラムが勝手に終了するはずだ。</p> <blockquote> <p>Program exited with the following error:<br /> no DISCORD_BOT_TOKEN provided<br /> This window will automatically terminate in 10 seconds</p> </blockquote> <p>すると、 その代わりに同じフォルダに <code>config.txt</code> というファイルが作成される。</p> <p>そのファイルを メモ帳 などで開くと</p> <pre><code class="plain">DISCORD_BOT_TOKEN= </code></pre> <p>と書かれているはずだ。</p> <p>その <code>=</code> の後ろに、 <strong>(3.) で控えておいた、 bot のトークンコードを貼り付けて保存しよう。</strong></p> <p>そして改めて <code>automuteus_windows.exe</code> を起動する。</p> <p>今度は Windows からファイアウォールの通信の許可ウィンドウが出るので、現在のネットワークでアクセスを許可してやる。</p> <p><a href="https://crieit.now.sh/upload_images/79ae6311d1d9d4965f9f15c3349259675fcfc167d4d41.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/79ae6311d1d9d4965f9f15c3349259675fcfc167d4d41.png?mw=700" alt="among-us-bot-limit-051.png" /></a></p> <p>ここまで来れば、 <code>automuteus_windows.exe</code> のコンソールウィンドウで "Bot is now running." などと表示されるはずだ。</p> <h3 id="5. AmongUsCapture をリンクさせる"><a href="#5.+AmongUsCapture+%E3%82%92%E3%83%AA%E3%83%B3%E3%82%AF%E3%81%95%E3%81%9B%E3%82%8B">5. AmongUsCapture をリンクさせる</a></h3> <p>Steam版 Among Us を起動した状態で、 先ほどダウンロードした <code>AmongUsCapture.exe</code> を起動させる。</p> <p>AmongUsCapture が Among Us のプログラムを見つけて反応するはずだ。</p> <p>その状態で、 <strong>Discord の bot が入っているテキストチャンネル</strong> に、以下のコマンドを入力する。<br /> (コマンドと言っても、ドットから始まるメッセージを入力するだけだが)</p> <pre><code class="plain">.au new </code></pre> <p>すると、 BOT から以下のような <strong>ダイレクトメッセージ</strong> が届く。<br /> (サーバー内のチャンネルのメッセージではないので注意)</p> <p><a href="https://crieit.now.sh/upload_images/c82bc55fe701094e443ec0d4f4be746c5fbb47049c534.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/c82bc55fe701094e443ec0d4f4be746c5fbb47049c534.png?mw=700" alt="among-us-bot-limit-030.png" /></a></p> <p>ここに書かれている <code>aucapture://</code> で始まるリンクをクリックすると、 AmongUsCapture にフォーカスが移って、 連係動作が開始される。</p> <p>ちなみに、 上手く AmongUsCapture が反応しない場合、 このメッセージ右下の URL, Code の内容を、 手動で AmongUsCapture へ入力しても OK だ。</p> <p><a href="https://crieit.now.sh/upload_images/93dff2af4f8df263402119df9f821a165fbb4714ccbd9.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/93dff2af4f8df263402119df9f821a165fbb4714ccbd9.png?mw=700" alt="among-us-bot-limit-031.png" /></a><br /> <a href="https://crieit.now.sh/upload_images/82da208766e5bb5af0f6f4870ea00ed65fbb47194601d.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/82da208766e5bb5af0f6f4870ea00ed65fbb47194601d.png?mw=700" alt="among-us-bot-limit-032.png" /></a></p> <p>ここまで行い、 チャンネル内の bot の表示が右下のようにグリーンになれば、 <strong>全ての準備は完了だ。</strong></p> <p><a href="https://crieit.now.sh/upload_images/9a70968f1352d4322edbd9b2082b04fc5fd105dd24f98.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/9a70968f1352d4322edbd9b2082b04fc5fd105dd24f98.png?mw=700" alt="among-us-bot-limit-055.png" /></a></p> <p>もし、 <code>automuteus_windows.exe</code> のコンソールウィンドウで <code>meet error: websocket: close 1000 (normal)</code> のようなエラーが出て bot と Capture のリンクが上手くいかない場合、前述のファイアウォールのアクセスの許可ができていない可能性がある。</p> <p>その場合、以下の手順で許可設定をした上で、 <code>automuteus_windows.exe</code> を再起動してみよう。</p> <ol> <li><code>Winキー+R</code> でファイル名を指定して実行ダイアログを開く</li> <li><code>Firewall.cpl</code> を実行して、 Windows Defender ファイアウォール ウィンドウを開く<br /> <a href="https://crieit.now.sh/upload_images/765c14b96d1c8389b71d46e43c6b2a815fcfc197c79b1.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/765c14b96d1c8389b71d46e43c6b2a815fcfc197c79b1.png?mw=700" alt="among-us-bot-limit-052.png" /></a> <a href="https://crieit.now.sh/upload_images/e7d7c66f298ffd61b52dfd8467eec00f5fcfc1a17cfab.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e7d7c66f298ffd61b52dfd8467eec00f5fcfc1a17cfab.png?mw=700" alt="among-us-bot-limit-053.png" /></a></li> <li>「ファイアウォールを介したアプリまたは機能を許可」 をクリック</li> <li>一覧から <code>automuteus_windows.exe</code> を探し、 設定の変更 → チェック → OK と設定して、アプリの通信を許可する。<br /> <a href="https://crieit.now.sh/upload_images/41c164180863335acdbcb315137973075fcfc1a94b393.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/41c164180863335acdbcb315137973075fcfc1a94b393.png?mw=700" alt="among-us-bot-limit-054.png" /></a></li> </ol> <h2 id="遊び方"><a href="#%E9%81%8A%E3%81%B3%E6%96%B9">遊び方</a></h2> <p>Among Us で部屋を立て、参加者に部屋に入ってもらう。</p> <p>すると、 Among Us 上のプレイヤー名とキャラクターの色が、 チャンネルのテキストメッセージに表示される。</p> <p><a href="https://crieit.now.sh/upload_images/f8263442a5d4752e3f87ecfc2636a7855fbb474986113.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f8263442a5d4752e3f87ecfc2636a7855fbb474986113.png?mw=700" alt="among-us-bot-limit-040.png" /></a></p> <p>各プレイヤーが Discord 上で、 <strong>自分の色と同じリアクションの絵文字</strong> をクリックすると、 Among Us のプレイヤーと Discord ユーザーがリンクされる。</p> <p>この状態でゲームを開始すると、 プレイヤーの生存状態や会議のシーンにあわせて、自動的にボイスとスピーカーのミュートが変化するようになる。</p> <p>なお、ゲーム内で死んだプレイヤーは、 探索中にミュートが解除される一方で、死んでいないプレイヤーは探索中はスピーカーもミュートになって聞こえない状態となる。<br /> このため、死者同士の <strong>いわゆる霊界チャット</strong> も行える。</p> <p>その他、細かい使い方は、 bot の <code>.au help</code> コマンドなどで確認して欲しい。</p> <p>例えば、 bot が task と discuss のステージ変更を取りこぼしてしまった場合も、 <code>.au force</code> コマンドを使って手動でステータスを変更することも可能だ。</p> <p>以上が簡単な紹介だ。</p> <p><strong>快適な Among Us ライフを!</strong></p> <h2 id="メモ"><a href="#%E3%83%A1%E3%83%A2">メモ</a></h2> <p>AutoMuteUs とは直接関係ないけど、 気づいたことなど。</p> <ul> <li>Among Us は Alt+Enter で フルスクリーンとウィンドウを切り替えられる。 AmongUsCapture はどちらでも OK。</li> <li>Among Us のプレイヤー名と、 Discord の名前は揃っていた方がわかりやすい。 Discord の名前はサーバー毎に「ニックネーム」として名前が変更できるので、 Discord の名前を Among Us の名前に揃えておくと良い。<br /> <a href="https://crieit.now.sh/upload_images/9607fd0e0ddeab82616189e149426dae5fbb475d218df.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/9607fd0e0ddeab82616189e149426dae5fbb475d218df.png?mw=700" alt="among-us-bot-limit-041.png" /></a></li> <li>ストアで購入できる Among Us だけでなく、 AutoMuteUs のほうも <a target="_blank" rel="nofollow noopener" href="https://www.patreon.com/automuteus">https://www.patreon.com/automuteus</a> にて $1/月~ 課金できるぞ。 $5/月 以上支援すれば 公式bot の 優先ミュートbotが貰えて快適にプレイできるはずだ。 公式bot の維持にはだいぶコストがかかっていることが明らかなので、気に入ったら支援してあげよう。</li> </ul> advanceboy