【リクエスト】追加パラメーター

ケイ!

ユーザー
デフォルトにあるHP、MP、攻撃力。防御力、魔力、魔防、素早さ、運以外に独自の新しいパラメーターをダメージ計算式に使いたいと思います。エネミー、アクターのメモ欄で記載することにより設定できるようなプラグインをどなたかお願いできませんでしょうか?よろしくお願いします。
 
これは専用プラグインなしでも行けますね。

特定の変数を、各キャラのパラメータとして使うのはいかがでしょうか。
v[10]などで変数が参照できるため、v[10 + a.actorId()] とすれば、11~14番などがそのパラメータに使えます。
敵の番号(0から始まる)は a.index() で参照できるため、v[21 + a.index()] とすれば、21~番にその変数が入れられます。

メモからその値を代入する場合、
イベントコマンド「変数の操作」で、オペランドを「スクリプト」にして、
アクターの時は:
$gameParty.actor(アクターID).actor().meta.タグ名
敵キャラの時は:
$gameTroop.members()[敵番号].enemy().meta.タグ名
という風にすれば、取得できます。

新たな値を設定する場合は、その変数番号を普通に操作すればいけます。

もし、何か便利なプラグインをご存知の方がいたら救援頼みます。
 
最後に編集:

laputa

ユーザー
こんにちは。laputaといいます。

神無月サスケ様へ

スクリプト初心者として、細かい部分がわかりにくかったので、質問させてください。

>v[10]などで変数が参照できるため、v[10 + a.actorId()] とすれば、11~14番などがそのパラメータに使えます。

上記、変数11番から14番の値がランダムではいるのでしょうか?
それとも、()のなかに数字を記入する必要があるのでしょうか?

また、タグ名の記述法としてメモ欄に具体的にどのようなルールで記述するといいでしょうか?
例えば、モンスターのレベルをメモ欄に記述したい時、

level.10


と、記述した場合、タグ名はlevelになりますか?

<level>10

と、括弧で囲った方がいいでしょうか?

初歩的な質問となりますが、何卒よろしくお願いいたします。
 
>v[10]などで変数が参照できるため、v[10 + a.actorId()] とすれば、11~14番などがそのパラメータに使えます。

上記、変数11番から14番の値がランダムではいるのでしょうか?
それとも、()のなかに数字を記入する必要があるのでしょうか?
この式のa.actorId()は、戦闘計算式に書くもので、aが、使用者のアクターを指します。
このため、アクターIDが5のキャラの場合、15番の変数の値が、
アクターIDが1の場合、11番の変数の値を参照することになります。

また、タグ名の記述法としてメモ欄に具体的にどのようなルールで記述するといいでしょうか?
例えば、モンスターのレベルをメモ欄に記述したい時、

level.10


と、記述した場合、タグ名はlevelになりますか?
これは、<level:10>のように書いてください。
<タグ名:値>となります。
注意が必要なのは、値は数字で書いてあっても文字列(String)で渡されるため、
自動で変換されない場合、以下のようにNumberで囲ってあげる必要があります。
JavaScript:
Number($gameTroop.members()[0].enemy().meta.level)
あるいは以下のように頭に+を付けるだけでもいいです。
JavaScript:
+$gameTroop.members()[0].enemy().meta.level
 

laputa

ユーザー
神無月サスケ様

返信、ありがとうございます。
勉強になりました。

理解を深めるため、細かいところを質問させていただきたいのですが、よろしいでしょうか?

>この式のa.actorId()は、戦闘計算式に書くもので、aが、使用者のアクターを指します。
>このため、アクターIDが5のキャラの場合、15番の変数の値が、
>アクターIDが1の場合、11番の変数の値を参照することになります。


上記、確認させてください。

あらかじめ、変数11番に値を代入しておき、戦闘計算式でその値を参照できるようにしておく。
戦闘計算式には、

100 + v[10 + a.actorId()]
100のダメージ+アクターID1番の時、変数11番の値

と、記述すればよろしいでしょうか?

この場合、変数の値が変わるごとにダメージが変化すると、考えていいですか?


><タグ名:値>となります。
>注意が必要なのは、値は数字で書いてあっても文字列(String)で渡されるため、
>自動で変換されない場合、以下のようにNumberで囲ってあげる必要があります。



敵キャラ0001のゴブリンメモ欄に

<level:10>

と記述し、変数に

Number($gameTroop.members()[1].enemy().meta.level)

を代入したところ、下記、エラーメッセージが出ました。

Cannot read property 'enemy' of undefined

また、タグ名を変更してみましたが、同じくエラーが出てしまいました。
どこか記述が間違っていましたら、ご指摘願います。


何卒よろしくお願いいたします。
 
最後に編集:
上記、確認させてください。

あらかじめ、変数11番に値を代入しておき、戦闘計算式でその値を参照できるようにしておく。
戦闘計算式には、

100 + v[10 + a.actorId()]
100のダメージ+アクターID1番の時、変数11番の値

と、記述すればよろしいでしょうか?
これはビンゴ、その通りです!

コード:
Number($gameTroop.members()[0].enemy().meta.level)
もしかしてその敵グループには、敵が1体しかいないのではないでしょうか。
敵グループの数は0番から始まるので、1体目を現わす場合上記のように0にしてみてください。
「敵の数ひく1」より多い数字を添え字([0]の中の0を現わす言葉。インデックスとも言う)にすると、
中身は確かにundefinedになっちゃうのです。
以上、ご確認いただけたら幸いです。
 

laputa

ユーザー
神無月サスケ様
お世話になっております。

もしかしてその敵グループには、敵が1体しかいないのではないでしょうか。
敵グループの数は0番から始まるので、1体目を現わす場合上記のように0にしてみてください。
「敵の数ひく1」より多い数字を添え字([0]の中の0を現わす言葉。インデックスとも言う)にすると、
中身は確かにundefinedになっちゃうのです。
以上、ご確認いただけたら幸いです。
ご指摘の敵グループですが、こちらにはメモ欄がありません。
画像を添付しました。

敵キャラのデータベースにメモ欄があります。
画像添付しました。

また、変数に代入している画面も添付しました。

敵グループは初期設定のままで、二体あります。
グループは4グループです。

敵キャラも0番から始まりますか?

$dataEnemies[1]に置き換えて試しましたが、
こちらはファンクションエラーになりました。

何卒よろしくお願いいたします。
 

Attachments

ええっと、メモを書くのは敵キャラに<level:10>と書くんです。
敵グループの1番とか2番とかに、その敵キャラを入れるんです。
そうすると上記のやり方で行けるはずなんですが?

上記の式なんですが、「現在戦闘中の敵グループの(0なら)1番目に登録された敵」の
メモを見る、ということなんですが、分かりづらいでしょうか。
 
最後に編集:

laputa

ユーザー
神無月サスケ様
お世話になっています。

上記の式なんですが、「現在戦闘中の敵グループの(0なら)1番目に登録された敵」
戦闘中の敵グループで確認しました。
このスクリプトを戦闘中のイベントで実行したところエラーは出ませんでした。
モンスターレベルに応じて魔法攻撃力が変わるのを確認できました。

戦闘中のイベント以外ではエラーが出ます。
スクリプトを実行するタイミングは敵グループイベント限定のようです。

何卒よろしくお願いいたします。
 
最後に編集:
なるほど、戦闘中以外でも呼び出したいのですね。
それならば、$dataEnemies を参照する必要があります。
JavaScript:
$dataEnemies[敵キャラID].meta.タグ名
とする必要があります。
敵キャラ1番に<level:10>と書かれている時、数値10を得るには、以下のように書けばいいでしょう。
JavaScript:
+$dataEnemies[1].meta.value
なお、ダメージが0になる場合は、このmeta.valueの値が正しく設定されなかった場合です。
この場合、Number()や、頭に+を付けると、NaN (not a number)という値になり、
システム側では、この場合、0とみなされてしまいます。

以上で大丈夫でしょうか。ご武運を。
 

laputa

ユーザー
お世話になっております。

教えていただいたスクリプトやプラグインで
いろいろ試していました。

モンスターレベルとアクターレベルの比較で判定式を作ってみたり、
バトルイベントでそれを導入してみたりしました。

今回は頂いたプラグインを部分的にいじって
モンスターレア度の設定が可能か、教えていただきたく投稿しました。

タグにモンスターレア度を設定するため、

<rare:10>

と、記述します。
以下、プラグインの内容を一部書き換えて
levelをrareにしています。

これで、rareという値を使用できるようになりますか?


Object.defineProperties(Game_Enemy.prototype, {
rare: {
get: function() {
return this.getRare();
},
configurable: true
}
});
Game_Enemy.prototype.getRare = function(){
const rare = Number(this.enemy().meta.rare);
return isNaN(rare) ? 1 : rare;
};

何卒よろしくお願いいたします。
 
どうも、laputaさん。
じっくりと学習なさっているようで、その頑張りに頭が下がります。

さて、ご提案のコードですが、僕は実際に実行していないのですが、
それで完璧だと思います。Good Luck.
 
トップ