是的,可以通过物品唯一ID来显示装备,并将装备的附加属性更新到前端。
以下是完整的实现代码:
```lua
-- 1. 获取装备数据(通过唯一ID MakeIndex)
local makeIndex = 10001 -- 示例:物品唯一ID
local equipData = SL:GetMetaValue("EQUIP_DATA_BY_MAKEINDEX", makeIndex) or {}
-- 2. 创建父节点
local parent = GUI:Win_Create("GMMain", 0, 0, 0, 0, false, false, true, false, false, false, 1)
-- 3. 创建ItemShow显示装备
local goodsItem = GUI:ItemShow_Create(parent, "good_item", 100, 100, {
index = 1, -- 显示索引
itemData = equipData -- 装备数据(包含MakeIndex等)
})
-- 4. 设置锚点居中
GUI:setAnchorPoint(goodsItem, 0.5, 0.5)
-- 5. 获取按钮图标并禁用触摸
local buttonIcon = goodsItem:GetButtonIcon()
GUI:setTouchEnabled(buttonIcon, false)
-- 6. 获取并显示装备附加属性
local attrShow = {}
if equipData.ExAbil and equipData.ExAbil.abilex then
-- 解析附加属性字符串(自定义函数,根据实际需求实现)
local function parseExAddAttr(abilexStr)
local attList = {}
if not abilexStr then return attList end
-- 这里需要根据实际的属性格式进行解析
-- 示例:假设属性格式为 "1:100|2:200"
local attrPairs = string.split(abilexStr, "|")
for _, pair in ipairs(attrPairs) do
local data = string.split(pair, ":")
if #data >= 2 then
table.insert(attList, {
id = tonumber(data[1]),
value = tonumber(data[2])
})
end
end
return attList
end
-- 解析附加属性
local exAddAttr = parseExAddAttr(equipData.ExAbil.abilex)
-- 获取属性显示数据
if exAddAttr and next(exAddAttr) then
local stringAtt = GUIFunction:GetAttDataShow(exAddAttr, nil, true)
for id, v in pairs(stringAtt) do
v.id = id
local originId = id
local attConfig = SL:GetMetaValue("ATTR_CONFIG", originId)
v.sort = attConfig and attConfig.sort or originId + 1000
v.excolor = attConfig.excolor
table.insert(attrShow, v)
end
-- 按sort排序
table.sort(attrShow, function(a, b)
return a.sort < b.sort
end)
end
end
-- 7. 创建属性显示文本
local attrY = 150 -- 属性显示起始Y坐标
for i, attr in ipairs(attrShow) do
local attrText = GUI:Text_Create(parent, "attr_text_" .. i, 50, attrY, 14, "#ffffff",
attr.name .. ": " .. attr.value)
attrY = attrY + 20 -- 每行间隔20像素
end
-- 8. 添加点击事件查看详细属性
GUI:addOnClickEvent(buttonIcon, function()
-- 可以在这里打开装备详情面板
SL:print("点击查看装备详细属性")
-- 显示所有属性信息
local attrInfo = "装备附加属性:\n"
for _, attr in ipairs(attrShow) do
attrInfo = attrInfo .. attr.name .. ": " .. attr.value .. "\n"
end
SL:print(attrInfo)
end)
```
关键说明:
1. **获取装备数据**:`SL:GetMetaValue("EQUIP_DATA_BY_MAKEINDEX", makeIndex)` 通过物品唯一ID获取装备完整数据
2. **ItemShow创建**:需要传入包含`itemData`的table参数,其中`MakeIndex`是必须的
3. **附加属性解析**:
- `equipData.ExAbil.abilex` 存储附加属性字符串
- `parseExAddAttr()` 函数用于解析属性字符串(需要根据实际格式调整)
- `GUIFunction:GetAttDataShow()` 将属性数据转换为可显示的格式
4. **属性排序**:根据属性配置中的`sort`字段进行排序,确保显示顺序一致
5. **属性显示**:使用`GUI:Text_Create()`创建文本控件显示每个属性
注意:
- 确保`MakeIndex`对应的装备数据确实存在
- 属性解析函数`parseExAddAttr()`需要根据实际的属性字符串格式进行调整
- 可以通过点击ItemShow查看详细的属性信息