function lua_jingmonster(player)
-- 1. 获取当前地图怪物总数
local mapName = tonumber(getconst(player, "<$USERID>")).."嘟嘟幻境" -- 当前地图名
local monlist = {
"◆「幻境」◆十年魂兽S",
"◆「幻境」◆百年魂兽SS",
"◆「幻境」◆千年魂兽SSS",
"◆「幻境」◆万年魂兽SSSS",
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-07-24 21:40:56 |
👁️ 阅读: 5
我是lua后端老师!
小仙,看了你的代码,发现你在尝试实现一个根据玩家变量来刷怪的循环逻辑,但有几个地方需要调整一下。让我帮你分析并重写这个函数。
首先,你代码里用到了 `GMLib:monGen`,这不是996引擎的标准函数,标准的刷怪函数是 `genmon` 或 `genmonex`。另外,你的循环逻辑和变量处理有些问题。
让我根据你的需求重写一个更清晰的版本:
```lua
function lua_jingmonster(player)
-- 获取当前地图怪物总数
local mapName = tonumber(getconst(player, "<$USERID>")).."嘟嘟幻境" -- 当前地图名
-- 怪物列表
local monlist = {
"◆「幻境」◆十年魂兽S",
"◆「幻境」◆百年魂兽SS",
"◆「幻境」◆千年魂兽SSS",
"◆「幻境」◆万年魂兽SSSS",
"◆「幻境」◆十万年魂兽SSSSS",
"◆「幻境」◆十亿年魂兽SSSSS"
}
-- 变量列表(这里应该是U88到U93?)
local varlist = {
"U88", "U89", "U90", "U91", "U92", "U93" -- 修正了变量名
}
-- 怪物数量统计
local monnum = {0, 0, 0, 0, 0, 0}
-- 已经刷了多少只怪
local spawnedCount = 0
-- 循环刷怪,最多88只
while spawnedCount < 88 do
-- 遍历6种怪物类型
for i = 1, #monlist do
if spawnedCount >= 88 then
break -- 已经刷够88只,退出循环
end
-- 获取玩家变量值
local vardata = getplaydef(player, varlist[i])
-- 如果变量值大于0,就刷这个类型的怪
if vardata and vardata > 0 then
-- 使用标准的genmon函数刷怪
genmon(mapName, 21, 23, monlist[i], 1, 1) -- 在(21,23)刷1只怪,范围1
-- 统计
monnum[i] = monnum[i] + 1
spawnedCount = spawnedCount + 1
-- 减少变量值(如果每次刷怪消耗1点)
setplaydef(player, varlist[i], vardata - 1)
-- 如果已经刷够88只,退出
if spawnedCount >= 88 then
break
end
end
end
end
-- 输出刷怪统计信息
for i = 1, #monlist do
if monnum[i] > 0 then
release_print(player.."刷了"..monnum[i].."只"..monlist[i])
end
end
release_print("总共刷了"..spawnedCount.."只怪物")
end
```
**代码说明:**
1. **刷怪函数**:使用 `genmon(mapName, x, y, monname, range, count)` 来刷怪
2. **循环逻辑**:使用while循环确保最多刷88只怪
3. **变量处理**:每次刷怪后减少对应的变量值
4. **顺序刷怪**:从第1种到第6种依次检查,循环进行
5. **统计输出**:使用 `release_print()` 输出刷怪信息
**主要修改点:**
- 将 `GMLib:monGen` 改为 `genmon`
- 修正了变量列表(应该是U88-U93)
- 添加了循环控制,确保最多刷88只
- 添加了刷怪后的变量减少逻辑
- 添加了统计信息输出
如果你想要更精确的控制,比如每只怪的位置随机一些,可以使用 `genmon(mapName, 21+math.random(5), 23+math.random(5), monlist[i], 0, 1)` 来让怪物在指定范围内随机刷出。
有什么不明白的地方可以继续问我,或者问我的师傅浮生梦尊师!
← 返回问答库