PlayerBaseAtt = {} --角色属性面板模块
-- 基础属性显示字符串数组
PlayerBaseAtt._baseAttributeStr = {
"职 业",
"等 级",
"当前经验",
"升级经验",
}
-- 获取属性值的本地函数
local function getAttValue(key)
local str = ""
if key == 1 then
str = SL:GetMetaValue("JOB_NAME") --获取职业名称
elseif key == 2 then
local level = SL:GetMetaValue("LEVEL") --获取等级
local reinLv = SL:GetMetaValue("RELEVEL") --获取转生等级
if reinLv and reinLv > 0 then
str = string.format("%s转%s级", reinLv, level) --显示转生等级+当前等级
else
str = string.format("%s级", level) --仅显示当前等级
end
elseif key == 3 then
str = SL:GetMetaValue("EXP") --获取当前经验值
elseif key == 4 then
str = SL:GetMetaValue("MAXEXP") --获取升级所需经验值
elseif key == 5 then
str = SL:GetMetaValue("SEX") --获取升级所需经验值
end
return str
end
-- 初始化函数
function PlayerBaseAtt.main()
local parent = GUI:Attach_Parent()
GUI:LoadExport(parent, "player/player_base_attri_node_win32")
PlayerBaseAtt._ui = GUI:ui_delegate(parent)
PlayerBaseAtt._parent = parent
if not PlayerBaseAtt._ui then
return false
end
PlayerBaseAtt._index = 0--添加的属性条编号
PlayerBaseAtt.UpdateBaseAttri()
end
-- 更新属性显示函数
function PlayerBaseAtt.UpdateBaseAttri()
local list = PlayerBaseAtt._ui.ListView_base
GUI:removeAllChildren(list)
for k, v in ipairs(PlayerBaseAtt._baseAttributeStr) do
local listData = {
str = v,
strValue = getAttValue(k)
}
PlayerBaseAtt.CreateAttri(list,listData)
end
-- 2. 更新额外属性
local variableInfo = SL:GetMetaValue("EX_ATTR") --获取额外属性信息
local variableList = string.split(variableInfo, "|") --按|分割属性列表
for i, v in ipairs(variableList) do
local attList = string.split(v, "#") --按#分割单个属性的名称和值
if attList[1] and attList[2] then
local listData = {
str = attList[1],
strValue = attList[2]
}
local cell = PlayerBaseAtt.CreateAttri(list,listData)
if string.find(attList[2], "&<(.-)>&") then
SL:CustomAttrWidgetAdd(attList[2],cell.Text_attValue)--脚本变量额外属性 添加监听更新
end
end
end
-- 3. 更新红点提示相关属性
-- 从游戏数据中获取红点配置信息
local redValue = SL:GetMetaValue("GAME_DATA", "RedPointValue")
-- 将配置按"|"分割成数组
local data = string.split(redValue, "|")
-- 遍历每个红点配置项
for i, v in ipairs(data) do
-- 将每项按"#"分割成名称和值
local temp = string.split(v, "#")
local name = temp[1] -- 红点显示名称
local value = temp[2] -- 红点关联值
if value and name then
local newValue = nil
-- 如果值是数字,使用TITEMCOUNT格式(用于物品数量监听)
if tonumber(value) then
newValue = string.format("&<TITEMCOUNT/%s>&", value)
-- 如果值不是数字,使用REDKEY格式(用于红点状态监听)
else
newValue = string.format("&<REDKEY/%s>&", value)
end
-- 构造列表项数据
local listData = {
str = name, -- 显示名称
strValue = newValue -- 监听值
}
-- 创建属性条目并获取UI引用
local cell = PlayerBaseAtt.CreateAttri(list, listData)
-- 为该属性值添加自定义属性更新监听
SL:CustomAttrWidgetAdd(newValue, cell.Text_attValue)
end
end
end
-- 创建单个属性条目的函数
function PlayerBaseAtt.CreateAttri(parent,data)
PlayerBaseAtt._index = PlayerBaseAtt._index + 1
local widget = GUI:Widget_Create(parent, "Attribute_"..PlayerBaseAtt._index, 0, 0, 272, 22)
GUI:LoadExport(widget, "player/att_show_list_win32")
local ui = GUI:ui_delegate(widget)
if data.str then
GUI:Text_setString(ui.Text_attName,data.str .. ":")
end
GUI:Text_setString(ui.Text_attValue,data.strValue )
return ui
end