プラグイン「文章/単語/スクリプトを外部CSVファイルで記述する」(2022/06/18)【MV/MZ対応】

さつきばれ

ユーザー
このプラグインお陰で文章作りに大変助かっています。
ちょっと気になる部分があるのですがCSVで書いたキーワードは変数に代入することは可能なのでしょうか?
文章表示を挟まずにログプラグインのログに表示したり文字ピクチャとして描写する際に
この機能があると助かるのですが…
 

バイザン

ユーザー
このプラグインお陰で文章作りに大変助かっています。
ちょっと気になる部分があるのですがCSVで書いたキーワードは変数に代入することは可能なのでしょうか?
文章表示を挟まずにログプラグインのログに表示したり文字ピクチャとして描写する際に
この機能があると助かるのですが…
ご質問ありがとうございます!
結論から言いますと可能です。

もしMessage中にそういったスクリプトを埋め込みたい場合は以下のようにします。
JavaScript:
:script[immediate]
    const str = $externMessage.getValue('MESSAGE_ID');
    $gameVariables.setValue(2, str);
:end
\V[2]

2021y05m09d_160757966.png

2021y05m09d_160824057.png

上記コードの'MESSAGE_ID'を任意のキーワードにしていただくことで対応するセルの文章または単語が引っ張り出せます。
※多言語対応で複数の列がある場合は設定の「Default Reference Column Index」で指定した列が自動で選ばれます。

上のサンプルでは文章表示が挟まってますがこれを応用していただければ任意の変数にエクセルで記述したキーワードを代入できるはずです。
もちろん「$externMessage.getValue('MESSAGE_ID');」はグローバル変数なので他のスクリプトなどからも参照いただけます。


もしやりたいことや問い合わせ内容が違ったり、スクリプトからではなくなにか別のプラグイン機能としての支援があるとありがたいなどが有りましたら「こういううふうにしたい」という例示があれば検討いたしますのでまた教えて下さい!
 

さつきばれ

ユーザー
バグかどうかは分かりませんがこのプラグインだけONにした状態かつ文章表示で\V[n]等で変数を文字や数字で表示すると、内容が初回の状態で固定されてしまいます。
このバグではExternMessageの機能は使ってないのでExternMessageが原因であるかどうかは分かりませんが…
環境はRPGツクールMZです。
 

バイザン

ユーザー
バグかどうかは分かりませんがこのプラグインだけONにした状態かつ文章表示で\V[n]等で変数を文字や数字で表示すると、内容が初回の状態で固定されてしまいます。
このバグではExternMessageの機能は使ってないのでExternMessageが原因であるかどうかは分かりませんが…
環境はRPGツクールMZです。
ご報告ありがとうございます!
こちら修正しました。原因としては一度展開されるとオリジナルの情報が消えて再置換されませんでした。
お手数ですが最新のバージョンに更新してご確認いただけると嬉しいです!

1.3.2 2021/06/29 メッセージが2回目以降に変更されない問題の修正
 

kazumu

ユーザー
先ほどツクールのデータが破損して50時間ほど消えました。
皆さん周知のとおり「新規データA」→「新規データB」へ文章やコモン等はコピペできません。

そこでこのプラグインに出会いました。
このプラグインを利用すれば.csvでテキストを管理するためデータが破損してもこのスクリプトと.csvを引っ越し。
あとは\M[]で呼び出すだけで文章が復旧できます。また立ち絵などを表示させる制御文字も機能するので使い勝手が良いです。製作者さんに感謝です。

それはそうと皆さんバックアップは取りましょう。予期せぬ破損で作り直すことになると悲惨です…。
 

バイザン

ユーザー
先ほどツクールのデータが破損して50時間ほど消えました。
Oh…それは本当につらい…取り戻せますように…!


話逸れますが、TortoiseSVNを使うとバックアップや差分確認が非常に簡単ですのでおすすめしておきます。
SVNはサーバーを使う印象があって手が出しづらいかも知れませんが、TortoiseSVNはGUI操作付きで完全にローカルなフォルダで管理できます。
(必要であればもう少し詳しく書きます!)

とにかくお褒めの言葉ありがとうございました!
快適な創作活動ライフを!
 

かろん

ユーザー
ツールありがとうございます!利用させていただきます!
if文の利用方法がよくわからないのですが、
サンプルは無いでしょうか?
お手数をおかけしますが、回答いただければ助かります。

ケイータさん、横からで今更ですが「CSV」と限定してるため
そのような機能追加は無理だと思います。
メッセージIDを被らないようにすることや、
複数のシートを1つにまとめるのはExcelのVBA(マクロ)で組めると思いますよ。
 
最後に編集:

バイザン

ユーザー
ツールありがとうございます!利用させていただきます!
if文の利用方法がよくわからないのですが、
サンプルは無いでしょうか?
お手数をおかけしますが、回答いただければ助かります。

ケイータさん、横からで今更ですが「CSV」と限定してるため
そのような機能追加は無理だと思います。
メッセージIDを被らないようにすることや、
複数のシートを1つにまとめるのはExcelのVBA(マクロ)で組めると思いますよ。

お問い合わせありがとうございます!
ifの書き方に関しては以下のようになります

コード:
:script[immediate]
    if($gameParty.gold() < 100) {
        $gameVariables.setValue(1, 0);
    } else {
        $gameVariables.setValue(1, 1);
    }
:end

Goldが100未満の場合は変数1番に0を、それ以外の場合は変数1番に1を入れるコードですね。


2022y01m31d_222949370.png
上の画像は少しコードが違いますが、Goldによって変数に直接MessageIDを格納して、「:end」の後の「 \M[\V[2]] 」で文章を表示ということも出来ます。
2022y01m31d_223253384.png
あとはツクール上の文章で上のようにMessageIDで呼び出せば、スクリプト実行後に文章が表示できます。

もちろんこんな事しなくてもスクリプトだけ実行して、従来どおりツクールの「フロー制御/条件分岐」で文章を変えるということも出来ます(そっちのほうがわかりやすそう)

まだわかりにくかったら再度お尋ねください!
 

yuyu77

ユーザー
こんにちは。素晴らしいスクリプトありがとうございます!ツクールで作って、別ゲームエンジンに引っ越す決断も楽にできて助かります。

恐縮ですが、他言語対応について一つ要望を出させてください。
データベースのステータスやシステムの他言語翻訳も、同じCSVの仕組みでできたらいいなと思いますが、技術的に可能でしょうか?(設定用の別CSV呼び出しでもいいと思います)

代替えのプラグインを探してみたのですが、2言語はできるけど、他言語に対応できる仕組みがない、もしくはスマホアプリ用にデプロイすると動かない。などで困っています。(このCSVプラグインではまだデプロイしてませんが・・・笑)

以上、ご検討のほど、どうぞよろしくお願いいたします。
 

バイザン

ユーザー
こんにちは。素晴らしいスクリプトありがとうございます!ツクールで作って、別ゲームエンジンに引っ越す決断も楽にできて助かります。

恐縮ですが、他言語対応について一つ要望を出させてください。
データベースのステータスやシステムの他言語翻訳も、同じCSVの仕組みでできたらいいなと思いますが、技術的に可能でしょうか?(設定用の別CSV呼び出しでもいいと思います)

代替えのプラグインを探してみたのですが、2言語はできるけど、他言語に対応できる仕組みがない、もしくはスマホアプリ用にデプロイすると動かない。などで困っています。(このCSVプラグインではまだデプロイしてませんが・・・笑)

以上、ご検討のほど、どうぞよろしくお願いいたします。
ご要望ありがとうございます!
たしかにほしい機能だとは思ってましたので検討いたします!
直近では動けないのでしばらくお時間をいただければと思います!
たぶんできるとはおもいますがあまり期待しないでいただければ…!
 

OikariBuncho

ユーザー
素晴らしいプラグイン、ありがとうございます!
多言語化が一気に楽になりました!!!

他のプラグインと連携をするとき、スクリプトから呼び出すやり方をご用意いただけますと、とてもとても幸いです。。。

例えば、私はこちらのプラグインを利用させていただいています。
LL_InfoPopupWIndow:https://nine-yusha.com/plugin-infowindow/

スクリプト:$gameVariables.setValue(9,"表示テストです");
プラグインコマンド:LL_InfoPopupWIndowMV showWindow \V[9] 180 0 60 0
とすると、スクリプトからインフォウィンドウとして文字が表示ができます。

この"表示テストです"を、
$gameVariables.setValue(9, \M[15]);
というようにできると、多言語化がより一層便利になるので、ぜひともお願いしたい、と思い記載させていただきました。

文章を扱うようなプラグインは、ほぼ間違いなく\V[]の制御文字に対応をしているので、変数にさえ入れば多くのプラグインで連携ができるので。

ご検討いただけますと幸いです。。。。m(__)m
 

Attachments

  • スクリーンショット 2022-02-13 084533.png
    スクリーンショット 2022-02-13 084533.png
    440.8 KB · 閲覧: 6
  • スクリーンショット 2022-02-13 084740.png
    スクリーンショット 2022-02-13 084740.png
    22.1 KB · 閲覧: 7
最後に編集:

バイザン

ユーザー
素晴らしいプラグイン、ありがとうございます!
多言語化が一気に楽になりました!!!

他のプラグインと連携をするとき、スクリプトから呼び出すやり方をご用意いただけますと、とてもとても幸いです。。。

例えば、私はこちらのプラグインを利用させていただいています。
LL_InfoPopupWIndow:https://nine-yusha.com/plugin-infowindow/

スクリプト:$gameVariables.setValue(9,"表示テストです");
プラグインコマンド:LL_InfoPopupWIndowMV showWindow \V[9] 180 0 60 0
とすると、スクリプトからインフォウィンドウとして文字が表示ができます。

この"表示テストです"を、
$gameVariables.setValue(9, \M[15]);
というようにできると、多言語化がより一層便利になるので、ぜひともお願いしたい、と思い記載させていただきました。

文章を扱うようなプラグインは、ほぼ間違いなく\V[]の制御文字に対応をしているので、変数にさえ入れば多くのプラグインで連携ができるので。

ご検討いただけますと幸いです。。。。m(__)m
ご質問ありがとうございます!

スクリプト内で直接「\M」コマンドを使うことは出来ませんが
const m = $externMessage.getValue("メッセージID");
で指定単語が手に入ります。

ただし、ここで手に入る単語は再展開されていない純粋な単語(つまり単語内に「\M[]」が使用されていても置き換えれられていない状態)なので注意が必要です。
もし再展開した状態の文字が必要な場合、残念ながら現状では利用する方法は用意されていません。

必要であれば後日で良ければ対応したいと思いますがいかがでしょうか?


余談ですが、前述したように「\M」はスクリプト中では直接使用できません。
これは単純にスクリプト(=JavaScript)自体には変換処理を走らせられないというためです。
(スクリプトコマンドをフックすれば出来ないわけではないですが)
それよりかは自分で「$M("メッセージID")」みたいな事ができる関数をグローバルに用意するのが一番いいかもしれません。
もし利用頻度がたかそうであればそれも実装するのはありかも?
 

OikariBuncho

ユーザー
動きました―――!!!
$externMessage.getValue("メッセージID"); 、これプラグインのヘルプに記載しておいていただけると、きっといろんな人が喜ぶかと思いました。。。!!!

お忙しい中ご回答ありがとうございます!
これでいろいろと汎用的にできそうです!

1644930807134.png
 

バイザン

ユーザー
直接お問い合わせいただいた問題に関して修正をいたしました。
過去のリソースに影響は出ないと思いますが、もし問題が発生しましたらご報告いただけたらと思います。

【症状】
csvファイルに空のセルが存在すると空文字が有効なMessasgeIDとして解釈されてしまい、たとえば空セルがある状態で「:name[]」のように名前を無効化する意図で空引数のコマンドを呼び出すと、無限再起処理が発生し例外(RangeError: Maximum call stack size exceeded)がでていました。

意図しない空のセルは想像するより簡単に生まれてしまい、例えばExcelなどで(目視で認識している)最終行より下で「入力をしてやっぱり消す」とかしてしまうだけで発生する可能性があります。

【修正方法】
プラグインを最新のものに差し替えてください。
1.3.3 2022/03/29 csvファイルに空のセルが存在すると空文字が有効なMessasgeIDとして解釈されてしまう問題の修正

【JavaScriptで直接getValue()してる人向け】
引数のMessageIDに 空文字(''), null, undefined な値を指定した場合は問答無用でundefinedを返すように変更しました。
 

sasasa

ユーザー
素晴らしいプラグイン大変ありがたく利用させていただいています!!

最新verで不具合と思われる現象を確認いたしましたので、ご報告させていただきます。
ご確認いただければ幸いです。

【現象】
以下のように「\n」が含まれた文字列がセットされた変数を文章表示すると、文章表示内容がだんだん増えていってしまいます。

a.PNG
・1回目呼び出し
b.PNG
・2回目呼び出し
c.PNG
 

バイザン

ユーザー
素晴らしいプラグイン大変ありがたく利用させていただいています!!

最新verで不具合と思われる現象を確認いたしましたので、ご報告させていただきます。
ご確認いただければ幸いです。

【現象】
以下のように「\n」が含まれた文字列がセットされた変数を文章表示すると、文章表示内容がだんだん増えていってしまいます。
ご報告ありがとうございます!
土日に修正したいと思いますのでしばらくお待ちいただけると幸いです!
 

バイザン

ユーザー
【現象】
以下のように「\n」が含まれた文字列がセットされた変数を文章表示すると、文章表示内容がだんだん増えていってしまいます。
お待たせ致しました! こちら修正しました!
プラグインを最新のものに差し替えてご確認ください。

1.3.4 2022/05/23 改行付き変数で置き換えられた後再表示されたときにメッセージが増えていく問題を修正

この修正でほかの問題が起きましたらまたご報告いただければと思います!
ご報告ありがとうございました!
 

sasasa

ユーザー
お待たせ致しました! こちら修正しました!
プラグインを最新のものに差し替えてご確認ください。

1.3.4 2022/05/23 改行付き変数で置き換えられた後再表示されたときにメッセージが増えていく問題を修正

この修正でほかの問題が起きましたらまたご報告いただければと思います!
ご報告ありがとうございました!
お忙しいところご対応いただき、誠にありがとうございます!!

改行付き変数は正しく表示されるようなりました!

ですが、次は以下のように「\M[]」で文章表示した後に別の文章表示処理があると、
1回目は別々に表示されますが、2回目はくっついて表示されるようになりました。

ご確認いただけますと幸いです。

b1_1.PNG
b1_2.PNG
・1回目
b2.PNG
b3.PNG
・2回目
b4.PNG
 
トップ