バグ:カードが別のカードのローカル変数を持った状態で配布される

Issue #871 resolved
逃げ猫 created an issue

配布されたカードの使用時イベントでローカル変数を書き換えてからカード使用画面を閉じ、
その後、同カードを配布すると先に使ったカードのローカル変数を持った状態で配布されます。
一度の冒険内で配布されたカードが共有状態になるようで、宿に持ち帰ったことのあるカードは引き継がれないようです。
再現性は10回中10回です。

環境
OS:Win 10 Home 17134.1
エンジン:CardWirthPy 4.0 Beta 3 (64-bit)Build: 2019-11-02 23:50:58
エディタ:CWXEditor / Version.7.0 Beta 3 Build: 2019-11-02 01:19:55 Debug (64-bit)Compiled by Digital Mars D 2088

サンプルシナリオを添付しますので、ご確認よろしくお願いします。

以下手順です。

  1. シナリオを開始し、カード配布を行う。
  2. 配布されたカードを一回使用して変数の設定を行う。
  3. もう一枚カード配布を行う。
  4. (3.)で配布された新しいカードを使うと(1.)で配布されたカードと同値の変数になっている。

Comments (5)

  1. k4nagatsuki repo owner

    pull request #2649

    ご報告ありがとうございます。修正しました。

    大量のカード配付を繰り返す方法で計算を行っているシナリオの処理を軽くするため、現在のCWPyは必要な時以外はカードデータを再読み込みせずにメモリ上にあるものを使い回すようにしているのですが、そのせいで状態変数値まで使い回される状態になっていました。

    この現象は荷物袋に配付した場合に限り発生します(発見できていなかったのはそのためです)。また、宿へ持ち帰った際にはパスの書き換えなどの都合でデータのコピーが行われるため、発生しなくなります。

  2. 逃げ猫 reporter

    カードが初期状態で配布されるようになったことを確認しました。
    そして最初に配布したカードの変数が初期化される新たなバグを発見しました。
    ご確認よろしくお願いします。

    以下手順です。

    1. シナリオを開始し、カード配布を行う。
    2. 配布されたカードを荷物袋から直接使用して変数の設定を行う。
    3. いったんシナリオを抜けて再度開始する。
    4. 二枚目のカード配布を行う。
    5. (2.)で使用した最初のカードを再度使用すると変数が初期化されている。

  3. k4nagatsuki repo owner

    pull request #2650

    ありがとうございます。変数の値が保存されないケースがあったので修正しました。

    バグだらけで申し訳ありません。ご報告いただいて大変助かっております。

  4. 逃げ猫 reporter

    無事、正常に動作することを確認しました。

    いつも素早くご対応していただけて、こちらの方こそ頭が下がる思いです。
    微力ながら自分も開発の一助となれているのでしたら幸いです。

    この度のバグの修正、ありがとうございました。

  5. Log in to comment