找回密码
 点一下
查看: 1773|回复: 5

Marker资料分享

[复制链接]
发表于 2012-5-5 23:12:09 | 显示全部楼层 |阅读模式
  之前请教了大家关于Marker的一系列问题,对Marker总算有一点了解了,再次感谢大家的帮助!

  我把各位高手对Marker的讲解整理在帖子中了:
  http://bbs.islga.org/read-htm-tid-869789.html

  但头目认为还需要一个明确的教程,让我来写这个东西。头目的命令必须执行,可在下认为自己的水平还没有资格写教程,就决定以资料分享的形式把信息传递给大家,如有谬误之处,还请大家帮忙修正!

1. Marker的定义

  Marker是技能或者效果对被作用单位的一种标记。标记了被作用的单位之后,编辑器就能够知道这个技能/效果已经作用过哪些单位了,哪些单位还没受到这个技能/效果的作用。
  利用这点,我们可以用Marker实现很多效果,比如让医疗兵不重复治疗一个单位;Dota中山岭巨人的山崩技能效果(持续的作用于一个区域,但每个单位只受到一次技能伤害);凤凰“过载”技能的效果等等。

2. Marker的作用原理

  Marker是在技能或者效果作用于单位的时候一起加到单位上的,类似给单位加“行为”的过程,我们先来看看Marker的设置方法:
  在技能/效果数据类型的“效果:标记”字段中,可以设置这个技能/效果的Marker属性(XML用户就不说了,都是高端编辑器使用者),Marker的属性分为这么几个部分:
  1、 MatchFlags、MismatchFlags
  2、 Count
  3、 Link

  ————————————————————————————————————

  然后让我们通过Marker的作用机制来讲解一下这几部分属性的作用(这里的机制可能有谬误的地方,希望大家帮忙指正,我及时修改):

  首先当技能/效果作用于具体单位的时候,Marker会被加到单位上。

  Marker本身是能够计数的,这个记录下来的数值我们称之为这个Marker的“层数”,每次技能/效果作用于同一单位,这个单位上该技能/效果的Marker层数就会增加该技能/效果中Count字段所设置的数值。

  而MatchFlags、MismatchFlags、Link这些字段决定了对于这个技能/效果来说,目标单位身上什么样的Marker的层数会被计算为有效数据,也就是说,这三个字段共同构成了是筛选条件。

  Link可以理解成这个Marker的名称,但各位注意,名称相同并不能代表Marker就是相同的,就像天下有很多叫XXX的人,但两个叫XXX的人并不是同一个人一个道理。

  之后我们来看看筛选条件的具体含义:

  MatchFlags中有4个字段,说明什么样的Marker层数会被计数:

  ID:勾选“ID”代表和当前“技能/效果”所添加的Marker相同ID的Marker的层数会被计数。
  这里需要说明一下Id的意义:只有当两个Marker的“施法者”、“Link值”、“Count值”都相同的情况下,他们的Id才会相同。也就是说Id是类似Marker身份标识的东西,用寒心大大的话来讲,Marker的Id是由施法者、Link、Count三个字段按一定规则生成的。
  举个例子:一个只勾选了“Id”的技能,作用是释放10个A效果,那么符合筛选条件的Marker层数就是10个A效果的Count层数之和。

  Link:勾选“Link”代表着所有Link字段和当前设置的Link字段值相同的Marker层数都会被计数。

  施放玩家:勾选“释放玩家”,如字面意思所有施放玩家和当前Marker施放玩家相同的Marker层数都会被计数。

  进行施法的单位:勾选“进行施法的单位”,如字面意思,所有进行施法的单位和当前Marker施法单位相同的Marker层数都会被计数。

  以上,就是Matchflags四个选项的含义,而Mismatchflags和Matchflags相反,是说什么样的Marker层数不会被计数,他们相组合,共同构成了筛选条件,举个例子:
  Matchflags:Link
  Mismatchflags:Id
  组合起来就是Link和当前Marker的Link相同,但Id不想同的Marker会被计数,治疗(技能就是这么设置的,卡了我很久,主要是不了解Id所代表的意义)。
  ————————————————————————————————————

  上面说的是什么样的Marker层数会被计数,但如果只计数的话,Marker是没有任何作用的,我们通过设置Marker记录了一些值,必须把这些值利用起来才能发挥实际作用,而利用Marker值的最主要、最常用办法就是Marker验证器。

  我们主要说一下Marker验证器的作用机制:Marker验证器首先获得调用它的技能/效果的Marker设置,然后根据这个Marker设置的筛选条件计算出符合条件的值,之后用这个值和自身的条件设置进行比较,确定返回值的真假。

  举例说明:还是刚才“治疗”技能的例子,治疗技能的Marker设置是Link相同但Id不同的Marker层数会被计数,然后治疗技能使用了“无标记”(“noMarker”)验证器,这个验证器中设置的逻辑是“根据技能/效果筛选出来的值为0时验证器返回值为真”,结合起来就是“目标身上Link相同但Id不同的Marker层数之和为0时,验证器返回值为真”。

  综上,验证器是Marker的最主要、最常用的使用方式,验证器只能按照调用它的技能/效果的Marker设置计算负荷条件的值。

  此外再推荐一下星星的Overload技能,这个技能是利用目标身上的Marker数量进行目标排序,实现“发射物在周围有没被攻击的目标时,优先攻击没被攻击目标效果”的,是验证器外的另一种利用Marker的方式,帖子地址:
  http://bbs.islga.org/read-htm-tid-283173.html
  顺便赞一下星星的Gif演示十分之给力!

3. Marker的特性

  上面把我所知的Marker内容基本都讲了,但还有两点比较特殊的地方需要补充说明一下,这两点都是头目强调的:

  第一,Marker在效果树中是有传递性的,举例说明:技能A释放效果B,效果B释放效果C,效果C释放效果D……在上面任意一个效果中如果设置了Marker的话,那么这个环节之下的所有环节都会继承该环节的Marker设置,比如效果B设置了Marker,那么效果CDEFG……都会继承B中的Marker设置。
  技能产生的Marker在技能结束之后会被删除,效果产生的Marker在效果全部消失之后会被删除。

  第二,持续性效果(PersistentEffect)不仅在添加效果的时候会进行Marker验证和计算,效果每次发挥作用的时候都会进行Marker验证和计算,比如设置了Matchflags:Id的一个持续性效果被添加到一个单位上,开始的时候会给这个单位添加一个Marker,此时有效层数是1,之后每次这个效果发挥作用,都会增加1层有效层数,并且会在发挥作用时进行验证器的验证,如果不符合条件了,立刻终止这个持续性效果。

4. Marker的技能实例

  开篇引用的帖子里面提到的技能实例,比如医疗艇的治疗技能、星星制作的Overlord技能、寒心大大推荐的“雷诺狙击”技能,都是研究Marker的好材料。

评分

参与人数 1威望 +8 收起 理由
oneonestar + 8

查看全部评分

 楼主| 发表于 2012-5-5 23:14:38 | 显示全部楼层
被公司发配到国家登山训练中心“培训”了两天,回家打开电脑写Marker,还“惊喜”的发现自己花了700多买的赛锐鼠标坏了,不禁悲从中来…………

大家轻点喷,但有错误请一定指出!

沙发~~
回复

使用道具 举报

发表于 2012-5-5 23:51:04 | 显示全部楼层
排版调整一下就更好了
回复

使用道具 举报

 楼主| 发表于 2012-5-5 23:53:53 | 显示全部楼层

回 oneonestar 的帖子

oneonestar: 排版调整一下就更好了 (2012-05-05 23:51) 
Ok~


这就是传说中的威望吗?!
回复

使用道具 举报

发表于 2012-5-7 14:06:29 | 显示全部楼层
果断收藏
回复

使用道具 举报

发表于 2012-8-29 12:06:56 | 显示全部楼层
很好很好。。。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 15:17 , Processed in 0.141198 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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