SRPGコンバータMVプラグインで、再行動機能を作りたい

tkr
記事: 14
登録日時: 2018年9月04日(火) 11:53

SRPGコンバータMVプラグインで、再行動機能を作りたい

投稿記事by tkr » 2019年2月23日(土) 01:04

神鏡学斗様が提供している"SRPGコンバータMV"プラグインを改造して、ユニットの再行動の機能をもたせようと
試行錯誤していますが、どうにもうまくいきません。

行動自体は"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();
}


のぶさん
記事: 41
登録日時: 2019年5月27日(月) 17:49

Re: SRPGコンバータMVプラグインで、再行動機能を作りたい

投稿記事by のぶさん » 2019年6月15日(土) 18:07

こんにちは。
SRPGコンバータを使っています。他の競合しそうなプラグインは外しています。
クロスカウンターが発動しませんでした。

混乱してアクター同士のバトルにしたり、スキル攻撃でアクターに攻撃したりと、2パターンで全部ためしました。反撃率は100%に設定。

複数のアクターに設定。メモの設定をいくども変えてやってみました。
<CE_反撃条件:skill.id === 1>
<CE_クロスカウンター>
<CE_クロスカウンター条件:0>


<<CE_反撃条件:skill.id === 1>
CE_CrossCounter>
<CE_CrossCounterCond:0>


<CE_反撃条件:skill.id === 1>
<CE_クロスカウンター>
<CE_クロスカウンター条件:0>
<CE_CrossCounter>
<CE_CrossCounterCond:0>
を設定。

どれも通常のカウンター(攻撃を無効化してカウンター)が発動。
職業欄に設定しても、通常のカウンター。

<CE_反撃条件:skill.id === 1>

<CE_反撃条件:skill.id === 3>や<CE_反撃条件:skill.id === 5>に設定して、
スキル3やスキル5を通常攻撃の物理攻撃にして、殴らせてみても、通常のカウンター。

まだ一度も発動していません。
原因はわかりますでしょうか?
のぶさん
記事: 41
登録日時: 2019年5月27日(月) 17:49

Re: SRPGコンバータMVプラグインで、再行動機能を作りたい

投稿記事by のぶさん » 2019年6月15日(土) 18:09

投稿場所を間違えました。すいません。

“MV:質問” へ戻る