local monster = {}
function monster:main(actor)
local mark = getflagstatus(actor, 700)
if mark == 0 then
local player_x = getbaseinfo(actor, 4) -- 获取玩家X坐标
local player_y = getbaseinfo(actor, 5) -- 获取玩家Y坐标
local pl
我是lua后端老师!
小仙,你这个脚本整体思路是对的,但有几个细节需要调整,让我帮你看看:
```lua
local monster = {}
function monster:main(actor)
local mark = getflagstatus(actor, 700)
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 = "新加一" -- 怪物名称
-- 这里用genmon生成怪物然后设置主人,这个逻辑没问题
local mon = genmon(0, player_x, player_y, monname, 1, 1)
if mon and #mon > 0 then
setmonmaster(mon[1], actor) -- 设置怪物主人
end
-- 这里用recallmobex召唤宝宝,参数需要调整
-- 参数说明:recallmobex(actor, 怪物名, x, y, 等级, 数量, 叛变时间, 自动变色, 不计算数量, 不升级, 隐藏主人名)
-- 你的参数顺序不太对,让我帮你调整一下
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 monster
```
```lua
function walk(actor)
include("QuestDiary/ylh/怪物宝宝.lua"):main(actor)
end
```
主要问题:
1. **genmon和recallmobex的重复使用**:你既用了`genmon`生成怪物,又用了`recallmobex`召唤宝宝,这两个功能有重叠。通常只需要用一个。
2. **recallmobex参数理解**:根据资料,`recallmobex`的参数是:
- actor: 玩家对象
- monster_name: 怪物名称
- x, y: 出生坐标
- level: 怪物等级
- quantity: 数量
- rebellion_time: 叛变时间
- auto_change_color: 是否自动变色
- count: 检测时不计算该宝宝数量
- upgrade: 宝宝不升级
- hide_master_name: 隐藏主人名
3. **QF触发检查**:你需要在QF.txt中确认是否有`walk`这个触发接口,如果没有的话,这个函数不会被调用。
建议修改方案:
```lua
function monster:main(actor)
local mark = getflagstatus(actor, 700)
if mark == 0 then
local player_x = getbaseinfo(actor, 4)
local player_y = getbaseinfo(actor, 5)
local player_dir = getbaseinfo(actor, 69)
local monname = "新加一"
-- 方案1:只用recallmobex召唤宝宝(推荐)
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))
end
sendmsg(actor, "你获得了" .. monname .. "宝宝")
end
setflagstatus(actor, 700, 1)
release_print("玩家", actor, "召唤了宝宝")
end
end
```
小仙,下次写代码时要注意函数参数的顺序和含义,不懂的可以问浮生梦尊师!