それに加えて倒した敵の経験値を貰い。
他にも人に話しかければ経験値を取得する事が出来る物です。
2点ほど問題を抱えておりまして……
・一つ目
ツクールMVのバージョン1.3.3では正常に動いていたものが
ツクールMVのバージョン1.6.2では可笑しな数値になってしまう事です。
動作してほしい物
・敵に攻撃してダメージ量(変数42)を維持してほしい。バトルが終わった後も継続してほしい。
・バトル中にレベルが上がったら、上がったままのステータスになっててほしい。
おかしい表示のされ方
・敵に与えたダメージを格納している変数42が戦闘終了時に0になってしまう。
・戦闘中にレベルが上がったはずなのに、戦闘終了後はレベルが上がっていない。
(レベル1のままで戦闘した場合、レベル1のまま戦闘終了。仲間にしていない人はレベルが上がっている。)
プラグイン内で設定した変数は……
敵に与えたダメージ量を変数42 attackDamege
現在のレベルを表す変数41 level_Exp
レベルアップに必要な壁として exp_wall を設定しています。
構成を説明すると……
【敵に攻撃を与えた処理】→【attackExpで取得した変数量を割り振る処理】
【敵を倒した経験値を受け取る処理】→【attackExpで取得した変数量を割り振る処理】
【敵に攻撃を与えた処理】
Game_Action.prototype.executeHpDamageをいじっています。
独自に作ったthis.attackExp()に移動します。
コード: 全て選択
var _prevfunc = Game_Action.prototype.executeHpDamage;
Game_Action.prototype.executeHpDamage = function(target, value) {
_prevfunc.call(this, target, value);
const attackDamege = $gameVariables.value(42);
const level_Exp = $gameVariables.value(41);
if (this.isSkill() && target.isEnemy()) {
$gameVariables.setValue(42, attackDamege + value);
}
//経験値取得のソースへ
this.attackExp();
}
【敵を倒した経験値を受け取る処理】
倒した敵の経験値量が足されます。
コード: 全て選択
//敵を倒して経験値取得の処理
Game_Actor.prototype.gainExp = function(exp) {
const attackDamege = $gameVariables.value(42);
const level_Exp = $gameVariables.value(41);
var newExp = this.currentExp() + Math.round(exp * this.finalExpRate());
$gameVariables.setValue(42, Math.round(exp * this.finalExpRate()));
newExp = 0;
this.changeExp(newExp, this.shouldDisplayLevelUp());
//経験値取得のソースへ
Game_Action.prototype.attackExp();
};
【attackExpで取得した変数量を割り振る処理】
【敵に攻撃を与えた処理】、【敵を倒した経験値】の後に置かれています。
コード: 全て選択
//attack_expの処理
Game_Action.prototype.attackExp = function() {
const attackDamege = $gameVariables.value(42);
const level_Exp = $gameVariables.value(41);
const exp_wall_1 = 1000;
const exp_wall_2 = 2000;
const exp_wall_3 = 5000;
const exp_wall_4 = 9000;
const party_member = 14;
//第一段階の経験値が必要の壁
if (attackDamege > exp_wall_1 && 0 < level_Exp && level_Exp <= 10) {
$gameVariables.setValue(41, level_Exp + 1);
$gameVariables.setValue(42, attackDamege - exp_wall_1);
for (var n = 1; n < party_member; n++) {
const oldlevel = $gameActors.actor(n).level;
$gameActors.actor(n).changeLevel(oldlevel + 1, false)
console.log($gameActors.actor(n).name() + "のレベルが上がりました");
console.log($gameActors.actor(n).level);
}
//仲間のHPを全回復する
$gameParty.members().forEach(function(actor) {
Game_Interpreter.prototype.changeHp(actor, 9999, true);
}.bind(this));
//もう一度レベルアップ調整を行うか? の処理
if (attackDamege > exp_wall_1) {
this.attackExp();
return true;
} else {
return false;
}
}
………
↓続きます