石器百科 开始游戏

交易、邮件、组队与名片

石器时代的玩家互动几乎都遵循同一个模式:面对对方站好,按画面上的功能按钮,服务器再看对方的「许可开关」决定成不成。原版 2.5 没有「邀请 → 接受」的弹窗,对方事先把开关设成 YES 就等于同意。本文先讲开关,再逐项介绍名片、邮件、组队、交易、聊天和存放服务。

家族相关的内容(家族频道细节、家族银行、庄园)见 家族;玩家对战见 PK 与决斗。

一、许可开关(选单)

按「选单」打开设定窗口,有五项:

项目 选项 作用 登录时
组队 NO / YES 是否允许别人加入你的队伍 保留
决斗 NO / YES 是否接受别人的决斗挑战 重置为 NO
交换名片 NO / YES 是否允许别人和你交换名片 重置为 NO
聊天 全员 / 队伍 说话给谁听(见第六节) 保留
交易 NO / YES 是否接受交易 重置为 NO

决斗、交换名片、交易这三项每次登录都会被服务器关掉,想用的时候要重新打开。

出处:char/char.c 登录流程(CHAR_setFlg(…, CHAR_ISDUEL / ISTRADECARD / ISTRADE, 0) 后 lssproto_FS_send);callfromcli.c lssproto_FS_recv;docs/UI_ORIGINAL.md 5.2 节(选单文字)。

二、名片

名片是邮件和宠物邮件的前提:只能寄信给名片簿里的人,而且对方的名片簿里也要有你。

交换名片

  1. 对方把「交换名片」设成 YES。
  2. 你面对他,按「名片」按钮。不用对方确认,双方会同时把对方加进名片簿,并互相点头示意。
  3. 如果面前站着好几个符合条件的人,会弹出「和谁交换名片呢?」让你选。

失败的情况:

提示 原因
那里没有任何人。 面前一格没有玩家
无法交换名片。 面前有人,但对方在战斗中、没开「交换名片」、名片簿已满,或你们早就互有名片
名片匣已满。 你自己的名片簿满了
对方的名片匣已满。 对方满了

如果只是其中一方缺了另一方的名片(例如对方删掉过你),交换时只补缺的那一张,提示会变成「从 X 得到名片。」「给 X 自己的名片。」。

名片簿在服务器上最多 79 张(ADDRESSBOOK_MAX 为 80,找空位时只用到前 79 格)。名片上会显示对方是否在线、等级、转生次数等。

出处:char/addressbook.c ADDRESSBOOK_addEntry、ADDRESSBOOK_addAddressBook、ADDRESSBOOK_findBlankEntry;include/addressbook.h。

三、邮件

名片邮件

在名片簿里选一个人,写好内容按「传送」:

  • 对方在线(同一台游戏服务器):立即送达。如果对方的名片簿里已经没有你,信会被退回:「寄信件给 X,但由於 X 没有名片,所以信件又被退回来了。」
  • 对方不在线:交给帐号服务器(AC)暂存,等对方上线时再投递。

注意:原版 AC 会定期清理暂存信件,送达不了超过 3600 秒(1 小时)的离线信件会被删除,所以离线信只适合短时间内会上线的朋友。

出处:char/addressbook.c ADDRESSBOOK_sendMessage;saac mail.c expireMail(MAIL_EXPIRE_TIME 3600)、main.c(Expired_mail)。

宠物邮件

宠物邮件可以让一只宠物带着信、外加一件道具飞到对方身边,送完再飞回来。寄送时在邮件窗口选「宠物邮件」,选宠物,再双击要附带的道具。

寄出条件:

  • 收件人在你的名片簿里,且此刻在线、在同一台服务器(「该玩家不在线上!」「该玩家不在此星球上!」)。
  • 你不在战斗中、不在交易中。
  • 宠物不能是:骑乘中的宠物、家族守护兽、带等级限制的特殊宠物(「特殊宠物不能传递邮件喔!」)。
  • 附带的道具必须是允许宠物邮件的(道具资料里的 CANPETMAIL 栏)。
  • 你在英雄战场(地图 8200–8213)或限时地图 30017–30021 时不能寄;收件人在 30017–30021 也不行。

数量限制(_PETMAIL_DEFNUMS):

限制 数值
你同时在外送信的宠物 最多 7 只(第 8 只起「邮件中宠物过多」)
同一个收件人还没收到的宠物邮件 超过 5 封就不能再寄
两次寄送间隔 6 秒
全服同时在途的宠物邮件 1000 封

出处:char/petmail.c PETMAIL_sendPetMail。

送信过程:

  1. 宠物离开你身边,先在后台等待一段「飞行时间」:

    飞行秒数 = (10 − min(10, 宠物敏捷 ÷ 25)) × 3
    

    敏捷 250 以上的宠物几乎立刻出发,敏捷很低的最多等 30 秒。之后每 5 秒检查一次收件人。

  2. 收件人在线且空闲时,宠物出现在他身边并把信交给他;附带的道具放进他的道具栏,道具栏满了就放在地上。

  3. 收件人不在线超过 30 秒、或一直在战斗/交易中超过 660 秒,信件作废,宠物带着道具飞回来。

  4. 宠物到了才发现收件人的名片簿里没有你:收件人会看到「X 的 Y 终於来了!由於对方没有您的名片,所以信件被退回了。」,道具不会交出去。

回程:

  1. 送达后宠物停留约 10 秒,然后回到你身边,提示「Y 回来了!」(送信失败时是「Y 回来了!似乎无法寄送信件。」),自动回到你的宠物栏,没送出去的道具也还给你。
  2. 你在战斗中或交易中时,宠物会等你空闲再回来。
  3. 宠物栏满了会提示「宠物栏已满!无法自动拾回邮件宠物!」,宠物留在你身边的地上。
  4. 你下线了:宠物最多等 30 分钟;还找不到你,就回到当初寄信的地点,身上的道具掉在地上。
  5. 第 3、4 种情况下宠物停留 3 分钟后会被系统收走(_PET_LOSTPET:记入遗失宠物纪录并从世界上删除)。

所以寄宠物邮件后别马上下线,宠物栏也要留一格。

出处:char/petmail.c PETMAIL_getIdleTime、PETMAIL_IdleProc2(PETMAIL_IDLETIMEOUT 30、PETMAIL_BATTLETIMEOUT 660)、PETMAIL_sendPetmail、PETMAIL_ReturnWait(PETMAIL_IDLETIME 10)、PETMAIL_IdleProc4(PETMAIL_IDLE_RETURNOWNER 60*30)、PETMAIL_IdleProc5(PETMAIL_IDLEDISCARD 60*3)、PETMAIL_returnMail、CHAR_AutoPickupMailPet。

四、组队

怎么组

  1. 想当队长的人把「组队」设成 YES。
  2. 想加入的人面对他按「组队」按钮。不需要对方确认。
  3. 队伍最多 5 人(队长 + 4 名队员)。队长头上会有 L 标记,队员跟在队长后面走,移动由队长决定。
  4. 面对的是某个队员时,会直接申请加入他所在的队伍,但你必须站在队长旁边一格以内才行。面前同时有多个可加入的对象时会弹出「和谁组成团队呢?」。

加入失败(「无法加入团队。」)的常见原因:对方没开组队、队伍已满 5 人、队长在战斗中、你离队长超过一格。你自己已经在队伍里时不能再加别的队。

不能组队的地方:

  • 客户端在这些地图上停用组队按钮:31706、10204、10601–10605、10919、10920、20711、20712、1008、1021、3008、3021。
  • 单挑 PK 地图 20000(「单P系统禁止组队!」)。
  • 家族 PK 地图上,不同家族的玩家不能组队。

出处:char/char_party.c CHAR_JoinParty、CHAR_JoinParty_Main、CHAR_getEmptyPartyArray;include/char_base.h CHAR_PARTYMAX 5;docs/UI_ORIGINAL.md D.9.1(客户端停用地图)。

离队与解散

  • 再按一次「组队」按钮即离队。队员离开后,排在后面的队员会走上前跟紧;只剩队长一人时队伍自动解散。
  • 队长离队 = 整队解散(「团队已解散!」)。
  • 战斗中逃跑成功视为离队;队长逃跑则整队解散。战败被送回记录点的人也会离队。
  • 解散或离队时,身上的 爱情护身符 会消失(_ITEM_QUITPARTY,清单见 data/itemquitparty.txt)。

出处:char/char_party.c CHAR_DischargePartySub;battle/battle_event.c BATTLE_Escape(逃跑成功后 CHAR_DischargePartyNoMsg);battle/battle.c(战败回记录点后 CHAR_DischargeParty)。

组队战斗与经验

  • 队长遇敌时全队一起进入战斗。

  • 经验不平分:怪物被打倒的那一下,经验只给出手打倒它的人(合击时给所有参与合击的人),每人都拿全额,再按等级差衰减:

    等级差 = 自己等级 − 怪物等级
    等级差 ≤ 5:得到怪物全部经验
    等级差 > 5:经验 × (20 − 等级差) ÷ 15,最低 1 点(差 20 级以上只剩 1)
    
  • 人物打倒怪物时,他正在骑乘的宠物另得 60%(同样按骑宠自己的等级差算)。

  • 怪物身上的掉落道具,随机分给打倒它的人之一(每人每场最多暂存 3 件)。

所以组队练级时,想让某个队员多拿经验,就让他补最后一刀。

出处:battle/battle.c BATTLE_AddExpItem(EXPGET_MAXLEVEL 5、EXPGET_DIV 15、骑宠 nowexp *= 0.6)、BATTLE_AddProfit 的调用处(aAttackList)。更多战斗结算见 战斗。

五、交易

流程

  1. 双方都不在队伍里、不在战斗中;对方把「交易」设成 YES。
  2. 面对对方按「交易」按钮。面前必须正好只有一位可交易的玩家(「前方不只一位玩家喔!」)。不需要对方确认,双方直接打开交易窗口。
  3. 每边有三个格子:两个「道具或石币」格 + 一个宠物格。也就是一次最多给出 2 件道具(或 1 件道具 + 一笔石币),外加 1 只宠物;更多东西请分几次交易。
  4. 放好后按 OK。原版服务端要求双方都按过 OK,并且两边客户端送来的清单(自己给什么、对方给什么)完全一致才成交;任何一方取消,交易关闭。

交易进行中不能走路,也不能骑宠(「交易中不可骑宠!」)。

出处:char/trade.c TRADE_Search、TRADE_ShowItem(K/C 指令)、TRADE_SwapItem、TRADE_CheckItembuf;char/family.c FAMILY_RidePet;docs/UI_ORIGINAL.md D.8。

成交前的检查

任何一项不过,双方都会看到同一句提示,交易关闭:

提示 条件
某某物品栏已满,请整理後再交易~ 交换后道具栏放不下
某某金钱交易请勿超过一百万! 给出的石币超过携带上限
某某钱不够,无法交易! 给出的石币比身上的多
某某金钱将会超过一百万! 交换后身上的钱超过携带上限
某某宠物栏已满,交易取消! 交换后宠物超过 5 只
交易失败! 想交易正在骑乘的宠物,或清单对不上
丢在地上会消失的物品无法交易! 道具带有「丢弃即消失」属性
某某等级不够,无法照顾交易後的宠物! 收到的宠物比收件人高 5 级以上,且收件人没转生过
家族守护兽无法交易! 宠物是家族守护兽

说明:

  • 提示里写「一百万」,实际上限是 100 万 + 转生次数 × 180 万(_FIX_MAX_GOLD)。
  • 装备在身上的道具不能交易,要先卸下放进道具栏。
  • 戴着 万兽之戒 时不检查「高 5 级」这条。
  • 交易换来的宠物,主人记录会改成新主人。

出处:char/trade.c TRADE_CheckItembuf(返回值 -1 ~ -15 与提示对照见 TRADE_SwapItem)、TRADE_HandleItem;char/char_base.c CHAR_getMaxHaveGold;item/item_event.c ITEM_WearEquip(设 CHAR_PickAllPet)。

六、聊天

一般说话

在输入栏打字按 Enter,话会传给附近的人。范围是以你为中心的正方形:

n = 说话音量 − 1 + 句尾「!」个数
范围边长 = 3 + 2n(n 从 0 起算,最大 31)
  • 说话音量来自客户端设定(未设定时按 3),所以默认范围是 7×7。
  • 句尾每多一个半角 !,边长 +2(最大 31×31)。
  • 以 ...(三个半角句点)结尾就是「悄悄话」:只有你脚下和面前那一格的人/NPC 听得到。
  • 和 NPC 对话也是用说话:站在 NPC 前面随便打一个字即可。
  • 队友不论距离远近都听得到你说的话。
  • 战斗中说的话只有同一场战斗的人听得到;战斗外的人和战斗中的人互相听不到。

「聊天:队伍」模式

把选单里的「聊天」设成「队伍」后,如果你在队伍里,只有队友听得到,附近的路人和 NPC 都听不到。没组队时与「全员」模式相同。

出处:char/char_talk.c CHAR_Talk、CHAR_getVolume、CHAR_getRangeFromVolume(chatvol[])、CHAR_Talk_check。

家族频道

加入家族频道后,你说的话只发给同频道的族人;想对身边的人说话,在句首加半角冒号 :。没在频道里时句首加 :,则发到你最近一次加入的频道。族长可用频道 5 做全族广播。详见 家族 第七节。

其他

  • 以 [ 开头、] 结尾的话会被当成 GM 指令处理,普通玩家用不了,也不会被别人看到。
  • 本服务端还开了 _TALK_ACTION:说的话里含有「坐下、挥手、点头、高兴、生气、悲伤、站立、走动、晕倒、攻击、防御、受伤、投掷」之一时,人物会做对应动作。
  • /go、/gg(小喇叭)是私服的会员点数功能(_PLAYER_MOVE、_PLAYER_ANNOUNCE),不属于原版玩法。

出处:char/char_talk.c CHAR_Talk、TalkAction。

七、存放与银行

寄放店(道具)

四大村便利商店里各有一位「寄放店」:萨姆吉尔的便利商店 1009 (14,13)、玛丽娜丝的便利商店 2009 (17,34)、加加 3009 (18,40)、卡鲁它那 4009 (15,13)。

  • 每寄放一件收 50 石币,取回免费。
  • 可寄放件数 = 10 + 转生次数 × 4,最多 30 件。

出处:npc/npc_poolitemshop.c;data/npc/genout/pis_1009_14_13 等(cost:50);char/char_base.c CHAR_getCharPoolItemIndexElement;include/char_base.h CHAR_MAXPOOLITEMHAVE 30。

宠物寄放

开放寄放的宠物店可以暂存宠物:

  • 每寄放一只收 50 + 人物等级 × 4 石币。
  • 可寄放只数 = 5 + 转生次数 × 2,最多 15 只。
  • 家族守护兽寄放在这里不影响家族。

出处:npc/npc_petshop.c NPC_GETPOOLCOST;char/char_base.c CHAR_getCharPoolPetElement;include/char_base.h CHAR_MAXPOOLPETHAVE 15。

家族银行

原版只有家族银行(四大村村长家与庄园族长家的「家族银行」NPC),没有一般的个人银行:

  • 家族个人帐户:存钱要先加入家族,取钱不限;上限 1 亿。
  • 家族共同帐户:成员都能存,族长和长老能取;上限 1 亿;庄园税收也进这里。

详见 家族 第八节。

出处:char/family.c FAMILY_Bank;npc/npc_bankman.c。

八、网页版的不同之处

  • 除了原版「面对玩家按按钮」的方式,网页版还可以点击其他玩家弹出菜单,选择组队、交易、交换名片、决斗、加入战斗。这些操作仍按原版规则只看对方的许可开关,不会弹确认框。
  • 网页版的交易窗口分「锁定」和「确认交易」两步:双方都锁定后各自确认才成交;任何一方修改出价都会解除双方锁定。检查项目与上表相同。
  • 网页版的邮箱保存最近 50 封信,离线信件不会在 1 小时后过期;信件内容最多 200 字。
  • 网页版的宠物邮件回程时如果宠物栏已满,宠物会直接放进寄放处,不会被系统收走。
  • 网页版没有 /p、/f、/w 之类的聊天前缀(原版 2.5 也没有)。
  • 网页版的服务端代码里没有找到「说话触发动作」(_TALK_ACTION)和 /go、/gg;想做动作请用「动作」按钮。

出处:packages/client/src/ui/SocialUI.ts showPlayerMenu;packages/tools/src/sa-server.ts tradeOffer、tradeLock、tradeConfirm、mailSend、petMailSend、fullChat。