admin 发表于 2018-5-8 20:06:39

SkillDesc.txt文件介绍

By Ric Faith

前言:
SkillDesc是制作技能过程中的重要部分,它使Mod制作者可以用完全个性化的风格来描述其制作的技能,并且控制着各种技能在技能树上的位置及排列方式
本文件会用到的文件有:
Missiles.txt
MonStats.txt
Skills.txt
以及几个TBL文件:
String.tbl
ExpansionString.tbl
PatchString.tbl
注意:使用优先级顺序为PatchString > ExpansionString > String
也就是说同ID情况下,游戏将优先显示PatchString中的内容,其次为ExpansionString,再次为String,因此要想找出最新的字符串,应该按照以上的数据顺序进行检索

一些习惯称谓:
为了简化该引导文件并且使描述变得清晰,这里先介绍一些描述时会用到的习惯称谓:
字串:指任何TBL文件中的内容
技能树/技能页:各角色所使用的技能树
技能菜单:按下S键时显示的技能列表
人物状态栏:按下C键时显示的状态栏
选中的技能:设置为鼠标键的两个技能

SkillDesc:技能描述所对应的技能,引自Skills.txt里的技能名称

SkillPage:允许的取值范围是0-3,技能所在的技能页数,0 = 不在技能树上,1 = 底端的技能页,2 = 中间的技能页,3 = 顶端的技能页

SkillRow:允许的取值范围是0-6,技能在技能树上所在的行数,0 = 不在技能树上,1 = 顶行,6 = 底行,中间依次排列

SkillColumn:允许的取值范围是0-3,技能在技能树上所在的列数,0 = 不在技能树上,1 = 左边一列,2 = 中间,3 = 右边一列

ListRow:允许的取值范围是-1到4,技能显示在技能菜单里的行数,-1及其他值 = 不显示在技能菜单里,0 = 最底部一行,与普通攻击、反召唤等一起,1-3 = 从底部往上依次排列的三行,通常和SkillPage列的值相同,但不是必须,4 = 最顶上一行,与辨识、城镇传送等一起

ListPool:允许的取值范围为0-2,仅用于辨识卷轴和城镇传送卷轴,0 = 所有其他技能,1 = 辨识卷轴,2 = 城镇传送卷轴

IconCel:允许的取值范围为0-X(自定义);定义该技能所使用的技能图标(两个,一个是该技能可用时的图标,另一个是该技能不可用时的图标),这里填写的值是可用时的图标,加一则代表不可用时的图标;技能图标常常是成对使用的,因此制作自己的技能图标时,务必要将其按照正确的顺序放置;
如果某技能是角色使用的技能,则其图标来自:
Data\global\ui\spells\XXskillicon.dc6,这里的XX代表角色类型:
XX      角色类型
Am      亚马逊
As      刺客
Ba      野蛮人
Dr      德鲁伊
Ne      死灵法师
Pa      圣骑士
So      法师
如果某技能并非角色技能,则其图标来自:
Data\global\ui\spells\skillicon.dc6

Str Name:技能名称字串,用于技能树、技能菜单及选中的技能
Str Short:技能描述字串,用于技能菜单及选中的技能
Str Long:技能描述字串,用于技能树
Str Alt:技能名称字串,用于角色状态栏
Str Mana:通常填入StrSkill3或者留空;即使某技能并不耗费法力,这里的字串也不会显示法力耗费值为0;StrSkill3会显示“法力耗费:”字样,你也可以填入其他表达法力耗费含义的字串;唯一的例外是,德鲁伊的乌鸦技能有其独有的字串:“每只乌鸦消耗法力:”

DescDam:允许的取值范围为1-24或者留空;用于技能描述里的伤害计算,以下是一个关于DescDam取不同值的列表:
DescDam                描述
1      普通攻击
2      踢击
3      投掷
4      左手投掷
5      按照技能实际伤害值
6      带爆裂箭矢的技能
7      同时增加伤害和命中率的技能
8      地狱火类型的伤害
9      炽烈之径,火风暴等
10      盾击
11      复仇
12      祝福之锤
13      双手投掷
14      饥饿
15      连续踢击
16      面杀伤踢击
17      充能一击
18      凤凰攻击
19      双手武器攻击技能
20      刺客的聚气技能
21      闪电球
22      带爆裂效果的标枪
23      狂犬病
24      刃之怒
有些技能有其特殊的伤害描述,因此你需要从以上列表中找到一个和你的技能效果最相似的技能,并找出它们的不同之处;否则一般来说都使用5

DDam Calc1,DDam Calc2:对于会增加伤害的技能,需要使用这两列来计算其具体伤害,最终的伤害通过以下公式给出:
最终伤害 = 初始伤害 * (100 + DDam Calc1)/100 + DDam Calc2
于是,如果技能有能够百分比增强伤害的因子,则填入DDam Calc1,如果有能够按数值增加伤害的因子,则填入DDam Calc2

PXDmElem,PXDmMin,PXDmMax(这里的X代表1-3):仅用于刺客的聚气技能描述:
PXDmElem = 该聚气的元素伤害类型
PXDmMin = 该聚气的最小伤害值
PXDmMax = 该聚气的最大伤害值

DescAtt:允许的取值范围为1-5,或者留空,用于描述技能的准确率增量,列表如下:
DescAtt      描述
1      增加攻击准确率
2      增加攻击准确率
3      投掷
4      左手投掷
5      最后一击施展的踢击
这里的1和2没有差别;你应该从以上列表中找到一个最适合自己技能的值

DescMissileX(这里的X代表1-3):如果该技能的伤害、持续时间及其他数值全部取自其发射的飞射物,那么DescMissile1中应该填写主要飞射物的ID;DescMissile2-3目前仅用于刺客的聚气技能,不过也可以在其他技能的这两列里填写其他的飞射物

下面是整个文件中最繁琐的部分,这里不按文件中的顺序介绍,否则会非常罗嗦
文件中有三个主要的描述段,Desc,Dsc1和Dsc2;首先按照它们显示的地方不同来给这三个描述段分类:
Desc:显示在技能树、技能菜单和选中的技能上
Dsc1:显示在技能树、技能菜单和选中的技能上
Dsc2:显示在技能树上
接下来,它们显示内容也有所不同:
在技能菜单和选中的技能上:Desc和Dsc2仅显示当前等级的技能状态
在技能树上:
Desc显示当前等级和下一等级的技能状态
Dsc2显示当前技能状态
Dsc3显示当前技能状态(目前被用来显示技能加成)
更多关于技能状态显示的内容,请参考附录A

我们将以下的列分组,每一组都由DescLine,DescTextA,DescTextB,DescCalcA,DescCalcB五列搭配以不同的数字组成;任何一个空白的组列将被游戏无视,因此你可以将要填写的内容填入任何一个列组里,其余的会自动跳过
现在我们以其中一组为例来介绍各列的功能,其他同理
DescLine:允许的取值范围是1-75,或者留空,这里定义了技能描述的格式,包括取哪些数值以及如何排列这些数值和文字;详细情况请看后面的例子,所有DescLine取值的用法详见附录B

DescTextA,DescTextB:可填充或者留空的字串,有些DescLine取值是不会加载这里填写的内容的,我们应当选用最接近需求的DescLine取值来决定是否在此填入字串

DescCalcA,DescCalcB:可填充数值或表达式,或者留空;与前面两列相同,因此应当在选用适当的DescLine取值之后再来考虑这里

附录B及以下例子中使用以下标示符:
S1 & S2分别表示DescTextA和DescTextB的值,S意为字串
C1 & C2分别表示DescCalcA和DescCalcB的值,C意为计算式

例一:
DescLine = 3的格式为S1C1S2
现定义:
S1 = Good
S2 = Nothing
C1 = 4
C2 = 365
则最终显示结果将是Good4Nothing,中间没有空格,因为这里只是简单的把许多字符串连接在一起,C2不出现在该格式中,因此不显示
如果S1留空,则结果是4Nothing
如果S2留空,则结果是Good4
如果C1留空,则结果是GoodNothing

让我们来看一些复杂点的例子
例二:
有些DescLine的取值不需要字串或计算式,这里是一个关于毒素伤害的例子:
DescLine = 14的格式为:
毒素伤害:X-Y
持续Z秒
这里的DescLine出现了两行显示,不过这是由硬代码规定的,我们不去管它;DescLine = 14时游戏会读取Skills.txt中的EMin、EMax和ELen列值并进行一些计算:
剧毒新星等级为1时,从Skills.txt中得到:
HitShift = 4
EMin = 14
EMax = 25
ELen = 50
首先,ELen = 50,即50桢,25桢为1秒,因此剧毒新星持续时间为2秒
接下来,按照HitShift的定义(暴雪使用8位精度来计算生命、法力和耐力),毒素伤害将被除以2^4 = 16
接下来计算最终的显示伤害:
X = EMin*ELen/16 = 43
Y = EMax*ELen/16 = 78
Z = ELen/25 = 2
最后有一点要注意:暴雪会将每个值向下取整,就是说3/4 = 0,41/40 = 79/40 = 1
于是最终的显示为:
毒素伤害:43-78
持续2秒

结论:
关于技能的描述事实上是很复杂的,并且有时会出点小问题;我的建议是:你可以让你的技能描述看起来非常出色,但万一它出什么问题了,还是试着用一些常用格式效果好;有些技能描述格式没有被技能使用,是尝试了很多数据才发现的,有些仅被某一个技能使用了因此我们说它是被指定的,但实际上它或许也可用于其他技能;我想说的是,最基础的那几种格式也许就够用了,当然你自己可以写点特殊的格式来取代现在那些硬代码规定好的,但现有的基础格式对于一个Mod制作者来说足够了


附录A——技能树上的技能描述格式:
-------------------------------------------------------------------
Str Name
Str Long

(这里是所有Dsc2的内容)

当前技能等级:X
(这里是所有Desc的内容)

下一等级:X+1
(这里是所有Desc的内容)

(这里是所有Dsc3的内容)

-------------------------------------------------------------------
前面说过,技能加成使用的是Dsc3,因此它将被显示于技能描述的最下方;要仅为技能的当前等级显示某字串,应使用Dsc2,要为当前等级及下一等级显示,应使用Desc

附录B——所有DescLine取值列表:
一些注释:
DescLine:DescLine列的值
Formula:输出的格式
Used:是否被某技能所使用
Calc/Desc = 与S1,S2,C1,C2没有直接关联的一些数据
Elem:该计算格式所用于的元素类型
Reference:用到的txt文件名,例如Skills、Missiles等
Specific:用到该格式的技能
主要内容请参见Appendix B.txt,用电子表格工具打开

附录C——颜色代码:
对于DescLine = 40而言,可填写入C1列的颜色代码:
0 = 浅灰色(普通的文本颜色)
1 = 红色
2 = 亮绿色(套装物品)
3 = 蓝色(魔法物品)
4 = 金色(暗金物品)
5 = 深灰色(无形物品或有孔物品)
6 = 透明(文本不显示……)
7 = 棕褐色
8 = 橙色(手工物品)
9 = 黄色(黄金物品)
页: [1]
查看完整版本: SkillDesc.txt文件介绍