ページ 1 / 1
[Bugfix希望]プレイヤーが一人残らずスキルで逃げるとフリーズ
Posted: 2016年8月25日(木) 16:19
by くらむぼん
正直ここまで普通の操作で、しかも発売から何ヶ月も経って
未だにこんなバグが起こるなんて信じられないのですが…
表題の通り、戦闘でプレイヤー(アクター側)の最後に残った一人を
「逃げる」効果のスキルで逃がすと問答無用でフリーズします。
- 「逃げる」を習得したアクターがそれを使って逃げるとフリーズ
- 「戦闘行動の強制:最後のアクター、逃げる、ラストターゲット」でフリーズ
- 標的を「敵単体」に変更した「逃がす」を敵に使われてもフリーズ
- 戦闘テストでも実際のプレイでもフリーズ
→とにかく最後の一人のアクターがスキルで逃げるとフリーズ!!
作ってる作品にも関わってくるのでもしよろしければBugfixプラグインの作成をお願いします。
それから…ツクール開発部の方とコネクションが取れる方は
ぜひ次バージョンで直して頂けるようご連絡頂ければ幸いです。どうかよろしくお願いします!
Re: [Bugfix希望]プレイヤーが一人残らずスキルで逃げるとフリーズ
Posted: 2016年8月25日(木) 17:17
by yamachan
こんにちは!
ver1.3.1 で試しましたが、フリーズしました。
rpg_managers.js に以下のような定義がありますが
コード: 全て選択
BattleManager.update = function() {
if (!this.isBusy() && !this.updateEvent()) {
switch (this._phase) {
case 'start':
this.startInput();
break;
case 'turn':
this.updateTurn();
break;
case 'action':
this.updateAction();
break;
case 'turnEnd':
this.updateTurnEnd();
break;
case 'battleEnd':
this.updateBattleEnd();
break;
}
}
};
ここで this._phase == 'battleEnd' のとき、this.updateEvent() が true を返すので、無限ループに陥っているようにみえます。
他に影響が出にくいように、また行数を変えないように、とりあえず以下のように対応コードを追加してみました。
コード: 全て選択
case 'battleEnd':
this.updateBattleEnd();
break;
}
} else if (!this.isBusy() && this._phase == 'battleEnd') {this.updateBattleEnd();}
};
これで無限ループにはならないのですが… 全員逃げると、戦闘に負けてゲームオーバーになります。
ざっとコードをみたところでは、スキルで全員がエスケープするのは、想定外のような気がします…
ちゃんと対応するには、エスケープ可能かどうか判断したうえで、エスケープ処理を実施する必要がありそうですね。
(this._preemptive = true にしてBattleManager.processEscape()を呼べばいいかな?)
エスケープ不可のボス戦では… さて、どうすべきなんでしょうか… エスケープのスキル効果自体を無効にすべき???
中途半端ですみませんが、とりいそぎ報告させていただきました。
ではでは。
Re: [Bugfix希望]プレイヤーが一人残らずスキルで逃げるとフリーズ
Posted: 2016年8月25日(木) 20:27
by くらむぼん
検証ありがとうございます!
確かに、ソースコードの流れや逃走不可戦の処理から考えても
「スキルでアクターが全員逃げる」こと自体が想定外のようですね。
しかしまあ想定外の現象がそのままフリーズに繋がるのは問題なので
開発部側が何らかの対応をすべきなのは間違いないでしょう。
個人的には公式が(本体修正で)スキル逃げに対応してくれたら嬉しいですね。
私からすると「逃走不可戦でも逃げられる」というような「仕様の穴」問題は
ツクラー側が気をつければいいと思ってるので、フリーズという大問題よりは気になりませんし。
まあそこまでの大規模改変が嫌なら最低でも「最後のアクターの逃げるは必ず失敗させる」辺りが落とし所かな…
(その場合はスキル逃げ実装はプラグインに任せる)
…ここに書いても開発部には伝わらないでしょうか(笑)