0x00 前言
此前在《防具外观 ID 解读 - 头饰篇》已经详细介绍过头饰外观修改方法了,本节再继续说明武器的外观的修改方法。
武器的外观不同于防具,它只有在玩家进入攻击状态时才能看到,也叫「攻击外观」。
盾牌的外观也是只有在攻击状态时才能看到,但不在本篇的讨论范围内
0x10 定义武器道具
早前入手了一批新的武器外观的图档,这里就拿其中一件作为演示:
0x11 服务端代码
首先定义其在服务端装备库 item_db_equip.yml
代码:
- Id: 1300000
AegisName: FF15_NOCITS_AXE
Name: 诺克提斯之斧
Type: Weapon
SubType: 1hAxe
Buy: 500
Weight: 800
Attack: 520
Range: 1
view: 1300
Jobs:
All: true
Locations:
Right_Hand: true
WeaponLevel: 5
EquipLevelMin: 1
Refineable: true
如代码所示,注意几个地方:
- 声明道具类型为「武器」:
Type: Weapon
: - 声明武器类型为「单手斧」:
SubType: 1hAxe
- 声明武器的「外观 ID」为 1300:
view: 1300
为了方便演示,这里把
Jobs
声明为All: true
全职业可用,实际情况下根据自己的需求设置职业即可
0x12 客户端代码
然后定义其在客户端道具池中 itemInfo.lub
的代码:
[1300000] = {
unidentifiedDisplayName = "斧",
unidentifiedResourceName = "咀胶",
unidentifiedDescriptionName = {
"尚未鉴定, 可使用^990099[放大镜]^000000进行鉴定"
},
identifiedDisplayName = "诺克提斯之斧",
identifiedResourceName = "NOCITS_22273",
identifiedDescriptionName = {
"FF15 联动纪念武器",
"系列: ^777777斧^000000 攻击: ^777777520^000000",
"重量: ^77777780^000000",
"武器等级: ^7777775^000000",
"要求等级: ^7777771^000000",
"装备: ^777777全职业^000000"
},
slotCount = 0,
ClassNum = 1300
}
同样地,这里注意几个地方:
- 声明武器的「道具图档名称」:
identifiedResourceName = "NOCITS_22273"
- 声明武器的「外观 ID」:
ClassNum = 1300
0x20 武器外观池
接着定义在武器的外观池中定义这个外观 ID。
和头饰外观池不一样,武器外观池只有一个文件: data/luafiles514/lua files/datainfo/weapontable.lub
但是该文件内有 5 个表,需要修改的只有前 3 个:
- 定义「武器唯一代码」和「武器外观 ID」的关系:
Weapon_IDs
- 定义「武器唯一代码」和「武器图档名称」的关系:
WeaponNameTable
- 定义「武器唯一代码」和「武器类型」的关系:
Expansion_Weapon_IDs
- 定义「武器类型」和「攻击音效」的关系:
Expansion_Weapon_IDs
(一般不用改) - 定义「弓类型」:
BowTypeList
(目前用途不明,不动它即可)
0x21 设置外观图档
现在在外观池添加 1300 的「外观 ID」和「外观图档」的关联关系:
Weapon_IDs = {
... ...
WEAPONTYPE_NOCITS_AXE = 1300,
}
WeaponNameTable = {
... ...
[Weapon_IDs.WEAPONTYPE_NOCITS_AXE] = "_NOCITS_22273",
}
和防具外观池一样:
WEAPONTYPE_NOCITS_AXE
是任意命名的唯一字符串,分配外观 ID 为 1300。_NOCITS_22273
是武器的外观图档后缀名(下划线_
是约定的命名方式,因为之后需要拼接「职业」和「性别」前缀)
0x22 设置武器类型和音效
随后还要设定这个武器的「类型」和「攻击音效」。
武器类型我们在服务端的道具库中已经声明为「单手斧」SubType: 1hAxe
,所以这里也需要配置成一样的武器类型。
在 Expansion_Weapon_IDs
表中已经存在所有的武器类型名称了,其中「单手斧」的类型名称为 WEAPONTYPE_AXE
。
我们需要做的是新增一行代码、建立我们自定义的武器代码 WEAPONTYPE_NOCITS_AXE
和现有武器类型 WEAPONTYPE_AXE
的关联关系:
Expansion_Weapon_IDs = {
... ...
[Weapon_IDs.WEAPONTYPE_NOCITS_AXE] = Weapon_IDs.WEAPONTYPE_AXE,
}
至于 WeaponHitWaveNameTable
表是不需要配置的,因为单手斧 WEAPONTYPE_AXE
默认已经关联到斧头的攻击音效了:
WeaponHitWaveNameTable = {
... ...
[Weapon_IDs.WEAPONTYPE_AXE] = "_hit_axe.wav"
}
由于我们新增的武器代码 WEAPONTYPE_NOCITS_AXE
已经和单手斧关联上了、自然而然就拥有了单手斧的音效了。
当然如果你希望换一个音效,也可以修改它。
0x23 附-武器类型对照表
服务端代码 SubType |
客户端代码 Expansion_Weapon_IDs |
武器类型 |
---|---|---|
Fist | WEAPONTYPE_NONE | 空手 |
Dagger | WEAPONTYPE_SHORTSWORD | 短剑 |
1hSword | WEAPONTYPE_SWORD | 单手剑 |
2hSword | WEAPONTYPE_TWOHANDSWORD | 双手剑 |
1hSpear | WEAPONTYPE_SPEAR | 单手矛 |
2hSpear | WEAPONTYPE_TWOHANDSPEAR | 双手矛 |
1hAxe | WEAPONTYPE_AXE | 单手斧 |
2hAxe | WEAPONTYPE_TWOHANDAXE | 双手斧 |
Mace | WEAPONTYPE_MACE | 钝器 |
2hMace | WEAPONTYPE_TWOHANDMACE | 双手钝器 |
Staff | WEAPONTYPE_ROD | 权杖 |
Bow | WEAPONTYPE_BOW | 弓箭 |
Knuckle | WEAPONTYPE_KNUKLE | 拳套 |
Musical | WEAPONTYPE_INSTRUMENT | 乐器 |
Whip | WEAPONTYPE_WHIP | 鞭子 |
Book | WEAPONTYPE_BOOK | 书 |
Katar | WEAPONTYPE_CATARRH | 拳刃 |
Revolver | WPCLASS_GUN_HANDGUN | 手枪 |
Rifle | WPCLASS_GUN_RIFLE | 来复枪 |
Gatling | WPCLASS_GUN_GATLING | 格林机关枪 |
Shotgun | WPCLASS_GUN_SHOTGUN | 散弹枪 |
Grenade | WPCLASS_GUN_GRANADE | 榴弹枪 |
Huuma | WPCLASS_SYURIKEN | 风魔手里剑 |
2hStaff | WPCLASS_TWOHANDROD | 双手杖 |
- | WEAPONTYPE_SHORTSWORD_SHORTSWORD | 双持短剑 |
- | WEAPONTYPE_SWORD_SWORD | 双持单手剑(二刀流) |
- | WEAPONTYPE_AXE_AXE | 双持单手斧 |
- | WEAPONTYPE_SHORTSWORD_SWORD | 双持:短剑-单手剑 |
- | WEAPONTYPE_SHORTSWORD_AXE | 双持:短剑-单手斧 |
- | WEAPONTYPE_SWORD_AXE | 双持:单手剑-单手斧 |
关于双持: 两把武器在服务端和客户端的设定,都和单持武器是一样的,重点在于两把武器的外观 ID 都是指向同一个图档,而这个图档的每一帧动作都必须把两把武器都画上
0x30 图档位置
前面我们在 道具池 和 武器外观池 分别定义了两个图档名称:
- 道具图档名称:
NOCITS_22273
- 外观图档后缀名称:
_NOCITS_22273
这两个名称对应的图档位置如下:
0x31 道具图档位置
参考《防具外观 ID 解读》,和其他道具图档一样,“武器” 也是 “道具” 的一种,故道具图档位置是一样的:
- 道具在地上/拖拽时的图档:
data/sprite/酒捞袍/NOCITS_22273.act
data/sprite/酒捞袍/NOCITS_22273.spr
- 道具栏的小图图档:
data/texture/蜡历牢磐其捞胶/item/NOCITS_22273.bmp
- 道具详情的大图图档:
data/texture/蜡历牢磐其捞胶/collection/NOCITS_22273.bmp
0x32 武器外观图档位置
参考《客户端目录结构及功能说明(2024 修订)》,可知武器的外观图档目录为: data/sprite/牢埃练
。
因为每个职业有体型区别(例如宝宝为小体型、骑乘形态为大体型),故每个武器外观都是需要和职业绑定的。
在 data/sprite/牢埃练
目录下定义了每一种职业的文件夹,每个文件夹下即是该职业的武器外观图档。
以商人职系为例,其每个职业对应的文件夹为:
职级 | 职业 | 职业文件夹名称 |
---|---|---|
一转/进阶一转 | 商人 | 惑牢 |
二转/进阶二转 | 铁匠/神工匠 | 力枚傍 |
二转/进阶二转 | 炼金术师/创造者 | 楷陛贱荤 |
三转/进阶三转 | 机械工匠 | 固纳葱 |
三转/进阶三转 | 机械工匠(骑乘) | 固纳葱镐蹬瘤 |
三转/进阶三转 | 基因学者 | 力匙腐 |
四转 | 机械神匠 | MEISTER |
四转 | 生命缔造者 | BIOLO |
由于武器外观图档的格式为: data/sprite/牢埃练/{职业名}/{职业名}_{性别}{外观图档后缀名称}.[act|spr]
据此即可为每个职业添加武器外观图档(复制同一份图档、更改名称即可):
- 一转 - 商人:
data/sprite/牢埃练/惑牢/惑牢_巢_NOCITS_22273.act
data/sprite/牢埃练/惑牢/惑牢_巢_NOCITS_22273.spr
data/sprite/牢埃练/惑牢/惑牢_咯_NOCITS_22273.act
data/sprite/牢埃练/惑牢/惑牢_咯_NOCITS_22273.spr
- 二转 - 铁匠/神工匠:
data/sprite/牢埃练/力枚傍/力枚傍_巢_NOCITS_22273.act
data/sprite/牢埃练/力枚傍/力枚傍_巢_NOCITS_22273.spr
data/sprite/牢埃练/力枚傍/力枚傍_咯_NOCITS_22273.act
data/sprite/牢埃练/力枚傍/力枚傍_咯_NOCITS_22273.spr
- 二转 - 炼金术师/创造者:
data/sprite/牢埃练/楷陛贱荤/楷陛贱荤_巢_NOCITS_22273.act
data/sprite/牢埃练/楷陛贱荤/楷陛贱荤_巢_NOCITS_22273.spr
data/sprite/牢埃练/楷陛贱荤/楷陛贱荤_咯_NOCITS_22273.act
data/sprite/牢埃练/楷陛贱荤/楷陛贱荤_咯_NOCITS_22273.spr
- 三转 - 机械工匠:
data/sprite/牢埃练/固纳葱/固纳葱_巢_NOCITS_22273.act
data/sprite/牢埃练/固纳葱/固纳葱_巢_NOCITS_22273.spr
data/sprite/牢埃练/固纳葱/固纳葱_咯_NOCITS_22273.act
data/sprite/牢埃练/固纳葱/固纳葱_咯_NOCITS_22273.spr
- 三转 - 基因学者:
data/sprite/牢埃练/力匙腐/力匙腐_巢_NOCITS_22273.act
data/sprite/牢埃练/力匙腐/力匙腐_巢_NOCITS_22273.spr
data/sprite/牢埃练/力匙腐/力匙腐_咯_NOCITS_22273.act
data/sprite/牢埃练/力匙腐/力匙腐_咯_NOCITS_22273.spr
- 四转 - 机械神匠:
data/sprite/牢埃练/MEISTER/MEISTER_巢_NOCITS_22273.act
data/sprite/牢埃练/MEISTER/MEISTER_巢_NOCITS_22273.spr
data/sprite/牢埃练/MEISTER/MEISTER_咯_NOCITS_22273.act
data/sprite/牢埃练/MEISTER/MEISTER_咯_NOCITS_22273.spr
- 四转 - 生命缔造者:
data/sprite/牢埃练/BIOLO/BIOLO_巢_NOCITS_22273.act
data/sprite/牢埃练/BIOLO/BIOLO_巢_NOCITS_22273.spr
data/sprite/牢埃练/BIOLO/BIOLO_咯_NOCITS_22273.act
data/sprite/牢埃练/BIOLO/BIOLO_咯_NOCITS_22273.spr
0x40 武器外观不显示的原因
当所有地方图档都配置正确,但是进入游戏却不显示武器外观,常见有两种可能:
- 你参考了旧版的「客户端目录结构」去创建职业文件夹,以前三转是共用二转的职业图档目录的;但是至少从 202204 版本开始,三转已经拆分出独立的职业图档目录了,详细职业名称可以参考《客户端目录结构及功能说明(2024 修订)》
- 你使用的「武器外观 act 预设轨迹」和「实际职业的攻击动作轨迹」不匹配,最明显的就是体型不一致导致的错位。
譬如前面的例子中,我就没有设置「机械工匠(骑乘)」的图档,因为高达的攻击动作没有挥斧,无法把斧头渲染出来、会强制变成空手:
甚至有些时候,男/女拿武器的轨迹、一转/高转拿武器的轨迹、等等都不一样,同一把武器在不同性别、不同职业的手上可能存在横斩、竖劈、抡砸等多种使用轨迹,纯粹复制图档并不能兼容所有情况,而是需要调整 act 文件: