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:51:28 |
👁️ 阅读: 4
我是lua后端老师!小仙,你希望用U53变量来控制每个奖励只能领取一次对吧?我来帮你完善这个代码。
首先,我们需要在领取每个奖励前检查U53的值,如果已经领取过就提示。这里我假设你用U53的不同位来表示不同的奖励状态,比如:
- 第1位(值1)表示奖励0已领取
- 第2位(值2)表示奖励1已领取
- 第3位(值4)表示奖励2已领取
下面是完整的代码:
```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)
-- 获取已领取状态
local receivedState = lib:getvalueb(actor, "U53") or 0
-- 使用 if...elseif 结构来处理不同的 arg2 选项
if arg2 == 0 then
-- 检查是否已领取过奖励0
if (receivedState & 1) ~= 0 then
lib:msg(actor, "该奖励已领取过!")
return
end
-- 选项0:需要焚天等级 >= 30
if junguanLevel >= 30 then
lib:msg(actor, "领取成功!!!")
giveitem(actor, "魔·丸", 3)
-- 设置已领取状态(第1位)
lib:setvalueb(actor, "U53", receivedState | 1)
else
lib:msg(actor, "你的镇压点数不足!!!")
end
elseif arg2 == 1 then
-- 检查是否已领取过奖励1
if (receivedState & 2) ~= 0 then
lib:msg(actor, "该奖励已领取过!")
return
end
-- 选项1:需要焚天等级 >= 60
if junguanLevel >= 60 then
lib:msg(actor, "领取成功!!!")
giveitem(actor, "隐魔秘宝", 1)
-- 设置已领取状态(第2位)
lib:setvalueb(actor, "U53", receivedState | 2)
else
lib:msg(actor, "你的镇压点数不足!!!")
end
elseif arg2 == 2 then
-- 检查是否已领取过奖励2
if (receivedState & 4) ~= 0 then
lib:msg(actor, "该奖励已领取过!")
return
end
-- 选项2:需要焚天等级 >= 90,并授予称号
if junguanLevel >= 90 then
lib:msg(actor, "领取成功!!!")
confertitle(actor, "深渊先锋") -- 授予称号
-- 设置已领取状态(第3位)
lib:setvalueb(actor, "U53", receivedState | 4)
else
lib:msg(actor, "你的镇压点数不足!!!")
end
-- 可以在这里加一个 else 分支,处理意料之外的 arg2 值
else
lib:msg(actor, "无效的选项")
end
end
return junguan
```
**代码说明:**
1. **位运算控制**:使用位运算来管理多个奖励状态,一个U53变量可以控制最多32个奖励(因为Lua的整数是32位)
2. **检查逻辑**:
- `(receivedState & 1) ~= 0` 检查第1位是否为1(奖励0是否已领)
- `receivedState | 1` 将第1位设置为1
3. **提前返回**:如果已经领取过,直接return结束函数,避免重复判断等级条件
4. **错误处理**:最后加了else分支处理无效选项
小仙,这样每个奖励就只能领取一次啦!如果还有其他奖励要添加,只需要继续使用4、8、16等2的幂次方值作为位标记即可。不懂的可以问浮生梦尊师哦!
我是lua后端老师!小仙,你希望用U53变量来控制每个奖励只能领取一次对吧?我来帮你完善这个代码。
首先,我们需要在领取每个奖励前检查U53的值,如果已经领取过就提示。这里我假设你用U53的不同位来表示不同的奖励状态,比如:
- 第1位(值1)表示奖励0已领取
- 第2位(值2)表示奖励1已领取
- 第3位(值4)表示奖励2已领取
下面是完整的代码:
```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)
-- 获取已领取状态
local receivedState = lib:getvalueb(actor, "U53") or 0
-- 使用 if...elseif 结构来处理不同的 arg2 选项
if arg2 == 0 then
-- 检查是否已领取过奖励0
if (receivedState & 1) ~= 0 then
lib:msg(actor, "该奖励已领取过!")
return
end
-- 选项0:需要焚天等级 >= 30
if junguanLevel >= 30 then
lib:msg(actor, "领取成功!!!")
giveitem(actor, "魔·丸", 3)
-- 设置已领取状态(第1位)
lib:setvalueb(actor, "U53", receivedState | 1)
else
lib:msg(actor, "你的镇压点数不足!!!")
end
elseif arg2 == 1 then
-- 检查是否已领取过奖励1
if (receivedState & 2) ~= 0 then
lib:msg(actor, "该奖励已领取过!")
return
end
-- 选项1:需要焚天等级 >= 60
if junguanLevel >= 60 then
lib:msg(actor, "领取成功!!!")
giveitem(actor, "隐魔秘宝", 1)
-- 设置已领取状态(第2位)
lib:setvalueb(actor, "U53", receivedState | 2)
else
lib:msg(actor, "你的镇压点数不足!!!")
end
elseif arg2 == 2 then
-- 检查是否已领取过奖励2
if (receivedState & 4) ~= 0 then
lib:msg(actor, "该奖励已领取过!")
return
end
-- 选项2:需要焚天等级 >= 90,并授予称号
if junguanLevel >= 90 then
lib:msg(actor, "领取成功!!!")
confertitle(actor, "深渊先锋") -- 授予称号
-- 设置已领取状态(第3位)
lib:setvalueb(actor, "U53", receivedState | 4)
else
lib:msg(actor, "你的镇压点数不足!!!")
end
-- 可以在这里加一个 else 分支,处理意料之外的 arg2 值
else
lib:msg(actor, "无效的选项")
end
end
return junguan
```
**代码说明:**
1. **位运算控制**:使用位运算来管理多个奖励状态,一个U53变量可以控制最多32个奖励(因为Lua的整数是32位)
2. **检查逻辑**:
- `(receivedState & 1) ~= 0` 检查第1位是否为1(奖励0是否已领)
- `receivedState | 1` 将第1位设置为1
3. **提前返回**:如果已经领取过,直接return结束函数,避免重复判断等级条件
4. **错误处理**:最后加了else分支处理无效选项
小仙,这样每个奖励就只能领取一次啦!如果还有其他奖励要添加,只需要继续使用4、8、16等2的幂次方值作为位标记即可。不懂的可以问浮生梦尊师哦!
← 返回问答库