宿に帰還後セーブ失敗、強制終了し宿が開けなくなる

Issue #905 resolved
lok created an issue

タイトルの状況でのエラーログです。

直前のシナリオ内で、アイテム(シナリオ配布・シナリオ以前から所持してる問わず)を消費した時に起こるようです。

シナリオ内でのセーブ、一旦エンジンを終了してからロードは正常にできます。

なぜかわかりませんが、Yadoフォルダの開けなくなった宿のデータをコピー→コピーした宿は開けるようになります。
Py3でスキンデータを編集していた時にこの現象が起こり始め、Windows Update後に一旦収まり、今回Py4にアップデートしたところまた発生し始めました。スキンを切り替えるなどして試してみましたが、スキンによる違いはないようです。報告が遅れましてすみません。
環境はWindows10です。

他にもシナリオ内のアイテムやスキルのデータが読み込まれずエラーメッセージが出ることがあります。
こちらは数回エンジンを起動し直すと解消されます。環境によるものでしょうか。

Version : 4.0 (32-bit) / 2020-01-01 00:35:58
DateTime: 2020-01-07 17:52:40
Traceback (most recent call last):
File ".\cw\thread.py", line 2918, in load_yado
File ".\cw\thread.py", line 2938, in _load_yado
File ".\cw\thread.py", line 2964, in _load_yado2
File ".\cw\data.py", line 2440, in init
File ".\cw\data.py", line 3258, in _retry_save
File ".\cw\data.py", line 2393, in read_list
UnicodeDecodeError: 'cp932' codec can't decode byte 0x83 in position 21: illegal multibyte sequence

Traceback (most recent call last):
File ".\cw\frame.py", line 685, in OnYADOSELECT
File ".\cw\thread.py", line 2930, in load_yado
File ".\cw\thread.py", line 2918, in load_yado
File ".\cw\thread.py", line 2938, in _load_yado
File ".\cw\thread.py", line 2964, in _load_yado2
File ".\cw\data.py", line 2440, in init
File ".\cw\data.py", line 3258, in _retry_save
File ".\cw\data.py", line 2393, in read_list
UnicodeDecodeError: 'cp932' codec can't decode byte 0x83 in position 21: illegal multibyte sequence

Comments (7)

  1. k4nagatsuki repo owner

    pull request #2697

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

    CardWirthPyはセーブ中に何らかの要因で強制終了が発生した場合、次の宿の読み込み時にセーブ処理の続きを行ってできるだけデータを復旧しようとするのですが、その処理にいつの間にかバグが入り込んでおり、セーブ中にファイルの削除処理が発生する場合(つまりカードを消費したような場合)には復旧処理の中でエラーが発生するようになっていました。

    そのため、宿を読み込もうとするたびに復旧処理が走る→エラーで止まる→復旧が終わっていないので次の読み込みで復旧処理が走る→……といった状態になっていたものと思われます。

    宿をコピーすると起動できるのは、復旧情報は宿本体とは別の場所に置かれており、その情報に関連付けられていない別の宿では復旧処理が走らないためです。

    修正しましたので、Downloadsから最新のテスト版(cardwirthpy_<日付>_x64.zip(64-bit版)またはcardwirthpy_<日付>_x86.zip(32-bit版))を4.0に上書きして、読み込めなくなった宿のロードをお試しください。


    それはそれとして、セーブ中の強制終了やデータの読み込み失敗が頻発するという事には別の問題があるはずです。CardWirthPyやシナリオを外部ストレージやネットワークドライブで実行しているような事はあるでしょうか。

  2. k4nagatsuki repo owner

    これは全くあてにならない情報で、環境にもよると思うのですが、突然の強制終了は64-bit版より32-bit版の方が起こりにくい傾向にあるようです。

    現在使用中の版と異なる版を使うと、少し事態が改善するような事があるかもしれません(悪化する事もあるかもしれません)。

  3. lok reporter

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

    デスクトップのNEXTのシナリオフォルダ内に置いているフォルダをショートカットで呼び出しています。

    エンジンやフォルダを置いている場所が悪いのでしょうか。

  4. k4nagatsuki repo owner

    シナリオフォルダへのショートカットによってファイルの読み込みエラーが発生するというのは考えづらいのですが、過去のWindowsではパスが長すぎる事によるソフトウェアの不具合というものも散見されていました。現在も理屈の上では発生しえます。

    エンジンやシナリオの場所を変更する事でエラー発生率が下がるという事も無いとはいえないと思います。

  5. k4nagatsuki repo owner

    宿が開けなくなる問題については修正済みのはずなので一旦クローズします。

    強制終了については、必要そうであればまたご報告ください。

  6. lok reporter

    すみません、報告を忘れていました。強制終了に関してはこちらのウイルス対策ソフトが原因でした。対応ありがとうございました。

  7. k4nagatsuki repo owner

    ありがとうございます。

    CWPyは比較的マイナーソフトにあたる上に細かいファイルをたくさん扱うのでヒューリスティック検査をやるウィルス対策ソフトとはちょっと相性が悪いですね。

  8. Log in to comment