admin 发表于 2020-1-15 01:58:04

Objects.txt        By Nefarius
小提示:出于可读性的缘故,这里所列的各列描述不一定按照txt文件中的排列顺序

Name:各个实物(Object)在游戏中显示的名称

Description-Not Loaded:参考列,仅作注释,是一些关于游戏中该实物特性的简短描述;不幸的是暴雪在这里对各实物只做了相当少的说明,因此其能提供的信息也非常有限

ID:又是一个参考列,是各个实物的ID,但游戏会直接读取各个实物所在行的编号作为其ID而不是此列值

Token:仍然是参考列,表示各个实物在游戏中的图像,仅作注释,要想修改实物的图像请编辑ObjType.txt文件

SpawnMax:无用参数,关于各实物在游戏中何时出现以及出现的方式均取决于本文件中的PopulateFn列,此列仅被用作注释

TrapProb:无用参数,其本意是用来规定各个实物带陷阱的几率,但这个功能被各实物代码硬性实现了

SizeX,SizeY:这两列是该实物显示在游戏中占用的地图块,值过大将使该实物无法正常显示,因此请谨慎修改这两列

nTgtFX,nTgtFY:未知参数
nTgtBX,nTgtBY:未知参数

IsAttackable:布尔函数,角色在游戏中点击该实物时使用NU动作模式还是KK动作模式,1 = KK模式(踢),0 = NU动作模式(中立状态,不作任何动作)

EnvEffect:布尔函数,功能未知,但显然涉及环境音效及其他环境效果,1 = 与环境效果有关,0 = 与环境效果无关

IsDoor:布尔函数,该实物是否在游戏中被认为是一扇门(门会显示打开的门,关闭的门,阻挡的门等字样,而不是普通实物的字样),被认为是门的实物将可能被有开门能力的怪物开启;0 = 该实物不是门,1 = 该实物是一扇门

BlockVis:布尔函数,该实物是否会挡住视线,仅当IsDoor列为1时起作用;该值为1时,在门关闭的情况下,角色将无法选中不与自己在同一房间的实物、怪物等单位,该值为0时则可以;它的用途和Levels.txt中的LoSDraw列很相似,目前还不知道是否对怪物有效;0 = 该实物不会阻挡玩家的视线,1 = 会阻挡

Orientation:未知参数,看起来像是控制该实物面朝的方向,但改变它的值在游戏中又看不出什么差别,或许是大部分实物都只有一个方向的缘故;它或许被游戏代码用于为各种墙壁选择对应方向的门,仅作参考,这里的值所表示的方向为:
1—        西南,2—西北,3—东南,4—东北

Trans:用以控制游戏中各个实物的颜色,但改变它的值在游戏中仍旧看不出太大差别

PreOperate:布尔函数,功能未知,本文件中所有IsAttackable列为1的实物此处也为1,但游戏中实在看不出两者之间的联系

XOffset,YOffset:该实物图像相对其实际位置的偏移量;这里以像素而不是地图块为单位;因此如果某实物的两列值均为-100,则该实物图像将在其实际位置的左上方,偏左100像素,偏上100像素

Draw:布尔函数,是否绘制该实物的图像,如果不绘制的话,地图上仍旧可以看到该实物的影子,并且我们仍旧可以用鼠标选中它:0 = 不绘制图像,1 = 绘制

Red,Green,Blue:这三列控制该实物光照范围(如果有为其指定光照半径的话)内的打光颜色,采用RGB模式

HD,TR,LG,RA,LA,RH,LH,SH,S1-S8:布尔函数,DCC文件的各个组成部分是否可以被选中(鼠标指上去显示高亮),某列值为0将使该列所对应的组成部分无法被选中:0 = 该组成部分无法被选中,1 = 该组成部分可以被选中

TotalPieces:可被选中的DCC文件组成部分的总数量

SubClass:该实物所特属的子类别,以下是相应的代码:
1 = 神殿类,显示“XX神殿”
2 = 石碑类
4 = 传送门类,尝试将一个非传送门实物强行设置为此类将导致游戏错误
8 = 容器类,正常显示该实物的名称
16 = 神秘庇护所里的各个传送处
32 = 井类
64 = 小站类,显示其对应的地点
128 = 秘密牢门类,该类实物不可被选中,但可以鼠标点击以获得正常效果

XSpace,YSpace:未知参数,是有关地图块的一些数值,但目前为止未发现其在游戏中有任何作用

NameOffect:显示该实物名称的地方与其实际中心点的偏移像素(Z轴方向),例如这里填写-100将使该实物的名称显示在中心点正上方100像素的位置

MonsterOK:布尔函数,功能未知

OperateRange:很显然是用于控制使用者和实物之间距离多远时可使用该实物,单位为地图块,但改变它的值的话,似乎在游戏中看不出什么不同

ShrineFunction:无用参数

Restore:布尔函数,某场景出现的该实物数据是否始终存放在内存中,当某角色从其他地方返回该场景时重建,这里的值如果为零,则离开视野后该实物就会消失;1 = 实物储存于内存中,返回时重建,0 = 允许实物消失,不重建

Act:参考列,用以说明该实物可出现于哪一场景的注释,15表示该实物可以出现于所有前三个场景中

Lockable:布尔函数,该实物是否可以上锁;要使用此功能必须有相应的InitFn列值与之匹配,此外,该实物在游戏中显示的名称将被替换成“上锁的箱子”;0 = 不可上锁,1 = 可以上锁

Gore:布尔函数,功能未知,只有各类尸体的该列值为1

Sync:布尔函数,功能未知,目前的猜想是被用于客户端和服务器端关于该实物是否同步的设置,一般来说通过DS1文件显示的实物该列值都为0,而这类实物是无法同步的;不过它或许也与实物的某些外观效果同步相关,例如井水喝过之后会变空等;0 = 不使该实物的客户端与服务器端同步,1 = 始终同步

Flicker:布尔函数,该实物发出的光是否闪烁,0 = 不允许其闪烁光芒,1 = 允许闪烁

Damage:该实物所造成的伤害值(需要使用适当的OperateFn函数),但这里所填数值的单位不详;所有实物均默认为100,并且如果填入0,游戏将显示它会造成伤害的警告

Beta:参考列,仅作注释;在D2测试版中出现了的实物这里均为1,否则为0

Overlay:布尔函数,功能未知

CollisionSubst:布尔函数,该实物是否调用特殊的碰撞检测机制,但目前还不清楚其具体作用方式

Left,Top,Right,Bottom:用于控制该实物所属的方形区域(可以鼠标点击的区域)

RestoreVirgins:布尔函数,是否仅重建未被使用过的实物(例如未被玩家打开过的箱子等);0 = 重建所有实物,1 = 仅重建未被使用过的实物

BlockMissiles:布尔函数,该实物是否被飞射物认为是墙壁从而无法穿越之,0 = 飞射物可穿越该实物,1 = 不可穿越,飞射物将与该实物产生碰撞

DrawUnder:布尔函数,该实物是否被游戏当作一个地板贴图文件绘制出来(即角色或怪物可以站在其上面还是站在其旁边),0 = 按实物绘制,1 = 按贴图文件绘制

OpenWarp:布尔函数,鼠标指向该实物时是否显示“通往XX”或“陷阱门”字样,0 = 不显示,1 = 显示

AutoMap:该实物是否显示于自动地图上,以及用何种显示图标;0 = 不显示在自动地图上


实物相关函数:
小提示:以下几列是本文件的核心内容,控制着鼠标点击实物时所发生的事件及其他,这几列的值将分别链接到相关的函数段,以实现各种不同的功能
OperateFn:该列控制当角色点击该实物时游戏调用的函数,具体列表如下:
1 = 容器(可能产生不死生物或者火球的陷阱,至少掉落一件物品),用于棺材
2 = 神殿(必须与相应的InitFn函数相匹配,否则会出错)
3 = 容器(可能产生毒雾或者火堆等随机杀伤的陷阱,随机掉落一件物品),用于大罐子、瓮等
4 = 容器(可能产生随机杀伤的陷阱,随机掉落物品,掉落几率大于函数3,小于函数1),用于箱子
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 = 粘液门(用于蛆虫巢穴)
30 = 爆炸物(点击后会翻开并听到爆裂声,如地上牛的尸体)
31 = 山寨版吉得宾神殿(任务实物,点击后会出现掉落吉得宾的Boss)
32 = 储存箱(城镇外无效)
33 = 维特的尸体(掉落很多金币以及维特之脚)
34 = 神秘传送门(去往神秘避难所的传送门)
35 = 石块(无用,但也不会崩溃)
36 = 地窖(无用,但也不会崩溃)
37 = 纪念碑(无用,但也不会崩溃)
38 = 告示牌(无用,但也不会崩溃)
39 = 任务宝箱A(为每个玩家掉落一个赫拉迪克方块)
40 = 任务宝箱B(为每个玩家掉落一个赫拉迪克卷轴)
41 = 任务宝箱C(为每个玩家掉落一个国王之杖)
42 = 赫拉森的日记(任务实物,显示塔·拉夏古墓的标识)
43 = 督瑞尔的门(督瑞尔的房间入口)
44 = 通往下水道第二层的入口(第三幕)
45 = 打开下水道第二层入口的拉杆
46 = 地狱之门(墨菲斯托囚牢第三层的传送门)
47 = 楼梯(不清楚其具体地点)
48 = 囚禁的灵魂(请勿滥用这种实物,否则游戏将崩溃)
49 = 地狱熔炉(任务实物)
50 = 楼梯(不清楚具体地点)
51 = 容器(必然会掉落物品,并且不含陷阱)
52 = 暗黑破坏神的封印
53 = 强制之球
54 = 暗黑破坏神的封印
55 = 暗黑破坏神的封印
56 = 暗黑破坏神的封印
57 = 任务宝箱D(为每个玩家掉落一个克林姆的部件)
58 = 任务宝箱E(为每个玩家掉落一个克林姆的部件)
59 = 任务宝箱F(为每个玩家掉落一个克林姆的部件)
60 = Nothing(无用,但也不会崩溃)
61 = 通往第五幕城镇的红门(点击则进入,只能使用一次)
62 = 远古人A的雕像
63 = 远古人B的雕像
64 = 远古人C的雕像
65 = 激活三个远古人的神坛
66 = 杀死远古人之后才能打开的门
67 = 冰冻的安亚
68 = 邪气之罐(随机出现金怪,掉落物品等)
69 = 未知
70 = 世界之石大殿的入口
71 = 未知
72 = 通往第五幕的传送门(也许)
73 = 未知

PopulateFn:游戏用于生成实物的一些数量函数,留空(值为0)表示不生成该实物,以下是游戏用到的一些值(或许还有更多未用到的,不过我没有测试):
1 = 从实物列表中随机选取实物(随机的篮子、罐子等)
2 = 使用神殿的数量函数
3 = 生成单一实物,不与其它实物相毗邻
4 = 生成一组木桶(普通的和爆裂的都可以),木桶将取代原有实物
5 = 生成一个随机的罐子(从实物列表中随机选择)
6 = 生成多个同样的实物相毗邻
7 = 生成一小组火刑柱上的罗格(从实物列表中选取)
8 = 生成单一实物,与其他实物相距极远
9 = 生成多个同样的实物,相距距离比6稍远

InitFn:该实物在地图上生成后会作什么,以及被某角色激活后会作什么:
1 = 神殿(为该实物指定一个随机的神殿函数)
2 = 容器(用于罐子)
3 = 容器(用于箱子,可能与上锁有关)
4 = 发霉的古书(检测角色任务状况)
5 = 门(检测其是关闭状态还是打开状态)
6 = 石塚(检测角色任务状况)
7 = 凯恩的绞架(检测角色任务状况)
8 = 火炬/火炭盆(检测该实物是否为ON状态)
9 = 艾尼弗斯之树(检测角色任务状况)
10 = 未使用(生成时即为ON状态,角色经过其上方时会受到火焰伤害)
11 = 传送门(显然不可滥用)
12 = 永久性的传送门(同上)
13 = 不可视实物(似乎无用)
14 = 火炬/火炭盆(似乎与8相同)
15 = 马勒斯平台(检测角色任务状况)
16 = 井(检测井水满还是不满)
17 = 小站(检测该小站以前是否被激活过)
18 = 杰海因所在地(第二幕入口附近)
19 = 杰海因所在地(宫殿附近)
20 = 堕落的太阳祭坛(检测角色任务状况)
21 = 赫拉迪克入口(检测角色任务状况)
22 = 火焰(角色从其上经过将受到火焰伤害)
23 = 蓝·依森的古书(检测角色任务状况)
24 = 地刺(角色在其附近时会被扎伤)
25 = 山寨版吉得宾神殿(检测角色任务状况)
26 = 火焰之河里的骷髅堆
27 = 容器(用于粘液堆)
28 = 实物附近生成大量金币
29 = 神秘避难所的入口
30 = 进入女眷住处前检测角色任务状况
31 = 任务宝箱A(赫拉迪克方块)
32 = 任务宝箱B(赫拉迪克卷轴)
33 = 任务宝箱C(国王之杖)
34 = 火炬/火炭盆(如8,但这里随机生成NU状态或者ON状态)
35 = 地窖
36 = 纪念碑
37 = 无用
38 = 泰瑞尔的传送门(第二幕)
39 = 正牌吉得宾神殿
40 = 告示牌
41 = 下水道楼梯(第三幕下水道二层入口)
42 = 下水道拉杆
43 = 黑暗流浪者所在地(检测角色任务状态)
44 = 地狱之门
45 = 地狱之门的桥梁(接近时自动升起)
46 = 囚禁的灵魂(从MonStats.txt中调用一个囚禁的灵魂生成)
47 = 容器(用于箱子)
48 = 地狱熔炉(检测角色任务状态)
49 = 赫拉铁力所在地(第三幕入口处)
50 = 赫拉铁力所在地(正常处)
51 = 容器(用于囚禁的灵魂)
52 = 娜塔亚的所在地(检测角色任务状态)
53 = 楼梯(不知道具体在哪里)
54 = 凯恩所在地(检测角色任务状态)
55 = 暗黑破坏神所在地
56 = 暗黑破坏神的封印
57 = 容器(用于活动的储藏箱)
58 = 火炬/火炭盆(使其状态成为NU)
59 = 黑暗流浪者生成的小怪物
60 = 强制之球(检测角色任务状态)
61 = 凯恩的传送门
62 = 营救的野蛮人的传送门
63 = 远古人A的所在地
64 = 远古人B的所在地
65 = 远古人C的所在地
66 = 安亚所在地(初始)
67 = 安亚所在地(最终)
68 = 尼拉塞克所在地(初始)
69 = 尼拉塞克所在地(最终)
70 = 拉苏克所在地(初始,似乎未使用)
71 = 拉苏克所在地(最终)
72 = 远古人神坛(检测角色任务状态)
73 = 远古人大门(检测角色任务状态)
74 = 冰冻的安亚(检测角色任务状态)
75 = 世界之石大殿入口(检测巴尔是否进入)
76 = 似乎和8一样
77 = 泰瑞尔的传送门(第四幕)
78 = 泰瑞尔的传送门(第五幕)
79 = 老版本的函数,现在游戏已经没有了

ClientFn:这些是特殊的客户端函数:
1 = 环绕音效发生器
2 = 下雨的波纹及音效
4 = 未使用(强行使用会使游戏崩溃)
5 = 未使用(强行使用会使游戏崩溃)
6 = 未使用(强行使用会使游戏崩溃)
7 = 燃烧的骷髅(可能是用于火焰之河)
8 = 未使用(不起效果)
9 = 未使用(不起效果)
10 = 水中冒泡及其音效
11 = 与巴尔藏身之处的特效有关
12 = 亚瑞特山脉巅峰的特效相关
13 = 未知
14 = 另一种燃烧的骷髅
15 = 冰冻的安亚
16 = 世界之石大殿入口
17 = 无用
18 = 无用

各个实物状态的设置:
小提示:以下各列均由八列为一组,用以分别控制某实物的各种状态效果:
0 = NU
1 = OP
2 = ON
3 = S1
4 = S2
5 = S3
6 = S4
7 = S5
Selectable:布尔函数,当鼠标指到某实物上方时该实物是否会显示高亮,0 = 可以,1 = 不可以

FrameCnt:该实物的各个状态显示持续时间,以桢为单位,值为0将跳过该状态
FrameDelta:该状态下动画的播放速率,以1/256为单位

CycleAnim:布尔函数,是否循环播放该动画

Lit:该实物所拥有的光照范围大小(以地图块为单位)

BlocksLight:布尔函数,该实物是否有影子,0 = 没有影子,1 = 有

HasCollision:布尔函数,该实物是否会使游戏检测碰撞,1 = 飞射物可穿越之,0 = 碰撞

Start:动画播放的起始桢

OrderFlag:该实物被绘制成实体物品,墙壁或地板,0 = 实体物品,1 = 地板,2 = 墙壁

Mode:布尔函数,该实物是否有状态对应的动画

Parm:未知,可能是该实物所使用的某些参数

admin 发表于 2020-1-15 01:58:22

ObjGroup.txt        By Nefarius


GroupName:参考列,一般用来注释本行所描述的实物(Object)类型,游戏不读入

Offset:该实物组ID,被Levels.txt用来为各场景规定实物类型时引用,此值具有唯一性

ID0-ID7:本实物组所包含的各个实物的ID

Density0-Density7:定义该实物出现于场景中的密度;这个值的功能类似于Levels.txt中的MonDen列,但实物的真实密度还与Objects.txt中PopulateFn列的值密切相关;这里最大支持125,更大的值将导致游戏崩溃

Prob0-Prob7:这几列表示其对应的实物被选中的几率,这种几率并非依照“个体/整体”的几率计算公式,而只是各个实物出现的实际几率数值,亦即:如果该组实物中有某个实物的该值为100,则出现几率为100%,就是说其他实物将得不到出现的机会;另外,这些列中的数值之和并不一定要等于100

Shrines:当某场景中出现该组实物时是否将其转化成神殿;要使用此功能,其对应的实物的DensityX列值必须为空,同时在Objects.txt中相应的PopulateFn值也必须与其匹配

Wells:当某场景中出现该组实物时是否将其转化成井;要使用此功能,其对应的实物的DensityX列值必须为空,同时在Objects.txt中相应的PopulateFn值也必须与其匹配

admin 发表于 2020-1-15 01:58:37

PetType.txt        By HellSpawn

PetType:召唤物的类型,Skills.txt中的PetType列值就引自这里

IDx:召唤物类型ID

Group:召唤物所属的组ID,同组的召唤物同一时间只能存在一种

BaseMax:不太确定它的含义,可能是说这里设定为1的话则该召唤物只能拥有一只,而设定为0的话则可以通过技能等级或其他属性来更改它的最大数量

Warp:该召唤物是否在回城、小站或进入某入口时和你重合,1 = 重合

Ranged:该召唤物是否可进行远程攻击,1 = 可以

PartySend:召唤物图标是否显示于屏幕左上角,1 = 显示

UnSummon:召唤物可否被取消召唤,1 = 可以

AutoMap:召唤物的图标是否显示于自动地图上,1 = 显示

Name:召唤物图标下方的显示名称

DrawHP:召唤物的生命条是否显示于其图标的下方,1 = 显示

IconType:召唤物图标的类型,用于左上角图标显示顺序,1 = 左边,2 = 中间,3 = 右边

BaseIcon:召唤物使用的图标DC6文件名,其地址在data\global\ui\hireables\

MClass1-4:该类型中可供选择的召唤物硬代码ID,例如石魔有三种

MIcon1-4:该类型中可供选择的召唤物的图标,与其ID相对应

EoL:行结束符

admin 发表于 2020-1-15 01:58:57

Properties.txt        By Joel Falcou
本文件依存于ItemStatCost.txt,文件中Stat1-Stat7列中所填入的ID都必须在ItemStatCost.txt文件中定义
文件的主要部分是7个函数块,每个块由其函数ID(FuncX)和三个相关参数(StatX,SetX,ValX)组成;每个函数的功能都是用来表达其相关参数,无参数者除外
文件中凡是含有*号的列都是注释列,游戏不读入

Code:用于其他txt文件,代表该属性的代码,如MagicPrefix,MagicSuffix,AutoMagic,MonProp,Gems,Runes,Sets,SetItems,UniqueItems,CubeMain等txt文件中

*Done:布尔函数,控制该属性是否可用,1 = 可用,0 = 不可用

Set1-Set7:该属性调用的函数的一个可用参数
Val1-Val7:该属性调用的函数的一个可用参数
Func1-Func7:该属性调用的函数,具体功能参见附录
Stat1-Stat7:该属性使用的状态,这里的值引自ItemStatCost.txt中的ID指针

*Desc:该属性功能的描述
*Param:描述该属性所要用到的参量意义
*Min:描述该属性的最小值
*Max:描述该属性的最大值
*Notes:一些额外的注释
*EoL:行结束符


附录:关于Properties.txt文件中用到的函数
以下列出一些Properties.txt文件中用到的函数,这些函数用于将每个属性的参数,最大值,最小值换算成实际该属性对某方面的加成值:
1 – 将该属性的最小/最大值应用于本函数块对应的Stat列状态上
2 – 仅用于增加防御百分比的函数,具体作用不详
3 – 与前一个函数块使用相同的属性最小/最大值
4 – 无用参数
5 – 与最小伤害值相关
6 – 与最大伤害值相关
7 – 与增加伤害百分比相关
8 – 用于各种速度方面的属性,如IAS、FCR之类
9 – 与前一个函数块使用相同的属性参数/最小/最大值
10 – 用于+X某系技能的属性
11 – 用于事件引发某技能的属性
12 – 为本函数对应的Stat状态随机选取参数
13 – 与耐久度相关
14 – 与物品的孔数相关
15 – 仅用于各种最小值的属性
16 – 仅用于各种最大值的属性
17 – 仅用于各种按等级加成的属性
18 – 仅用于各种按时间加成的属性
19 – 与聚气属性相关
20 – 布尔函数,仅用于无法破坏属性
21 – 增加某类技能等级,增加的技能类型取决于该函数对应的Stat和Val列值
22 – 增加某单项技能,增加的技能种类取决于该函数对应的Stat列值,具体技能则由该属性参数指定
23 – 仅用于无形属性
24 – 用于对某类怪物加成的属性
25到32:可以自行定制使用,具体请查阅PlugIn插件的语法文档

admin 发表于 2020-1-15 01:59:13

QualityItems.txt        By Quatl

前言:本文件控制超强物品的属性,文件中每一行都可以同时控制武器和装甲等,你可以随意添加新的行,并且可被游戏读取并使用的;本文件存放在D2Exp.MPQ文件中

相关联的文件:
本txt将用到以下文件:Properties.txt,ItemTypes.txt

各列具体功能描述:
NumMods:这里仅可填入1或者2,表示该行赋予超强物品的属性个数

Mod1Code:引自Properties.txt中的属性代码,例如%ac,red-mag等,表示该行赋予超强物品的第一个属性,无限制
Mod1Param,Mod1Min,Mod1Max:分别表示该属性的参数,最小值和最大值,详细分析请参见Properties.txt文件引导

Mod2Code:引自Properties.txt中的属性代码,例如%ac,red-mag等,表示该行赋予超强物品的第二个属性,该列当且仅当NumMods = 2时有效
Mod2Param,Mod2Min,Mod2Max:分别表示该属性的参数,最小值和最大值,详细分析请参见Properties.txt文件引导

ToHitMin到Dur%Max:过时的参数,游戏不加载之,仅作为注释用

Effect1,Effect2:字符串键值,用于TBL文件以显示某些字样;游戏加载之但并不显示其对应的内容,因此不确定这是否有用

Armor到Belt:布尔函数,控制该行的属性是否会被各类物品使用,1 = 会,0 = 不会;以下是各列对应的物品类型列表,这里各类型物品若有其子类型,则子类型同样适用:
Armor - armo - 装甲和头盔类
Weapon - melee(不包括thro,rod,orb) - 近战武器类(不包括投掷类、法珠类以及杆棒类)
Shield - shld - 盾牌类
Throw – thro – 投掷武器类
Scepter – scep – 权杖类
Wand – wand – 法杖类
Staff – staf – 双手杖类
Bow – miss(bow,xbow) – 远程攻击类(弓和十字弓)
Boots – boot – 鞋子类
Gloves – glov – 手套类
Belt – belt – 腰带类

Level:该行属性的需求等级

Multiply:该行属性对于物品价格的乘数
Add:该行属性对于物品价格的增量

admin 发表于 2020-1-15 01:59:31

Runes.txt                By Nefarius

Name:用于显示符文之语名称的字符串键值,在TBL文件中使用
Rune Name:符文之语的名称,仅作为注释用

Complete:符文之语是否在游戏中可用,0 = 不可以,1 = 可以
Server:符文之语是否仅限服务器端使用(这里设置为1的意义等同于前一列设置为0),0 = 可用于单机、战网及开放式游戏,1 = 仅可用于战网

IType1-IType6:符文之语允许的物品类型,引自ItemTypes.txt中的ID指针
EType1-EType6:符文之语禁止的物品类型,即使这里填写的类型是前面IType1-IType6中允许的类型也会被禁用

*Runes:符文之语用到的符文名称,这里仅作注释列
Rune1-Rune6:制作符文之语所要用到的符文类型及其顺序,这里的值引自Misc.txt中的ID

T1Code1-T1Code7:这些列分别是符文之语成品的七个属性,引自Properties.txt中的ID
T1Param1-T1Param7:与其属性对应的七个参数,支持数值或表达式;只对需要传递参数的属性有用,例如技能ID,状态ID,怪物ID以及怪物类型ID等
T1Min1-T1Min7:相应属性的最小值,这里的值对不同属性有不同的意义,要想进一步了解请参看Properties.txt和ItemStatCost.txt的相关文件引导
T1Max1-T1Max7:相应属性的最大值,这里的值对不同属性有不同的意义,要想进一步了解请参看Properties.txt和ItemStatCost.txt的相关文件引导

EoL:行结束符,主要功能是保证MS Excel可以顺利打开并编辑该txt文件

admin 发表于 2020-1-15 02:00:02

SetItems.txt        By Alkalund & Char

Index:物品名称的字符串键值,用于TBL文件显示在游戏里
Set:该套装物品所属套装的名称的字符串键值,引自Sets.txt文件中的Index列值

Item:该套装物品的基础物品代码(与Weapons.txt,Armor.txt和Misc.txt中的物品代码匹配)
*Item:该套装物品的基础物品名称,参考列,仅作注释

Rarity:如果基础物品对应多个套装物品的话,该套装物品的被选中几率;这里使用普通的Rarity/总Rarity公式进行计算,即假如有两种套装戒指,一个Rarity = 1,另一个Rarity = 100,则第一种被选中的几率为1/101,第二种为100/101;Rarity取值范围为0-255

Lvl:该套装物品的品质等级,怪物、合成公式、各类实物等都必须大于等于这个等级才能掉出/合成出该套装物品,否则它们会掉落一个双倍耐久的蓝色物品

Lvl Req:使用该套装物品所需的最低人物等级

ChrTransform:该套装物品相关的人物各部分DCC文件及DC6掉落文件的颜色改变(实际改变与否取决于Weapons.txt,Armor.txt和Misc.txt),这里的值引自Color.txt里的ID指针
InvTransform:该套装物品相关的DC6物品栏文件图像的颜色改变(实际改变与否取决于Weapons.txt,Armor.txt和Misc.txt),这里的值引自Color.txt中的ID指针

InvFile:用于替代Weapons.txt,Armor.txt和Misc.txt中指定的物品栏文件图像,这里的值是DC6物品栏文件的文件名
FlippyFile:用于替代Weapons.txt,Armor.txt和Misc.txt中指定的物品动画文件,这里的值是DC6物品动画文件的文件名

DropSound:用于替代Weapons.txt,Armor.txt和Misc.txt中指定的物品掉落音效,这里的值引自Sounds.txt文件的ID指针
DropSfxFrame:物品掉落动画开始播放多久之后播放掉落音效,以桢为单位
UseSound:该套装物品在物品栏中放置或被装备上时使用的音效

CostMult:物品在出售、购买或修理时的价格乘数因子
CostAdd:物品在出售、购买或修理时的价格增量

Add Func:控制该套装物品上的属性何时显示,以及何时起作用的函数代码,具体的作用方式请参见附录,以下是这些函数的简介:
0 = 该套装物品上没有绿色属性(同套装装备数件才能起作用的属性)
1 = 该套装物品上的绿色属性取决于装备了该套装里哪一件物品
2 = 该套装物品上的绿色属性取决于装备了该套装里多少件物品

以下与套装物品上的蓝色属性(自带的属性)有关:
Prop1-Prop9:这九列是该套装物品的各个蓝色属性,其值引自Properties.txt中的ID指针
Par1-Par9:这九列是其对应的属性的参数,支持数值或表达式;只对需要传递参数的属性有用,例如技能ID,状态ID,怪物ID以及怪物类型ID等
Min1-Min9:相应属性的最小值,这里的值对不同属性有不同的意义,要想进一步了解请参看Properties.txt和ItemStatCost.txt的相关文件引导
Max1-Max9:相应属性的最大值,这里的值对不同属性有不同的意义,要想进一步了解请参看Properties.txt和ItemStatCost.txt的相关文件引导

以下与套装物品上的绿色属性有关:
AProp1A,AProp1B到AProp5A,AProp5B:这几列是该套装物品的各个绿色属性,其值引自Properties.txt中的ID指针
APar1A,APar1B到APar5A,APar5B:这几列是其对应的属性的参数,支持数值或表达式;只对需要传递参数的属性有用,例如技能ID,状态ID,怪物ID以及怪物类型ID等
AMin1A,AMin1B到AMin5A,AMin5B:相应属性的最小值,这里的值对不同属性有不同的意义,要想进一步了解请参看Properties.txt和ItemStatCost.txt的相关文件引导
AMax1A,AMax1B到Amax5A,AMax5B:相应属性的最大值,这里的值对不同属性有不同的意义,要想进一步了解请参看Properties.txt和ItemStatCost.txt的相关文件引导


附录:
不论某绿色物品使用函数1还是函数2,其上的绿色属性显示与否都与装备的其他套装物品有关;如果采用函数1,则其上显示何种绿色属性取决于装备了哪件套装物品;如果采用函数2,则其上显示的绿色属性取决于装备的总套装物品数量;如果该套装总共由X件组成,则每件物品上最多能出现2X-2个绿色属性

如果使用函数2,则其绿色属性按照如下方式显示:
AProp1A,AProp1B:任意两件套装物品装备后显示
AProp2A,AProp2B:任意三件套装物品装备后显示
AProp3A,AProp3B:任意四件套装物品装备后显示
AProp4A,AProp4B:任意五件套装物品装备后显示
AProp5A,AProp5B:任意六件套装物品装备后显示

如果使用函数1,则不同绿色属性对应该套装中的不同物品,而与该套装中的多少件物品已被装备毫无关系

当套装中第一件物品被装备上时,其上的绿色属性按照如下方式显示:
AProp1A,AProp1B:第两件套装物品装备后显示
AProp2A,AProp2B:第三件套装物品装备后显示
AProp3A,AProp3B:第四件套装物品装备后显示
AProp4A,AProp4B:第五件套装物品装备后显示
AProp5A,AProp5B:第六件套装物品装备后显示

当套装中第二件物品被装备上时,其上的绿色属性按照如下方式显示:
AProp1A,AProp1B:第一件套装物品装备后显示
AProp2A,AProp2B:第三件套装物品装备后显示
AProp3A,AProp3B:第四件套装物品装备后显示
AProp4A,AProp4B:第五件套装物品装备后显示
AProp5A,AProp5B:第六件套装物品装备后显示

当套装中第三件物品被装备上时,其上的绿色属性按照如下方式显示:
AProp1A,AProp1B:第一件套装物品装备后显示
AProp2A,AProp2B:第二件套装物品装备后显示
AProp3A,AProp3B:第四件套装物品装备后显示
AProp4A,AProp4B:第五件套装物品装备后显示
AProp5A,AProp5B:第六件套装物品装备后显示

当套装中第四件物品被装备上时,其上的绿色属性按照如下方式显示:
AProp1A,AProp1B:第一件套装物品装备后显示
AProp2A,AProp2B:第二件套装物品装备后显示
AProp3A,AProp3B:第三件套装物品装备后显示
AProp4A,AProp4B:第五件套装物品装备后显示
AProp5A,AProp5B:第六件套装物品装备后显示

当套装中第五件物品被装备上时,其上的绿色属性按照如下方式显示:
AProp1A,AProp1B:第一件套装物品装备后显示
AProp2A,AProp2B:第二件套装物品装备后显示
AProp3A,AProp3B:第三件套装物品装备后显示
AProp4A,AProp4B:第四件套装物品装备后显示
AProp5A,AProp5B:第六件套装物品装备后显示

当套装中第六件物品被装备上时,其上的绿色属性按照如下方式显示:
AProp1A,AProp1B:第一件套装物品装备后显示
AProp2A,AProp2B:第二件套装物品装备后显示
AProp3A,AProp3B:第三件套装物品装备后显示
AProp4A,AProp4B:第四件套装物品装备后显示
AProp5A,AProp5B:第五件套装物品装备后显示

admin 发表于 2020-1-15 02:00:19

Sets.txt        By Alkalund,Revised By Myhrginoc

总体属性

Index:与SetItems.txt中套装物品相链接的字串,用以将同一套套装物品组合在一起

Name:用于TBL文件中显示套装名称的字串

Version:0 = 可出现于D2原版及D2资料片,100 = 仅出现于D2资料片

Level:套装的等级,仅做注释用,游戏不读取

套装属性(于游戏中以暗金色显示):

PCode2a,PCode2b – PCode5a,PCode5b:这些列分别用于描述当不同的套装物品组装到一起时,其带来的新的组合属性,数字代表同套装中不同物品的件数,a/b代表满足条件后会获得的第一/二个属性;例如:PCode2a列的值表示当两件同套装物品组装到一起时,角色将获得的第一个额外属性;PCode4b列的值表示当四件同套装物品组装到一起时,角色获得的第二个额外属性;更详细的解说参见附录,该列值引自Properties.txt中的Code列

PParam2a,PParam2b – PParam5a,PParam5b:这些列分别与其前一列项对应,用于描述其所对应的各个属性参数,会用到诸如技能ID、属性ID、怪物ID、怪物类型ID等值,这里支持直接写入计算式

PMin2a/PMax2a,PMin2b/PMax2b –PMin5a/PMax5a,PMin5b/PMax5b:这些列分别与其PCode列对应,对应着各个可变属性的最小/最大值,需要注意的是有一些特殊属性的变量是在其代码里写入的(如CTC属性),关于此请参照Properties.txt和ItemStatCost.txt的引导文件

FCode1 – FCode8:这些列分别用于描述所有套装物品组装完成后所附加的八种额外属性,该列值引自Properties.txt中的Code列

FParam1 – FParam8:这些列分别与其前一列相对应,用于描述其所对应的各个属性参数,会用到诸如技能ID、属性ID、怪物ID、怪物类型ID等值,这里支持直接写入计算式

FMin1/FMax1 – FMin8/FMax8:这些列分别与其FCode列对应,对应着各个可变属性的最小/最大值,需要注意的是有一些特殊属性的变量是在其代码里写入的(如CTC属性),关于此请参照Properties.txt和ItemStatCost.txt的引导文件

*EoL:行结束符,该列值必须为0以免出错

附录:

套装属性是否起作用取决于角色穿齐了其中的多少件,有些属性在部分套装穿齐后即可出现,而有些则需要集齐全套。假设某套装由X件组成,则套装完成之前,至多能出现2*(X-1)个套装属性

PCode2a,PCode2b:任意两件套装组装起来即可出现的属性
PCode3a,PCode3b:任意三件套装组装起来即可出现的属性
PCode4a,PCode4b:任意四件套装组装起来即可出现的属性
PCode5a,PCode5b:任意五件套装组装起来即可出现的属性

admin 发表于 2020-1-15 02:00:35

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 = 黄色(黄金物品)

admin 发表于 2020-1-15 02:00:50

Skills.txt                By Nefarius

很长一段时间以来(1.00直到1.09)Skills.txt只是一个很小的文件,其中仅含有很少的一些内容(主要是技能使用了何种动画,传递的参数以及造成的伤害等),其他部分都由硬代码去折腾了;然而到目前,虽然各种技能作用的方式(函数运算)仍旧写在硬代码中,但其他的所有效果都可以在该文件中找到对应内容并加以编辑,包括何种技能调用哪一个函数来实现;于是该文件成为了D2中非常复杂的,几乎是最大的文件之一:它包含了256列,也就是MS Excel所支持的最大数量;本引导文件并非旨在为每一列的功能都提供一份100%精确的说明文件,并且这也是不可能做到的(因为有些列的功能非常依赖于其技能函数的数据库实现方式);同时该文件也不会对其中的功能实现语法给出过多解释:Xeno就这些语法以D2特有的分析方式写过一篇非常全面的引导文件,因此这里没有必要重复

一些概要类设定
Skills:技能ID指针,用于CharStats.txt,Missiles.txt,MonStats.txt,SkillDesc.txt以及Skills.txt文件本身,用来引用该技能;这个ID指针同样用在AutoMagic.txt,Gems.txt,MagicPrefix.txt,MagicSuffix.txt,QualityItems.txt,Runes.txt,SetItems.txt,Sets.txt以及UniqueItems.txt里,但在这些文件中系统的分析机制存在bug:带有空格符的技能名称不会正常表达,所以在这些文件中最好使用技能的实际ID数字而不是此处的ID指针;另外请注意不要让两个技能拥有相同的ID值,否则除第一个技能外所有其它技能都将被系统无视

ID:技能的实际ID值,亦即ID指针实际指向的值,这里的值不可重复;游戏允许最多可以有32767种技能,但不是所有这些都能被表达在物品上,除非去修改ItemStatCost.txt文件的相关内容;另外,编码属性(CTC属性以及聚气属性)所支持的ID最大值只能到1023;注意这里有些ID是被硬代码所引用的,所以不要在文件中随意移除某些技能

CharClass:该技能属于哪一个角色类型,此列控制着该技能使用何种DC6图标库中的哪个技能图标,以及该技能将得到哪些与技能有关的属性的加成(例如+亚马逊技能等级等等);所有角色必须拥有相同数量的技能,否则仅拥有技能数量最多的那个角色可以进入游戏,其他角色将出错(因为游戏为每一个角色存档都准备了相同数量的技能状况存档空间,因此拥有技能少的角色存档将被看作是损坏存档);要避免这个问题可以给技能少的角色随意指定一些其他的技能,即使它们不出现在技能树上,并且无法使用也无所谓;此列留空则表示该技能不属于任何角色

Skilldesc:ID指针,引自SkillDesc.txt,控制着该技能在角色面板上所关联的外观,例如技能图标文件,技能上的说明文字以及其伤害/准确率如何显示在角色控制面板上;千万不要将同属某角色的两个技能指向同一外观,否则将导致崩溃

一些服务器端的技能运算函数
以下这些函数在1.00-1.09版D2中均以硬代码表的形式出现,而1.10版的Skills.txt文件为这些函数索引提供了软代码修改功能;这些函数是各个技能的核心内容,它们控制着该技能的各种特性:例如该技能会改变何种属性、使用何种算法、是否使用程序代码硬性规定的参数,以及某飞射物的发射方式等等诸如此类
SrvStFunc:服务器端发生函数,当你右击鼠标或者Shift+左击鼠标以使用某技能时,在服务器端运行的函数

SrvDoFunc:服务器端终止函数,即当服务器端的发生函数运行完毕后启动的一个结束函数,假如你的鼠标始终保持按下状态,那么该函数可能被不断重复调用抑或周期性的调用

PrgStack:聚气技能会用到的一个布尔值,1 = 其聚气效果可以叠加(例如焰拳、雷电爪、寒冰刃),0 = 每次使用该聚气技能都会覆盖掉原先的聚气效果(例如凤凰攻击);因此假如将凤凰攻击的该值设定为1,则游戏中可以同时释放凤凰攻击的三种最终效果

SrvPrgFunc1:使用最后一击来释放一级聚气时服务器端所运行的函数
SrvPrgFunc2:使用最后一击来释放二级聚气时服务器端所运行的函数
SrvPrgFunc3:使用最后一击来释放三级聚气时服务器端所运行的函数

PrgCalc1:一级聚气时服务器端函数所使用的运算式(该列也用于震波网络和刃之怒,因为这些技能的实现函数会用到它)
PrgCalc2:二级聚气时服务器端函数所使用的运算式
PrgCalc3:三级聚气时服务器端函数所使用的运算式

PrgDam:与硬代码规定的某些递增属性相关,1 = 与PROGRESSIVE_DAMAGE共同作用,2 = 与PROGRESSIVE_STEAL共同作用,3 = 与PROGRESSIVE_OTHER(该属性未使用)共同作用,4 = 与PROGRESSIVE_FIRE/COLD/LIGHTNING共同作用;要想增加新的递增属性就必须扩展该处所链接到的相应函数列表

一些服务器端关于飞射物的设置
以下这些列控制服务器端该技能发射出的飞射物种类,这些与玩家在屏幕上看到的那些飞射物不尽相同,但客户端的飞射物设置必须与此相匹配,以避免玩家在游戏时遇到一些尴尬的问题:如果双方不匹配的话游戏并不会出错,但会出现一些怪异的事情比如被隐形的东西击中或者看到什么怪物莫名其妙的死亡……

SrvMissile:该技能的服务器端发生函数运行时出现的一级飞射物,但该飞射物并非由此函数产生,亦即发射此飞射物与服务器端函数运行是两个相互独立的事件

DecQuant:此处为一个布尔函数,表示是否该技能每次运行发生函数时都会减少其所使用到的物品/弹药的数量:例如对于炮轰技能,假如此处设定为1,则每次炮轰都会消耗与其发射次数相同数量的箭矢

Lob:也是布尔函数,1 = 该飞射物将采用抛物线轨迹发射,0 = 采用直射方式;抛物线形式的飞射物将会在其接触到鼠标点击处的地面时立即消失;在这里设置为抛物线形式的飞射物仅仅是视觉效果,假如其本身的性质并非抛出类型,则其真正伤害敌人时仍旧使用最初的方式,例如直线杀伤等;相关内容请编辑Missiles.txt的内容

SrvMissileA:服务器端发射的第一种二级飞射物(该飞射物的作用方式将取决于该技能的服务器端函数)
SrvMissileB:服务器端发射的第二种二级飞射物(该飞射物的作用方式将取决于该技能的服务器端函数)
SrvMissileC:服务器端发射的第三种二级飞射物(该飞射物的作用方式将取决于该技能的服务器端函数)

一些由服务器端控制的修饰图像
SrvOverlay:各技能修饰图像一般由客户端控制,但仍有一些由服务器端代码控制的修饰图像,主要是服务器端终止函数运行时,加于敌方身上的效果,包括加于敌方身上的近战效果,不同怪物所受到的技能亮化影响(如内视会使怪物身上出现闪烁光芒)、诅咒效果以及天堂之拳下落击中敌人的部分;该处引自Overlays.txt中的ID指针,在服务器端终止函数运行时,此处的修饰图像起作用

光环/诅咒/亮化效果相关设定
以下列不一定都要被光环/诅咒/亮化技能所使用,例如,有些技能会在某个范围内自动搜寻受到其影响的目标,以及一些区域效果魔法也会使用到这里的设置
AuraFilter:此处是一个二进制筛选参数,用以描述何种单位会受到该技能的影响;这里的筛选参数对各种技能所筛选出的作用目标也是不同的,很大程度上它取决于服务器端的该技能函数用何种算法去自动找寻其能够作用的目标;此列用于大多数在其作用范围内自动找寻目标的技能,以下是一些技能在该处的值:
0001000010110000011 – 内视、嘲弄
0001100010110000011 – 慢速箭
0001010010110000011 – 闪电之怒、信念、龙卷风
0001000011110000011 – 静态力场
0000000000000000011 – 伤害加深、削弱、攻击反噬、偷取生命、衰老、降低抵抗(可作用于Boss)
0000000000000000010 – 微暗灵视、恐惧、迷乱、吸引、残酷吓阻(不可作用于Boss)
0010010000000000011 – 力量、祝福瞄准、活力、反抗、抵抗火焰、抵抗冰冷、抵抗闪电、救助、专注、净化、狂热、祈祷、刺针、防御诅咒、鲜血诅咒
0010010000000000001 – 冥思
0001010011110000011 – 圣火、神圣冲击、飓风
1001010001010000011 – 神圣冰冻
0001110011110000110 – 庇护所
0001010010110000111 – 天堂之拳
0000001000100000010 – 救助
1100000000000000000 – 战嗥
0001110000000000011 – 魔影斗篷
0001000001110000011 – 心灵爆震、刃之怒
0001000011100001011 – 寒冰刃
0010000000100000011 – 橡木智者光环、狼獾之心光环、棘灵光环

AuraState:该光环/诅咒/亮化技能(事实上对于任何技能都适用)施展(使用)后使其施展者(使用者)本身所处的状态,被强化技能强化过的单位也会处于此状态,这里的值引自States.txt中的ID指针(需要注意的是最好不要有某几个技能的此值相雷同,否则,当这几个技能同时作用于某角色时,该角色的状态将不可预知)
AuraTargetState:该光环/诅咒/亮化技能(事实上对于任何技能都适用)施展(使用)后使其被作用者所处的状态,这里的值引自States.txt中的ID指针(需要注意的是最好不要有某几个技能的此值相雷同,否则,当这几个技能同时作用于某单位时,该单位的状态将不可预知)

AuraLenCalc:此处支持填写数值或者表达式,用以控制该光环/诅咒/亮化技能的持续时间(以桢为单位);不过真正的光环类技能不使用此列,它们是周期性刷新状态的
AuraRangeCald:此处支持填写数值或者表达式,用以控制该光环/诅咒/亮化技能的作用范围,有些其他种类的技能也会用到此列的定义,例如闪电之怒,用于计算释放出闪电球时的感知范围和杀伤半径

AuraStat1-6:该光环/诅咒/亮化技能所能改变的属性,这里的值引自ItemStatCost.txt中的ID指针
AuraStatCalc1-6:与其前一列相对应,表示该光环/诅咒/亮化技能所改变的属性的具体数值,此处填写值范围为-2147483647到2147483647,范围之外的数值将采取循环计数

AuraEvent1-3:此处表示何种事件发生在该光环/诅咒/亮化技能的施展者/实际使用者身上时,该光环/诅咒/亮化技能会做出反应,这里的值引自Events.txt中的ID指针
AuraEventFunc1-3:此处与其前一列相对应,表示该光环/诅咒/亮化技能对相关事件做出反应所运行的事件函数,所有事件函数列表请查阅相关资料,需要注意的是这些事件函数中的大多数在被技能调用时都会有些小问题

AuraTgtEvent:通常无用;该列功能与AuraEvnet列相仿,但作用于技能的被作用者
AuraTgtEventFunc:通常无用;该列功能与AuraEventFunc列相仿,作用于技能的被作用者

一些技能的被动属性设定
某技能是否是真正的被动技能要取决于其Passive列的布尔函数值是否为真,真正的被动技能当然使用这些列的值作为其属性,如果不是真正的被动技能,则以下这些列的值被用于服务器端的函数运算,用以计算该技能的所谓“第二被动加成”,这些列会成为前面光环/诅咒/亮化技能列的扩展属性,或者被用来计算召唤物的属性,等等
PassiveState:这里表示处于该被动技能作用下的单位所处的状态名称,此处值引自States.txt中的ID指针(最好不要有某几个技能的此值相雷同,否则,当这几个技能同时作用于某角色时,该角色的状态将不可预知)

PassiveIType:此处填入ItemTypes.txt中的ID指针并与其相对照,用以判定使用何种物品时可以获得该技能的被动属性,用于武器支配技能等(此列值不会对非武器支配类属性起作用,换句话说,它仅对passive_weaponblock,以及六种passive_mastery_XXX类属性起作用);武器支配技能的参数并非固化于硬代码中

PassiveStat1-5:此处说明该被动技能定义了何种被动属性,这里的值引自ItemStatCost.txt中的ID指针
PassiveCalc1-5:此处支持数值或表达式,与其前一列相对应,用以说明各属性的具体值;此处的值范围是-2147483647到2147483647,超出该范围的值将采用循环计数

PassiveEvent:通常无用,与AuraEvent列的用途类似
PassiveEventFunc:通常无用,与AuraEventFunc的用途类似

一些召唤技能的设定
附加于召唤物的特殊属性可以通过MonEquip.txt/MonProp.txt文件或AuraStat/PassiveStat列进行设置
Summon:此处说明该技能召唤出何种召唤物,这里的值引自MonStats.txt中的ID指针

PetType:此处控制该召唤物属于哪个组,其效果包括屏幕左上角显示的图标,该召唤物是否能与其他召唤物并存(例如多种石魔不能共存),以及该召唤物的行动方式等等;这里的值引自PetType.txt中的ID指针

PetMax:此处支持数值或表达式,表示一个角色可以同时拥有多少个该召唤物,留空意为无限制

SumMode:当你召唤出该召唤物时,其使用的动画模式;例如假设要召唤一个僵尸,并且看起来像是僵尸从土里爬出来的动画,则这里应该使用S1;不过很多情况下这里使用NU(无多余动画,突然出现)为好,因为大部分单位没有与S1相匹配的动画

SumSkill1-5:此处控制该召唤物所能使用的技能,但事实上多被用来为召唤物提供一些方面的加成(例如增加火蛇的伤害),某召唤物是否使用该技能完全取决于其AI设定;在召唤物所能使用的各种AI里面最好的当数ShadowMasterAI,而NecroPetAI则完全不可用(其定义于硬代码中);另外召唤物所能使用的技能也可以在MonStats.txt中定义

SumSk1-5Calc:这些列与其前一列相关联,支持数值或者表达式,用以控制各召唤物所使用的技能等级

SunUMod:该列非常出色,它可以使召唤物获得金怪的属性,这意味着使用这一列,你可以使你的召唤物拥有闪电强化或者灵气加强属性;这里的值引自MonUMod.txt中的ID值;在这里给召唤物赋予的属性效果比起真正的金怪要差一些;另外当你取消召唤时,这些召唤物的名字将以随机金怪的名字显示

SumOverlay:当召唤物被召唤时所显示的修饰图像(显示于召唤物而不是召唤者);这里的值引自Overlays.txt中的ID指针

一些声光效果设置
列名中带有Sound/Snd的那些是与音效有关的,其值引自Sounds.txt;列名中带有Overlay字样的列与显示效果有关,其值引自Overlays.txt
StSuccessOnly:布尔函数,用于控制当施展技能的动作被敌人的攻击而打断时,是否继续播放完该技能的施展音效和视觉效果,1 = 继续,0 = 中断

StSound:当该技能的发生函数运行时,游戏所播放的音效,无视使用技能的角色类型
StSoundClass:当该技能的发生函数运行时,游戏所播放的音效,该音效只有当CharClass列中规定的角色使用该技能时才播放,以避免出现一些不合时宜的声音
StSoundDelay:一个未知布尔类型函数;一个合理的猜想是1 = 当该技能发生函数运行完毕后开始播放音效,0 = 在该技能发生函数运行同时开始播放音效

WeaponSnd:当该技能的发生函数运行时,该布尔值控制是否播放使用该技能时身上装备着的武器的相关音效,1 = 播放,0 = 不播放

DoSound:每次该技能的终止函数运行时,游戏所播放的音效,对于白热这样的技能而言,该音效将在每次挥击落下时播放
DoSound A:此列及下一列的功能取决于该技能所关联的终止函数,其控制范围涵盖了每次攻击后的特殊音效,以及召唤出的召唤物音效等各个方面
DoSound B:此列及下一列的功能取决于该技能所关联的终止函数,其控制范围涵盖了每次攻击后的特殊音效,以及召唤出的召唤物音效等各个方面

TgtOverlay:该技能的终止函数运行一次之后,为该技能的攻击对象所做的修饰图像;对于白热这样的技能而言,这意味着第一次挥击将不会为其攻击的怪物做修饰图像,而之后每次挥击都会修饰之
TgtSound:该机能的终止函数运行一次之后,游戏播放的音效(发自被攻击者);对于白热这样的技能而言,这意味着第一次挥击后不会播放其攻击的怪物的声音,而之后每次挥击都会播放

PrgOverlay:此列功能取决于该技能所关联的运行函数;对于聚气技能而言,该列显示的是对该聚气技能聚气图形的修饰图像,对于其它如飓风之类的技能,该列控制的是该技能激活时的修饰图像
PrgSound:与上一列的功能类似,取决于该技能关联的函数,它用于播放每次聚气的声音或者飓风激活时的音效,等等

CastOverlay:当某单位使用该技能时所关联的修饰图像;该修饰图像当且仅当该技能被成功施展出来之后(并非技能发生函数运行,而是该技能的相关代码开始运行)绘制
CltOverlayA:这列通常与CastOverlay列的功能相同,但取决于该技能使用何种函数
CltOverlayB:这列通常与CastOverlay列的功能相同,但取决于该技能使用何种函数

一些客户端的技能运算函数
这里的函数在1.00-1.09时期都是由硬代码规定的,但1.10中被放置在了txt文件中;服务器端的运算函数将决定显示在玩家显示器上的内容,因此最好保证服务器端运算与客户端运算的同步,否则有些技能的实际效果将与其显示效果完全不符
CltStFunc:客户端发生函数,当你右击鼠标或者Shift+左击鼠标以使用某技能时,在客户端运行的函数

CltDoFunc:客户端终止函数,即当客户端的发生函数运行完毕后启动的一个结束函数,假如你的鼠标始终保持按下状态,那么该函数可能被不断重复调用抑或周期性的调用

CltPrgFunc1:使用最后一击来释放一级聚气时客户端所运行的函数
CltPrgFunc2:使用最后一击来释放二级聚气时客户端所运行的函数
CltPrgFunc3:使用最后一击来释放三级聚气时客户端所运行的函数

客户端的一些飞射物设置
以下这些列控制客户端该技能发射出的飞射物种类,这些并不依赖于服务器端的相关代码,但服务器端的飞射物设置必须与此相匹配,以避免玩家在游戏时遇到一些尴尬的问题:如果双方不匹配的话游戏并不会出错,但会出现一些怪异的事情比如被隐形的东西击中或者看到什么怪物莫名其妙的死亡……

CltMissile:该技能的客户端发生函数运行时出现的一级飞射物,但该飞射物并非由此函数产生,亦即发射此飞射物与客户端发生函数运行是两个相互独立的事件

CltMissileA:服务器端发射的第一种二级飞射物(该飞射物的作用方式将取决于该技能的服务器端函数)
CltMissileB:服务器端发射的第二种二级飞射物(该飞射物的作用方式将取决于该技能的服务器端函数)
CltMissileC:服务器端发射的第三种二级飞射物(该飞射物的作用方式将取决于该技能的服务器端函数)
CltMissileD:服务器端发射的第四种二级飞射物(该飞射物的作用方式将取决于该技能的服务器端函数)

客户端技能计算
CltCalc1-3:这些列用于客户端的技能函数中,以实现一些特殊的功能,具体何种功能则取决于其函数的作用;这里支持数值或表达式;

杂项设置I
Warp:未知布尔函数值,仅用于几个瞬间移动的技能,但改变它的值对技能效果没有影响

Immediate:布尔函数,控制当激活该灵气时其效果是否立刻应用,1 = 是,0 = 否,并且取决于该技能PreDelay列的值;一般来说为角色提供某些属性的灵气此项为1,某些对怪物起作用的灵气(如信念)此项为0

Enhanceable:未知布尔函数值,该值并不影响某技能从物品中得到加成,因此似乎无用

AttackRank:此列控制当该技能用在某怪物身上时,它会做出什么反应;例如被元素伤害光环击中的怪物是否会反击,等等;该值越高,怪物针对该技能的攻击进行报复行为的几率就越大,0会使怪物无视该项技能

一些技能对于装备的使用限制
NoAmmo:该布尔函数控制角色是否需要弹药以使用该技能,该列值与DecQuant列共同作用以定义一些飞射性技能的属性,例如魔法箭,此列值为0,则不需要弹药亦可发射

Range:此处是一个选择函数,有四个有效选项,控制着角色该如何施放该技能:
None = 无任何限制,属于法术类
Rng = 该技能属于远程攻击技能(标枪技能、弓和十字弓技能)
H2h = 该技能属于近身攻击技能(如重击、牺牲等)
Both = 该技能可被远程攻击使用也可被近身攻击使用

WeapSel:此列控制使用该技能时应当如何用装备进行攻击:
留空 = 该技能无须特殊途径去操作(即默认的右手拿武器)
1 = 必须使用左手武器
2 = 可以使用左手/右手/两把武器
3 = 必须使用两把武器
4 = 不使用武器
注意:4已经被硬代码限制,仅用于盾击和一些踢击技能

IType1-3:使用该技能所需的物品类型(仅限角色的右手装备),该值引自ItemTypes.txt中的ID指针

EType1-2:禁用该技能的物品类型(即使该装备也出现在允许使用的列表中也会被禁用,仅限角色的右手装备),该值引自ItemTypes.txt中的ID指针

ITypeb1-3:使用该技能所需的物品类型(仅限角色的左手装备),该值引自ItemTypes.txt中的ID指针

ETypeb1-2:禁用该技能的物品类型(即使该装备也出现在允许使用的列表中也会被禁用,仅限角色的左手装备),该值引自ItemTypes.txt中的ID指针

一些动画设置
Anim:角色使用该技能时游戏播放的动画模式,关于角色动画的详细列表请参考PlrMode.txt文件,一个例子:SQ代表顺序动作(Sequence);此处也定义了角色施放某技能的速率是以IAS计算还是FCR计算,对于顺序动作而言则决定于该顺序动作将使用何种动画(这里有些模式例如GH,一旦使用将导致游戏崩溃,因为这些模式无法被技能所使用)

SeqTrans:此列显然是个无用参数,也许本意是想定义角色在开始某顺序动作之前的动画模式,但实际未作用

MonAnim:本意是怪物使用该技能时游戏播放的动画模式,但怪物一般都使用MonStats.txt中定义好的动画,并且怪物无法使用角色的顺序动作动画,因此这里仅用于刺客的影子大师和影子战士——这两者使用刺客本身的动画;假如这里为影子大师和影子战士设置为xx,则它们的顺序动作也将使用MonStats.txt中定义的动画

SeqNum:这里是该技能使用的角色动画播放顺序的ID,前提是Anim列值为SQ;与怪物顺序动作不同,角色的顺序动作仍旧定义在D2Common.dll中的硬代码表内;以下是这些顺序动作ID(每个顺序动作都有其匹配的角色类型,但有些可匹配多个角色类型):
0 = 无顺序动作(使用此ID则施展技能的动画将在进行到一半时出现错误)
1 = 为戳刺技能使用
2 = 一个比较简单的顺序动作,起初用于牺牲(某些武器上会闪现光芒)
3 = 未使用的顺序动作(直接使用施展动画)
4 = 为冲锋技能使用
5 = 未使用的顺序动作(以前被用于用剑的圣骑士)
6 = 为地狱火技能使用
7 =未使用的顺序动作(直接使用施展动画)
8 = 为刺爆技能使用
9 = 一个简单的顺序动作,起初用于击退技能(有些故障)
10 = 用于旋风技能
11 = 用于双手挥舞技能
12 = 与6相同,用于闪电/连锁闪电技能
13 = 用于跳跃技能
14 = 用于跳跃攻击技能
15 = 用于双手投掷技能
16 = 用于双爪攻击
17 = 未用到的一个刺客顺序动作
18 = 用于极地风暴技能
19 = 未用到,起初用于龙爪技能
20 = 未用到的一个刺客顺序动作
21 = 用于飞龙在天技能
22 = 未用到,起初用于各种变形技能
23 = 用于刃之怒技能
编号为24以上的顺序动作仅出现在DLL文件中(事实上已证实的顺序动作编号已达到41,并且还可能有更多)

SeqInput:这列用于调整顺序动作循环时的间隔时间,一个例子:地狱火技能此处设置为100将使游戏在两个地狱火放出的间隙暂停;它的单位看起来像是毫秒而不是桢,这里的数值过小将使游戏顺序动画播放时跳过一些桢(仅客户端)

Durability:未知布尔函数(它不能调整某技能的持续时间,应该与顺序动作有关,因此为了确保安全请不要随意修改此值)
UseAttackRate:未知布尔函数(与动作速率并无关连,在游戏中也不起任何作用,目前看来更像是以前版本的残留参数)

一些关于瞄准敌人的设置
看起来以下这些列的含义非常直接非常有用,但很遗憾,事实上不是这样的;某技能何时以何单位作为攻击目标主要取决于其技能函数,而这里的这些参数只是次要选项

LineOfSight:这里看起来是个二进制标志选项,但游戏仅仅用到了一个位:100;它控制着该技能是否可以在角色视野所及的地方施展,而不受地形限制;举例而言,对于某召唤技能,这里设置为4(100)则意味着你无法隔墙召唤某生物,如果设置为空则不可以

TargetAbleOnly:未知布尔函数,坦白的说这个值似乎是无用的
SearchEnemyXY:未知布尔函数,此值经常与前一列值取逻辑与,看起来也似乎没什么用

SearchEnemyNear:布尔函数,用于控制该技能是否可以自动找寻目标(按下Shift+鼠标左键,然后你的角色就可以不停的自动杀人直到你松手……并且该技能对于尸体相关技能也会自动寻找尸体来施展……);这个值可以对任何技能起作用,所以请不要滥用,否则它将使D2变得太简单太简单,一进游戏你甚至用不着瞄准,只要随便按下鼠标然后……

SearchOpenXY:布尔函数,当设定为1时,该技能将以地图上的空白处作为其打击目标(具体打击何处当然要取决于该技能产生的效果半径,如火墙、陨石、暴风雪);系统认为两个单位不能同占一块地图(飞射物也是单位的一种),因此如果某种此值为1的技能效果在某个已被占用的地图块上产生,则游戏将不显示其效果,另外如果释放该类型技能的地方没有空白地图块,则此次技能施展也将失败

SelectProc:该列与下一列共同作用,用以控制你可以利用何种尸体,有6种不同选项:
1 = 为尸体爆炸技能所使用
2 = 用于召唤骷髅和召唤骷髅法师
3 = 用于复活
4 = 用于寻找药剂
5 = 用于寻找物品
6 = 用于残酷吓阻
该值功能并不完全,有其硬代码规定的内容,例如将复活的该值改成1,则仅能使金怪的尸体显示高亮,但不能施展复活技能

TargetCorpse:布尔函数,用于控制该技能是否可通过点击尸体而施放(并不控制技能效果是否对尸体起作用,而只是控制鼠标点在尸体上即可施放该技能,如同指在怪物身上那样;想要其对尸体产生某些效果请编辑其技能实现函数)
TargetPet:布尔函数,控制该技能是否可通过点击召唤物或者雇佣兵而施放(并不控制技能效果是否对雇佣兵或召唤物起作用,而只是控制鼠标点在雇佣兵或召唤物身上即可施放该技能,如同指在怪物身上那样;想要其对尸体产生某些效果请编辑其技能实现函数)
TargetAlly:布尔函数,控制该技能是否可以通过点击其它玩家而施放(并不控制技能效果是否对其他玩家起作用,而只是控制鼠标点在其他玩家身上即可施放该技能,如同指在怪物身上那样;想要其对尸体产生某些效果请编辑其技能实现函数)
TargetItem:布尔函数,控制该技能是否可以通过点击地上的物品而施放(并不控制技能效果是否对地上的物品起作用,而只是控制鼠标点在地上的物品上即可施放该技能,如同指在怪物身上那样;想要其对尸体产生某些效果请编辑其技能实现函数)

TgtPlaceCheck:布尔函数,用于复活怪物的技能,但目前不清楚其具体用途

杂项设置II
AttackNoMana:布尔函数,当该角色施展该技能时突然没法力的情况下是否能够以一次普通攻击来代替之,1 = 是,0 = 否

与物品事件相关联的一些技能设定
以下列的参数仅当物品上的CTC(Chance To Cast)事件函数引发该技能时,用以决定该技能效果的作用规则;这些参数不会影响到正常施展的技能效果;但是,它们之间的区别非常小以至于几乎看不出,所以该部分内容仅作参考(已验证一部分)
ItemEffect:服务器端的引发函数,这里控制当该技能被CTC属性触发时所调用的函数;留空意味着不调用任何函数,并且该技能也将不会被施展;一般来说这里的值最好取1,但有两种特殊情况,这里取36时将使该技能由敌方发出而不是物品装备者,另外这里还可以取151
ItemCltEffect:客户端引发函数,用以提供前一列所说到的CTC属性触发函数,这里以10和96分别匹配前一列的36和151函数

ItemTgtDo:未知参数
ItemTarget:选择函数,功能不明,似乎是某种技能目标选择机制:默认为0,但有些特殊的目标选择函数会用到这个值;1被用于强化技能,可以为友军施展;2被用于传送,用于选择某随机的空白地图块;3用于尸体爆炸等技能,类似选择尸体;4用于自动追踪类飞射物,如白骨之魂和天堂之拳

ItemCheckStart:未知布尔函数(仅有九头海蛇和骨牢的此列为1,其余均为0,貌似是在发生函数运行前进行某种检测)
ItemCltCheckStart:未知布尔函数(貌似与上一列的功能相近,仅有两种尸体爆炸技能的此列为1,用于检测发生函数运行是否成功,从而绘制相应的图样,以防止技能运行不成功但出现些不合理的图像)

ItemCastSound:当技能被物品事件触发时,游戏所播放的声音,以区别于普通技能施放的音效,该列值引自Sounds.txt中的ID指针
ItemCastOverlay:当技能被物品触发时,游戏所显示的修饰图像,以区别于普通技能的修饰图像,该列值引自Overlays.txt中的ID指针

一些技能点数设置和技能需求等级设置
SkPoints:此列用以说明每升一级该技能需要多少技能点数,支持数值或表达式

ReqLevel:将点数投资到该技能所需的最小人物等级
MaxLvl:该技能可通过投资技能点数所达到的最高等级(技能的实际最高等级(包括物品加成等效果)将由Experience.txt中的MaxLevel列控制,亦即实际最高等级等于人物等级)

ReqStr:将点数投资到该技能(仅限制第一个投资到该技能的技能点)所需角色的力量值,该功能始终有效,但不显示在游戏界面中
ReqDex:将点数投资到该技能(仅限制第一个投资到该技能的技能点)所需角色的敏捷值,该功能始终有效,但不显示在游戏界面中
ReqInt:将点数投资到该技能(仅限制第一个投资到该技能的技能点)所需角色的精力值,该功能始终有效,但不显示在游戏界面中
ReqVit:将点数投资到该技能(仅限制第一个投资到该技能的技能点)所需角色的体力值,该功能始终有效,但不显示在游戏界面中

ReqSkill1-3:这三列表示要投资该技能所必须先投资的几个前提技能,这里的值即为各前提技能的ID指针(Name列值)

与状态有关的一些限制
Restrict:选择函数,用以控制何种状态下该技能可用:0 = 仅可用于人形态,1 = 可用于变形状态和人形态,2 = 仅可用于后面三列所规定的状态下

State1-3:此列控制该技能将受到何种状态的限制,当且仅当前一列值为2时有意义,这里的值引自States.txt中的ID指针

技能延迟设置
Delay:该列支持数值或表达式,用于控制角色使用该技能之后有多少桢的技能延迟,此外该列还决定了在技能延迟状态下有哪些技能是不可用的:此列值不为0的技能均无法在技能延迟状态下使用;一般来说技能延迟状态始于该技能动画开始的那一桢,但如果技能在施放过程中被别人的攻击打断,则技能延迟计数器将重置

杂项设置III
LeftSkill:布尔函数,控制该技能能否出现在左手的技能菜单中(有些技能是无论如何设置都无法出现在左手技能菜单中的,特别是各种灵气;此类的还有各种诅咒和召唤技能)

RePeat:不明布尔函数,该函数与一些技能共同作用,用于重复调用其技能终止函数,直到玩家松开鼠标按钮(例如地狱火技能);但不能确认该值对于函数的具体影响

CheckFunc:该值包含一些ID值,以调用一个特殊列表中的函数,但其真实目的未知(看起来像是当技能主函数运行结束时调用的一些额外函数:1 = 所有使用弹药的技能,2 = 投掷(不包括亚马逊的标枪技能),3 =左手投掷,4 = 左手攻击,5 = 各种卷轴和书技能,6 = 双手投掷,以上,貌似是多人游戏中用来刷新某物品的数量)

关于法力需求的一些设置
这部分内容包含了各技能的法力需求,以及各技能如何消耗法力;为了不使这些解释变得复杂,这里给出一个各技能耗费法力值的公式,代入各列值进去就得到最终的结果;要知道各个值的具体含义以及公式中EffectiveShift的值请看以下的引导文件内容
法力耗费公式:
法力耗费 = max((Mana + LvlMana * (技能等级 - 1))* EffectiveShift,MinMana)

NoCostInstate:布尔函数,与前面一些状态限制列有关,控制角色处于变形状态时使用该技能是否无需法力值,例如用于德鲁伊处于狼/熊形态时变回人形,而不需要耗费法力

UseManaOndo:布尔函数,用于控制该技能是否实时消耗法力,通常这个值是无用的,但:假如使地狱火技能的该值为1,那么点击鼠标时将会耗费一些法力,此后即使一直按住鼠标施放地狱火,也不会使法力减少,直到最后把鼠标拿开时,技能终止函数运行完毕,于是本该在施展时就耗费的所有法力现在一下子就掉光了……

StartMana:施展该技能所需的法力最小值;角色的法力值小于此时其技能图标将始终显示为红色,但该值与角色施展该技能所需的法力值无关

MinMana:施展技能所耗费的最小法力值;这主要用于某些随技能等级升高法力耗费减少的技能,以免施展该技能所耗费的法力过少

ManaShift:该列控制该技能的法力耗费值计算精度(亦即计算单位),法力耗费值最大精度可以达到1/256(因为法力值在程序代码中也以1/256为存储单位);内部代码中这只是一个简单的移位运算,但是为了不至于描述过于复杂,这里列出了一份表格,用以列举ManaShift值与EffectiveShift值之间的转换关系,同时也便于理解
ManaShift        EffectiveShift
0        1/256 = 0.0039025
1        2/256 = 0.00781250
2        4/256 = 0.01562500
3        8/256 = 0.0312500
4        16/256 = 0.062500
5        32/256 = 0.12500
6        64/256 = 0.2500
7        128/256 = 0.500
8        256/256 = 1.00
9        512/256 = 2.00
10        1024/256 = 4.00

Mana:技能在等级为1时所耗费的法力值,需要乘以EffectiveShift值才是真实值

LvlMana:技能每升一级耗费的法力值增量,需要乘以EffectiveShift值才是真实值

一些杂项设置IV
Interrupt:布尔函数,用于控制当角色在施展某技能过程中受到攻击时,是否会中断此技能,亦即该技能是否为不可中断技能

InTown:布尔函数,用于控制该技能是否可以在城镇中施展;但在城镇中技能的伤害是不被计算的,并且技能也不会放出任何飞射物,因此仅用于某些非攻击性技能(注意光环类技能此处必须设置为1,否则游戏将出错)

Aura:布尔函数,判断该技能是否光环技能;这里控制技能按钮的颜色,光环类技能按钮的底色是金色的,该列还将引用PerDelay列的值

Periodic:布尔函数,判断该技能是否周期性技能;与上一列作用相仿,会引用PerDelay列的值以决定该周期性技能的运转周期;则在该技能状态的持续时间内,每隔PerDelay所规定的时间该技能函数就会运行一次;目前该函数用于刀刃之盾和雷云风暴技能

PreDelay:此处支持数值或表达式,控制光环技能或者周期性技能所使用的时间间隔;对于光环技能,每隔这段时间后都会对范围内的其它单位重新赋予一次;对于周期性技能,每隔这段时间之后都会重新运行一遍该技能的代码;此处的值以桢为单位

Finishing:布尔函数,控制该技能是否可作为聚气技能的最后一击技能,如果将某聚气技能的该值设定为1,则该聚气技能将无法施展

Passive:布尔函数,控制该技能是否是一个被动技能(从而应用前面定义于被动技能列中的相关内容),被动技能图标不会出现在左手或右手的技能菜单中

Progressive:布尔函数,控制该技能是否是一个聚气技能,若将某聚气技能的该值设为0则该技能将无效(聚气效果将在出现后立即消失)

General:未知布尔函数(仅用于通过CharStats.txt文件规定的几个技能,但在游戏中什么效果也没有)

Scroll:未知布尔函数(仅用于Books.txt文件中引用的几个技能,但在游戏中无实际效果)

服务器端技能计算及其参数
Calc1-Calc4:这些列控制着服务器端技能函数所直接调用的计算式,其功能是通用的,计算结果将被应用于最终技能函数效果的实现;如果该技能指定发射一些飞射物的话,其函数也会用到这里的计算式;这里支持数值和表达式

Param1-Param8:这些是需要直接传递给技能函数的特殊参量,或者是在SkillDesc.txt文件以及这里的计算式中所要用到的参量;这里仅支持数值

杂项设置V
InGame:布尔函数,控制该技能是否允许出现在游戏中,0 = 游戏中不会出现该技能

攻击准确率的相关设置
这部分内容将对各技能提供一些攻击准确率加成,但这里有Bug——所有对飞射攻击的准确率加成都无效,特别是对所有的弓箭类技能;这部分对准确率的加成按百分比计算而非数值
ToHit:该技能1级时对准确率加成的百分比

LevToHit:每升一级,该技能对准确率加成的百分比增量

ToHitCalc:这里支持数值或表达式,用于最终计算该技能对准确率的百分比加成;当此列的数值不留空(不等于0)时前两列的值将被游戏无视,单看该数值

一些特殊攻击方式的设定
这部分内容除HitClass列之外依旧很神秘,它们用于为每次该技能成功的攻击附加一些特殊的事件
ResultFlags:二进制选择函数,用于该技能每次成功击中敌人后,控制一些特殊事件的产生;以下是两张参考表格,一张表示各个技能在此处的值,另一张表示各个二进制位所代表的内容;以下表格中的值均为二进制,请自行进行二进制/十进制的转换
技能列表:
000000000000100 – 用于因碰撞而破坏掉的飞射物
000000000000101 – 用于心灵传动、Diablo冲锋、投掷药瓶
100000000000001 – 用于钢铁石魔、圣火、神圣冰冻、神圣冲击
000000000001000 – 用于盾击、重击、灰熊盾击、跳跃击退以及Radament Holyboly技能
000000000001001 – 用于心灵爆震、地狱陨石碰撞(火焰之河场景掉落的陨石)
000000000010001 – 用于庇护所
000000000000001 – 用于狂犬病、飓风、攻城兽的践踏技能
000000000100000 – 用于刀刃之盾技能
二进制位列表:
000000000000001 = 1 – 未知
000000000000010 = 2 – 未知
000000000000100 = 4 – 未知
000000000001000 = 8 – 击退
000000000010000 = 16 – 无接触情况下伤害敌人,也许忽视目标防御
000000000100000 = 32 – 未知
000000001000000 = 64 – 未知
000000010000000 = 128 – 未知
000000100000000 = 256 – 本次攻击不造成伤害
000001000000000 = 512 – 如上
000010000000000 = 1024 – 未知
000100000000000 = 2048 – 未知
001000000000000 = 4096 – 未知
010000000000000 = 8192 – 未知
100000000000000 = 16384 – 未知

HitFlags:二进制选择函数,但其功能未知:
10 - 心灵传动,狂犬病,飓风以及其它在其爆炸范围内造成伤害的飞射物

HitClass:攻击类型,控制当该技能成功命中敌人时所播放的声音,以下是一些已知的HitClass值:
2 – 飞斧类音效
3 – 刀刃之盾音效
6 – 标枪撞击音效
10 – 箭矢撞击音效
32 – 火焰烧焦音效
48 – 冰冻音效
64 – 闪电打击音效
80 – 被毒素(瓦斯药剂)击中音效
96 – 击晕音效
109 – 心灵传动音效
112 – 重击音效
141 – 攻击者收到反伤害音效
157 – 庇护所音效
176 – 普通毒素音效

杂项设置VI
Kick:布尔函数,作用未知(看起来像是调用踢击动画的技能设置,但对其它技能均无效)

一些与伤害有关的设置
以下内容表明该技能如何造成伤害,许多技能也会用到前面的Calc列中的计算式来计算其本身的加成伤害值;下面是一个比较精确的计算公式,用以计算该技能所造成的伤害值;公式中EffectiveShift的值请阅读下面的文件引导内容
伤害计算公式:
MinDamage = ((BaseDamage * SrcDamage / 128) + (MinDam * EffectiveShift * (100 + DmgSymPerCalc) / 100)) * (100 + EnhancerStat) / 100
MaxDamage = ((BaseDamage * SrcDamage / 128) + (MaxDam * EffectiveShift * (100 + DmgSymPerCalc) / 100)) * (100 + EnhancerStat) / 100

其中
BaseDamage是已经被该技能在前面Calc列中加成过的伤害值(元素伤害和物理伤害以及其它伤害类型请分别代入整个公式计算,而不要混为一谈)
SkillDamage是所有由技能提供的非武器伤害加成值
EnhancerStat是可以总体提升该伤害类型的属性(例如增加X%火焰伤害属性)

HitShift:该技能提供的非武器伤害加成精度(单位),伤害值最小基准单位为1/256(因为生命值最小基准单位也是1/256);内部代码中这只是一个简单的移位运算,但是为了不至于描述过于复杂,这里列出了一份表格,用以列举HitShift值与EffectiveShift值之间的转换关系,同时也便于理解
HitShift                EffectiveShift
0        1/256 = 0.0039025
1        2/256 = 0.00781250
2        4/256 = 0.01562500
3        8/256 = 0.0312500
4        16/256 = 0.062500
5        32/256 = 0.12500
6        64/256 = 0.2500
7        128/256 = 0.500
8        256/256 = 1.00
9        512/256 = 2.00
10        1024/256 = 4.00

SrcDamage:此列控制多少百分比的武器伤害将转化给技能,这里允许的最大值为128,128代表100%武器伤害转化给技能,96代表75%,64%代表50%,依此类推;一个例子:普通攻击伤害为1000-3000的角色,如果某技能此处值为66,则其使用技能的伤害值变为515-1547;这种惩罚应用于所有的伤害类型(也包括生命和法力偷取效果,因为它们也被当作是某种伤害类型看待),但各种伤害类型所受到的惩罚效果是区别对待的

MinDam,MaxDam:该技能1级时给予角色的最小/最大物理伤害值增量,游戏是否加载这个参数取决于其技能函数的实现方式,不过大多数技能函数都会加载

MinLevDam1-MinLevDam5,MaxLevDam1-MaxLevDam5:每升一级该技能的最小/最大物理伤害值增量,LevDam1用于技能等级在2-8级时,LevDam2用于9-16级,LevDam3用于17-22级,LevDam4用于23-28级,LevDam5用于用于29级及以上;游戏是否加载这个参数取决于其技能函数的实现方式,不过大多数技能函数都会加载

DmgSymPerCalc:该技能从其它协同加成技能(按百分比加成)中所获得的物理伤害加成,该值作用于SrcDamage惩罚之后;这列值支持数值或计算式

EType:该技能所造成的元素伤害种类,此处值引自ElemTypes.txt中的ID指针;同时这个值还控制着该技能是否从+X火焰技能之类属性中受益

EMin,EMax:该技能1级时给予角色的最小/最大元素伤害值增量,游戏是否加载这个参数取决于其技能函数的实现方式,不过大多数技能函数都会加载

EMinLev-EMinLev5,EMaxLev1-EMaxLev5:每升一级该技能的最小/最大元素伤害值增量,Lev1用于技能等级在2-8级时,Lev2用于9-16级,Lev3用于17-22级,Lev4用于23-28级,Lev5用于用于29级及以上;游戏是否加载这个参数取决于其技能函数的实现方式,不过大多数技能函数都会加载

EDmgSymPerCalc:该技能从其它协同加成技能(按百分比加成)中所获得的元素伤害加成,该值作用于SrcDamage惩罚之后;这列值支持数值或计算式

ELen:假设该伤害类型有持续时间参数(击晕、毒素、火焰燃烧、冰冻等)的话,该列值即为该技能造成元素伤害的基础持续时间;这里的值以桢为单位;要注意的是火焰燃烧伤害并非火焰类型的伤害;游戏是否加载这个参数取决于其技能函数的实现方式,不过大多数技能函数都会加载

ELevLen1-ELevLen5:每升一级该技能伤害的最小/最大持续时间增量,LevLen1用于技能等级在2-8级时,LevLen2用于9-16级,LevLen3用于17-22级,LevLen4用于23-28级,LevLen5用于用于29级及以上;游戏是否加载这个参数取决于其技能函数的实现方式,不过大多数技能函数都会加载

ELenSymPerCalc:该技能从其它协同加成技能(按百分比加成)中所获得的持续时间加成,该值作用于SrcDamage惩罚之后;这列值支持数值或计算式

AI相关设置
AIType:该技能如何被影子大师及影子战士所使用,以及如何被第三幕的雇佣兵所使用,包括法师的寒冰装甲等
AIBonus:此处增加了影子大师的AI中使用该技能的可能性

物品价格相关设置
CostMult:此处控制其上出现+X该技能属性的物品价格的乘数,这里可填写最大值是1024,过大的值将被系统无视
CostAdd:此处控制其上出现+X该技能属性的物品价格的增量
页: 1 2 3 [4] 5
查看完整版本: TXT源码文件全面解读