翔鹰帝国网|古代战争游戏论坛|帝国时代系列|全面战争系列|0AD
 找回密码
 注册翔鹰会员(昵称)
搜索
查看: 184|回复: 7

[教程] 老树发新芽——利用「三联触发」实现大规模或逻辑

[复制链接]

34

主题

1

精华

2723

积分

公爵

耕战
383
鹰币
2690
天龙币
0
帖子
111

创意工坊通行证

附庸关系0
 楼主| 发表于 2018-12-30 00:36:43 | 显示全部楼层 |阅读模式
序言:

在早期的战役中,我们往往使用「三联触发」来实现非逻辑,即条件的反向。
形如下列内容的三联触发实现了一个效果,这个效果使玩家拥有食物等于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


最后这个倒并不是什么新奇方法,顺带一提而已。

评分

参与人数 1耕战 +20 收起 理由
春田一九零三 + 20 分享交流

查看全部评分

回复

使用道具 举报

21

主题

0

精华

411

积分

子爵

耕战
60
鹰币
869
天龙币
0
帖子
75
附庸关系0
发表于 2018-12-30 08:10:06 本帖来自手机 | 显示全部楼层
没食物就减血,有那么复杂吗?
回复

使用道具 举报

387

主题

14

精华

6万

积分

宗主教

耕战
10264
鹰币
37532
天龙币
18
帖子
5413

特级嘉禾勋章三级帝国勋章十字军勋章

附庸关系0
发表于 2018-12-30 10:01:29 | 显示全部楼层
不错,这个方法可以替代“或运算”条件,而且使用的条目很少。
第二个,我认为可以简化一些,改成“站在任意一个地毯(a、b、c、……)上,且选择了任意一个铁匠(A、B、C、……)”。虽然存在站在a地毯却选择了B铁匠的情况,但实际中应该几乎不会出现,尤其是视野有限的情况下。
004时代:战役时代
我很乐意看到有人在MOD技术上超过我。
回复

使用道具 举报

78

主题

6

精华

5万

积分

枢机主教

特洛伊大叔

耕战
10257
鹰币
177
天龙币
126
帖子
1795

翔鹰建站十周年纪念章二级帝国勋章一级翔鹰勋章二级嘉禾勋章第十一届火箭筒杯最佳战役小评论家大评论家

附庸关系9
发表于 2018-12-31 11:05:24 | 显示全部楼层
新人多學習是好事,但這類技術在1.4出現時(四年前)就已經知道了。
而且這四年論壇發表的作品中也都被廣泛應用過了。
傭兵外傳-安帝哥崛起 2019一月發表
傭兵-完整版已公佈下載請點此處
回复

使用道具 举报

34

主题

1

精华

2723

积分

公爵

耕战
383
鹰币
2690
天龙币
0
帖子
111

创意工坊通行证

附庸关系0
 楼主| 发表于 2018-12-31 13:33:25 | 显示全部楼层
troytroytroy 发表于 2018-12-31 11:05
新人多學習是好事,但這類技術在1.4出現時(四年前)就已經知道了。
而且這四年論壇發表的作品中也都被廣泛應 ...

确实不是什么难想到的稀罕技术,很多人看到标题就能明白全部,但是还是整理一下写出来比较好。
回复

使用道具 举报

19

主题

1

精华

2万

积分

征服者

耕战
4041
鹰币
3113
天龙币
75
帖子
1023

翔鹰建站十周年纪念章二级翔鹰勋章第八届火箭筒杯最佳战役第八届火箭筒杯最佳新人

附庸关系0
发表于 2019-1-1 12:30:41 | 显示全部楼层
本帖最后由 春田一九零三 于 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可以不写。因为信标已经被用掉了,且不会再生。


   
                 【2012】天堂之路v1.1                                   【2016】霭之坡的窈蔚之森
回复

使用道具 举报

34

主题

1

精华

2723

积分

公爵

耕战
383
鹰币
2690
天龙币
0
帖子
111

创意工坊通行证

附庸关系0
 楼主| 发表于 2019-1-1 18:28:02 | 显示全部楼层
春田一九零三 发表于 2019-1-1 12:30
__________________

交流一下。。。。

你理解得不对,条件以R#开头代表的是反向条件,C#则是正向,因为游戏里就是这样表示的,所以我也这样写,认为这样简洁而明了。

信标确实是最为泛用的手段,但是在单纯或逻辑的时候,既然能够做到,还是尽量不把触发放到地上比较好,而且触发数只有3,条件数只有N,应该是比信标法简洁的。
回复

使用道具 举报

19

主题

1

精华

2万

积分

征服者

耕战
4041
鹰币
3113
天龙币
75
帖子
1023

翔鹰建站十周年纪念章二级翔鹰勋章第八届火箭筒杯最佳战役第八届火箭筒杯最佳新人

附庸关系0
发表于 2019-1-2 23:31:18 | 显示全部楼层
本帖最后由 春田一九零三 于 2019-1-2 23:35 编辑
夜游神 发表于 2019-1-1 18:28
你理解得不对,条件以R#开头代表的是反向条件,C#则是正向,因为游戏里就是这样表示的,所以我也这样写, ...

然而这种简洁是以条件的元数不可扩展为代价的。其次,对于简洁的逻辑用一种写法,对于复杂的逻辑用另一种写法,看似省力,实际上是后期维护和测试的恶梦。因为对于所有逻辑,你很难一眼了解他的本来结构。

所以,个人觉得,除了类似周成、日成这类的速成战役,以缩小触发编写时间为第一目的外,信标法的扩展性好处太多了。见仁见智吧。
   
                 【2012】天堂之路v1.1                                   【2016】霭之坡的窈蔚之森
回复

使用道具 举报

本版积分规则

排行榜|小黑屋|翔鹰帝国 ( 京ICP备18029055号-1 )

GMT+8, 2019-1-18 12:25

Powered by Hawk Studio  QS Security Corp.® Licensed

© 2001-2018 Hawkaoe.net All Rights Reserved

快速回复 返回顶部 返回列表