灵宠系统养成半年,玩家的痛点是同一时间只能带一只:想练新宠就得让老宠坐冷板凳。出战位加助战位的双槽框架缓解这个矛盾:出战位享受全属性,助战位按三成属性加成给主人,两个位置切换有序、冷却独立。框架要处理槽位互斥、属性折算与切换保护三个环节。
切换接口先校验目标宠状态:已在出战位的宠物不可再设为助战,正在战斗中的宠物禁止切换;切换成功后双槽属性立即重算。示例代码如下:
-- 灵宠槽位:出战与助战切换
local player = class(actor)
local function switchPet(player, petId, toSlot)
local curSlot = getplayvar(player, "HUMAN", "PetSlot_" .. petId)
if curSlot == "fight" and toSlot == "assist" then
sendmsg(player, 1, 0, "出战中的宠物不能直接转为助战。")
return
end
if tonumber(getplayvar(player, "HUMAN", "InCombat") or 0) == 1 then
sendmsg(player, 1, 0, "战斗中无法更换灵宠。")
return
end
setplayvar(player, "HUMAN", "PetSlot_" .. petId, toSlot, true)
sendmsg(player, 1, 0, "灵宠已切换至" .. (toSlot == "fight" and "出战位" or "助战位") .. "。")
end
出战位宠物属性全额生效,助战位按三成折算注入主人面板;折算在登录与切换时统一结算,属性写入前先清旧值防止叠加。示例代码如下:
-- 灵宠属性:折算注入
local player = class(actor)
local function recalcPetBonus(player)
local fightId = getplayvar(player, "HUMAN", "PetFightId")
local assistId = getplayvar(player, "HUMAN", "PetAssistId")
local fightAtk = tonumber(getplayvar(player, "HUMAN", "PetAtk_" .. fightId) or 0)
local assistAtk = tonumber(getplayvar(player, "HUMAN", "PetAtk_" .. assistId) or 0)
local bonus = fightAtk + math.floor(assistAtk * 0.3)
setplayvar(player, "HUMAN", "PetBonusAtk", bonus, true)
addbuff(player, 10091, 0, 0, player)
sendmsg(player, 1, 0, "灵宠加成已刷新:攻击 +" .. bonus .. "。")
end
验证四条路径:出战转助战拒绝、战斗中切换拒绝、助战三成折算数值正确、双槽切换后面板加成不叠加不残留。切宠冷却六十秒内重复操作被拦截。线上监控双槽使用率与切换频率,助战位使用率低于两成说明三成折算吸引力不足,可上调到四成观察;切换失败率抬头优先查战斗状态标记的同步时机。
切换接口曾不校验出战互斥,同一只宠物同时挂两个槽,属性加成翻倍被当成 bug 上报,互斥校验是第一课。折算注入曾不清旧值,连续切宠五次后面板攻击加成叠了五层,结算前先清后加成为固定套路。助战位最初零加成,玩家纷纷反馈助战位没用,三成折算是拿数据调出来的平衡点。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 行会日常任务十年如一日是同三件事,老成员做麻了,新人做懵了。行会任务大厅改成自选池:每天刷出八个任务,成…
实战应用:用在哪里 为了冲季度在线峰值,一周内同时开了双倍经验、掉落翻倍、充值返利三场活动,结果金币产出是平日六倍,裁决之杖…
实战应用:用在哪里 师徒系统的奖励散在多个环节,徒弟不知道出师还差什么,师傅不知道带徒收益几何。师徒面板把出师进度、五项师门…
实战应用:用在哪里 法师的终极愿景是流星火雨:天空落下火雨,范围内所有敌人同时受击,视觉与数值都是全服焦点。触发设计要处理三…
实战应用:用在哪里 攻城战两个月才一次,新会长连城门在哪都要找半天。城战演习把攻城流程拆成每周一次的无奖励演练:地图、门禁、…
实战应用:用在哪里 角色变量是隐形的存储:每个系统都往里塞数据,没人记得清场,一年后单个角色的变量膨胀到上万字符,存档变慢、…