function stdmodefunc170(actor, makeIndex, itemIdx, nOverLap)
local itemTbl = {
[1] = {itemName = "地灵猪守正王人型BOSS令牌", idx = 10030, monName = "稻草人"},
[2] = {itemName = "地灵猪守正王兽型BOSS令牌", idx = 10031, monName = "尸王"},
[3] = {ite
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-06-12 18:20:16 |
👁️ 阅读: 5
嗨,我是lua后端老师!
小仙,你的问题很有意思!除了用个人定时器,还可以用**地图定时器**来判断玩家召唤的怪物是否存在。
因为怪物是在地图上生成的,所以可以通过地图定时器来监控,当定时器触发时检查地图上该怪物的数量,如果为0就说明怪物已经死亡或消失。
下面给你一个改造后的示例:
```lua
function stdmodefunc170(actor, makeIndex, itemIdx, nOverLap)
local itemTbl = {
[1] = {itemName = "地灵猪守正王人型BOSS令牌", idx = 10030, monName = "稻草人"},
[2] = {itemName = "地灵猪守正王兽型BOSS令牌", idx = 10031, monName = "尸王"},
[3] = {itemName = "迪亚波罗暗黑王人形BOSS令牌", idx = 10032, monName = "沃玛战士"},
}
for k, v in ipairs(itemTbl) do
if itemIdx == v.idx then
local bossName = v.monName
local item = v.itemName
local mapID = tonumber(getbaseinfo(actor, 3))
local xPos = tonumber(getbaseinfo(actor, 4))
local yPos = tonumber(getbaseinfo(actor, 5))
local canArrive = gridattr(mapID, xPos, yPos, 1) -- 判断能否到达
local isSaft = gridattr(mapID, xPos, yPos, 2) -- 判断是否在安全区
local isSiege = gridattr(mapID, xPos, yPos, 3) -- 判断是否在攻城区
if isSaft or not canArrive or isSiege then
sendmsg(actor, 1, '{"Msg":"当前位置不能使用' .. item .. ',"Type":9}')
return
else
-- 生成怪物
genmonex(mapID, xPos, yPos, bossName, 3, 1, actor, 249)
-- 设置地图定时器,10秒后触发检查
setenvirontimer(mapID, 1, 10, "@checkMonExist," .. actor .. "," .. bossName .. "," .. mapID)
break
end
end
end
return true
end
-- 地图定时器跳转函数,检查怪物是否存在
function checkMonExist(sysobj, actor, bossName, mapID)
local monCount = getmoncount(mapID, bossName) -- 获取地图上该怪物的数量
if monCount == 0 then
sendmsg(actor, 1, '{"Msg":"您召唤的' .. bossName .. '已被击败!","Type":9}')
-- 可以在这里添加怪物死亡后的其他逻辑,比如奖励等
else
-- 如果怪物还存在,可以继续设置定时器检查
setenvirontimer(mapID, 1, 10, "@checkMonExist," .. actor .. "," .. bossName .. "," .. mapID)
end
end
```
**说明:**
1. 使用 `setenvirontimer` 设置一个地图定时器,定期执行 `checkMonExist` 函数。
2. `checkMonExist` 中通过 `getmoncount` 获取地图上指定怪物的数量,如果为0则说明怪物已死。
3. 如果怪物还存在,可以重新设置定时器继续监控。
这样就不需要依赖玩家的个人定时器了,尤其适合长时间存在的怪物监控。
如果还有其他疑问,随时问我哦!
← 返回问答库