106 lines
3.8 KiB
JavaScript
106 lines
3.8 KiB
JavaScript
//=============================================================================
|
|
// RPG Maker MZ - IM_AvoidParallelTrigger
|
|
//
|
|
// Copyright 2025 min-pub. All rights reserved.
|
|
// This source code or any portion thereof must not be
|
|
// reproduced or used without licensed in any manner whatsoever.
|
|
//=============================================================================
|
|
/*:
|
|
* @target MZ
|
|
* @plugindesc 並列実行イベント回避用関数群
|
|
* @author 四号戦車
|
|
* @base PluginCommonBase
|
|
* @base PluginUtils
|
|
* @orderAfter PluginCommonBase
|
|
* @orderAfter PluginUtils
|
|
*
|
|
* @command catchPlayerMove
|
|
* @text プレイヤー移動監視
|
|
* @desc プレイヤーが指定の座標から動いたら
|
|
* 指定のイベントを実行します
|
|
*
|
|
* @arg playerX
|
|
* @text プレイヤーX座標
|
|
* @desc 0を指定すると呼び出し時のプレイヤー座標を使用します
|
|
* @type number
|
|
* @default 0
|
|
*
|
|
* @arg playerY
|
|
* @text プレイヤーY座標
|
|
* @desc 0を指定すると呼び出し時のプレイヤー座標を使用します
|
|
* @type number
|
|
* @default 0
|
|
*
|
|
* @arg event
|
|
* @text 実行するテキスト
|
|
* @type common_event
|
|
* @defualt 0
|
|
*
|
|
*
|
|
* @help IM_AvoidParallelTrigger.js
|
|
*
|
|
* Version: 0.0.1
|
|
*
|
|
* イベントのトリガーに並列実行をするのはダメ絶対。
|
|
* ここに関数を作ってでも回避しましょう。
|
|
*
|
|
*/
|
|
(() => {
|
|
"use strict";
|
|
|
|
//========================================================================
|
|
// プラグイン定義
|
|
//========================================================================
|
|
const pluginName = "IM_AvoidParallelTrigger";
|
|
const script = document.currentScript;
|
|
const param = PluginManagerEx.createParameter(script);
|
|
|
|
//========================================================================
|
|
// 定数定義
|
|
//========================================================================
|
|
|
|
//========================================================================
|
|
// コアスクリプト変更部 (Game_Player)
|
|
//========================================================================
|
|
const _Game_Player_prototype_executeMove = Game_Player.prototype.executeMove;
|
|
Game_Player.prototype.executeMove = function(direction) {
|
|
_Game_Player_prototype_executeMove.apply(this, arguments);
|
|
if (!!$gameTemp.playerWatches && $gameTemp.playerWatches.length > 0) {
|
|
const playerX = this.x;
|
|
const playerY = this.y;
|
|
const target = $gameTemp.playerWatches.find(trigger => {
|
|
if (trigger.event === 0) {
|
|
return false;
|
|
}
|
|
return trigger.x !== playerX || trigger.y !== playerY;
|
|
});
|
|
|
|
if (!!target) {
|
|
// 一度実行したトリガーは削除
|
|
$gameTemp.playerWatches = $gameTemp.playerWatches.filter(trigger => trigger !== target);
|
|
PluginUtils.fireCommonEvent(target.event);
|
|
}
|
|
}
|
|
};
|
|
|
|
//========================================================================
|
|
// プラグインコマンド
|
|
//========================================================================
|
|
PluginManagerEx.registerCommand(script, 'catchPlayerMove', args => {
|
|
if (!$gameTemp.playerWatches) {
|
|
$gameTemp.playerWatches = [];
|
|
}
|
|
|
|
if (args.event > 0) {
|
|
const x = (args.playerX > 0 ) ? args.playerX : $gamePlayer.x;
|
|
const y = (args.playerX > 0 ) ? args.playerY : $gamePlayer.y;
|
|
|
|
$gameTemp.playerWatches.push({
|
|
x: x,
|
|
y: y,
|
|
event: args.event,
|
|
});
|
|
}
|
|
});
|
|
|
|
})();
|