for循环在event中的运用,全体时停

大家好,我是Last孤影众后面还有一个点,今天带来我最新的发现但其实大佬很久以前就掌握的知识:for循环在event中的使用。
长话短说,我们可以在事件中使用for循环来达成一个循环触发事件或者循环检测条件,例如根据fs群里大佬的灵感,我写了一个只狼全体敌人时停的事件。
$Event(11006021, Restart, function() {
WaitFor(CharacterHasSpEffect(10000, 3000));
for(let chr=1000000; chr <= 1009999; chr=chr+1)
{
SetNetworkUpdateRate(chr, true, CharacterUpdateFrequency.NoUpdate);
}
这里就是用到了for循环,首先检测玩家喝药特效,这个是触发特效我自己定的,然后进行一个for的循环语句,首先给chr赋值1000000,接着
SetNetworkUpdateRate(chr, true, CharacterUpdateFrequency.NoUpdate);
这句话的意思就是敌人的刷新率变为0,也就是敌人不会刷新,看上去就是时停了。
接着chr=chr+1,也就是chr自加1,只要chr满足小于等于1009999,那么这个循环就不会结束,直到把实体编号1000000到1009999的所有敌人都不刷新了,这个事件才会结束,由此达到了全体时停,当然狼不在其中,因为狼的事件编号为10000,远小于1000000。
当然我们有两个需要注意的点,一是这个chr的值我们必须定好,不能用通用事件带任意值进去,不为什么,就是不奏效,所以我们需要每张图加一个事件,例如源之宫chr就可以是2500000,然后chr<=2509000,这样所有的源之宫敌人我们都能涵盖到。
第二个点就是如果已经加载出的敌人,会表现出时停的模样,但是没加载出的敌人后续就不会加载了,因为刷新率已经是0了,他不会刷出来了,所以我们不能让时停一直存在,不然下个区域的敌人就消失了,最好就时停10秒之内。
我这里写了个五秒的:
$Event(11006021, Restart, function() {
WaitFor(CharacterHasSpEffect(10000, 3000));
for(let chr=1000000; chr <= 1009999; chr=chr+1) {
SetNetworkUpdateRate(chr, true, CharacterUpdateFrequency.NoUpdate); } WaitFixedTimeSeconds(5);
for(let chr=1000000; chr <= 1009999; chr=chr+1) {
SetNetworkUpdateRate(chr, true, CharacterUpdateFrequency.AlwaysUpdate); } RestartEvent();
});
先是全体时停,然后5秒后全体解除时停,这样不会影响到后面敌人的刷新。
当然时停只是一个用途,我们可以利用for循环制作动态难度:检测玩家身上的攻击力特效,给予敌人对应的加成,来达到玩家越强,敌人越强的动态难度。
for(let sp=160001; sp<= 160100; sp++)
{
WaitFor(CharacterHasSpEffect(10000, sp));
SetSpEffect(x, sp+n);
}
这样
x为敌人的实体编号,n为常数,sp+n对应敌人的动态加成特效,可以搞99个和狼一样。
总之,for循环确实是让event的工程量在某些特定场合大大减少,可惜我今天才知道
