【解決】敵に与えるダメージの総計でレベルが上がるソースを作っている物です

返信する
アバター
みたしや
記事: 37
登録日時: 2017年2月08日(水) 22:39
連絡する:

【解決】敵に与えるダメージの総計でレベルが上がるソースを作っている物です

投稿記事 by みたしや »

攻撃で与えたダメージ量がそのまま経験値になるプログラムを作っています。
ある程度の事は出来たのですが、
初歩的なところでつまってしまい……。

仕様としては
ある一定数ダメージ量(例えば1000以上)が入ると
データベースに登録してある仲間のレベルが上がる仕様になっています。
13人いるので13回繰り返す仕組みになっています。
※変数41変数42を使用しています。

問題となっていると感じている部分だけ記述します。

コード: 全て選択

for(var n = 1; n < 14; n++){
      $gameActors.actor(n).changeLevel(1,false)
      console.log($gameActors.actor(n).name() + "のレベルが上がりました");
    }
このように書くと


何故か、初期状態でLv13で設定したはずがLv1になってしまいます。
どうしてレベルが下がるのか分からないので投稿させていただきました。
解決の方よろしくお願いします。

またソースは改変していただいてもかまいません
Attack_exp.js
(1.65 KiB) ダウンロード数: 8 回
↑こちらが一応 製作段階のものです。
最後に編集したユーザー みたしや [ 2020年4月11日(土) 15:07 ], 累計 1 回
アバター
Plasma Dark
記事: 736
登録日時: 2020年2月08日(土) 02:29
連絡する:

Re: 敵に与えるダメージの総計でレベルが上がるソースを作っている物です

投稿記事 by Plasma Dark »

rpg_objects.js を直接書き換えず、プラグインを作ることで対応されており、ちゃんと競合しにくい書き方をされていて良いですね。
仕様もしっかり定義できているようなので、あとはコードの読み書きに関して作法を知って慣れればお望みのプラグインが書けるようになるかと思います。
何故か、初期状態でLv13で設定したはずがLv1になってしまいます。
どうしてレベルが下がるのか分からないので投稿させていただきました。
Game_Actor.prototype.changeLevel 関数は、その名前の通り、アクターのレベルを変更する関数です。
アクターのレベルを、引数として渡した level にする という処理をしています。
ですので、1を渡してしまうとレベル1になるのは自然です。

アクターをレベルアップする処理を行う levelUp 関数もありますので、そちらを呼ぶほうがきれいな気はします。
が、戦闘終了時に経験値を入手する処理が入るとそこでレベルダウンしてしまう可能性があるので、 changeLevel をそのまま使うのであれば、現在レベル+1を渡してあげると良いでしょう。
例えば、以下のようになります。

コード: 全て選択

...
const beforeLevel = $gameActors.actor(n).level;
$gameActors.actor(n).changeLevel(beforeLevel+1, false);
...
ここから先はお節介ですので、余力のある時にお読みください。
人に読んでもらう場合は、せめてコードフォーマットをかけましょう。
ご利用のエディタ次第ではありますが、VSCodeをお使いの場合は、 Shift+Alt+F で自動的に整形してくれます。

独自に定義した attackExp 関数を17行目で変数に退避されていますが、これは必要ありません。

変数番号の41や42、次のレベルまでのダメージ数を表す1000のような、意味のある数値がそのまま書かれています。
これはマジックナンバーと言って、入力ミス等で容易にバグを引き起こす無作法な書き方です。
もしゲーム中で変わらない数値なのであれば、以下のように定数として定義してそれを参照すると良いでしょう。

コード: 全て選択

const EXP_VARIABLE = 42;
21行目、後半の条件式は必ず真になってしまいます。
0 <= $gameVariables.value(41) を評価した後、その真偽値に対して true <= 10 か false <= 10 を評価してしまいます。
この場合、型強制によってtrueは1、falseは0に変換されるため、結果は必ず真になります。
横着せず、素直に && でつなぎましょう。
アバター
みたしや
記事: 37
登録日時: 2017年2月08日(水) 22:39
連絡する:

Re: 敵に与えるダメージの総計でレベルが上がるソースを作っている物です

投稿記事 by みたしや »

Plasma Dark様

プラグインの問題点を解決していただきましてありがとうございます。
それだけでなく、ソースコードの書き方までご指導していただきましてありがとうございます。
ソースコードは、ほぼ独学で誰からも教わってこなかったので大変ありがたかったです。

使っているソフトはAtomなのでそれに合った物を導入していこうと考えています。

本当にありがとうございました。
返信する

“MV:質問”に戻る