---@diagnostic disable: undefined-global, invert-if, unresolved-require
local cfg = require("Envir.core.Npc配置.人物转生配置")
local REQUIRED_LEVEL = 100
local function main(actor, msgID, param1, param2, param3, str)
if msgID == 4 and param1 == 1 then
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-04-05 20:57:19 |
👁️ 阅读: 0
后端Lua老师来也!这位修仙者,你这转生脚本写得挺有想法,但有几个小问题需要优化,咱们一起来看看。
首先,代码里有个明显的错误,在第4行 `getbaseinfo(actor, 39, param3)` 这里,`getbaseinfo` 函数只有两个参数(玩家对象和类型),第三个参数 `param3` 是多余的,应该去掉。
其次,关于转生功能,`renewlevel` 函数的使用需要特别注意。根据资料显示,这个函数是用来控制转生的,参数分别是:
- `rlevel`:转生次数一次转多少级(1-255)
- `level`:转生后等级,0为不改变人物当前等级
- `num`:转生后可以得到的点数
你这里写 `renewlevel(actor, 1, 1, 10)` 意思是转生1次,转生后等级变为1级,获得10点属性点。但你的转生配置是从配置表读取的,可能需要根据配置来调整这些参数。
另外,我发现你返还材料时把"进阶石"写成了"转生石",这是个笔误。
优化后的代码建议如下:
```lua
---@diagnostic disable: undefined-global, invert-if, unresolved-require
local cfg = require("Envir.core.Npc配置.人物转生配置")
local REQUIRED_LEVEL = 100
local function main(actor, msgID, param1, param2, param3, str)
if msgID == 4 and param1 == 1 then
return
end
local reincarnation_level = getbaseinfo(actor, 39) -- 获取当前转生等级
local nextLevelCfg = cfg[reincarnation_level + 1]
if not nextLevelCfg then
sendcentermsg(actor, 180, 0, "转生已达最大等级", 0, 3)
return
end
local level = getbaseinfo(actor, 6) -- 查询人物等级
local money = querymoney(actor, 2) -- 查询元宝数量
local stone = getbagitemcount(actor, "进阶石", 0) -- 查询进阶石数量
if level < REQUIRED_LEVEL then
sendcentermsg(actor, 180, 0, "等级不足100", 0, 3)
return
end
if money < nextLevelCfg.money then
sendcentermsg(actor, 180, 0, "元宝不足" .. nextLevelCfg.money, 0, 3)
return
end
if stone < nextLevelCfg.stone then
sendcentermsg(actor, 180, 0, "进阶石不足" .. nextLevelCfg.stone, 0, 3)
return
end
local before_level = getbaseinfo(actor, 39) -- 记录转生前的等级
local deduct_money = changemoney(actor, 2, "-", nextLevelCfg.money, "转生扣除", 1) -- 扣除元宝
local deduct_stone = takeitem(actor, "进阶石", nextLevelCfg.stone, 0) -- 扣除进阶石
if deduct_money and deduct_stone then
-- 这里应该根据你的配置表来决定转生参数
-- 假设配置表里有 rlevel, after_level, points 字段
renewlevel(actor, nextLevelCfg.rlevel or 1, nextLevelCfg.after_level or 1, nextLevelCfg.points or 10)
local after_level = getbaseinfo(actor, 39) -- 重新获取转生等级
if after_level > before_level then -- 判断转生是否成功
sendcentermsg(actor, 180, 0, "转生成功!当前转生等级:" .. after_level, 0, 3)
else
-- 转生失败,返还材料
changemoney(actor, 2, "+", nextLevelCfg.money, "转生失败返还")
giveitem(actor, "进阶石", nextLevelCfg.stone, 0, "转生失败返还") -- 这里修正为进阶石
sendcentermsg(actor, 180, 0, "转生失败,材料已返还", 0, 3)
end
else
-- 如果扣除失败,返还已扣除的资源
if deduct_money then
changemoney(actor, 2, "+", nextLevelCfg.money, "转生失败返还")
end
if deduct_stone then
giveitem(actor, "进阶石", nextLevelCfg.stone, 0, "转生失败返还") -- 这里修正为进阶石
end
sendcentermsg(actor, 180, 0, "扣除资源失败", 0, 3)
end
end
return { main = main }
```
主要修改点:
1. 修正了 `getbaseinfo` 函数参数错误
2. 修正了材料名称错误(进阶石 vs 转生石)
3. 建议将转生参数从配置表读取,使配置更灵活
4. 添加了更详细的注释
下次写代码时要仔细检查函数参数哦,不懂的地方可以问浮生梦尊师!
后端Lua老师来也!这位修仙者,你这转生脚本写得挺有想法,但有几个小问题需要优化,咱们一起来看看。
首先,代码里有个明显的错误,在第4行 `getbaseinfo(actor, 39, param3)` 这里,`getbaseinfo` 函数只有两个参数(玩家对象和类型),第三个参数 `param3` 是多余的,应该去掉。
其次,关于转生功能,`renewlevel` 函数的使用需要特别注意。根据资料显示,这个函数是用来控制转生的,参数分别是:
- `rlevel`:转生次数一次转多少级(1-255)
- `level`:转生后等级,0为不改变人物当前等级
- `num`:转生后可以得到的点数
你这里写 `renewlevel(actor, 1, 1, 10)` 意思是转生1次,转生后等级变为1级,获得10点属性点。但你的转生配置是从配置表读取的,可能需要根据配置来调整这些参数。
另外,我发现你返还材料时把"进阶石"写成了"转生石",这是个笔误。
优化后的代码建议如下:
```lua
---@diagnostic disable: undefined-global, invert-if, unresolved-require
local cfg = require("Envir.core.Npc配置.人物转生配置")
local REQUIRED_LEVEL = 100
local function main(actor, msgID, param1, param2, param3, str)
if msgID == 4 and param1 == 1 then
return
end
local reincarnation_level = getbaseinfo(actor, 39) -- 获取当前转生等级
local nextLevelCfg = cfg[reincarnation_level + 1]
if not nextLevelCfg then
sendcentermsg(actor, 180, 0, "转生已达最大等级", 0, 3)
return
end
local level = getbaseinfo(actor, 6) -- 查询人物等级
local money = querymoney(actor, 2) -- 查询元宝数量
local stone = getbagitemcount(actor, "进阶石", 0) -- 查询进阶石数量
if level < REQUIRED_LEVEL then
sendcentermsg(actor, 180, 0, "等级不足100", 0, 3)
return
end
if money < nextLevelCfg.money then
sendcentermsg(actor, 180, 0, "元宝不足" .. nextLevelCfg.money, 0, 3)
return
end
if stone < nextLevelCfg.stone then
sendcentermsg(actor, 180, 0, "进阶石不足" .. nextLevelCfg.stone, 0, 3)
return
end
local before_level = getbaseinfo(actor, 39) -- 记录转生前的等级
local deduct_money = changemoney(actor, 2, "-", nextLevelCfg.money, "转生扣除", 1) -- 扣除元宝
local deduct_stone = takeitem(actor, "进阶石", nextLevelCfg.stone, 0) -- 扣除进阶石
if deduct_money and deduct_stone then
-- 这里应该根据你的配置表来决定转生参数
-- 假设配置表里有 rlevel, after_level, points 字段
renewlevel(actor, nextLevelCfg.rlevel or 1, nextLevelCfg.after_level or 1, nextLevelCfg.points or 10)
local after_level = getbaseinfo(actor, 39) -- 重新获取转生等级
if after_level > before_level then -- 判断转生是否成功
sendcentermsg(actor, 180, 0, "转生成功!当前转生等级:" .. after_level, 0, 3)
else
-- 转生失败,返还材料
changemoney(actor, 2, "+", nextLevelCfg.money, "转生失败返还")
giveitem(actor, "进阶石", nextLevelCfg.stone, 0, "转生失败返还") -- 这里修正为进阶石
sendcentermsg(actor, 180, 0, "转生失败,材料已返还", 0, 3)
end
else
-- 如果扣除失败,返还已扣除的资源
if deduct_money then
changemoney(actor, 2, "+", nextLevelCfg.money, "转生失败返还")
end
if deduct_stone then
giveitem(actor, "进阶石", nextLevelCfg.stone, 0, "转生失败返还") -- 这里修正为进阶石
end
sendcentermsg(actor, 180, 0, "扣除资源失败", 0, 3)
end
end
return { main = main }
```
主要修改点:
1. 修正了 `getbaseinfo` 函数参数错误
2. 修正了材料名称错误(进阶石 vs 转生石)
3. 建议将转生参数从配置表读取,使配置更灵活
4. 添加了更详细的注释
下次写代码时要仔细检查函数参数哦,不懂的地方可以问浮生梦尊师!
← 返回问答库