admin 发表于 2020-1-15 01:50:44

ItemRatio.txt        By Ulmo

前言:ItemRatio.txt文件用于判断掉落物品的品质,游戏会首先判断掉落物品是否是暗金的,否则判断其是否黄金,再否则判断其是否套装物品……依次类推下去,最终全部判断失败的话即为低品质物品;ItemRatio.txt就控制着其中每一步的成功率
判断顺序为:
Unique > Rare > Set > Magic > High Quality > Normal > Low Quality


Function:参考列,仅作注释,游戏将通过以下三列值来选中正确的行
D2原版中通常不会出现角色专用物品,亦即此类物品是否出现完全是由D2版本号决定的

Version:游戏版本,0 = D2原版,1 = D2资料片
Uber:0 = 普通级物品,1 = 扩展/精华级物品
ClassSpecific:1 = 角色专用物品,或者是ItemTypes.txt中Class列不为空的物品,0 = 其他

Unique:选中暗金物品的基础几率,这个值越高则选中暗金物品的几率越低,也就是说这里的值理解为分母比较好
UniqueDivisor:怪物等级/物品的品质等级对暗金几率的影响因子,这里的值越大,高等级怪物掉落更好的物品的几率就越小
UniqueMin:用于限制怪物等级/物品品质等级以及MF值对于暗金几率的提升,同样是值越高,暗金几率就越低

Rare,RareDivisor,RareMin:同以上三列
Set,SetDivisor,SetMin:同以上三列

HiQuality,HiQualityDivisor:同上,只不过没有了几率提升限制,也无视MF影响
Normal,NormalDivisor:同上


物品掉落的判定机理:
首先,游戏将从TC中选择出一个基础物品,关于TC的详细解说请参考TreasureClassEx.txt的相关引导文件;

其次,游戏开始判定该物品的品质,以下是判定流程,以一个300%MF的角色杀死地狱难度安达丽尔(MLvl = 75),掉落戒指(QLvl = 1)为例:
·检测该物品是否为暗金:
根据ItemRatio.txt中的UniqueDivisor值,修正因子决定的暗金几率修正量为:
UniqueDec = (MLvl-QLvl)/UniqueDivisor = (75-1)/1 = 74
根据Unique值,暗金的基础几率为:
BaseChance = Unique – UniqueDec = 400 - 74 = 326
根据硬代码的规定,暗金几率需要乘以128进行修正,则修正后的几率为:
ExChance = BaseChance * 128 = 326*128 = 41728
接着,游戏将300%的MF换算成对于暗金物品的有效MF值,得到
EMF = MF*300/(MF + 300) = 300*250/(300+250) = 136%
经过有效MF值作用过的暗金几率为:
MFChance = ExChance*100/(100 + EMF) = 4172800 / 236 = 17681
这里的MFChance大于txt中的UniqueMin值,因此不进行任何操作,如果小于UniqueMin,则以UniqueMin值作为MFChance
地狱安达丽尔的任务TC中,UniqueFactor值 = 995,因此实际的暗金几率为:
Chance = MFChance – (MFChance*UniqueFactor) / 1024 = 17681 – 17681*995/1024 = 501
最终游戏会在0到Chance值之间选取一个随机值,如果这个随机值小于等于127,则判定为暗金,因此最终的暗金几率为:
FinalChance = 128/502 = 25.5%
亦即有25.5%的几率得到暗金戒指
·如果检测失败,则继续检测是否为黄金戒指,流程同上,只是代入的数值不同
·失败后检测是否为套装戒指
……

这里的例子中,安达丽尔最低掉落蓝色魔法品质的戒指,如果是普通怪物,则在Magic判定失败后还将继续检测该物品是否为高品质物品,等等
在高品质/普通物品的判定流程中,没有MF作用,也没有TC中的几率修饰因子及几率最小值检测

关于EMF:
对于魔法物品,EMF = MF
对于黄金物品,EMF = MF*600/(MF + 600)
对于套装物品,EMF = MF*500/(MF + 500)
对于暗金物品,EMF = MF*300/(MF + 300)

admin 发表于 2020-1-15 01:51:01

ItemStatCost.txt        By Nefarius


Stat:ID指针,为诸如Properties.txt,Skills.txt,States.txt以及ItemStatCost.txt本身等txt文件所引用;该列值具有唯一性,以保证各属性不相雷同,否则将在游戏中产生一些错误

ID:该列并不编译进bin文件,仅标明各属性的内部数字ID以供参考,系统默认此值与其属性所在的行号相对应(第一个属性ID = 0,第二个属性ID = 1,依次类推)

Send Other:此列用以控制该属性的值是否被发送至其他玩家,1 = 发送,0 = 不发送,但这类功能大部分由一些特殊属性的硬代码实现了,因此其实现的功能并不完全:将其置为1则该属性值会被发送,但起不到什么效果(例如力量、敏捷等);该功能主要用于使游戏服务器端和客户端的函数同步

Signed:此列描述该属性值是否有符号数,1 = 有符号数(可为负数),0 = 无符号数,此列应该是无效的,因为一个属性值是否有符号这得取决于硬代码中存放此值的变量定义:例如生命、法力、耐力等,当超过8388607*256之后都会变成负数而无论此列值是多少;所以目前来看,此列的作用应当是在游戏读入属性值信息的时候作为一个标志位,用以保证系统进行正确的数制转换

Send Bits:当该属性值被发送到客户端时,其数据包所占用的位数,用以匹配相应的内容;该值仍旧是个不完全功能值,因为其大部分功能在硬代码中已作出定义,总的来说,对于有符号数,该列应该设置为“Save Bits + 1”(例如Save Bits = 31的数在此应该填入32),对于无符号数就是其Save Bits列值;但在此填入大于32的数是无意义的,假如某属性本身的Save Bits列值 = 32,那么它必然会被按照无符号数来处理

Send Param:当该属性值的参数被发送到客户端时,其数据包所占用的位数,用以匹配相应的内容;与上一列的规则基本相同,对于Save Param Bits小于32的参数,均被当作有符号数处理,并且这里应填入“Save Param Bits + 1”;此列用于传输一些如oskills所加技能种类之类的属性,但该功能与上一列一样并不完全,在硬代码中已经有了相关定义

UpdateAnimRate:1 = 该属性作用于某单位时,游戏将会调用速度处理器来匹配其适当的动作速率,0 = 无须此类匹配;例如某光环加于角色时,游戏会立即改变该单位的动作速率而不是在当前动作完成后才执行;该功能同样在硬代码中已作出定义,所以假如你定制了某种与动作有关的属性,就必须扩展相应的代码来实现之

Saved:此列控制游戏是否将角色的该属性值保存在d2s存档文件中,1 = 保存,0 = 不保存;请注意ID = 511的属性列已经被作为结束标志,是系统的保留ID,因此目前有两种说法,一是ID = 0-255的诸属性均可保存,二是ID = 0-510的属性可被保存;正确性不详……但可以肯定的是ID = 511及以上的属性将无效

CSvSigned:该角色属性使用有符号数还是无符号数的格式存储,1 = 有符号数,0 = 无符号数;这两种存储格式除了在d2s文件的读写方式上略有不同外,并无本质差异,应该只是用于防止因符号不匹配而导致大量错误产生

CSvBits:该属性存储于d2s文件中角色属性的数据存储位数,无符号数最大可以有32位,有符号数最大31位;该列实际上是可有可无的,直接写入32的话则与将CSvSigned列值设定为0起到相同的作用

CSvParam:该属性的参数存储于d2s文件中角色属性的数据存储位数,小于32位的属性参数都被当作有符号数来处理,32位则是无符号数,与前一列一样,该列可有可无……

fCallback:1 = 当该属性值变动时,游戏会重新调用一次该属性所对应的函数,0 = 不会;用于控制某些技能或光环属性,要想修改这方面内容以获取特效,必须同时去扩展相应的函数代码

fMin:此列用于控制游戏是否会调用一些特殊函数以保证该属性值始终处于一个区间内,1 = 会,0 = 不会;这项功能可以控制诸如角色的力量、敏捷、精力等值不会小于0

MinAccr:此列是该属性的下限值:貌似是和fMin列共同作用,但这方面的功能代码却似乎没有用到它的值,因此这里似乎也只是用于列举硬代码规定的下限值而并无实际用处

Encode:此处控制游戏是否在存储时将该属性的各个参数编码;主要用于一些多参数的复杂属性,例如CTC属性等;其算法不在本引导文件的讨论范围内,请查阅相关资料……假如想创建某属性,请遵循其编码算法并且参考其它可编码属性是怎样作用的

Add,Multiply:这两列用于计算具备该属性的物品价格(注意有些属性由于硬代码的关系会被重复计算,如防具的防御值),计算公式为:Cost * (1 + Value * Multiply / 1024) + Add;其中Cost的值引自Weapons.txt,Armor.txt以及Misc.txt的Cost列,Value是该属性的值

Divide:此列是无用列,不用于任何代码;游戏使用一个内部函数来计算物品价格,该运算并不涉及除法,但随后要附加一个硬代码规定的除以1024的运算

ValShift:此处控制游戏写入或者读入物品上该属性的方式,其属性值是否采用高精度表示完全由硬代码所控制,这里主要是用于控制d2s文件中存储物品上附加属性的存储位数(请与先前的角色属性相区分),因此假如某物品上+256生命,则出于8位存储位数的限制,将变为+1生命

1.09-Save Bits,1.09-Save Add:这两列用于存储1.07-1.09版里出现的物品,它们与Save Bits和Save Add两列可以相互取代,以便于物品在不同版本的游戏间切换,但是1.10版中角色的属性并不定义于ItemStatCost.txt文件中,因此那些与角色属性是无法相互切换的……假如你不希望有人用某1.09版角色加入你的游戏从而带来一些不合法物品(物品属性会被游戏自动转换),你可以将这两列的值均留空,这样游戏会在试图转换时出错……

Save Bits,Save Add:这两列用于游戏在存档时,决定为该属性分配多少位长度的存储空间,仅用于d2s文件中的物品属性部分;Save Bits控制该属性值所占用的位长,则该属性的取值范围是0到2 ^ Save Bits – 1,而Save Add控制该属性取值的偏移量;例如:Save Add值为100,则该属性最低取到-100为止,而与此同时该属性上限值也将下降100,因此在经过Save Add的修正之后,实际的取值范围将变成-100到2 ^ Save Bits – 1 – Save Add;这两列的功能并不一定有效,因为一些由技能所带来的属性变化以及怪物的属性等将不受此限制,因此这两列仅在某物品文件被压缩进存档/从存档中解压到游戏时有效

Save Param Bits:这列控制该物品属性的参数在存储时有多少位长度的存储空间,具体作用方式和前面的CSvParam列相仿(属性参数的上下限值不会受到Save Add列的影响),这里最好设定为17,保证这里的参数可以使用各种ID值而不出现什么bug——大多数ID值都被限制在0-65535这一区间内,并且参数值一般以有符号数来表示

KeepZero:此列控制该属性是否可以变成负数,可能与fMin列的某些执行效果共同作用,不过该效果至多仅被用于游戏客户端,理由如你所知的那样,如法力、耐力等属性在超过了8388607*256之后将循环回1继续计数

Op,Op Param,Op Base,Op Stat1,Op Stat2,Op Stat3:这些列控制着该属性的作用形式,例如某属性根据角色等级提供某些加成,等等;以下将阐述各种Op的作用方式(总共有13种Op公式,但游戏仅仅使用了其中的一些);此处留空或者填入0值将使用默认的Op,亦即直接将属性加成给角色;在以下的公式中,OPSTAT表示三个Op Stat列中填入的新属性的值,STATVALUE表示原属性本身的值,BASEVALUE表示Op Base列中填入的新属性的值,PARAM表示Op Param列中填入的数值:
1#:OPSTAT = OPSTAT + OPSTAT * STATVALUE / 100
2#:OPSTAT = OPSTAT + (STATVALUE * BASEVALUE) / (2 ^ PARAM);对于除人物等级之外的Op Base,该公式并非都能很好的适用,因为只有当该物品被装备上、人物存档时或者升级时,这个公式的值才会被刷新:这和一些被动技能是类似的作用方式,看起来好像游戏始终在遵循此公式的计算方法,但实际上游戏只不过是随时都显示出一些描述性的文字,真正的服务器端计算不会随时修正它的最终值
3#:这是一种基于2#Op的公式,但以百分比作用的Op,其公式可参考2#Op,但最终效果将是为角色提供属性百分比加成而非数值
4#:该Op也基于2#Op,但其最终属性将作用于物品而非角色(因此某些按等级增加防御的属性最终会累加在该物品的防御值上而不是角色总的防御上)
5#:该Op基于4#Op,但以百分比形式作用;并且最终将给物品的属性加成而非角色
6#:基于7#Op,但最终加成方式将是直接累加而不是百分比形式
7#:该Op以百分比的形式按当前游戏中的时间为属性加成,但由于服务器端和客户端的游戏时间无法同步,所以它并未被游戏使用,因此其具体算法就不赘述了
8#:以硬代码的形式规定,仅对于法力最大值有效,该属性按照CharStats.txt中的定义,为角色增加基于其精力加成的法力最大值(对于非角色无效,如雇佣兵)
9#:以硬代码的形式规定,仅对生命最大值和耐力最大值有效,该属性按照CharStats.txt中的定义,为角色增加基于其体力加成的生命最大值和耐力最大值(对于非角色无效,如雇佣兵)
10#:无用,在Op函数中也无选项代码
11#:OPSTAT = OPSTAT + OPSTAT * STATVALUE / 100,与1#和13#相仿,只是多了些检测机制
12#:无用,在Op函数中也无选项代码
13#:OPSTAT = OPSTAT + OPSTAT * STATVALUE / 100,该Op仅对该物品的属性加成,而不对其他物品类型的相关属性加成,如增加耐久度,增加武器伤害,防具防御,等等

Direct:此列控制该属性是否有一个相关的上限属性,1 = 是,0 = 否,亦即除非作一些相关变动,否则该属性值不可能被增加至超越其相关上限,并且对该属性进行的任何改变都是永久性的(例如改变法力、生命、耐力的技能效果是永久性的,而改变法力最大值,生命最大值,耐力最大值的技能效果则是临时性的);并且,你也无须为了使某技能效果成为永久性的而为某属性增加其上限属性,这会起到相反的效果

MaxStat:该属性相关的上限属性,仅当Direct列值为1时起作用,具体作用方式参见Direct列相关说明;按百分比提升上限属性的效果都将同时对其对应的属性起作用,这个功能与硬代码有关

ItemSpecific:此列控制该属性是否仅作用于单一物品,1 = 是,0 = 否,就是说,假如将一颗增加耐久度的珠宝镶嵌入某物品,则该属性不会与其镶入的物品叠加起来,即不可能用这种方式同时增加珠宝和其镶嵌物的耐久(只是个假设,事实上没有加耐久度的珠宝,珠宝本身也没有耐久度属性);但其作用方式仍然是个谜,或许同时也会防止某些属性被加到角色的总属性上面

DamageRalated:此列控制该属性是否仅作用于其所在的武器上,而不与人物装备的其他武器上的该属性进行叠加(这是为了防止类似野蛮人拿着1把1%吸血的武器和1把49%吸血的武器,则前者可以获得50%吸血的效果……);作用机理如下:当使用某武器进行攻击时游戏只会把所有与该武器有关的此类属性写入一个临时属性列表中,攻击完成后再清空该列表(大意如此)

ItemEvent1,ItemEvent2:该属性所依存的事件(引自Events.txt),这些事件会触发相应的事件函数,但这并不一定,有些事件函数在其相应事件被设置为物品事件后将不会执行

ItemEventFunc1,ItemEventFunc2:与其前一列中事件相关的事件函数,以下是各类事件函数所执行的事件列表:
1 – 向刚刚击中自己的单位发射飞弹(寒冰装甲)
2 – 冰封攻击自己的敌人一段时间(冰封装甲)
3 – 冰冷伤害攻击自己的敌人并冰冻其一段时间(碎冰甲)
4 – 对攻击者造成X%的伤害反弹
5 – 无视敌人的抗性,将X%的伤害值转化为自己的生命值
6 – 攻击者受到X点物理伤害
7 – 击退敌人
8 – 使敌人恐惧并逃跑
9 – 向敌人释放微暗灵视诅咒
10 – 攻击者受到X点闪电伤害
11 – 攻击者受到X点火焰伤害
12 – 攻击者受到X点冰冷伤害
13 – X%受到的伤害转化成法力提升
14 – 冰冻敌人
15 – 给敌人造成伤口并不断的损失生命(负的生命恢复值)
16 – 对敌人造成粉碎性打击
17 – 杀死敌人后获取X点法力
18 – 杀死恶魔后获取X点生命
19 – 使敌人减速
20 – 攻击时施展某技能
21 – 被攻击时施展某技能
22 – 吸收所受到的物理伤害
23 – 将召唤物所造成的伤害值转移给其主人
24 – 用于能量护盾,将X%的伤害转化为法力减少
25 – 吸收所受到的元素伤害
26 – 将召唤物所受到的伤害值转移给其主人
27 – 如果攻击者攻击了某拥有减速属性的单位,则攻击者本身被减速
28 – 杀死敌人后获取X点生命
29 – 杀死怪物后使其尸体不可作为它用
30 – 当某事件发生时施展某技能
31 – 将某敌人变成指定的怪物

DescPriority:这个值越高该属性在物品描述中所处的位置越靠前,如果多个属性公用一个值,则以txt文件中罗列的顺序为准,有效值从0到255

DescFunc:用于该属性描述字符串的函数,该列作用方式类似SkillDesc.txt中的DescFuncs列,以下是各种不同函数所代表的意义,各个属性值显示与否请参照DescVal列;这些仍旧遵循旧的引导文件的语法,但新加入了一些函数:
1 - +[属性值] [描述字符串1]
2 - [属性值]% [描述字符串1]
3 - [属性值] [描述字符串1]
4 - +[属性值]% [描述字符串1]
5 - [属性值*100/128]% [描述字符串1]
6 - +[属性值] [描述字符串1] [描述字符串2]
7 - [属性值]% [描述字符串1] [描述字符串2]
8 - +[属性值]% [描述字符串1] [描述字符串2]
9 - [属性值] [描述字符串1] [描述字符串2]
10 - [属性值*100/128]% [描述字符串1] [描述字符串2]
11 – 回复1耐久度于 秒内
12 - +[属性值] [描述字符串1]
13 - +[属性值] 致 [某角色] 技能等级
14 - +[属性值] 致 [某单系技能] (限 [某角色] 使用)
15 – [某事件]时有 [几率]% 施展等级 [技能等级] [技能]
16 – 等级 [技能等级] [技能] 灵气于装备后获取
17 - [属性值] [描述字符串1] (当 [某时间] 时)
18 - [属性值]% [描述字符串1] (当 [某时间] 时)
19 – 此语法被用作暴雪的打印执行方案,例如游戏中文字的各种色彩,其格式就出自这里
20 - [属性值 * -1]% [描述字符串1]
21 - [属性值 * -1] [描述字符串1]
22 - [属性值]% [描述字符串1] [怪物种类] (该语法存在bug,不能正确显示其相应内容)
23 - [属性值]% [描述字符串1] [某怪物]
24 – 用于聚气技能,相信其语法大家都很清楚了
25 – 未用到,尚未测试其具体语法
26 – 未用到,尚未测试其具体语法
27 - +[属性值] 致 [某技能] (限 [某角色] 使用)
28 - +[属性值] 致 [某技能]

DescVal:控制着该属性的属性值是否显示于游戏中,0 = 不显示,1 = 显示于描述文字之前,2 = 显示于描述文字之后

DescStrPos:当属性值是正值时,使用这里的字串作为描述

DescStrNeg:当属性值是负值时,使用这里的字串作为描述

DescStr2:一些DescFunc所要用到的额外的字串(描述字符串2),常见于一些较为复杂的词缀,如按角色等级加X,等等

dGrp:属性分组标志:当该组的所有属性出现在同一个物品上并且各个属性拥有同样数值的时候,游戏将显示其整体的组文字描述,以取代这些分别显示的属性

dGrpFunc:与DescFunc列作用相同,用于属性组的描述

dGrpVal:与DescVal的作用相同,用于属性组的描述

dGrpStrPos:与DescStrPos的作用相同,用于属性组的描述

dGrpStrNeg:与DescStrNeg的作用相同,用于属性组的描述

dGrpStr2:与DescStr2的作用相同,用于属性组的描述

Stuff:该列用于生成bin文件时为OpStat以及其他一些属性提供缓存,改变这列值起不到什么效果,类似于MonUMod.txt中的Constants列;文件中的第一个属性必须在此处有设定的非零值,不然整个Op缓冲区将崩溃;基于以上的原因,最好不要修改这列的值,它们与ItemStatCost.txt文件一点关系都没有……

admin 发表于 2020-1-15 01:51:56

ItemTypes.txt      By Nefarius

ItemType:注释列,用以说明物品类型的名称;虽然仅仅是注释,因此你可以随意填写,但一般来说不建议挪为它用

Code:物品类型的ID指针,被许多txt用于指明物品的类型(Armor.txt,Weapons.txt,Misc.txt,Skills.txt,CubeMain.txt,TreasureClassEx.txt),具有唯一性;ID指针是一个长度为3-4字符的字符串,允许使用数字、字母及标识符

Equiv1-Equiv2:用于定义物品类型的母类,同一个物品类型可以拥有多个母类(如附图所示),但这里应当尽量避免出现无限循环,出现物品类型循环的后果目前不详,但无限循环是任何时候都应当避免的事


关于物品分类的图

Repair:布尔函数,1 = 商人可以对该物品类型进行修理,0 = 不可以;这一标志同样会对聚气技能的修复造成影响

Body:布尔函数,1 = 该物品类型可以装备在人物身上,0 = 仅可放置于物品栏/赫拉迪克方块/储存箱中(如果其Beltable列值为1的话也可以放在腰带格子里)
BodyLoc1-BodyLoc2:当前一列值为1时,该物品类型可装备在人物身上的具体位置,这里的值引自BodyLocs.txt中的代码

Shoots:该物品类型(在这里指的是武器)可发射的弹药类型
注意:检测发射出的Missile类型(如箭矢、十字弓弹、魔法箭、爆裂箭等)的代码隐藏在D2Common.dll深处
Quiver:和前一列相似,表示该物品类型(在这里指的是弹药)所匹配的武器类型,与上一列应当是相吻合的

Throwable:该物品类型可否被投掷(这里可以决定武器是否有数量属性及是否在游戏中显示其投掷伤害,等等)

Reload:该物品类型可否通过掉落或其他方式来重新堆放,1 = 可以,0 = 不可以
ReEquip:弹药用完后,游戏可否自动装备上物品栏中的同类弹药,1 = 可以,0 = 不可以
AutoStack:游戏是否会将捡起来的该类型物品自动堆放到原有的同类物品上(例如捡起投掷药剂时,会自动叠加到已有的药剂数量上),1 = 可以,0 = 不可以;

Magic:该物品类型是否始终是魔法物品,1 = 是,0 = 否
Rare:该物品类型可否出现黄金物品,1 = 可以,0 = 不可以(如果想要某类物品仅存在魔法或黄金形态,这里也应当设置为1)
Normal:该类物品是否只有普通形态,1 = 是,0 = 否

Charm:该类物品是否拥有护身符功能,1 = 是,0 = 否(护身符功能的代码是固定的,因此要想添加新的护身符类型,就必须使用char为其母类)
Gem:该类物品可否镶嵌进凹槽中,1 = 可以,0 = 不可以
Beltable:该类物品可否放置于腰带栏中,1 = 可以,0 = 不可以(实现这项功能还需要在其他txt文件中进行一些修改)

MaxSock1,MaxSock25,MaxSock40:分别是该类物品在等级为1-24,25-39,40+时所能获得的最大孔数,物品的孔数范围是硬代码规定的,但代码位置是已知的,因此你可以任意修改孔数范围;另外,普通难度的怪物最多可掉落3孔物品,噩梦难度最多可掉落4孔物品,地狱可掉落6孔物品,这个掉落规则与这三列的值无关

TreasureClass:该物品类型的ID指针可否被用于TreasureClassEx.txt文件中的自动TC,例如armo3-99,weap3-99等,1 = 可以,0 = 不可以

Rarity:未知参数,可能被用于控制装甲/武器架上掉落各种装甲/武器的几率,如果和其他Rarity列的意义相近的话则其计算公式为个体Rarity/总体Rarity

StaffMods:该物品类型上可能获得+某角色技能的角色类型代码(例如法杖上可以加死灵法师的技能,这里填nec),对于低品质物品、套装物品和暗金物品无效;这里使用的是各个角色类型的代码对应其技能ID的取值区间,因此如果增加了新的角色技能,则需要利用AutoMagic.txt文件实现此功能

CostFormula:游戏将根据该类物品上的属性来计算其买入/卖出/修理价格,还是直接按照txt文件中规定的物品价格;2 = 用于各种器官(其价钱可能与掉落器官的单位有关,游戏中未使用该类型的物品),1 = 根据属性计算,0 = 直接按照txt文件中的规定;这里仅用于非套装或暗金物品,套装或暗金物品的价钱取决于其基础物品在txt文件中规定的价格,以及在有关套装或暗金物品的txt中规定的价格加成;该列的确切功能仍然未知,例如护身符的该列值为0

Class:可以使用该物品的角色代码(仅用于角色专用物品)

VarInvGfx:该类物品可随机选取的物品栏图像文件的数量

InvGfx1-6:该类物品可随机选取的各个物品栏图像文件名称,因此如果这里的1-3列均填入了相关文件,则VarInvGfx列值就应当是3

StorePage:商人出售该类物品时会将其放置的交易页面代码,目前的代码是,武器页1-2 = weap,装甲页 = armo,杂物页 = misc

*EoL:行结束符,一般填入0以保证MS Excel能够顺利查看并编辑该txt文件

admin 发表于 2020-1-15 01:52:36

Levels.txt                By Nefarius & Kingpin

前言:本文件用于控制游戏中各场景的连接,以及在这些场景中出现的怪物和一些实物

相关txt文件:
该文件将用到的txt文件有:
·LvlMaze.txt
·LvlPrest.txt
·LvlSub.txt
·LvlType.txt
·MonStats.txt
·AutoMap.txt
·LvlWarp.txt
·ObjGroup.txt

各列功能说明如下:

Name:该列仅作为注释,用以辨别各场景名称

ID:场景的ID,用于其他列中(例如VIS0列-VIS7列)

Pal:该场景所加载的颜色,此列可以随意更改,不过大多数更改后的颜色都比较难看

Act:该场景所处哪一幕(此处填写各幕的内部代码,0-4)

QuestFlag:仅用于D2原版游戏中,作为任务标志位:如果在这里置某任务ID,则角色必须完成此ID所对应的任务才能进入通往该场景的传送门;但角色从该场景回城不受限制

QuestFlagEx:用于D2资料片游戏中,其功能与前一列相同

Layer:每个地层都有其独特的ID,这个数字用于存放各角色的自动地图信息;游戏用它来记录各个场景所对应的自动地图;(要想增加更多的地层则需要扩展场景的插件来实现)

SizeX:普通难度下该场景地图的X向尺寸;假如该场景并非预置场景,则使用这个值作为该场景普通难度下的X向尺寸,否则游戏将读入LvlPreset.txt文件的SizeX值以设定该场景地图ds1文件的尺寸

SizeY:普通难度下该场景地图的Y向尺寸;假如该场景并非预置场景,则使用这个值作为该场景普通难度下的Y向尺寸,否则游戏将读入LvlPreset.txt文件的SizeY值以设定该场景地图ds1文件的尺寸

SizeX(N):噩梦难度下该场景地图的X向尺寸;假如该场景并非预置场景,则使用这个值作为该场景普通难度下的X向尺寸,否则游戏将读入LvlPreset.txt文件的SizeX值以设定该场景地图ds1文件的尺寸

SizeY(N):噩梦难度下该场景地图的Y向尺寸;假如该场景并非预置场景,则使用这个值作为该场景普通难度下的Y向尺寸,否则游戏将读入LvlPreset.txt文件的SizeY值以设定该场景地图ds1文件的尺寸

SizeX(H):地狱难度下该场景地图的X向尺寸;假如该场景并非预置场景,则使用这个值作为该场景普通难度下的X向尺寸,否则游戏将读入LvlPreset.txt文件的SizeX值以设定该场景地图ds1文件的尺寸

SizeY(H):地狱难度下该场景地图的Y向尺寸;假如该场景并非预置场景,则使用这个值作为该场景普通难度下的Y向尺寸,否则游戏将读入LvlPreset.txt文件的SizeY值以设定该场景地图ds1文件的尺寸

OffsetX:此值用于设定该场景在整个世界地图上的X坐标

OffsetY:此值用于设定该场景在整个世界地图上的Y坐标

Depend:此值用于设定依存于该场景的场景ID,例如僧院大门始终坐落在外侧回廊的入口

Teleport:此值用于控制该场景是否允许传送:0 = 不允许,1 = 允许,2 = 允许,但不能隔着墙/某些实物进行传送,关于这些实物的定义在Objects.txt中的IsDoor列

Rain:该场景是否总是下雨/下雪,1 = 是,0 = 否,下雪的特效仅作用于第五幕

Mud:无用参数(以前的D2测试版中暴雪曾试图做一些下雨时的泥土溅射效果以使角色行动速度变慢,但最终未施行),该列值仍旧读入代码,但其返回值并未起作用

NoPer:在3D模式的D2中,该场景是否允许透视图效果,1 = 不允许,0 = 允许

LOSDraw:角色是否能够看到非野外场景中实物和墙背后的东西,1 = 允许,0 = 不允许

FloorFilter:可能用于一些装饰物的贴图及其布设方案,相关函数未知,1 = 是,0 =否

BlankScreen:可能用于一些装饰物的贴图及其布设方案,相关函数未知,1 = 是,0 =否

DrawEdges:用于是否构造此场景边缘与山脉/墙壁相接壤的图像,1 = 是,0 = 否

IsInside:该场景是否室内场景,1 = 是,0 = 否,室内场景没有因白天黑夜等因素所制造出的特效(始终使用同样的光照设置),此设置也对于支持各种音效的声卡开启时,产生的环绕效果和是否有回声音效起作用

DrlgType:该场景的生成设置:1 = 随机迷宫模式,有多少间屋子则取决于LvlMaze.txt(各房间大小总和或许会超过世界地图分配给该场景的大小);2 = 预置场景地图(例如地下墓穴第四层的地图);3 = 固定该场景尺寸,但产生随机场景地图(如各种野外地图)

LevelType:该场景的种类(引自LvlTypes.txt中的ID)

以下与区域(Sub)有关的列所用到的ID取自LvlSub.txt,LvlSub.txt用于一些随机分布的室外场景特效,例如鲜血荒地里生成的水坑和石块旷野里会生成很多石块,这些都是可以更改的,其他有关Sub列的内容请参见其他资料
SubType:一些关于场景种类的设定:6 = 野外,9 = 沙漠等等,-1 = 无区域种类

SubTheme:该场景使用何种区域主题,-1 = 无区域主题

SubWaypoint:该场景小站的样式,这里并不能控制小站的位置

SubShrine:该场景出现的神殿的样式,这里并不能控制神殿出现的位置

Vis0-7:于服务器端控制与该场景相接的场景ID,使用哪一个Vis列来定义则取决于各场景之间连接处的修饰方法,例如各个洞穴之间的连接使用Vis0-3,而野外场景之间使用Vis4-7

Warp0-7:控制当你的鼠标指向场景间的连接处时,系统所调用的视觉图像;使用图像的ID填写在这里,引自LvlWarp.txt,而具体图像如何显示则由LvlWarp.txt文件定义;此处使用的WarpX应与前面的VisX相匹配(前面使用Vis0,此处也应当使用Warp0)

Intensity:光照亮度:0-255之间的值

Red,Green,Blue:这三列用以定义该场景的色度(RGB模式),2D模式下也有效

Portal:这里用于一些特殊场景的设置,对于某些场景,如果此值不设为1的话,则进入时会导致游戏崩溃;这里也被一些扩展地图的插件用来生成多个此类场景

Position:这里用于控制该场景是否支持传送门的重定位:1 = 可以改变传送门的位置(此时游戏将调用76#地图入口或者79#城镇传送门定位,如果该场景中两者都可用,则游戏将使用后者),0 = 不可改变传送门位置

SaveMonster:游戏是否会在玩家不在场后仍保留该场景的怪物状态,1 = 会,0 = 不会(所有城镇都置为0,这样出城再进城的话NPC处所买卖的东西就将重新生成)

Quest:该场景涉及的任务ID(例如邪恶洞窟这里的值就是其关联的任务ID = 1)

WarpDist:此列规定了该场景中产生的怪物、各种实物以及装饰物与其和其他场景地图连接处之间的最小距离(也包括小站以及一些其他的传送点)

MonLvl1:普通难度下该场景的等级(决定了此处的箱子/石块等掉出的物品的等级)
MonLvl2:噩梦难度下该场景的等级(决定了此处的箱子/石块等掉出的物品的等级)
MonLvl3:地狱难度下该场景的等级(决定了此处的箱子/石块等掉出的物品的等级)

MonLvl1Ex:D2资料片中,普通难度下该场景的等级(决定了此处的箱子/石块等掉出的物品的等级)
MonLvl2Ex:D2资料片中,噩梦难度下该场景的等级(决定了此处的箱子/石块等掉出的物品的等级),如果MonStats.txt中NORATIO列值为0,则除了MonStats.txt中Boss列为1的怪物,该场景中生成的其余怪物的等级也是这个值
MonLvl3Ex:D2资料片中,地狱难度下该场景的等级(决定了此处的箱子/石块等掉出的物品的等级),如果MonStats.txt中NORATIO列值为0,则除了MonStats.txt中Boss列为1的怪物,该场景中生成的其余怪物的等级也是这个值

MonDen:此列是在普通难度下的怪物密度,表示该场景某处生成怪群的几率,该值以1/100000计数,在1.10及以上版本中此处最大值为10000,即1/10的几率
MonDen(N):此列是在噩梦难度下的怪物密度,表示该场景某处生成怪群的几率,该值以1/100000计数,在1.10及以上版本中此处最大值为10000,即1/10的几率
MonDen(H):此列是在地狱难度下的怪物密度,表示该场景某处生成怪群的几率,该值以1/100000计数,在1.10及以上版本中此处最大值为10000,即1/10的几率

MonUMin,MonUMin(N),MonUMax(H):这三列分别表示普通/噩梦/地狱难度下该场景出现的冠军级/金怪的最小数量,同时也要受到MonDen列的限制
MonUMax,MonUMax(N),MonUMax(H):这三列分别表示普通/噩梦/地狱难度下该场景出现的冠军级/金怪的最大数量,同时也要受到MonDec列的限制

MonWndr:此列用以设置是否允许未被激活的怪物四处走动,或者说是否所有未被激活的怪物都会保持静止状态,除非其被激活,0 = 未被激活不可以走动,1 = 可以

MonSpcWalk:这项设置已经由硬代码对各个场景ID做出了硬性规定,例如假如把火焰之河这里的值设定为1,则出于某种原因将导致游戏出错,所以请不要随意编辑它,不过目前还不清楚其具体的含义

NumMon:此列规定了该场景中能够生成多少种不同类型的怪物,最大允许值为13;在噩梦和地狱难度一个场景最多能同时生成的13种不同类型的怪物是从NMon1-NMon25列中随机选取的;而在普通难度,对于普通怪物而言,这13种将于Mon1-Mon25列中随机选取,而13种冠军级/金怪则从UMon1-UMon25中随机选取

Mon1-Mon25:仅作用于普通难度,这里的值引自MonStats.txt中的怪物ID,场景生成普通怪物时将从这里列出的怪物中随机选取;正常的txt文件中仅显示前10列,在1.10及以上版本中你可以自行扩展后15列以供使用

RangeSpawn:该列于MonStats.txt中的RangeType列有关,噩梦和地狱难度下,游戏在选取生成怪物时会考虑到这个值,并指向MonStats.txt中怪物的RangeType列,但具体作用仍然未知

NMon1-NMon25:仅作用于噩梦/地狱难度,这里的值引自MonStats.txt中的怪物ID,场景生成怪物时(包括普通怪物和冠军级/金怪)将从这里列出的怪物中随机选取;正常的txt文件中仅显示前10列,在1.10及以上版本中你可以自行扩展后15列以供使用

UMon1-UMon25:仅作用于普通难度,这里的值引自MonStats.txt中的怪物ID,场景生成冠军级怪物/金怪时将从这里列出的怪物中随机选取;正常的txt文件中仅显示前10列,在1.10及以上版本中你可以自行扩展后15列以供使用

CMon1-CMon4:家畜种类1-家畜种类4,这里的值引自MonStats2.txt中的ID,在MonStats2.txt中Critter列值为1的生物才会在此出现;家畜类生物仅在游戏客户端真实存在
CPct1-CPct4:控制某种家畜出现的几率
CAmt1-CAmt4:未知参数,这几列在编译时会出现bug,在txt编译成bin文件时,系统会用第1列的数据覆盖3-4列的内容,

Themes:未知函数,或许是该场景所使用的主题;该列内容为代码所使用,但不知道其确切用途……

SoundEnv:引自SoundEnviron.txt文件的ID值,与场景音乐有关

WayPoint:255 = 无小站,其他数值则是此处小站的ID(用此列值即可修改各小站所能到达的目的地,但不能将某小站从一幕移动到另一幕)

LevelName:用于显示场景名称的字符串
LevelWarp:用于显示进入某场景字样的字符串
EntryFile:当进入某场景时游戏加载何种DC6修饰图样,这里填写的文件必须是真实存在的,否则当进入某场景时游戏会出错(对于expansion行之后的场景,其对应的文件必须放在资料片(expension)文件夹下)

ObjGrp0-7:本场景所生成的实物组,引自ObjGroups.txt中的ID
ObjPrb0-7:该实物在本场景生成的几率(与前面的ObjGrp0-7对应,即假如使用了ObjGrp0,则这里的ObjPrb0列也得写入一个几率值),该值范围为0-100

Beta:参考列,仅作注释用

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

LvlMaze.txt        By Myhrginoc

前言:
本文件控制着地下场景中的房间(ds1)数量及每个房间的大小
用到的文件:
Levels.txt

Name:描述列,仅作注释,通常这里填入场景名称(Levels.txt文件中的名称)

Level:Levels.txt中的ID;其中Cave 1就是邪恶洞窟,Cave 1 Treasure行的Level值与任务相关联,因此唯有这一行的Level留空

Rooms:普通难度下地下场景地图中ds1的最小数量
Rooms(N):噩梦难度下地下场景地图中ds1的最小数量
Rooms(H):地狱难度下地下场景地图中ds1的最小数量

SizeX:每部分ds1地图文件的X向尺寸
SizeY:每部分ds1地图文件的X向尺寸

Merge:可能与相邻的ds1之间如何连接有关,但不同的值代表何种含义目前仍未知

Beta:无用列

admin 发表于 2020-1-15 01:53:17

LvlPrest.txt        By Xenast


Name:场景名称,仅作注释用

Def:于自动地图相关,必须是连续的数值

LevelID:场景在Levels.txt文件中的ID,如果该场景所对应的ds1文件并非预置好的,则此处留空

Populate:布尔函数,怪物是否生成于这个ds1文件上,0 = 不生成,1 = 可生成,这里主要用于特殊迷宫场景的某些房间,例如进/出口所在的房间,等

Logicals:布尔函数,1 = 墙壁可以透视,0 = 不可透视

Outdoors:布尔函数,1 = 调用室外ds1文件,0 = 调用室内ds1文件

Animate:布尔函数,动画修饰文件是否在此处允许其正常播放动画,1 = 允许

KillEdge:布尔函数,是否切除游戏中该ds1文件的东南角部分,1 = 切除

FillBlanks:布尔函数,1 = 所有空白地图块都不允许角色行走

SizeX:地图的X向大小,对于预置场景此处设置为0,因为预置场景的大小定义于Levels.txt文件
SizeY:地图的Y向大小,对于预置场景此处设置为0,因为预置场景的大小定义于Levels.txt文件

AutoMap:布尔函数,是否显示该场景的整体地图,1 = 是,0 = 否,仅对预置场景有效

Scan:布尔函数,设置为1即允许场景出现一些扭曲

Pops:见附录
PopPad:见附录

Files:该场景地图可出现样式的数量,基于File1-File6中填写的ds1文件

File1-File6:该场景ds1文件的路径,填入0意味着文件不存在

Dt1Mask:以二进制数字的形式告诉游戏使用LvlTypes.txt文件中的哪个贴图文件

Beta:注释列,无用
Expansion:注释列,无用

关于Pops和PopPad:
Pops代表Style值(主ID)为8-29的特殊图样类型,它们从地图上移除其指定的某一类元素,并以其他图层的贴图文件来取而代之
·被移除的图样的主ID值(Style值)取决于地图图样的修饰ID(Sequence值),例如墙壁、地板或者屋顶贴图等
·为实现以上功能,游戏会在将被移除的图域周围,用两个“Pop图块”绘制出一个方形区域
·LvlPrest.txt文件中的PopPad列定义了触发Pop图块出现的那条线,亦即,Pop图块出现的触发线距离屏幕左下角的地图块数量
·每个Style的Pop图像都具有唯一性,即,如果某Style的Pop图像在同一场景中出现了两个或者更多,那么其显示会出问题,所以如果想要某个场景中出现多个Pop图像,那么每一对Pop图块都必须使用不同的Style(主ID)
注意:设置Pops和PopPad列的值时,最好参考现有的用到这两列值作为修饰dt1文件的ds1文件,以保证做出恰当的选择

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

LvlSub.txt   ByI_only_pressed_ESC Name:参考列,仅作注释 Type:修饰图像的类型,用于Levels.txt中的SubType列,文件中有些行的Type值是一样的,这些Type值相同的行可以编为一组,如果我们从第0组开始对这些行逐个分析,会发现其实Levels.txt文件中的SubTheme,SubWaypoint,SunShirne列的值也引自这里 File:修饰图像使用的ds1文件 Expansion:0 = D2原版,1 = D2资料片 CheckAll:未知参数,所有行都为0 BordType:可填-1,0,1或者2;0,1,2用于与墙有关的类型,-1用于与墙无关的类型 GridSize:填1或者2,这里可能是用于说明最终修饰图像的尺寸,例如4*4等,详细分析参照附录 Dt1Mask:对于某些行来说,这里代表的是修饰图像出现的地点,即在LvlTypes.txt文件中定义的场景名称;这里的dt1修饰文件也包含了该场景中用于修饰Floor.dt1的文件 Prob0:dt1修饰图像出现的几率、Trials0:修饰图像包含的地图块数量Max0:修饰图像包含的地图块最大值Prob1,Trials1,Max1这些列与上述三列功能相同 Beta:0或1 附录:以下是游戏利用LvlSub.txt文件实现地图修饰图像的具体方法:在每个场景里布置几“组”修饰图像的地图块,就是说,假如游戏准备在某处放置1个修饰图像,那么最终我们会看到,该图像包含了许多地图块该修饰图像的稀有度是由ProbX列决定的,这个值越高,修饰图像出现于场景中的几率越大;但这些图像是最先被放置的,它们有可能被后来的ds1文件所覆盖,例如沉沦魔营地等;因此不要填写过低的ProbX值,否则最终可能会看不到想要的修饰图像 修饰图像中的图块数量是由TrialsX的值决定的,但MaxX决定了它的上限,因此最好不要让TrialsX小于MaxX;游戏选择的方式是这样的:首先在1到TrialsX之间选取一个随机数,之后再在这个随机数与MaxX之间取较小者因此TrialsX大于MaxX将使游戏更容易选择出较多的图块,例如:TrialsX = 4,MaxX = 4,则修饰图像仅含1个图块的几率为25%,2个的几率为25%,3个的几率为25%,4个的几率还是25%;TrialsX = 6,MaxX = 4,则修饰图像仅含1个图块的几率为50%,2个的几率为17%,3个的几率为17%,4个的几率也是17%(不精确) 最后,如果想让修饰图像的数量少些,但每个修饰图像包含的图块数量多些,那么应作的设置就是将ProbX值设小些,将TrialsX和MaxX值设大些;如果想要图像散布在地图各处,那么可将ProbX值设大些,将TrialsX和MaxX值设小些

admin 发表于 2020-1-15 01:53:49

Magic Prefix/Suffix.txt        By Nefarius


Name:此处控制游戏中对各个词缀显示的字符串,但AutoMagic.txt中的Name列无用

Version:表示该词缀是否可以出现在D2原版游戏中
·0 = 1.08版之前的词缀(当前版本读入1.08版之前的游戏时会用到)
·1 = 1.08版之后的词缀,可用于D2原版或者资料片
·100 = D2资料片专用词缀(仅限D2资料片使用)

Spawnable:布尔函数,控制该词缀是否可以附加于魔法或黄金物品上,0 = 不可以,1 = 可以;即使通过合成公式也无法使此处为0的词缀出现

Rare:布尔函数,该词缀是否可以附加于黄金物品上,1 = 可附加于黄金或魔法物品,0 = 仅可附加于魔法物品

Level:词缀的品质等级(QLvl);物品上能够出现多高QLvl的词缀,要取决于物品的等级(ILvl)以及物品的魔法等级(MagicLv,定义于Weapons.txt、Armor.txt和Misc.txt中的MagicLvl列);物品等级决定于掉落它的怪物等级或者角色等级(仅对赌博、商店购买或者合成物品)等等

MaxLevel:一个非常有用的参数,但未被好好利用:该列与Level列共同作用,用以定义何种物品可以出现该词缀;例如某词缀的Level=10,MaxLevel=15,则该词缀仅可出现于物品等级为10-15的物品上(不考虑MagicLvl的作用),在物品等级为1-9或16-99的物品上均不可能出现;这可以很好的避免一些无价值词缀出现在高等级的物品上

LevelReq:角色使用某带有此词缀的物品所需的最低人物等级

ClassSpecific:可以使用该词缀的角色类型

Class:该词缀为哪一类角色提供特殊等级需求

ClassLevelReq:该词缀为Class列中的角色提供的特殊等级需求,即对于Class列中规定的角色类型,必须达到此处设定的等级才能使用带有该词缀的物品

Frenquency:与其它文件中的Rarity列作用相同,用以控制词缀组中的某一词缀出现于物品上的几率;D2原版中游戏只是简单的在各词缀中随机选取,到了1.08之后的版本,游戏开始使用这里的设置;假如某词缀组中有5个词缀,其Frequency值分别为1,5,10,50和100,则选中这5个词缀的几率分别为1/166,5/166,10/166,50/166和100/166;此列值的取值范围是0到255,0将使得该词缀无法出现

Group:该词缀所属的组,同一物品上不可能出现多个同属一个组的词缀(你可以将分属MagicPrefix.txt,MagicSuffic.txt和AutoMagic.txt三个文件的词缀编为一组,这样的话也会达到同组词缀不同时出现的效果);留空表示该词缀被编组的组号码为0

Mod1Code-Mod3Code:该词缀的属性,引自Properties.txt中的ID指针

Mod1Param-Mod3Param:于其前一列相对应的各属性的参数,至于何种属性将使用何种参数请参考Properties.txt文件

Mod1Min-Mod3Min:分别对应各属性的最小值,具体含义请参考Properties.txt文件

Mod1Max-Mod3Max:分别对应各属性的最大值,具体含义请参考Properties.txt文件

Transform:布尔函数,控制该词缀是否会使其附加的物品改变颜色,1 = 会,0 = 不变色

TransformColor:表示该词缀会使其附加的物品变为何种颜色,仅当前一列为1时起作用;这里的值引自Colors.txt文件中的ID指针

iType1-iType7:表示该词缀可附加的物品类型,引自ItemTypes.txt中的ID指针;这里填写的母类型均支持其子类型的继承

eType1-eType5:表示该词缀不可附加的物品类型,引自ItemTypes.txt中的ID指针;这里填写的母类型均支持其子类型的继承

Divide:本意是该词缀出现于某物品上时对其物品价格的除数因子,以1/1024为单位,亦即512等于50%原始价格;但这里无用

Multiply:本意是该词缀出现于某物品上时对其物品价格的百分比增量,以1/1024为单位,亦即1024等于100%原始价格;但这里无用

Add:该词缀出现于某物品上时对其物品价格的增量

admin 发表于 2020-1-15 01:54:19

Misc.txt        By Kingpin & Ric Faith

前言:
Armor.txt,Misc.txt,Weapons.txt三者有许多共同之处。原因是它们事实上只是一个大文件的三个小部分:游戏在读取它们的时候会将三者合而为一,全部列入一个大型表格里。这三个文件涵盖了所有游戏中的基础物品类型:普通/扩展/精华级的装甲、头盔、手套、盾牌、武器;以及各种药剂、宝石、钥匙、卷轴等等……

因此,我们完全可以往这三个文件中添加一些列。例如把Transmogrify、TMogType、TMogMin和TMogMax四列添加到Armor.txt里面(这四列原本只在Misc.txt中),并且让某种头盔使用这四列的取值,那么这种头盔就可以变成其他物品的模样。乍看上去这似乎是不可能做到的,因为起初在Armor.txt中并无可实现此功能的这四列。

注意:要想往某个txt文件中加入列,请勿使用D2Excel工具,D2Excel无法实现此功能。请使用MS Excel或者其他能够识别并输出以Tab制表符分界的电子表格的工具。

本文件需要用到的txt文件有:
·AutoMagic.txt
·Belt.txt
·Composit.txt
·ItemTypes.txt
·Missiles.txt
·Sound.txt

本文件将在以下文件中被引用:
·CharStats.txt
·CompCode.txt
·CubeMain.txt
·SetItems.txt
·UniqueItems.txt
·……

各列功能说明如下:

Name:物品参考名称,仅作注释用
*Name:物品参考名称,仅作注释用

SzFlavorText:未知参数

Compactsave:1 = 压缩存档,0 = 不压缩存档。所谓压缩存档是用来获取较小的存档文件,同时也意味着关于物品的属性:诸如数量、魔法词缀、伤害、防御、耐久度等等,将不被保存(压缩存档一般仅用于一些无须属性的物品例如治疗药剂、各阶宝石等)

Version:0 = D2原版,100 = D2资料片(置为100的物品将无法在D2原版中出现)

Level:基础物品等级(亦即物品品质等级——QLvl),被用于建立诸如weapXX、armoXX等财宝阶层(TC),以免任何怪物都可以掉落所有物品,例如:一个TC等级为20的怪物无法掉落一件包含于TC = armo30中的30级装甲

Levelreq:使用该物品所需的最低人物等级

Rarity:在Misc.txt中是无用参数

Spawnable:0 = 无法由NPC出售,1 = 可以由NPC出售

Speed:正值 = 减慢行走/跑步速度值,负值 = 增加行走/跑步速度值

Nodurability:是否无耐久物品,1 = 无法破坏物品(无耐久),0 = 有耐久度

Gamble Cost:赌博价钱的默认值,仅对于戒指和项链起作用

Code:由3位字母/数字组成的代码,每样物品对应一个且不得重复;不必将其写入TBL文件

Alternategfx:人物动画所使用的DCC文件代码,详见Armor.txt文件引导

Namestr:物品的代码/名称,如果这里的字串并未出现在TBL文件中,则此字串将直接作为物品的名称;反之,则使用TBL文件中此字串所对应的名称;但如果需要显示空格的话,使用TBL文件是唯一的途径

Component:该物品装备在人物身上时,游戏所使用的图层(引自composit.txt中);取值为0-15,16表示不使用任何图层,详见Armor.txt文件引导

Invwidth:该物品在物品栏中占用的宽度格数
Invheight:该物品在物品栏中占用的高度格数

Hasinv:该物品是否可以拥有孔,以镶嵌入宝石/符文,1 = 可以打孔,0 = 不能打孔
Gemsockets:该物品上可能出现的最大孔数,但一件物品不可能拥有多于其物品栏占用格子数量的孔数
另外,ItemType.txt中还有三个根据物品等级高低限制其孔数的列——MaxSock1、MaxSock25、MaxSock40
Gemapplytype:镶嵌物镶嵌进此物品后所获得的效果,0 = 武器,1 = 装甲/头盔,2 = 盾牌(其他值将使物品上无法出现孔)

Flippyfile:物品掉落时的动画文件
Invfile:物品栏里的图像文件
Uniqueinvfile:暗金物品所使用的物品栏图像文件

Special:无用参数,仅作注释用

Transmogrify:该物品是否可以在游戏中通过右键点击变成另外的物品
TMogType:3位字母/数字组成的物品代码,代表右键点击后会变成的物品
TMogMin:右击后变成的物品最小数量
TMogMax:右击后变成的物品最大数量

Useable:是否可以右键单击该物品以使用:1 = 可以,0 = 不可以

Throwable:无用参数;其本意是决定该物品是否能够投掷:1 = 可以,0 = 不可以;但这个功能定义于ItemTypes.txt中

Type/Type2:物品的基础类型,主要用于合成公式、物品镶嵌物等;引自ItemTypes.txt中的Code列

Dropsound:物品掉落时的声音,引自Sound.txt中的Sound列
Dropsfxframe:物品掉落声音播放的桢数
Usesound:当物品装备上或者在物品栏里放下时的声音,引自Sound.txt中的Sound列

Unique:1 = 仅存在暗金形态,0 = 无约束;这列多用于仅允许暗金形态出现的任务物品,假如某非任务物品的此列为1,那么该物品将只能出现暗金形态

Transparent:未知参数

Transtbl:未知参数

Lightradius:无用参数

Belt:0 = 无法被放置于腰带栏,1 = 可以被放置于腰带栏

Autobelt:当捡起该物品时,是否自动被放入空腰带中

Stackable:该物品能否多个叠放成堆:1 = 可以,并有数量属性,0 = 不可以
Minstack:一堆该物品的最小数量
Maxstack:一堆该物品所能拥有的最大数量
Spawnstack:当该物品随机出现时,一堆的数量

Quest:专门为任务物品定义的硬代码ID;任务物品一次只能携带一件且无法交易给NPC
Questdiffcheck:该物品是否通用于所有难度;值为1,则该物品将仅在其出现的难度适用;此列仅出现于Misc.txt和Weapons.txt中

Missiletype:投掷该物品的话出现的飞射物种类,引自Missiles.txt中的ID列

Spellicon:人物使用该物品时所使用的技能图标

pSpell:控制该物品的右键点击效果,简介如下:
1 – 辨识物品
2 – 打开传送门
3 – 补充一定量的生命/法力
4 – 未知
5 – 补充一定百分比的生命/法力
6 – 改变人物状态
7 – 打开赫拉迪克方块
8 – 提升人物某属性上限
9 – 给予人物某特殊属性

State:该物品使用后,人物将具有的状态,引自state.txt中的state列
Cstate1:该物品可以解除的人物状态一,引自state.txt中的state列
Cstate2:该物品可以解除的人物状态二,引自state.txt中的state列

Len:该物品使用后效果的持续时间
Stat1:该物品使用后人物获得的属性一,引自ItemStatCost.txt中的Stat列
Calc1:Stat1的数值
Stat2:该物品使用后人物获得的属性二,引自ItemStatCost.txt中的Stat列
Calc2:Stat2的数值
Stat3:该物品使用后人物获得的属性三,引自ItemStatCost.txt中的Stat列
Calc3:Stat3的数值

Spelldesc:0 = 无功能描述字串,1 = 仅使用Spelldescstr列值作为描述字串显示在游戏中,2 = 使用Spelldescstr和Spelldesccalc两列值共同形成功能描述字串显示出来
Spelldescstr:该物品在游戏中显示的描述字串,存在于TBL文件中
Spelldesccalc:显示该物品的属性数值于描述字串中所需的计算式

Durwarning:耐久警报图标出现的临界值,当物品耐久度低于或等于这个值时,警报图标将出现在屏幕上
Qntwarning:数量警告图标出现的临界值

Gemoffset:此列作为保留位,游戏加载时将自动填充,用以链接可打孔的物品及其相应的Gems.txt文件中的内容;不过假如这里事先填写一个非零值的话,游戏是否允许这里出现双重值仍旧存疑

BetterGem:仅用于各阶宝石,提供该阶宝石的升级版代码,以用于宝石神殿/合成公式升级,non = 没有升级版

Bitfield1:主要用于区分不同材质的物品,目前已知的是:1 = 皮革制,3 = 金属制

以下列用以控制不同的商人出售不同的物品,这里以Vendor来泛指Charsi、Gheed、Akara、Fara、Lysander、Drognan、Hratli、Alkor、Ormus、Elzix、Asheara、Cain、Halbu、Jamella、Larzuk、Malah、Drehya这些商人
VendorMin/VendorMax:某商人所能出售的该物品最小/最大数量,这里填写的数字过大将导致游戏因无法显示过多的物品而崩溃
VendorMagicMin/VendorMagicMax:某商人所能出售的该种魔法物品最小/最大数量
VendorMagicLvl:该物品所能获得的最高魔法词缀等级

Source Art:无用参数
Game Art:无用参数

Transform:有关该物品的动画所使用的颜色
InvTrans:该物品在物品栏中所使用的颜色

SkipName:控制游戏是否不显示该物品的基础名称,例如用于蝮蛇护符,则游戏不会显示两次“蝮蛇护符”字样

NightmareUpgrade/HellUpgrade:在噩梦/地狱难度商人将使用此处代码对应的物品来取代原物品,xxx = 不变

Mindam/Maxdam:该物品所具备的最小/最大伤害值

PermStoreItem:用来控制物品是否始终在NPC处有出售:1 = 始终出售,0 = 不一定

MultiBuy:显示于商人货架的该物品是否可以一次购买多个,1 = 可以,0 = 不可以

Nameable:用于安亚任务奖励,控制该物品是否能够被个人化:1 = 可以,0 = 不行

*EoL:行结束符

admin 发表于 2020-1-15 01:54:39

Missiles.txt        By Nefarius & Brother Laz


一些初始设置
Missile:ID指针,用来指明各技能所使用的Missile ID(用于Skills.txt和MonStats.txt文件);该值具有唯一性,如果有重复情况出现则在其它文件中使用ID指针将出错,但你仍可通过其ID值来引用本Missile

ID:该Missile的ID指针真实值,可以直接为其它文件所引用;该值具有唯一性(其范围是0到32767),并且任意两个相邻ID必须是相邻整数,否则将导致游戏错误

一些函数设置
小提示:出于技术原因,这里无法给出各个Missile函数的详细解释,需要相关资料的话请参考Mishy23所写的一篇相关引导文件;另外,这里的某些函数必须由相关技能所调用才能正常运行,例如各种追踪类飞弹
pCltDoFunc:该Missile在客户端的动作函数,定义了该Missile从产生到消失这段时间里,其各种行为的图形效果
pCltHitFunc:该Missile在客户端的碰撞函数,定义了该Missile碰撞到物体时的图形效果

pSrvDoFunc:服务器端的动作函数,定义了该飞射物从产生到消失这段时间里,其实际的各种行为;如果没有相匹配的客户端函数,则该飞射物将有实际效果但无显示图像——仅有服务器端函数的飞射物不会调用客户端的动作函数,因此它们看起来就是无形的
pSrvHitFunc:服务器端碰撞函数,定义了该飞射物碰撞到某物体时的行为;参见上一列
pSrvDmgFunc:服务器端伤害函数,定义了该飞射物击中某单位时,其造成的一些特殊效果;该函数用于某些杀伤敌人法力而非生命值的单位

一些计算设置
小提示:以下列仅当该飞射物调用了与之匹配的函数时使用;另外,所有以*号为前缀的列均为注释列
SrvCalc1-5:该飞射物在服务器端的动作计算式
Param1-5:服务器端动作函数所调用到的各个参数;也被用于服务器端动作计算式

CltCalc1:该飞射物在客户端的动作计算式
CltParam1-5:客户端动作函数调用的各个参数,也被用于客户端计算式;通常这里的值应该与Param1-5列中的值相同,但有一些特殊的客户端效果除外,譬如飞射物运行留下的一些痕迹(德鲁伊的藤蔓痕迹)——这类效果在服务器端是没有相应计算的

SHitCalc1:服务器端的碰撞计算式
SHitPat1-3:服务器端碰撞函数所要调用的各个参数,也被用于碰撞计算式

CHitCalc1:客户端碰撞计算式
CHitPar1-3:客户端碰撞函数调用的各个参数,也被用于碰撞计算式

DmgCalc1:用于计算伤害改变的计算式
DParam1-2:伤害函数调用的各个参数,也被用于伤害改变计算式

一些速率设置
Vel:该飞射物的基础速率(开始时的飞行速率),表示其每桢飞行距离,以像素为单位;此值超出屏幕像素范围将使得飞射物具备向后飞行或盘旋的效果,例如大于240的值

MaxVel:该飞射物的最大速率,如果某飞射物有正的加速度值,则此列作为其速度上限

VelLev:与飞射物等级有关的速率,如果该飞射物由某怪物发射,则该飞射物等级即为此怪物的等级;若由某技能函数发出,则其等级为该技能的等级;但该列似乎并无实际效果

Accel:该飞射物的加速度值,正数使飞射物加速飞行直到其最大速率,负数使飞射物减速飞行直到静止;这个值可用以造成飞射物加速到其速率超过屏幕像素范围,从而实现飞去来器的效果;飞射物速率为0时不会造成任何伤害值,除非使用冻结之箭类型的碰撞函数

一些范围设置
Range:飞射物发射后所能飞行的距离,以桢为单位,亦即其存在半径;无限制飞行距离的飞射物过多将增大内存管理难度

LevRange:每单位等级增加该飞射物飞行距离的增量,具体作用方式与VelLev列相似,但此列有其实际效果

光照效果设置
Light:该飞射物的光照范围直径,以地图块为单位

Flicker:该飞射物光照直径的随机变量(以地图块为单位),此列在现有光照范围直径的基础上,为该飞射物提供闪烁效果;该随机值仅作为Light列的随机减小量

Red,Green,Blue:该飞射物光照范围里的颜色(RGB模式),例如255,255,255即为白色;除白色之外的颜色必须在Direct3D图形模式下运行游戏才有效

一些动画设置
InitSteps:飞射物可见之前的动画桢数,亦即飞射物在客户端产生之前的动画桢数

Activate:用于某些从一点发出的飞射物,例如天堂之拳放出的圣光弹、闪电强化怪物放出的充能弹等,也用于一些触碰后一段时间才造成伤害的飞射物;此列与InitSteps的作用相同,只不过作用于服务器端;表示该飞射物发挥其实际作用前的桢延迟

LoopAnim:布尔函数,1 = 在飞射物存在时间内重复播放动画,0 = 仅播放一次;如果该飞射物动画时间比其存在时间短,则飞射物动画在客户端播放一次后消失,但仍有实际效果

CetFile:该飞射物所用到的DCC文件名称,其路径为data\global\missiles\;可含子目录

AnimRate:似乎是无用列,即使其值设定为0,飞射物动画仍旧正常运行

AnimLen:动画各方向的持续时间,以桢为单位,例如某飞射物动画由8个方向和64桢组成,则此处填入8

AnimSpeed:动画每秒播放的桢数

RandStart:使动画在指定的桢开始播放

SubLoop:布尔函数,1 = 在飞射物存在时间里将一直重复播放一个指定的动画序列,0 = 该飞射物正常播放其动画;此列功能与LoopAnim列相近

SubStart:SubLoop列规定的重复播放动画序列的起始桢

SubStop:SubLoop列所规定的重复播放动画序列的终止桢;动画播放到该桢时会回到SubStart桢,但如果剩余的存在时间不足,则动画将继续播放其重复动画直到飞射物消失

碰撞设置A
CollideType:飞射物采用何种碰撞检测机制:3 = 普通类型碰撞,6 = Z类型(从上方掉落类的碰撞),1 = 用于地面上布设的飞射物,当角色走过时发生碰撞(如蜘蛛的粘液,但刺客的陷阱不属于此类),8 = 火焰类碰撞(火墙等),0 = 无碰撞检测机制
        物体        地面        地形
0        不碰撞        不碰撞        不碰撞
1        不碰撞        碰撞        碰撞
2        碰撞        不碰撞        碰撞
3        碰撞        碰撞        碰撞
4        不碰撞        不碰撞        不碰撞
5        碰撞        不碰撞        碰撞
6        不碰撞        不碰撞        碰撞
7        不碰撞        不碰撞        不碰撞
8        碰撞        碰撞        碰撞


CollideKill:布尔函数,该飞射物碰撞时是否损毁,1 = 损毁,0 = 不损毁;但在目前已知的函数中,冰封球的碰撞函数无视该列值

CollideFriend:布尔函数,是否允许该飞射物与友军发生碰撞(如圣光弹);1 = 允许

LastCollide:未知布尔函数,似乎与碰撞后不损毁的飞射物行为有关;该列值对于所有物理碰撞效果的飞射物都为1

Collision:未知布尔函数,似乎与前一列的功能相关;许多非物理碰撞但会造成碰撞事件的飞射物此列值都为1

ClientCol:未知函数

ClientSend:布尔函数,与角色被火风暴或者震波网络击中时生命球的实时显示效果有关

NextHit:布尔函数,1 = 在两次碰撞之间有碰撞延迟时间,0 = 没有;这里的延迟时间用以防止某些碰撞后不损毁的飞射物造成过多的伤害值

NextDelay:该飞射物碰撞函数运行(即一次成功的攻击)后造成的服务器端碰撞无效时间,并使其攻击到的单位在这段时间内无视所有的飞射攻击,以桢为单位;例如某NextDelay=25的飞射物,当其服务器端碰撞函数成功运行后将在1秒时间内无法伤害任何敌人,同时这个被该种飞射物攻击到的敌人将在NextDelay时间内对所有飞射物免疫

一些尺寸调整设置
XOffset,YOffset,ZOffset:飞射物分别在X,Y,Z方向上的位置坐标偏移量,以像素为单位,以DCC文件的左上角或者中心为原点

Size:在地图上所占的直径,以地图块为单位;与MonStats2.txt文件中的Size设定功能相同,取值范围为-1到3,1表示该飞射物仅能覆盖1个地图块,2表示4个块,3表示9个块,等等

一些未知设置
SrcTown:布尔函数,用于控制当角色回城时其发射的该飞射物是否消失;该函数仅用于一些能够制造PK陷阱的持续性飞射物

CltSrcTown:与前一列相似,用于控制角色回城时其发射的飞射物消失的图像效果

CanDestroy:未知布尔函数

碰撞设置B
ToHit:布尔函数,该飞射物是否使用攻击准确率属性,或者说该飞射物是否100%(实际是95%)击中目标;如果这里不使用攻击准确率属性,则在Skills.txt中定义的技能加成准确率将对其飞射物无效,这也是弓箭系技能的攻击准确率加成bug出现的原因

AlwaysExplode:布尔函数,该飞射物是否在其损毁时调用碰撞函数,1 = 是,0 = 否;有些碰撞函数无视此列值,例如闪电之怒,在服务器端始终被当作爆裂型处理

一些杂项设置以及标志位设置(这部分内容大多是布尔函数)
Explosion:布尔函数,1 = 爆裂型飞射物(此类飞射物的实体在服务器端并不存在),0 = 非爆裂型飞射物;这个值优先级高于其他任何设置

Town:布尔函数,1 = 当其在城镇中生成时不消失,0 = 生成即消失

NoUniqueMod:布尔函数,1 = 不从金怪的属性中获取加成效果,0 = 获取所有加成效果

NoMultiShot:布尔函数,1 = 金怪的多重射击属性对该飞射物无效,0 = 有效;另外,Boss的一些死亡事件所释放的飞射物没有被暴雪设定为1

Holy:标志位,控制该飞射物可命中的单位种类,0 = 所有单位,1 = 仅限不死生物,2 = 仅限恶魔生物,3 = 所有单位

CanSlow:布尔函数,1 = 可被慢速箭技能减速,0 = 不能被减速

ReturnFire:布尔函数,1 = 可以在击中敌人时触发碰撞事件,0 = 不可以;碰撞事件包括“当被击中时”触发的所有事件,例如寒冰恐惧者的极地风暴技能为可触发飞射物,则被其命中的角色可以触发所有“被击中时”的事件;该值不确定是否与发射飞射物的单位在“击中敌人时”的触发事件有关

GetHit:布尔函数,1 = 可以在碰撞时将敌人置于打击恢复状态,0 = 无法造成打击恢复

SoftHit:未知布尔函数,仅用于火风暴和震波网络;与该飞射物打击敌人的频率有关

KnockBack:命中时击退敌人的百分比几率,0 = 不击退,100 = 每次成功的攻击(碰撞函数成功运行)都将造成敌人被击退

Trans:非布尔函数,0 = 正常绘制图像,1 = 该地区光照程度越低,该飞射物越透明,2 = 用于使该飞射物产生黑白效果

Qty:布尔函数,该飞射物是否影响物品数量,1 = 是,0 = 否;这项功能调用Skills.txt中相应位置上的特殊发生函数以实现:假如这里设定为1,则炮轰技能将耗费其攻击次数相同数量的箭矢而不是一支

Pierce:布尔函数,该飞射物是否支持穿刺效果对其加成,1 = 支持,0 = 不支持;此处的穿刺效果包括物品上的穿刺攻击以及亚马逊的穿刺技能

SpecialSetup:未知布尔函数,仅对投掷药剂有效;这里有一个对药剂的物品类型实施的特殊检测机制,或许该函数是用来正确显示Weapons.txt中飞射物的伤害值

一些技能设定
MissileSkill:布尔函数,物品上的伤害是否可以转化为该飞射物爆炸半径所造成的伤害,该功能作用于所有其他伤害转化之前;一个例外:冻结之箭在Skills.txt中SrcDmg列值为128,此处值为1,其爆炸半径中并不包含物理伤害

Skill:这里填入某技能ID,则该飞射物将使用该技能的伤害/命中率数据来取代Missiles.txt中的数据;这些可被Skills.txt取代的数据包括:ResultFlags,HitFlags,HitShift,HitClass,SrcDamage (Skills.txt文件中的SrcDam),MinDam,MinLevDam1-5,MaxDam,MaxLevDam1-5, DmgSymPerCalc,EType,EMin,EMinLev1-5,EMax,EMaxLev1-5,EDmgSymPerCalc,ELen,ELenLev1-3,ELenSymPerCalc

事件标志位
ResultFlags:未知函数,4用于普通类飞射物,5用于爆裂类飞射物(HitFlags值为2),8用于无伤害的飞射物;与CollideType功能类似

HitFlags:未知函数,2用于爆裂类飞射物,5用于冻结之箭;该值的作用非常大,似乎与所有关于爆裂元素伤害的飞射物都有关

一些伤害设置
HitShift:伤害除数因子;生命、法力以及耐力值最小单位都是1/256;因此在这里8=256/256,7=128/256,6=64/256,5=32/256,4=16/256,3=8/256,2=4/256,1=2/256,0=1/256;分别等价于在实际伤害基础上乘以100%,50%,25%,12.5%,6.25%,3.125%,1.5625%,0.78125%,0.390625%

ApplyMastery:仅用于MeteorFire和VampireMeteorFire,看起来像是为这些非直接产生的飞射物提供相关加成

SrcDamage:原始伤害转化给飞射物伤害的百分比转化率;该列值以1/128为单位(128 = 100%);此处仅用于为伤害提供修正量,但同时也修正了那些与伤害相关联的属性,如偷取生命和偷取法力等;这里设置为-1将使Skills.txt中的SrcDmg列值失效

Half2HSrc:布尔函数,1 = 使用双手武器时造成一半的伤害,0 = 全额伤害

SrcMissDmg:仅用于蝮蛇喷出的毒标枪技能产生的毒素云雾,表示该飞射物从其产生源中继承的伤害百分比,例如此处填入128,则毒素云雾会继承其毒标枪技能的100%物理伤害

MinDamage,MaxDamage:该飞射物的最小/最大物理伤害值

MinLevDam1-5,MaxLevDam1-5:该飞射物每升一级的最小/最大物理伤害值增量,飞射物等级取决于发射者的等级,或者发射该飞射物的技能的等级;LevDam1用于技能等级在2-8级时,LevDam2用于9-16级,LevDam3用于17-22级,LevDam4用于23-28级,LevDam5用于29级及以上

DmgSymPerCalc:物理伤害协同加成,与Skills.txt文件中的同名列起相同的效果,但这里可填写的函数要少得多,仅支持技能等级对其的加成,不支持属性值对其加成

EType:该技能的元素伤害种类,这里的值引自ETypes.txt中的ID指针,具体如下:fire = 火焰伤害,ltng = 闪电伤害,cold = 冰冷伤害(有冰冻时间),pois = 毒素伤害(有持续时间),mag = 魔法伤害,life = 偷取生命(该属性将使怪物击中你时获取指定数量的生命),mana = 偷取法力(该属性将使你被此怪物击中时失去指定数量的法力),stam = 耐力偷取(该属性将使你被此怪物击中时失去指定数量的耐力),stun = 晕眩攻击(有持续时间,但附加的伤害值不起作用,此效果仅针对雇佣兵和召唤物等,对于角色而言会使之出现打击恢复动作,而不是无法移动),rand = 随机元素伤害(有持续时间,每次攻击随机附加火焰、闪电、冰冷、毒素伤害中的一种),burn = 燃烧伤害(有持续时间,并且该类型的伤害不能被免疫,但因有bug而无法使用),frze = 冻结伤害(有持续时间,会冻结雇佣兵及召唤物,但对于角色只是普通冰冻效果)

EMin,EMax:如前面的MinDamage和MaxDamage,只是伤害类型为元素伤害

MinELev1-5,MaxELev1-5:如前面的MinLevDam1-5和MaxLevDam1-5,只是伤害类型为元素伤害

EDmgSymPerCalc:如前面的DmgSymPerCalc,只是伤害类型为元素伤害

ELen:持续时间,用于stun,cold,pois,burn等,以桢为单位,25桢为1秒

ELevLen1-3:飞射物每升一级的效果持续时间增量,具体请参考MinELev1-5和MaxELev1-5

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

NumDirections:通过CelFile列中的路径所加载的DCC文件的动画方向数目,该数值必须与相应的DCC文件匹配以防游戏崩溃;但该值似乎在1.10版本之后变得无用了

LocalBlood:该飞射物击中敌人是否会造成流血动画播放,0 = 不流血,1 = 可以流血,2 = 可以造成撕开伤口方式的流血

DamageRate:该飞射物如何被“法术伤害减少X”类属性作用,留空意味着该类属性将按桢作用于该飞射物(对于持续性魔法而言这是致命的)

客户端设置A:音效
TravelSound:飞射物生成时游戏播放的wav音效文件,引自Sounds.txt文件的ID指针;这里也是飞射物存在时所循环播放的音效,但不要使用播放时间过长的声音文件,否则会使游戏崩溃

HitSound:飞射物命中敌人时播放的wav音效文件,这里的值引自Sounds.txt文件的ID指针

ProgSound:游戏为客户端函数定义的碰撞时特殊事件所播放的wav音效文件,引自Sounds.txt文件的ID指针

客户端设置B:图像
ProgOverlay:客户端函数定义的某些碰撞时特殊事件发生时,游戏所绘制的一些修饰图像,引自Overlays.txt文件中的ID指针,指向DCC文件

ExplosionMissile:碰撞后爆裂时,游戏绘制的飞射物图像;仅用于飞射物正常击中某敌人或者障碍物而爆裂时(何种障碍物可导致爆裂取决于CollideType列值),或者必然爆裂的飞射物爆裂时

一些附带飞射物
小提示:这部分内容仅用于飞射物的运行函数或者碰撞函数调用时,所有这些列值均为某飞射物的ID指针
SubMissile1-3:该飞射物运行函数在服务器端产生的飞射物
HitSubMissile1-3:该飞射物碰撞函数在服务器端产生的飞射物

CltSubMissile1-3:该飞射物运行函数在客户端产生的飞射物
CltHitSubMissile1-3:该飞射物碰撞函数在客户端产生的飞射物

行结束符
EoL:行结束符,值必须为0以防游戏崩溃
页: 1 [2] 3 4 5
查看完整版本: TXT源码文件全面解读