老树发新芽——利用「三联触发」实现大规模或逻辑
序言:在早期的战役中,我们往往使用「三联触发」来实现非逻辑,即条件的反向。
形如下列内容的三联触发实现了一个效果,这个效果使玩家拥有食物等于0时受到伤害。
触发1 开启 循环
激活触发2
激活触发3
触发2 关闭 不循环
堆积属性 玩家1 食物 1
关闭触发3
触发3 关闭 不循环
损坏目标 玩家1 军事 1
而如今,我们只需一个触发即可实现这个效果:
触发 1 开启 循环
R#0: 堆积属性,玩家1,食物,1
E#0: 损害物件,玩家1,军事,1
看起来,三联触发只是一个被新触发取代了的旧技术。但是,在实现最后一个基本逻辑运算「或」时,三联触发展现了它新的作用。
例子:
地图上有3座铁匠铺,现太宗(民兵)到达任意一座铁匠铺,铁匠会升级他的武器和盔甲,他的攻击力会提升1,甲防会提升1,盾防会提升1;但是,整个大陆的铁匠就这么点技术,他们不能把升级过的武器再升级一遍,所以,他到达下一个铁匠铺时,铁匠无法升级他的武器和盔甲。
这个故事是这样实现的——
触发 0 开不循
C#0: 将物件带到指定区域,现太宗,地点(铁匠铺A)
E#0: 激活触发 触发 3
E#1: 关闭触发 触发 1
E#2: 关闭触发 触发 2
触发 1 开不循
C#0: 将物件带到指定区域,现太宗,地点(铁匠铺B)
E#0: 激活触发 触发 3
E#1: 关闭触发 触发 0
E#2: 关闭触发 触发 2
触发 2 开不循
C#0: 将物件带到指定区域,现太宗,地点(铁匠铺C)
E#0: 激活触发 触发 3
E#1: 关闭触发 触发 0
E#2: 关闭触发 触发 1
触发 3 关不循
E#0: 改变物件攻击力,现太宗,1
E#1: 修改装甲值#1,现太宗,1
E#2: 修改装甲值#2,现太宗,1
这一套触发使用了4个触发共15个条件/效果。
过了几年,大陆上的国家正在打仗,纷纷在各地修建铁匠铺,如今,现太宗可以在大陆24座铁匠铺中任意一座,升级一次他的武器和盔甲。
现在需要多少个触发和效果呢?是(24+1)=25个触发,24个条件,(24²+3)=579个效果。
触发、条件数和铁匠铺数成线性关系,效果数和铁匠铺数成二次关系。
效果数=实际效果数+或条件数²
这样一来,需要大量或逻辑时,效果就很难实现。
三联触发:
或逻辑是条件反向的与非逻辑。帝国时代实现或逻辑很麻烦,但实现与逻辑和非逻辑却非常简单,因而我们可以将原例子中的或逻辑变换为与非逻辑,即先将24个反向条件相与,再利用三联触发求非:
触发 0 开循
E#0: 激活触发 触发 1
E#1: 激活触发 触发 2
触发 1 闭不循
R#0: 将物件带到指定区域,现太宗,地点(铁匠铺01)
……
R#23: 将物件带到指定区域,现太宗,地点(铁匠铺24)
E#0: 关闭触发 触发 2
触发 2 闭不循
E#0: 关闭触发 触发 0
E#1: 改变物件攻击力,现太宗,1
E#2: 修改装甲值#1,现太宗,1
E#3: 修改装甲值#2,现太宗,1
这样一来,触发数固定为了3,条件数和之前相同,效果数骤降到(5+3)=8个
事实上,相比最简单的与逻辑,我们仅仅多使用了2个触发和5个效果,就实现了大规模的或逻辑。
籍由大规模的或逻辑,可以实现很多之前不易实现的功能,如检测「任意不规则形状的区域」,检测「已研发多种科技之一」,检测「从大量指定的物件中,摧毁/捕获/选择任意一个」。
嵌套三联触发:
现太宗走到铁匠铺,铁匠拒绝为他升级武器装备,铁匠说:「你需要证明你的实力,大陆上有11名土匪,强迫铁匠界为他们无偿打造武器,你只有杀死了至少一个人,铁匠界才会接受你。」。现太宗:「你还做不做生意?!」
这里用到了两个独立的或条件组相与[Y=(A+B)(C+D)],现太宗必须杀死任意一个恶名昭彰的土匪,然后到达任意一座铁匠铺,才可以升级他的武器装备。使用嵌套三联触发来实现这个逻辑如下:
触发 0 开循
E#0: 激活触发 触发 1
E#1: 激活触发 触发 2
触发 1 闭不循
R#0: 将物件带到指定区域,现太宗,地点(铁匠铺01)
……
R#23: 将物件带到指定区域,现太宗,地点(铁匠铺24)
E#1: 关闭触发 触发 2
触发 2 闭不循
E#2: 激活触发 触发 3
E#3: 激活触发 触发 4
触发 3 闭不循
R#0: 消灭物件,土匪01
……
R#23: 消灭物件,土匪11
E#0: 关闭触发 触发 4
触发4 闭不循
E#0: 关闭触发 触发 0
E#1: 关闭触发 触发 1
E#2: 关闭触发 触发 2
E#3: 关闭触发 触发 3
E#4: 改变物件攻击力,现太宗,1
E#5: 修改装甲值#1,现太宗,1
E#6: 修改装甲值#2,现太宗,1
最后,这套触发应用于循环效果的时候,只需删除最终触发中的「关闭触发」效果即可。
先与后或:
现太宗走到铁匠铺,铁匠说:「你得站在地毯上,然后点击我,才能升级武器装备」。现太宗:「请你能不能不要说这种让人出戏的话?」
这里的逻辑是24个独立的与条件组相或,三联触发终于不适用于这种逻辑了。那么如何实现这种逻辑呢,我们让地图上的单位参与进来,作为触发的一环——
触发 0 闭不循
C#0: 将物件带到指定区域,现太宗,地点(铁匠铺01)
C#1: 选择物件,铁匠铺01
E#0: 激活触发,触发 24
触发 1~22 ……
触发 23 闭不循
C#0: 将物件带到指定区域,现太宗,地点(铁匠铺24)
C#1: 选择物件,铁匠铺24
E#0: 激活触发,触发 24
触发 24 闭不循
R#0: 区域内的物件大于等于,区格A,物件F,1
E#0: 产生物件,区格A,物件F
E#1: 改变物件攻击力,现太宗,1
E#2: 修改装甲值#1,现太宗,1
E#3: 修改装甲值#2,现太宗,1
最后这个倒并不是什么新奇方法,顺带一提而已。
没食物就减血,有那么复杂吗? 不错,这个方法可以替代“或运算”条件,而且使用的条目很少。
第二个,我认为可以简化一些,改成“站在任意一个地毯(a、b、c、……)上,且选择了任意一个铁匠(A、B、C、……)”。虽然存在站在a地毯却选择了B铁匠的情况,但实际中应该几乎不会出现,尤其是视野有限的情况下。 新人多學習是好事,但這類技術在1.4出現時(四年前)就已經知道了。
而且這四年論壇發表的作品中也都被廣泛應用過了。 troytroytroy 发表于 2018-12-31 11:05
新人多學習是好事,但這類技術在1.4出現時(四年前)就已經知道了。
而且這四年論壇發表的作品中也都被廣泛應 ...
确实不是什么难想到的稀罕技术,很多人看到标题就能明白全部,但是还是整理一下写出来比较好。 本帖最后由 春田一九零三 于 2019-1-1 12:44 编辑
三联触发:
或逻辑是条件反向的与非逻辑。帝国时代实现或逻辑很麻烦,但实现与逻辑和非逻辑却非常简单,因而我们可以将原例子中的或逻辑变换为与非逻辑,即先将24个反向条件相与,再利用三联触发求非:
触发 0 开循
E#0: 激活触发 触发 1
E#1: 激活触发 触发 2
触发 1 闭不循
R#0: 将物件带到指定区域,现太宗,地点(铁匠铺01)
……
R#23: 将物件带到指定区域,现太宗,地点(铁匠铺24)
E#0: 关闭触发 触发 2
触发 2 闭不循
E#0: 关闭触发 触发 0
E#1: 改变物件攻击力,现太宗,1
E#2: 修改装甲值#1,现太宗,1
E#3: 修改装甲值#2,现太宗,1
这样一来,触发数固定为了3,条件数和之前相同,效果数骤降到(5+3)=8个
事实上,相比最简单的与逻辑,我们仅仅多使用了2个触发和5个效果,就实现了大规模的或逻辑。
__________________
交流一下。。。。
1、上述这段触发,似乎不能实现,到达24座铁匠铺之一后,增加攻防的效果?
因为他的正逻辑条件是:太宗应同时到达24座铁匠铺,负逻辑条件是加攻防。
结果是一上来正逻辑不满足,负逻辑直接启动。
不知是否我理解错误?
是否触发应该是:
触发0,全开1-2
触发1,条件,太宗未到达24座铁匠铺。关闭触发2
触发2,太宗加属性。
这样子,太宗通过3联触发在24座铁匠铺之间任意加攻的属性的触发才能成立。
这个触发规模就是N条件级的,应该算很少了。
望指教。
2、其次,探索三联触发在非1.5运用时,建议配合地图领航员(旗帜)等信标使用。
可以避免几何增长。又能维持良好的扩展性。
一般为:
总触发0,开启后续所有触发,在特定位置移除领航员信标,并产生新的地图领航员信标,循环。
触发1:条件1+领航员信标存在,效果:开启对应效果,抹除信标。
触发N:条件N+领航员信标存在,效果:开启对应效果,抹除信标。
触发N+1。关闭触发1-N。
触发N+2以后。具体执行效果。
3、其实个人觉得1.5出来以后,三联触发并非无用武之地的。
如楼主的例子,要实现每处都是“带到某处+点选建筑”这种复合条件时,简单的反向触发就不能用了。
因为这时候反逻辑自身嵌套了,增加了其复杂性。
即原先,“太宗未达到24个地点之一”,变成了“太宗未达到24地点且未点选24个建筑”
这种情况是不能简单的通过再加24个条件来完成的。
所以,原1.0的三联触发结构依然可以很好的解决这种复合反向逻辑。
同时触发组在先天上,对于后期维护和扩充功能优势不变。
继续拿2的例子:
如果是N个铁匠铺,那么2的触发结构是:
总触发0,开启后续所有触发,在特定位置移除领航员信标,并产生新的地图领航员信标,循环。
触发1:太宗到达铁匠铺1+领航员信标存在,效果:开启触发N+2,抹除信标。
触发N:太宗到达铁匠铺N+领航员信标存在,效果:开启触发N+2,抹除信标。
触发N+1。关闭触发1-N。
触发N+2以后。具体太宗强化效果。
可见,这个触发组的触发数是N+3。条件数是2N,效果数是4N+3。
并不会随着N的增加而出现几何增长。
如果要增加1个条件(点建筑),则条件数只加N。
但应特别注意的是:
1、总触发0,开启后续所有触发,在特定位置移除领航员信标,并产生新的地图领航员信标,循环。
这两句一定要写,而且建议写在一起。否则不移除,那么随着循环的增多,信标过多会导致游戏退出。
2、如果要扩展,则触发N+1一定需要随着新扩的后续触发写完后再写。
因为帝国时代触发执行顺序的原因,如果N+1不是位于触发组的最后,那么将导致排在其后面的触发无法得到执行。
3、当然懒一点,或者你的战役框架简单的话,N+1可以不写。因为信标已经被用掉了,且不会再生。
春田一九零三 发表于 2019-1-1 12:30
__________________
交流一下。。。。
你理解得不对,条件以R#开头代表的是反向条件,C#则是正向,因为游戏里就是这样表示的,所以我也这样写,认为这样简洁而明了。
信标确实是最为泛用的手段,但是在单纯或逻辑的时候,既然能够做到,还是尽量不把触发放到地上比较好,而且触发数只有3,条件数只有N,应该是比信标法简洁的。 本帖最后由 春田一九零三 于 2019-1-2 23:35 编辑
夜游神 发表于 2019-1-1 18:28
你理解得不对,条件以R#开头代表的是反向条件,C#则是正向,因为游戏里就是这样表示的,所以我也这样写, ...
然而这种简洁是以条件的元数不可扩展为代价的。其次,对于简洁的逻辑用一种写法,对于复杂的逻辑用另一种写法,看似省力,实际上是后期维护和测试的恶梦。因为对于所有逻辑,你很难一眼了解他的本来结构。
所以,个人觉得,除了类似周成、日成这类的速成战役,以缩小触发编写时间为第一目的外,信标法的扩展性好处太多了。见仁见智吧。
页:
[1]