久しぶりになんか書いてみる。
時々友人とおバカ人狼と言われるFeignをやってます。
人狼系ゲームをDiscord VCでプレイするとき、どうしても必要になるのがミュート作業。夜時間はスピーカーミュート、死亡した場合はミュートが定番です。もちろん、手動でやってもいいんですがスマホでやってる人は下手するとゲームが落ちてしまいます。
最初に考えたのが、手動ミュートボット。PCで二窓出来る人が代表して昼時間/夜時間の切り替え、死亡処理をボタンポチポチしてする方法。
C#でDiscord.Netを使ったり、サーバーで動かすためにpythonに移植したり。これでも十分便利なんですが、やっぱ操作ミスとか忘れがたまにあるので何とか自動化したい。二パターン考えました。
・BepinExを使ってパッチを当てる。(AmongUsなどのModと同じ)
・Feignのメモリを覗き見る。(AmongUsCaptureやBetterCrewLinkと同じ)
まぁAmong UsでもModを作ってるし、パッチを当てるほうが早いかなと思いBepinExを導入。
BepinExが変換したDLLを読むことでクラス情報が一覧できます。
どのような処理をしているかは簡単にはわからないのですが、今回は動作を変更するためではなく状態を読み取るのが目的なのでとにかくクラス名、メソッド名、フィールド・プロパティ名から動作を推測していきます。
まず、ゲームロビーとゲーム自体の制御をする部分があるはず。ロビーについてはLobbyManagerというそれらしいものを発見。usersというListも発見し明らかにこれでメンバーが取れそうです。
メンバー変更のタイミングもOn~joinやら~Leave~やらがあるのでLogとってみたり、デバッガアタッチして見たりで大丈夫そうなことを確認。
じゃあ、ゲーム進行はというとこれまたGameControllerというそのままの物を発見。stateというフィールドがありここでゲーム状態を保持してそう。メソッドにもProcessStateChangeというものがありLogを出してみるとここでstate移行してるのも間違いない。
ってな感じで解析を進めていきました。
この情報をBotアプリに転送すればオートミュートの出来上がり!
・・・ただ、Modのインストールからしないといけないのはめんどくさいし、アプリ一個で済む形を作ってみたい。自分がいない時に誰かに貸せるようにしたいしね。
でも、そこからが結構大変でした・・・。
0 件のコメント:
コメントを投稿