【解決済み!】メモ欄の変数と整数を足した値を取得したい!

アバター
ピータンパン
記事: 76
登録日時: 2020年1月15日(水) 22:40

【解決済み!】メモ欄の変数と整数を足した値を取得したい!

投稿記事by ピータンパン » 2021年7月19日(月) 15:18

お世話様です!

まず最初に、武器ID1のメモ欄に下のような記述があるとします!
<test:1+\v[1]>

変数1には、5が入っています。

メモ欄は文字列として扱われると聞いたので
console.log(parseInt($dataWeapons[1].meta.test)); としたのですが、
取得したのは6ではなく、1でした。

変数のみにするとNaNになっていたため、変数の制御文字が変数として扱われていないようでした。
トリアコンタン様の「動的データベース構築プラグイン」を導入しているので
いけると思ったのですが、何がいけないのでしょうか?!

どうかお助けいただけませんでしょうか!?
よろしくお願いいたします。
最後に編集したユーザー ピータンパン on 2021年7月19日(月) 19:49 [ 編集 1 回目 ]

ecf5DTTzl6h6lJj02
記事: 477
登録日時: 2018年12月23日(日) 13:55

Re: メモ欄の変数と整数を足した値を取得したい!

投稿記事by ecf5DTTzl6h6lJj02 » 2021年7月19日(月) 17:15

こんにちは。
ピータンパン さんが書きました:お世話様です!

まず最初に、武器ID1のメモ欄に下のような記述があるとします!
<test:1+\v[1]>

変数1には、5が入っています。

メモ欄は文字列として扱われると聞いたので
console.log(parseInt($dataWeapons[1].meta.test)); としたのですが、
取得したのは6ではなく、1でした。

変数のみにするとNaNになっていたため、変数の制御文字が変数として扱われていないようでした。
トリアコンタン様の「動的データベース構築プラグイン」を導入しているので
いけると思ったのですが、何がいけないのでしょうか?!

どうかお助けいただけませんでしょうか!?
よろしくお願いいたします。

他のプラグインや、イベントコマンドのスクリプトからメタ情報を参照しても制御文字は変数の値に変換されません。

イベントコマンドから、メタの値を制御文字 \V[n] 込みで計算して、コンソールに表示するのであれば、

コード: 全て選択

let str = $dataWeapons[1].meta.test;
str = str.replace( /\\v/i, "V");
const V = $gameVariables._data;
console.log(eval(str));

で、できるかとおもいます。(ちゃんとチェックしてません。動かなかったらごめんなさい)
アバター
ピータンパン
記事: 76
登録日時: 2020年1月15日(水) 22:40

Re: メモ欄の変数と整数を足した値を取得したい!

投稿記事by ピータンパン » 2021年7月19日(月) 19:49

ecf5DTTzl6h6lJj02 様

おおおっ!!
できました!!すごい!!
ありがとうございますっ!!

null対策を施せばバッチリ使用できそうです!!
replaceで小文字と大文字を差し替えてる感じですか?!
異次元過ぎてなぜ上手くいったのか全然わかってませんけど、うまくいったんだからいいです!!

本当にありがとうございます!!
ecf5DTTzl6h6lJj02
記事: 477
登録日時: 2018年12月23日(日) 13:55

Re: 【解決済み!】メモ欄の変数と整数を足した値を取得したい!

投稿記事by ecf5DTTzl6h6lJj02 » 2021年7月19日(月) 20:37

ピータンパン さんが書きました:ecf5DTTzl6h6lJj02 様

おおおっ!!
できました!!すごい!!
ありがとうございますっ!!

null対策を施せばバッチリ使用できそうです!!
replaceで小文字と大文字を差し替えてる感じですか?!
異次元過ぎてなぜ上手くいったのか全然わかってませんけど、うまくいったんだからいいです!!

本当にありがとうございます!!

行数を少なめにしようとした結果、nullの対策が抜けてました。
行数は多くなってしまうけど、メッセージウィンドウと同様の V[n] の処理をする
こっちのコードのほうがいいかもしれません。

コード: 全て選択

let str = $dataWeapons[1].meta.test;
str = str.replace(/\\/g, '\x1b');
str = str.replace(/\x1b\x1b/g, '\\');
str = str.replace(/\x1bv\[(\d+)\]/ig,
 (...arguments) => $gameVariables.value(parseInt(arguments[1])));
str = str.replace(/\x1bv\[(\d+)\]/ig,
 (...arguments) => $gameVariables.value(parseInt(arguments[1])));
console.log(eval(str));

値が設定されてない変数番号が指定されたときはその部分は0になります。

ちなみに、前回の

コード: 全て選択

str = str.replace( /\\v/i, "V")

や今回の

コード: 全て選択

str = str.replace(/\\/g, '\x1b');

の / ... /i とか / ... /g とかなっている部分は 正規表現 と呼ばれるものです。
興味があれば
https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions
などの解説を見るといいですが、ある程度プログラミングに慣れてないと読みにくいかもしれません。
(私もうろ覚えで怪しかったりします)

“MV:質問” へ戻る