アイテムの増減に関するエラー

Issue #115 resolved
tachi gigas created an issue

お疲れ様です。

プレイしていてアイテムの増減に関して以下の現象が発生しました。再現性はないのですが、まれにカード関係のエラーログを確認しているので、記録がてらにissueを作成してみます。

※手順

  1. Fooke様「ペルストル迷宮遺跡」をプレイするためにカード置き場からエスケプストーン(脱出アイテム)を2個荷物袋に入れる
  2. 同シナリオをプレイ開始、途中所用で何回かセーブして中断終了
  3. エスケプストーンを2個消費し、1個入手してシナリオ終了
  4. 宿に戻りセーブ
  5. 入手した火晶石を預けるため「CW_#Y開発室」をプレイ
  6. 火晶石を預けてシナリオ終了するとフリーズ
  7. 4の状態をロードし直して5-6の手順を試すと再現せず終了

※エラーログ

Exception in thread Thread-1:
Traceback (most recent call last):
  File "threading.pyo", line 808, in __bootstrap_inner
  File "cw\thread.pyo", line 337, in run
  File "cw\thread.pyo", line 349, in _run
  File "cw\thread.pyo", line 354, in main_loop
  File "cw\eventhandler.pyo", line 74, in run
  File "cw\eventhandler.pyo", line 176, in lclick_event
  File "cw\sprite\card.pyo", line 926, in lclick_event
  File "cw\event.pyo", line 360, in start
  File "cw\event.pyo", line 491, in start
  File "cw\event.pyo", line 527, in run
  File "cw\event.pyo", line 589, in action
  File "cw\content.pyo", line 1488, in action
  File "cw\data.pyo", line 579, in end
  File "cw\thread.pyo", line 2378, in remove_xml
  File "cw\data.pyo", line 2136, in yadoxml2element
ValueError: Yado/(宿名)/Party/(パーティー名)/ItemCard/エスケプストーン(2).xml is not found.

Comments (7)

  1. k4nagatsuki repo owner

    ありがとうございます。またご迷惑をおかけして申し訳ありません。

    たぶんTachiGigasさんなら分かると思うので技術的な話をすると……

    CWPyでは、シナリオ内でカードが削除された時、F9の時に復活させるために、カード本体は削除せず「削除したフラグ」を立てる事になっています。その削除したフラグのカードのリストはcw.cwpy.ydata.party.backpack_movedです。

    シナリオ終了時にcw.cwpy.ydata.party.backpack_movedに登録されているカードの本体を削除する処理が走るのですが(cw.data.ScenarioData#end内)、どうもその中で削除しようとしたカード本体のファイルが存在しない、という事が起きているようです。しかし報告された内容だとエラー対象のエスケプストーンはCW_#Y開発室内では削除されていない感じがします。火晶石ならまだ納得がいくのですが。

    カードの移動が削除→再入手という処理になっていたかもしれません。CW_#Y開発室のプレイ中にエスケプストーンを動かしたでしょうか。それを行ったかどうかによって調べるべき箇所が変わってくるかもしれません。

    どこかでカードの状態が食い違うような所が無いか調べてみます。時間がかかるかもしれません。お待ちください。

  2. tachi gigas reporter

    レス見ました。お話された事は初めて知りました。参考になります。ここから解決の糸口が見つかればなぁ。こちらとしても調べて何とか貢献できればなぁと。難しそうですが…。

    何個か回答します。

    カードの移動が削除→再入手

    2個あったカードを1個使い、1個入手し、1個使った、のでご指摘のケースと思われます。

    CW_#Y開発室のプレイ中にエスケプストーンを動かしたでしょうか。

    いいえ。動かしていません。

  3. k4nagatsuki repo owner

    捨てたカードのheader.carddataNoneで、そのデータがテンポラリでなく宿本体にある場合に問題が出るようです。具体的には次の手順で再現するはずです。

    1. デバッグモードで任意のシナリオ開始
    2. 荷物袋から開始前から持っていたカードを捨てる
    3. 保存して終了しロード
    4. 宿に帰る(F9でなく)
    5. 任意のシナリオを始める
    6. セーブ
    7. ロードせずに宿へ帰る

    修正を試みます。

  4. k4nagatsuki repo owner

    レビューしていただきマージ。テスト版をアップロード。

    よろしければ最終確認してクローズをお願いします。

    ありがとうございました。

  5. tachi gigas reporter

    確認しました。修正お疲れ様でした。

    これで実プレイしながら様子見していきたいと思います。ありがとうございました。

  6. Log in to comment