【解決済】対象に同じステートを付与した時、上書きではなく残ターン数を加算する方法

こよでん
記事: 6
登録日時: 2022年5月20日(金) 20:28

【解決済】対象に同じステートを付与した時、上書きではなく残ターン数を加算する方法

投稿記事by こよでん » 2023年1月20日(金) 22:42

ステートを付与するアイテム・スキルを使用した時に、すでに対象が同じステートを持っていた場合、ステートの残ターン数は上書きになりますが、これを継続ターン数を加算する方法を考えています。

例:継続ターン数残り1の「毒」ステートにかかっている敵に、継続ターン数最小「6」最大「6」の同じステートである「毒」を付与した場合に敵のステート残数を「7」にしたい。

要望にぴったりのプラグインは見つからなかったため、私の知識量で考えられる方法として、下記を考えました。

●現在対象にかかっているステートの残ターン数をスクリプト等で変数に取得したのちに、それを加算したターン数を継続ターンとしたステートで上書きする

この場合だと、トリアコンタン様の「動的データベース構築プラグイン」にて、ステートの最小ターン・最大ターンを変数によって設定できるため、後半の「加算したターン数を継続ターンとしたステート」を作成することは可能かと考えます。

上記の例を用いると「変数1」に対象のステート残ターン数を格納。「毒」のステートのメモ欄には<DD継続ターン数_最大:\V[1] + 6><DD継続ターン数_最小:\V[1] + 6>と記述することで、実質ステートターン数が加算しているようにできるのではないか、という案です。

そこでお聞きしたいのが●案の前半の、「現在対象に付与されているステートの残ターン数をスクリプト等で変数に取得」の方法が分かれば教えていただきたいです。
また、私の●案以外で要望が叶う手段がありましたら、ご教示いただけると大変ありがたいです。

長文失礼いたしました。
最後に編集したユーザー こよでん on 2023年1月21日(土) 01:00 [ 編集 1 回目 ]

名無し蛙
記事: 310
登録日時: 2015年11月23日(月) 02:46

Re: 対象に同じステートを付与した時、上書きではなく残ターン数を加算する方法

投稿記事by 名無し蛙 » 2023年1月21日(土) 00:05

そんな回りくどい手段を取らずとも非常に単純な改造で済みそうです。
rmmz_objects.jsの2670行目

コード: 全て選択

Game_BattlerBase.prototype.resetStateCounts = function(stateId) {
    const state = $dataStates[stateId];
    const variance = 1 + Math.max(state.maxTurns - state.minTurns, 0);
    this._stateTurns[stateId] = state.minTurns + Math.randomInt(variance);
};

この部分を以下に変更するだけで仕様変更出来そうだと思います。

コード: 全て選択

Game_BattlerBase.prototype.resetStateCounts = function(stateId) {
    const state = $dataStates[stateId];
    const variance = 1 + Math.max(state.maxTurns - state.minTurns, 0);
    this._stateTurns[stateId] = state.minTurns + Math.randomInt(variance) + (this._stateTurns[stateId] || 0);
};

プラグインとして切り離すならこんな感じですか。

コード: 全て選択

/*:
 * @target MZ
 */
(() => {
    'use strict'

    const _Game_BattlerBase_resetStateCounts = Game_BattlerBase.prototype.resetStateCounts;
    Game_BattlerBase.prototype.resetStateCounts = function(stateId) {
        const tempTurn = this._stateTurns[stateId] || 0;
        _Game_BattlerBase_resetStateCounts.apply(this, arguments):
        this._stateTurns[stateId] += tempTurn;
    };
})();
こよでん
記事: 6
登録日時: 2022年5月20日(金) 20:28

Re: 対象に同じステートを付与した時、上書きではなく残ターン数を加算する方法

投稿記事by こよでん » 2023年1月21日(土) 00:59

名無し蛙様


なんと、rmmz_objects.jsの書き換えで理想の仕様となりました・・・
コードの知識等が皆無なので、これを実現する方法についても3日くらい考えていました・・・!
大変助かりました。ありがとうございます!

“MZ:質問” へ戻る