ページ 11

レベルアップのタイミングを制御

Posted: 2022年12月09日(金) 14:05
by tanaka1105
いつもお世話になっております。
rpgツクールのデフォルトの仕様において、主なレベルアップのタイミングは戦闘終了時などで経験値が一定数を超えた時に実行されていますが、レベルアップのタイミングを制御する手段を探しております。
WIZなどのRPGでは、アクターのレベルアップタイミングが宿屋に泊まった時に実行されていて、これと同じようなことを実現したいです。
具体的には、
・戦闘などで経験値を得たタイミングではレベルアップしない。
・設定した任意のタイミングで(蓄積している経験値分)レベルアップする(イベントでスクリプト実行時にレベルアップするかどうか判定する)
としたいです。
何卒お力添え頂けますよう宜しくお願いします。

Re: レベルアップのタイミングを制御

Posted: 2022年12月14日(水) 01:59
by 剣崎 宗二
実質的には経験値加算の部分を、レベルアップから分割するだけの話かと考えます。
以下を新規プラグインとしてお試しください。


コード: 全て選択

Game_Actor.prototype.changeExp = function(exp, show) {
    this._exp[this._classId] = Math.max(exp, 0);
};

Game_Actor.prototype.checkLeveling = function() {
    const lastLevel = this._level;
    const lastSkills = this.skills();
    while (!this.isMaxLevel() && this.currentExp() >= this.nextLevelExp()) {
        this.levelUp();
    }
    while (this.currentExp() < this.currentLevelExp()) {
        this.levelDown();
    }
    if (this._level > lastLevel) {
        this.displayLevelUp(this.findNewSkills(lastSkills));
    }
    this.refresh();
}


レベルアップ判定(例で挙げられました宿屋)の場合は、アクターのcheckLevelingを実行するだけです。
例としてスクリプトで

コード: 全て選択

$gameActors.actor(1).checkLeveling();

で、ID1のアクターが(EXPが十分な場合はその分)LvUpします。

判定の簡略化のため非表示レベルアップの機能は切っております。
そちらを再実装する場合は元コードのshowの部分の使い方をご確認ください。

Re: レベルアップのタイミングを制御

Posted: 2022年12月15日(木) 10:57
by tanaka1105
返信が遅くなり申し訳ございません。
剣崎様、ご対応頂き誠にありがとうございます。これでWIZっぽいレベルアップが実現できます(宿屋のありがたみ向上+町への帰還の達成感向上)