交易、邮件、组队与名片
石器时代的玩家互动几乎都遵循同一个模式:面对对方站好,按画面上的功能按钮,服务器再看对方的「许可开关」决定成不成。原版 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.clssproto_FS_recv;docs/UI_ORIGINAL.md5.2 节(选单文字)。
二、名片
名片是邮件和宠物邮件的前提:只能寄信给名片簿里的人,而且对方的名片簿里也要有你。
交换名片
- 对方把「交换名片」设成 YES。
- 你面对他,按「名片」按钮。不用对方确认,双方会同时把对方加进名片簿,并互相点头示意。
- 如果面前站着好几个符合条件的人,会弹出「和谁交换名片呢?」让你选。
失败的情况:
| 提示 | 原因 |
|---|---|
| 那里没有任何人。 | 面前一格没有玩家 |
| 无法交换名片。 | 面前有人,但对方在战斗中、没开「交换名片」、名片簿已满,或你们早就互有名片 |
| 名片匣已满。 | 你自己的名片簿满了 |
| 对方的名片匣已满。 | 对方满了 |
如果只是其中一方缺了另一方的名片(例如对方删掉过你),交换时只补缺的那一张,提示会变成「从 X 得到名片。」「给 X 自己的名片。」。
名片簿在服务器上最多 79 张(ADDRESSBOOK_MAX 为 80,找空位时只用到前 79 格)。名片上会显示对方是否在线、等级、转生次数等。
出处:
char/addressbook.cADDRESSBOOK_addEntry、ADDRESSBOOK_addAddressBook、ADDRESSBOOK_findBlankEntry;include/addressbook.h。
三、邮件
名片邮件
在名片簿里选一个人,写好内容按「传送」:
- 对方在线(同一台游戏服务器):立即送达。如果对方的名片簿里已经没有你,信会被退回:「寄信件给 X,但由於 X 没有名片,所以信件又被退回来了。」
- 对方不在线:交给帐号服务器(AC)暂存,等对方上线时再投递。
注意:原版 AC 会定期清理暂存信件,送达不了超过 3600 秒(1 小时)的离线信件会被删除,所以离线信只适合短时间内会上线的朋友。
出处:
char/addressbook.cADDRESSBOOK_sendMessage;saacmail.cexpireMail(MAIL_EXPIRE_TIME 3600)、main.c(Expired_mail)。
宠物邮件
宠物邮件可以让一只宠物带着信、外加一件道具飞到对方身边,送完再飞回来。寄送时在邮件窗口选「宠物邮件」,选宠物,再双击要附带的道具。
寄出条件:
- 收件人在你的名片簿里,且此刻在线、在同一台服务器(「该玩家不在线上!」「该玩家不在此星球上!」)。
- 你不在战斗中、不在交易中。
- 宠物不能是:骑乘中的宠物、家族守护兽、带等级限制的特殊宠物(「特殊宠物不能传递邮件喔!」)。
- 附带的道具必须是允许宠物邮件的(道具资料里的
CANPETMAIL栏)。 - 你在英雄战场(地图 8200–8213)或限时地图 30017–30021 时不能寄;收件人在 30017–30021 也不行。
数量限制(_PETMAIL_DEFNUMS):
| 限制 | 数值 |
|---|---|
| 你同时在外送信的宠物 | 最多 7 只(第 8 只起「邮件中宠物过多」) |
| 同一个收件人还没收到的宠物邮件 | 超过 5 封就不能再寄 |
| 两次寄送间隔 | 6 秒 |
| 全服同时在途的宠物邮件 | 1000 封 |
出处:
char/petmail.cPETMAIL_sendPetMail。
送信过程:
宠物离开你身边,先在后台等待一段「飞行时间」:
飞行秒数 = (10 − min(10, 宠物敏捷 ÷ 25)) × 3敏捷 250 以上的宠物几乎立刻出发,敏捷很低的最多等 30 秒。之后每 5 秒检查一次收件人。
收件人在线且空闲时,宠物出现在他身边并把信交给他;附带的道具放进他的道具栏,道具栏满了就放在地上。
收件人不在线超过 30 秒、或一直在战斗/交易中超过 660 秒,信件作废,宠物带着道具飞回来。
宠物到了才发现收件人的名片簿里没有你:收件人会看到「X 的 Y 终於来了!由於对方没有您的名片,所以信件被退回了。」,道具不会交出去。
回程:
- 送达后宠物停留约 10 秒,然后回到你身边,提示「Y 回来了!」(送信失败时是「Y 回来了!似乎无法寄送信件。」),自动回到你的宠物栏,没送出去的道具也还给你。
- 你在战斗中或交易中时,宠物会等你空闲再回来。
- 宠物栏满了会提示「宠物栏已满!无法自动拾回邮件宠物!」,宠物留在你身边的地上。
- 你下线了:宠物最多等 30 分钟;还找不到你,就回到当初寄信的地点,身上的道具掉在地上。
- 第 3、4 种情况下宠物停留 3 分钟后会被系统收走(
_PET_LOSTPET:记入遗失宠物纪录并从世界上删除)。
所以寄宠物邮件后别马上下线,宠物栏也要留一格。
出处:
char/petmail.cPETMAIL_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。
四、组队
怎么组
- 想当队长的人把「组队」设成 YES。
- 想加入的人面对他按「组队」按钮。不需要对方确认。
- 队伍最多 5 人(队长 + 4 名队员)。队长头上会有 L 标记,队员跟在队长后面走,移动由队长决定。
- 面对的是某个队员时,会直接申请加入他所在的队伍,但你必须站在队长旁边一格以内才行。面前同时有多个可加入的对象时会弹出「和谁组成团队呢?」。
加入失败(「无法加入团队。」)的常见原因:对方没开组队、队伍已满 5 人、队长在战斗中、你离队长超过一格。你自己已经在队伍里时不能再加别的队。
不能组队的地方:
- 客户端在这些地图上停用组队按钮:31706、10204、10601–10605、10919、10920、20711、20712、1008、1021、3008、3021。
- 单挑 PK 地图 20000(「单P系统禁止组队!」)。
- 家族 PK 地图上,不同家族的玩家不能组队。
出处:
char/char_party.cCHAR_JoinParty、CHAR_JoinParty_Main、CHAR_getEmptyPartyArray;include/char_base.hCHAR_PARTYMAX 5;docs/UI_ORIGINAL.mdD.9.1(客户端停用地图)。
离队与解散
- 再按一次「组队」按钮即离队。队员离开后,排在后面的队员会走上前跟紧;只剩队长一人时队伍自动解散。
- 队长离队 = 整队解散(「团队已解散!」)。
- 战斗中逃跑成功视为离队;队长逃跑则整队解散。战败被送回记录点的人也会离队。
- 解散或离队时,身上的 爱情护身符 会消失(
_ITEM_QUITPARTY,清单见data/itemquitparty.txt)。
出处:
char/char_party.cCHAR_DischargePartySub;battle/battle_event.cBATTLE_Escape(逃跑成功后CHAR_DischargePartyNoMsg);battle/battle.c(战败回记录点后CHAR_DischargeParty)。
组队战斗与经验
队长遇敌时全队一起进入战斗。
经验不平分:怪物被打倒的那一下,经验只给出手打倒它的人(合击时给所有参与合击的人),每人都拿全额,再按等级差衰减:
等级差 = 自己等级 − 怪物等级 等级差 ≤ 5:得到怪物全部经验 等级差 > 5:经验 × (20 − 等级差) ÷ 15,最低 1 点(差 20 级以上只剩 1)人物打倒怪物时,他正在骑乘的宠物另得 60%(同样按骑宠自己的等级差算)。
怪物身上的掉落道具,随机分给打倒它的人之一(每人每场最多暂存 3 件)。
所以组队练级时,想让某个队员多拿经验,就让他补最后一刀。
出处:
battle/battle.cBATTLE_AddExpItem(EXPGET_MAXLEVEL 5、EXPGET_DIV 15、骑宠nowexp *= 0.6)、BATTLE_AddProfit的调用处(aAttackList)。更多战斗结算见 战斗。
五、交易
流程
- 双方都不在队伍里、不在战斗中;对方把「交易」设成 YES。
- 面对对方按「交易」按钮。面前必须正好只有一位可交易的玩家(「前方不只一位玩家喔!」)。不需要对方确认,双方直接打开交易窗口。
- 每边有三个格子:两个「道具或石币」格 + 一个宠物格。也就是一次最多给出 2 件道具(或 1 件道具 + 一笔石币),外加 1 只宠物;更多东西请分几次交易。
- 放好后按 OK。原版服务端要求双方都按过 OK,并且两边客户端送来的清单(自己给什么、对方给什么)完全一致才成交;任何一方取消,交易关闭。
交易进行中不能走路,也不能骑宠(「交易中不可骑宠!」)。
出处:
char/trade.cTRADE_Search、TRADE_ShowItem(K/C指令)、TRADE_SwapItem、TRADE_CheckItembuf;char/family.cFAMILY_RidePet;docs/UI_ORIGINAL.mdD.8。
成交前的检查
任何一项不过,双方都会看到同一句提示,交易关闭:
| 提示 | 条件 |
|---|---|
| 某某物品栏已满,请整理後再交易~ | 交换后道具栏放不下 |
| 某某金钱交易请勿超过一百万! | 给出的石币超过携带上限 |
| 某某钱不够,无法交易! | 给出的石币比身上的多 |
| 某某金钱将会超过一百万! | 交换后身上的钱超过携带上限 |
| 某某宠物栏已满,交易取消! | 交换后宠物超过 5 只 |
| 交易失败! | 想交易正在骑乘的宠物,或清单对不上 |
| 丢在地上会消失的物品无法交易! | 道具带有「丢弃即消失」属性 |
| 某某等级不够,无法照顾交易後的宠物! | 收到的宠物比收件人高 5 级以上,且收件人没转生过 |
| 家族守护兽无法交易! | 宠物是家族守护兽 |
说明:
- 提示里写「一百万」,实际上限是 100 万 + 转生次数 × 180 万(
_FIX_MAX_GOLD)。 - 装备在身上的道具不能交易,要先卸下放进道具栏。
- 戴着 万兽之戒 时不检查「高 5 级」这条。
- 交易换来的宠物,主人记录会改成新主人。
出处:
char/trade.cTRADE_CheckItembuf(返回值 -1 ~ -15 与提示对照见TRADE_SwapItem)、TRADE_HandleItem;char/char_base.cCHAR_getMaxHaveGold;item/item_event.cITEM_WearEquip(设CHAR_PickAllPet)。
六、聊天
一般说话
在输入栏打字按 Enter,话会传给附近的人。范围是以你为中心的正方形:
n = 说话音量 − 1 + 句尾「!」个数
范围边长 = 3 + 2n(n 从 0 起算,最大 31)
- 说话音量来自客户端设定(未设定时按 3),所以默认范围是 7×7。
- 句尾每多一个半角
!,边长 +2(最大 31×31)。 - 以
...(三个半角句点)结尾就是「悄悄话」:只有你脚下和面前那一格的人/NPC 听得到。 - 和 NPC 对话也是用说话:站在 NPC 前面随便打一个字即可。
- 队友不论距离远近都听得到你说的话。
- 战斗中说的话只有同一场战斗的人听得到;战斗外的人和战斗中的人互相听不到。
「聊天:队伍」模式
把选单里的「聊天」设成「队伍」后,如果你在队伍里,只有队友听得到,附近的路人和 NPC 都听不到。没组队时与「全员」模式相同。
出处:
char/char_talk.cCHAR_Talk、CHAR_getVolume、CHAR_getRangeFromVolume(chatvol[])、CHAR_Talk_check。
家族频道
加入家族频道后,你说的话只发给同频道的族人;想对身边的人说话,在句首加半角冒号 :。没在频道里时句首加 :,则发到你最近一次加入的频道。族长可用频道 5 做全族广播。详见 家族 第七节。
其他
- 以
[开头、]结尾的话会被当成 GM 指令处理,普通玩家用不了,也不会被别人看到。 - 本服务端还开了
_TALK_ACTION:说的话里含有「坐下、挥手、点头、高兴、生气、悲伤、站立、走动、晕倒、攻击、防御、受伤、投掷」之一时,人物会做对应动作。 /go、/gg(小喇叭)是私服的会员点数功能(_PLAYER_MOVE、_PLAYER_ANNOUNCE),不属于原版玩法。
出处:
char/char_talk.cCHAR_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.cCHAR_getCharPoolItemIndexElement;include/char_base.hCHAR_MAXPOOLITEMHAVE 30。
宠物寄放
开放寄放的宠物店可以暂存宠物:
- 每寄放一只收 50 + 人物等级 × 4 石币。
- 可寄放只数 = 5 + 转生次数 × 2,最多 15 只。
- 家族守护兽寄放在这里不影响家族。
出处:
npc/npc_petshop.cNPC_GETPOOLCOST;char/char_base.cCHAR_getCharPoolPetElement;include/char_base.hCHAR_MAXPOOLPETHAVE 15。
家族银行
原版只有家族银行(四大村村长家与庄园族长家的「家族银行」NPC),没有一般的个人银行:
- 家族个人帐户:存钱要先加入家族,取钱不限;上限 1 亿。
- 家族共同帐户:成员都能存,族长和长老能取;上限 1 亿;庄园税收也进这里。
详见 家族 第八节。
出处:
char/family.cFAMILY_Bank;npc/npc_bankman.c。
八、网页版的不同之处
- 除了原版「面对玩家按按钮」的方式,网页版还可以点击其他玩家弹出菜单,选择组队、交易、交换名片、决斗、加入战斗。这些操作仍按原版规则只看对方的许可开关,不会弹确认框。
- 网页版的交易窗口分「锁定」和「确认交易」两步:双方都锁定后各自确认才成交;任何一方修改出价都会解除双方锁定。检查项目与上表相同。
- 网页版的邮箱保存最近 50 封信,离线信件不会在 1 小时后过期;信件内容最多 200 字。
- 网页版的宠物邮件回程时如果宠物栏已满,宠物会直接放进寄放处,不会被系统收走。
- 网页版没有
/p、/f、/w之类的聊天前缀(原版 2.5 也没有)。 - 网页版的服务端代码里没有找到「说话触发动作」(
_TALK_ACTION)和/go、/gg;想做动作请用「动作」按钮。
出处:
packages/client/src/ui/SocialUI.tsshowPlayerMenu;packages/tools/src/sa-server.tstradeOffer、tradeLock、tradeConfirm、mailSend、petMailSend、fullChat。