今回、シチュエーションコマンドのような
・ある条件を満たすとあるスキルが利用可能になり画像がコモンイベントを通じて表示される
というインターフェイスを作ってみたいと思いました。しかし、
コモンイベントを呼び出すスクリプト自体は通過している(ブレークポイントの設置で確認)にもかかわらず、ターンフェイズにならないとコモンイベントが呼び出されない
という不具合が発生してしまいました。
この原因について考えてみて、なんかの再描画命令を持ってくればいいのでは?とおもったのですが、自分の知識不足でそれ以降の原因を特定できませんでした。
なので、皆さん有識者の力を借りたいと思い投稿しました
【詳細】
コモンイベントは トリアコンタンさんのボタン化プラグインを使用して使っています。プラグインコマンドはP_CALL_KEY_BIND 1 triangle 1 に設定しています。
もともとtriangle(Qキーにも対応)入力にはコモンイベントが呼ばれていなくても、上記のある条件を満たせば受け付けています。
どうかよろしくお願いいたします。
戦闘中のコモンイベント呼び出しに即効性がない
- kannazaki_
- 記事: 8
- 登録日時: 2019年7月31日(水) 20:17
Re: 戦闘中のコモンイベント呼び出しに即効性がない
解決法については色々あるので、「ターンフェイズにならないとコモンイベントが呼び出されない」の「原因」だけ先ず述べます。
コモンイベントの呼び出しを行うというのは、恐らくreserveCommonEventに繋がるコマンドで行っていると考えますが、これはreserveの名の通り「予約」です。
実際にコモンイベントが実行されるのは、Game_Interpreter.prototype.setupReservedCommonEventであり、戦闘中に於いては
BattleManager.updateEvent→BattleManager.updateEventMain→Game_Troop.prototype.setupBattleEvent→Game_Interpreter.prototype.setupReservedCommonEvent
の流れで呼び出されます。
このBattleManager.updateEvent→BattleManager.updateEventMainの部分でフェイズのチェックが行われている(start, turn, turnEndのみ)のが「原因」ですね。
コモンイベントの呼び出しを行うというのは、恐らくreserveCommonEventに繋がるコマンドで行っていると考えますが、これはreserveの名の通り「予約」です。
実際にコモンイベントが実行されるのは、Game_Interpreter.prototype.setupReservedCommonEventであり、戦闘中に於いては
BattleManager.updateEvent→BattleManager.updateEventMain→Game_Troop.prototype.setupBattleEvent→Game_Interpreter.prototype.setupReservedCommonEvent
の流れで呼び出されます。
このBattleManager.updateEvent→BattleManager.updateEventMainの部分でフェイズのチェックが行われている(start, turn, turnEndのみ)のが「原因」ですね。
----
-出先に居る場合回答が未テスト状態である事が多い為、テストは重々にお願いいたします。
-基本自分や友人の問題解決は自分で1からプラグインを書いているので、「こういうプラグインはありますか」に対しては助けになれません。ご了承ください。
-出先に居る場合回答が未テスト状態である事が多い為、テストは重々にお願いいたします。
-基本自分や友人の問題解決は自分で1からプラグインを書いているので、「こういうプラグインはありますか」に対しては助けになれません。ご了承ください。
- kannazaki_
- 記事: 8
- 登録日時: 2019年7月31日(水) 20:17
Re: 戦闘中のコモンイベント呼び出しに即効性がない
原因を教えていただきありがとうございます。しかしながら自分の知識不足故、解決できなかったので失礼ですが、解決策を教えていただけないでしょうか?
以下のスクリプトにして実行してみたものの即効性はありませんでした
①
$gameTemp.reserveCommonEvent(0001);
this.updateEventMain();
②
$gameTemp.reserveCommonEvent(0001);
$gameTroop._interpreter.setupReservedCommonEvent();
③
$gameTemp.reserveCommonEvent(0001);
$gameTroop.setupBattleEvent();
以下のスクリプトにして実行してみたものの即効性はありませんでした
①
$gameTemp.reserveCommonEvent(0001);
this.updateEventMain();
②
$gameTemp.reserveCommonEvent(0001);
$gameTroop._interpreter.setupReservedCommonEvent();
③
$gameTemp.reserveCommonEvent(0001);
$gameTroop.setupBattleEvent();
Re: 戦闘中のコモンイベント呼び出しに即効性がない
setupReservedCommonEventを強制的に呼び出していても、毎フレームinterpreterを動かしている$gameTroop.updateInterpreter();がupdateEventMainの中に取り残されているので、「開始はしたが進まない」状態になっております。
これをstart, turn, turnEndのみのチェックの外まで出すか、別途毎フレーム呼び出す必要がありますが、何れも副作用がないとは言い切れません。スクリプト欄に書くだけでは無理で、プラグインの製作かコアスクリプト書き換えが必要です。
なので、そも「コモンイベントを呼び出さないとダメな動きか」を一考すべきかと思います。他にコードで組んで動きが実現できるのならば多分そっちの方が簡単です。
また余談ですが、イベントIDを0001と言ったように0を前に付けて書くのはあまりお勧めしません。
Javascriptのバージョンにもよりますが、8進数として読まれる事があります。
これをstart, turn, turnEndのみのチェックの外まで出すか、別途毎フレーム呼び出す必要がありますが、何れも副作用がないとは言い切れません。スクリプト欄に書くだけでは無理で、プラグインの製作かコアスクリプト書き換えが必要です。
なので、そも「コモンイベントを呼び出さないとダメな動きか」を一考すべきかと思います。他にコードで組んで動きが実現できるのならば多分そっちの方が簡単です。
また余談ですが、イベントIDを0001と言ったように0を前に付けて書くのはあまりお勧めしません。
Javascriptのバージョンにもよりますが、8進数として読まれる事があります。
----
-出先に居る場合回答が未テスト状態である事が多い為、テストは重々にお願いいたします。
-基本自分や友人の問題解決は自分で1からプラグインを書いているので、「こういうプラグインはありますか」に対しては助けになれません。ご了承ください。
-出先に居る場合回答が未テスト状態である事が多い為、テストは重々にお願いいたします。
-基本自分や友人の問題解決は自分で1からプラグインを書いているので、「こういうプラグインはありますか」に対しては助けになれません。ご了承ください。
- kannazaki_
- 記事: 8
- 登録日時: 2019年7月31日(水) 20:17
Re: 戦闘中のコモンイベント呼び出しに即効性がない
返信ありがとうございます。なんか難しい実装内容が必要なのですね。コモンイベントを考えない方向で考えてみたいと思います。知恵を貸していただきありがとうございました