Day 8942 洛奇skillinfo、skillleveldescription XML浅析

给自己写的东西留个纪念

前阵子一时兴起,折腾了一个本地化的技能小册子,因为网上基本查不到公开的内容,所以数据靠自己解析,幸好是XML,相对不难。

不过后来写着写着被洛奇数据的诡异弄烦了,决定放弃,顺便把过往经验留一下,做个参考。
老实说我也不知道整理这个有什么用,就当消磨时间吧。

1、技能列表skillinfo.xml
以下以重击(Smash)为例说明,实际文件中有多个/SkillInfo/SkillList/Skill节点,其属性可能有不同。
<SkillInfo>
<SkillList>
/* … */
<Skill
SkillID=”20002″ /* 技能ID */
SkillEngName=”Smash” /* 技能英文名称(注:并非所有名称均为规范拼写) */
SkillLocalName=”_LT[xml.skillinfo.18]” /* 技能本地名称,国服对应到skillinfo.china.txt中进行查询,数字为索引,不是行号,下同 */
SkillType=”1″ /* 技能类别,数值包含{0,1,2,3,4,5,6,7,8,10},含义暂不明确 */
TriggerType=”1″ /* 字面意为技能触发类型,0主要为各种精通类技能,1为主动,2为被动,3主要为敌人主动技能,4主要为炼金术技能,5目前为尚未开放的魔法枪,10目前只有“强化”和“奔跑强化”两种技能在用 */
SkillCategory=”2″ /* 技能所属类别,但本地数据中找不到任何对应数据,猜测为与服务器数据对应,这也是R175起半神/变身技能乱掉的根源 */
Season=”1″ /* 所属篇章的章(GxSy(例如,G16S4)中的y(4)) */
Version=”1″ /* 暂不明确 */
DescName=”Smash” /* 技能在skillleveldescription.xml中的入口节点名称 */
UIType=”0″ /* 字面意为UI类型,暂不明确 */
MaxStackNum=”1″ /* 最大蓄发数,例如冰箭的此属性值为5,那么最大即可蓄5发 */
AutoStack=”False” /* 是否允许自动蓄发(长按该技能时进入的自动蓄发状态) */
StackLimitTime=”0″ /* 蓄发最大保持时间,单位为秒,超过该时间自动取消已蓄发技能,0为无限 */
UseType=”0″ /* 字面意为技能使用类型,大部分技能此值为0,1主要为隐藏技能,2、3暂不明 */
RaceBasic=”0″ /* 暂不明确 */
BasicType=”0″ /* 暂不明确 */
IsHidden=”False” /* 是否为隐藏技能,诸如采集、复活、使用圣水及NPC的动作等此值均为True */
IsSpecialAction=”False” /* 字面意为是否为特殊动作,诸如扔石头、纸飞机等动作(不在技能栏中)此值为True,但不尽然 */
LvZeroUsable=”True” /* 处于练习级别的该技能是否可以使用 */
OnceALife=”False” /* 字面意为每次转生只能用一次,目前没有任何技能此值为True */
TransformType=”0″ /* 变身类型(在该变身下可用),0为不限,2为无限斩状态,3为暗黑骑士,4暂不明确,5为精灵野性化,6为巨人野性化,7为半神化 */
ParentSkill=”0″ /* 上级技能ID,当此值不为0时,一些属性将直接从上级继承,具体覆盖的属性暂不明确(种族限制确认会覆盖) */
TargetPreference=”enemy” /* 优先目标,值说明见注1 */
TargetRange=”0″ /* 目标有效范围 */
TargetPreparedType=”2″ /* 技能使用目标类型,0为无限制,1为冲撞一类目标在直线上,2为重击一类近身目标,3为风车一类以自身为中心的有效半径内 */
ProcessTargetType=”1″ /* 暂不明确 */
ImageFile=”data/gfx/image/gui_icon_skill_000.dds” /* 技能图标所在文件 */
PositionX=”1″ /* 技能图标横向坐标(从0开始) */
PositionY=”1″ /* 技能图标纵向坐标(从0开始) */
ClosedDesc=”_LT[xml.skillinfo.96]” /* 技能不可使用时显示的简介文字 */
SkillDesc=”_LT[xml.skillinfo.174]” /* 技能简介文字 */
WaitLock=”unlock(attack)” /* 技能准备中锁定/解锁的项目,说明见注2 */
ProcessLock=”unlock(attack)” /* 技能进行中锁定/解锁的项目,说明见注2 */
MasterTitle=”10011″ /* 大师头衔ID */
DecreaseDuraByBrionac=”0″ /* 暂不明确,字面上是与博纳雷克(牙签)掉耐相关的属性 */
Showicon=”True” /* 是否显示技能图标,目前没有该值为False的技能 */
DecreaseDagdaCount=”1″ /* 暂不明确 */
AvailableRace=”7″ /* 可使用该技能的种族,1为人类,2为精灵,4为巨人,3为人类+精灵,5为人类+巨人(知道UNIX文件属性算法的看到这里可能会会心一笑),目前暂无值为6(精灵+巨人)的技能 */
PublicSeason=”1301″ /* 字面意为公开时间,具体用途暂不明确(比如此处的重击明显不是G13S1才开的技能) */
Public=”103″ /* 技能公开版本号 */
HowToGetDesc=”_LT[xml.skillinfo.2400]” /* 技能获取方法简介 */
Venturer=”1″ /* 以下可能为才能相关的属性,也可能是才能头衔相关,具体含义及对应关系暂不明确 */
Knight=”0″
Wizard=”1″
Archer=”1″
Merchant=”1″
Alchemist=”1″
Fighter=”1″
Bard=”1″
PuppetMaster=”1″
travel=”1″
combat=”0″
magic=”1″
archery=”1″
commerce=”1″
battlealchemy=”1″
fight=”1″
music=”1″
puppet=”1″
lance=”0″
bless=”1″
transmutealchemy=”1″
cook=”1″
blacksmith=”1″
sewing=”1″
pharmacy=”1″
carpentry=”1″
AutoGetLevel=”2″ /* 字面意为自动获取等级,暂不明确 */
Var1=”_LT[xml.skillinfo.2023]” /* 变量Var1的说明文字(标题) */
Var3=”_LT[xml.skillinfo.2185]” /* 变量Var3的说明文字(标题) */
/>
/* … */
</SkillList>
</SkillInfo>

2、技能等级信息skillleveldescription.xml
skillleveldescription.xml是对技能各项数值的说明,有如下特点:
1、技能的入口节点由skillinfo.xml中的descname定义,所有以此descname定义的入口都属于该技能(意即,一个技能可能有多个入口节点)
2、入口节点的race属性说明了当前入口下的数值属于某个种族,值为base、elf或giant
3、如果一项技能属于三种族共用,或精灵及/或巨人可用,但却没有race为elf或giant的入口,那么实际使用的是race为base的入口下的数据
以下以重击(Smash)的人类(race=’base’)0级(练习)数据为例说明,实际文件中有多个/Skill_LevelDetail/{$Skill_DESCNAME}节点,其属性可能有不同。
<Skill_LevelDetail>
<Smash race=”base”>
/* … */
<SkillLevelDetail
Version=”1″ /* 暂不明确,关于这一数据的个人心得见注3 */
SkillLevel=”0″ /* 本行的技能等级,从0到15分别对应练习级到Rank 1,16到18可能为大师一段至三段的数据 */
CharacterPrepareTime=”0″ /* 技能准备时间,单位为ms,不清楚与下面的PrepareTime有什么区别,似乎目前以此而不是PrepareTime为准(YY Wiki上的资料过期了) */
PrepareTime=”2000″
Cooltime=”6000″ /* 技能冷却时间,单位为ms */
AbilityNecessary=”0″ /* 到达该等级所需要的AP */
StaminaNecessary=”4″ /* 使用技能所需的体力 */
StaminaModPreparing=”-2″ /* 技能准备阶段体力的变动值 */
StaminaModWaiting=”0″ /* 技能等待使用时体力的变动值 */
StaminaModProcessing=”0″ /* 技能使用中体力的变动值 */
ManaNecessary=”0″ /* 使用技能所需的魔法值 */
ManaModPreparing=”0″ /* 技能准备阶段魔法的变动值 */
ManaModWaiting=”0″ /* 技能等待使用时魔法的变动值 */
ManaModProcessing=”0″ /* 技能使用中魔法的变动值 */
CombatPower=”0″ /* 暂不明确,字面意为战斗力 */
StackPerCast=”1″ /* 每次使用的蓄发数 */
EffectDescription=”_LT[xml.skillleveldescription.3109]” /* 效果说明文字 */
Conditions=”_LT[xml.skillleveldescription.5932]” /* 修炼说明,详见注4 */
Var1=”150″ /* 变量Var1的值,下同,Var系列变量的标题在skillinfo中定义 */
Var2=”0″
Var3=”0″
Var4=”0″
Var5=”0″
Var6=”0″
BonusLife=”0″ /* 到达该等级时增加的生命值 */
BonusMana=”0″ /* 到达该等级时增加的魔法值 */
BonusStamina=”0″ /* 到达该等级时增加的体力值 */
BonusSTR=”0″ /* 到达该等级时增加的力量 */
BonusINT=”0″ /* 到达该等级时增加的智力 */
BonusDEX=”0″ /* 到达该等级时增加的敏捷 */
BonusWill=”0″ /* 到达该等级时增加的意志 */
BonusLuck=”0″ /* 到达该等级时增加的幸运 */
AttackRange=”0″ /* 攻击范围,0似乎为近身 */
LevelDescription=”_LT[xml.skillleveldescription.9735]” /* 该等级的技能描述 */
OptionApplyDmgMin=”0″ /* 以下暂不明确,似乎与暴击时等的奖励有关 */
OptionApplyDmgMax=”0″
OptionApplyCritical=”0″
OptionApplyBalance=”0″
OptionApplyWoundMin=”0″
OptionApplyWoundMax=”0″
/>
/* … */
</Smash>
</Skill_LevelDetail>

注1:TargetPreference(优先目标)目前所见有如下组合方式:[[enemy(敌人)|friend(队友)|me(自己)][(特定属性)|”|prop(/特定属性/)”]][>(前者优先于后者)|&(二者并存)][…]
举例:治愈技能此项值为:me(healable) & friend(healable)(优先使用在自身及队友可治愈(非歇菜状态)的人物身上)。目前skillinfo内有如下值:
enemy
enemy > friend
enemy(flying)
enemy|prop(/Arrow_Revolver_2/)
enemy|prop(/Firebolt/)
enemy|prop(/IceBolt/)
enemy|prop(/Lightningbolt/)
enemy|prop(/Magnum_Shot/)
enemy|prop(/Ranged_Combat_Mastery/)
enemy|prop(/Support_Shot/)
enemy|prop(/WaterCannon/)
friend
friend & enemy
friend(dead)
friend(wbb_enemy)
friend(wbb_enemy) & prop(/WaterBalloonThrowing/)
me
me & friend
me & friend & enemy
me(healable) & friend(healable)
me(wounded) & friend(wounded)
注2:WaitLock(等待锁)及ProcessLock(使用锁)目前所见有如下组合方式:[un]lock((解)锁项目)
目前(解)锁项目包含如下值:hit、run、walk、pickndrop、attack、stance、useitem、equip、talktonpc、trade、useskill、toggleskill
注3:skillleveldescription中,一个技能可能存在3种版本的数据,分别为含Version属性、含Feature属性以及不包含以上任一种属性的版本,受个人能力所限,暂未在本地数据中找到确切的调用指向,在skillinfo中包含Feature属性的技能,实际调用的可能是Version系列的数据;包含Version属性的技能实际调用的可能是既不含Version也不含Feature的数据。个人猜测,具体使用哪一个数据系列是服务器端决定的,所以要完全依靠单一版本的本地数据读取数值很难,虽然可能能通过Bonus类属性值辅助判定,但工作量依然很大,这也是本人最终被惹烦并放弃制作本地技能小册子的原因。
注4:Conditions的技能属性在skillleveldescription.china.txt中对查后可获得如下形式的数据:
add(1, 20, “任意进行攻击”);\nadd(3, 10, “攻击命中敌人”);\nadd(3, 10, “使用连击打倒敌人”);\nadd(5, 5, “战胜敌人”);
不难看出,\n为换行符,条目与条目间以西文分号(;)作为分隔符,而add中的三个参数分别为单次经验、次数以及该修炼方法的说明文字。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

 剩余字数 ( Characters available )

Your comment will be available after auditing.
您的评论将在通过审核后显示。

Please DO NOT add any links in your comment, otherwise it would be identified as SPAM automatically and never be audited.
请不要在评论中插入任何链接,否则将被自动归类为垃圾评论,且永远不会被提交给博主进行复审。

*