【解決済み】「イベントの一時消去」の解除

名無し蛙
記事: 304
登録日時: 2015年11月23日(月) 02:46

Re: 【解決済み】「イベントの一時消去」の解除

投稿記事by 名無し蛙 » 2021年6月13日(日) 12:17

どうもこんにちは
多分、満足いく答えにはならないと思いますが一応回答してみます。

まずセルフスイッチに関する前提知識を二点。
一点目は$gameSelfSwitchesは$gameSwitchesや$gameVariablesのように
[マップID, イベントID, セルフスイッチ番号]をkeyとする
独立した変数管理機構でイベントとは直接関係ありません。
二点目は設定されてないフラグは全てfalse(OFF)として扱う、という大前提があります。
したがって、全てOFFにするというのは非常に簡単で既存のフラグ情報を全て消去するだけで完了します。
しかし全てをONにする、というのは存在する全ての
マップ、イベント、セルフスイッチ番号を走査する必要があり膨大なステップ数を要します。

これらを踏まえた上で
コミット さんが書きました:また、全マップの全セルフスイッチをONにする方法も知りたいです。

こちらの質問には回答する事が出来ません。主な理由は二つ。
他のマップのイベントID一覧を取得する、という処理は
ツクールMVのスクリプトコマンドだけでは実行不可能だと思います。
MVではファイル読み込み処理が面倒でマップファイルも例外ではありません。
並列処理やプラグイン等を併用すれば出来ない事もないですけど煩雑な手続きが必要です。

もう一つはシステムに対する正確な理解がない人が生兵法をしてもバグの温床にしかなりません。
前提知識で書きましたがイベントとセルフスイッチはシステム的には紐付いている訳ではないです。
コマンド実行後にセーブ、イベントの消去と生成をするだけでセルフスイッチがズレる可能性はありますし
更に新しいイベント作成した時に無関係のセルフスイッチ情報が収まる可能性もあります。
フラグ情報をリセットするだけならある程度予想出来ますけどONにする場合は副作用の予測が困難です。

コミット さんが書きました:「現在のマップIDのDだけをON」にするスクリプトはどうやって記述すればよろしいでしょうか?

こちらは現在マップの全てのイベントIDのセルフスイッチ番号'D'をONにする、という意味ですかね。
上の理由で利用は非推奨ですけど出来ない事もないです。

コード: 全て選択

const mapId = this._mapId;
const selfSwitchId = 'D';
const events = $dataMap.events.filter(e => e);
events.forEach(event => {
    const key = [mapId, event.id, selfSwitchId];
    $gameSelfSwitches.setValue(key, true);
});

一時消去や非表示に関係無くマップに設定された全てのイベントを対象に走査します。

コード: 全て選択

console.log($gameSelfSwitches._data);

でセルフスイッチの一覧内容をコンソールに表示出来るので
何が入っているのか確認するようにしてください。

コミット
記事: 12
登録日時: 2020年8月23日(日) 15:11

Re: 【解決済み】「イベントの一時消去」の解除

投稿記事by コミット » 2021年6月13日(日) 14:43

ありがとうございます。
全セルフスイッチをONというのは本来MVでは想定されない処理なのであまりおすすめできないということでしょうか。
なるほど、理解できました。

>>こちらは現在マップの全てのイベントIDのセルフスイッチ番号'D'をONにする、という意味ですかね。
上の理由で利用は非推奨ですけど出来ない事もないです。

そのとおりでございます。
名無し蛙様の提示してくださったスクリプトで確かに現マップ上の全セルフスイッチがONになりましたがこの方法は上記の理由のとおりバグの可能性がちょっとでもあるということを考えると心配なのでせっかくスクリプトを教えていただいたのに申し訳ありませんが使用を控えることにします。
現在、同マップ上でセルフスイッチAがONになると消えるイベントが6つほどありまして、それをどうしても一括操作したいと思いまして、コモンイベント内のスクリプトで

コード: 全て選択

$gameSelfSwitches.setValue([this._mapId,1, "A"], true)
$gameSelfSwitches.setValue([this._mapId,2, "A"], true)
$gameSelfSwitches.setValue([this._mapId,3, "A"], true)
$gameSelfSwitches.setValue([this._mapId,4, "A"], true)
$gameSelfSwitches.setValue([this._mapId,5, "A"], true)
$gameSelfSwitches.setValue([this._mapId,6, "A"], true)

としてますが、イベントが更に増えた場合行数が多くなるのでもっと簡潔にできないかと思っておりました。
こちらのほうが安全であれば引き続きこのままで行こうかとおもいます。
もしくはセルフスイッチを一括操作するプラグインもいくつかありますので上記の回答を考慮しつつ使うかどうか判断しようかと思います。
この度は本当にありがとうございました。
アバター
冷やっこ
記事: 132
登録日時: 2020年3月04日(水) 22:47

Re: 【解決済み】「イベントの一時消去」の解除

投稿記事by 冷やっこ » 2021年6月13日(日) 19:33

コミット さんが書きました:ありがとうございます。
全セルフスイッチをONというのは本来MVでは想定されない処理なのであまりおすすめできないということでしょうか。
なるほど、理解できました。

>>こちらは現在マップの全てのイベントIDのセルフスイッチ番号'D'をONにする、という意味ですかね。
上の理由で利用は非推奨ですけど出来ない事もないです。

そのとおりでございます。
名無し蛙様の提示してくださったスクリプトで確かに現マップ上の全セルフスイッチがONになりましたがこの方法は上記の理由のとおりバグの可能性がちょっとでもあるということを考えると心配なのでせっかくスクリプトを教えていただいたのに申し訳ありませんが使用を控えることにします。
現在、同マップ上でセルフスイッチAがONになると消えるイベントが6つほどありまして、それをどうしても一括操作したいと思いまして、コモンイベント内のスクリプトで

コード: 全て選択

$gameSelfSwitches.setValue([this._mapId,1, "A"], true)
$gameSelfSwitches.setValue([this._mapId,2, "A"], true)
$gameSelfSwitches.setValue([this._mapId,3, "A"], true)
$gameSelfSwitches.setValue([this._mapId,4, "A"], true)
$gameSelfSwitches.setValue([this._mapId,5, "A"], true)
$gameSelfSwitches.setValue([this._mapId,6, "A"], true)

としてますが、イベントが更に増えた場合行数が多くなるのでもっと簡潔にできないかと思っておりました。
こちらのほうが安全であれば引き続きこのままで行こうかとおもいます。
もしくはセルフスイッチを一括操作するプラグインもいくつかありますので上記の回答を考慮しつつ使うかどうか判断しようかと思います。
この度は本当にありがとうございました。


こんばんは!

コード: 全て選択

for(var eventID = 1; eventID <= 6; eventID++){
$gameSelfSwitches.setValue([this._mapId, eventID, "A"], true);
}

この様な方法はいかがでしょうか?
上記は同一マップ内のイベントID1~6に対して処理を行います。
イベントID6以降、イベントが増えるようであれば eventID <= 6; の数値を7や8に変更してあげて下さい。



コード: 全て選択

var fruits = [ 6,7,11,12 ];
for (var i = 0, len = fruits.length; i < len; ++i) {
$gameSelfSwitches.setValue([this._mapId, fruits[i], "A"], true);
}

上記はイベントIDが連番ではない時、こちらの例ですとイベントID6,7,11,12 に対して処理を行います。
イベントが増えるようであれば [ 6,7,11,12 ]の箇所にカンマで区切って数値を追加して上げて下さい。



あと、この様なプラグインがありました。試してはいないのですが…。
「セルフスイッチ一括操作(茶の助様作) TYA_SwitchControl.js」
https://plugin.fungamemake.com/archives/16329

以上、ご参考程度にどうぞ。
コミット
記事: 12
登録日時: 2020年8月23日(日) 15:11

Re: 【解決済み】「イベントの一時消去」の解除

投稿記事by コミット » 2021年6月14日(月) 20:22

冷やっこ様

どうもありがとうございます!
こんな簡潔な方法があったんですね。
for(var eventID = 1; eventID <= 6; eventID++){
$gameSelfSwitches.setValue([this._mapId, eventID, "A"], true);
}


var fruits = [ 6,7,11,12 ];
for (var i = 0, len = fruits.length; i < len; ++i) {
$gameSelfSwitches.setValue([this._mapId, fruits[i], "A"], true);
}


上記2点とも全イベントではなく指定できるという点で安心して使えそうですね。
このスクリプトで様子を見ながらイベントとセルフスイッチを慎重に扱っていこうかと思います。

プラグインも紹介してくださりありがとうございます。
ぜひ参考にさせていただきます。

“MV:質問” へ戻る