Day 2615 洛奇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中的三个参数分别为单次经验、次数以及该修炼方法的说明文字。

注:所有评论将在审核通过后显示,请不要在评论内容的任何位置出现链接,否则您的评论将被自动移入回收站,且永远不会被复审。

All comments will be available after being manually reviewed, please do not include any links anywhere in your comment, otherwise your comment will be automatically deleted and are not eligible for review.

1 条评论

发表回复

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