for k, v in ipairs(npc.BossReliveCfg) do
local bossStatus = mapbossinfo(v.mapName, v.monsterName, 0, 0) or {}
dump(bossStatus)
end
[2026/5/16 星期六 1:09:02] Print:- 1 = "火龙神#100#0#347#325#无"
[2026/5/16 星期六 1:15:40] Print:table
怎么将bossStatus里的复活时间提取出来
我是lua后端老师!小仙,你这个问题很常见,让我来帮你看看怎么从 `bossStatus` 这个字符串里提取出复活时间。
根据你打印的结果 `"火龙神#100#0#347#325#无"`,这是一个用 `#` 号分隔的字符串。要提取复活时间,我们需要先把这个字符串拆分成一个表格(table),然后根据位置取出对应的字段。
在996引擎的Lua中,我们可以使用 `getliststring` 函数来分割字符串。通常,这类Boss状态信息的格式是:`怪物名称#地图编号#状态#坐标X#坐标Y#归属` 或者 `怪物名称#地图编号#复活时间#坐标X#坐标Y#归属`。从你的结果 `"火龙神#100#0#347#325#无"` 来看,第三个字段 `0` 很可能就是复活时间(0表示已复活)。
下面是一个封装好的函数,你可以直接使用:
```lua
-- 从boss状态字符串中提取复活时间
-- @param statusStr string Boss状态字符串,例如 "火龙神#100#0#347#325#无"
-- @return integer 复活时间(秒)
function GetBossReliveTime(statusStr)
if statusStr == nil or statusStr == "" then
return 0
end
local list = getliststring(statusStr, "#")
-- 假设格式为:怪物名#地图ID#复活时间#坐标X#坐标Y#归属
if #list >= 3 then
local reliveTime = tonumber(list[3]) or 0
return reliveTime
end
return 0
end
```
使用示例:
```lua
for k, v in ipairs(npc.BossReliveCfg) do
local bossStatus = mapbossinfo(v.mapName, v.monsterName, 0, 0) or {}
-- 假设bossStatus是一个字符串
if type(bossStatus) == "string" then
local reliveTime = GetBossReliveTime(bossStatus)
release_print("Boss:", v.monsterName, "复活时间:", reliveTime, "秒")
end
end
```
另外,小仙,根据引擎的更新,还有一个更直接的方法可以获取怪物的位置和复活时间,那就是使用 `getmonrefresh` 函数。这个函数返回的是JSON格式的数据,可以直接解析出复活时间。
```lua
-- 使用getmonrefresh获取怪物信息(仅支持小地图提示的怪物)
local mapId = "你的地图ID"
local resultJson = getmonrefresh(mapId, 1) -- 参数1表示不屏蔽数字
if resultJson and resultJson ~= "" then
local resultTable = json2tbl(resultJson) -- 需要json2tbl函数支持
if resultTable and resultTable.mon then
for _, monInfo in ipairs(resultTable.mon) do
release_print("怪物名:", monInfo.name, "坐标X:", monInfo.x, "坐标Y:", monInfo.y, "复活时间:", monInfo.time)
end
end
end
```
`getmonrefresh` 返回的JSON中,`time` 字段就是复活时间,0表示已复活,大于0表示N秒后复活。你可以根据实际情况选择使用哪种方法。
如果还有不明白的地方,随时问我,或者请教浮生梦尊师!