ページ 11

ステートについて

Posted: 2018年9月23日(日) 23:55
by C_kochiya
敵を引き付ける、完全ガードなど、そのターンだけ適用されるステートがアクターにかかるというスキルを作りました。しかし、これを2ターン続けて使用すると、ステートがかかりません。しかし、3ターン目にまたスキルを使うと普通にステートがかかります。つまり、1ターン目成功→2ターン目失敗→3ターン目成功といった感じです。また、2ターン目にそのスキルを使わなければ3ターン目は普通に動作します。
使用者にかけるもの、味方にかけるもので試したところ、どちらも同じ現象が発生しました。(敵にかけるものは試していませんが、恐らく同じようになるかと思います。)
プラグイン『YEP_X_ActSeqPack1』を用いて、アクションシーケンスで初めにステートを解除して、新たに付け直すということを試しましたが、ダメでした…。

これって何が原因なのでしょうか?何か知ってる事、解決策などありましたら教えて頂けないでしょうか。

Re: ステートについて

Posted: 2018年9月25日(火) 12:25
by 剣崎 宗二
ツクールMVのデフォルトにある、(私はバグの一種だと思っている)仕様となります。
ステートの追加の際の条件に、「前回の行動によってそのステートが排除されていない事」が入っています。
(rpg_object.js内
Game_Battler.prototype.addState → Game_Battler.prototype.isStateAddable → Game_ActionResult.prototype.isStateRemoved
の順に参照)


この「排除」(実質Game_Battler.prototype.removeState → Game_ActionResult.prototype.pushRemovedStateを経由した全てのステート解除)には「経過ターンによる排除」も含まれており、即ち
「前回のステート解除後、自分を目標にしたスキル(敵の攻撃、味方のサポートの何れも可)を受けずにステートを付与しようとすると失敗する」と言う事となります。
要は「解除してから自分を目標にするスキルを受けるまでの限定的な耐性」だと考えていただければ。
(多分解除された後に、敵から一発攻撃を受けてから同じ付与スキルを使えば成功していたと思われます。別のスキルを受ければresultが更新される為です)

修正については「自動更新で解除される際resultにステートの解除結果をセットしない」「そもそもステートの追加時に解除されたかを無視する」等色々考えられますが…
何れも結構根本的な所を直す関係上他プラグインとの競合の可能性はあり、私自身が使うのであれば「競合したらまた競合先を解析し、腕捲くって直せば宜しい」の精神で何とかなるのですが…人様に使わせられるコードではないのが現状です。