//---------------------------------------------------------------- // イベントの起動に関係する処理 //---------------------------------------------------------------- // 戦闘中、ユニット上で決定キーが押された時の処理 // 戦闘中、通常のイベント内容は起動しないようにする // 戦闘中はユニットが選択されたと判断して、移動範囲演算とステータスの表示を行う(行動可能アクターなら行動する)。 var _SRPG_Game_Player_startMapEvent = Game_Player.prototype.startMapEvent; // SEを設定するためのプラグインパラメータ var actorSelectSE = parameters['ActorSelectSE'] || '任意のSE名'; // 任意のSE名を指定 Game_Player.prototype.startMapEvent = function(x, y, triggers, normal) { if ($gameSystem.isSRPGMode() === true) { if (!$gameMap.isEventRunning() && $gameSystem.isBattlePhase() === 'actor_phase') { // サブフェーズがnormal(ユニットを選択する状態)の時 if ($gameSystem.isSubBattlePhase() === 'normal') { $gameMap.eventsXy(x, y).forEach(function(event) { if (event.isTriggerIn(triggers) && !event.isErased()) { // 選択されたユニットがアクターの場合 if (event.isType() === 'actor') { // 選択時のSEを再生 AudioManager.playSe({ name: actorSelectSE, volume: 90, pitch: 100, pan: 0 }); $gameTemp.setActiveEvent(event); $gameSystem.srpgMakeMoveTable(event); var battlerArray = $gameSystem.EventToUnit(event.eventId()); // 行動可能なら移動の処理に移る if (battlerArray[1].canInput() === true) { $gameParty.pushSrpgBattleActors(battlerArray[1]); $gameTemp.reserveOriginalPos($gameTemp.activeEvent().posX(), $gameTemp.activeEvent().posY()); $gameSystem.setSrpgActorCommandStatusWindowNeedRefresh(battlerArray); $gameSystem.setSubBattlePhase('actor_move'); } else { $gameSystem.setSrpgStatusWindowNeedRefresh(battlerArray); $gameSystem.setSubBattlePhase('status_window'); } return; // 選択されたユニットがエネミーの場合 } else if (event.isType() === 'enemy') { SoundManager.playOk(); $gameTemp.setActiveEvent(event); $gameSystem.srpgMakeMoveTable(event); var battlerArray = $gameSystem.EventToUnit(event.eventId()); $gameSystem.setSrpgStatusWindowNeedRefresh(battlerArray); $gameSystem.setSubBattlePhase('status_window'); return; // 選択されたユニットがプレイヤーイベントの場合 } else if (event.isType() === 'playerEvent') { if (event.pageIndex() >= 0) event.start(); return; } } }); // サブフェーズがactor_target(対象を選んでいる状態)の時 } else if ($gameSystem.isSubBattlePhase() === 'actor_target') { $gameMap.eventsXy(x, y).forEach(function(event) { if (event.isTriggerIn(triggers) && !event.isErased()) { // アクター、またはエネミーが選択された場合 if (event.isType() === 'actor' || event.isType() === 'enemy') { var actionArray = $gameSystem.EventToUnit($gameTemp.activeEvent().eventId()); var targetArray = $gameSystem.EventToUnit(event.eventId()); if (targetArray[0] === 'actor' && actionArray[1].currentAction().isForFriend() || targetArray[0] === 'enemy' && actionArray[1].currentAction().isForOpponent()) { // 戦闘開始ウィンドウを開始する(canUseの判定のため、先にsub phase設定する) $gameSystem.setSubBattlePhase('battle_window'); // ターゲットイベントを設定する $gameTemp.setTargetEvent(event); // 戦闘シーンのセッティング $gameSystem.setupSrpgBattleScene(actionArray, targetArray); // バトルウィンドウをスキップする設定で行動出来ない場合はターゲット選択に戻す var skill = actionArray[1].currentAction().item(); if (_srpgPredictionWindowMode === 3 && !actionArray[1].canUse(skill)) { // actionの初期化 targetArray[1].clearActions(); // 行動タイミングと攻撃射程の初期化 actionArray[1].setActionTiming(-1); targetArray[1].setActionTiming(-1); actionArray[1].clearSrpgRangeListForBattle(); targetArray[1].clearSrpgRangeListForBattle(); // 対象と距離の初期化 $gameTemp.clearTargetEvent(); $gameTemp.setSrpgDistance(0); // ターゲット選択に戻す $gameSystem.setSubBattlePhase('actor_target'); return; } else { // 戦闘開始ウィンドウに進む SoundManager.playOk(); $gameSystem.clearSrpgActorCommandStatusWindowNeedRefresh(); if (_srpgPredictionWindowMode !== 3) $gameSystem.setSrpgStatusWindowNeedRefresh(actionArray); $gameSystem.setSrpgBattleWindowNeedRefresh(actionArray, targetArray); } } } } }); } } } else { _SRPG_Game_Player_startMapEvent.call(this, x, y, triggers, normal); } }; //戦闘中、隣接するイベントへの起動判定は行わない var _SRPG_Game_Player_checkEventTriggerThere = Game_Player.prototype.checkEventTriggerThere; Game_Player.prototype.checkEventTriggerThere = function(triggers) { if ($gameSystem.isSRPGMode() === false) { _SRPG_Game_Player_checkEventTriggerThere.call(this, triggers); } }; //戦闘中、接触による起動判定は行わない var _SRPG_Game_Player_checkEventTriggerTouch = Game_Player.prototype.checkEventTriggerTouch; Game_Player.prototype.checkEventTriggerTouch = function(x, y) { if ($gameSystem.isSRPGMode() === false) { _SRPG_Game_Player_checkEventTriggerTouch.call(this, x, y); } };