--前端开始]]
local npc = {}
npc.CONFIG = {
where = {4,6,8,10,3,5,7,20},
ysname = {"火","冰","雷","风","神圣","暗黑","幻影","破坏","自然","灵魂","暴击","生命"},
up = {
[1] = {need = "元素结晶" ,num = 1 ,info = " 元素结晶*1+10万金币" },
[2] = {need = "%s" ,n
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-03-25 22:58:34 |
👁️ 阅读: 5
根据你的需求,我们需要修改宝石转换的逻辑,让“破坏”、“自然”、“灵魂”这三个宝石可以相互转换,而“暴击”、“生命”这两个宝石不允许转换。
在你的 `npc:HCmain()` 函数中,宝石转换的逻辑在 `for i=1 , 9 do` 循环里的点击事件中。我们需要修改这部分代码,特别是处理 `ysBt` 表的部分。
修改后的逻辑如下:
1. **定义可转换组**:将“破坏”、“自然”、“灵魂”定义为一组,它们之间可以相互转换。
2. **定义不可转换项**:“暴击”、“生命”这两个宝石不允许进行任何转换。
3. **修改过滤逻辑**:在生成转换按钮列表 `ysBt` 时,根据当前选中的宝石类型,应用新的规则。
以下是修改后的代码部分,替换掉原 `npc:HCmain()` 函数中关于生成 `ysBt` 表和后续处理的部分:
```lua
local ysBt = {} -- 初始化可转换的宝石类型列表
local currentGemType = self.CONFIG.ysname[self.index1] -- 当前选中的宝石类型
-- 定义可相互转换的组
local convertibleGroup = {"破坏", "自然", "灵魂"}
-- 定义不允许转换的宝石
local nonConvertible = {"暴击", "生命"}
-- 检查当前选中的宝石是否在“不允许转换”的列表中
local isNonConvertible = false
for _, nc in ipairs(nonConvertible) do
if currentGemType == nc then
isNonConvertible = true
break
end
end
if isNonConvertible then
-- 如果是不允许转换的宝石,清空可转换列表,不显示任何转换按钮
ysBt = {}
-- 可以在这里给个提示
GUI:setText(self.ui.GemName, "当前选择的“"..currentGemType.."”宝石不支持转换")
else
-- 如果是可转换的宝石
if currentGemType == "破坏" or currentGemType == "自然" or currentGemType == "灵魂" then
-- 属于可转换组,则组内其他类型可转换
for _, gem in ipairs(convertibleGroup) do
if gem ~= currentGemType then -- 排除自己
table.insert(ysBt, gem)
end
end
else
-- 其他宝石(火、冰、雷、风、神圣、暗黑、幻影),按原逻辑排除自己
local allOtherTypes = {"火","冰","雷","风","神圣","暗黑","幻影"}
for _, gem in ipairs(allOtherTypes) do
if gem ~= currentGemType then
table.insert(ysBt, gem)
end
end
end
end
-- 更新转换按钮的显示和事件
for i=1 , 7 do -- 假设界面最多预留了7个按钮位置 “ysbt1_1” 到 “ysbt1_7”
if self.ui["ysbt1_"..i] then
if ysBt[i] then
-- 有可转换的类型,设置按钮文本和点击事件
GUI:setText(self.ui["ysbt1_"..i], ysBt[i])
GUI:setVisible(self.ui["ysbt1_"..i], true) -- 确保按钮可见
GUI:onClick(self.ui["ysbt1_"..i], function()
self.yuansu = ysBt[i]
SL:sendServer(1237, 4, 0, 0, self.yuansu.."|"..str)
end)
else
-- 没有更多的可转换类型,隐藏多余的按钮
GUI:setVisible(self.ui["ysbt1_"..i], false)
GUI:setText(self.ui["ysbt1_"..i], "") -- 清空文本
-- 移除之前可能绑定的事件,避免误触发
-- 注意:996引擎可能没有直接的移除事件函数,这里设置一个空函数覆盖
GUI:onClick(self.ui["ysbt1_"..i], function() end)
end
end
end
```
**代码逻辑说明:**
1. **初始化与定义**:定义了 `convertibleGroup`(可转换组)和 `nonConvertible`(不可转换项)两个表。
2. **判断当前类型**:检查当前选中的宝石类型(`currentGemType`)是否属于“不可转换”列表。
* 如果是(暴击、生命),则将 `ysBt` 表置空,并提示用户不支持转换。
* 如果不是,则继续判断。
3. **处理可转换组**:如果当前类型属于 `convertibleGroup`(破坏、自然、灵魂),则将组内**除自己外**的其他类型加入 `ysBt` 列表。
4. **处理其他元素石**:如果当前类型是原来的7种元素石(火、冰、雷、风、神圣、暗黑、幻影),则按你原来的逻辑,将这7种中**除自己外**的其他类型加入 `ysBt` 列表。
5. **更新界面按钮**:遍历界面预留的转换按钮(例如 `ysbt1_1` 到 `ysbt1_7`),根据 `ysBt` 列表的内容来设置按钮文本、绑定点击事件或隐藏按钮。
**注意:**
* 这段代码假设你的界面布局中为转换按钮预留了最多7个位置(对应 `ysbt1_1` 到 `ysbt1_7`)。如果你的按钮命名或数量不同,请相应调整循环中的索引和控件名称。
* 代码中使用了 `GUI:setVisible(self.ui["ysbt1_"..i], false)` 来隐藏多余的按钮。确保你的控件支持这个操作。
* 当宝石类型为“暴击”或“生命”时,不仅会隐藏所有转换按钮,还会在 `GemName` 文本控件上给出提示。你可以根据实际UI设计调整提示方式。
这样修改后,系统将严格按照你的要求:“破坏”、“自然”、“灵魂”三者可互转;原来的7种元素石在其内部互转;“暴击”、“生命”不可转换。
← 返回问答库