local junguan = {}
function junguan.link(actor, msgid, arg1, arg2, arg3, sMsg)
-- 首先检查配置是否加载
if not cfg_junguan or not next(cfg_junguan) then
lib:msg(actor, "配置错误")
return
end
-- 获取玩家的焚天等级(假设存储在U52变量中)
local
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-03-25 15:52:57 |
👁️ 阅读: 5
后端Lua老师来了!小仙,你这代码写得挺有模样的,不过U53的控制逻辑还不太完整。我来帮你完善一下,确保每个选项只能领取一次。
```lua
local junguan = {}
function junguan.link(actor, msgid, arg1, arg2, arg3, sMsg)
-- 首先检查配置是否加载
if not cfg_junguan or not next(cfg_junguan) then
lib:msg(actor, "配置错误")
return
end
-- 获取玩家的焚天等级(假设存储在U52变量中)
local junguanLevel = lib:getvalueb(actor, "U52") or 0
release_print("当前焚天等级:", junguanLevel)
-- 获取领取状态(U53的每一位表示一个选项是否已领取)
local receivedState = lib:getvalueb(actor, "U53") or 0
-- 使用 if...elseif 结构来处理不同的 arg2 选项
if arg2 == 0 then
-- 检查是否已领取(判断U53的第1位是否为1)
local bitCheck = receivedState & 1
if bitCheck ~= 0 then
lib:msg(actor, "该奖励已领取过!")
return
end
-- 选项0:需要焚天等级 >= 30
if junguanLevel >= 30 then
lib:msg(actor, "领取成功!!!")
giveitem(actor, "魔·丸", 3)
-- 设置U53的第1位为1(标记已领取)
local newState = receivedState | 1
lib:setvalueb(actor, "U53", newState)
else
lib:msg(actor, "你的镇压点数不足!!!")
end
elseif arg2 == 1 then
-- 检查是否已领取(判断U53的第2位是否为1)
local bitCheck = receivedState & 2
if bitCheck ~= 0 then
lib:msg(actor, "该奖励已领取过!")
return
end
-- 选项1:需要焚天等级 >= 60
if junguanLevel >= 60 then
lib:msg(actor, "领取成功!!!")
giveitem(actor, "隐魔秘宝", 1)
-- 设置U53的第2位为1(标记已领取)
local newState = receivedState | 2
lib:setvalueb(actor, "U53", newState)
else
lib:msg(actor, "你的镇压点数不足!!!")
end
elseif arg2 == 2 then
-- 检查是否已领取(判断U53的第3位是否为1)
local bitCheck = receivedState & 4
if bitCheck ~= 0 then
lib:msg(actor, "该奖励已领取过!")
return
end
-- 选项2:需要焚天等级 >= 90,并授予称号
if junguanLevel >= 90 then
lib:msg(actor, "领取成功!!!")
confertitle(actor, "深渊先锋")
-- 设置U53的第3位为1(标记已领取)
local newState = receivedState | 4
lib:setvalueb(actor, "U53", newState)
else
lib:msg(actor, "你的镇压点数不足!!!")
end
-- 可以在这里加一个 else 分支,处理意料之外的 arg2 值
-- else
-- lib:msg(actor, "无效的选项")
end
end
-- 添加一个重置函数(如果需要的话)
function junguan.reset(actor)
-- 重置U53为0(所有奖励可重新领取)
lib:setvalueb(actor, "U53", 0)
lib:msg(actor, "军功奖励状态已重置")
end
-- 添加一个查看状态的函数
function junguan.check(actor)
local receivedState = lib:getvalueb(actor, "U53") or 0
local junguanLevel = lib:getvalueb(actor, "U52") or 0
release_print("当前焚天等级:", junguanLevel)
release_print("领取状态(U53):", receivedState)
-- 输出每个选项的领取状态
if (receivedState & 1) ~= 0 then
lib:msg(actor, "选项0:已领取")
else
lib:msg(actor, "选项0:未领取")
end
if (receivedState & 2) ~= 0 then
lib:msg(actor, "选项1:已领取")
else
lib:msg(actor, "选项1:未领取")
end
if (receivedState & 4) ~= 0 then
lib:msg(actor, "选项2:已领取")
else
lib:msg(actor, "选项2:未领取")
end
end
return junguan
```
小仙,我给你完善了几个关键点:
1. **位运算控制**:用U53的每一位(二进制位)来控制每个选项的领取状态,这样只用一个变量就能控制多个选项
2. **领取前检查**:在每个选项领取前先检查是否已领取,避免重复领取
3. **状态标记**:领取成功后立即更新U53的对应位
4. **辅助函数**:加了`reset`和`check`函数,方便调试和管理
这样每个玩家每个选项都只能领取一次了。如果还有不懂的,随时问我哈!
后端Lua老师来了!小仙,你这代码写得挺有模样的,不过U53的控制逻辑还不太完整。我来帮你完善一下,确保每个选项只能领取一次。
```lua
local junguan = {}
function junguan.link(actor, msgid, arg1, arg2, arg3, sMsg)
-- 首先检查配置是否加载
if not cfg_junguan or not next(cfg_junguan) then
lib:msg(actor, "配置错误")
return
end
-- 获取玩家的焚天等级(假设存储在U52变量中)
local junguanLevel = lib:getvalueb(actor, "U52") or 0
release_print("当前焚天等级:", junguanLevel)
-- 获取领取状态(U53的每一位表示一个选项是否已领取)
local receivedState = lib:getvalueb(actor, "U53") or 0
-- 使用 if...elseif 结构来处理不同的 arg2 选项
if arg2 == 0 then
-- 检查是否已领取(判断U53的第1位是否为1)
local bitCheck = receivedState & 1
if bitCheck ~= 0 then
lib:msg(actor, "该奖励已领取过!")
return
end
-- 选项0:需要焚天等级 >= 30
if junguanLevel >= 30 then
lib:msg(actor, "领取成功!!!")
giveitem(actor, "魔·丸", 3)
-- 设置U53的第1位为1(标记已领取)
local newState = receivedState | 1
lib:setvalueb(actor, "U53", newState)
else
lib:msg(actor, "你的镇压点数不足!!!")
end
elseif arg2 == 1 then
-- 检查是否已领取(判断U53的第2位是否为1)
local bitCheck = receivedState & 2
if bitCheck ~= 0 then
lib:msg(actor, "该奖励已领取过!")
return
end
-- 选项1:需要焚天等级 >= 60
if junguanLevel >= 60 then
lib:msg(actor, "领取成功!!!")
giveitem(actor, "隐魔秘宝", 1)
-- 设置U53的第2位为1(标记已领取)
local newState = receivedState | 2
lib:setvalueb(actor, "U53", newState)
else
lib:msg(actor, "你的镇压点数不足!!!")
end
elseif arg2 == 2 then
-- 检查是否已领取(判断U53的第3位是否为1)
local bitCheck = receivedState & 4
if bitCheck ~= 0 then
lib:msg(actor, "该奖励已领取过!")
return
end
-- 选项2:需要焚天等级 >= 90,并授予称号
if junguanLevel >= 90 then
lib:msg(actor, "领取成功!!!")
confertitle(actor, "深渊先锋")
-- 设置U53的第3位为1(标记已领取)
local newState = receivedState | 4
lib:setvalueb(actor, "U53", newState)
else
lib:msg(actor, "你的镇压点数不足!!!")
end
-- 可以在这里加一个 else 分支,处理意料之外的 arg2 值
-- else
-- lib:msg(actor, "无效的选项")
end
end
-- 添加一个重置函数(如果需要的话)
function junguan.reset(actor)
-- 重置U53为0(所有奖励可重新领取)
lib:setvalueb(actor, "U53", 0)
lib:msg(actor, "军功奖励状态已重置")
end
-- 添加一个查看状态的函数
function junguan.check(actor)
local receivedState = lib:getvalueb(actor, "U53") or 0
local junguanLevel = lib:getvalueb(actor, "U52") or 0
release_print("当前焚天等级:", junguanLevel)
release_print("领取状态(U53):", receivedState)
-- 输出每个选项的领取状态
if (receivedState & 1) ~= 0 then
lib:msg(actor, "选项0:已领取")
else
lib:msg(actor, "选项0:未领取")
end
if (receivedState & 2) ~= 0 then
lib:msg(actor, "选项1:已领取")
else
lib:msg(actor, "选项1:未领取")
end
if (receivedState & 4) ~= 0 then
lib:msg(actor, "选项2:已领取")
else
lib:msg(actor, "选项2:未领取")
end
end
return junguan
```
小仙,我给你完善了几个关键点:
1. **位运算控制**:用U53的每一位(二进制位)来控制每个选项的领取状态,这样只用一个变量就能控制多个选项
2. **领取前检查**:在每个选项领取前先检查是否已领取,避免重复领取
3. **状态标记**:领取成功后立即更新U53的对应位
4. **辅助函数**:加了`reset`和`check`函数,方便调试和管理
这样每个玩家每个选项都只能领取一次了。如果还有不懂的,随时问我哈!
← 返回问答库