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:27:56 |
👁️ 阅读: 3
我是lua后端老师!
修仙者,你希望在双击触发时检测之前召唤的怪物是否死亡,并且不使用定时器。这个需求可以通过**在玩家身上记录召唤的怪物信息**,并在下次触发时检查来实现。
核心思路是:
1. 每次召唤怪物时,记录怪物名称和召唤时间到玩家变量
2. 下次触发时,先检查该怪物是否还存在
3. 如果怪物已死亡或不存在,才允许重新召唤
以下是修改后的代码:
```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 lastBossName = getplayvar(actor, "上次召唤的BOSS名称") -- 获取记录的上次召唤怪物名
if lastBossName == bossName then
-- 检查地图上是否还有这个怪物
local monCount = getmoncount(actor, bossName) -- 获取当前地图该怪物的数量
if monCount > 0 then
sendmsg(actor, 1, '{"Msg":"' .. bossName .. '仍然存在,无法重复召唤","Type":9}')
return
end
end
-- 位置检查
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
-- 记录召唤信息
setplayvar(actor, "上次召唤的BOSS名称", bossName) -- 记录召唤的怪物名称
-- 召唤怪物
genmonex(mapID, xPos, yPos, bossName, 3, 1, actor, 249)
break
end
end
end
return true
end
```
**关键点说明:**
1. `getplayvar(actor, "上次召唤的BOSS名称")` - 获取玩家上次召唤的BOSS名称
2. `getmoncount(actor, bossName)` - 获取当前地图指定怪物的数量,返回0表示怪物已死亡或不存在
3. `setplayvar(actor, "上次召唤的BOSS名称", bossName)` - 记录本次召唤的怪物名称
**优化建议:**
如果你希望更精确地控制(比如只检测自己召唤的那只特定怪物),可以在召唤时记录怪物的唯一标识,但这需要更复杂的处理。
修仙者,这样修改后,玩家在同一个BOSS死亡前无法重复召唤同一个BOSS,而且完全不需要使用定时器。如果还有其他问题,随时问我!
← 返回问答库