道具与装备
石器时代的所有道具都来自服务端道具表 data/itemset.txt(2.5 数据约一万两千件)。本文先讲玩家最常碰到的操作(装备、使用、丢弃、买卖),再给出数值细节和原版代码出处。合成与料理见 料理与合成。
背包与装备栏
| 位置 | 格数 | 说明 |
|---|---|---|
| 装备栏 | 5 | 头、身体、手(武器)、饰品 1、饰品 2 |
| 背包 | 15 | 一件道具占一格,2.5 版不能堆叠 |
| 寄放店(道具) | 10 + 转生次数 × 4,最多 30 | 每存一件收费,默认 200 石币 |
- 道具窗口里按住道具拖到另一格,就是移动、装备或卸下。双击装备是穿上或脱下,双击可用道具就是使用(需要选目标时会弹出选择窗)。
- 身上石币上限 = 1,000,000 + 转生次数 × 1,800,000。如果卖掉东西会让石币超过上限,商店就不收。
- 寄放店不收「登出后消失」「丢弃后消失」以及「不能用宠物邮件寄送」的道具。
出处:
include/char_base.h(CHAR_EQUIPPLACENUM5、CHAR_MAXITEMNUM15、CHAR_MAXPOOLITEMHAVE30);char/char_base.cCHAR_getCharPoolItemIndexElement(10 + 转生×4)、CHAR_getMaxHaveGold(_FIX_MAX_GOLD);npc/npc_poolitemshop.c(NPC_POOLITEMSHOP_DEFAULT_COST200、不可寄放的检查)。
道具类型(ITEM_CATEGORY)
itemset 的「类型」栏决定道具能放进哪个装备栏、能不能使用。
| 类型号 | 名称 | 装备位置 |
|---|---|---|
| 0 | 拳套(FIST) | 手 |
| 1 | 斧(AXE) | 手 |
| 2 | 棍(CLUB) | 手 |
| 3 | 枪(SPEAR) | 手 |
| 4 | 弓(BOW) | 手 |
| 5 | 盾(SHIELD) | 不能装备(原版代码里这一项被注释掉了) |
| 6 | 头盔(HELM) | 头 |
| 7 | 铠甲(ARMOUR) | 身体 |
| 8 | 手环(BRACELET) | 饰品 |
| 9 | 乐器(MUSIC) | 饰品 |
| 10 | 项链(NECKLACE) | 饰品 |
| 11 | 戒指(RING) | 饰品 |
| 12 | 腰带(BELT) | 饰品 |
| 13 | 耳饰(EARRING) | 饰品 |
| 14 | 鼻环(NOSERING) | 饰品 |
| 15 | 护身符(AMULET) | 饰品 |
| 16 | 其他(OTHER) | 不能装备:一般道具、药品、任务物品、素材 |
| 17 | 回旋标(BOOMERANG) | 手 |
| 18 | 投掷斧(BOUNDTHROW) | 手 |
| 19 | 投掷石(BREAKTHROW) | 手 |
| 20 | 料理(DISH) | 不能装备:吃的东西 |
| 21 / 22 | 金属 / 宝石(镶嵌用) | 不能装备 |
| 23 | 货物(WARES) | 不能装备;身上带着货物时不能用传送道具 |
2.5 数据里件数最多的是铠甲(约 2060 件)和头盔(约 1430 件),每类武器各七百件左右,料理类九百多件。
出处:
include/item.hITEM_CATEGORY;item/item.cITEM_getEquipPlace;件数来自docs/ITEM_COVERAGE.md。
装备条件
- 等级:道具等级高于人物等级时,会提示「能力不足无法装备。」——但只有未转生的角色才会检查等级,转生过的人物不受道具等级限制。
- 能力需求:道具如果设了需求腕力、需求敏捷或需求转生次数,不够时装不上。
- 两个饰品栏不能放同一种类:例如不能同时戴两只戒指(「无法同时装备两项同种类的物品。」),戒指加项链则可以。
- 变身中不能装远程武器:用变身镜变身后,弓、回旋标、投掷斧、投掷石都装不上(「变身无法使用远距离武器!」)。
出处:
char/char_item.cCHAR_moveItemFromItemBoxToEquip(ITEM_LEVEL、_ITEMSET4_TXT的ITEM_NEEDSTR/NEEDDEX/NEEDTRANS、_FIXBUG_ATTACKBOW)、CHAR_ItemUse(双击饰品时自动挑选饰品栏)。
itemset.txt 各栏的含义
itemset 每行用逗号分隔,共 94 栏,少一栏整行就不会被读取。下面按列号(从 1 数起)列出对玩家有意义的栏位:
| 列 | 栏名 | 含义 |
|---|---|---|
| 1 | name | 道具名 |
| 2 | secretname | 道具栏里显示的名字(魔术笔改的就是这一栏) |
| 3 | effectstring | 说明文字 |
| 4 | argument | 使用效果的参数,例如 体100、毒 turn 10 成 300 |
| 11 | usefunc | 使用时调用的函数(见下文「特殊道具」) |
| 12 / 13 | attachfunc / detachfunc | 装上 / 卸下时调用(套装、万兽之戒、太阳神的首饰等) |
| 14 / 15 | dropfunc / pickupfunc | 丢出 / 捡起时调用(骰子、麦克风、摆饰) |
| 17 | id | 道具编号 |
| 18 | imagenumber | 图号 |
| 19 | cost | 价格(商店买卖的基准) |
| 20 | type | 类型(见上表) |
| 21 | fieldtype | 使用场合:0 都可以、1 只能在战斗中、2 只能在地图上 |
| 22 | target | 目标:0 自己、1 他人、2 我方全体、3 敌方全体、4 全体;再加 100 表示可以对气绝的人用 |
| 23 | level | 装备等级 |
| 24 | dambreak | 使用次数(记忆的羽毛、奇怪的石头等) |
| 27–29 | nestr / nedex / netra | 装备所需的腕力 / 敏捷 / 转生次数 |
| 31 / 32 | damcrushe / maxdmce | 当前耐久 / 最大耐久(空 = 不会损坏) |
| 33 / 34 | otdmags / otdefcs | 额外伤害 % / 额外防御 %(-100~100) |
| 35 | nsuit | 套装编号 |
| 36 / 37 | attacknum_min / max | 武器每回合的攻击次数(弓 = 箭数) |
| 38–53 | attack … avoid | 攻、防、敏、HP、MP、运、魅、回避,每项两栏:最小值, 最大值 |
| 54 / 55 | attrib / attribvalue | 属性(1 地、2 水、3 火、4 风)与属性值 |
| 56–58 | magicid / magicprob / magicusemp | 装备附带的咒术、发动率、耗气 |
| 59–63 | arr / seqce / iapi / hirt / neguard | seqce = 出手顺序、hirt = 额外命中、neguard = 无视目标防御 %;arr、iapi 的实际作用未确认 |
| 64–77 | poison … critical | 毒、麻痹、睡眠、石化、酒醉、混乱的抗性与会心一击,每项两栏:最小, 最大 |
| 79 | dropatlogout | 1 = 登出后消失 |
| 80 | vanishatdrop | 1 = 丢到地上直接消失 |
| 82 | canpetmail | 1 = 可以用宠物邮件寄送 |
| 83 / 84 | canmergefrom / canmergeto | 能当合成材料 / 能被合成出来 |
| 85–94 | ingname0..4 / ingvalue0..4 | 合成成分与成分值(见 料理与合成) |
出处:
item/item.cITEM_itemconfentries[](ITEM_ID_TOKEN_INDEX17)、ITEM_readItemConfFile;网页版的解析在packages/tools/src/game/gmsv-data.tsparseItems。
数值的随机浮动(± 随机)
带「最小值, 最大值」两栏的能力(攻、防、敏、HP、MP、运、魅、回避、各种抗性、会心)会在道具被做出来的那一刻各自随机一次:
实际值 = 两栏中较小的值 + RAND(0, |最大 − 最小|) (两端都可能取到)
所以同一种装备每件的数值可能不一样,说明文字里的「防+10」只是标称值。例子:
道具一旦生成,数值就固定下来,之后不会再变。商店买的、打怪掉的、任务给的、合成做出来的,全都按这套规则生成。2.5 数据里大约有 9000 件道具至少有一项会浮动。
武器的攻击次数栏如果最小值写 0,就当作与最大值相同。
出处:
item/item.cITEM_getRandomValue(记下randomwidth = |max − min|,基础值取较小者)、ITEM_makeItem(data[i] = 基础 + RAND(0, randomdata[i]))、ITEM_readItemConfFile(attacknum_min 为 0 时取 max)。
装备效果怎么加到人物身上
- 攻、防、敏、HP 直接加到人物的对应数值上(防、敏合计最低 −100)。
- MP 上限加上装备加成后,限制在 0~1000。
- 运(LUCK)合计限制在 1~5,魅力限制在 0~100。
- 各种异常抗性、会心一击、额外伤害 / 防御:合计限制在 −100~100。
- 属性:带属性的装备让该属性 + 属性值,同时其余三种属性各 − 属性值,每项上限 100。例如 大地的耳饰 [地](地 20)戴上后地 +20、水火风各 −20。
出处:
item/item.cITEM_equipEffect(itemEffect[]的 min/max、attribaccum、CHAR_MAXATTRIB100)。
套装
nsuit 栏相同的装备同时穿上 3 件以上就会触发套装效果。效果写在这些装备的参数栏里,例如 FSTR:30 攻击 +30%、HP:50 战斗中每回合回复 50 HP,另有 MSTR / MTGH / MDEX 攻防敏加值、VIT 体力上限加值等。2.5 数据共有 37 件套装道具,例如提亚系列:提亚棒(FSTR:30)、提亚兜、提亚铠(HP:50)。
出处:
item/item_event.cITEM_CheckSuitEquip/ITEM_suitEquip、item/item.cOther_DefcharWorkInt(_SUIT_ITEM、_SUIT_ADDENDUM、_SUIT_ADDPART3);参数键名对照见网页版character.tssuitEffect。
耐久与损坏
原版开启了道具损坏(_TAKE_ITEMDAMAGE)。有耐久值的装备(itemset 第 31/32 栏非空,2.5 数据中约 1500 件,数值多在 20 万~250 万之间)会在战斗中慢慢磨损;耐久栏为空的装备永远不会坏。
攻击命中并造成伤害时会产生磨损:
- 攻击方的武器:磨损基数 = (伤害 − 50) / 40,至少为 1。
- 防御方的一件防具:随机挑一个部位——身体 50%、头 17%、饰品 1 17%、饰品 2 16%。挑中的部位没有装备时,顺延到下一个有装备的部位(武器不算在内)。磨损基数 = (200 − 伤害) / 20;伤害超过 200 时为 1;伤害在 181~200 之间时基数为 0,不会磨损。
- 每次实际扣除 RAND(基数, 基数 × 1.4) 点耐久。
耐久比例跌破 70%、50%、30% 时,分别提示「受损」「毁坏」「不堪使用」。这只是提示:原版把降低能力的那段代码注释掉了。耐久归零时提示「××因过度损坏而消失。」,道具直接消失。
大多数装备的耐久高达数十万,正常游玩几乎感觉不到磨损。
出处:
battle/battle_event.cBATTLE_ItemCrushCheck、BATTLE_ItemCrush、BATTLE_ItemCrushSeq(_TAKE_ITEMDAMAGE)。网页版目前没有实装这套磨损机制(战斗模拟中没有找到对应的实现)。
水晶与属性饰品
2.5 版没有后期版本那种独立的「元素水晶」装备栏。名字里带「水晶」的道具主要是合成素材:
- 从 有缺陷的水晶(成分:水晶 10)、尚未琢磨的水晶(水晶 30),一路到 最上级的水晶(水晶 905)和 梦幻级的水晶(水晶 1125),供宠物「加工」饰品时使用。
- 透明的水晶、碧青水晶 等是任务 / 事件道具,丢到地上会直接消失。
想提高人物的地水火风属性,要靠带属性的饰品和武器(itemset 第 54/55 栏),例如 大地的耳饰 [地]、火之手环 [火],以及大量「合成××[地]」之类的合成装备。属性的计算规则见上一节。
特殊道具与使用效果
能「使用」的道具(非装备类)在双击时会调用 usefunc。没有 usefunc,或者 usefunc 的名字不在原版函数表里,使用时只会显示「什麽也没有发生。」。下面按函数分类,列出 2.5 数据中实际有道具用到的函数。
回复类
| 函数 | 件数 | 代表道具 | 效果 |
|---|---|---|---|
| ITEM_useRecovery | 619 | 小块肉(体20)、最棒的肉、小块气力肉(气5)、耐久力回复药 | 参数中 体 回 HP;气 回 MP(只对人物);魅 加魅力(只对人物,上限 100);忠 加忠诚(只对宠物);全 全部回满。回复量 = RAND(数值×0.9, 数值×1.1)。数值为负时是减少 |
| ITEM_useStatusRecovery | 27 | 治疗中毒的肉、治疗混乱的肉 | 战斗中解除参数指定的异常(毒 / 麻 / 眠 / 石 / 醉 / 乱;全 = 全部) |
| ITEM_Refresh | 2 | 勇士火锅 | 战斗中解除沉默(全体)。在地图上使用会显示「什麽也没发生。」,道具照样消耗掉 |
| ITEM_useImprecate | 2 | 超级补的肉(恩:100x4) | 战斗中的持续效果:恩 每回合回 HP、祝 每回合回 MP(只对人物)、咒 每回合扣 MP(只对人物)。写法是「数值x回合数」 |
| ITEM_ChikulaStone | 2 | 奇克拉耐久力之石(hp:50)、奇克拉气力之石(mp:20) | 使用后,非战斗状态下每 30 秒自动回复 HP 或 MP;重新登入后失效 |
- 战斗中使用回复料理时只认
体(没有体才看气);中毒的玩家不能被回复 HP。 - 野外回复不乘回复率(原版开了
_MAGIC_REHPAI)。
复活
| 函数 | 件数 | 代表道具 | 效果 |
|---|---|---|---|
| ITEM_useRessurect | 5 | 复活药(100)、回魂之玉(600) | 只能在战斗中使用(目标栏 101 = 可以对气绝者用)。让气绝的同伴复活,HP = RAND(数值×0.9, 数值×1.1),至少 1;数值为 0 时回满。PK / 决斗中不能复活玩家 |
| ITEM_ResAndDef | 2 | 真诚的眼泪(复活光精灵)、铁壁之石(复活守精灵) | 复活,外加光 / 镜 / 守效果(n 回合内吸收、反射或抵消伤害) |
网页版:ITEM_ResAndDef 的复活部分已实现,光 / 镜 / 守的伤害吸收与反射机制还没有移植(
docs/ITEM_COVERAGE.md)。
战斗辅助
| 函数 | 件数 | 代表道具 | 效果 |
|---|---|---|---|
| ITEM_useCaptureUp | 26 | 野蛮团子(30)、红透的蕃茄(70) | 战斗中对自己使用:捕获率修正 + RAND(数值×0.9, 数值×1.1),可以累加,捕捉后清零。详见 宠物 |
| ITEM_useStatusChange | 52 | 毒蛇的肉(毒 turn 10 成 300)、安眠药 | 战斗中让目标陷入异常状态:turn 后面是回合数,成 后面是成功率基础值(默认 15) |
| ITEM_useFieldChange | 4 | 马伦的葡萄(地 50 回合 6) | 战斗中把场地属性改成地 / 水 / 火 / 风 |
有几件道具的参数写法有问题,原版里就不会生效:例如马伦的毒蘑菇参数是「毒 回合 8」(没有 turn 字样,回合数为 0);几种酒写成「turn3」,数字紧贴着 turn,同样读不到回合数。
遇敌控制(驱魔 / 引怪)
| 函数 | 件数 | 代表道具 | 效果 |
|---|---|---|---|
| ITEM_useNoenemy | 3 | 除虫剂、龙王的守护 | 「你感受到周边的杀气消失了。」之后约 6 分钟不遇敌(计数 6,每 60 秒减 1),结束时提示「守护消失了。」 |
| ITEM_useEncounter | 2 | 炎之圣石、神签(大凶) | 「你感受到周边突然充满了杀气!」站在原地每 2.5 秒遇敌一次,走动就解除 |
| ITEM_equipNoenemy | 3(装备) | 太阳神的首饰 | 装上后按参数中的 noen 等级,在指定楼层隐藏行踪、不遇敌 |
出处:
item/item_event.cITEM_useNoenemy、ITEM_equipNoenemy;net.csetNoenemy(noenemy = 6)以及每 60 秒一次的递减。
移动
| 函数 | 件数 | 代表道具 | 效果 |
|---|---|---|---|
| ITEM_useWarp | 34 | 精灵的羽毛(全体飞到 E 甸园) | 参数是「单人0/全体1 楼层 x y」,使用后传送;身上带着货物时不能用 |
| ITEM_useWarpForNum | 5 | 记忆的羽毛 | 第一次在村子里使用时,记下当前位置并飞往目的地;次数用完时飞回记下的地点,羽毛消失 |
| ITEM_LoverSelectUser | 1 | 爱相随戒指 | 设定好友后可以随时飞到对方身边,共 10 次 |
变身与宠物相关
| 函数 | 件数 | 代表道具 | 效果 |
|---|---|---|---|
| ITEM_metamo | 4 | 变身镜 Lv1(60 秒)~ 变身镜 Lv4(600 秒) | 对自己的宠物使用,就变成那只宠物的样子,持续参数指定的秒数;对自己使用则变回原样。骑乘中、或手上拿着远程武器时不能变身 |
| ITEM_petFollow | 7 | 宠物项圈 Lv 1(Lv40 以下)~ 宠物项圈 Lv 5 | 带宠物在地图上散步(宠物跟在身后走)。宠物等级不能超过项圈参数;项圈不会消耗 |
| ITEM_useSkillCanned | 4 | 火精灵力量封印石 等 | 把封印的技能写进宠物技能栏(2.5 的技能表里没有这些技能,原版同样无效) |
| ITEM_WearEquip | 1(装备) | 万兽之戒 | 戴着时,捕捉 / 捡宠物 / 交易宠物不受「宠物比自己高 5 级」的限制 |
成长相关
| 函数 | 件数 | 代表道具 | 效果 |
|---|---|---|---|
| ITEM_useSkup | 2 | 泪之石、英雄的祝福 | 能力点数 +1(「你感受到自己的能力被提升了。」) |
| ITEM_Constitution | 4 | 鲜肉汤圆(VI:1)等四种汤圆 | 把体力 / 腕力 / 耐力 / 敏捷其中一项减 1 点,换回 1 点能力点数(调整体质) |
| ITEM_Addexp | 3 | 智慧果的果酱(增100 分720) | 一段时间内战斗经验加成(加成百分比 × 分钟数),效果与时间可以累加,累计上限 72000(= 加成 × 分钟) |
其他
| 函数 | 代表道具 | 效果 |
|---|---|---|
| ITEM_useRenameItem | 魔术笔 (油性)(1 次)、取─名字 ∞(无限) | 给合成做出来的道具改名,详见 料理与合成 |
| ITEM_useMic | 麦克风 | 切换麦克风模式,说话可以传到约 15 格远;不会消耗,丢出时自动关闭 |
| ITEM_ThrowItemBox | 宝箱 | 打开后随机得到石币或道具 |
| ITEM_useMaxRedSocksNew | 圣诞袜 | 从参数列出的礼物中随机给一件(列表里有些 id 不在 2.5 道具表里,抽中就什么也得不到) |
| ITEM_useMaxRedSocks | 圣诞红袜 | 只能在 2002-12-24 起的 24 小时内使用,现在使用会提示期限已过 |
出处:
item/item_event.c各个ITEM_use*函数、battle/battle_item.c的战斗分支;每个函数的件数和网页版实现状况见docs/ITEM_COVERAGE.md。
丢弃与捡起
丢弃:把道具从道具窗口拖到窗口左侧外面。丢的如果是装备栏里的东西,会先触发卸下。
- 道具落在面前那一格;放不下时,依次试周围 8 个方向,最后是脚下。都放不下时提示「周围的地面已经满了。」
- 以自己为中心 23×23 范围内,地上的物品或角色超过 80 个时,提示「这里的物品已经太多了,不能再丢了。」
- 交易中不能丢东西。
vanishatdrop= 1 的道具(多数任务道具,以及泪之石、神签等)丢出时直接显示「×× 消灭了。」,不会出现在地上。- 放在地上太久没人捡的道具会被系统清掉。时长由 setup.cf 的
Itemdeletetime决定,本服设定为 1800 秒(私服可改)。
捡起:点地上的道具(站在旁边时会自动转向它)。服务端先找面前一格,再找脚下;战斗中不能捡;背包没有空格时捡不起来。
登出:dropatlogout = 1 的道具(例如麦克风)会在登出时被删除。
出处:
char/char_item.cCHAR_DropItem(_DROPCHECK,以及_DROPCHECK2的 80 件检查、_AVID_TRADETRYBUG)、CHAR_PickUpItem/CHAR_PickUpItemFXY;item/item_event.cITEM_eventDrop;char/char.cCHAR_dropItemAtLogout。
商店买卖
商店 NPC 的设定里有两个倍率:
- 买价 = 道具价格(cost)×
buy_rate,取整。绝大多数商店是buy_rate:1.0,也就是原价。 - 卖价 = 道具价格 ×
sell_rate,取整。各店不同,原版数据中最常见的是 0.5(94 家)和 0.2(64 家),也有 0.15、0.7、0.8、1.0 等。 - 有些商店用
special_item/special_rate对特定道具另设倍率(例如按 1.5 倍收购);设了LimitItemType/LimitItemNo的商店只收购特定种类或编号的道具。 - 商店没有设定
sell_rate时不收购。 - 在村子里的商店购物时,成交额的 40% 会进入拥有该村庄园的家族的共同帐户(不向玩家额外收费)。
出处:
npc/npc_itemshop.cNPC_AddItemBuy、NPC_GetSellItemList、NPC_SellItemstrsStr、addNpcFamilyTax;倍率统计来自data/npc中的全部商店设定。
网页版说明
- 道具表直接读取原版 itemset.txt;装卸、使用、数值浮动、套装和属性都与原版一致(
pnpm test:items逐件测试了 10598 件装备和 848 件可用道具)。 - 道具窗口操作:拖动来换格 / 装备 / 丢弃,双击使用或装卸,右键标记合成 / 料理。
- 装备耐久磨损,以及 ITEM_ResAndDef 的光镜守效果,目前还没有移植。