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

kamometrain
記事: 100
登録日時: 2018年2月25日(日) 12:47

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

投稿記事by kamometrain » 2019年6月12日(水) 21:49

「イベントの一時消去」を解除、つまり一時消去されたイベントを復活するには、どうすればいいのでしょうか。
なお、マップを変えれば解除できるのは知っていますが、マップは変えたくありません。
よろしくお願いします。
最後に編集したユーザー kamometrain on 2019年6月15日(土) 00:04 [ 編集 1 回目 ]

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

Re: 「イベントの一時消去」の解除

投稿記事by にゃたま » 2019年6月12日(水) 22:53

kamometrain様

イベントの一時消去を復活させたい意図が不明ですが
おそらくは以下のスクリプトでできるかと思います。

コード: 全て選択

$gameMap.event(eventID)._erased = false;
$gameMap.event(eventID).refresh();


可能であればセルフスイッチや通常のスイッチなど
他の手段で代用できないのでしょうか?
おそらくは消去したものを戻してほしくないから
そういったコマンドがないような気がします。
kamometrain
記事: 100
登録日時: 2018年2月25日(日) 12:47

Re: 「イベントの一時消去」の解除

投稿記事by kamometrain » 2019年6月13日(木) 22:26

お返事ありがとうございます。

イベントの一時消去を復活させたい意図が不明ですが


仰られるとおり、意図が分からないと、回答が難しいでよね。

シンボルエンカウントを作っていまして、敵を倒したら、そのシンボルを消すために、「イベントの一時消去」を使っているのです。マップが変えれば、消えたシンボルが復活できるので、使い勝手もいいと思ったのです。
マップ上には多くの敵がいる。個々にスィッチをするのも面倒なので、この「イベントの一時消去」は便利だな、と。

ところが、「マップが変えれば」というのが、実は、「マップIDを変えれば」ということに気づきました。移動イベントを使っただけでは、シンボルは復活しないわけなんですね。

そこで、今回の質問となったわけです。

質問を言い換えますと、
疑似的に(?)、「マップIDを変わった」状況にできないものか、というものです。
(移動イベントの都度、いったんダミーのマップを、間にかませるといった方法ぐらいしか浮かばないのですが・・・)

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

Re: 「イベントの一時消去」の解除

投稿記事by にゃたま » 2019年6月13日(木) 23:31

kamometrain様

私自身の理解力が乏しい為、間違ったように解釈していたらすみません。

kamometrain さんが書きました:疑似的に(?)、「マップIDを変わった」状況にできないものか、というものです。

現在のマップにいながらにして全ての敵を復活させたいということですね?
それでしたら過去に私が似たような質問に回答してましたが…
(viewtopic.php?t=5632)
トリアコンタン様のテンプレートイベントプラグインを利用するのが一番手っ取り早いかもしれません。
https://triacontane.blogspot.com/2016/0 ... st_25.html
姉妹プラグインのような存在の動的生成イベントプラグインとも相性がいいのでおすすめです。
https://triacontane.blogspot.com/2016/08/blog-post.html

これで解決できませんか?

追記
尚、プラグインを利用しない方法ですと(viewtopic.php?t=7690)
にてノムクラ様が答えておられましたセルフスイッチ式で$gameSelfSwitches.clear();という
スクリプトで全てのセルフスイッチがリセットされるのでこういった方法もあります。
敵を倒したらセルフスイッチをオンにして復活してほしいタイミングで使えばよいかと思います。
kamometrain
記事: 100
登録日時: 2018年2月25日(日) 12:47

Re: 「イベントの一時消去」の解除

投稿記事by kamometrain » 2019年6月13日(木) 23:49

ありがとうございます。

おそらくは、仰っているとおりのものです。
実のところ、質問をする前に、このページを拝見させていただいたのですが、
そのときは、理解できず、このページに行きつくとは思っていませんでした。

自分にはハードルが高そうですが、まずは、やってみることにします。
また行き詰まることがありましたら、教えていただけると助かります。
アバター
にゃたま
記事: 837
登録日時: 2016年1月13日(水) 23:53
お住まい: 床下の猫王国-すみませんが体調悪いのでサポートはお休みさせていただきます
連絡を取る:

Re: 「イベントの一時消去」の解除

投稿記事by にゃたま » 2019年6月14日(金) 00:02

すみません。


前回投稿の追記のタイミングとほぼ同時になってしまいました。
こちらの方法ももし試してなければお試しください。
テンプレートイベントの方法より簡単かもしれません。
ただしプラグインを使ったほうが共通したイベントにまとめれるので
使いこなせればかなり開発の効率上がります(これは個人的な主観です)
特定のリージョンやタグなどに限定して敵をランダムで発生させたい
ときは動的生成イベントプラグインも便利ですよ。

追記
リフレッシュがされてないようでしたのでスクリプトに修正をする必要があります。
前のコードに$gameSelfSwitches.onChange();を追加してください。

コード: 全て選択

$gameSelfSwitches.clear();
$gameSelfSwitches.onChange();
kamometrain
記事: 100
登録日時: 2018年2月25日(日) 12:47

Re: 「イベントの一時消去」の解除

投稿記事by kamometrain » 2019年6月14日(金) 15:57

ありがとうございます。
正直、テンプレートイベントは、自分には難しかったですね。

教えていただいたページをたどると、同じくトリアコンタン様の一時スィッチプラグインがありました。
これで仰られたセルフスィッチを利用してできると思ったのですが、
これも、いったんマップIDを変えないと、指定されたセルフスィッチのON/OFFができないようです。

また、$gameSelfSwitches.clear();ですが、A~DすべてがOFFになるようです。
例えば、Dだけを指定してOFFというようなことができないでしょうか。
astral
記事: 106
登録日時: 2018年11月14日(水) 00:21
連絡を取る:

Re: 「イベントの一時消去」の解除

投稿記事by astral » 2019年6月14日(金) 17:05

こんにちは。
$gameSelfSwitches.clear()は全マップの全セルフスイッチ初期化します。
こちらのスクリプトで、現在のマップIDのDだけをOFFにすることができます。

コード: 全て選択

var mapId = $gameMap.mapId(); //対象マップID
var selfId = 'D'; //対象セルフスイッチID

Object.keys($gameSelfSwitches._data).forEach(function(self){
  var key= self.split(',');
  if (key[0] == mapId && key[2] === selfId) $gameSelfSwitches.setValue(key);
});
kamometrain
記事: 100
登録日時: 2018年2月25日(日) 12:47

Re: 「イベントの一時消去」の解除

投稿記事by kamometrain » 2019年6月15日(土) 00:01

ありがとうございます。解決しました。

試してみましたが、問題なく動きました。
にゃたま さん astralさん ありがとうございました。
感動ものです。

おかげでセルフスィッチの幅も広がりました(実際に広げるかどうかは未定ですが・・)
コミット
記事: 12
登録日時: 2020年8月23日(日) 15:11

Re: 「イベントの一時消去」の解除

投稿記事by コミット » 2021年6月12日(土) 23:11

astral さんが書きました:こんにちは。
$gameSelfSwitches.clear()は全マップの全セルフスイッチ初期化します。
こちらのスクリプトで、現在のマップIDのDだけをOFFにすることができます。

コード: 全て選択

var mapId = $gameMap.mapId(); //対象マップID
var selfId = 'D'; //対象セルフスイッチID

Object.keys($gameSelfSwitches._data).forEach(function(self){
  var key= self.split(',');
  if (key[0] == mapId && key[2] === selfId) $gameSelfSwitches.setValue(key);
});


大変役に立つ情報をありがとうございます。
解決済みが張られているところ掘り起こして申し訳ありませんが、
上記の「現在のマップIDのDだけをOFF」のスクリプトを逆に、「現在のマップIDのDだけをON」にするスクリプトはどうやって記述すればよろしいでしょうか?
また、全マップの全セルフスイッチをONにする方法も知りたいです。
どうかよろしくお願いします。

“MV:質問” へ戻る