怪物名称
◆「幻境」◆十年魂兽S
◆「幻境」◆百年魂兽SS
◆「幻境」◆千年魂兽SSS
◆「幻境」◆万年魂兽SSSS
◆「幻境」◆十万年魂兽SSSSS
◆「幻境」◆十亿年魂兽SSSSS
人物变量U88,U88,U89,U90,U91,U92
单个地图内怪物不得高于88只
以上刷新一只怪物就对应的变量-1
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-07-24 21:09:31 |
👁️ 阅读: 10
我是lua后端老师!
小仙,根据你的需求,我来帮你写一个在单个地图内控制这6种魂兽刷新的脚本。这个脚本会使用地图变量来记录每种怪物的当前数量,并确保总数不超过88只。
首先,我们需要一个初始化地图变量的函数,在QF的`startup`或地图首次被使用时调用。然后,在刷怪逻辑中,每刷一只怪,对应的变量就减1,同时检查总数。
这里是一个完整的示例,包含初始化、刷怪和怪物死亡后增加变量的逻辑:
```lua
-- 初始化地图变量函数
function InitMapMonsterVars(mapid)
-- 设置6种魂兽的初始数量为0,变量位置1-6
for i = 1, 6 do
setenvirintvar(mapid, i, 0)
end
-- 变量7用于记录地图内怪物总数
setenvirintvar(mapid, 7, 0)
release_print("地图", mapid, "的怪物计数变量已初始化")
end
-- 刷怪函数
function SpawnHunShou(actor, mapid, x, y, monType)
-- monType: 1=十年, 2=百年, 3=千年, 4=万年, 5=十万年, 6=十亿年
local monNameList = {
"◆「幻境」◆十年魂兽S",
"◆「幻境」◆百年魂兽SS",
"◆「幻境」◆千年魂兽SSS",
"◆「幻境」◆万年魂兽SSSS",
"◆「幻境」◆十万年魂兽SSSSS",
"◆「幻境」◆十亿年魂兽SSSSS"
}
-- 获取当前地图怪物总数
local totalMon = getenvirintvar(mapid, 7)
if totalMon >= 88 then
sendmsg(actor, "当前地图怪物数量已达上限(88只),无法刷新更多魂兽。", 1)
return false
end
-- 获取指定类型怪物的当前数量
local typeCount = getenvirintvar(mapid, monType)
-- 这里假设每种怪物没有单独上限,只检查总数
-- 如果你需要每种怪物也有上限,可以在这里添加判断
-- 刷怪
local monName = monNameList[monType]
local result = genmonex(mapid, x, y, monName, 0, 1, actor) -- 刷1只,归属给触发者
if result and #result > 0 then
-- 刷怪成功,对应类型怪物数量+1,总数+1
setenvirintvar(mapid, monType, typeCount + 1)
setenvirintvar(mapid, 7, totalMon + 1)
-- 给怪物绑定类型标识,用于死亡时识别
for _, mon in ipairs(result) do
setobjintvar(mon, 1, monType) -- 用怪物对象的变量1存储类型
end
sendmsg(actor, string.format("成功召唤[%s],当前地图共有%d只怪物。", monName, totalMon + 1), 1)
return true
else
sendmsg(actor, "召唤魂兽失败,请检查参数。", 1)
return false
end
end
-- 怪物死亡触发处理 (需要在QF的killmon触发中调用)
function OnHunShouDie(actor, mon)
-- 检查是否是我们的魂兽(通过怪物对象变量1判断)
local monType = getobjintvar(mon, 1)
if monType >= 1 and monType <= 6 then
local mapid = getMapXY(actor) -- 获取当前地图ID,实际使用时可能需要调整
local mapName = getmapname(mapid)
-- 获取当前数量
local typeCount = getenvirintvar(mapid, monType)
local totalMon = getenvirintvar(mapid, 7)
-- 数量减1,确保不会小于0
if typeCount > 0 then
setenvirintvar(mapid, monType, typeCount - 1)
end
if totalMon > 0 then
setenvirintvar(mapid, 7, totalMon - 1)
end
local monNameList = {
"◆「幻境」◆十年魂兽S",
"◆「幻境」◆百年魂兽SS",
"◆「幻境」◆千年魂兽SSS",
"◆「幻境」◆万年魂兽SSSS",
"◆「幻境」◆十万年魂兽SSSSS",
"◆「幻境」◆十亿年魂兽SSSSS"
}
release_print(string.format("魂兽死亡: %s, 地图: %s, 剩余总数: %d",
monNameList[monType], mapName, totalMon - 1))
end
end
-- 查询当前怪物数量函数
function CheckMonsterCount(actor, mapid)
local msg = "当前地图魂兽数量统计:\n"
local monNameList = {
"十年魂兽S",
"百年魂兽SS",
"千年魂兽SSS",
"万年魂兽SSSS",
"十万年魂兽SSSSS",
"十亿年魂兽SSSSS"
}
for i = 1, 6 do
local count = getenvirintvar(mapid, i)
msg = msg .. string.format("%s: %d只\n", monNameList[i], count)
end
local total = getenvirintvar(mapid, 7)
msg = msg .. string.format("总计: %d/88只", total)
sendmsg(actor, msg, 1)
end
```
**使用说明:**
1. **初始化**:在地图第一次使用前,调用`InitMapMonsterVars("地图ID")`来初始化变量。
2. **刷怪**:通过`SpawnHunShou(玩家对象, "地图ID", X坐标, Y坐标, 魂兽类型1-6)`来刷怪。
- 例如:`SpawnHunShou(actor, "3", 100, 100, 3)` 在3地图100,100位置刷千年魂兽。
3. **死亡处理**:需要在QF的`killmon`触发中调用`OnHunShouDie(actor, mon)`函数。
4. **查询**:通过`CheckMonsterCount(玩家对象, "地图ID")`查看当前数量。
**注意事项:**
- 地图变量是临时存储,重启服务器会清空。如果需要持久化,可以考虑使用`setsysvar`系统变量。
- `getMapXY(actor)`函数可能需要根据你的实际环境调整,以正确获取地图ID。
- 这个脚本确保了单个地图内所有怪物总数不超过88只,符合你的要求。
如果你需要将变量对应到人物的U88-U92,我们可以稍作调整,但根据你的描述,使用地图变量来控制单个地图的怪物数量更合适。有什么不明白的可以再问我哦!
← 返回问答库