Project1

标题: 有没有刷新当前事件的脚本? [打印本页]

作者: raisewing    时间: 2020-5-21 18:41
标题: 有没有刷新当前事件的脚本?
有没有刷新当前事件的脚本?或者可以关闭地图中批量事件的独立开关的脚本也可以,是部分关闭,不是全部关闭。谢谢大佬们!
作者: hanyilun    时间: 2020-5-21 19:20
如果你是做明雷战斗,想刷新当前地图的敌人
那就不用独立开关,直接选暂时消除事件就可以
作者: raisewing    时间: 2020-5-21 19:56
hanyilun 发表于 2020-5-21 19:20
如果你是做明雷战斗,想刷新当前地图的敌人
那就不用独立开关,直接选暂时消除事件就可以 ...

不是的哈,我是做了一个类似口袋妖怪的冰系道馆,掉落之后回到地图之后冰面需要恢复成初始状态。
作者: hanyilun    时间: 2020-5-21 20:01
本帖最后由 hanyilun 于 2020-5-21 20:56 编辑

要不你具体说一下你想要实现的效果是什么样?
我总觉得和刷新敌人的原理有点相似?
作者: raisewing    时间: 2020-5-21 20:28
hanyilun 发表于 2020-5-21 20:01
要不你具体说一下你想要实现的效果是什么样?
我总觉得和刷新敌人的原理有点相似... ...

就是A点通往B点之间有一片冰面,必须要每个格子都踩一遍才能通过,否则会掉落到另外一个地图重新爬上去,回到冰面的地图后冰面需要刷新恢复原状,冰面有3种状态1初始,2踩过,3变成坑洞掉人物掉落到另外一个地图,踩过的冰面第二次踩的时候会掉落。以前在VA中好像在每块冰面(事件)的最后一种状态加off_map_self_switches
作者: hanyilun    时间: 2020-5-21 22:04
本帖最后由 hanyilun 于 2020-5-21 22:11 编辑
raisewing 发表于 2020-5-21 20:28
就是A点通往B点之间有一片冰面,必须要每个格子都踩一遍才能通过,否则会掉落到另外一个地图重新爬上去, ...

纯事件的话,你看这样行不行?
假设每个冰面有三个事件页:
事件页1:触发方式选择玩家接触,打开独立开关A
事件页2:当独立开关A打开时启用,触发方式选择玩家接触,打开开关1
事件页3:当开关1打开时启用,触发方式选择并行处理,关闭独立开关A,关闭开关1

可能看起来有点复杂,具体逻辑大概是这样:
1.冰面初始状态是事件页1,通过一次后变成事件页2
2.掉落事件写在事件页2里,第二次通过冰面时,触发掉落事件,冰面变成事件页3
3.打开开关1最好放在事件页2的最后,防止出现某些视觉上的问题
4.事件页3的作用是让冰面回到事件页1

以上只是理论,可能麻烦一点,不知道有没有大佬能优化一下
而且我不确定如果冰面过多会不会出现问题,楼主可以先试一下
作者: hanyilun    时间: 2020-5-21 23:41
你按照我这样设置看看,我这边没问题的啊

作者: raisewing    时间: 2020-5-21 23:58
hanyilun 发表于 2020-5-21 22:04
纯事件的话,你看这样行不行?
假设每个冰面有三个事件页:
事件页1:触发方式选择玩家接触,打开独立开关 ...


就是这样看上去比较怪
作者: raisewing    时间: 2020-5-22 00:05

作者: hanyilun    时间: 2020-5-22 00:06
raisewing 发表于 2020-5-21 23:58
就是这样看上去比较怪

这个简单啊,只要做一些简单的调整就好了~
事件页1:不变
事件页2:与玩家接触,当独立开关A打开时启用,打开独立开关B
事件页3:并行处理,当独立开关B打开时启用,掉落事件,打开开关1
事件页4:并行处理,当开关1打开时启用,关闭独立开关A和B,关闭开关1

其实就是把原来的事件页2换成事件页3,事件页3的行走图替换成坑洞就好了
不过这样的话,掉落事件最好先等待20-30帧左右,或者加上一句“掉下去啦”之类的提示
不然行走图转换速度太快,会导致看不出来变成坑洞的过程
作者: hanyilun    时间: 2020-5-22 00:20
hanyilun 发表于 2020-5-22 00:06
这个简单啊,只要做一些简单的调整就好了~
事件页1:不变
事件页2:与玩家接触,当独立开关A打开时启用, ...

这样

作者: raisewing    时间: 2020-5-22 18:01
来个好心大佬指导一下吧!~~
作者: Rarian    时间: 2020-5-23 05:01
raisewing 发表于 2020-5-22 18:01
来个好心大佬指导一下吧!~~

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

不谢
作者: 芯☆淡茹水    时间: 2020-5-23 09:07
  1. //=================================================================================================
  2. Game_Map.prototype.restoreEvent = function() {
  3.     var arr = Array.prototype.slice.call(arguments, 0);
  4.     arr.forEach(function(id){
  5.         this._events[id] && this._events[id].restoreInitialState();
  6.     }, this);
  7.     arr.length > 0 && this.requestRefresh();
  8. };
  9. //=================================================================================================
  10. Game_Event.prototype.restoreInitialState = function() {
  11.     ['A','B','C','D'].forEach(function(n){
  12.         var key = [this._mapId, this._eventId, n];
  13.         $gameSelfSwitches.setValue(key, false);
  14.     });
  15. };
  16. //=================================================================================================
复制代码

吧这个脚本做成插件塞到工程里,作用为将指定事件的 ABCD 四个独立开关全部关闭。
用法:事件 -> 脚本:$gameMap.restoreEvent(id,id,id...);
括号里面的 事件id 可以填写多个
作者: 太陽黑子    时间: 2020-5-23 12:05
其实前面那个事件的做法稍微改改就好
我这里有四个冰面事件


事件页一,玩家踩上去触发,独立开关a打开,出现裂纹

事件页二,独立开关a打开时再次踩上去触发,独立开关a关闭,独立开关b打开,变成大洞

事件页三,独立开关b打开时自动触发,就是掉下去,独立开关b闭,公共开关冰面状态打开

事件页四,公共开关冰面状态打开时自动触发,处理独立开关的页面,在所有冰面事件中找到编号最大的那个,把公共开关冰面状态关闭,我这里就是左下角这个ev005,这样可以确保前面的冰面事件都执行了事件页四,别的其中只处理独立开关就好
作者: Rarian    时间: 2020-5-27 05:05
Rarian 发表于 2020-5-23 05:01
for(var eventID = 11; eventID

这是事件的ID,选择你想要的事件直接改(比如从2到999什么的) 这样的话你应该看得懂了吧


作者: raisewing    时间: 2020-5-27 11:01
本帖最后由 raisewing 于 2020-5-27 11:19 编辑
Rarian 发表于 2020-5-23 05:01
for(var eventID = 11; eventID


for(var eventID = 27; eventID <= 76; eventID++){
var mapID = this._mapId;
$gameSelfSwitches.setValue([mapID, eventID, "A,B,C"],false);
}
把以上这段在事件中插入脚本,是不是就是关闭当前地图的27-76号事件的ABC独立开关?





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1