【解決済み】指定したマップのイベントの個数を取得したい
Posted: 2020年8月06日(木) 16:40
こんにちは! いつも大変お世話になっております!
プラグインの勉強を兼ねて、セルフスイッチを操作するプラグインを作成しようとしています。
(何度目の車輪の再開発かわかりませんが、ご容赦を……)
(プラグインいじりが楽しくて全然ゲーム制作が進まない…………)
*===**===**===*
◆やろうとしてること
指定したマップのセルフスイッチの状態をコンソールに出力する処理を準備しようとしています。
そこで、セルフスイッチの状態を取得するスクリプト
$gameSelfSwitches.value([mapId, eventId, "A");
を使って、対象マップのイベント個数だけループしよう、と考えました。
eventId の部分が 1,2,3,4……と変わってループするイメージです。
今いるマップは取得できました。 ◆困っていること
viewtopic.php?t=5062
こちらの記事から、今いるマップ以外はロードされていないということを知りました。
記載いただいている内容を参考に、別の変数に情報をロードしようと思ったのですが、
ロード反映の方法が分からず、エラーが発生し行き詰まっております。
◆対象のコード
対象の処理部分のみ抜粋
上記コードで発生するエラー
※SelfSwitchController.jsは今回作成しているプラグインです。
マップ情報をロードする前に参照しようとして、中身が空です、といわれているという風に解釈しました。
エラー後にコンソールに直接 >$dataSSC.evnets を入力すると、情報が取れていることが確認できました。
◆解決したいこと
処理のタイミングで指定したマップの情報をロードして、イベントの個数を取得したいです。
「起動タイミングやマップ移動タイミングで全マップをロードしておく」ことも可能な気もしますが、
「マップデータが重いから一つずつロードしている」と参考ページに書かれていたため、
処理のタイミングで取得できたらそこまで重くならないのではないか、という予想です。
大変お手数ではございますが、ご教授いただけると幸いです。
もしくは、まったく別の「こんなアプローチもあるよ!」というのもご教授いただけると嬉しいです!
(直接データパスを指定してgrep的に検索する、というのも検討しましたがこちらもさっぱり見当がつきませんでした…)
ただ、イベントコマンドと併用して(一瞬別マップに移動する)みたいな解決も出来ると思いますが、
今回はプラグインの練習ということで、プラグイン内で解決を目指しています!
長くなってしまいました……。
長文読んでいただきありがとうございました!
お手数ではございますが、よろしくお願いします。
動かないプラグインを添付しておきます……
プラグインの勉強を兼ねて、セルフスイッチを操作するプラグインを作成しようとしています。
(何度目の車輪の再開発かわかりませんが、ご容赦を……)
(プラグインいじりが楽しくて全然ゲーム制作が進まない…………)
*===**===**===*
◆やろうとしてること
指定したマップのセルフスイッチの状態をコンソールに出力する処理を準備しようとしています。
そこで、セルフスイッチの状態を取得するスクリプト
$gameSelfSwitches.value([mapId, eventId, "A");
を使って、対象マップのイベント個数だけループしよう、と考えました。
eventId の部分が 1,2,3,4……と変わってループするイメージです。
今いるマップは取得できました。 ◆困っていること
viewtopic.php?t=5062
こちらの記事から、今いるマップ以外はロードされていないということを知りました。
記載いただいている内容を参考に、別の変数に情報をロードしようと思ったのですが、
ロード反映の方法が分からず、エラーが発生し行き詰まっております。
◆対象のコード
対象の処理部分のみ抜粋
コード: 全て選択
// プラグインコマンドで呼び出された関数
function SelfSwitchControllerStatus(mapId){
// セルフスイッチリスト
var selfsws = ["A", "B", "C", "D"];
// 各セルフスイッチの状態をいれる配列
var selfswstatusarray = [];
// ################
// 別マップの情報を$dataSSCにロードしようとしている
var filename = 'Map%1.json'.format(mapId.padZero(3));
ResourceHandler.createLoader('data/' + filename, DataManager.loadDataFile.bind(this, '$dataSSC', filename));
DataManager.loadDataFile('$dataSSC', filename);
// いろいろ反映しようとしたが、方法がわからず……
// DataManager.onLoad('$dataSSC');
// DataManager.isMapLoaded();
// DataManager.isDatabaseLoaded();
// DataManager.loadMapData();
// DataManager.onLoad();
// DataManager.loadMapData(mapId);
// ResourceHandler.retry();
// ################
for (var eventId = 1; eventId < $dataSSC.events.length; eventId++) { // ★☆ここでエラーが発生する☆★
// セルフスイッチ ABCD の分だけループ
for (var i = 0; i < selfsws.length; i++) {
// 対象のセルフスイッチの状態を確認する
if ($gameSelfSwitches.value([mapId, eventId, selfsws[i]])){
selfswstatusarray.push("ON")
} else {
selfswstatusarray.push("__")
}
}
// コンソールに出力
console.log(eventId,selfswstatusarray)
// セルフスイッチ状態管理の配列をリセットしておく
selfswstatusarray=[];
}
}
コード: 全て選択
rpg_managers.js:1949 TypeError: Cannot read property 'events' of null
at SelfSwitchControllerStatus (SelfSwitchController.js:440)
at SelfSwitchControllerShow (SelfSwitchController.js:399)
at Game_Interpreter.pluginCommandSelfSwitchController (SelfSwitchController.js:177)
at Game_Interpreter.pluginCommand (SelfSwitchController.js:159)
at Game_Interpreter.command356 (rpg_objects.js:10508)
at Game_Interpreter.executeCommand (rpg_objects.js:8930)
at Game_Interpreter.update (rpg_objects.js:8838)
at Game_Map.updateInterpreter (rpg_objects.js:6115)
at Game_Map.update (rpg_objects.js:6022)
at Scene_Map.updateMain (rpg_scenes.js:608)
マップ情報をロードする前に参照しようとして、中身が空です、といわれているという風に解釈しました。
エラー後にコンソールに直接 >$dataSSC.evnets を入力すると、情報が取れていることが確認できました。
コード: 全て選択
TypeError: Cannot read property 'events' of null
at SelfSwitchControllerStatus (SelfSwitchController.js:349)
at SelfSwitchControllerShow (SelfSwitchController.js:294)
(snip)
$dataSSC.events
(17) [null, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
◆解決したいこと
処理のタイミングで指定したマップの情報をロードして、イベントの個数を取得したいです。
「起動タイミングやマップ移動タイミングで全マップをロードしておく」ことも可能な気もしますが、
「マップデータが重いから一つずつロードしている」と参考ページに書かれていたため、
処理のタイミングで取得できたらそこまで重くならないのではないか、という予想です。
大変お手数ではございますが、ご教授いただけると幸いです。
もしくは、まったく別の「こんなアプローチもあるよ!」というのもご教授いただけると嬉しいです!
(直接データパスを指定してgrep的に検索する、というのも検討しましたがこちらもさっぱり見当がつきませんでした…)
ただ、イベントコマンドと併用して(一瞬別マップに移動する)みたいな解決も出来ると思いますが、
今回はプラグインの練習ということで、プラグイン内で解決を目指しています!
長くなってしまいました……。
長文読んでいただきありがとうございました!
お手数ではございますが、よろしくお願いします。
動かないプラグインを添付しておきます……