根据你的需求,需要修改 `updateReceiveButton()` 函数来显示不同的 `ItemShow` 组件。下面是修改后的代码:
```lua
-- 更新领取图片状态
local function updateReceiveButton()
if not moshenyuanli.parent or not moshenyuanli.parent._ui then return end
local ui = moshenyuanli.parent._ui
local var1, var2, var3, var4, var5 = getMinSkillLevel()
-- 获取所有ItemShow组件
local itemShow3 = ui["ItemShow_3"]
local itemShow4 = ui["ItemShow_4"]
local itemShow5 = ui["ItemShow_5"]
local itemShow6 = ui["ItemShow_6"]
if not itemShow3 or not itemShow4 or not itemShow5 or not itemShow6 then
return
end
-- 先隐藏所有ItemShow
GUI:setVisible(itemShow3, false)
GUI:setVisible(itemShow4, false)
GUI:setVisible(itemShow5, false)
GUI:setVisible(itemShow6, false)
-- 检查是否已领取奖励(需要从服务端获取变量)
local received5 = SL:GetMetaValue("SERVER_VALUE", "MOSHEN_REWARD_5") or 0
local received10 = SL:GetMetaValue("SERVER_VALUE", "MOSHEN_REWARD_10") or 0
local received15 = SL:GetMetaValue("SERVER_VALUE", "MOSHEN_REWARD_15") or 0
local received20 = SL:GetMetaValue("SERVER_VALUE", "MOSHEN_REWARD_20") or 0
-- 判断条件
if var1 < 5 and var2 < 5 and var3 < 5 and var4 < 5 and var5 < 5 then
-- 所有原力小于5显示ItemShow_3
GUI:setVisible(itemShow3, true)
elseif var1 >= 5 and var2 >= 5 and var3 >= 5 and var4 >= 5 and var5 >= 5 then
if received5 == 0 then
-- 大于等于5且未领取显示ItemShow_4
GUI:setVisible(itemShow4, true)
else
-- 已领取后显示ItemShow_4(灰色)
GUI:setVisible(itemShow4, true)
-- 可以设置颜色为灰色表示已领取
-- GUI:ItemShow_setColor(itemShow4, 128) -- 注意:这个函数需要确认是否存在
end
elseif var1 < 10 and var2 < 10 and var3 < 10 and var4 < 10 and var5 < 10 then
-- 所有原力小于10显示ItemShow_4
GUI:setVisible(itemShow4, true)
elseif var1 >= 10 and var2 >= 10 and var3 >= 10 and var4 >= 10 and var5 >= 10 then
if received10 == 0 then
-- 大于等于10且未领取显示ItemShow_5
GUI:setVisible(itemShow5, true)
else
-- 已领取后显示ItemShow_5
GUI:setVisible(itemShow5, true)
end
elseif var1 < 15 and var2 < 15 and var3 < 15 and var4 < 15 and var5 < 15 then
-- 所有原力小于15显示ItemShow_5
GUI:setVisible(itemShow5, true)
elseif var1 >= 15 and var2 >= 15 and var3 >= 15 and var4 >= 15 and var5 >= 15 then
if received15 == 0 then
-- 大于等于15且未领取显示ItemShow_6
GUI:setVisible(itemShow6, true)
else
-- 已领取后显示ItemShow_6
GUI:setVisible(itemShow6, true)
end
elseif var1 < 20 and var2 < 20 and var3 < 20 and var4 < 20 and var5 < 20 then
-- 所有原力小于20显示ItemShow_6
GUI:setVisible(itemShow6, true)
elseif var1 >= 20 and var2 >= 20 and var3 >= 20 and var4 >= 20 and var5 >= 20 then
-- 大于等于20显示ItemShow_6
GUI:setVisible(itemShow6, true)
end
end
```
**修改说明:**
1. **条件判断逻辑**:
- 使用 `SL:GetMetaValue("SERVER_VALUE", "MOSHEN_REWARD_X")` 获取服务端奖励领取状态
- 按等级段判断显示哪个 `ItemShow` 组件
2. **显示控制**:
- 使用 `GUI:setVisible(widget, value)` 控制组件显示/隐藏
- 先隐藏所有组件,再根据条件显示对应的
3. **注意事项**:
- 服务端需要设置奖励领取状态变量(如 `MOSHEN_REWARD_5`、`MOSHEN_REWARD_10` 等)
- 领取按钮点击后,服务端需要更新这些变量
- `GUI:ItemShow_setColor()` 函数需要确认是否存在,如果不存在可以用其他方式表示已领取状态
4. **建议优化**:
- 可以添加已领取的视觉反馈(如灰色、打勾等)
- 考虑使用 `GUI:setOpacity()` 设置透明度来表示不同状态
这样修改后,`ItemShow` 组件会根据原力等级和领取状态正确显示。记得在领取按钮的回调中刷新显示状态。