function changetask(actor,monName)
if lib:getvalueb(actor, "U60")==1 and actor.map=="时之裂缝" then
local bossName = "迷了心窍的疯僧"
if monName== bossName then
lib:setvalueb(actor, "U58", lib:getvalueb(
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-04-04 20:16:51 |
👁️ 阅读: 0
我是lua后端老师!
小仙,你这段代码有几个问题需要修正:
1. **函数调用错误**:在`changetask`函数中,你使用了`p("789")`,但在996引擎中应该使用`release_print()`来打印调试信息
2. **触发接口不匹配**:`killmon`触发函数的参数顺序不对,根据引擎文档,`killmon`触发的参数顺序是`(actor, mon, monName, killerType)`,你代码中是正确的,但要注意`monName`是字符串类型
3. **变量检查逻辑**:在`killmon`函数中,你检查`lib:getvalueb(actor, "U60")>0`,但在`changetask`函数中又检查`==1`,这可能导致逻辑不一致
4. **任务刷新函数使用**:`newchangetask`函数使用正确,但要注意这个函数应该在`changetask`触发接口中调用
修正后的代码应该是这样的:
```lua
function changetask(actor, monName)
if lib:getvalueb(actor, "U60") == 1 and actor.map == "时之裂缝" then
local bossName = "迷了心窍的疯僧"
if monName == bossName then
local currentCount = lib:getvalueb(actor, "U58") or 0
lib:setvalueb(actor, "U58", currentCount + 1)
release_print("玩家" .. actor .. "击杀了" .. bossName .. ",当前计数:" .. (currentCount + 1))
-- 刷新任务状态
newchangetask(actor, 1, tostring(currentCount + 1))
end
end
end
-------杀怪触发------------------------------------------------------------------------------------------------
function killmon(actor, mon, monName, killerType)
-- actor: 攻击者对象
-- mon: 被杀死的怪物对象
-- monName: 怪物名称
-- killerType: 凶手类型 (0=宝宝, 1=英雄, 2=人物, 4=全局触发)
if lib:getvalueb(actor, "U60") > 0 then
changetask(actor, monName)
end
end
```
主要修改点:
- 将`p("789")`改为`release_print()`并添加更有意义的调试信息
- 优化了变量获取和赋值的逻辑
- 确保`newchangetask`的参数正确传递
另外要注意的是,`newchangetask`函数通常是在QF的`changetask`触发接口中调用的,用于刷新任务进度显示。你这里在`killmon`触发中调用是没问题的,只要确保任务系统配置正确即可。
我是lua后端老师!
小仙,你这段代码有几个问题需要修正:
1. **函数调用错误**:在`changetask`函数中,你使用了`p("789")`,但在996引擎中应该使用`release_print()`来打印调试信息
2. **触发接口不匹配**:`killmon`触发函数的参数顺序不对,根据引擎文档,`killmon`触发的参数顺序是`(actor, mon, monName, killerType)`,你代码中是正确的,但要注意`monName`是字符串类型
3. **变量检查逻辑**:在`killmon`函数中,你检查`lib:getvalueb(actor, "U60")>0`,但在`changetask`函数中又检查`==1`,这可能导致逻辑不一致
4. **任务刷新函数使用**:`newchangetask`函数使用正确,但要注意这个函数应该在`changetask`触发接口中调用
修正后的代码应该是这样的:
```lua
function changetask(actor, monName)
if lib:getvalueb(actor, "U60") == 1 and actor.map == "时之裂缝" then
local bossName = "迷了心窍的疯僧"
if monName == bossName then
local currentCount = lib:getvalueb(actor, "U58") or 0
lib:setvalueb(actor, "U58", currentCount + 1)
release_print("玩家" .. actor .. "击杀了" .. bossName .. ",当前计数:" .. (currentCount + 1))
-- 刷新任务状态
newchangetask(actor, 1, tostring(currentCount + 1))
end
end
end
-------杀怪触发------------------------------------------------------------------------------------------------
function killmon(actor, mon, monName, killerType)
-- actor: 攻击者对象
-- mon: 被杀死的怪物对象
-- monName: 怪物名称
-- killerType: 凶手类型 (0=宝宝, 1=英雄, 2=人物, 4=全局触发)
if lib:getvalueb(actor, "U60") > 0 then
changetask(actor, monName)
end
end
```
主要修改点:
- 将`p("789")`改为`release_print()`并添加更有意义的调试信息
- 优化了变量获取和赋值的逻辑
- 确保`newchangetask`的参数正确传递
另外要注意的是,`newchangetask`函数通常是在QF的`changetask`触发接口中调用的,用于刷新任务进度显示。你这里在`killmon`触发中调用是没问题的,只要确保任务系统配置正确即可。
← 返回问答库