跨服战场是服与服的碰撞:本服的顶尖高手去跨服竞技场与其他服交锋。跨服的架构要点是独立的集群、身份的映射与结算的回传——去的是本尊的角色,回来的是实打实的奖励。
---跨服的身份构造:本服 ID 的跨服映射
function CrossServer.enter(actor)
local player = class(actor)
if not player then return false end
-- 跨服身份:服务器前缀加本服 ID
local crossId = Server.tag() .. ":" .. actor:GetUserId()
local ticket = CrossServer.issueTicket(actor, crossId)
if not ticket then
sendmsg(actor, 1, "跨服队列繁忙,请稍后再试")
return false
end
-- 角色快照带进跨服:等级、装备、技能
local snapshot = Snapshot.of(actor)
CrossServer.send(actor, ticket, snapshot)
sendmsg(actor, 1, "正在进入跨服战场...")
return true
end
跨服的身份用服务器前缀加本服 ID 构造:两个服的同名玩家在跨服集群里是两个身份,映射的唯一性由前缀保证。进入的凭证与角色快照一起带过去:跨服集群不持有玩家的原始数据,快照(等级、装备、技能的只读副本)是战斗的全部依据——本服的数据权威不动摇,跨服只用快照作战。进入的排队与门票:跨服的承载有上限,排队的队列与门票的消耗调控人流。
---跨服的结算回传:奖励发回本服
function CrossServer.settle(crossId, result)
-- 解析跨服身份,找到归属的本服
local tag, uid = crossId:match("^(%w+):(.+)$")
local homeServer = Server.homeOf(tag)
-- 奖励走跨服的可靠投递
local reward = {
uid = uid, points = result.score,
items = result.rewards,
}
CrossServer.mailHome(homeServer, reward)
end
---本服的接收:奖励的幂等入账
function CrossServer.receiveHome(reward)
local key = "cross_" .. reward.uid .. "_" ..
reward.points .. "_" .. reward.items[1]
if (getplayvar(reward.uid, 2, key) or "") ~= "" then
return false -- 幂等:重复回传不重复发放
end
setplayvar(reward.uid, "HUMAN", key, os.time(), 1)
sendmail(reward.uid, 8011, "跨服战场奖励",
"战绩 " .. reward.points .. " 分",
table.concat(reward.items, ","))
return true
end
结算的回传走跨服到本服的可靠投递:跨服集群只记战绩,奖励的发放回到本服执行——本服是玩家资产的唯一权威,跨服不碰任何人的背包。回传的幂等键防重复:跨服的重试投递不会让奖励翻倍,幂等的标记落库。跨服的体验细节:进入时角色的 BUFF 与宠物的处理(本服的临时状态不带进跨服,跨服发统一的入场状态)、断线的处理(跨服内掉线 60 秒内重连回原战场,超时判负离场)。延迟的天然增加是跨服的代价:异地的集群让操作的延迟多 20 到 40 毫秒,竞技的公平按延迟的分层匹配(同区域优先配对)。
跨服的身份冲突扫描:映射的唯一性每日校验,撞身份的记录零容忍;结算回传的到达率与幂等拦截的计数监控,丢失与重复都有仪表。
快照曾经带了本服的 BUFF 引用,跨服集群解不开引用直接报错,快照的只读副本化。回传的幂等键曾经含时间戳,重试的投递被误判为不同的奖励,键的稳定性修复。跨服与本服的时钟曾经不同步,活动的开启时刻两服各执一词,跨服的时间权威统一为集群时钟。
跨服的门票与匹配规则进配置,赛季的段位重置有章法。本服数据的只读边界是红线:跨服的任何变更不写回本服的原始数据。跨服的延迟监控按玩家的地域分桶,配对的策略用数据调优。
本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 明拍容易被大号威慑,普通玩家不敢出手。秘宝暗拍改为全服暗标:每周一件秘宝,玩家密价投标一次,截标前互相看…
实战应用:用在哪里 充值返利活动被风控规则误判成套利,480 个大额充值账号被批量封禁 24 小时,申诉两小时破千条。误封风…
实战应用:用在哪里 五人小队打沃玛教主,队友的血量状态只能靠点头像逐个看,集火转火慢半拍。小队血条在屏幕侧边紧凑排布四条队友…
实战应用:用在哪里 好友申请藏在好友面板的角标里,玩家半天不看一眼,申请积压让社交转化掉了一半。好友申请浮窗把新申请推到屏幕…
实战应用:用在哪里 矿洞产出人人有份等于人人不重视,矿位租赁把矿洞变成可经营资产:矿位按 24 小时租给个人或行会,产出归租…
实战应用:用在哪里 击杀 BOSS 后要同时做三件事:发奖励、记流水、刷新排行榜,全都写在 killmon 触发里互相拖累,…