找回密码
 点一下
查看: 1074|回复: 3

有关Marker的测试与总结

[复制链接]
发表于 2012-5-27 11:28:55 | 显示全部楼层 |阅读模式



        呃,标记(Marker)确实够复杂的,不过它确实是能够更方便有效实现需求效果的重要手段,至少在区分目标或施法单位条件以及在施法次数上起着重要作用。不过它在使用中相当不好Debug,说不定哪个设置不小心弄错就失效了。        
        当然,现在已经有了很多关于Marker的内容,也相当不错。但是我们还需要细致的测试不是么?关键在于,我们如何依据我们需要的效果来选择Marker设置,这才是核心问题。
        从某方面来讲,Marker有点像行为,它也是使用验证器(Validator)来比较层数(叠加次数)的,不幸的是,我们在单位比较标记计数验证器(CValidatorUnitCompareMarkerCount)中无法设置比较的Marker类型,确切的说,比较的Marker的第一条件(类似行为层数比较中所比较的行为的类别)是由带有这个验证器的效果的链接(Link)来决定的。而且这种比较的前提是我们必须能够找到带有匹配或不匹配(MatchFlags与MismatchFlags)设置的效果(匹配设置至少要存在于当前效果树的直系分支,并且在带有验证器的效果之前添加。),换句话说,在不考虑Link和匹配设置的前提下,我们需要找到对应的效果来进行Marker验证,这就是说,
我们需要将Marker添加到单位身上或者其他什么东西上才能追根述源的进行验证。至少水平有限的我没有在纯粹的点目标效果成功验证。
        呃,特别说一句,次测试的SE版本为1.4.3,不排除我测试过程中的某些错误而得到错误的结果,这东西最好是自己亲自测试才好。

:测试有效的结果一般为多次对同一目标单位施放技能时,成功添加行为并且添加的行为只叠加1次,或在已有标记情况下不能添加,(无效时多为能够多次叠加)。更多的情况下,我注明有效是得到了预料的效果。

        效果树方程解释:#为设置marker匹配,*为添加验证器。:区分效果次序,即:后的效果是:前效果的子效果。?前为引导效果的技能。&在技能前表示引导技能。,为并列添加的多个效果的间隔符,()表示运算优先,如Set1:(#Set2:*Add2),*Add1中Add2由Set2引导。
        采用这样的说明是因为语言描述ABE之间的关系太费劲。上传一堆地图也没必要,这个应该好理解是吧。

        效果类别说明,Set为设置效果、Add为添加行为效果,Remove为移除行为效果,Ability为技能,Behavior为行为,由对应序号Add效果添加,Remove效果移除。Unit创建单位效果。Persistent为创建持续性效果。
        这些测试主要方面在设置效果(CEffectSet)、添加行为效果(CEffectApplyBehavior)、创建单位效果(CEffectCreateUnit)之间,三个效果分别代表连接类效果、单位目标效果、点目标效果,当然我自己也不确定这三个效果是否能够代表对应的三个类别的效果。如果有需要可以自己测试。

1、#Set1:*Add1(marker为施法单位或链接匹配,验证器为无标记)。#*Set1:Add1,无效。Set1:#*Add1无效,若Set1的目标类型为点时(包括单位或点目标类型并对地面施法时)无效。
测试结果说明:如前所述,匹配设置要在验证器之前才有效,当然也许在其他设置或者其他效果时会有所不同。这点似乎与技能的引导状态有关(或者看医疗运输机的治疗技能,貌似引导技能的Marker与技能的Marker有关,而非引导则无关,此为猜测),仍需更为细致的测试。至于点目标的设置效果无效的原因,应该是点目标的设置效果完全无法添加应用行为的效果(不能给地面添加行为吧),或者是因为非持续效果再次验证时效果消失。

2、*Set1:#Add1无效。
测试结果说明:单独将这项列出是有特殊含义的:在单次释放技能时,这种设置当然无效,但是在对同一目标重复释放时,仍然无效。也就是说,Marker验证器不会因为技能的重复使用而验证器所在效果的当前效果树的子效果的匹配设置。

3、当添加的行为Behavior1被移除行为效果Remove1移除时,无标记验证器可以验证通过。若标记为匹配施法单位可测试出:移除行为效果Remove1恢复marker计数次序与添加行为效果的施法顺序相同。
测试结果说明:这个测试是测试添加行为效果的持续存在时间的,由结果可知,持续时间是行为存在时间。也许正是因此,大部分Marker相关技能都是用添加行为效果来将Marker绑定到单位身上的。

4、#Set1:Set2:*Add1时有效,设置效果Set2不影响marker计数。若#Set1:*Set2:Add1,测试依然有效。若#*Set1: Set2:Add1,则无效。若#Set1: *Set2: Add1,有效。
测试结果说明:Marker会存在于效果树中设置了匹配的效果的全部子效果之中,这点后面有测试。另外,#Set1:*Set2:Add1说明了验证器并不需要放在添加到单位的效果上。估计应该是因为绑定到单位身上的持续效果会保留当前整个效果树。

5、#Set1:*Add1,*Add2,且两效果链接不相同,都带有无标记验证器时,依据设置顺序,若Add1在前,则Add1有效,反之亦然。
测试结果说明:当一个匹配设置的效果下有多个带有单位比较标记计数验证器时的效果时,依据效果的设置来处理。也就是说,每个效果的验证是都有效的。

6、Set1:(#Set2:*Add2),*Add1或Set1:*Add1,(#Set2:*Add2)时,Add1无效,Add2有效。#Set1:(Set2:*Add2),*Add1时,Behavior1行为层数恒为0,Add2有效。#Set1:*Add1,(Set2:*Add2)时,Add1有效,Behavior2行为层数恒为0。#Set1:(*Set2: Add2),*Add1时,Add2有效,Behavior1行为层数为0.
测试结果说明:Set1:(#Set2:*Add2),*Add1与Set1:*Add1,(#Set2:*Add2)说明Marker设置不会受到非当前分支的匹配设置影响,尽管都在一个效果树下。
其他情况说明,分支中的匹配设置也是可以继承的。

7、#Set1:(Set2:Set3:*Add2),*Add1时Add1和Add2都有效。Set1:(Set2:#Set3:*Add2),*Add1或Set1:( #Set2: Set3:*Add2),*Add1时Add1无效,Add2有效。
测试结果说明:同6。

8、#Set1:#Set2:*Add1时,若Set1与Set2的匹配设置不同,如Set1为匹配施法单位,Set2匹配链接时,实际结果是匹配链接。反之的实际结果是匹配释放单位。#Set1:(#Set2:*Add1),Add2或#Set1: Add2,(#Set2:*Add1)时Add1无效(可以重复添加行为Behavior1)。
测试结果说明:当效果树当前效果前,同一分支内(不包括与其他分支共有父效果存在情况,即单链状态下),最后一个匹配设置有效;非单链状态下则此分支的验证无效。

9、#Set1:#Set2:#*Add1或#Set1:*Set2:#*Add1无效,且当#*Add1时当前效果验证无效,与前部分匹配设置、验证器设置的Marker验证结果无关。但是当#Set1:Set2:#*Add1,*Add2或#Set1:*Set2:#*Add1,Add2或#Set1:#Set2:#*Add1,*Add2时,Add1与Add2同时有效。#Set1:#Set2:#*Add1,Add2时,Add1有效。
测试结果说明:当匹配设置与验证器同时存在于一个效果时,如果没有并列效果存在,当前效果的验证状态与之前效果树的验证状态无关(这点有点不确定,这点出自#Set1:*Set2:#*Add1无效),为无效。但当有并列效果存在时,则有效。

10、#Set1:*Unit1无效。#Set1:*Unit1,Unit2无效。
测试结果说明:即,点目标效果无效,或者是因为创建单位效果是非持续性效果的原因。

11、#Set1:*Add1,*Unit1时Add1有效,Unit1无法创建单位,#Set1:*Unit1, *Add1时,Add1、Unit1分别有效,以上两种状态中,结果与Add1、Unit1的链接是否相同无关。#Set1:*Unit1, Add1时Unit1只在Add1有效时有效(即类似#Set1:*Add1的状态,但行为会正常的叠加)。另,此技能对其效果Unit1创建的单位无效。#Set1:Add1,*Unit1时Unit1有效(不创建单位)。
测试结果说明:对于非单位目标效果,可以用无验证器存在的添加行为效果来绑定Marker,这种情况需要将添加行为效果最后添加。

12、#Set1:*Unit1,*Unit2无效。#Set1:*Persistent1,*Unit1当Persistent1的目标为单位时,若没有时段效果、初始效果、结束效果,则无效,若有时段效果Add1,则有效,有效期与时段效果无关。若时段效果为Unit2,则无效。
测试效果说明:依据测试结果来看,创建持续性效果应该类似设置效果,不过效果存在时间不确定。

13、#Set1:*Unit1:Add1,(Set1的设置为目标单位或点)依据技能释放的目标不同结果不同,若为施法创建的单位(匹配施法玩家)则无效,否则有效,有效时对创建单位添加Behavior1。#Set1:*Unit1:*Add1无效,对任意目标都能创建单位,Add1效果没有添加。
测试结果说明:这个测试是有关创建单位附加效果(效果:效果—生成)的。可以参考11条中的内容,创建的单位作为目标再次释放技能时无效。

14、Set:(#Set2:*Add1),(#Set3:*Add2)时,如Set2和Set3链接不同匹配、设置不同,则分别有效,互不影响。若链接相同,则依据匹配项分别处理
测试结果说明:一个效果树的不同分支可以分别进行匹配与验证设置,当父效果无设置时,每个分支间的关系与匹配设置有关。这点类似后面测试中多个技能的情况——每个效果树分支相当于一个技能。

15、Ability1?#Set1:*Add1和Ability2?#Set1:*Add2。当Set1、Set2链接不同时,两技能互不影响,当Set1、Set2链接相同、Add1、Add2链接不同时,互相影响。在Ability1与Ability2相互影响的情况下,二者使用不同的匹配项时依据匹配范围有效,如Set1为匹配玩家,Set2为匹配链接,当以Ability1、Ability2的次序由两个不同的单位向同一目标施放技能时,最终结果的行为层数Behavior1与Behavior2分别为2、0,若次序为Ability2、Ability1,则为1,1。
测试结果说明:这是多技能情况下的比较,设置为非引导,且技能的链接不同。多技能情况下,是否互相影响与设置匹配的效果的链接是否相同有关。

16、Ability1?#Set1:Add1和Ability2?Set1:*Add2。无效。
测试结果说明:不能再多技能情况下一个设置匹配,一个验证。

17、Ability1?#Set1:Set3:*Add1和Ability2?#Set1:*Add2。当Set1、Set2链接不同时,两技能互不影响,当Set1、Set2链接相同、Add1、Add2链接不同时,互相影响。只有Add1、Add2链接不同时,技能互不影响。
测试结果说明:同15,多技能相互影响与设置匹配的效果的链接有关。

18、Ability1?Set1:#Set3:*Add1和Ability2?#Set1:*Add2。当Set1、Set2链接相同与否与技能互相影响无关。当Set2、Set3链接不同时,两技能互不影响。Set2与Set3链接相同时,相互影响。
测试结果说明:同15、17。

19、Ability1?#Set1:#Set3:*Add1和Ability2?#Set1:*Add2。技能是否相互影响仅与Set2和Set3的链接是否相同有关。
测试结果说明:同15、17、18,参考9。

总结:测试的越多反而越混乱了。而且还有很多种情况没有测试。总之这是类似一个字典式的测试,你可以对比需求和本篇的测试结果来设置Marker,也许效果并不是预期的,那么继续研究吧。

        这里的验证器全部是无标记验证器,而你还可以采用比较比较标记计数的验证器,这种情况下,就需要考虑Maker计数的问题了。
        在我个人看来,Marker的验证与行为层数的验证一样,实际上这个计数只是在添加带有验证器的效果时才计算的,依据其效果树中有效的设置了匹配的效果的设置来进行计算,比较计算结果,再返回验证结果。
        悲剧的一点是,貌似我们无法通过脚本等直接输出单位身上的符合某匹配状态的计算的值,只能通过验证器比较计数来推算。

        关于匹配与不匹配设置的关系,在验证时应该是这样的。当目标效果的匹配设置匹配全部匹配选项、不匹配所有不匹配设置时,计数增加标记—计数的值。

        本篇只是参考,我自己对测试结果都没有100%的信心,影响测试结果的可能太多了……


效果测试.SC2Map

13 KB, 下载次数: 21

测试地图

评分

参与人数 1威望 +4 收起 理由
oneonestar + 4 原创奖励

查看全部评分

发表于 2012-5-28 00:10:53 | 显示全部楼层
沙发~~~~~~~
回复

使用道具 举报

发表于 2012-5-28 14:51:04 | 显示全部楼层
先收藏,再看贴
回复

使用道具 举报

发表于 2012-6-9 22:54:05 | 显示全部楼层
看文字头好晕。。。
估计看完图就大概理解了吧。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-8-7 11:22 , Processed in 0.043905 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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