バグ: XML形式のシナリオで参照元の存在しないカードを所有したキャストが存在するバトルを開始するとフリーズする

Issue #394 resolved
Liar_cw NA created an issue

とてもややこしいですが、表題どおりです。バトルはデバッガから呼び出しました。 クラシック形式のシナリオでは検証を行っていませんが、発生時の条件を見るにXML形式限定の不具合だと思います。 (関連 Issue #386

  1. 参照しているカードの参照元を削除後、所有カード欄に残ったゴミ(参照先のない参照状態にあるカード)を削除しないと、バトルで該当キャストを読み込んだときにフリーズする。

  2. シナリオをプレイ中に新規カードを作成した後、CWPy側で更新を行わずに既存キャストに参照状態で持たせてバトルを開始するとフリーズする。

Comments (4)

  1. Liar_cw NA reporter

    こちらはエラーログになります。1・2ともに同じ内容でした。

    cardwirthpy_20160714
    Version : 1.0 Beta 3 / 2016-07-14 23:04:57
    DateTime: 2016-07-22 22:10:17
    Traceback (most recent call last):
      File "cw\thread.pyo", line 683, in run
      File "cw\thread.pyo", line 713, in _run
      File "cw\thread.pyo", line 718, in main_loop
      File "cw\eventhandler.pyo", line 113, in run
      File "cw\eventhandler.pyo", line 618, in executing_event
      File "cw\debug\debugger.pyo", line 1084, in func
      File "cw\thread.pyo", line 2793, in change_battlearea
      File "cw\thread.pyo", line 2746, in change_area
      File "cw\thread.pyo", line 2269, in deal_cards
      File "cw\sprite\card.pyo", line 935, in initialize
      File "cw\character.pyo", line 28, in __init__
      File "cw\character.pyo", line 323, in get_cardpocket
      File "cw\header.pyo", line 83, in __init__
    AttributeError: 'NoneType' object has no attribute 'getint'
    
  2. k4nagatsuki repo owner

    ありがとうございます。pull request #1510で修正しました。

    参照するカードが見つからなかった場合はエラーダイアログを出すようにしています。これはシナリオの明白なバグだから、通知した方がよいと考えての事です。

    同じようなパターンとしてバトルで参照するキャストが無かった場合というものがありますが、これはCWが長年そのエネミーカードを無視するという対応を行ってきているので、それに合わせるしか無いかと思います。

    修正ご確認いただき、問題なければIssueを完了にしてくださると助かります。

  3. Liar_cw NA reporter

    停止することなく動作することを確認しました。特に問題は感じられませんでした。

    そうですね。シナリオ側に異常がある事はダイアログで通知されることですし、 仮にシナリオの進行が中断される等よりは この挙動(異常箇所の無視)で問題ないと私も思います。

    cardwirthpy_20160723
    CardWirthPy 1.0 Beta 3
    Build: 2016-07-23 16:51:48
    
  4. Log in to comment