行会镖车玩法上线初期没有拦截判定,红名玩家堵在盟重城门无成本劫镖,押镖玩家三天流失四成。镖车状态机封装:镖车在待发车、护送中、已抵达、被劫四个状态间流转,护送全程 8 分钟,押金 50 万金币,安全抵达奖励 80 万,劫镖者得 40 万但红名值加 200,把劫镖变成有代价的博弈。
镖车状态机:状态字段加流转校验函数,非法流转直接拒绝。示例代码如下:
local CAR = { IDLE = 1, RUN = 2, DONE = 3, ROBBED = 4 }
local function carCanMove(from, to)
local ok = (from == CAR.IDLE and to == CAR.RUN)
or (from == CAR.RUN and to == CAR.DONE)
or (from == CAR.RUN and to == CAR.ROBBED)
return ok
end
local function startEscort(actor)
actor = getplayerbyname(actor)
local st = tonumber(getplayvar(actor, "HUMAN", "EscortState")) or CAR.IDLE
if not carCanMove(st, CAR.RUN) then
sendmsg(actor, 1, "当前状态不能发车。")
return
end
setplayvar(actor, "HUMAN", "EscortState", CAR.RUN, 1)
setplayvar(actor, "HUMAN", "EscortStart", os.time(), 1)
setontimer(actor, 13, 480000, 1, 0)
sendcentermsg(actor, 249, 255, "镖车已出发,护送全程 8 分钟。", 0, 5, "")
end
劫镖判定与抵达结算:红名值写入劫镖者变量,押金按状态分流。示例代码如下:
local function robCar(robberName, ownerName)
local robber = getplayerbyname(robberName)
local owner = getplayerbyname(ownerName)
local st = tonumber(getplayvar(owner, "HUMAN", "EscortState")) or CAR.IDLE
if st ~= CAR.RUN then
return
end
setplayvar(owner, "HUMAN", "EscortState", CAR.ROBBED, 1)
setofftimer(owner, 13)
giveitem(robber, "金币", 400000, 0, "劫镖所得")
setplayvar(robber, "HUMAN", "RedName", 200, 1)
sendmsg(owner, 1, "镖车被 " .. robberName .. " 劫走,押金 50 万损失。")
end
local function ontimer13(actor)
actor = getplayerbyname(actor)
setplayvar(actor, "HUMAN", "EscortState", CAR.DONE, 1)
giveitem(actor, "金币", 800000, 0, "押镖成功奖励")
sendmsg(actor, 1, "镖车安全抵达,获得 80 万金币。")
end
状态字段用 setplayvar(actor, "HUMAN", "EscortState", 状态值, 1) 落库, carCanMove 用两张状态组合表约束流转,被劫只允许从护送中进入。setontimer(actor, 13, 480000, 1, 0) 挂定时器 13,480000 毫秒即 8 分钟后触发 ontimer13(actor) 结算抵达。sendcentermsg(actor, 249, 255, msg, 0, 5, "") 用红字黄底在屏幕中央提示发车,5 秒后消失。giveitem(actor, "金币", 数量, 0, desc) 第 4 参 0 表示非绑定,劫镖所得进入流通。
镖车状态机踩过三个坑:一是车主下线再上线,个人定时器被引擎回收而状态停在护送中,镖车永久卡死,玩家重登后发不了新车——登录触发里要补一段"超时未结算按已抵达处理"的对账;二是两人同时劫同一辆镖车,双双拿到 40 万,劫镖奖励没有做状态原子校验,carCanMove 判定后到写入前存在窗口,第二笔劫镖请求必须再读一次状态;三是沙巴克攻城期间镖车与攻城怪物混在一张地图,劫镖判定误伤攻城玩家,攻城时段直接关闭发车入口并在公告里说明。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
设计初衷 攻城战阵亡只有损失:装备掉落、耐久磨损——牺牲没有补偿,行会的伤亡成本全由个人承担,指挥不敢打硬仗。抚恤金设计:攻…
设计初衷 攻城战一触即发,盟友帮会口头答应协防却总是人没到:跨帮支援没有调度与结算机制,人情协防全凭自觉。协防系统设计:盟约…
底层原理 一张地图上 500 棵同款树,每棵存完整的模型数据——重复数据存 500 份。享元模式把不变的部分(模型、贴图)抽…
底层原理 技能系统按"元素×形态"组合:火球冰球乘单体群攻——每加一种元素或一种形态,组合数量乘性增长(4 元素 3 形态 …
设计初衷 稀缺产出(强化石、晋级材料)的供需错位:产出季价格崩盘、断供季价格飞天——剧烈波动伤害生产者与消费者两端。期货交易…
业务场景 驻地巡逻 AI 只会沿固定路线走:玩家摸清路线后绕行如入无人之境。傀儡机关封装:机关傀儡按"巡逻、警戒、袭扰"三态…