装備やイベントなどで、戦闘終了後の獲得経験値を2倍にするには、
特殊能力値:経験獲得率*200%の「ステート」をかけるのがてっとり早いのですが、
この方法、ケースによってはあまり使い勝手が良くなく、
・全キャラの経験値に変化をかけたい場合、全キャラにかけないといけない
・倍化された経験値が、戦闘終了メッセージには反映されない
・戦闘不能や、宿屋の全回復処理などで、ステートが解除されてしまう
という問題を含んでいます。
そこで、
スイッチID:100がONの時は、全員の獲得経験値が2倍になる
という処理を作ってプラグイン化してしまいましょう。
変更すべき点は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倍という処理を挿入し、分岐させます。
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つの変数を用意します。
上述の例同様、スイッチID100をON。
変数ID:1「現在の戦闘回数」に、ゲームデータ「戦闘回数」を変数にセットします。
スイッチID100をトリガーとして並列処理を起動。
変数ID:2「玉使用後の戦闘回数」に、ゲームデータ「戦闘回数」を記録します。
条件分岐のスクリプトで
$gameVariables.value(2) >= ($gameVariables.value(1) + 10)
つまり玉使用後の戦闘回数が、玉使用時の戦闘回数から10回目に達したら、
スイッチID100をOFFにして、効果を切ります。
あとはコモンイベント「元気玉使用」を実行するアイテムを作れば、完成です。