いつもお世話になっています。
プレイヤーからの接触を並列処理トリガーのイベントで行うプラグインをリクエストします。
具体的には、下記を実現したいのですが、④ができなくて困っています。
①並列処理でプレイヤーのリージョンによって行動が変わるシンボルエンカウントイベント
(無視⇔プレイヤーを追跡して接触判定で戦闘)
②すり抜けさせない(撃破せずに戦闘が終わった場合、すり抜けさせたくない)
③1マス隣接では接触としたくない
④無視状態でもプレイヤーから接触した場合は接触判定に応じた処理を行いたい
⇒イベントから接触を含む場合でも、問題ないです
④を実現しようと、下記を試しましたが駄目でした。
・スクリプトでgamePlayer.isMoving()を取り、プレイヤーの方向で判定
⇒すり抜けない場合はそもそもisMovingが起動しない
・同座標になった時判定
⇒すり抜けない場合はそもそも同座標にならない
そもそも判定の周期的に契機が違うから厳しいでしょうか?
何か解決できるアイディアやプラグインがあれば、何卒よろしくお願いします。
[解決済み]プレイヤーからの接触判定を並列処理トリガーイベントで行うプラグイン
Re: プレイヤーからの接触判定を並列処理トリガーイベントで行うプラグイン
もしかしたら
トリアコンタンさんのイベント接触判定プラグインで
4番が解決するかもしれません。
https://plugin-mz.fungamemake.com/archives/5391
ツクプラには他にも接触判定関連のプラグインが登録されているので
色々試してみるのもいいかもしれません。
トリアコンタンさんのイベント接触判定プラグインで
4番が解決するかもしれません。
https://plugin-mz.fungamemake.com/archives/5391
ツクプラには他にも接触判定関連のプラグインが登録されているので
色々試してみるのもいいかもしれません。
Re: プレイヤーからの接触判定を並列処理トリガーイベントで行うプラグイン
ありがとうございます。
上記のプラグインについて試してみたのですが、
「並列処理」がトリガーのイベントでは動かないみたいでした……
①導入したいプロジェクトでONにするとマップ移動時に「cannot read property 'clearStartByTouch'」というエラーが表示されてしまう(おそらく何かの競合の影響)
⇒this.character(0) が undefined の場合はスキップするように変更(chatGPT頼りです……)
const _Game_Interpreter_terminate = Game_Interpreter.prototype.terminate;
Game_Interpreter.prototype.terminate = function() {
_Game_Interpreter_terminate.apply(this, arguments);
if (this._eventId > 0 && this._depth === 0) {
const character = this.character(0);
if (character) {
character.clearStartByTouch();
}
}
};
② ①の変更を行ったプロジェクトと「EventTouchCheck.js+PluginCommonBase.js」だけの新規プロジェクト
で試してみましたが、「イベントから接触」トリガーの際に
「プレイヤーから接触」する場合OFF、「イベントから接触」する場合のみONという条件分岐が作れるのですが、
「並列処理」をトリガーとしている場合は発動しませんでした。
上記のプラグインについて試してみたのですが、
「並列処理」がトリガーのイベントでは動かないみたいでした……
①導入したいプロジェクトでONにするとマップ移動時に「cannot read property 'clearStartByTouch'」というエラーが表示されてしまう(おそらく何かの競合の影響)
⇒this.character(0) が undefined の場合はスキップするように変更(chatGPT頼りです……)
const _Game_Interpreter_terminate = Game_Interpreter.prototype.terminate;
Game_Interpreter.prototype.terminate = function() {
_Game_Interpreter_terminate.apply(this, arguments);
if (this._eventId > 0 && this._depth === 0) {
const character = this.character(0);
if (character) {
character.clearStartByTouch();
}
}
};
② ①の変更を行ったプロジェクトと「EventTouchCheck.js+PluginCommonBase.js」だけの新規プロジェクト
で試してみましたが、「イベントから接触」トリガーの際に
「プレイヤーから接触」する場合OFF、「イベントから接触」する場合のみONという条件分岐が作れるのですが、
「並列処理」をトリガーとしている場合は発動しませんでした。
Re: プレイヤーからの接触判定を並列処理トリガーイベントで行うプラグイン
あー・・・うん、そういうことか。
すみません、想定していた前提が間違ってました。
新たな提案を2つ。
1つは
そのイベントのページを並列処理させるのではなく
別のイベントから、そのイベントを並列処理で動かし
接触判定したいイベント自体は、トリガーをイベントから接触などにして
イベント内容をシンボルエンカウントにすればいいと思います。
シンボルエンカウントイベントが起動したときに
スイッチをまずOFFにして、移動用の並列処理を止めた方がいいかも。
もう一つは、とんびさんの記事によると
https://zenn.dev/tonbi/articles/3ff68ba ... overoutemz
CommonMoveRouteMZ(作者/terunon様&神無月サスケ様)で、移動ルートの設定にも
コモンイベントの呼び出しが使える機能があるそうなので
シンボルエンカウントイベントを、接触トリガーにして
自律移動に、リージョンの上を歩く命令のコモンイベントをつけたら
いいかもしれないと思いました。
自律移動を止める場合もスイッチとかで止める必要があるので
接触時のイベントはセルフスイッチONとかにして
別のページで戦闘イベントをした方がいいかもですが。
これで、イベント接触判定プラグインが正常動作すれば解決できると思うけど
競合があるっぽいのでダメかなー。
PS、返信が付くまでの間に思いついたこととかをちょこちょこ加筆したり変更したりしてますよー。
すみません、想定していた前提が間違ってました。
新たな提案を2つ。
1つは
そのイベントのページを並列処理させるのではなく
別のイベントから、そのイベントを並列処理で動かし
接触判定したいイベント自体は、トリガーをイベントから接触などにして
イベント内容をシンボルエンカウントにすればいいと思います。
シンボルエンカウントイベントが起動したときに
スイッチをまずOFFにして、移動用の並列処理を止めた方がいいかも。
もう一つは、とんびさんの記事によると
https://zenn.dev/tonbi/articles/3ff68ba ... overoutemz
CommonMoveRouteMZ(作者/terunon様&神無月サスケ様)で、移動ルートの設定にも
コモンイベントの呼び出しが使える機能があるそうなので
シンボルエンカウントイベントを、接触トリガーにして
自律移動に、リージョンの上を歩く命令のコモンイベントをつけたら
いいかもしれないと思いました。
自律移動を止める場合もスイッチとかで止める必要があるので
接触時のイベントはセルフスイッチONとかにして
別のページで戦闘イベントをした方がいいかもですが。
これで、イベント接触判定プラグインが正常動作すれば解決できると思うけど
競合があるっぽいのでダメかなー。
PS、返信が付くまでの間に思いついたこととかをちょこちょこ加筆したり変更したりしてますよー。
Re: プレイヤーからの接触判定を並列処理トリガーイベントで行うプラグイン
ありがとうございます!
2つ目のCommonMoveRouteMZ
で従来の並列処理をコモンイベントで行う方法でうまく行けました!!
1つ目でも単体イベントなら行けそうでした!
(索敵範囲の処理も行っていたので、マップ上のシンボルに個別対応する際漏れが出そうで見送りました)
2つ目のCommonMoveRouteMZ
で従来の並列処理をコモンイベントで行う方法でうまく行けました!!
1つ目でも単体イベントなら行けそうでした!
(索敵範囲の処理も行っていたので、マップ上のシンボルに個別対応する際漏れが出そうで見送りました)