石器百科 开始游戏

道具与装备

石器时代的所有道具都来自服务端道具表 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_EQUIPPLACENUM 5、CHAR_MAXITEMNUM 15、CHAR_MAXPOOLITEMHAVE 30);char/char_base.c CHAR_getCharPoolItemIndexElement(10 + 转生×4)、CHAR_getMaxHaveGold(_FIX_MAX_GOLD);npc/npc_poolitemshop.c(NPC_POOLITEMSHOP_DEFAULT_COST 200、不可寄放的检查)。

道具类型(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.h ITEM_CATEGORY;item/item.c ITEM_getEquipPlace;件数来自 docs/ITEM_COVERAGE.md。

装备条件

  • 等级:道具等级高于人物等级时,会提示「能力不足无法装备。」——但只有未转生的角色才会检查等级,转生过的人物不受道具等级限制。
  • 能力需求:道具如果设了需求腕力、需求敏捷或需求转生次数,不够时装不上。
  • 两个饰品栏不能放同一种类:例如不能同时戴两只戒指(「无法同时装备两项同种类的物品。」),戒指加项链则可以。
  • 变身中不能装远程武器:用变身镜变身后,弓、回旋标、投掷斧、投掷石都装不上(「变身无法使用远距离武器!」)。

出处:char/char_item.c CHAR_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.c ITEM_itemconfentries[](ITEM_ID_TOKEN_INDEX 17)、ITEM_readItemConfFile;网页版的解析在 packages/tools/src/game/gmsv-data.ts parseItems。

数值的随机浮动(± 随机)

带「最小值, 最大值」两栏的能力(攻、防、敏、HP、MP、运、魅、回避、各种抗性、会心)会在道具被做出来的那一刻各自随机一次:

实际值 = 两栏中较小的值 + RAND(0, |最大 − 最小|)     (两端都可能取到)

所以同一种装备每件的数值可能不一样,说明文字里的「防+10」只是标称值。例子:

道具一旦生成,数值就固定下来,之后不会再变。商店买的、打怪掉的、任务给的、合成做出来的,全都按这套规则生成。2.5 数据里大约有 9000 件道具至少有一项会浮动。

武器的攻击次数栏如果最小值写 0,就当作与最大值相同。

出处:item/item.c ITEM_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.c ITEM_equipEffect(itemEffect[] 的 min/max、attribaccum、CHAR_MAXATTRIB 100)。

套装

nsuit 栏相同的装备同时穿上 3 件以上就会触发套装效果。效果写在这些装备的参数栏里,例如 FSTR:30 攻击 +30%、HP:50 战斗中每回合回复 50 HP,另有 MSTR / MTGH / MDEX 攻防敏加值、VIT 体力上限加值等。2.5 数据共有 37 件套装道具,例如提亚系列:提亚棒(FSTR:30)、提亚兜、提亚铠(HP:50)。

出处:item/item_event.c ITEM_CheckSuitEquip / ITEM_suitEquip、item/item.c Other_DefcharWorkInt(_SUIT_ITEM、_SUIT_ADDENDUM、_SUIT_ADDPART3);参数键名对照见网页版 character.ts suitEffect。

耐久与损坏

原版开启了道具损坏(_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.c BATTLE_ItemCrushCheck、BATTLE_ItemCrush、BATTLE_ItemCrushSeq(_TAKE_ITEMDAMAGE)。网页版目前没有实装这套磨损机制(战斗模拟中没有找到对应的实现)。

水晶与属性饰品

2.5 版没有后期版本那种独立的「元素水晶」装备栏。名字里带「水晶」的道具主要是合成素材:

想提高人物的地水火风属性,要靠带属性的饰品和武器(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.c ITEM_useNoenemy、ITEM_equipNoenemy;net.c setNoenemy(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.c CHAR_DropItem(_DROPCHECK,以及 _DROPCHECK2 的 80 件检查、_AVID_TRADETRYBUG)、CHAR_PickUpItem / CHAR_PickUpItemFXY;item/item_event.c ITEM_eventDrop;char/char.c CHAR_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.c NPC_AddItemBuy、NPC_GetSellItemList、NPC_SellItemstrsStr、addNpcFamilyTax;倍率统计来自 data/npc 中的全部商店设定。

网页版说明

  • 道具表直接读取原版 itemset.txt;装卸、使用、数值浮动、套装和属性都与原版一致(pnpm test:items 逐件测试了 10598 件装备和 848 件可用道具)。
  • 道具窗口操作:拖动来换格 / 装备 / 丢弃,双击使用或装卸,右键标记合成 / 料理。
  • 装备耐久磨损,以及 ITEM_ResAndDef 的光镜守效果,目前还没有移植。