生活情怀-神话暗黑-暗黑破坏神2

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
逗破暗黑Mod群:67994934逗破暗黑Mod客户端及补丁逗破暗黑Mod新手攻略逗破暗黑Mod赞助菜单
神话怀旧MOD群:67994934神话怀旧Mod客户端及补丁神话怀旧Mod新手攻略神话怀旧Mod赞助菜单
圣者归来Mod群:558972013圣者归来Mod客户端及补丁圣者归来Mod新手攻略圣者归来Mod赞助菜单
查看: 13057|回复: 48
收起左侧

[修改攻略] TXT源码文件全面解读

[复制链接]

706

主题

830

元宝

2347 小时

在线时间

管理员

Rank: 9Rank: 9Rank: 9

积分
830
发表于 2020-1-15 01:44:47 | 显示全部楼层 |阅读模式
Misc.txt->道具物品 (提示:目录过长,点击一下往拉下,可见对应文章) Armor.txt->基础防具 Weapons.txt->基础武器 AutoMagic.txt->装备自带属性 QualityItems.txt->超强装备 MagicPrefix.txt/MagicSuffix.txt->蓝色装备前、后缀 RarePrefix.txt/RareSuffix.txt->黄金装备前、后缀 SetItems.txt->绿色装备 Sets.txt->套装属性 (提示:目录过长,点击一下往拉下,可见对应文章) UniqueItems.txt->暗金装备 ItemTypes.txt->物品类型 Runes.txt->符文之语 CubeMain.txt->合成公式 Gems.txt->镶嵌的属性 (提示:目录过长,点击一下往拉下,可见对应文章) ItemRatio.txt->物品品质判定 TreasureClassEx.txt->物品掉落控制 Properties.txt->属性调用控制 ItemStatCost.txt->属性基础设置 MonLvl.txt->怪物基础属性 (提示:目录过长,点击一下往拉下,可见对应文章) MonStats.txt->怪物基础控制 Monstats2.txt->怪物扩展属性 MonEquip.txt->怪物的装备 MonProp.txt->怪物的额外属性 SuperUniques.txt->固定(超级)金怪 MonUMod.txt->金怪(包括头目怪)的特殊属性 Npc.txt->NPC设置 (提示:目录过长,点击一下往拉下,可见对应文章) MonSeq.txt->怪物动作序列 MonSounds.txt->怪物音效 MonType.txt->怪物类型 (提示:目录过长,点击一下往拉下,可见对应文章) Inventory.txt->所有物品窗口设置 Hireling.txt->雇佣兵信息 DifficultyLevels.txt->游戏中三个难度中的一些特殊信息,如抗性惩罚。 Experience.txt->经验和等级控制 States.txt->所有状态属性 CharStats.txt->人物的基本状态, Sounds.txt->音效控制 (提示:目录过长,点击一下往拉下,可见对应文章) Skills.txt->所有技能 SkillDesc.txt->技能描述控制 Events.txt->触发事件 (提示:目录过长,点击一下往拉下,可见对应文章) Missiles.txt->发射物属性 PetType.txt->友军类型(如召唤物) Levels.txt->所有地图 (提示:目录过长,点击一下往拉下,可见对应文章) LvlPrest.txt->地图的预设信息 LvlTypes.txt->地图相关资源文件及类型 LvlMaze.txt->迷宫地图大小控制 LvlSub.txt->地图修饰图像 (提示:目录过长,点击一下往拉下,可见对应文章) AutoMap.txt->小地图显示控制 MonPreset.txt->与地图DS1文件相关联,设置对应金怪 Gamble.txt->赌博相关物品 Overlay.txt->显示图片基础设置 Objects.txt->物体基础设置 ObjGroup.txt->物体分组 (提示:目录过长,点击一下往拉下,可见对应文章)
神话战网出品,必出精品!

rgbrgbrgbrgb]
回复

使用道具 举报

706

主题

830

元宝

2347 小时

在线时间

管理员

Rank: 9Rank: 9Rank: 9

积分
830
 楼主| 发表于 2020-1-15 01:46:40 | 显示全部楼层
Armor.txt                By Nefarius,Kingpin,Ric Faith & Paul Siramy

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

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

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

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

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

各列功能说明如下:

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

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

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

Rarity:0 = 该物品不会从装甲架上掉落,置为1或者更高的数值则将决定此物品从装甲架上掉落的几率,这个值越高,则物品越稀有(这里必须有至少一种物品的值为1,否则当你在游戏里点击装甲架时游戏将崩溃)

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

Minac/Maxac:该防具的最小/最大防御值;ItemStatsCost.txt中定义了这些取值的上限

Absorbs:无用参数,以前的作用与“伤害减少X”类似

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

Reqstr:装备物品所需的力量,取值范围是0-65535;假如超出这个范围,将依据循环计数的原则。例如,在这里填写值65538,则系统会认为是2

Levelreq:装备物品所需的最低人物等级

Block:格档几率,总的格档几率上限为75%

Durability:基础耐久度,最大值为255,超出范围则循环计数
Nodurrability:是否无耐久物品,1 = 无法破坏物品(无耐久),0 = 有耐久度
假如这里置为1,则游戏里不会显示“无法破坏”字样,而是去掉物品的耐久属性
Durwarning:耐久警报图标出现的临界值,当物品耐久度低于或等于这个值时,警报图标将出现在屏幕上以提醒玩家,这玩艺快坏了。

Cost:基础价钱
Gamble Cost:赌博价钱的默认值,但仅对于Misc.txt中的戒指和项链起作用

Code:由3位字母/数字组成的代码,每样物品对应一个且不得重复;此代码为许多txt文件所引用,但不必将其写入TBL文件
Namestr:物品的代码/名称,如果这里的字串并未出现在TBL文件中,则此字串将直接作为物品的名称;反之,则使用TBL文件中此字串所对应的名称
注意:如果需要显示空格的话,使用TBL文件是唯一的途径

Normcode:该物品的普通级代码
Ubercode:该物品的扩展级代码
Ultracode:该物品的精华级代码
这三列用于确定物品的阶级,例如:需要升级一件普通级物品为扩展级,则游戏将获取此物品的代码,然后将其与这三列相对照
举例说明:狮头尖盔(Lion Helm)的属性为
·Code = ba7
·Normcode = ba2
·Ubercode = ba7
·Ultracode = bac
所以游戏判定狮头尖盔为扩展级物品,则上述升级普通级物品的公式将不对其起作用

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

MagicLvl:魔法等级增量,例如:某物品的这个值为5,且某玩家通过赌博得到了一件10级的该物品,则该物品上可能出现的词缀等级最大为15级

Auto Prefix:物品自带的词缀,引自AutoMagic.txt中的Group列值

Alternategfx:人物动画所使用的DCC文件代码,例如:哥德盾牌(code = gts)的此列值为kit,意味着假如一个野蛮人装备了这面盾牌,则他的A1(Attack1)模式动画的SH(Shield)图层将使用的DCC文件为BASHKITA11HS.DCC,而非BASHGTSA11HS.DCC或者BASHBUCA11HS.DCC文件

OpenBetaGfx:无用参数,D2测试版中用于参照使用了何种alternategfx值

Spelloffset:未知参数,仅在Armor.txt中出现

Component:该物品装备人物后所使用的动画图层,引自Composit.txt,以下是索引:
0 - HD(Head)头部
1 - TR(Torso)躯干
2 - LG(Legs)腿部
3 - RA(Right Arm)右臂
4 - LA(Left Arm)左臂
5 - RH(Right Hand)右手
6 - LH(Left Hand)左手
7 - SH(Shield)盾牌
8 - S1(Right Shoulder)右肩
9 - S2(Left Shoulder)左肩
10 - S3(Necro Shield)死灵法师盾牌
11 - S4(Special 4)特4
12 - S5(Special 5)特5
13 - S6(Special 6)特6
14 - S7(Special 7)特7
15 - S8(Special 8)特8
16则意味着该物品不使用任何图层,因为在Composit.txt中没有16所对应的索引

以下六列分别是一件装甲的一个组成部分,每部分都有三种色度:浅、中、深,这六列的取值说明了该装甲在不同部位会使用何种色度
0 = LIT(Light)浅
1 = MED(Medium)中
2 = HVY(Heavy)深
rArm:RA图层(Right Arm)右臂
lArm:LA图层(Left Arm)左臂
Torso:TR图层(Torso)躯干
Legs:LG图层(Legs)腿部
rSPad:S1图层(Special 1 – Right Shoulder)右肩
lSPad:S2图层(Special 2 – Left Shoulder)左肩
例如,布甲的取值为rSPad = 1,lSPad = 1,所以当布甲穿在亚马逊身上时,她的全身都是初始的红色(浅色),但左右肩变为灰白色(中等)

以下四列分别是不同情况下程序对物品所调用的DC6文件名称
Flippyfile:物品掉落时的动画文件
Invfile:物品栏里的图像文件
Uniqueinvfile:暗金物品所使用的物品栏图像文件
Setinvfile:套装物品所使用的物品栏图像文件
DC6文件的路径为data\global\items,例如:假如某物品的flippyfile列值为flpcap,则程序将在该物品掉落时播放data\global\items\flpcap.dc6文件

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

以下三列用于描述物品上孔数的属性
Hasinv:该物品是否可以拥有孔,以镶嵌入宝石/符文,1 = 可以打孔,0 = 不能打孔
Gemsockets:该物品上可能出现的最大孔数,但一件物品不可能拥有多于其物品栏占用格子数量的孔数
另外,ItemType.txt中还有三个根据物品等级高低限制其孔数的列——MaxSock1、MaxSock25、MaxSock40
例如:假使某种头盔的Gamsocket = 4,但头盔的Maxsock1 = 2,因此一顶不足25级的该种头盔所能拥有的最大孔数就只能是2
Gemapplytype:镶嵌物镶嵌入该物品后所获得的属性,0 = 武器、1 = 装甲/头盔、2 = 盾牌;假如使用了其他数值,则该物品将不可能有孔

Useable:是否可以右键单击该物品以使用,1 = 可以、0 = 不可以;这一列多用于Misc.txt里的各种药剂/卷轴
注意:右键单击物品所获得的作用效果源于程序的硬代码。所以假设你并未编辑相应的dll文件,那么即使该值设定为1也不会有什么效果。

Throwable:无用参数;其本意是决定该物品是否能够投掷:1 = 可以,0 = 不可以;但这个功能定义于ItemTypes.txt中,而在Armor.txt和Misc.txt中该列值均为0,Weapons.txt中无此列

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

Stackable:该物品能否多个叠放成堆:1 = 可以,并有数量属性,0 = 不可以
Minstack:一堆该物品的最小数量
Maxstack:一堆该物品所能拥有的最大数量
Qntwarning:警告标志出现的数量临界值
当该物品的数量小于等于临界值时,屏幕上将出现警告标志
这些列不作用于Armor.txt,仅用于Misc.txt(钥匙、书)以及Weapons.txt(标枪、箭矢等)

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

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

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

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

Transparent:未知参数,游戏中无用;或许只是一个用于表示某物品处于透明形态的标志位?

Transtbl:未知参数,游戏中无用;猜想是当Transparent列非0时用来表示透明度……

Quivered:1 = 该物品需要弹药方可使用,0 = 无需弹药也可使用;此列仅用于Weapons.txt中的弓和十字弓,在Armor.txt、Misc.txt中均无用

Lightradius:无用参数

Belt:在Armor.txt中作为一个索引,来说明物品所代表的腰带种类
0 – 无用/无腰带 – 1行
1 – 饰带 – 2行
2 – 无用 – 1行
3 – 束带 – 4行
4 – 轻扣带 – 2行
5 – 重扣带 – 3行
6 – 高级腰带 – 4行
以上引自Belt.txt中的索引行(或许是硬代码规定的……),仅有Expansion行之上的部分有用;高级腰带包含了所有的扩展/精华级腰带
Belt:在Misc.txt中的意义与Armor.txt中完全不同
0 = 无法被放置于腰带栏,1 = 可以被放置于腰带栏
由于Misc.txt和Armor.txt同属一个大文件,所以程序大概是先判定物品的种类(是防具还是宝石药剂之类),再确定该列的用途

Mindam/Maxdam:该物品所具备的最小/最大伤害值,请注意这个值并非总会在游戏中的物品描述里显示,以下是对于不同的物品类型,该列值的具体含义:
对于盾牌 – 盾击伤害
对于鞋子 – 踢击伤害
对于武器 – 单手近战伤害

StrBonus:装备该物品时力量对伤害的加成系数,例如100表示每点力量 = 1%增强伤害, 75则表示每点力量 = 0.75%增强伤害
DexBonus:装备该物品时敏捷对伤害的加成系数,例如100表示每点敏捷 = 1%增强伤害, 75则表示每点敏捷 = 0.75%增强伤害
Armor.txt里这一列的伤害加成值仅对鞋子和盾牌有用,对于盾牌是对盾击伤害的加成,对于鞋子则是对踢击伤害的加成

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

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:该物品所能获得的最高魔法词缀等级

PermStoreItem:该列不出现在Armor.txt中(仅存在于Misc.txt和Weapons.txt),但你可以人为的加进去;它用来控制物品是否始终在NPC处有出售:1 = 始终出售,0 = 不一定

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

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

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

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

Nameable:用于安亚任务奖励,控制该物品是否能够被个人化:1 = 可以,0 = 不行
神话战网出品,必出精品!

rgbrgbrgbrgb]
回复

使用道具 举报

706

主题

830

元宝

2347 小时

在线时间

管理员

Rank: 9Rank: 9Rank: 9

积分
830
 楼主| 发表于 2020-1-15 01:47:07 | 显示全部楼层
AutoMagic.txt                By Quatl

前言:
本文件控制掉落物品上的自带词缀(autoaffix)及其自带属性(automod),automod会给物品添加一些魔法属性,但不会改变其魔法类型(蓝色/黄色/白色物品);这里你可以很轻松的控制各种属性何时出现,以及可附加的物品种类:例如,你可以添加某一组新的automod,控制该组automod出现所需的物品等级,以及该组各个automod出现几率,等等

相关文件:
这里要用到的文件有:
·Properties.txt
·ItemTypes.txt
该txt的内容将用于以下文件:
·Weapons.txt(Auto Prefix列)
·Armor.txt(Auto Prefix列)

各列功能具体描述:
Name:注释字符串,一般用以指明各前缀/后缀的名称以方便编辑修改

Version:100 = 仅用于D2资料片,0 = D2原版/资料片均可用

Spawnable:布尔函数,控制该automod是否允许出现在游戏中,1 = 允许,0 = 禁用

Rare:布尔函数,控制该automod是否可以出现于黄金物品上,1 = 可出现于黄金及蓝色物品上,0 = 仅可出现于蓝色物品;注意Rare列与Spawnable列是相互独立的,即当某automod的Spawnable列为零但Rare列为1时,该automod仍可出现在黄金物品上

Level:该automod出现于物品上所需的最低物品等级,用以使不同等级的物品上出现不同种类的automod;详细的解说请看附录

MaxLevel:该automod可附加的物品最高等级,

LevelReq:该automod的需求等级,与拥有该automod的物品原始需求等级相加

Class:角色代码,决定可使用该automod的角色类型,包括ama,nec,sor,pal,bar,dru和ass

ClassLevReq:当Class列非空时,本列用来为Class列中填写的角色等级提供特殊需求等级,但这看起来有些多余,因为其他角色无法使用该automod,所以不确定此列是否有用

Frequency:对于automod组而言,该组各个automod的出现几率;该值越高出现几率就越大,具体选择方法请参见附录

Group:本列值相同的各个automod将被视为同组automod,同组的各个automod只允许同时出现一个,另外LevelReq,ClassLevelReq以及Frequency列都被用于同组automod的各种相关计算,具体请参考附录;这里的组代码也用于填入Weapons.txt和Armor.txt文件的Auto Prefix列中以说明何种automod可附加于何种物品

Mod1Code-Mod3Code:各个automod所拥有的实际属性,每个automod最多可以拥有三个属性,这里的值引自Properties.txt中的属性代码

Mod1Param-Mod3Param,Mod1Min-Mod3Min,Mod1Max-Mod3Max:各个automod属性的参数,最小值和最大值;具体填入何种值请参考Properties.txt的文件引导

Transform:布尔函数,是否允许拥有该automod的物品改变颜色,1 = 变为TransformColor列中填写的颜色,0 = 原色

TransformColor:颜色代码,当Transform列的值为1时有效,以下是各个颜色代码的列表:
白色        whit
浅灰        gry
深灰        dgry
黑色        blac
淡蓝        blu
深蓝        dblu
水晶蓝        cblu
淡红        lred
深红        dred
水晶红        cred
浅绿        lgrn
深绿        dgrn
水晶绿        cgrn
浅黄        lyel
深黄        dyel
淡金色        lgld
深金色        dgld
淡紫        lpur
深紫        dpur
橙色        oran
亮白色        bwht

iType1-iType7:可附加该automod的物品类型,引自ItemTypes.txt中的类型代码
EType1-EType7:禁止附加该automod的物品类型,引自ItemTypes.txt中的类型代码
注意:这几列值事实上是多余的,因为在Weapons.txt和Armor.txt的Auto Prefix列中必须填入相应的组类型才能应用该automod,但这几列值设置不好将导致一些问题;因此一般设置iType1 = weap,iType2 = armo,iType3 = misc,然后用Group列控制该功能

Divide:拥有该automod的物品价格除数因子
Multiply:拥有该automod的物品价格乘数因子
Add:拥有该automod的物品价格增量


附录:关于Frequency和Group列
Group列的值一般被认为是该automod的ID或者代码,被其他文件引用以控制何种物品上可出现何种automod,这类物品主要是一些白色形态也可出现魔法词缀的物品,例如亚马逊专用弓/标枪/矛,法师专用法珠,圣骑士专用盾牌以及死灵法师专用盾,等
因此要想给某种类型的物品添加新的automod,或者将某类automod赋予某种新的物品,则必须修改该物品相应的Armor.txt或者Weapons.txt文件,并编辑AutoMagic.txt
例如,现在要使匕首类武器拥有
毒素伤害5-10,持续时间10秒:
首先,打开Weapons.txt,在每个匕首类武器的Auto Prefix列中填入将要附加的automod组代码:306(这里填写的值可以随意,但不能超过四位数且必须保证不与其它词缀组相重复)
其次,回到AutoMagic.txt,添加新的行,各列值如下:
Name:Poisoned Dagger
Version:100
Spawnable:1
Rare:1(这里如果填入0,则该automod将只能出现在蓝色匕首上)
MaxLevel:留空或自行填入相应内容
LvlReq:留空或自行填入相应内容
Class/ClassLevelReq:留空
Frequency:1
Group:306,对应前面Weapons.txt中的内容
Mod1Code:dmg-pois(引自Properties.txt中的毒素伤害代码)
Mod1Param:256(持续时间为10秒)
Mod1Min:5
Mod1Max:10
Transform/TransformColor:留空或自行填入相应内容
iType:knif(匕首所属的物品类型)
EType:留空
Divide/Multiply/Add:0
OK,现在该automod就制作完成了,但是似乎有点欠缺,5-10毒素伤害太少了,我们开始试图为高等级的匕首添加一些更强大的属性,比如这样:
1-20        级                5-10毒素伤害
21-40级                10-20毒素伤害
41-60级                20-30毒素伤害
61级及以上        30-45毒素伤害,25%致命攻击几率
这样我们需要4行来分别表示这四种属性,但是它们同属一个组,亦即使用相同的automod ID值,现在新建三行,填入与刚才那行相同的内容,只不过在Level和MaxLevel处做一些小改动:第一行的Level/MaxLevel列填入1/20,第二行填入21/40,然后是41/60和60/None;另外,该组的第四个automod还有25%致命攻击的几率,于是我们在第四行的Mod2Code处填入deadly,Mod2Min = 25 = Mod2Max;OK,现在同组的四个按物品等级出现的automod也做好了
但我们似乎应当演示一下Frequency列的用法,好吧,让它们的属性变成这样:
1-25级                5-10毒素伤害
15-45级                10-20毒素伤害
40-65级                20-30毒素伤害
60级及以上        30-45毒素伤害,25%致命攻击几率
那么在15-25级的匕首会出现哪一种automod呢?
我们分别在四行的Frequency列中填入5,3,2,1,于是在15-25级的匕首上,游戏会根据Frequency列的值随机抽取一个automod:
出现5-10毒素伤害的几率为5/(5+3)=5/8 = 62.5%
而出现10-20毒素伤害的几率为3/(5+3)=3/8 = 37.5%
如上算法,则在40-45级的匕首上,出现10-20毒素伤害的几率为3/5 = 60%,而20-30毒素伤害的几率为2/5 = 40%
当然了,如果某等级可能出现多个automod,仍然使用该算法

神话战网出品,必出精品!

rgbrgbrgbrgb]
回复

使用道具 举报

706

主题

830

元宝

2347 小时

在线时间

管理员

Rank: 9Rank: 9Rank: 9

积分
830
 楼主| 发表于 2020-1-15 01:48:01 | 显示全部楼层
AutoMap.txt        By Red Havoc


这篇文章里我们准备涉及一个经常给地图制作者们带来烦恼的领域:AutoMaps(自动地图);整治Diablo2中那些地图文件的时候我们有时会遇到一些关于automap的问题,例如:往LvlTypes.txt中的某个场景类型中加入dt1s文件时,或者往游戏中导入新的贴图文件时,等等;在这些情况下游戏的自动地图可能会不显示,或者出现缺口甚至漏掉部分地形,有时还可能显示出错误的元素,比如你想看到一个雕像但游戏却让你看到一堵墙或者一棵树……

为了修正以上这些问题,我们需要修改AutoMap.txt文件——一个大概拥有3300行,包含许多数据,看起来庞大无比的文件;不过一旦你了解了它,修改起来将会很简单:在做过一些尝试之后,你应该可以在很短的时间之内制作一张崭新的自动地图,你会发现制作地图这项工作并非想象的那么费时费力

在我们学习怎样制作地图之前,我想在这里给出一些关于自动地图如何工作的说明,以及automap.txt文件的功能概要;
然后,我们将逐列的分析automap.txt文件;
这篇文章的最后,我们会看到一些制作新自动地图的实例;包括一个快速有效的制作自动地图的方法,一个从其他场景类型中转换出新的自动地图的实例,以及要想使制作出的自动地图如原版游戏中的地图那样精致,你不可不知的小建议


关于自动地图如何工作:
我们知道,当角色在游戏中遍历各场景时,自动地图就会随之生成;如果你走在一个地下城里,自动地图会按照比例生成一个显示墙壁、大门、拐角等的缩略图,并且保存你所走过的所有区域的地图;而对于城镇的自动地图而言,每当你首次进入它时地图都会自动全部生成;另外,第二、四、五幕的城镇地图还有一些特殊的地方,下面我们将会提到

首先,让我们看看自动地图的图片文件存放路径,解压D2Exp.mpq文件,在以下路径里:
Data\global\ui\automap
我们可以找到两个dc6文件,MaxiMap.dc6(用于平常的自动地图)和MaxiMapS.dc6(用于资料片中提供的缩略版自动地图);二者均为多层次的dc6文件,包含了所有自动地图所要用到的小图标图样,这些图标最大尺寸为16*32像素(缩略版位8*16);我们可以用DrTester或者Dc6Table Tool等工具来浏览这些小图标文件;不过,这两个dc6文件中大约有1500个各种不同的图标,稍后在你自己定制风格的自动地图中选用这些图标文件的话,光是浏览一遍就会非常的……繁琐……
另外在以下路径里,还有一些相关的地图文件:
Act2Map.dc6(在D2Data.mpq文件中)
Act2MapS.dc6
Act4Map.dc6(在D2Data.mpq文件中)
Act4MapS.dc6
ExTnMap.dc6
ExTnMapS.dc6
这些文件就是前面提到的,第二、四、五幕的特殊地图文件,它们与普通场景的地图的区别在于,这里不是由很多小图标图样拼成的地图,而是由一些大型的图样拼凑在一起,因此当你重新绘制城镇地图并且希望自动地图显示正常时,你就必须编辑这些文件

OK,现在我们知道了自动地图图像的来源,那么游戏如何得知何时绘制何种图标呢?这就要归结于游戏构图使用的修饰图样了;每种修饰图样都对应自动地图中的一种图标,所以当角色接近这些修饰图样时,其相应的图标就会显示在自动地图上;举个例子:角色在经过第一幕的某个小屋时,这个小屋的墙壁图样对应的自动地图图标组合起来将是一个房子的模样,因此我们接近小屋时,游戏会显示其对应的图标——一栋房子,这个对应关系是由某个txt文件规定的,而如你所知的那样,这个txt文件就是我们正在讨论的AutoMap.txt

并非所有图样都有其对应的图标,通常只有一些明显的实物和场景构图需要的部分有,例如第一幕的野外,除了小路和场景构图所需的墙壁等,其他诸如水坑、石头之类均没有对应的自动地图图标


AutoMap.txt引导文件:
现在我们知道,AutoMap.txt只是用来为各种地图图样指定其相应的图标,因此让我们看看其具体的作用机理,txt的内容可分为两部分,一部分用于定义地图图样,另一部分为该图样指定自动地图图标

LevelName:这里填入的值即为该场景类型的名称,场景类型似乎是由硬代码规定的,所以在LvlTypes.txt中加入自定义的场景类型无效,因此这里的值最好是已有的场景类型

TileName:这里填入代码,用以指定具体的地图图样及其类型ID,以下是具体代码:
TileName                类型ID        注释
fl                        0        地板(floor)
wl                        1        墙壁左侧(wall left)
wr                        2        墙壁右侧(wall right)
wtlr                        3        墙壁顶部下方左侧(wall top lower right)
wtll                        4        墙壁顶部下方右侧(wall top lower left)
wtr                        5        墙壁顶部右侧(wall top right)
wbl                        6        墙壁底部左侧(wall bottom left)
wbr                        7        墙壁底部右侧(wall bottom right)
wld                        8        墙壁左侧门(wall left door)
wrd                        9        墙壁右侧门(wall right door)
wle                        10        墙壁左侧出口(wall left exit)
wre                        11        墙壁右侧出口(wall right exit)
co                        12        中心物体(center object)
sh                        13        影子(shadow)
tr                        14        树(tree)
rf                        15        屋顶(roof)
ld                        16        左下角(left down)
rd                        17        右下角(right down)
fd                        18        全景下方(full down)
fi                        19        全景不可见(full invisible?)与18成对出现

Style:即为各地图图样的主ID,采用十进制计数

StartSequence/EndSequence:这两列是地图图样的修饰ID,利用这两列可以定义游戏选取修饰图样的ID范围,例如Start = 4,End = 8,则游戏将使用修饰ID =4,5,6,7,8的图样,这里所有数字均采用十进制;另外,这里的值为-1表示游戏将不使用修饰ID,仅使用前面的TileName和Style列中定义的图样主ID

以上四列的值一起定义了该行所表示的贴图文件:LevelName限定了指定幕的指定场景中可能存在的贴图文件范围,然后TileName、Style以及Sequence列分别指定了贴图文件的类型ID、主ID和修饰ID,从而确定了该贴图文件,因为同一场景中只可能有一个贴图文件能同时满足这三个指定值;另外Start/End两列则允许同一行的贴图文件有多种修饰方式,用于不同贴图文件,但在自动地图上显示相同图标的场合,例如多种样式的墙壁

Type1-4:注释列

Cel1-4:这四列定义了特定贴图文件在MaxiMap(s).dc6文件中所属的层,这或许是生成自动地图时最需要指明的一点:每行可以包含20个图片(用DC6Table编辑图像的话你可以设置每行包含更多的图片),因此第一行为图标0-图标19,第二行为图标20-图标39以此类推;输入各个图标的代码即可知道其隶属的贴图文件

设置以上四列实际上是用来为自动地图加入一些随机特性,如果其中有两列或两列以上不为空,则当该贴图文件显示在自动地图上时游戏会随机的从这些列中抽取一个来显示,这种功能主要用于一些包含许多同种贴图文件的大型地图,重复使用一种图标会使游戏看起来死气沉沉,而随机显示的图标将使自动地图看起来花样繁多,更加贴近真实

以上是我们关于AutoMap.txt的解说,下面将给出一些制作新自动地图的实例


制作个性化的自动地图:
现在让我们看看如何制作自己的自动地图,这里我将阐述一些我在编辑自动地图文件过程中所发现有用的方法和诀窍,其中一个就是用来生成一个简化版的自动地图——仅仅标示出该场景/地下城的主要轮廓以及一些有用的地点,这种方法很迅速并且无需太繁琐的操作,所以主要用于工作繁忙而你又不愿意在自动地图上花费过多时间的场合;接下来,我们将学习如何利用新加的dt1s文件将地图填充完整,以及解决一些在编辑地图过程中遇到的小问题;最后,我们将讨论一些高效制作完全版地图的技术及此过程中可能出现的故障

首先让我们来看第一种简化版的方法,它基于D2中的所有地图都包含的所谓的“地板”贴图,即可使角色在其上行走/跑动的地方(有些不允许角色在其上行走的地方不在我们的讨论范围),按如下的步骤做:用WinDs1Edit打开一个地图文件,将所有的墙壁和房屋等删除,现在该场景所有的修饰物都消失了,但你可以清楚地看到整个地图的布局——这和我们所想要制作的自动地图效果是一样的:我们可以让自动地图只显示所有“地板”贴图,以构成一个类似于地下城的“地板平面图”的自动地图;当然了,这种方法的局限性太大,比如说在某个地下城里,使用地板平面图无法标示出那些死角,也无法显示一些比较重要的元素,如阶梯、拐角等;但是这种方法用于一些粗略显示还是很有效的,并且无需对AutoMap.txt文件作太多的编辑
于是,你所要做的就是:查找各种地板贴图所使用的ID,打开AutoMap.txt,在你要修改的场景类型下面添加几行,并且在这几行中添入正确的内容;对所有的贴图文件都使用同样的自动地图图标,这样你就可以得到一个差强人意的整体自动地图;对于拐角等特殊元素,我们则需要为其指定相应的地板贴图,并为这些贴图指定对应的自动地图图标,这样它们将也可以在自动地图上显示出来

要为D2导入新的地图,TileMaker Tool是不错的工具选择,该工具仅生成地板贴图文件,因此它看起来就是为我们这种方法量身定做的;不过该工具有点小问题需要考虑:请看其生成出的图样,你会发现它会生成很多完全空白(无任何地图元素)的地图块;由于TileMaker是将整个图片转换为许多个地图块文件,因此原始图片上的各个边界、拐角等元素都将被转换,问题就在于:如果你为这些元素指定了自动地图图标,那么你所获取的自动地图将和原始地图不一致,因为自动地图上包含了太多原始地图上所没有的内容;要解决这个问题有以下几种方法:
从dt1文件中删除所有空白的地图块,但这样做很繁琐,并且需要对ini文件进行许多查找并修改的操作
从AutoMap.txt中删除所有与这些空白地图块相对应的行,但是对于大型地图而言这种繁复的查找操作同样很痛苦
最简单的方法就是去TileMaker生成的ds1文件中,删除掉所有空白的地图块;去除了这些空白块,自动地图上就不会显示额外的内容了
·注意,新导入的地图文件所使用的原始图片背景色必须是纯黑的,与D2的默认背景色相同,否则导入后背景效果将非常难看

现在让我们讨论下一个问题:我们在第一幕的某个地穴中扩展了几个特殊房间,里面有些特殊Boss或者什么玩艺的那种,我们为其使用军营中提取的地图贴图文件(basewall.dt1),场景是没错了,但自动地图上没有相关显示,为什么?
事实上这只是因为AutoMap.txt中没有为该地穴提供相应的贴图文件主ID接口,军营内所有贴图文件的主ID均为5,但在AutoMap.txt中,地穴仅包含了主ID为1、2、3、4以及21的贴图文件,只要将军营的贴图ID与地穴相匹配,地穴中的这类元素自然会显示在自动地图上
因此为了修正此类错误,我们去AutoMap.txt文件中找到军营(在277-324行),将其中的相关行拷贝到地穴(在426-551行)下面,并使其类型ID、主ID和修饰ID与实际相匹配,OK,事情完成

最后一个问题,怎样为某场景添加完整的自动地图文件?或许现在看来这已经很简单了,将各个地图的贴图文件匹配其相对应的正确的图标即可;不过仍然有一些问题需要说明:
首先,尝试着按照暴雪原版的风格去编辑地图文件,为各种墙壁或门使用整齐划一的图标,混乱的显示将导致玩家很快就迷路;为同一个场景的自动地图使用一组同样风格的图标,例如军营中使用棱角分明的墙,地穴中使用歪歪扭扭的石头样图标,等;并且保证各种颜色的搭配合理,比如说,灰色的地牢中使用同样色度的灰色自动地图将导致玩家很难分辨,同时某些特殊地方诸如出口入口之类,用特殊颜色显示出来会使玩家更容易找到目标
·你可以用自己风格的图片去扩展AutoMap.dc6文件的内容,只要在DC6Table生成的表格最后按照正确的尺寸填入新的图标即可;在编译的时候该工具会将其作为新的图层导入进去,并且该值可以被Cel列的值定位


制作自动地图并不难,但我仍然要在这里指出一些问题,以避免当您实际操作遇到时慌了手脚:有些时候我们会看到同一个地图块上有许多不同图层的贴图文件,如果对其中每一个都指定一个自动地图图标的话,显示就很混乱了,因为自动地图图标可是不能叠放的;不过事实上游戏会在多个图标之间做出选择,只显示类型ID值最高的图标,这样有时在某些贴图文件重叠的区域,我们会看到自动地图上显示出缺口
对于这个问题似乎没什么太好的解决办法,除非你在制作地图块的时候就已经考虑到了这一点;但是游戏生成自动地图的函数是很难描述的,并且最终地图产生出来的效果也很难预测;对于D2原始的那些地图,生成自动地图的方式都是模糊匹配,因此避免了该问题的发生


以上就是全部的自动地图方面的内容,希望对您有所帮助

神话战网出品,必出精品!

rgbrgbrgbrgb]
回复

使用道具 举报

706

主题

830

元宝

2347 小时

在线时间

管理员

Rank: 9Rank: 9Rank: 9

积分
830
 楼主| 发表于 2020-1-15 01:48:32 | 显示全部楼层
CharStats.txt        By Nefarius

Class:该行属性所对应的角色类型,仅为参考列,作注释用

Str:角色的初始力量值
Dex:角色的初始敏捷值
Int:角色的初始精力值
Vit:角色的初始体力值
Tot:仅为参考列,做注释用,一般填入该角色的四项初始属性之和

Stamina:角色的初始耐力值
HPAdd:除了初始体力所关联的生命值之外,额外的初始生命值增量

PercentStr:无用参数,但代码会加载之,并且通过代码可以自定义其用途
PercentDex:无用参数,但代码会加载之,并且通过代码可以自定义其用途
PercentInt:无用参数,但代码会加载之,并且通过代码可以自定义其用途
PercentVit:无用参数,但代码会加载之,并且通过代码可以自定义其用途

ManaRegen:角色法力从0到恢复满所需的时间,以秒为单位,因此该值越小则法力恢复速度越快,越大则越慢

ToHitFactor:在角色的基础攻击命中率上额外增加的命中率值;除非修改了相关代码,否则这里如果填写一个绝对值很大的负值将有可能导致角色的攻击命中率小于0

WalkVelocity:角色的行走速度(资料片之前的版本该值为7)
RunVelocity:角色的跑步速度(资料片之前的版本该值为11)

RunDrain:角色跑动时消耗耐力值的速率,该值越小则耐力值消耗也越慢

Comment:显然是注释列
LifePerLevel:每升一级增加的生命值,单位为1/4,即每升一级至少可以加64/256点生命值(屏幕上的数值以整数形式显示,但在游戏中它的分数部分仍旧有效)
StaminaPerLevel:每升一级增加的耐力值,单位为1/4,即每升一级至少可以加64/256点耐力值(屏幕上的数值以整数形式显示,但在游戏中它的分数部分仍旧有效)
ManaPerLevel:每升一级增加的法力值,单位为1/4,即每升一级至少可以加64/256点法力值(屏幕上的数值以整数形式显示,但在游戏中它的分数部分仍旧有效)

LifePerVitality:每一点体力增加的生命值,单位为1/4,即每一点体力至少可以加64/256点生命值(屏幕上的数值以整数形式显示,但在游戏中它的分数部分仍旧有效)
StaminaPerVitality:每一点体力增加的耐力值,单位为1/4,即每一点体力至少可以加64/256点耐力值(屏幕上的数值以整数形式显示,但在游戏中它的分数部分仍旧有效)
ManaPerMagic:每一点精力增加的法力值,单位为1/4,即每一点精力至少可以加64/256点法力值(屏幕上的数值以整数形式显示,但在游戏中它的分数部分仍旧有效)

StatPerLevel:每升一级增加的状态点数

#Walk:注释列,暴雪在此处填写的是WL动作的动画桢数
#Run:注释列,暴雪在此处填写的是RN动作的动画桢数
#Swing:注释列,暴雪在此处填写的是A1动作(当装备近战武器时)的动画桢数
#Spell:注释列,暴雪在此处填写的是SC动作的动画桢数
#GetHit:注释列,暴雪在此处填写的是GH动作的动画桢数
#Bow:注释列,暴雪在此处填写的是A1动作(当装备弓时)的动画桢数

BlockFactor:在Armor.txt中规定的盾牌格档基础上增加的格档几率

StartSkill:该角色新建时其武器上附加的技能ID,引自Skills.txt中的ID指针

Skill1-Skill10:角色创建时即可使用的技能,这里的值引自Skills.txt中的ID指针

StrAllSkills:当游戏中出现“+X某角色的全部技能等级”属性时显示的字符串,例如,+1亚马逊技能等级
StrSkillTab1:当游戏中出现“+X某角色的第一系列技能等级”属性时显示的字符串,例如,+1弓和十字弓技能
StrSkillTab2:当游戏中出现“+X某角色的第二系列技能等级”属性时显示的字符串,例如,+1被动和魔法技能
StrSkillTab3:当游戏中出现“+X某角色的第三系列技能等级”属性时显示的字符串,例如,+1标枪和长矛技能
StrClassOnly:当游戏中出现“某角色专用”属性时显示的字符串,例如,限亚马逊使用

BaseWClass:当角色未装备武器时游戏默认其装备的武器类型的图像,例如hth表示游戏将调用hth动画的DCC文件来绘制角色图像,因此角色无装备时的图像是空手的,如果填入1hs则角色无装备时的图像及其攻击动画是拿着单手剑的样子

Item1-Item10:新建角色身上的装备,例如要想某新建角色身上有赫拉迪克方块,则在某一列填入其代码“box”即可,这里的值引自Weapons.txt,Armor.txt,Misc.txt中的ID指针

Item1Loc-Item10Loc:对应前一列装备的放置地点,留空则意味着放在物品栏中,如果可放入腰带,则游戏会默认放在腰带里,这里的值引自BodyLocs.txt中的ID指针

Item1Count-Item10Count:对应ItemX列中装备的数量

神话战网出品,必出精品!

rgbrgbrgbrgb]
回复

使用道具 举报

706

主题

830

元宝

2347 小时

在线时间

管理员

Rank: 9Rank: 9Rank: 9

积分
830
 楼主| 发表于 2020-1-15 01:48:49 | 显示全部楼层

CubeMain.txt        By Nefarius & Myhrginoc


前言:
本txt文件控制着所有的赫拉迪克合成公式

相关文件:
这里用到的文件有
·ItemType.txt
·Misc.txt
·Armor.txt
·SetItems.txt
·UniqueItems.txt
·Properties.txt
·ItemStatCost.txt

各列详细说明:
Description:该列仅作为注释,无实际功能

Enabled:布尔函数,控制该公式是否可用,1 = 可以,0 = 不可以

Ladder:布尔函数,该公式是否仅可用于天梯模式或单机,1 = 是,0 = 否

Min Diff:使用该合成公式所需的最低游戏难度,0 = 所有难度下均可用,1 = 噩梦和地狱难度,2 = 仅限地狱难度

Version:该公式的适用版本,是旧版D2C,新版D2C还是资料片,0 = 旧版D2C,1 = 新版D2C,100 = 资料片;这里不确定1所代表的意义是否准确

以下三列的详细情况请参照附录
Op:实时控制选项,用以判断该公式的合成条件
Param:实时控制选项,用以判断该公式的合成条件
Value:实时控制选项,用以判断该公式的合成条件

Class:用以判断该合成公式适用于何种角色,可在ama、bar、pal、nec、sor、dru、ass中任选一个你需要的值

NumInputs:该公式需要放入盒子的物品数量;如果在Inputs列中对某物品定义了qty属性,则也应将其真实数量算进来

Inputs1-7:这七列分别表示该公式所需的各个物品,这里可以填入一些参数来说明物品类型,其中Inputs1列中填入公式的最主要物品,也就是合成配方第一个生成物的原始物品;这里具体可以填入何种参数请参见其他资料

Output:该公式生成的第一个产物,也可以填入一些输出参数,具体参数类型请参见其他资料

Lvl:Output列中的生成物等级,该生成物的等级会被强制定义为这里的数字
pLvl:Output列中生成物等级与合成者等级之间的关系
iLvl:Output列中生成物等级与Inputs1列中的原始物品之间的关系

Mod1-5:这部分内容定义了Output列中的生成物的附加属性
·Mod # - 属性代码,用以为生成物附加属性
·Mod # Chance – 该属性附加到生成物上的几率
·Mod # Param – 该属性所使用的参数
·Mod # Min – 该属性的取值下限
·Mod # Max – 该属性的取值上限
要想使输出物品的属性值固定,可以让Mod # Min = Mod # Max

Output b:该公式生成的第二个产物,也可以填入一些输出参数,具体参数类型请参见其他资料

b Lvl:Output b列中的生成物等级,该生成物的等级会被强制定义为这里的数字
b pLvl:Output b列中生成物等级与合成者等级之间的关系
b iLvl:Output b列中生成物等级与Inputs1列中的原始物品之间的关系

b Mod1-5:这部分内容定义了Output b列中的生成物的附加属性,其具体作用方式与前面的Mod1-5各列相同

Output c:该公式生成的第三个产物,也可以填入一些输出参数,具体参数类型请参见其他资料

c Lvl:Output c列中的生成物等级,该生成物的等级会被强制定义为这里的数字
c pLvl:Output c列中生成物等级与合成者等级之间的关系
c iLvl:Output c列中生成物等级与Inputs1列中的原始物品之间的关系

c Mod1-5:这部分内容定义了Output c列中的生成物的附加属性,其具体作用方式与前面的Mod1-5各列相同

*EoL:行结束符,值始终为0以避免游戏出错


附录:
这里的属性全部引自ItemStatCost.txt中的ID(例如strength的ID = 0)
Op        Param        Value        效果
1        None        日期        当且仅当当前日期 >= Value值时有效
2        None        Code        当且仅当当前日期 == Code时有效(0 = 星期天,1 = 星期一……)
3        属性        属性值        当且仅当人物当前属性 >= Value值时有效
4        属性        属性值        当且仅当人物当前属性 <= Value值时有效
5        属性        属性值        当且仅当人物当前属性 != Value值时有效
6        属性        属性值        当且仅当人物当前属性 == Value值时有效
7        属性        属性值        当且仅当人物基础属性 >= Value值时有效
8        属性        属性值        当且仅当人物基础属性 <= Value值时有效
9        属性        属性值        当且仅当人物基础属性 != Value值时有效
10        属性        属性值        当且仅当人物基础属性 == Value值时有效
11        属性        属性值        当且仅当人物当前属性 – 基础属性 >= Value值时有效
12        属性        属性值        当且仅当人物当前属性 – 基础属性 <= Value值时有效
13        属性        属性值        当且仅当人物当前属性 – 基础属性 != Value值时有效
14        属性        属性值        当且仅当人物当前属性 – 基础属性 == Value值时有效
15        属性        属性值        当且仅当Input1物品当前属性 >= Value值时有效
16        属性        属性值        当且仅当Input1物品当前属性 <= Value值时有效
17        属性        属性值        当且仅当Input1物品当前属性 != Value值时有效
18        属性        属性值        当且仅当Input1物品当前属性 == Value值时有效
19        属性        属性值        当且仅当Input1物品基础属性 >= Value值时有效
20        属性        属性值        当且仅当Input1物品基础属性 <= Value值时有效
21        属性        属性值        当且仅当Input1物品基础属性 != Value值时有效
22        属性        属性值        当且仅当Input1物品基础属性 == Value值时有效
23        属性        属性值        当且仅当Input1物品当前属性 – 基础属性 >= Value值时有效
24        属性        属性值        当且仅当Input1物品当前属性 – 基础属性 <= Value值时有效
25        属性        属性值        当且仅当Input1物品当前属性 – 基础属性 != Value值时有效
26        属性        属性值        当且仅当Input1物品当前属性 – 基础属性 == Value值时有效
27        None        None        当且仅当合成物品的OtherID 值 != Value值时有效
28        None        None        当且仅当合成物品的difficulty值 < 当前游戏难度时有效(程序会事先检测该合成物品是否为任务物品,以及其对应的questdiffcheck列值是否为1)
29到255均为闲置代码,无用
神话战网出品,必出精品!

rgbrgbrgbrgb]
回复

使用道具 举报

706

主题

830

元宝

2347 小时

在线时间

管理员

Rank: 9Rank: 9Rank: 9

积分
830
 楼主| 发表于 2020-1-15 01:49:10 | 显示全部楼层
DifficultyLevels.txt                By Nefarius,Joel Falcou,Jarulf & Foxbat


前言:本文件用来定义一些基于游戏难度等级的,全游戏中起作用的参数

相关联的txt文件:
本文件与其它txt文件没有什么关联,仅仅是一份独立的参数表


各列功能说明如下:

Name:难度名称,该列最好不要添加其他内容

ResistPenalty:该值是角色进入当前难度所受到的抗性惩罚

DeathExpPenalty:该值是角色在当前难度死亡后会丢失的经验值百分比

UberCodeOddsNormal:无用参数,1.07版以前该值是扩展级劣质/普通/超强物品在当前难度的掉落几率
UberCodeOddsGood:无用参数,1.07版以前该值是扩展级蓝色/黄金/套装/暗金物品在当前难度的掉落几率
UltraCodeOddsNormal:无用参数,1.07版以前无此列
UltraCodeOddsNormal:无用参数,1.07版以前无此列

MonsterSkillBonus:于当前难度下对MonStats.txt文件中定义的怪物技能等级的加成值,对于飞射物的伤害值并无提升效果
MonsterFreezeDivisor,MonsterColdDivisor:对当前难度下的怪物被冰冻/冻结时间的惩罚因子,此值不能为0

AiCurseDivisor,LifeStealDivisor,ManaStealDivisor:当前难度下对可转化AI类诅咒持续时间,生命偷取效果,法力偷取效果的惩罚因子;1.10以后版本中该值不能为0,1.10版中该值为0将导致转化AI类诅咒/生命偷取/法力偷取等属性失效

UniqueDamageBonus,ChampionDamageBonus:对当前难度下的金怪及其仆从,以及冠军级怪物拥有的伤害和准确率加成效果进行百分比惩罚

HireableBossDamagePercent:决定当前难度下你的雇佣兵/召唤物等仆从会对每幕最终Boss造成的伤害百分比,例如地狱难度此值为25,则你的雇佣兵对Boss造成的伤害只是原始伤害的1/4

MonsterCEDamagePercent:当前难度下怪物的尸体爆炸技能所能造成的伤害百分比:多人难度下怪物的生命值会增加,与此同时其尸体爆炸所造成的伤害也会提升,但这类伤害都将受到此列值所规定的限制

StaticFieldMin:当前难度下静电力场技能能够使怪物生命降低到的下限值,这里值设定为0将导致各个难度下法师均能利用静电力场技能将怪物的生命无限降低,如D2原版那样

GambleRare,GambleSet,GambleUnique,GambleUber,GambleUltra:硬代码所规定的函数中将用到这些参数,用以决定赌博时各个难度下出现黄金、套装、暗金、扩展级物品和精华级物品的几率
DifficultyLevels.txt                By Nefarius,Joel Falcou,Jarulf & Foxbat


前言:本文件用来定义一些基于游戏难度等级的,全游戏中起作用的参数

相关联的txt文件:
本文件与其它txt文件没有什么关联,仅仅是一份独立的参数表


各列功能说明如下:

Name:难度名称,该列最好不要添加其他内容

ResistPenalty:该值是角色进入当前难度所受到的抗性惩罚

DeathExpPenalty:该值是角色在当前难度死亡后会丢失的经验值百分比

UberCodeOddsNormal:无用参数,1.07版以前该值是扩展级劣质/普通/超强物品在当前难度的掉落几率
UberCodeOddsGood:无用参数,1.07版以前该值是扩展级蓝色/黄金/套装/暗金物品在当前难度的掉落几率
UltraCodeOddsNormal:无用参数,1.07版以前无此列
UltraCodeOddsNormal:无用参数,1.07版以前无此列

MonsterSkillBonus:于当前难度下对MonStats.txt文件中定义的怪物技能等级的加成值,对于飞射物的伤害值并无提升效果
MonsterFreezeDivisor,MonsterColdDivisor:对当前难度下的怪物被冰冻/冻结时间的惩罚因子,此值不能为0

AiCurseDivisor,LifeStealDivisor,ManaStealDivisor:当前难度下对可转化AI类诅咒持续时间,生命偷取效果,法力偷取效果的惩罚因子;1.10以后版本中该值不能为0,1.10版中该值为0将导致转化AI类诅咒/生命偷取/法力偷取等属性失效

UniqueDamageBonus,ChampionDamageBonus:对当前难度下的金怪及其仆从,以及冠军级怪物拥有的伤害和准确率加成效果进行百分比惩罚

HireableBossDamagePercent:决定当前难度下你的雇佣兵/召唤物等仆从会对每幕最终Boss造成的伤害百分比,例如地狱难度此值为25,则你的雇佣兵对Boss造成的伤害只是原始伤害的1/4

MonsterCEDamagePercent:当前难度下怪物的尸体爆炸技能所能造成的伤害百分比:多人难度下怪物的生命值会增加,与此同时其尸体爆炸所造成的伤害也会提升,但这类伤害都将受到此列值所规定的限制

StaticFieldMin:当前难度下静电力场技能能够使怪物生命降低到的下限值,这里值设定为0将导致各个难度下法师均能利用静电力场技能将怪物的生命无限降低,如D2原版那样

GambleRare,GambleSet,GambleUnique,GambleUber,GambleUltra:硬代码所规定的函数中将用到这些参数,用以决定赌博时各个难度下出现黄金、套装、暗金、扩展级物品和精华级物品的几率
神话战网出品,必出精品!

rgbrgbrgbrgb]
回复

使用道具 举报

706

主题

830

元宝

2347 小时

在线时间

管理员

Rank: 9Rank: 9Rank: 9

积分
830
 楼主| 发表于 2020-1-15 01:49:40 | 显示全部楼层
Gems.txt                By Nefarius

Name:参考列,仅作注释,一般用来填写该行的宝石/符文名称

Letter:符文镶嵌入物品后物品上显示的符文字样,如El,Eld等

Transform:宝石/符文镶嵌入物品后该物品会变成何种颜色,引自Color.txt中的色彩代码

Code:各个宝石/符文的物品代码,也就是控制着附加在各个宝石/符文上的属性,1.07版之前这些都是硬代码规定的,因此不编辑相应的dll文件就无法添加新的宝石/符文

NumMods:也是参考列,仅作注释,一般用来填写该宝石/符文上的属性数量

WeaponMod1-WeaponMod3:该宝石/符文镶嵌到GemApplyType(见Armor.txt,Weapons.txt以及Misc.txt文件的此列)为0的物品上时(默认为武器),其所附加的属性,这里的值引自Properties.txt文件的ID指针

WeaponMod1Param-WeaponMod3Param:与其前一列的属性相对应的属性参数值(这里最好不要使用带参数的属性,也不要填写该处的数值,否则当多个相同的宝石/符文镶嵌入同一个物品时会造成参数值叠加而出现一些不可预料的后果)

WeaponMod1Min-WeaponMod3Min:其对应的属性最小值(注意:宝石的属性不会被游戏存档保存,因此如果设定了属性的随机数值,则该宝石的属性每一桢都将发生变化,直到其镶嵌入某物品为止)

WeaponMod1Max-WeaponMod3Max:其对应的属性最大值(注意:宝石的属性不会被游戏存档保存,因此如果设定了属性的随机数值,则该宝石的属性每一桢都将发生变化,直到其镶嵌入某物品为止)

HelmMod1-HelmMod3:该宝石/符文镶嵌到GemApplyType(见Armor.txt,Weapons.txt以及Misc.txt文件的此列)为1的物品上时(默认为头盔/装甲),其所附加的属性,这里的值引自Properties.txt文件的ID指针

HelmMod1Param-HelmMod3Param:与其前一列的属性相对应的属性参数值(这里最好不要使用带参数的属性,也不要填写该处的数值,否则当多个相同的宝石/符文镶嵌入同一个物品时会造成参数值叠加而出现一些不可预料的后果)

HelmMod1Min-HelmMod3Min:其对应的属性最小值(注意:宝石的属性不会被游戏存档保存,因此如果设定了属性的随机数值,则该宝石的属性每一桢都将发生变化,直到其镶嵌入某物品为止)

HelmMod1Max-HelmMod3Max:其对应的属性最大值(注意:宝石的属性不会被游戏存档保存,因此如果设定了属性的随机数值,则该宝石的属性每一桢都将发生变化,直到其镶嵌入某物品为止)

ShieldMod1-ShieldMod3:该宝石/符文镶嵌到GemApplyType(见Armor.txt,Weapons.txt以及Misc.txt文件的此列)为2的物品上时(默认为武器),其所附加的属性,这里的值引自Properties.txt文件的ID指针

ShieldMod1Param-ShieldMod3Param:与其前一列的属性相对应的属性参数值(这里最好不要使用带参数的属性,也不要填写该处的数值,否则当多个相同的宝石/符文镶嵌入同一个物品时会造成参数值叠加而出现一些不可预料的后果)

ShieldMod1Min-ShieldMod3Min:其对应的属性最小值(注意:宝石的属性不会被游戏存档保存,因此如果设定了属性的随机数值,则该宝石的属性每一桢都将发生变化,直到其镶嵌入某物品为止)

ShieldMod1Max-ShieldMod3Max:其对应的属性最大值(注意:宝石的属性不会被游戏存档保存,因此如果设定了属性的随机数值,则该宝石的属性每一桢都将发生变化,直到其镶嵌入某物品为止)

神话战网出品,必出精品!

rgbrgbrgbrgb]
回复

使用道具 举报

706

主题

830

元宝

2347 小时

在线时间

管理员

Rank: 9Rank: 9Rank: 9

积分
830
 楼主| 发表于 2020-1-15 01:50:04 | 显示全部楼层
Hireling.txt        By Draco & Ric Faith


前言:
本文件控制所有与雇佣兵有关的内容,通过这里你可以设置雇佣何种雇佣兵、他们的装备、属性及技能等
本文件将用到的文件有:
·ItemTypes.txt
·Skills.txt

Hireling:描述雇佣兵的种类,如罗格或野蛮人;仅作为注释,无实际作用
SubType:雇佣兵的具体种类,如冰/火罗格或防御/进攻枪兵;仅作注释,无实际作用

Version:0 = D2原版,100 = D2资料片

ID:ID数字,用以分辨不同种类的雇佣兵

Class:使用何种单位作为雇佣兵,引自MonStats.txt中的HcIdx列

Act:该雇佣兵在哪一幕可以雇到

Difficulty:1 = 普通级,2 = 噩梦级,3 = 地狱级

Level:雇佣兵的等级,雇佣兵的等级与其技能等级和属性密切相关

Seller:引自MonStats.txt中的HcIDx列,决定在哪个NPC处可以雇到该雇佣兵

NameFirst,NameLast:游戏随机给雇佣兵起名字所要用到的两列

Gold:雇用该雇佣兵所花费的金钱,随等级提升而变化

Exp/Lvl:用于计算雇佣兵升级所需经验值的因子,从这一等级(L)提升至下一等级(L+1)所需的经验值为:Exp/Lvl * L * L * (L+1)

HP:该雇佣兵在其基础等级时的生命值
HP/Lvl:该雇佣兵每升一级所提升的生命值

Defence:该雇佣兵在其基础等级时的防御值
Def/Lvl:该雇佣兵每升一级所提升的防御值

Str:该雇佣兵基础等级时的力量值
Str/Lvl:该雇佣兵每升一级所提升的力量值

Dex:该雇佣兵基础等级时的敏捷值
Dex/Lvl:该雇佣兵每升一级所提升的敏捷值

AR:该雇佣兵基础等级时的攻击准确率
AR/Lvl:该雇佣兵每升一级提升的攻击准确率

Share:用以关联普通,噩梦,地狱难度下雇佣兵的等级阀值

Dmg-Min,Dmg-Max:雇佣兵基础等级时的最小/最大伤害值
Dmg/Lvl:雇佣兵每升一级所提升的伤害值,以1/8为单位

Resist:雇佣兵基础等级时的所有抗性值
Resist/Lvl:雇佣兵每升一级提升的所有抗性值,以1/8为单位

WType1,WType2:该雇佣兵所能使用的武器种类,此值无法修改

HireDesc:雇佣兵显示在游戏里的名称,与TBL文件相关

Default Chance:雇佣兵使用普通攻击而不是技能的概率

Skill1-Skill6:雇佣兵可以使用的技能,引自Skills.txt中的ID指针

Mode1-Mode6:前一列中的技能所使用的动作模式,大体上如下:1 = 光环,4 = 攻击,5 = 攻击(用于野蛮人佣兵,与4的效果相同),7 = 施展动作,14 = 顺序动作(如戳刺)

Chance1-Chance6:该雇佣兵基础等级时使用该技能的几率;例如一名一等普通级火焰箭佣兵:
Default Chance = 75,Chance1 = 10,Chance = 25
则普通攻击几率 = 75/(75+10+25) = 68.18%
施展技能1——内视的几率 = 10/110 = 9.09%
施展技能2——火焰箭的几率 = 25/110 = 22.73%
而该雇佣兵升级至二等之后:
Default Chance = 75,Chance1 = 10,Chance = 69
则普通攻击几率 = 75/(75+10+69) = 48.70%
施展技能1——内视的几率 = 10/110 = 6.49%
施展技能2——火焰箭的几率 = 25/110 = 44.81%
因此可以看到,雇佣兵升级的同时其各种AI几率也会相应的变动

ChancePerLevel1-ChancePerLevel6:雇佣兵每升一级所提升的使用该机能的几率

Level1-Level6:雇佣兵基础等级时所使用的该技能的等级
LvlPerLvl1-LvlPerLvl6:雇佣兵每升一级所提升的该技能等级,0 = 不提升

Head,Torso,Weapon,Shield:这几项用于雇佣兵各部位的动画图象

神话战网出品,必出精品!

rgbrgbrgbrgb]
回复

使用道具 举报

706

主题

830

元宝

2347 小时

在线时间

管理员

Rank: 9Rank: 9Rank: 9

积分
830
 楼主| 发表于 2020-1-15 01:50:22 | 显示全部楼层
Inventory.txt        By Nefarius

Class:注释列,用以描述该行所对应的角色类型

InvLeft:屏幕左边缘坐标(X轴方向)
InvRight:屏幕右边缘坐标(即InvLeft + DC6文件的宽度)
InvTop:屏幕顶端坐标(Y轴方向)
InvBottom:屏幕底端坐标(即InvTop + DC6文件的高度)

GridX:物品栏由多少列组成
GridY:物品栏由多少行组成
GridLeft:物品栏左边缘坐标(X轴方向)
GridRight:物品栏右边缘坐标(GridLeft + GridBoxWidth * GridX)
GridTop:物品栏顶端坐标(Y轴方向)
GridBottom:物品栏底端坐标(GridTop + GridBoxHeight * GridY)
GridBoxWidth:物品栏每格宽度
GridBoxHeight:物品栏每格高度

rArmLeft:右手武器位的左边缘坐标(X轴方向)
rArmRight:右手武器位的右边缘坐标(rArmLeft + rArmWidth)
rArmTop:右手武器位的顶端坐标(Y轴方向)
rArmBottom:右手武器位的底端坐标(rArmTop + rArmHeight)
rArmWidth:右手武器位的宽度
rArmHeight:右手武器位的高度

TorsoLeft:装甲位的左边缘坐标(X轴方向)
TorsoRight:装甲位的右边缘坐标(TorsoLeft + TorsoWidth)
TorsoTop:装甲位的顶端坐标(Y轴方向)
TorsoBottom:装甲位的底端坐标(TorsoTop + TorsoHeight)
TorsoWidth:装甲位的宽度
TorsoHeight:装甲位的高度

lArmLeft:左手武器位的左边缘坐标(X轴方向)
lArmRight:左手武器位的右边缘坐标(lArmLeft + lArmWidth)
lArmTop:左手武器位的顶端坐标(Y轴方向)
lArmBottom:左手武器位的底端坐标(lArmTop + lArmHeight)
lArmWidth:左手武器位的宽度
lArmHeight:左手武器位的高度

HelmLeft:头盔位的左边缘坐标(X轴方向)
HelmRight:头盔位的右边缘坐标(HelmLeft + HelmWidth)
HelmTop:头盔位的顶端坐标(Y轴方向)
HelmBottom:头盔位的底端坐标(HelmTop + HelmHeight)
HelmWidth:头盔位的宽度
HelmHeight:头盔位的高度

NeckLeft:项链位的左边缘坐标(X轴方向)
NeckRight:项链位的右边缘坐标(NeckLeft + NeckWidth)
NeckTop:项链位的顶端坐标(Y轴方向)
NeckBottom:项链位的底端坐标(NeckTop + NeckHeight)
NeckWidth:项链位的宽度
NeckHeight:项链位的高度

rHandLeft:右手戒指位的左边缘坐标(X轴方向)
rHandRight:右手戒指位的右边缘坐标(rHandLeft + rHandWidth)
rHandTop:右手戒指位的顶端坐标(Y轴方向)
rHandBottom:右手戒指位的底端坐标(rHandTop + rHandHeight)
rHandWidth:右手戒指位的宽度
rHandHeight:右手戒指位的高度

lHandLeft:左手戒指位的左边缘坐标(X轴方向)
lHandRight:左手戒指位的右边缘坐标(lHandLeft + lHandWidth)
lHandTop:左手戒指位的顶端坐标(Y轴方向)
lHandBottom:左手戒指位的底端坐标(lHandTop + lHandHeight)
lHandWidth:左手戒指位的宽度
lHandHeight:左手戒指位的高度

BeltLeft:腰带位的左边缘坐标(X轴方向)
BeltRight:腰带位的右边缘坐标(BeltLeft + BeltWidth)
BeltTop:腰带位的顶端坐标(Y轴方向)
BeltBottom:腰带位的底端坐标(BeltTop + BeltHeight)
BeltWidth:腰带位的宽度
BeltHeight:腰带位的高度

FeetLeft:鞋子位的左边缘坐标(X轴方向)
FeetRight:鞋子位的右边缘坐标(FeetLeft + FeetWidth)
FeetTop:鞋子位的顶端坐标(Y轴方向)
FeetBottom:鞋子位的底端坐标(FeetTop + FeetHeight)
FeetWidth:鞋子位的宽度
FeetHeight:鞋子位的高度

GloveLeft:手套位的左边缘坐标(X轴方向)
GloveRight:手套位的右边缘坐标(GloveLeft + GloveWidth)
GloveTop:手套位的顶端坐标(Y轴方向)
GloveBottom:手套位的底端坐标(GloveTop + GloveHeight)
GloveWidth:手套位的宽度
GloveHeight:手套位的高度
*暴雪为了使显示效果紧凑一些,以上的各个数值都缩减了一些像素
神话战网出品,必出精品!

rgbrgbrgbrgb]
回复

使用道具 举报

706

主题

830

元宝

2347 小时

在线时间

管理员

Rank: 9Rank: 9Rank: 9

积分
830
 楼主| 发表于 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)
神话战网出品,必出精品!

rgbrgbrgbrgb]
回复

使用道具 举报

706

主题

830

元宝

2347 小时

在线时间

管理员

Rank: 9Rank: 9Rank: 9

积分
830
 楼主| 发表于 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耐久度于 [100 / 属性值] 秒内
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文件一点关系都没有……
神话战网出品,必出精品!

rgbrgbrgbrgb]
回复

使用道具 举报

706

主题

830

元宝

2347 小时

在线时间

管理员

Rank: 9Rank: 9Rank: 9

积分
830
 楼主| 发表于 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:用于定义物品类型的母类,同一个物品类型可以拥有多个母类(如附图所示),但这里应当尽量避免出现无限循环,出现物品类型循环的后果目前不详,但无限循环是任何时候都应当避免的事

1.png
关于物品分类的图

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文件

神话战网出品,必出精品!

rgbrgbrgbrgb]
回复

使用道具 举报

706

主题

830

元宝

2347 小时

在线时间

管理员

Rank: 9Rank: 9Rank: 9

积分
830
 楼主| 发表于 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:参考列,仅作注释用
神话战网出品,必出精品!

rgbrgbrgbrgb]
回复

使用道具 举报

706

主题

830

元宝

2347 小时

在线时间

管理员

Rank: 9Rank: 9Rank: 9

积分
830
 楼主| 发表于 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:无用列
神话战网出品,必出精品!

rgbrgbrgbrgb]
回复

使用道具 举报

706

主题

830

元宝

2347 小时

在线时间

管理员

Rank: 9Rank: 9Rank: 9

积分
830
 楼主| 发表于 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文件,以保证做出恰当的选择
神话战网出品,必出精品!

rgbrgbrgbrgb]
回复

使用道具 举报

706

主题

830

元宝

2347 小时

在线时间

管理员

Rank: 9Rank: 9Rank: 9

积分
830
 楼主| 发表于 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值设小些

神话战网出品,必出精品!

rgbrgbrgbrgb]
回复

使用道具 举报

706

主题

830

元宝

2347 小时

在线时间

管理员

Rank: 9Rank: 9Rank: 9

积分
830
 楼主| 发表于 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:该词缀出现于某物品上时对其物品价格的增量
神话战网出品,必出精品!

rgbrgbrgbrgb]
回复

使用道具 举报

706

主题

830

元宝

2347 小时

在线时间

管理员

Rank: 9Rank: 9Rank: 9

积分
830
 楼主| 发表于 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:行结束符
神话战网出品,必出精品!

rgbrgbrgbrgb]
回复

使用道具 举报

706

主题

830

元宝

2347 小时

在线时间

管理员

Rank: 9Rank: 9Rank: 9

积分
830
 楼主| 发表于 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以防游戏崩溃
神话战网出品,必出精品!

rgbrgbrgbrgb]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|神话暗黑 ( 陕ICP备18004004号-1 )

GMT+8, 2026-1-19 15:40 , Processed in 0.082304 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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