ページ 11

(解決済み)YEP_X_ActSeqPack1~3:ステート異常時にアクションが動かない

Posted: 2017年1月31日(火) 20:00
by roh
YEP_X_ActSeqPack1~3を導入しています。

敵(もしくは味方)が「眠り」や「麻痺」のステートといった『行動できない』状態にある時、「float」や「move」「jump」といったアクションが反映されません。

具体的に、たとえば、スキルの使用者が敵を「もちあげる(float)」→「放り投げる(jump+move)」といったアクションの際、対象が「睡眠」などの場合、スキル使用者がその場でモーションを行うだけで対象は動きません。


ひとまずプラグインの競合を疑ってみましたが、それはなさそうです。

対処方法として「眠り」や「麻痺」の際の行動制約を『行動できない』から『なし』に変更し、準公式プラグインの「NumbState.js」を利用して無効化の数値を100%としました。
...そうすると、アクションはちゃんと反映されます。
ステートの行動制約が『行動できない』状態の時は、強制的に<sprite cannot move>が働いている感じなのでしょうか。
「眠り」や「麻痺」などは、システムの定義上では「戦闘不能」と大差無いステートなので、ツクールMVは始めからそういう仕様なのかもしれない...ということでごまかしていましたが、モヤモヤするので質問しました。


ちなみに「NumbState.js」だけだと「眠り」にかかっているのにコマンド入力できてしまうのは変な感じがするので、「眠り」などのステートに『自動戦闘』を加えてコマンド入力ができない(バックグラウンドでは何らかのコマンドを選択しているが100%で行動が無効化される)としています。
これで解決か、と思ったら、「眠り」ステートなどが魔法などのスキルで解消された後に、自動戦闘で選択していたコマンドを行ってしまうので、これも見た目上はおかしいな、と。



というわけで、長くなりましたが、「眠り」や「麻痺」といった『行動できない』制約を受けるステートにかかっている際にバトラーがアクションを受け付けないことについて、システムのプラグインを何らか書き換えればいいだけ、とも思ったりもするのですが、原因や対処方法などをご存知の方がいれば教えてください。

Re: YEP_X_ActSeqPack1~3:ステート異常時にアクションが動かない

Posted: 2017年1月31日(火) 23:21
by 剣崎 宗二
お疲れ様です。

この件、原因の大本としてはYanfly BattleEngineCoreのspriteCannotMoveチェックの際、rpg_objectにて指定されているthis.canMove()をもチェック条件に含めているからです。
rpg_object内のthis.canMoveを変更すると影響エリアが大きくなるため、以下の差し替え、あるいはプラグインとしての追加を行ってみてはどうでしょうか。

コード: 全て選択

Game_Battler.prototype.spriteCanMove = function() {
    if (!$gameSystem.isSideView()) return false;
    for (var i = 0; i < this.states().length; ++i) {
      var state = this.states()[i];
      if (state.spriteCannotMove) return false;
    }
    //this.canMove()は this.isAppeared() && this.restriction() < 4; の為、後半を排除して代用
    return this.isAppeared();
};
(元はYanfly BattleEngineCore内のFunctionです)


一度お試しください。

Re: YEP_X_ActSeqPack1~3:ステート異常時にアクションが動かない

Posted: 2017年2月01日(水) 07:07
by roh
素晴らしいですね。
プラグインにして挿入したら解決しました。ありがとうございます。


ご回答までの間に、自分でもいろいろためしてみまして、「NumbState.js」だけだと、スキル・アイテム等でのステート解除の場合は良いのですが、たとえばダメージなどでのステート解除の場合には、このサイトで他の方がつくった「StateChangeIfRemove.js」を導入して、別ステート(そのターンだけ行動キャンセル)に引き継いで、というようなことで対応しようかと思っていました。

が、そういう面倒をしなくてすみました!