お世話になっております。
ただいま、やな様作の「スキルCP制」
https://plugin.fungamemake.com/archives/2073
を使わせて頂いているのですが、スキルが最大数までセットされていた時に新規スキルを習得すると、
スキル自体は習得しているのですが、
「○○はファイアを覚えた!」などのメッセージが表示されなくなってしまいます。
スキルスロットに空きがあると表示されるのですが、、
このバグはどうしたら治りますか?
【解決済】やな様のスキルCP制について
【解決済】やな様のスキルCP制について
最後に編集したユーザー くろねこ [ 2021年4月27日(火) 21:59 ], 累計 1 回
-
- 記事: 752
- 登録日時: 2018年12月23日(日) 13:55
Re: やな様のスキルCP制について
こんにちは。
スロットにセットされているスキルのみを習得スキルとして返すように変更されているために起きる現象のようです。
(スキルに空きがない場合に、新しく覚えたスキルがセットできないので、前のレベルと今のレベルの習得スキルが同一になってしまう)
きちんとテストしてませんので不具合が起きない保証ができませんが、
SkillCPSystem.js の 538 行目あたり (isMaxCPOver という関数の下)に以下のコードを追加すると、
改善するかもしれません。
以上、ご確認ください。
スキルCP制のプラグイン側で、アクターの習得スキルを取得するための関数が、くろねこ さんが書きました:お世話になっております。
ただいま、やな様作の「スキルCP制」
https://plugin.fungamemake.com/archives/2073
を使わせて頂いているのですが、スキルが最大数までセットされていた時に新規スキルを習得すると、
スキル自体は習得しているのですが、
「○○はファイアを覚えた!」などのメッセージが表示されなくなってしまいます。
スキルスロットに空きがあると表示されるのですが、、
このバグはどうしたら治りますか?
スロットにセットされているスキルのみを習得スキルとして返すように変更されているために起きる現象のようです。
(スキルに空きがない場合に、新しく覚えたスキルがセットできないので、前のレベルと今のレベルの習得スキルが同一になってしまう)
きちんとテストしてませんので不具合が起きない保証ができませんが、
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制について
ecf5DTTzl6h6lJj02様、ご回答ありがとうございます。ecf5DTTzl6h6lJj02 さんが書きました:こんにちは。スキルCP制のプラグイン側で、アクターの習得スキルを取得するための関数が、くろねこ さんが書きました:お世話になっております。
ただいま、やな様作の「スキルCP制」
https://plugin.fungamemake.com/archives/2073
を使わせて頂いているのですが、スキルが最大数までセットされていた時に新規スキルを習得すると、
スキル自体は習得しているのですが、
「○○はファイアを覚えた!」などのメッセージが表示されなくなってしまいます。
スキルスロットに空きがあると表示されるのですが、、
このバグはどうしたら治りますか?
スロットにセットされているスキルのみを習得スキルとして返すように変更されているために起きる現象のようです。
(スキルに空きがない場合に、新しく覚えたスキルがセットできないので、前のレベルと今のレベルの習得スキルが同一になってしまう)
きちんとテストしてませんので不具合が起きない保証ができませんが、
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; };
教えて頂いた通りにやったつもりなのですが、このようなエラーが出てしまいました、、
自分がコードを張る場所を間違えているのでしょうか。
-
- 記事: 752
- 登録日時: 2018年12月23日(日) 13:55
Re: やな様のスキルCP制について
こんばんは。
上記のコードでは、複数のスキルを一気に覚える際などに、エラーが発生することを確認しました。
こちらでの確認が不十分で、
チェックする際に、1レベル分しか上げず、新たに覚えるスキルも1つしか設定してなかったので、
気がつきませんでした。失礼しました。
上記のコードを消して、以下に変えたところ、こちらのチェックでは、エラーの発生がなかったので、
こちらに書き換えて、チェックしてみていただけますでしょうか。
(今回もあまりきちんとチェックできていないので不具合でましたらすみません)
上記のコードでは、複数のスキルを一気に覚える際などに、エラーが発生することを確認しました。
こちらでの確認が不十分で、
チェックする際に、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制について
ecf5DTTzl6h6lJj02様、正常に動作しました!
本当にありがとうございました!
本当にありがとうございました!