暗黑MOD信息免费发布,找新开暗黑Mod就上D2sf,绿色简洁,值得收藏!
首页 > 暗黑技术攻略
ItemStatCost.txt描述

发表时间:1970-01-01 08:00:00

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文件一点关系都没有……

上一篇:ItemRatio.txt描述    下一篇:ItemTypes.txt描述