bayuMIR/client/dev/GUILayout/game/FuLiDaTing/ChengZhangJiJinOBJ.lua
2026-06-12 02:32:15 +08:00

266 lines
9.3 KiB
Lua
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

ChengZhangJiJinOBJ = Up_BaseClassOBJ:new()
ChengZhangJiJinOBJ.__cname = "FuLiDaTingOBJ"
ChengZhangJiJinOBJ.cfg = {}
function ChengZhangJiJinOBJ:main(parent, data)
self.cfg = data
GUI:LoadExport(parent, "game/FuLiDaTing/ChengZhangJiJinUI")
self._parent = parent
self.ui = GUI:ui_delegate(parent)
if not self.ui then
return false
end
-- 隐藏导出的 ListView使用 TableView 替代
GUI:setVisible(self.ui.ListView, false)
self.dataList = {}
self:CreateTableView()
---* 绑定事件
self:EventBind()
self:updata()
end
--创建 TableView与导出的 ListView 同位置同尺寸)
function ChengZhangJiJinOBJ:CreateTableView()
-- ListView 原配置: 父=c_bg_img, 位置(12,17), 尺寸 524x264, 方向=1(垂直), 间距=6
-- TableView 不支持 itemsMargin把间距叠加到 cellHei 中68 + 6
-- num=5可视区约 3.5 个 cell留上下缓冲复用池设为 5
self.tableView = GUI:TableView_Create(self.ui.c_bg_img, "TableView", 12, 17, 524, 264, 1, 524, 74, 5)
GUI:setAnchorPoint(self.tableView, 0.00, 0.00)
GUI:TableView_setTableViewCellsNumHandler(self.tableView, function()
return self.dataList and #self.dataList or 0
end)
GUI:TableView_setCellCreateEvent(self.tableView, function(cellParent, idx)
local realIdx = (tonumber(idx) or 0)
local item = self.dataList[realIdx]
if not item then
return
end
self:buildCell(cellParent, item)
end)
end
--根据 cfg 与已领取状态构建 dataList
--排序规则:可领取(红点)置顶 → 普通未领取居中 → 已领取置底
function ChengZhangJiJinOBJ:buildDataList()
local cfg = self.cfg or {}
local Vardata = hk.getkeytbl("HUMAN(STR_成长基金)")
local canGet, normal, done = {}, {}, {}
for i, v in ipairs(cfg) do
if i > 1 then
local open = Vardata and (Vardata[i] or 0) or 0
local item = { idx = i, open = open, v = v }
if open > 0 then
table.insert(done, item)
elseif hk.checkcontion(v.check) then
table.insert(canGet, item)
else
table.insert(normal, item)
end
end
end
self.dataList = {}
for _, it in ipairs(canGet) do table.insert(self.dataList, it) end
for _, it in ipairs(normal) do table.insert(self.dataList, it) end
for _, it in ipairs(done) do table.insert(self.dataList, it) end
end
function ChengZhangJiJinOBJ:updata()
local cfg = self.cfg
self.drop = cfg[1].gives
self:setDropShow(1, 10)
local tequan_open = tonumber(SL:Get_SERVER_VALUE("{8}")) or 0
if tequan_open > 0 then
GUI:setTouchEnabled(self.ui.up_btn, false)
GUI:setVisible(self.ui.open_img, true)
else
GUI:setVisible(self.ui.open_img, false)
GUI:setTouchEnabled(self.ui.up_btn, true)
GUI:addOnClickEvent(self.ui.up_btn, function()
ssrMessage:SubLink("FuLiDaTingOBJ_czjjbuy")
-- SL:RequestPay(-1, 13, 288, 13)
end)
---* 红点
if tonumber(SL:Get_MONEY(2) or 0) >= 2880 then
RedDotMgr.attachDot(self.ui.up_btn, { x = 120, y = 40 })
end
end
self:buildDataList()
if self.tableView then
GUI:TableView_reloadData(self.tableView)
end
end
--领取状态变化:刷新 open 状态并把已领取的项移到末尾
function ChengZhangJiJinOBJ:setsort()
if not self.dataList then
return
end
local Vardata = hk.getkeytbl("HUMAN(STR_成长基金)")
-- 同步 open 状态
for _, item in ipairs(self.dataList) do
item.open = Vardata and (Vardata[item.idx] or 0) or 0
end
-- 三档排序:可领取(红点)置顶 → 普通未领取居中 → 已领取置底
local canGet, normal, done = {}, {}, {}
for _, item in ipairs(self.dataList) do
if item.open > 0 then
table.insert(done, item)
elseif hk.checkcontion(item.v.check) then
table.insert(canGet, item)
else
table.insert(normal, item)
end
end
self.dataList = {}
for _, it in ipairs(canGet) do table.insert(self.dataList, it) end
for _, it in ipairs(normal) do table.insert(self.dataList, it) end
for _, it in ipairs(done) do table.insert(self.dataList, it) end
if self.tableView then
-- 领取后排序变化时使用 reloadDataEx 保持滚动位置
GUI:TableView_reloadDataEx(self.tableView)
end
end
--在 TableView cell 父节点内构建一行 UI
function ChengZhangJiJinOBJ:buildCell(cellParent, item)
-- TableView 是虚拟化加载cellParent 会被复用,必须先清空旧子节点
GUI:removeAllChildren(cellParent)
local i = item.idx
local v = item.v
local open = item.open
local bg_id = string.find(v.check[1][1], "等级", 1, true) ~= nil and "res/custom/01/3/7.png" or "res/custom/01/3/3.png"
-- y=3 让 cell 上下各留 3 像素cellHei=74, 内容高=68
local list_bg = GUI:Image_Create(cellParent, "list_bg_", 0, 3, bg_id)
local check_text = string.find(v.check[1][1], "等级", 1, true) ~= nil and v.check[1][2] or v.check[1][3]
local list_check_text = GUI:Text_Create(list_bg, "list_check_text", 100, 36, 16, "#00ff00", check_text)
GUI:setAnchorPoint(list_check_text, 0.50, 0.50)
GUI:Text_enableOutline(list_check_text, "#000000", 2)
local list_gives_Layout = GUI:Layout_Create(list_bg, "list_gives_Layout", 170, 0, 195, 68, false)
for gives_id, give_info in ipairs(v.gives or {}) do
local list_give_bg = GUI:Image_Create(list_gives_Layout, "list_give_bg_" .. gives_id, 0, 0, "res/custom/02/9.png")
GUI:Win_SetParam(list_give_bg, gives_id)
local list_give_item = GUI:ItemShow_Create(list_give_bg, "list_give_item_" .. gives_id, 29.00, 29.00, { index = SL:GetMetaValue("ITEM_INDEX_BY_NAME", give_info[1]), count = give_info[2], bgVisible = false, look = true })
GUI:setAnchorPoint(list_give_item, 0.50, 0.50)
end
GUI:UserUILayout(list_gives_Layout, {
dir = 2,
addDir = 2,
interval = 1,
gap = { x = 1 },
sortfunc = function(lists)
table.sort(lists, function(a, b)
return GUI:Win_GetParam(a) > GUI:Win_GetParam(b)
end)
end
})
if open > 0 then
local list_open_img = GUI:Image_Create(list_bg, "list_open_img", 470, 34, "res/custom/Label/mark_yilingqu1.png")
GUI:setScale(list_open_img, 0.8)
GUI:setAnchorPoint(list_open_img, 0.50, 0.50)
else
local list_btn = GUI:Button_Create(list_bg, "list_btn", 470, 34, "res/custom/01/3/5.png")
GUI:Button_loadTexturePressed(list_btn, "res/custom/01/3/6.png")
GUI:setAnchorPoint(list_btn, 0.50, 0.50)
GUI:addOnClickEvent(list_btn, function()
ssrMessage:SubLink(MeiriXianGouOBJ.__cname .. "_czjj", { id = i })
end)
---* 红点
if tonumber(SL:GetMetaValue("SERVER_VALUE", "{8}") or 0) > 0 and hk.checkcontion(v.check) then
RedDotMgr.attachDot(list_btn, { x = 45, y = 25 })
end
end
return list_bg
end
function ChengZhangJiJinOBJ:EventBind()
local function ChengZhangJiJinOBJ_Var_Change(data)
if GUI:Win_IsNotNull(self._parent) then
if data.key == "{8}" then
self:updata()
return
end
if data.key == "HUMAN(STR_成长基金)" then
self:setsort()
return
end
end
end
SL:RegisterLUAEvent(LUA_EVENT_SERVER_VALUE_CHANGE, self.__cname, ChengZhangJiJinOBJ_Var_Change)
--关闭窗口
SL:RegisterLUAEvent(LUA_EVENT_CLOSEWIN, self.__cname .. "mrcz", function(widgetName)
self:OnClose(widgetName)
end)
end
--关闭窗口
function ChengZhangJiJinOBJ:OnClose(widgetName)
if widgetName == self.__cname then
self:UnRegisterEvent()
end
end
function ChengZhangJiJinOBJ:UnRegisterEvent()
SL:UnRegisterLUAEvent(LUA_EVENT_SERVER_VALUE_CHANGE, self.__cname)
SL:UnRegisterLUAEvent(LUA_EVENT_CLOSEWIN, self.__cname)
end
--注册到全局红点系统:成长基金有未领取档位 → 福利按钮 7 + 顶部福利图标TopIcon_5都亮
if RedDotMgr and RedDotMgr.register then
RedDotMgr:register("FuLi_ChengZhangJiJin", {
owner = "FuLiDaTingOBJ",
parent = "TopIcon_FuLi",
target = function()
return FuLiDaTingOBJ and FuLiDaTingOBJ.ui and FuLiDaTingOBJ.ui.class_btn_7
end,
offset = { x = 105, y = 35 },
watchKeys = { "{8}", "HUMAN(STR_成长基金)" },
watchLevel = true,
check = function()
if tonumber(SL:GetMetaValue("SERVER_VALUE", "{8}") or 0) == 0 then
return false
end
if SL:Get_RELEVEL() <= 3 then
return false
end
local cfg = FuLiDaTingOBJ and FuLiDaTingOBJ.cfg and FuLiDaTingOBJ.cfg[7]
if not cfg then
return false
end
local Var = hk.getkeytbl("HUMAN(STR_成长基金)")
for i, v in ipairs(cfg) do
if i > 1 and hk.checkcontion(v.check) and not (Var and Var[i]) then
return true
end
end
return false
end,
})
end
return ChengZhangJiJinOBJ