【解決済】イベントのメモからの情報取得について

返信する
アバター
にゃたま
記事: 837
登録日時: 2016年1月13日(水) 23:53
お住まい: 床下の猫王国-すみませんが体調悪いのでサポートはお休みさせていただきます
連絡する:

【解決済】イベントのメモからの情報取得について

投稿記事 by にゃたま »

只今スクリプトを自分流にいじっていますが
壁に遭遇したので皆さんのお力をお借りしたいと思います。
自分の求めている動作まであと一歩というところでの遭遇ですorz

イベントのメモ欄もしくは注釈からテキストを取得したいです。
たとえば<>こういったタグから取得したい場合はどのような
コードを追加すればよいでしょうか?
このタグがあったら◯◯の処理を行わなくしたいです。

ご存じの方お教えいただけたらと思います。よろしくお願いいたします。
最後に編集したユーザー にゃたま [ 2017年4月15日(土) 10:49 ], 累計 1 回
奏ねこま
記事: 702
登録日時: 2016年1月20日(水) 20:04

Re: イベントのメモからの情報取得について

投稿記事 by 奏ねこま »

MVヘルプの「資料集→プラグイン仕様→メタデータ」の項目は読まれました?
アバター
にゃたま
記事: 837
登録日時: 2016年1月13日(水) 23:53
お住まい: 床下の猫王国-すみませんが体調悪いのでサポートはお休みさせていただきます
連絡する:

Re: イベントのメモからの情報取得について

投稿記事 by にゃたま »

奏ねこま様
奏ねこま さんが書きました:MVヘルプの「資料集→プラグイン仕様→メタデータ」の項目は読まれました?
ご返信ありがとうございます。
すみません。そちらの方は失念しておりました。とりあえず内容を以下に引用させていただきます。
データベースの各項目にある“メモ”の欄は、各プラグインで用いる独自のデータを定義するために使うことができます。
<name:data>
このように一定の書式で記述したデータは、標準のスクリプトによって自動的に“meta”という変数の中に展開されます。
上記の場合、以下の条件を満たします(objectはデータ項目とします)。
object.meta.name === 'data'
確認してみたところ、こちら引数を使った例になっておりますが前述したとおり、
「このタグがあったらイベントをスタートする処理を行わない」ということがしたく引数を使う必要がありません。
例えば<test>このようなタグがあったらtestという文字列が貰いたいです。
そのことについて伝わってなかったのでしたら申し訳ございません。
引数を使うしかできないならその方法に則って作ってみました。

function convertEscape(txt) {
return Window_Base.prototype.convertEscapeCharacters(txt)
};

var _Game_Interpreter_pluginCommand =
Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function(command, args) {
_Game_Interpreter_pluginCommand.call(this, command, args);


if (command.toUpperCase() === 'EVENTSTART') {
if (args.length != 0){
var type = args[0];
if (type.toUpperCase() === 'ID') {
var id = Number(convertEscape(args[1]));
event = $gameMap.event(id);
console.log("meta:"+event.meta.data);
startEvent(event);
}
}
}
}

function startEvent(event) {
if (event == null) return;
event.start();
}

解説しますとプラグインコマンド[eventstart id 73]を入力するとidが73のイベントを実行する
スクリプトになっててただその中でもメモにErsExclusionという文字列のあるイベントは
実行しないといった感じにしたいです。
eventのメタデータからdataを読み取ろうとしましたが「Cannot read property 'data' of undefined」
のエラーメッセージが表示されます。

他のスクリプトからの改変になりますがどうしても実行したくないイベントもあるので
このようにご質問させていただきました。よろしくお願いします。
添付ファイル
スクリーンショット 2017-04-15 8.29.38.png
スクリーンショット 2017-04-15 8.29.09.png
スクリーンショット 2017-04-15 8.29.09.png (18.2 KiB) 閲覧された回数 9180 回
奏ねこま
記事: 702
登録日時: 2016年1月20日(水) 20:04

Re: イベントのメモからの情報取得について

投稿記事 by 奏ねこま »

$gameMap.event()で取得されるイベントデータ(Game_Eventオブジェクト)と、
メモ情報を含むイベントデータ($dataMapの中にあるイベントデータ)は別物です。
メモ情報を含むイベントデータを取得したい場合は

var event = $gameMap.event(id).event();

としてください。

なお、メモ欄を<data:ErsExclusion>とした場合は、"data"の中に"ErsExclusion"が入った状態になるので
if (event.meta.data === "ErsExclusion")という判定方法になりますが、
メモ欄を<ErsExclusion>とした場合は、"ErsExclusion"の中に true が設定されるようになるので、
if (event.meta.ErsExclusion)という判定方法が使えます。

以上、参考になりましたら。
アバター
にゃたま
記事: 837
登録日時: 2016年1月13日(水) 23:53
お住まい: 床下の猫王国-すみませんが体調悪いのでサポートはお休みさせていただきます
連絡する:

Re: イベントのメモからの情報取得について

投稿記事 by にゃたま »

奏ねこま様
奏ねこま さんが書きました: var event = $gameMap.event(id).event();
素早いご返事誠にありがとうございます。
このように変えて実行してみたところ今度は「undefined is not a function」というメッセージが
表示されてしまいました。このevent()関数が定義されてないということでしょうか?
これを回避する方法がもしありましたら教えていただけたら幸いです。
何度もお手数おかけしますorz
奏ねこま さんが書きました:なお、メモ欄を<data:ErsExclusion>とした場合は、"data"の中に"ErsExclusion"が入った状態になるので
if (event.meta.data === "ErsExclusion")という判定方法になりますが、
メモ欄を<ErsExclusion>とした場合は、"ErsExclusion"の中に true が設定されるようになるので、
if (event.meta.ErsExclusion)という判定方法が使えます。
こちらすごく勉強になりました。私の言いたかったことはまさにコレです。
引数とかナシでErsExclusionのみで判定したかったです。
なるほどこのような仕組みになっていたんですね。私ももっと勉強しないといけないですね…(汗)
奏ねこま
記事: 702
登録日時: 2016年1月20日(水) 20:04

Re: イベントのメモからの情報取得について

投稿記事 by 奏ねこま »

エラーが出ているのはevent()の部分ではなく、その後の処理ではないでしょうか?
記述例として示したコードが紛らわしくて申し訳ありませんが、先の返信で説明した通り、
$gameMap.event(id)で取得されるデータと$gameMap.event(id).event()で取得されるデータは別物です。
もともとのソースを引用させて頂くと、

var id = Number(convertEscape(args[1]));
event = $gameMap.event(id);  ←※1
startEvent(event);       ←※2

※2の部分、引数に渡している「event」は、$gameMap.event(id)で取得したものでなければならないと思います。
今回、※1の部分を$gameMap.event(id).event()としてしまったことで、不都合が出てしまったものと推測します。

ですので、※1のevent = $gameMap.event(id)は残しておき、メモ欄判定用に別途取得したほうが良いと思います。
例を示すと、

var id = Number(convertEscape(args[1]));
event = $gameMap.event(id);
var ev_data = event.event();  ←※3
if (ev_data.meta.ErsExclusion) {
 ︙
startEvent(event);       ←※2

こんな感じになります。

以上、いかがでしょうか?
アバター
にゃたま
記事: 837
登録日時: 2016年1月13日(水) 23:53
お住まい: 床下の猫王国-すみませんが体調悪いのでサポートはお休みさせていただきます
連絡する:

Re: イベントのメモからの情報取得について

投稿記事 by にゃたま »

奏ねこま様


すみません。私の誤った認識がこのようなミスを招いてしまいました。
寧ろすごく分かりやすい丁寧な解説で助かりました。
eventとevent()を含めたev_dataで全く違っててevent()を含んだほうを
後のstartEventに送っちゃってたんですねorz
すごく初歩的なミスに申し訳ない気持ちで一杯です(泣)
以下のコードにしてみたら今まで動かなかったのが嘘みたく動作しました。
動いたときはそれはもう感動の一言でした(大泣)
本当に有難うございました!!

スクリプトが改良できるようになると細かい点で使いやすくなります。
まだ自分のスクリプトが作れるわけではありませんが
他人のを見て改良するだけでも勉強になるのでちょっとずつ勉強します。
また分からないことがありましたらそのときはよろしくお願いします。
それではこれにてトピックについては解決済みとさせていただきます。
ねこま様、お手数おかけしました。では用件のみですが失礼させていただきます。
if (command.toUpperCase() === 'EVENTSTART') {
if (args.length != 0){
var type = args[0];
if (type.toUpperCase() === 'ID') {
var id = Number(convertEscape(args[1]));
var event = $gameMap.event(id);
var ev_data = event.event();
if (ev_data.meta.ErsExclusion) event = null;
startEvent(event);
}
}
}
アバター
にゃたま
記事: 837
登録日時: 2016年1月13日(水) 23:53
お住まい: 床下の猫王国-すみませんが体調悪いのでサポートはお休みさせていただきます
連絡する:

Re: 【解決済】イベントのメモからの情報取得について

投稿記事 by にゃたま »

奏ねこま様


あと、もしよろしければですけど当作品が完成したときに
クレジットに奏ねこま様をスペシャルサンクスに載せてもよろしいでしょうか?
嫌でしたら載せないようにします。
よろしければご返事いただけましたら幸いです。
奏ねこま
記事: 702
登録日時: 2016年1月20日(水) 20:04

Re: 【解決済】イベントのメモからの情報取得について

投稿記事 by 奏ねこま »

にゃたま さんが書きました:あと、もしよろしければですけど当作品が完成したときに
クレジットに奏ねこま様をスペシャルサンクスに載せてもよろしいでしょうか?
載せて頂けるなら嬉しいですね :D
完成をお待ちしています。
アバター
にゃたま
記事: 837
登録日時: 2016年1月13日(水) 23:53
お住まい: 床下の猫王国-すみませんが体調悪いのでサポートはお休みさせていただきます
連絡する:

Re: 【解決済】イベントのメモからの情報取得について

投稿記事 by にゃたま »

奏ねこま さんが書きました:
にゃたま さんが書きました:あと、もしよろしければですけど当作品が完成したときに
クレジットに奏ねこま様をスペシャルサンクスに載せてもよろしいでしょうか?
載せて頂けるなら嬉しいですね :D
完成をお待ちしています。
いまのところクレジットが寂しいことになってるのでできたらと思い
連絡しました。それでは完成しましたら掲載致します♪
まだ時間はかかりますがしぶとくお待ちいただけたらと思います。
返信する

“MV:質問”に戻る