ページ 11

【解決済】やな様のスキルCP制について

Posted: 2021年4月27日(火) 09:47
by くろねこ
お世話になっております。
ただいま、やな様作の「スキルCP制」
https://plugin.fungamemake.com/archives/2073
を使わせて頂いているのですが、スキルが最大数までセットされていた時に新規スキルを習得すると、
スキル自体は習得しているのですが、
「○○はファイアを覚えた!」などのメッセージが表示されなくなってしまいます。

スキルスロットに空きがあると表示されるのですが、、
このバグはどうしたら治りますか?

Re: やな様のスキルCP制について

Posted: 2021年4月27日(火) 13:52
by ecf5DTTzl6h6lJj02
こんにちは。
くろねこ さんが書きました:お世話になっております。
ただいま、やな様作の「スキルCP制」
https://plugin.fungamemake.com/archives/2073
を使わせて頂いているのですが、スキルが最大数までセットされていた時に新規スキルを習得すると、
スキル自体は習得しているのですが、
「○○はファイアを覚えた!」などのメッセージが表示されなくなってしまいます。

スキルスロットに空きがあると表示されるのですが、、
このバグはどうしたら治りますか?
スキルCP制のプラグイン側で、アクターの習得スキルを取得するための関数が、
スロットにセットされているスキルのみを習得スキルとして返すように変更されているために起きる現象のようです。
(スキルに空きがない場合に、新しく覚えたスキルがセットできないので、前のレベルと今のレベルの習得スキルが同一になってしまう)

きちんとテストしてませんので不具合が起きない保証ができませんが、
SkillCPSystem.js の 538 行目あたり (isMaxCPOver という関数の下)に以下のコードを追加すると、
改善するかもしれません。

コード: 全て選択

    var _sCP_GActor_changeExp = Game_Actor.prototype.changeExp;
    Game_Actor.prototype.changeExp = function(exp, show) {
        // _callMasterというプロパティが true の時は skills() 関数が従来の動きをするので true に設定する。
        this._callMaster = true;
        _sCP_GActor_changeExp.apply(this, arguments);
        // 終わったら、false に
        this._callMaster = false;
    };
以上、ご確認ください。

Re: やな様のスキルCP制について

Posted: 2021年4月27日(火) 17:04
by くろねこ
ecf5DTTzl6h6lJj02 さんが書きました:こんにちは。
くろねこ さんが書きました:お世話になっております。
ただいま、やな様作の「スキルCP制」
https://plugin.fungamemake.com/archives/2073
を使わせて頂いているのですが、スキルが最大数までセットされていた時に新規スキルを習得すると、
スキル自体は習得しているのですが、
「○○はファイアを覚えた!」などのメッセージが表示されなくなってしまいます。

スキルスロットに空きがあると表示されるのですが、、
このバグはどうしたら治りますか?
スキルCP制のプラグイン側で、アクターの習得スキルを取得するための関数が、
スロットにセットされているスキルのみを習得スキルとして返すように変更されているために起きる現象のようです。
(スキルに空きがない場合に、新しく覚えたスキルがセットできないので、前のレベルと今のレベルの習得スキルが同一になってしまう)

きちんとテストしてませんので不具合が起きない保証ができませんが、
SkillCPSystem.js の 538 行目あたり (isMaxCPOver という関数の下)に以下のコードを追加すると、
改善するかもしれません。

コード: 全て選択

    var _sCP_GActor_changeExp = Game_Actor.prototype.changeExp;
    Game_Actor.prototype.changeExp = function(exp, show) {
        // _callMasterというプロパティが true の時は skills() 関数が従来の動きをするので true に設定する。
        this._callMaster = true;
        _sCP_GActor_changeExp.apply(this, arguments);
        // 終わったら、false に
        this._callMaster = false;
    };
以上、ご確認ください。
ecf5DTTzl6h6lJj02様、ご回答ありがとうございます。

教えて頂いた通りにやったつもりなのですが、このようなエラーが出てしまいました、、
自分がコードを張る場所を間違えているのでしょうか。

Re: やな様のスキルCP制について

Posted: 2021年4月27日(火) 19:06
by ecf5DTTzl6h6lJj02
こんばんは。
上記のコードでは、複数のスキルを一気に覚える際などに、エラーが発生することを確認しました。
こちらでの確認が不十分で、
チェックする際に、1レベル分しか上げず、新たに覚えるスキルも1つしか設定してなかったので、
気がつきませんでした。失礼しました。

上記のコードを消して、以下に変えたところ、こちらのチェックでは、エラーの発生がなかったので、
こちらに書き換えて、チェックしてみていただけますでしょうか。
(今回もあまりきちんとチェックできていないので不具合でましたらすみません)

コード: 全て選択

    Game_Actor.prototype.changeExp = function(exp, show) {
        this._exp[this._classId] = Math.max(exp, 0);
        var lastLevel = this._level;
        this._callMaster = true;
        var lastSkills = this.skills();
        this._callMaster = false;
        while (!this.isMaxLevel() && this.currentExp() >= this.nextLevelExp()) {
            this.levelUp();
        }
        while (this.currentExp() < this.currentLevelExp()) {
            this.levelDown();
        }
        if (show && this._level > lastLevel) {
            this.displayLevelUp(this.findNewSkills(lastSkills));
        }
        this.refresh();
    };

    Game_Actor.prototype.findNewSkills = function(lastSkills) {
        this._callMaster = true;
        var newSkills = this.skills();
        this._callMaster = false;
        for (var i = 0; i < lastSkills.length; i++) {
            var index = newSkills.indexOf(lastSkills[i]);
            if (index >= 0) {
                newSkills.splice(index, 1);
            }
        }
        return newSkills;
    };

Re: やな様のスキルCP制について

Posted: 2021年4月27日(火) 21:58
by くろねこ
ecf5DTTzl6h6lJj02様、正常に動作しました!
本当にありがとうございました!