战后恢复只能一瓶瓶灌药,群体恢复玩法缺席,战后的聚集与社交少了个去处。温泉泡池封装:进入温泉区域的玩家每 2 秒回 200 血 100 蓝,离开立即停止——群体恢复成为一处地理资源,沙巴克战后全员泡池回状态,聚集与闲聊自然发生。
进出标记与心跳回复。示例代码如下:
local healList = {}
local function onEnterSpring(actor)
setplayvar(actor, 0, "InSpring", 1, 0)
healList[#healList + 1] = actor
sendmsg(actor, 1, "入浴回复中:每 2 秒回 200 血 100 蓝。")
end
local function onLeaveSpring(actor)
setplayvar(actor, 0, "InSpring", 0, 0)
end
local function springTick()
for i = #healList, 1, -1 do
local actor = healList[i]
if tonumber(getplayvar(actor, 0, "InSpring")) == 1 then
local hp = tonumber(getplayvar(actor, 0, "HP")) or 0
setplayvar(actor, 0, "HP", math.min(hp + 200, 1000), 0)
else
table.remove(healList, i)
end
end
end
蓝量回复同理。示例代码如下:
local function healMp(actor)
local mp = tonumber(getplayvar(actor, 0, "MP")) or 0
setplayvar(actor, 0, "MP", math.min(mp + 100, 500), 0)
end
onEnterSpring 挂在温泉区域触发器上:打 InSpring 标记并把 actor 加入 healList;springTick 由 2 秒定时器驱动,只对标记仍为 1 的玩家结算回复,HP 封顶 1000 防溢出;标记消失即出池,倒序遍历配合 table.remove 边查边删。位置判定交给引擎的区域触发器完成,脚本全程不碰坐标——引擎做引擎擅长的事,脚本只管状态与数值。
温泉泡池踩过三个坑:一是最初的 tick 直接遍历全服玩家筛温泉里的人,千人在线每 2 秒一次全表扫描,改由进入/离开触发器维护名单后,tick 只扫名单内的几十人;二是回复量写死在脚本,节日翻倍活动要改码热更,回复数值挪到 sysvar 配置读取后运营自助调整;三是玩家在池内下线导致标记残留、对象失效,tick 里对失效引用跳过并移出名单,下次上线由进入触发器重新登记,名单不会越积越大。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏】 一、一行代码拆解:if price < WATCH[goods] then notify end —— 关注降价的…
【游戏】 一、业务场景:赛季结算发现一名玩家胜率 10% 却排在黄金段——历史计分只加不减,积分体系失效 3 个月;积分赛—…
【语法】 一、抛坑提问:3 对括号能组成多少种合法序列?答案是 5——卡塔兰数列:每一项等于前一项乘 2 倍的 2n 减 1…
【语法】 一、抛坑提问:不想用全局随机函数(怕多处共享种子互相干扰),可自实现一个独立随机序列——线性同余法三行核心:乘、加…
【游戏】 一、一行代码拆解:PENDING[outId] = {by = actor, at = now} —— 双人复核的…
【语法】 一、隐蔽陷阱:圆周率小数位背不出更多就不算理解随机模拟?用蒙地卡罗法随机撒点统计,10 万个点能把圆周率估到两位小…