TPの仕様を変更するプラグインの書き方について

返信する
アバター
べるろ*(米工事)
記事: 30
登録日時: 2018年1月27日(土) 12:41
連絡する:

TPの仕様を変更するプラグインの書き方について

投稿記事 by べるろ*(米工事) »

プラグイン自作を始めたばかりの者です。

現在、最大TPを第9の能力値として他の能力値と同様、スクリプトによる自由な変更が可能となるようなプラグインを作ろうとしています。
Game_BattlerBase系メソッドの中で関係のありそうなものを書き換えるスクリプトを書いたのですが、戦闘開始時に
Failed to execute 'createLinearGradient' on 'CanvasRenderingContext2D': The provided double value is non-finite.
というエラーが出ました。

これはおそらく、Game_BattlerBase.prototype.tpRateの分母であるGame_BattlerBase.prototype.maxTpの返す値が0になっていることが原因のようです。
私は今回、Game_BattlerBase.prototypeにGame_BattlerBase.prototype.param(8)で定義したmtpという新しいプロパティを用いて、Game_BattlerBase.prototype.maxTpがGame_BattlerBase.prototype.mtpの値を返すように書き換えました。
ここまで探っていった結果、どうやらGame_BattlerBase.prototype.param(8)が正常な値を返していないことが根本的な原因らしいことまではなんとなくわかったのですが、対処法がさっぱりわかりません。
書いてみたスクリプトは下に載せておきます。
そもそもの勘違いがあるような気もしますが、解決法のわかる方がいらっしゃいましたらご助言頂けると幸いです。
また、全体的に間違っているところがあれば遠慮なくご指摘ください。
よろしくお願いいたします。

コード: 全て選択

 Game_BattlerBase.prototype.initialize();

    Object.defineProperties(Game_BattlerBase.prototype, {
        // Maximum Tactical Points
        mtp: { get: function() { return this.param(8); }, configurable: true }
    });

    var _Game_BattlerBase_clearParamPlus = Game_BattlerBase.prototype.clearParamPlus;
    Game_BattlerBase.prototype.clearParamPlus = function() {
        _Game_BattlerBase_clearParamPlus.call(this);
        if(this._paramPlus.length < 8) {
            this._paramPlus.push(0);
        } else {
            this._paramPlus[8] = 0;
        }
    };

    var _Game_BattlerBase_clearBuffs = Game_BattlerBase.prototype.clearBuffs;
    Game_BattlerBase.prototype.clearBuffs = function() {
        _Game_BattlerBase_clearBuffs.call(this);
        if(this._buffs.length < 8) {
            this._buffs.push(0);
        } else {
            this._buffs[8] = 0;
        }
        if(this._buffTurns.length < 8) {
            this._buffTurns.push(0);
        } else {
            this._buffTurns[8] = 0;
        }
    };

    Game_BattlerBase.prototype.paramBase = function(paramId) {
        if (paramId === 8) {
            return 100;   // MTP
        } else {
            return 0;
        }
    };

    Game_BattlerBase.prototype.maxTp = function() {
        return Game_BattlerBase.prototype.mtp;
    };
 
アバター
しぐれん
記事: 975
登録日時: 2017年3月28日(火) 22:22
連絡する:

Re: TPの仕様を変更するプラグインの書き方について

投稿記事 by しぐれん »

エラーが起きる場合はセーブデータを読み込んだ場合のみですか?
それとも、新規データで始めた場合でも発生しますか?
セーブデータを読み込んだ時にparam[8]に適当な数値を入れる処理を作成する必要があります。
Game_BattlerBase.setup()あたりを改造して、初期値を最初に入れるようにした方が良いと思います。
現在、プラグイン依頼はお休み中です。
アバター
べるろ*(米工事)
記事: 30
登録日時: 2018年1月27日(土) 12:41
連絡する:

Re: TPの仕様を変更するプラグインの書き方について

投稿記事 by べるろ*(米工事) »

ご返信ありがとうございます!

エラーは新規データの場合でも発生しています。
とりあえず、Game_BattlerBase.setup()をいじって様子見ます。
返信する

“MV:質問”に戻る