SRPGコンバータMVプラグインで、再行動機能を作りたい
Posted: 2019年2月23日(土) 01:04
神鏡学斗様が提供している"SRPGコンバータMV"プラグインを改造して、ユニットの再行動の機能をもたせようと
試行錯誤していますが、どうにもうまくいきません。
行動自体は"battler.setSrpgTurnEnd(true);"というもので制限しているようなので、行動後に条件を使ってそれを"false"にすれば再行動自体はできますが、僕が望んでいるのは、行動後に強制的に再行動コマンドが発動して、任意の位置に移動させないとユニット行動が完了しないシステムです。
また、再行動はファイアーエムブレム(聖戦)のようなもので、例えば、最大移動範囲5マスであれば再行動時には最初に行動した距離を引いた分の距離しか移動できないようにしたいと思っております。
(例:最初に1マス移動したら再行動時は4マスのみ移動可能)
プラグイン内にある$gameSystem.setSubBattlePhase('');を利用したいのですが、それらはすべてクリックやOKボタンが条件になっており、うまく自動発動させることができません。
かなりマニアックな機能ですが、もしSRPGコンバータMVプラグインをご存じの方がいらっしゃったら、手を貸していただけると助かります。
ちなみにこちらで頑張って動作させようとした経緯は下のような感じです。
何しろ素人なので、根本的に間違っている部分もあると予想しています。
prototypeの手前は無理やりScene_Mapに合わせて、追加部分に追加しています。
試行錯誤していますが、どうにもうまくいきません。
行動自体は"battler.setSrpgTurnEnd(true);"というもので制限しているようなので、行動後に条件を使ってそれを"false"にすれば再行動自体はできますが、僕が望んでいるのは、行動後に強制的に再行動コマンドが発動して、任意の位置に移動させないとユニット行動が完了しないシステムです。
また、再行動はファイアーエムブレム(聖戦)のようなもので、例えば、最大移動範囲5マスであれば再行動時には最初に行動した距離を引いた分の距離しか移動できないようにしたいと思っております。
(例:最初に1マス移動したら再行動時は4マスのみ移動可能)
プラグイン内にある$gameSystem.setSubBattlePhase('');を利用したいのですが、それらはすべてクリックやOKボタンが条件になっており、うまく自動発動させることができません。
かなりマニアックな機能ですが、もしSRPGコンバータMVプラグインをご存じの方がいらっしゃったら、手を貸していただけると助かります。
ちなみにこちらで頑張って動作させようとした経緯は下のような感じです。
何しろ素人なので、根本的に間違っている部分もあると予想しています。
prototypeの手前は無理やりScene_Mapに合わせて、追加部分に追加しています。
コード: 全て選択
//再行動--------------------------------------------------------------------------------------------------------------------------------------------
Scene_Map.prototype.afterAction2 = function() {
$gameSwitches.setValue(29,false);
var event = $gameMap.event($gameVariables.value(44));
$gameTemp.setActiveEvent(event);
$gameSystem.srpgMakeMoveTable(event);
var battlerArray = $gameSystem.EventToUnit(event.eventId());
$gameParty.pushSrpgBattleActors(battlerArray[1]);
$gameTemp.reserveOriginalPos($gameTemp.activeEvent().posX(), $gameTemp.activeEvent().posY());
$gameSystem.setSrpgActorCommandStatusWindowNeedRefresh(battlerArray);
var battler = $gameSystem.EventToUnit($gameTemp.activeEvent().eventId())[1];
battler.setSrpgTurnEnd(false);
battler.addState(76);
console.log('追加行動1 '+ event.eventId());
var list = $gameTemp.moveList();
for (var i = 0; i < list.length; i++) {
var pos = list[i];
if (pos[2] == false && pos[0] == this._x && pos[1] == this._y) {
if ($gameSystem.areTheyNoUnits(this._x, this._y, 'actor')) {
console.log('追加行動2 '+ event);
SoundManager.playOk();
var route = $gameTemp.MoveTable(pos[0], pos[1])[1];
var event = $gameTemp.activeEvent();
$gameSystem.setSrpgWaitMoving(true);
event.srpgMoveRouteForce(route);
var battlerArray = $gameSystem.EventToUnit(event.eventId());
battlerArray[1].srpgMakeNewActions();
$gameSystem.setSrpgActorCommandWindowNeedRefresh(battlerArray);
$gameSystem.setSubBattlePhase('actor_command_window');
} else {
SoundManager.playBuzzer();
}
}
}
//return;
};
//再行動--------------------------------------------------------------------------------------------------------------------------------------------
//行動終了時の処理
//戦闘終了の判定はイベントで行う。
Scene_Map.prototype.srpgAfterAction = function() {
var battler = $gameSystem.EventToUnit($gameTemp.activeEvent().eventId())[1];
battler.srpgCheckFloorEffect($gameTemp.activeEvent().posX(), $gameTemp.activeEvent().posY());
//行動規制------------------------------------
console.log('バトラー ' + ($gameMap.event($gameVariables.value(44)).event().meta['T']));
battler.setSrpgTurnEnd(true);
$gameSystem.clearSrpgActorCommandWindowNeedRefresh();
$gameSystem.clearSrpgActorCommandStatusWindowNeedRefresh();
$gameTemp.clearMoveTable();
$gameTemp.clearTargetEvent();
$gameParty.clearSrpgBattleActors();
$gameTroop.clearSrpgBattleEnemys();
this.eventAfterAction();
//追加部分----------
if ($gameSwitches.value(29)) {
this.afterAction2();
}