-- 强化装备跟随人物走: 穿戴/脱下属性配置
LIST_equip = {}
-- 穿戴装备
LIST_equip.wear = function(actor,item_obj,where,item_name)
-- 幸运项链添加属性
if where == 3 then
local xianglian_num = getint(actor,"幸运项链幸运") or 0
if xianglian_num > 0 then
我是lua后端老师!
修仙者,你遇到的问题是在替换装备时`LIST_equip.mingwen(actor)`被触发了两次。这确实需要加一个延迟机制来合并处理。
你可以使用`setontimer`函数来设置一个延迟定时器,这样就能确保只触发一次。下面是修改后的代码:
```lua
-- 强化装备跟随人物走: 穿戴/脱下属性配置
LIST_equip = {}
-- 穿戴装备
LIST_equip.wear = function(actor,item_obj,where,item_name)
-- 幸运项链添加属性
if where == 3 then
local xianglian_num = getint(actor,"幸运项链幸运") or 0
if xianglian_num > 0 then
setitemaddvalue(actor,item_obj,1,5, xianglian_num)
if getint(actor,"幸运项链暴击") > 0 then
setitemaddvalue(actor,item_obj,1,30,getint(actor,"幸运项链暴击"))
end
if getint(actor,"幸运项链攻击") > 0 then
setitemaddvalue(actor,item_obj,1,32,getint(actor,"幸运项链攻击"))
end
end
end
-- 人物铭文
if where >= 71 and where <= 77 then
-- 任务29 穿戴铭文
if task_id == 29 and wancheng == 0 then
local item_obj = linkbodyitem(actor, 71) -- 获取物品对象
if item_obj ~= "0" then
newcompletetask(actor, task_id)
setplaydef(actor, "U42", 1)
end
end
-- 铭文添加buff
local buff_id = DATA.mingwen.buff[item_name][1]
if buff_id then
addbuff(actor, buff_id)
end
-- 设置延迟100毫秒后执行铭文重载
setontimer(actor, "MINGWEN_DELAY", 1) -- 1表示0.1秒(100毫秒)
end
-- 装备星星总数buff
if xingxing_zongshu(actor) >= 10 then
xingxing_buff(actor)
local buffLayer = xingxing_buff(actor)
sendmsg(actor, 1,'{"Msg":"当前星星总数: ' .. xingxing_zongshu(actor) ..'星,攻击加成:' .. buffLayer .. '%","FColor":255,"BColor":219,"Type":1}')
end
end
-- 脱下装备
LIST_equip.take = function(actor,item_obj,where,item_name)
-- 清空幸运属性
if where == 3 then
if getint(actor,"幸运项链幸运") > 0 then
setitemaddvalue(actor,item_obj,1,5,0)
if getint(actor,"幸运项链暴击") > 0 then
setitemaddvalue(actor,item_obj,1,30,0)
end
if getint(actor,"幸运项链攻击") > 0 then
setitemaddvalue(actor,item_obj,1,32,0)
end
end
end
-- 10星以上提示
if xingxing_zongshu(actor) >= 10 then
-- 装备星星总数buff
xingxing_buff(actor)
local buffLayer = xingxing_buff(actor)
sendmsg(actor, 1,'{"Msg":"当前星星总数: ' .. xingxing_zongshu(actor) ..'星,攻击加成:' .. buffLayer .. '%","FColor":255,"BColor":219,"Type":1}')
end
-- 设置延迟100毫秒后执行铭文重载
setontimer(actor, "MINGWEN_DELAY", 1) -- 1表示0.1秒(100毫秒)
end
-- 铭文装备重载
LIST_equip.mingwen = function(actor)
-- 夺火印 60540 烈火剑法的冷却时间减少2秒。
-- 狂怒印 60550 牺牲烈火剑法的一半伤害,来换取高额的冷却时间缩减。
if hasbuff(actor,60540) then
setskilldeccd(actor,"烈火剑法","-",2)
elseif hasbuff(actor,60550) then
setskilldeccd(actor,"烈火剑法","-",5)
else
setskilldeccd(actor,"烈火剑法","=",0)
end
end
-- 在QF中需要添加对应的定时器触发
-- 在QF文件中添加:
-- [@ontimer(MINGWEN_DELAY)]
-- {
-- LIST_equip.mingwen(<$USERID>)
-- }
return LIST_equip
```
关键修改点:
1. 在`wear`和`take`函数中,不再直接调用`LIST_equip.mingwen(actor)`,而是使用`setontimer(actor, "MINGWEN_DELAY", 1)`设置一个100毫秒的延迟定时器
2. 定时器ID为"MINGWEN_DELAY"
3. 需要在QF文件中添加对应的定时器触发接口,当定时器触发时执行铭文重载
这样处理的好处是:
- 无论穿戴和脱下操作多么频繁,100毫秒内的所有操作都会被合并为一次执行
- 避免了重复触发的问题
- 延迟时间足够短,玩家几乎感觉不到延迟
记得在QF文件中添加对应的定时器触发接口哦!如果还有其他问题,随时问我,或者请教浮生梦尊师!