local monster = {}
function monster:main(actor)
local mark= getflagstatus(actor, 700)
local player_x = getbaseinfo(actor, 4)
local player_y = getbaseinfo(actor, 5)
-- 获取玩家当前朝向
local player_dir = getbaseinfo(actor, 69)
local monname = "新加一"
-
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-04-19 16:57:42 |
👁️ 阅读: 2
我是lua后端老师!
小仙,想在走路触发里只召唤一次,需要用到标记来控制。我来帮你写一个完整的走路触发脚本:
```lua
-- 走路触发脚本
-- 当玩家走路时触发,只召唤一次宝宝
local walk_trigger = {}
function walk_trigger:walk(actor) -- 走路触发接口
local mark = getflagstatus(actor, 700) -- 检查标记700的状态
-- 如果标记为0(未召唤过),则执行召唤
if mark == 0 then
local player_x = getbaseinfo(actor, 4) -- 获取玩家X坐标
local player_y = getbaseinfo(actor, 5) -- 获取玩家Y坐标
local player_dir = getbaseinfo(actor, 69) -- 获取玩家朝向
local monname = "新加一" -- 怪物名称
-- 生成怪物
local mon = genmon(0, player_x, player_y, monname, 1, 1)
if mon and #mon > 0 then
setmonmaster(mon[1], actor) -- 设置怪物主人
end
-- 召唤宝宝
local mons = recallmobex(actor, monname, player_x, player_y, 0, 5, 65535, 0, 1, 1, 1)
if mons and #mons > 0 then
for i, mon_obj in ipairs(mons) do
setbaseinfo(mon_obj, 69, player_dir) -- 设置宝宝朝向
release_print("宝宝系统", i, getbaseinfo(mon_obj, 4), getbaseinfo(mon_obj, 5), "方向:", player_dir)
end
sendmsg(actor, "你获得了" .. monname .. "宝宝,并已同步你的朝向")
end
setflagstatus(actor, 700, 1) -- 设置标记为1,表示已召唤
release_print("玩家", actor, "在走路触发中召唤了宝宝")
else
-- 如果已经召唤过,这里可以什么都不做,或者给个提示
-- sendmsg(actor, "你已经召唤过宝宝了")
end
end
return walk_trigger
```
使用说明:
1. **触发原理**:使用`getflagstatus(actor, 700)`检查标记状态
2. **第一次走路**:标记为0,执行召唤逻辑,然后`setflagstatus(actor, 700, 1)`设置标记
3. **后续走路**:标记为1,不再执行召唤
4. **重置标记**:如果需要重新召唤,可以在其他地方用`setflagstatus(actor, 700, 0)`重置
注意事项:
1. 我把`p()`改成了`release_print()`和`sendmsg()`,这是正确的打印和消息发送方式
2. 记得在QF触发文件中添加`[@walk]`接口来调用这个脚本
3. 如果要重置标记,可以在NPC对话或其他触发中设置`setflagstatus(actor, 700, 0)`
这样就能实现走路时只召唤一次宝宝的效果啦!不懂的可以问浮生梦尊师哦!
我是lua后端老师!
小仙,想在走路触发里只召唤一次,需要用到标记来控制。我来帮你写一个完整的走路触发脚本:
```lua
-- 走路触发脚本
-- 当玩家走路时触发,只召唤一次宝宝
local walk_trigger = {}
function walk_trigger:walk(actor) -- 走路触发接口
local mark = getflagstatus(actor, 700) -- 检查标记700的状态
-- 如果标记为0(未召唤过),则执行召唤
if mark == 0 then
local player_x = getbaseinfo(actor, 4) -- 获取玩家X坐标
local player_y = getbaseinfo(actor, 5) -- 获取玩家Y坐标
local player_dir = getbaseinfo(actor, 69) -- 获取玩家朝向
local monname = "新加一" -- 怪物名称
-- 生成怪物
local mon = genmon(0, player_x, player_y, monname, 1, 1)
if mon and #mon > 0 then
setmonmaster(mon[1], actor) -- 设置怪物主人
end
-- 召唤宝宝
local mons = recallmobex(actor, monname, player_x, player_y, 0, 5, 65535, 0, 1, 1, 1)
if mons and #mons > 0 then
for i, mon_obj in ipairs(mons) do
setbaseinfo(mon_obj, 69, player_dir) -- 设置宝宝朝向
release_print("宝宝系统", i, getbaseinfo(mon_obj, 4), getbaseinfo(mon_obj, 5), "方向:", player_dir)
end
sendmsg(actor, "你获得了" .. monname .. "宝宝,并已同步你的朝向")
end
setflagstatus(actor, 700, 1) -- 设置标记为1,表示已召唤
release_print("玩家", actor, "在走路触发中召唤了宝宝")
else
-- 如果已经召唤过,这里可以什么都不做,或者给个提示
-- sendmsg(actor, "你已经召唤过宝宝了")
end
end
return walk_trigger
```
使用说明:
1. **触发原理**:使用`getflagstatus(actor, 700)`检查标记状态
2. **第一次走路**:标记为0,执行召唤逻辑,然后`setflagstatus(actor, 700, 1)`设置标记
3. **后续走路**:标记为1,不再执行召唤
4. **重置标记**:如果需要重新召唤,可以在其他地方用`setflagstatus(actor, 700, 0)`重置
注意事项:
1. 我把`p()`改成了`release_print()`和`sendmsg()`,这是正确的打印和消息发送方式
2. 记得在QF触发文件中添加`[@walk]`接口来调用这个脚本
3. 如果要重置标记,可以在NPC对话或其他触发中设置`setflagstatus(actor, 700, 0)`
这样就能实现走路时只召唤一次宝宝的效果啦!不懂的可以问浮生梦尊师哦!
← 返回问答库