石器百科 开始游戏

骑乘

骑上宠物后,人物在地图上会换成「人骑宠」的造型,战斗中人和骑宠一起行动、一起分担伤害。想骑宠物要先去骑乘训练师那里上课,还要有一只和你的造型相配、忠诚度满 100 的宠物。

本文依据 2.5 原版服务端源码(char/family.c FAMILY_RidePet、char/char_base.c 骑宠表、npc/npc_riderman.c、battle/battle_event.c)与数据(data/npc/family/riderman.*、data/leaderride.txt、data/ride.txt),并以 include/version.h 实际打开的功能为准:_NEW_RIDEPETS、_RIDE_CF、_FM_LEADER_RIDE、_RIDEMODE_20、_ITEM_RIDE、_VIP_RIDE、_EVERYONE_RIDE、_PET_2TRANS 开启;_RIDELEVEL、_GM_METAMO_RIDE 未开启。宠物本身的养成见宠物。

一、怎么骑

  1. 打开宠物窗口(Ctrl+P),点宠物左边的状态按钮。按钮在「休息 → 待机 → 战斗 → 邮件/骑乘」之间循环;符合骑乘条件的宠物会切到「骑乘」,人物立即换成骑乘造型。
  2. 再点一次骑乘中宠物的状态按钮就下骑,人物恢复原来的造型。
  3. 战斗中、交易中不能上骑(「战斗中不可骑宠!」「交易中不可骑宠!」);乌力化状态下也不能骑。

骑乘中的宠物不能同时作为出战宠物,也不能寄宠物邮件、不能丢弃、不能转生。

二、骑乘训练师

新角色的「骑乘等级」是 −1,什么都骑不了,必须先找骑乘训练师上课。四大村的庄园里各有一位:

地点 坐标
萨姆吉尔庄园 (61,45)
玛丽娜丝的庄园 (55,16)
加加村的庄园 (50,21)
卡鲁它那庄园 (16,35)

出处:data/npc/family/riderman.create。另有一位「特级骑乘训练师」(萨姆吉尔村长家)在数据里被注释掉了,不会出现。

和他对话可以选「关于骑乘宠物」「查询可骑乘的宠物」「学习骑乘宠物」。「查询可骑乘的宠物」会按你的人物造型列出下面第四节对照表里你能骑的宠物。

课程与学费

课程 学费 学完后的骑乘等级 能骑的宠物 前置
初级班 5,000 石币 40 Lv40 以下 无
中级班 10,000 石币 80 Lv80 以下 初级班
高级班 15,000 石币 120 Lv120 以下 中级班
特级班 20,000 石币 200 全部等级 高级班
  • 必须按顺序学,跳级会被拒绝(「你必须先学过初级班才能来中级班唷。」)。已经学过的课不用再学。
  • 学费不足时会提示需要多少石币,不扣钱。
  • 学费的 1/5 会进入占领该村庄园的家族的家族资金。

出处:npc/npc_riderman.c NPC_RidermanWindowTalked;data/npc/family/riderman.conf(takegold)。新角色的骑乘等级来自 char/char.c 建角时的 getRidePetLevel()(configfile.c):setup.cf 没设 RIDEPETLEVEL 时为 −1。私服可以改这个值,例如设成 200 就等于出生即学会特级班。

三、骑乘条件

点「骑乘」时,服务端按下面的顺序检查,任一条不满足就骑不上:

顺序 条件 不满足时
1 这只宠物不是出战宠物,你也没有正在骑别的宠物 没有提示
2 宠物等级 ≤ 你的骑乘等级(40/80/120/200) 「你目前只能骑乘等级小于N级的宠。」
3 宠物忠诚度 = 100 「该骑宠的忠小于100」
4 宠物等级 ≤ 人物等级 + 5 没有提示
5 宠物转生次数 ≤ 2 没有提示
6 能为你的造型找到对应的骑乘图(第四~七节) 没有提示

出处:char/family.c FAMILY_RidePet。

几点说明:

  • 忠诚度 100 是最大的门槛。骑宠的驯服难度 modai 大多是 300,要靠人物等级、魅力和宠物升级累积的忠诚修正才能拉满(公式见宠物第三节)。人物转生后忠诚度会大幅提高。
  • 原版客户端在送出骑乘请求前也会自己检查一遍:忠诚 ≥ 100、宠物等级 ≤ 骑乘等级、宠物等级 < 人物等级 + 5,再查客户端内置的骑宠表(是否包含第五、六节的特殊骑宠未确认)。所以用原版客户端时,宠物最多只能比人物高 4 级。
  • 二转宠能不能骑:精灵王的台词说宠物二次转生后就无法骑乘,但服务端只拦「转生次数大于 2」,宠物最多只能转 2 次,所以按代码二转宠仍可骑。
  • 现行 family.c 里第 4 条之后多了一段无条件的「你最高只能骑宠等级比你大5级的宠。」并直接返回,会让任何人都骑不上;这是一段坏掉的调试改动,备份文件 family.c.bak 里没有。本文和网页版都按 family.c.bak 的逻辑。

四、人物造型 × 骑宠 对照表(ridePetTable)

人物有 12 种体型,每种 4 个颜色(图号末位 +0、+5、+10、+15)。每种体型都能骑一种「大型骑宠」(四色通用),另外每个颜色还能各骑一种「贝鲁系」骑宠:

体型(图号) 大型骑宠(四色通用) 颜色 1(+0) 颜色 2(+5) 颜色 3(+10) 颜色 4(+15)
小矮子(100000) 布林帖斯 格鲁西斯 贝鲁卡 金格萨贝鲁 贝鲁伊卡
赛亚人(100020) 邦恩多斯 贝鲁伊卡 格鲁西斯 贝鲁卡 金格萨贝鲁
辫子男孩(100040) 布洛多斯 贝鲁伊卡 金格萨贝鲁 贝鲁卡 格鲁西斯
酷哥(100060) 布拉奇多斯 格鲁西斯 贝鲁卡 金格萨贝鲁 贝鲁伊卡
熊皮男(100080) 邦恩多斯 贝鲁伊卡 贝鲁卡 金格萨贝鲁 格鲁西斯
大个(100100) 布拉奇多斯 格鲁西斯 贝鲁伊卡 金格萨贝鲁 贝鲁卡
小矮妹(100120) 斯天多斯 贝鲁卡 金格萨贝鲁 贝鲁伊卡 格鲁西斯
熊皮妹(100140) 斯天多斯 贝鲁卡 格鲁西斯 金格萨贝鲁 贝鲁伊卡
帽子妹(100160) 布林帖斯 金格萨贝鲁 格鲁西斯 贝鲁卡 贝鲁伊卡
短发夹妹(100180) 布洛多斯 贝鲁伊卡 金格萨贝鲁 格鲁西斯 贝鲁卡
手套女(100200) 布拉奇多斯 格鲁西斯 贝鲁伊卡 贝鲁卡 金格萨贝鲁
辣妹(100220) 邦恩多斯 金格萨贝鲁 贝鲁卡 格鲁西斯 贝鲁伊卡

出处:char/char_base.c ridePetTable[](_GM_METAMO_RIDE 未开启的部分)。

  • 表是按宠物的图像比对的,所以同一种宠物的不同版本(例如新手村送的「新手贝鲁卡」、各地的贝鲁卡)只要外观相同就都能骑。
  • 表里还有两行特殊组合:外观为「鲁比」(图号 101177)的角色可以骑「吉比」、外观为「吉比」(101178)的角色可以骑「鲁比」,以及 6 行只对赛亚人族长造型(图号 100710/100715)有效的霍尔克、奇宝、瑞里西尔。一般玩家的外观不会是这些图号,用不到。

五、特殊骑宠(_NEW_RIDEPETS)

除了上表,2.5 还准备了 15 种「特殊骑宠」,每种对应 12 种体型各自的骑乘图(RideNoList)。人物身上有一组「已学会的特殊骑宠」旗标,学会了哪一种才能骑哪一种:

编号 骑宠 编号 骑宠
RIDE_PET0 帖拉所伊朵 RIDE_PET8 左迪洛斯
RIDE_PET1 玛恩摩洛斯 RIDE_PET9 巴朵兰恩
RIDE_PET2 朵拉比斯 RIDE_PET10 史卡鲁
RIDE_PET3 拉奇鲁哥 RIDE_PET11 罗多克雷
RIDE_PET4 扬奇洛斯 RIDE_PET12 奇宝
RIDE_PET5 卡达鲁卡斯 RIDE_PET13 霍尔克
RIDE_PET6 卡卡金宝 RIDE_PET14 瑞里西尔
RIDE_PET7 格尔格

出处:char/char_base.c RideCodeMode[]、RideNoList[];include/char_base.h RIDE_PET0..31(原版把 RIDE_PET10 与 RIDE_PET11 的位对调了:RIDE_PET10 = 1<<11、RIDE_PET11 = 1<<10)。

同样按宠物图像比对,同种骑宠的任何版本都算。可是按原版 2.5 的数据,玩家几乎没有途径学会这些旗标:

取得方式 原版 2.5 的实际情况
骑宠证书(ITEM_useLearnRideCode) 函数写好了,但没有在道具函数表里登记,用了也「什么也没发生」;itemset.txt 里也没有这种道具
会员骑宠(_VIP_RIDE,ITEM_VipRide 赠送瑞里西尔) 函数已登记,但 itemset.txt 里没有使用它的道具
ride.txt 自定义(_RIDE_CF) 读取时要求逗号分隔、名称中间带空格(「豆 丁」等),而原版 ride.txt 是竖线分隔、名称无空格,一行都对不上,表格保持内置值
家族族长骑宠(_FM_LEADER_RIDE) 唯一实际有效的途径,见下一节
2.0 骑宠模式(_RIDEMODE_20) 由 setup.cf 的 RIDEMODE 控制,原版默认 0 = 关闭

六、族长骑宠(leaderride.txt)

拥有庄园的家族,成员可以按职位骑 leaderride.txt 里指定的特殊骑宠。每个庄园有三个位置:族长能用全部三个,长老能用后两个,一般成员只能用最后一个(申请中的不算成员)。

庄园(族长家地图) 位置 1(族长) 位置 2(族长、长老) 位置 3(全体成员) 实际可骑
萨姆吉尔(1041) 26 28 9 巴朵兰恩
玛丽娜丝(2031) 26 28 8 左迪洛斯
加加(3031) 26 28 27 无
卡鲁它那(4031) 26 28 29 无
伊甸、塔尔塔、尼克斯、弗烈顿、亚伊欧(5031~9031) 26 28 10 罗多克雷
瑞尔亚斯(10031) 26 28 24 无

表中的数字是旗标位:位 8 = 左迪洛斯、位 9 = 巴朵兰恩、位 10 = RIDE_PET11 罗多克雷(因为 10、11 两位对调),位 24~29 没有对应的宠物。所以:

  • 占领萨姆吉尔庄园的家族,全体正式成员都能骑巴朵兰恩;
  • 占领玛丽娜丝庄园的家族,全体正式成员都能骑左迪洛斯;
  • 5031~9031 的庄园在 2.5 的庄园表里是否存在未确认。

骑乘的其他条件(骑乘等级、忠诚 100、等级差)照样要满足。判定看的是「家族拥有的庄园」,不是你当前所在的地图,所以在哪里都能骑。

出处:data/leaderride.txt;char/char_base.c CHAR_FmLeaderRide_init、CHAR_FmLeaderRide;char/family.c.bak FAMILY_RidePet。

七、驯骑装备(_ITEM_RIDE)

_ITEM_RIDE 允许一种头部装备充当「驯骑装备」:道具的使用函数写成 ITEM_RIDE、参数写成「宠物图号|骑乘图号」。戴着它时,如果骑的宠物外观与参数里的宠物图号相同,就能用参数里的骑乘图骑上去(前面几节都找不到骑乘图时才会用到)。卸下这件头部装备会立刻下骑。

原版 2.5 的 itemset.txt 里没有任何使用 ITEM_RIDE 的道具,这个功能只是代码支持。

出处:char/family.c.bak FAMILY_RidePet 的 _ITEM_RIDE 段;char/char_item.c 卸下装备时的 _ITEM_RIDE 段。

八、骑乘中的战斗

骑上宠物进入战斗后,人和骑宠算作一个整体(骑宠不会作为出战宠物另外站位)。

能力合成

开启了 _BATTLE_NEWPOWER,骑乘时的攻防敏这样合成:

数值 近战武器 / 空手 投掷武器(弓、回力镖、投掷石、投掷斧)
攻击 人×0.8 + 宠×0.8 人 + 宠×0.4
防御 人×0.7 + 宠×0.7 人×0.7 + 宠×0.7
敏捷(自己出手时) 人×0.2 + 宠×0.8 人×0.8 + 宠×0.2
敏捷(被攻击时) 人×0.1 + 宠×0.9 人×0.1 + 宠×0.9

出处:battle/battle_event.c BATTLE_adjustRidePet3A。

伤害分担与落马

受到攻击时,伤害按双方防御力分给人和骑宠:

人承受 = 伤害 × 骑宠防御 ÷ (人物防御 + 骑宠防御) + 1
骑宠承受 = 伤害 − 人承受 + 1

注意公式里人承受的比例用的是骑宠的防御:骑宠防御越高,人反而分到越多。骑宠 HP 已经是 0 时,伤害全部由人承受。

骑宠 HP 被打到 0 就会落马:人物恢复步行造型,战斗结束后骑乘状态解除。一些技能(例如媚惑术)命中时也会让人落马。

出处:battle/battle_event.c 伤害结算段(playerdamage / petdamage、CHAR_WORKPETFALL)、BATTLE_changeRideImage。

骑宠的经验

骑宠也会获得经验,按和人物同样的方式计算后再乘 60%,所以边骑边练也能让骑宠升级(升级同样会增加忠诚修正)。

出处:battle/battle.c BATTLE_AddProfit(nowexp *= 0.6)。

九、网页版说明

  • 网页版的骑乘逻辑按 family.c.bak 移植(packages/tools/src/game/world.ts toggleRide / rideImageFor,特殊骑宠表在 game/ride.ts),条件与提示文字和本文一致。
  • 骑乘训练师的四个课程、学费、家族分成都照原版;「查询可骑乘的宠物」在网页版用消息窗列出你能骑的宠物名。
  • 旧存档如果原本就在骑宠物,迁移时会自动给能骑这只宠物的最低一班骑乘等级,其余旧存档改为原版的 −1。
  • 网页版采用原版默认值:新角色骑乘等级 −1、RIDEMODE = 0(2.0 骑宠模式关闭)。原私服的 setup.cf 曾设定 RIDEPETLEVEL=200、RIDEMODE=1、RIDELEVEL=10,网页版没有沿用(其中 RIDELEVEL 需要 _RIDELEVEL,原版本来就没编译)。