0x00 前言
在 rAthena 论坛公开了三组免费的发型补丁:
- 人类发型(含男女生): https://rathena.org/board/files/file/4114-hairstyle-package/
- 喵族男生发型: https://rathena.org/board/files/file/4002-fix-summoner-hairstylemale/
- 喵族女生发型: https://rathena.org/board/files/file/4004-fix-summoner-hairstylefemale/
差不多有 100 个发型,但是这些发型要怎么安装到游戏中呢 ?
0x10 安装发型图档
参考《客户端目录结构及功能说明(2024 修订)》,发型图档目录为:
- 人类男生:
data/sprite/牢埃练/赣府烹/巢
- 人类女生:
data/sprite/牢埃练/赣府烹/咯
- 猫族男生:
data/sprite/档恩练/赣府烹/巢
- 猫族女生:
data/sprite/档恩练/赣府烹/咯
故把下载的图档放置到对应目录即可:
发型图档的名称格式为: {发型编号}_{性别}.[act|spr]
这里需要注意自己安装了几个发型,即记住最后的 {发型编号}
是多少,以我这里为例:
- 人类男生发型最后的编号: 102
- 人类女生发型最后的编号: 109
- 猫族男生发型最后的编号: 20
- 猫族女生发型最后的编号: 20
不难发现,不同种族的不同性别的发型数量是可以不一致的。
0x20 调整服务端发型上限
rAthena 服务端的 NPC 脚本有一个更改发型/发色的示例脚本 npc/custom/stylist.txt:
在其中有一段代码是获取发型数量上限的:
prontera,170,180,1 script Stylist#custom_stylist 122,{
setarray .@Styles[1],
getbattleflag("max_cloth_color"),
getbattleflag("max_hair_style"), // 发型编号上限
getbattleflag("max_hair_color"); // 发色编号上限
... ...
}
而 getbattleflag("max_hair_style")
就是获取配置文件 conf/battle/client.conf 对应的配置值:
max_hair_style
的默认值为 42(官方只有 42 种发型),这里通过一个【软上限】控制发型的上限,目的是避免我们在没有更多发型图档时、给玩家设置了不存在的发型图档。
之所以说是【软上限】,是因为这个上限只是在 npc/custom/stylist.txt 脚本种起作用而已。
实际上我们在自己写 NPC 脚本时,可以完全不使用 getbattleflag("max_hair_style")
获取上限,直接通过 setlook LOOK_HAIR, 999;
就能简单跨越这个上限,但是会如果对应的发型编号图档缺失的话,就会报错、造成人物出现无头的情况:
因此 max_hair_style
软上限起到的作用是很有限的,没必要太过纠结它的具体值是什么。
为了便于以后扩充,我这里建议把 max_hair_style
设置为一个稍微大一些的值,例如 200。
然后再根据不同的种族和性别的发型图档,分别设置其上限,例如可以修改 NPC 脚本为:
prontera,170,180,1 script Stylist#custom_stylist 122,{
// 默认统一设置了发型上限值 200,但实际上 男生/女生/猫族 各有上限
.@hair_limit = getbattleflag("max_hair_style");
.@HUMAN_BOY_HAIRSTYLE_LIMIT = 102 // 人类男生当前上限
.@HUMAN_GIRL_HAIRSTYLE_LIMIT = 109 // 人类女生当前上限
.@CAT_BOY_HAIRSTYLE_LIMIT = 20 // 猫族男生当前上限
.@CAT_GIRL_HAIRSTYLE_LIMIT = 20 // 猫族女生当前上限
// 猫族发型上限
if (BaseClass == 4218) {
.@hair_limit = (Sex == 0) ? .@CAT_GIRL_HAIRSTYLE_LIMIT : .@CAT_BOY_HAIRSTYLE_LIMIT;
// 人类发型上限
} else {
.@hair_limit = (Sex == 0) ? .@HUMAN_GIRL_HAIRSTYLE_LIMIT : .@HUMAN_BOY_HAIRSTYLE_LIMIT;
}
setarray .@styles[1],
getbattleflag("max_cloth_color"),
.@hair_limit, // 发型编号上限
getbattleflag("max_hair_color") // 发色编号上限
;
... ...
}
0x30 调整客户端发型上限
但是部分同学可能会存在这种情况:在修改服务端的发型上限后、执行 setlook LOOK_HAIR, {发型编号};
时,如果 {发型编号} > 42
,发型不会发生任何变化,似乎无论如何也突破不了发型的默认上限。
其实不然,之所以出现这种情况,是因为客户端还存在【硬上限】,需要 DIFF 更改:
修改人族发型上限 Increase human hair style limit in game
:
修改喵族发型上限 Increase doram hair style limit in game
:
因为我现在的发型图档数量都是参差不齐,而每次 DIFF 都比较麻烦,因此我这里都修改为一个较大的值,主要还是通过服务端的【软上限】进行控制。
DIFF 的方法可以参考《从零开始 DIFF Ragnarok 登入器教程》,但是如果你在 DIFF 看不到这两个选项,更新 Nemo 的版本到最新即可
0x40 安装发色图档
其实到这里为止,如无意外在游戏中已经可以更换发型了:
但是当你为新发型更换发色时,可能会出现全黑的情况:
这是因为缺失了发色图档。
参考《客户端目录结构及功能说明(2024 修订)》,发色图档目录为:
- 人类:
data/palette/赣府
- 猫族:
data/palette/档恩练/赣府
而发色图档的格式为: 赣府{发型编号}_{性别}_{发色编号}.pal
一般情况下,在别人提供的发型补丁中、都会带有配套的发色图档的,但如果没有,我们也可以自己做。
与发型一样,我们可以在 conf/battle/client.conf 中找到发色的上限值 max_hair_color: 33
,意思就是说 “每个发型都有 33 种发色” (当然如果你没有扩充过,官方默认只有 8 种)
制作发色图档的方法很简单,我们只需要把已经有的发色图档成组复制出来,改为新发型的发色即可。
例如我已经有 3_巢.spr
发型的所有颜色的发色图档:
赣府3_巢_0.pal
赣府3_巢_1.pal
赣府3_巢_2.pal
- … …
赣府3_巢_32.pal
赣府3_巢_33.pal
现在需要为 109_巢.spr
的发型添加发色,只需要成组复制为:
赣府109_巢_0.pal
赣府109_巢_1.pal
赣府109_巢_2.pal
- … …
赣府109_巢_32.pal
赣府109_巢_33.pal
然后放置在对应发色的图档目录即可。
当你缺失了多个发型的发色时,需要复制的文件就会极多,所以这一步建议自己写一个简单的复制脚本、或使用一些辅助工具,例如批量文件重命名工具等。