Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

@kotonoha0109

獲得経験値のカスタマイズ

装備やイベントなどで、戦闘終了後の獲得経験値を2倍にするには、
特殊能力値:経験獲得率*200%の「ステート」をかけるのがてっとり早いのですが、

sshot 1.jpg

この方法、ケースによってはあまり使い勝手が良くなく、

・全キャラの経験値に変化をかけたい場合、全キャラにかけないといけない
・倍化された経験値が、戦闘終了メッセージには反映されない
・戦闘不能や、宿屋の全回復処理などで、ステートが解除されてしまう

という問題を含んでいます。

そこで、
スイッチID:100がONの時は、全員の獲得経験値が2倍になる
という処理を作ってプラグイン化してしまいましょう。

変更すべき点はrpg_managers.jsのこの部分。

rpg_managers.js
BattleManager.makeRewards = function() {
    this._rewards = {};
    this._rewards.gold = $gameTroop.goldTotal();
    this._rewards.exp = $gameTroop.expTotal();
    this._rewards.items = $gameTroop.makeDropItems();
};

スイッチID100がONの時は2倍という処理を挿入し、分岐させます。

rpg_managers.js
BattleManager.makeRewards = function() {
    this._rewards = {};
    this._rewards.gold = $gameTroop.goldTotal();
    if ($gameSwitches.value(100) === true) {
        this._rewards.exp = $gameTroop.expTotal() * 2;
    }else{
        this._rewards.exp = $gameTroop.expTotal();
    }
    this._rewards.items = $gameTroop.makeDropItems();
};

※コアスクリプトを直接変更すると色々問題が発生するので、外部jsファイル上に書き込みプラグインとして読み込んでください。

これで、たとえ戦闘不能になってもその影響は受けませんし、戦闘終了時のメッセージにも反映されます。条件終了時は必ずスイッチはOFFにしておきましょう。忘れるとずっと倍になりっぱなしです。

*2 の数値を *3にすれば3倍になりますし、*0.5にすれば半分になります。
小数を使う場合は Math.floor()もしくはMath.ceil()で囲って小数点を消してやる必要があったと思います。

獲得金額を変更したい場合、$gameTroop.goldTotal()の処理を同様にしてやる事で対応が可能。

これを応用して、ドラゴンクエストXの「元気玉」の様なアイテムを作ってみましょう。
ドラクエにおける元気玉とは、一定時間の獲得経験値を倍にするアイテムですが、
ここでは一定戦闘回数の獲得経験値を倍にするアイテムの作り方を解説しておきます。

10回分の戦闘の獲得経験値を2倍にするアイテム「元気玉」の作り方

上述のスクリプトを挿入した上で、
「元気玉使用」「元気玉使用中」の2種類のコモンイベントと、
「元気玉使用時の戦闘回数」「元気玉使用中の戦闘回数」の2つの変数を用意します。

元気玉使用のコモンイベント
sshot 4.jpg

上述の例同様、スイッチID100をON。
変数ID:1「現在の戦闘回数」に、ゲームデータ「戦闘回数」を変数にセットします。

元気玉使用中のコモンイベント
sshot 5.jpg

スイッチID100をトリガーとして並列処理を起動。
変数ID:2「玉使用後の戦闘回数」に、ゲームデータ「戦闘回数」を記録します。
条件分岐のスクリプトで

条件分岐:スクリプト
$gameVariables.value(2) >= ($gameVariables.value(1) + 10)

つまり玉使用後の戦闘回数が、玉使用時の戦闘回数から10回目に達したら、
スイッチID100をOFFにして、効果を切ります。

あとはコモンイベント「元気玉使用」を実行するアイテムを作れば、完成です。

sshot 6.jpg

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
2
Help us understand the problem. What are the problem?