Apricot-S / majsoulrpa

A Robotic Process Automation (RPA) framework for Mahjong Soul (雀魂)
Other
21 stars 5 forks source link

fix: shoupai not sorted #180

Closed smly closed 8 months ago

smly commented 8 months ago

最初の配牌時に手牌がソートされない問題を解消するPRです。

最初の配牌は ActionNewRound からソートされていない 13 あるいは 14 枚の牌を受け取ります。現在の実装では ActionNewRound から得られたデータをソートせず self._shoupai に割り当てており、これは打牌が実行されたあとの_hand_in() が呼ばれるまでソートされません。

これはダブルリーチを打つときに特に問題となります。ソートされていない self._shoupai を用いて MatchPresentation_operate_liqi() 内のバリデーション処理が実行されます。majsoulrpa で管理するインデックス位置と画面上の理牌された位置の不一致があるため、高い確率でエラー(InvalidOperation 例外を出す)となります。

実装

NewRoundEvent の shoupai をソートするよう修正します。_hand_in() と RoundState のコンストラクタで同じ処理を行うため、メソッドとしてソート処理を切り出しています。

smly commented 8 months ago

https://github.com/Apricot-S/majsoulrpa/pull/179 でテストを実行する仕組みが追加されたため、テストの仕組みが前提であったこの PR を review ready としました。