エラー報告:固有スキンの荷物袋が開けない

Issue #1011 resolved
SRNC created an issue

自作スキンで-4_Camp.xmlや02_Yado2.xmlの「荷物袋」のメニューカードで

以下の指定で荷物袋を展開すると操作不可能になり、ウィンドウ×で閉じた際にエラーログが出力されます。

=========================

<MenuCard>
<Property>
<Name>荷物袋</Name>
<ImagePath>Resource/Image/Card/COMMAND7.png</ImagePath>
<Description>パーティが共有する手札カードの一覧を表示します。手札カードの分配や処分はここで行います。</Description>
<Flag />
<Location left="0" top="0" />
<Size scale="100%" />
</Property>
<Events>
<Event>
<Ignitions>
<Number>1</Number>
<KeyCodes />
</Ignitions>
<Contents>
<ContentsLine>
<Start name="クリック" />
<Post type="Event" arg="BACKPACK" command="ShowDialog"></Post>
</ContentsLine>
</Contents>
</Event>
</Events>
</MenuCard>

=========================

Classicスキンに同様のメニューカードを追加しても再現しないため、

スキン固有情報で発生していると思われますが、特定できておりません。

また、Classic スキンと同じメニューカードで開くときは発生しません。

「交易都市リューン」のCamp上で確認した際のエラーログは以下です。

=========================

Version : 4.3 (32-bit) / 2021-01-23 23:56:17
DateTime: 2021-01-24 17:53:39
Traceback (most recent call last):
File ".\cw\frame.py", line 995, in OnBACKPACK
File ".\cw\frame.py", line 1063, in _get_cardcontrolparams
AssertionError

=========================

2021-01-16 17:43:15 版では発生せず、2021-01-23 23:56:17 で発生することを確認しています。

以上、よろしくお願いいたします。

Comments (9)

  1. k4nagatsuki repo owner

    ご報告ありがとうございます。

    カード選択ダイアログを開く時にダイアログ側から選択中のメニューカード/プレイヤーカードを特定する必要があるのですが、一般にイベントが開始される時にはメニューカードの選択は解除されます(≒反転表示が解除される)。

    そのため、たしかバージョン1より前の事だったと思うのですが、荷物袋を開くようなシステムに近すぎる処理を行うカードは一般的なイベント処理を避けてメニューカード自体に機能を指定するようになっています。

    <MenuCard arg="BACKPACK" command="ShowDialog">
    

    このようにすればエラーは発生しなくなるはずです。

    今回のエラーは荷物袋を開く際に選択中のカードが特定できないというものですが、16日のバージョンでは発生しないというのがちょっと謎です。このあたりのチェックは1月1日に追加したもので、手許で16日の版を試したところやはり発生するようです。


    さて、ではPostイベントでは荷物袋を開けないのかというと、現状では確かにできないという事になりそうです。

    • イベントを開始するにはCW一般の処理としてメニューカードの選択を解除する必要がある。
    • あらかじめ記憶しておくにしても、カード選択ダイアログはプレイヤーカードから開いてそこから荷物袋はカード置場へ移動するという事もできるので荷物袋のメニューカードは特定できる必要がある。
    • 荷物袋を開く処理がイベントツリーの中にあると、どのカードが荷物袋を指すか特定できない。

    ちょっと記憶が曖昧なのですが、このような問題があります。これを解決するには、何かスキンの仕様を付け加える必要がありそうです。

  2. SRNC reporter

    ご確認ありがとうございます。

    本スキンではダイアログ表示前に幾つかイベントを置いているため、メニューカード自体ではなくPostイベントを利用しておりました。

    もしPy仕様としてPostイベントを利用して荷物袋ダイアログの表示が不可にするのであれば、それに合わせてスキンもカスタマイズしてみようかと思います。

    ご検討いただければと存じます。

  3. k4nagatsuki repo owner

    pull request #196

    とりあえずクリックイベントが設定されていた場合はそちらを実行するようにしました。

    ただし上記した通りシステムはメニューカードの役割を識別する必要があるのでcommandargは依然として使用します。ですので、commandargを指定しつつクリックイベントも作る、というふうにしてください。

  4. SRNC reporter

    最新版でクリックイベントを実行させつつ荷物袋が利用できることを確認いたしました。

    対応ありがとうございます。

    これに派生した問題かは分かりませんが、スキン独自エリアの荷物袋メニューカード(command+arg+Post設定)クリックした後、以下により右クリックでシステムエリアに戻る際にエラーが発生致しました。

    <BackgroundAction>ReturnSystemArea</BackgroundAction>
    

    エラーログは以下です。

    ====================

    Version : 4.3 (32-bit) / 2021-01-24 20:19:45
    DateTime: 2021-01-24 21:40:17
    Traceback (most recent call last):
    File ".\cw\frame.py", line 825, in OnMENUCARDINFO
    File ".\cw\dialog\cardinfo.py", line 254, in init
    ValueError: <MenuCard DirtySprite(in 0 groups)> is not in list

    ====================

  5. k4nagatsuki repo owner

    ログを見た感じ、右クリック等によってカード情報を開こうとした時に、メニューカードのリストの中に開こうとしている該当カードが存在しないというエラーが発生しています。

    背景をクリックした時になぜかカード情報を開こうとしているのでしょうか? 手許で再現しようとしてみましたができませんでした。BackgroundAction以外の要素が絡んでいるのかもしれません。

  6. k4nagatsuki repo owner

    メニューカードでないものからカード情報を開こうとするケースがないか探してみたのですが、いまのところ見つけられていません。また、エラーログを見る限り、実際にメニューカードのスプライトに対してカード情報を開こうとしているように思えます。

    となると、そのメニューカードがリストにない事が問題です。リストには、メニューカードのうち、表示されており、解説テキストのあるもののみが含まれています。そのため解説テキストのないメニューカードや表示されていないメニューカードのカード情報を開いたような場合にはこのエラーが発生するはずですが、そういうカードはそもそも右クリックできません。この判定にも問題はないように見えます。

    差し支えなければ、問題の発生するエリアがどのような作りになっているか教えていただけないでしょうか。

  7. SRNC reporter

    ご連絡が遅くなり申し訳ございません。

    私の環境では添付したファイルをClassicスキンに上書きすることで再現しておりますのでご確認いただければと思います。

  8. k4nagatsuki repo owner

    pull request #199

    ありがとうございます。修正できました。

    発生条件が少し分かりにくかったのですが、

    1. カード移動特殊エリアが展開されている状態(カード選択ダイアログが開いている状態)でカード置場か荷物袋を選択する。
    2. ダイアログを閉じ、特殊エリアを解除する。
    3. 他のスプライトにカーソルが触れる前に背景をクリックする。

    という手順で再現できました。見せていただいたスキンは荷物袋以外のカードがないので他のスプライトに触れにくく、再現しやすかったのだと思います。

  9. SRNC reporter

    最新版に更新することで事象改善したことを確認致しました。 対応ありがとうございます!

  10. Log in to comment