一 写在前面
之所以称之为史诗级,是因为WOW中的技能修改可能是对你记忆力,反应速度和大脑灵活程度要求最高的活了。但看完这个可能要占去四五楼的教程后,你应该就可以实现自己的一切技能设计和设想,哪怕是你曾经认为在WOW里根本实现不了的设想。
我了解到这些知识和进行数据解释所花的时间可能比写这篇教程的时间多100倍,而且过程相当痛苦。所以如果你从这篇教程中节约了时间或得到了进步,请记得将这篇文章介绍给需要它的人,甚至是亲自去教,为国内的开发环境做些贡献。
二 修改技能的工具MyDBCEditor
制作或修改技能仅需要操作Spell.dbc这一个文件。通过修改其中的数据可以对技能的所有方面进行操作,所以单说制作技能的话,你只需要一个工具,MyDBCEditor。当然,如果想在客户端得到视觉反馈(显示图标、说明、动画什么的),则还需要将其压入Patch里替掉客户端原来那个。而如果你希望这个技能可以被学习,或是像我这样在角色创建时就拥有,则需要做其他的一些工作,后面我会讲到这些。
Spell.dbc共有234列,每一列都对应着技能某个方面的属性。如果你仅想制作像寒冰箭这种读条,打人身上掉血,触发减速效果,耗蓝,能被反制的技能,只需要其中的10列左右数据。但如果想实现我做的那些所有技能,则至少要用到100列的特性,而且需要制作技能链接才能实现预期的效果。
就是MyDBCEditor的界面,显示的是我所修改过的Spell.dbc。可以发现,这个工具并不会显示每一列的属性(没有任何工具有这个功能),所以在修改之前,你必须自己研究出每一列的作用。听起来有压力吧……好在这个工作我替你完成了。在顶楼里我先介绍一些关键的又比较容易理解的列以为你带来直观的认识,并可以动手开始制作技能。注意一点,因为我修改之前习惯点出软件商的Zero-Based,所以列号是从0开始的(否则是1)。如果你在实际操作中发现列号和我说的对不上,请先看一下是否勾选了Zero-Based这个选项。
三 最重要的一些列的说明
第0列:技能的唯一ID(ID)。不要和其他技能设一样的ID数值,也不要随便乱设,最好从一个好记的位置开始逐1增加,否则会让你后期的管理痛不欲生。未来人物、物品、套装特效等一切都是靠这个ID来链接技能的。
第2列:技能的驱散类型(DispelType)。比如说,你希望一个持续魔法伤害技能可以被法师的解除诅咒技能解掉,那么这里就要设定为诅咒。如果你希望一个BUFF可以令战士的狂暴回复变为可用,就要设定为激怒。比如在艾泽拉斯的遗产中术士的【毁灭之拥】特效在驱散前会判断目标身上的BUFF是否属于魔法或激怒,如果这些技能在此列中有魔法或激怒的标识,就会被驱散掉,反之则不会产生效果。这一列共有12种类型。
第3列:技能的机制效果(Mechanic),如变身,定身,恐惧,昏迷等。比如你希望自己做的技能在敌人身上触发DEBUFF后让他昏迷,这里就要设置成昏迷;如果希望造成减速,那么就要设置成减速。这一列共有32种效果类型。
第4-11列:技能的主要属性(Attributes),包括【主动/被动】的指示,是否需要近战武器,是否可以在坐骑上使用,能不能自己点掉,无法招架躲闪(如压制这种)等等。
第28列:施法时间索引(CastingTimeIndex),这将决定放出法术前所需要的读条时间。之所以称之为索引,是因这里不能直接写上时间,而需要引用SpellCastTimes.dbc中的时间设置。当然,如果这里面没有你想要的时间长度,也可以自己添加新的。
第40列:持续时间索引(DurationIndex)。这一列决定了此技能将持续多长时间(废话),需要注意的是此列需要的也是索引值,对应着SpellDuration.dbc中的时间设置。
第68列:施放技能所需要的前提条件(EquippedItemClass),如需要武器或护甲或其他什么东西等。先提到这个是因为这一条很容易被初学者所忽略,如果你希望无论何种情况都能放出技能,记得把68列设置为-1。
第71-73列:技能的效果(Effect_1)。这是第一个需要你仔细了解的列,它是技能属性设置的主要入口,将决定技能是否拥有如造成伤害、令目标移动、召唤生物、提高技能、获得经验值、镶嵌雕文等等一切魔兽世界中存在的技能效果,共有166种。
第74-76列:技能效果的数值浮动区间(EffectDieSides)。大多数的技能效果都对应着一个数值或数值区间,比如降低75%伤害的盾墙,它的主要数值就是75。造成100点伤害的寒冰箭,主要数值就是100。闪避几率提高50%,数值是50%,移动速度提高20%,数值是20,等等等等。而浮动区间就是这个数值变化的区间,比如说法师的1级寒冰箭造成18-22点伤害,那么它的基础数值就是17,浮动数值是1-5(后面我会说明为什么不是基础18浮动0-4)。同理,假如你把盾墙的基础数值改为20,浮动数值改为30,那么盾墙的效果将变成降低20%-50%的伤害,而不再是固定的减伤效果。
第77-79列:技能效果每等级提升的数值(EffectRealPointsPerLevel)。艾泽拉斯的遗产中很多“每等级额外提升xxx点”的效果就是靠修改这一列实现的。要注意的是这一列只能输入整数,所以无法靠这个实现如“每等级增加0.5%生命值”一类的效果。
第80-82列:技能效果的基础数值(EffectBasePoints)。基础伤害1 实际伤害下限=基础伤害1+ 基础伤害2 + 每级提高伤害值*人物 不用于光环类技能。
第86-88列:技能施放的目标(ImplicitTargetA)。如果设置为自己(以及类型改为BUFF),触发时就会在自己身上加BUFF,如果设置为小队,使用时会让你选择队友,如果设置为敌人,则会丢掉敌人身上。此列一共有46种目标类型,包括暴风雪和冰锥术这一类的无目标范围也在其中进行设置。
第95-97列:技能效果光环(EffectAura),主要用于操作BUFF和DEBUFF的属性(需要在71-73列中指明BUFF属性),是应用最广泛的特性。比如我希望做一个增加25%法术伤害的BUFF,那么就需要在这里指明“法术伤害”,如果我希望做一个免疫一切伤害的盾,就要在这里指明“免疫伤害”,等等。这一列共有286种光环效果,但实际情况远比这286种复杂得多。比如说我想制作一个每3点智力转化为1点法术强度和2点攻击强度的BUFF,单靠这一列是没法做出来的,还需要其他列来提供更多的参数。这个放到后面讲。
第131列:技能的视觉效果(SpellVisualID)。
第133列:技能图标(SpellIconID)。
第136-151列:技能名称(Name_Lang_enUS)(这么多列是为了照顾多语言版本,我们做的时候写第一列就可以了)。
第153-168列:技能等级(NameSubtext_Lang_enUS)。就是技能名称下方的灰字,包括“等级1”,“被动”,“种族特长”等等。我在艾泽拉斯的遗产中写在各职业特长下的“XXX特长”就是写在这里实现的。
第170-185列:技能的说明(Description_Lang_enUS),就是鼠标移上去白色技能名称下的黄字介绍。在这一列中通过引用设置的数据可以让系统自行计算效果数值并显示出来,后面会说到这一方法。
第187-202列:BUFF/DEBUFF上的说明(AuraDescription_Lang_enUS)。要弄明白这和上面那个不是同一类说明。仍以寒冰箭为例,寒冰箭的介绍为“对目标造成xxx点冰霜伤害并使其减速40%”,而当寒冰箭打到人身上的DEBUFF上则显示的是“移动速度降低40%”。这一列就是后面这种说明。
每个技能(每行数据)可以设置三个效果,这就是上面几个特性都有三列的原因。这其中71-74-77-80-86-95是相关的,72-75-78-81-76-96是相关的,73-76-79-82-88-97是相关的,彼此互不影响。以寒冰箭为例,它一方面会造成冰霜伤害,另一方面要造成减速,而这两种效果彼此间是没什么关联的,所以就要分开写。
四 制作一个 邪魔之箭 技能的实例
4.1 技能说明
知道了这些列的作用,你就可以着手制作自己的技能了。下面就做一个技能实例来进行进一步的讲解,在这个过程中你将能得知上述列中所有的参数含义。
嗯,随便想一个结构比较简单又比较好测试的,那么就做个这样的:
邪魔之箭:30码施法距离,消耗50%基础法力值,3秒施法时间,对目标造成566-796点暗影伤害,每等级提高20点伤害并受到50%的法伤加成,成功命中目标将使其昏迷,并且承受的伤害提高100%,持续2秒。
在操刀开始处理DBC之前,你要先理解自己做的这个技能效果的结构,这样才能更快地实现。以上面这个技能来说,效果分为3部分:
1. 对目标造成暗影伤害。
2. 令目标昏迷,持续2秒。
3. 令目标承受伤害提高100%,持续2秒。
而这三部分的实现方法都不一样。其中造成暗影伤害属于法术效果中的伤害类型(71-73列),昏迷属于机制效果中的昏迷(3列),承受伤害属于DEBUFF效果中的承受伤害增加(95-97列),你必须首先整理好这些逻辑才能准确无误地编辑DBC中的相关内容。
4.2 复制原来的一个技能
首先,右键点击MyDBCEditor中的任意位置,选择Insert Line…插入新行,注意这里的数值一定不要和之前已有的ID相同。我设了90063(右键菜单截不了图,理解下)。
拖到140列的位置,写上“邪能之箭”,这是技能的名称(前面那个邪能之箭xxx中国是显示错误,不会对数据产生影响)。如果你的操作不是特别熟练,强烈推荐你先写这一列,会减少很多误操作的可能。
4.3 实现昏迷效果
我们希望技能在打到人的时候可以令目标昏迷,那么第3列就改为12,这个数字对应着昏迷效果。其他的效果和对应的数字为:
0-无效果 1-魅惑 2-迷惑(如致盲) 3-缴械 4-扰乱 5-恐惧 6-束缚 7-缠绕 8-平静 9-沉默 10-催眠
11-诱捕 12-昏迷 13-冰冻 14-击倒 15-流血 16-绷带 17-变形 18-放逐 19-盾 20-禁锢 21-坐骑
22-感染 23-转身 24-恐慌 25-无敌 26-打断 27-眩晕 28-探索(如发现新配方这种) 29-无敌类护盾(圣盾术/冰箱,etc)
30-瘫痪(如闷棍) 31-激怒
4.4 让这个技能可以在技能栏点响应鼠标
然后我们需要将它的属性改为“技能”,这样你就可以拖到技能栏里并点着它用了。在第4列将数值改为0x10,代表着这是一个技能。
0xxxx这种数字都是16进制的,最大的好处是可以通过1个数字直观地代表多种效果的集合,如0x16420(91168)就等于
0x10000(65536)+0x4000(16384)+0x2000(8192)+0x400(1024)+0x20(32),
那么这个数字就代表了这5种效果。当然如果你从未接触过16进制运算可能目前感觉会不大好,但当你熟练之后这些都可以一眼看出来,不用担心。回到主题上,第4列中经常用到的参数如下:
0x2 = 远程技能标识
0x4 = 下一次主手攻击触发(如英勇打击)
0x10 = 是技能
0x40 = 被动法术
0x400 = 下一次副手攻击触发
0x8000 = 只能在户外施放
0x10000 = 变形时无法施放
0x20000 = 需要潜行(如偷袭和伏击)
0x200000 = 不可招架/躲闪/格挡(如压制)
0x800000 = 死亡时可以施放
0x1000000 = 在坐骑上可以使用
0x10000000 = 战斗状态中无法使用(如各种食物饮料)
0x80000000 = 不能取消的增益效果(如德莱尼的种族天赋英勇灵气)
比如说,你要做一个伏击的升级版,无法招架躲闪(0x200000),需要潜行(0x20000),同时它还是个技能(0x10),那么在第4列里写0x220010就能同时做出这三种标识。
另外我们要将19列从0改为1,因为我们不希望这个技能可以背对着目标施放,那就太不真实了。
4.5 修改技能的持续时间索引
这个技能打到人将触发昏迷效果,持续2秒。这个2秒就是技能的持续时间(40列)。但要注意你不能在40列里写上个2或2000(毫秒)了事,而需要把SpellDuration.dbc里对应2秒的那个索引值写上。这个操作有点复杂,我慢慢说下:
首先你要打开SpellDuration.dbc这个文件。你可以在服务器根目录/服务端核心目录/dbc下找到这个文件。
然后找到1、3列都是2000的那一行(重申:如果这其中没有你想要的数值,可以自己添加,但不要删掉原来的)。
可以看到这一行的ID是0x27,对应十进制中的39,把39这个数写到技能的第40列里,那么现在就意味着技能将造成2秒钟的昏迷效果。
以同样的方法修改46列,这一列代表着施法距离。查询SpellRange.dbc,找到0-30码那一行,ID是9,把9写到46里,技能的施法距离就变成30码了。
4.6 真正的技能效果修改地方
这些改完之后就可以直接拖到71列,开始设置技能效果。上面说过71-73列共有166种效果,但常用的不到1/5。想了想还是不要在这长篇大论地贴数据了,容易吓到小朋友吧……这里只介绍3个,就可以满足你的绝大都数需求,其他的可以在未来发表的手册里查到(还没开始写)。
2 = 造成伤害
6 = 给设定目标添加光环(BUFF/DEBUFF)效果
10 = 造成治疗效果
除去昏迷,还剩下造成伤害和使目标承受伤害提高两个效果,我们这里使用71列和72列,73列就不用了。
71列数值写入2,意味着这个法术将造成伤害。
72列写入6,意味着这个法术将施放一个光环(BUFF/DEBUFF)效果。
然后修改74列和75列,这是效果的数值浮动区间。伤害的浮动区间是796-566=230,那么就在74列里写上230。受到伤害提高20%没有浮动,那么就写上1。上面说过,浮动值尽量不要写0,不然会导致一些显示问题甚至是错误,如果没有浮动,就写为1。
77-79是每等级提升的数值。这么强力的法术随着施法者等级增加而增加伤害看起来不错,但使敌人易伤的效果就不要加了。比如说我想每升一级伤害就提高20,易伤效果数值不变,那么就把77改为20,78仍写作0。
80-82是效果的基础数值。伤害的最低值是566,那么基础就是566,不能更低了。易伤效果数值是固定的20,那么为了达到20%的效果,基础就写上19,加上浮动的1正好是20。
86-88是可施放的目标类型。我们当然不希望对盟友造成伤害或DEBUFF,那么就在86和87列里写入6,意味着当前选定的可攻击目标。介绍这其中常用的参数:
1-自己
2-附近的敌人
3-附近的队友
4-附近的团队成员
5-宠物
6-选定敌人
8-敌人的目标(也就是以前治疗们常打交道的“目标的目标”)
16-以敌方目标为中心的环形区域
21-所有队友
22-以自己为中心的环形区域
24-正前方锥形区域
25-随机目标
32-仆从
41-自身左前方
42-自身左后方
43-自身右后方
44-自身右前方
45-链式效果(如治疗链和闪电链)
92-94列决定法术效果的生效范围。比如说现在你希望邪能箭打到目标的同时对他周围20码的所有单位造成伤害,那么除了上面要改成16,这里也要改成20。但如果仅是本教程中要实现的效果,则保持生效范围为0(重合的距离)即可正常生效。
4.7 光环(BUFF/DEBUFF)效果
95-97列是光环效果。伤害不属于光环效果所以无需改动,使承受伤害提高20%对应着数字87,所以96列填入87,意味着中了这个DEBUFF,承受的某些伤害就会提高。
光环效果一共有286种,参数都贴在这可能字数就超了,最后补上。
98-100列是光环的持续时间,我们希望易伤效果持续2秒,那么就在99列(注意不是98!)里写入2000(毫秒)。
110-112列和113-115对应着71-73和95-98的效果参数。这个容易让人糊涂,我举个例子。
比如说现在要做一个“每1点智力增加1点火焰法术伤害”的效果,这其中“每点x属性增加n点x类型伤害”的效果在95-97列中编号为174,而x类型伤害的伤害类型(火焰/冰霜/物理,etc)属于效果的第一参数,需要在110-112列中指明,每点x属性的属性类型(耐力/敏捷/精神,etc)属于效果的第二参数,需在在113-115列中指明。不是每种法术效果都需要这些参数,其实绝大多数都不需要。但如果碰上需要写参数的,要记得这个别忘记写,不然你的法术可能看上去没问题但效果和你预想的完全不一样。
回到主题。96列的87对应着承受某些类型伤害提高,则需要我们在111列中指明伤害类型。类型代码如下:
1 = 物理伤害
2 = 神圣伤害
4 = 火焰伤害
8 = 自然伤害
16 = 冰霜伤害
32 = 暗影伤害
这和上面的十六进制标识的机制一样,比如说你希望指明火焰+自然+暗影,则数值就是4+8+32=44。
在这里我们希望目标承受所有类型的伤害都会提高,那么就把所有的数值相加,和为127,写入111列。
4.8 技能动画效果及图标
接下去我们要在131-132列中为法术指定动画效果。以前曾有过查询动画ID的工具不过被我弄丢了(当时还啥也不懂),那么现在就简单地COPY来术士混乱箭的动画,那个蛮帅的吧。于是我们要先找到混乱箭的动画ID。
在MyDBCEditor中选择140列(技能名称),点击菜单栏的Edit -> Search Column,在文本框中输入“混乱箭”,点OK。
如果问你未找到结果是否重头开始找,点确认,就会找到术士的混乱箭技能。
可以看到混乱箭的131列数值为11240,这就是它的视觉效果,COPY下来,放到我们技能中的131列中。
133是技能图标ID。如何找到你想要的图标ID可以参考我上个帖子的资源页中的WOW图标一栏,你也需要那些东西来查找图标。我这里图省事用毁灭之拥的图标了,黄黄的恶魔脸,ID3173。
4.9 技能详细说明
然后我们来为技能添加说明文本。这里有一系列可以代表特定效果数值的字符串,最常用的就是$sn、$tn和$dn,分别对应着效果数值、效果触发间隔和效果持续时间。要注意的是,$t输出时是不带单位的,而$d带了单位,所以在介绍类似于“每2秒触发一次,持续6秒”这种说明中,要写作“每$t1秒触发一次,持续$d”。
我们在174列中添加如下文本:
“对目标造成$s1点暗影伤害,并令其昏迷,且承受的所有类型伤害提高$s2%,持续$d。”
这样在你修改效果数值时就不用去改说明文字了,它们会自动更新为正确的数值。
在191列中,我们写入DEBUFF上的说明文本:
“昏迷,受到伤害提高。”(注意这里不支持上面那种替换数值的字符串)
还记得我们想要这个技能造成暗影伤害吗?在225列中进行设置。暗影伤害对应的数值是32(上面说过),那么就把225列修改为32。
4.10 进一步修改
到这一步,技能就可以使用了。但有一些细节方面的重要问题我要留到这里说一下。
其一,技能是否应该受法伤或AP加成?
其二,技能在被沉默时应该阻止其施放吗?
其三,技能是否应该触发公共CD?
其四,技能是否应该消耗法力值,如果应该,消耗多少合适?
这是新人在设计技能时最容易忽视的问题。而如果不考虑这些设定,你的技能无论实现得多么巧妙,功能多么强大,都很有可能会破坏掉你的设计初衷。所以在这里我们最后处理一下这些问题。
其一,我们的技能应该受法伤加成,因为它就是给法系职业用的,法伤越高,伤害就越高。229-231对应着法伤加成比例,我们将229列的数值改为0.5,意为每点法伤将提高技能0.5点暗影伤害。
其二,在被沉默时应该阻止施放技能,因为它是个没有CD而且拥有强大控制能力的法术,如果不能通过断法来阻止其施放,那么仅靠这一个技能就能击败所有对手。我们将214列的数值由0改为1,则当施法者被沉默时便无法施放这个技能。
其三,技能应该触发公共CD,而且因为技能过于强大,施放它时要触发更长的公共CD来进行恢复。要注意公共CD的实现方法:206列控制着技能的“同类冷却时间”,205控制着技能的“冷却类型”,比如战士的致死打击和嗜血这两个技能,无论你用哪个另一个都会进入CD,那么它们就属于同一个“冷却类型”,也就是说205列的数值是一样的。了解这些修改便很简单了。公共CD我们设置为5秒,换算为毫秒为5000,写入206列。公共CD的冷却类型ID为133,写入205中。如此施放这个技能时就会触发公共冷却,令所有技能都进入5秒的冷却时间。
其四,它应该消耗一定的法力值,不然它就可以无限放了。而且考虑到技能的属性非常强力,我们要让它多耗一点蓝,比如说50%的基础法力值。204列控制着技能消耗的基础法力值比例,将其改为50,意味着放一次技能将消耗50%的基础法力值。
至此这个技能就全部完成了。我们实现了一个这样的技能:
能造成一个区间数值的暗影伤害。
伤害值受等级和法伤加成影响。
击中目标时将令目标昏迷2秒。
击中目标时将令目标承受伤害提高20%,持续2秒。
有很帅的视觉效果。
沉默时不能释放。
会消耗大量的法力值。
会触发1.5秒的公共CD。
五 客户端打包
下一步我将教你如何将技能实装于服务端,并在客户端中正确显示。
别准备休息,因为这个技能目前存在着大量的问题,而这些问题都是你在制作过程中无法全都注意到的。在制作这个技能时我有意无意地遗漏了很多步骤,这致使技能必然无法达到我们想要的效果。但到底哪里没做好呢?在实装前谁都不知道。那么我们现在就开始实装吧。
1. 点击MyDBCEditor菜单栏上的File -> Save保存DBC文档。
2. 把你制作的Spell.dbc拷贝到服务端的dbc目录中,覆盖同名文件。
3. 重启服务器,完成。
现在服务器已经接受了这个新的技能,但你无法在客户端中看到或使用它,而且如果其他人用这个技能打你,你也完全看不到,只会干看着自己掉血。想要让自己可以用这个技能且能看到法术动画,我们需要制作一个客户端补丁。
制作补丁需要用到新的工具:MPQEditor2。这个工具在我的上个帖子中的资源下载部分有提供。
1. 打开MPQEditor,点击新建。
2. 输入正确的MPQ名称。格式为patch-[zhCN/enCN/zhTW/enTW/enUS]-x.MPQ,MPQ必须为大写。
中括号中的字符由你的客户端类型决定。如果你用的是中文语音的简体中文客户端,则为zhCN,如果是英文语音的中文简体客户端,则应是enCN。具体的对应关系如下:
中文语音,中文简体 – zhCN
英文语音,中文简体 – enCN
中文语音,中文繁体 – zhTW
英文语音,中文繁体 – enTW
英文语音,美服英文 – enUS
我使用的是英文配音的中文简体客户端,所以我选择的字符串就是enCN。
x必须不同于目前你所使用的所有同类补丁的编号。要查看这些编号,请打开客户端文件夹,定位Data -> enCN(英文语音简体中文)。
可以看到我的patch最大序号是6,那么新建的MPQ文档的文件名就应该是这样:
patch-enCN-7.MPQ
点击下一步,选择新建空MPQ文档。
hash表大小无需改动,点击下一步。
勾选“在MPQ文档中创建‘属性’文件”,点击下一步。
点击完成。
客户端原版Spell.dbc位于一个名为DBFilesClient的文件夹中,我们需要先建立这个文件夹。
右键点击左上角的patch-enCN-7.MPQ文件夹图标,选择新建文件夹,在对话框中输入DBFilesClient。
然后右键点击左上角的DBFilesClient,选择添加文件,并在弹出窗口中选择你刚才制作的Spell.dbc文件,确认。
工具会开始制作MPQ文档,大概需要5-10秒的时间,请耐心等待。成功后右侧的窗口将显示这个Spell.dbc文件。
选择菜单栏的操作 -> 压缩文档来压缩一下文件的体积。
到目前客户端补丁已经制作完成,它包含了在客户端正确显示所需要的一切数据,默认放置在MPQEditor.exe同一个文件夹中,如果你没改过路径的话。
将新制作的patch-enCN-7.MPQ复制到客户端根目录/Data/enCN(根据你使用的版本选择文件夹)。
至此服务端和客户端都可以正确识别这个技能了。我们登陆游戏测试一下。记得每次测试前都要重启服务端的worldserver.exe,最好也删掉客户端的Cache文件夹以达到最佳的测试效果。
使用60级的术士,伤害应该为60*20+65(法伤)*0.5+(566~796)= 1798.5~2028.5,伤害正确。
技能说明正确(多那1点无所谓啦,而且你已经知道怎么改了),图标正确,视觉效果正确,成功触发5秒公共CD。
六 最后的几个问题
6.1 技能为什么是瞬发的?
不过技能怎么是瞬发的?而且显示射程10-30码?而且根本就没有触发昏迷和DEBUFF效果!难道这几个小时都白折腾了吗?
首先可以确认我们的思路和制作方法一直都没有错,只是忽略或搞错了这些相关的步骤。在遇到这些问题时,我们只需要找到它们所对应的条目去检视,一般都可以立即发现问题所在。
第一,技能原本应该读条3秒的,但这里是瞬发。有印象我们设置过施法时间吗?没有吧。那么这就是一个疏忽。之前提到过,28列控制着技能的施法时间,看看目前数值是多少——0。怪不得没有施法时间。
和施法距离与持续时间相同,需要为28列提供的数值也是一个索引,对应表为SpellCastTimes.dbc。(如果你在服务端找不到这个文件,则需要从客户端中解压。施法时间判定都是在服务端进行的[暴雪的设计漏洞],目前服务端不需要这个文件)
我们希望技能有3秒钟的施法时间,则应该找1列和3列为3000的那一行,ID为14。于是将14写入Spell.dbc的28列中,这样技能就需要3秒施法才能放出来。
6.2 施法距离不对?
第二个问题,施法距离错误。这明显不是猎人的技能,贴着脸都应该可以放,所以施法距离应当是0-30码而不是10-30码。那么查找SpellRange.dbc,找到1/2列为0,3/4列为30的条目,ID为4。将Spell.dbc中的46列改为4。
6.3 没有触发DEBUFF?
第三个问题,没有触发DEBUFF。这是我之前最容易忽视的问题——设置效果触发几率。
35列控制着技能特效的生效几率,如果写入20则意味着每次命中有20%几率触发,写入0则意味着永远不会触发,而写入100以上的数值则意味着每次都会触发。看看我们现在写的是多少——0。
我们希望每次击中目标都可以触发DEBUFF,所以就在这里写上101,比100%感觉还要稳妥不是嘛。
好!似乎我们已经把问题全都解决了。是这样吗?测试之前谁都不知道……那我们重复之前的步骤,更新服务端和客户端的dbc文件,重新测试一下吧。
技能有了施法时间(数不改了,你们知道怎么操作就行了),攻击目标也有了2秒钟的DEBUFF。是不是可以收工了?
6.4 技能竟然没有弹道?
啊,技能竟然没有弹道!施法时竟然还可以移动!而且在DEBUFF持续时间内敌人应该是晕迷着才对啊,怎么还跑得这么欢呢?是的,我们还疏忽了很多设置,下面一一解决。
第一,这个技能我们希望它像寒冰箭一样在出手后有一段在空中飞行的时间,而不是像灼烧一样读完条就打到别人身上了。控制这一特性的设置在47列,数值越大飞行得越慢。这一列需要的不是索引值,但具体效果我也不是很确定,大致的意思就是需要多长时间飞过固定的一段距离,从而计算出飞行速度。这里我们就设置一个和寒冰箭一样的速度吧,在47列中写上35。
6.5 技能竟然可以移动施放?
其二,我们不喜欢这个技能可以移动施放,更不能跳着放了,那么就要给技能加上打断标记,指明技能在什么情况下会被打断。控制这一设置的是31列。啊……记标记值的那张纸找不到了,那我们就把寒冰箭的抄过来先用着。其实在写技能标记时,与其自己去算标记数值,更好的方式是找到与这个技能机制相同的技能,然后抄过来相关设置,这样还不容易出错。
寒冰箭的31列数值为——15。那么我们把31列改成15。
6.6 没有触发昏迷效果?
其三,没有触发昏迷效果。这是一个特效实现机制的问题,也是新手较难理解的地方。当然,如果你已经做到这里,那么这些内容对你而言就很好理解了。我们在第3列里指明了昏迷(12),而且也设置了持续时间(28列),同时也看到了DEBUFF,但实际上这个效果根本没有触发。
第3列的昏迷仅是效果的说明,我们写入12是告诉系统这是一个会造成“昏迷”效果的技能,如果玩家此时有“免疫昏迷”的状态,那么就可以免疫掉相应的控制,而且也只有带上昏迷的标记才会触发控制递减(这个是必须要有的)。但它只是一个指示,没有实际效果。要触发实际效果,我们仍需要像写入受到伤害提高的DEBUFF一样在71-73列、80-82列、86-88列、95-97列中做出相应设置。如果你成功做出了DEBUFF效果,那这个就很简单了。
现在还有1个效果栏位,对应列为73、82、88和97。我们接下去就将昏迷效果写入这些列中。
73列写入6,因为这是一个DEBUFF效果。
76-82无需改动,因为这个效果并不需要数值参数。
88列写入6,敌方目标。
97列写入12,触发昏迷效果。
100列写入2000,触发昏迷效果的持续时间。
第二次测试所发现的问题都解决了。那么这个技能完成了吗?测试一下吧。
弹道效果出现了。
当移动时施法会被打断。
怪物在被击中时会昏迷。
至今我们之前设想的一切设计都实现了。但它是否已经完美地达到了我们预想的水平?还没有。
6.7 技能施放失败也触发公共CD?
比如说,现在技能只要开始读条就会进入公共冷却,但法系技能明显应该出手后再冷却,否则一旦技能施放失败,就会进入5秒比被沉默还要惨的状态,这不是我们的本意吧。所以我们应该将它修改为:如果技能施放失败,则立即清除当前公共CD(大多数法系技能都是这样)。
这就需要在第4列额外加一个标记0x2000000,意味着只有在成功施法后才继续转CD,如果技能打断则会清除。因为原本我们已经写了个0x10,相加则为0x2000010,写入第4列。
另外,因为混乱箭的动画效果中不包括持续性的那部分,所以无法显示出DEBUFF的状态,我们也无法直观地看出怪物被晕了。所以我们应该让被技能打晕的目标头上出现一个昏迷的动画。但这就需要修改其他的dbc文件,而这有些超出本教程的内容范围,所以未来再做这方面的讲解吧。
这就是今天技能教程的全部内容了。如果你制作出了本文所描述的自定义技能,那么你已经对技能制作流程有了较为系统和深入的了解,可以通过尝试逐步提升自己的制作能力。
如果你看得头大完全不明白也很正常。这部分是WOW自定义中最复杂和难以理解的内容(比AI制作还要难以彻底理解),你需要进行大量的尝试才能随心所欲地实现自己的一切想法。所以如果看晕了也不要灰心,只要你付出努力,假以时日就能掌握这门非常实用的技术。
希望你喜欢这篇教程,祝你好运!
参考资料:https://zhuanlan.zhihu.com/p/567182689
http://www.mangoscn.com/forum.php?mod=viewthread&tid=134232