`ItemTips.ParseExAddAttr(attr, needAttrList)` 是浮生梦老师前端课程中用于解析装备附加属性字符串的一个函数。
**函数定义:**
```lua
function ItemTips.ParseExAddAttr(attr, needAttrList)
```
**参数说明:**
- `attr`: 字符串类型,装备附加属性数据(格式如:"1=50,2=30,3=100")
- `needAttrList`: 布尔值,控制返回的数据格式
**主要功能:**
1. **属性字符串解析**:将"id=value,id=value"格式的字符串转换为属性表
2. **对齐系数处理**:根据窗口模式获取属性对齐系数
3. **两种返回模式**:
- `needAttrList=true`:返回原始属性列表 `{{id=1, value=50}, {id=2, value=30}}`
- `needAttrList=false/nil`:返回格式化后的显示数据
**内部处理流程:**
```lua
-- 1. 获取对齐系数
local attrAlignment = SL:GetMetaValue("WINPLAYMODE") and
tonumber(SL:GetMetaValue("GAME_DATA", "pc_tips_attr_alignment")) or 0
attrAlignment = math.ceil(attrAlignment / 3)
-- 2. 解析属性字符串
local strList = string.split(attr, ",")
for i, v in pairs(strList) do
local data = string.split(v, "=")
if tonumber(data[1]) and data[2] and tonumber(data[2]) then
table.insert(attList, { id = tonumber(data[1]), value = tonumber(data[2]) })
end
end
-- 3. 根据needAttrList参数返回不同格式
if needAttrList then
return attList -- 返回原始属性列表
else
-- 调用GUIFunction:GetAttDataShow进行格式化显示
local stringAtt = GUIFunction:GetAttDataShow(attList, nil, true)
-- 返回排序后的显示数据
return attrShow
end
```
**使用示例:**
```lua
-- 示例1:获取原始属性列表
local attrStr = "1=50,2=30,3=100"
local rawAttList = ItemTips.ParseExAddAttr(attrStr, true)
-- 返回:{{id=1, value=50}, {id=2, value=30}, {id=3, value=100}}
-- 示例2:获取格式化显示数据(用于tips界面)
local showData = ItemTips.ParseExAddAttr(attrStr)
-- 返回:排序后的属性显示列表,包含name、value、sort等字段
-- 在装备tips中的实际应用
local abilexStr = itemData.ExAbil and itemData.ExAbil.abilex
local exAttrStr = ItemTips.ParseExAddAttr(abilexStr)
if exAttrStr and next(exAttrStr) then
for i, v in ipairs(exAttrStr) do
local rich_att_ex = GUI:RichText_Create(contentPanel, "rich_att_ex_" .. i, 0, 0,
v.str, richWidth, fontSize, "#FFFFFF", vspace)
-- 添加到界面显示
end
end
```
**注意事项:**
1. 该函数主要处理装备的附加属性(ExAbil.abilex字段)
2. 当`needAttrList=true`时,返回的数据可以直接用于属性合并操作
3. 在tips界面中通常使用默认参数(needAttrList=false)获取格式化后的显示数据
这个函数是装备属性显示系统的关键组件,负责将服务器传来的属性字符串转换为前端可用的数据格式。