NiuMaZanZhuOBJ = {} -- 定义一个全局对象 NiuMaZanZhuOBJ
NiuMaZanZhuOBJ.__cname = "NiuMaZanZhuOBJ" -- 设置对象的类名
--NiuMaZanZhuOBJ.config = ssrRequireCsvCfg("cfg_NiuMaZanZhu") -- 注释掉的配置加载,可能从其他地方加载或未使用

-------------------------------↓↓↓ UI操作 ↓↓↓--------------------------------------- -- UI操作相关的函数区域标记

-- UI主入口函数,用于创建和初始化UI窗口
-- objcfg: UI配置对象,包含NPCID和UI_PATH等信息
function NiuMaZanZhuOBJ:main(objcfg)
    -- 创建一个UI窗口
    -- 参数依次为:窗口名称, x, y, 宽度, 高度, 是否模态, 是否可拖拽, 是否显示背景, 是否可关闭, 是否有标题栏, NPCID
    local parent = GUI:Win_Create(self.__cname, 0, 0, 0, 0, false, false, true, true, true, objcfg.NPCID)
    GUI:LoadExport(parent, objcfg.UI_PATH) -- 加载UI导出文件(布局和控件)到父窗口
    self._parent = parent -- 存储父窗口对象
    self.ui = GUI:ui_delegate(parent) -- 创建UI代理,方便通过self.ui访问UI控件
    ssrSetWidgetPosition(parent, self.ui.ImageBG, 2,0) -- 设置背景图片的位置
    -- 为背景图片添加点击事件,用于防止点击穿透到下层UI
    GUI:addOnClickEvent(self.ui.ImageBG, function()
        --ssrPrint("我是防点击穿透") -- 调试打印,注释掉了
    end)
    GUI:setTouchEnabled(self.ui.CloseLayout,true) -- 启用关闭布局的触摸事件
    -- 为关闭布局添加点击事件,点击时关闭窗口
    GUI:addOnClickEvent(self.ui.CloseLayout, function()
        GUI:Win_Close(self._parent) -- 关闭当前窗口
    end)

    -- 为关闭按钮添加点击事件,点击时关闭窗口
    GUI:addOnClickEvent(self.ui.CloseButton, function()
        GUI:Win_Close(self._parent) -- 关闭当前窗口
    end)
    -- 播放窗口打开时的缩放动画
    GUI:Timeline_Window1(self._parent)

    self:UpdateUI() -- 调用UpdateUI函数更新UI显示

    -- 为Button_1添加点击事件,点击时发送网络消息 NiuMaZanZhu_Request,参数为1
    GUI:addOnClickEvent(self.ui.Button_1,function()
        ssrMessage:sendmsg(ssrNetMsgCfg.NiuMaZanZhu_Request, 1)
    end)
    -- 为Button_2添加点击事件,点击时发送网络消息 NiuMaZanZhu_Request,参数为2
    GUI:addOnClickEvent(self.ui.Button_2,function()
        ssrMessage:sendmsg(ssrNetMsgCfg.NiuMaZanZhu_Request, 2)
    end)
    -- 为Button_3添加点击事件,点击时发送网络消息 NiuMaZanZhu_Request,参数为3
    GUI:addOnClickEvent(self.ui.Button_3,function()
        ssrMessage:sendmsg(ssrNetMsgCfg.NiuMaZanZhu_Request, 3)
    end)
end

-- 更新UI显示状态的函数
function NiuMaZanZhuOBJ:UpdateUI()
    -- 默认隐藏所有按钮和图片
    GUI:setVisible(self.ui.Button_1,false)
    GUI:setVisible(self.ui.Button_2,false)
    GUI:setVisible(self.ui.Button_3,false)
    GUI:setVisible(self.ui.Image_1,false)
    GUI:setVisible(self.ui.Image_2,false)
    GUI:setVisible(self.ui.Image_3,false)

    -- 根据self.data[1]的值来控制按钮和图片的显示
    if self.data[1] == 0 then
        -- 如果data[1]为0,显示所有按钮
        GUI:setVisible(self.ui.Button_1,true)
        GUI:setVisible(self.ui.Button_2,true)
        GUI:setVisible(self.ui.Button_3,true)
    elseif self.data[1] == 1 then
        -- 如果data[1]为1,显示Image_1和Button_2, Button_3
        GUI:setVisible(self.ui.Image_1,true)
        GUI:setVisible(self.ui.Button_2,true)
        GUI:setVisible(self.ui.Button_3,true)
    elseif self.data[1] == 2 then
        -- 如果data[1]为2,显示Image_1, Image_2和Button_3
        GUI:setVisible(self.ui.Image_1,true)
        GUI:setVisible(self.ui.Image_2,true)
        GUI:setVisible(self.ui.Button_3,true)
    elseif self.data[1] == 3 then
        -- 如果data[1]为3,显示所有图片
        GUI:setVisible(self.ui.Image_1,true)
        GUI:setVisible(self.ui.Image_2,true)
        GUI:setVisible(self.ui.Image_3,true)
    end

end

-------------------------------↓↓↓ 网络消息 ↓↓↓--------------------------------------- -- 网络消息处理相关的函数区域标记

-- 处理服务器同步响应消息的函数
-- arg1, arg2, arg3: 消息参数,具体含义需要结合服务器端代码
-- data: 服务器发送的同步数据
function NiuMaZanZhuOBJ:SyncResponse(arg1, arg2, arg3, data)
    SL:Print(data[1]) -- 打印data的第一个元素(调试用)
    self.data = data -- 存储服务器同步的数据
    -- 如果当前窗口存在,则更新UI显示
    if GUI:GetWindow(nil, self.__cname) then
        self:UpdateUI() -- 调用UpdateUI更新UI
    end
end

-- 处理添加红点提示消息的函数
-- arg1, arg2, arg3: 消息参数
-- data: 消息数据
function NiuMaZanZhuOBJ:AddRedPoint(arg1, arg2, arg3, data)
    -- 尝试获取顶层图标节点和特定的图标对象(名称为"111")
    local TopIconNode_look = GUI:GetWindow(MainMiniMap._parent, "TopIconLayout")
    local TopIconNode = GUI:GetWindow(TopIconNode_look, "TopIconNode_1")
    local IconObj = GUI:GetWindow(TopIconNode, "111")
    if IconObj then
        delRedPoint(IconObj) -- 先移除可能存在的红点
        if arg1 == 1 then
            addRedPoint(IconObj, 20, 0) -- 如果arg1为1,则添加红点提示
        end
    end
end

return NiuMaZanZhuOBJ -- 返回NiuMaZanZhuOBJ对象
    local ui = {}
    local _V = function(v) return SL:GetMetaValue(v) end
    local FUNCQUEUE = {}
    local TAGOBJ = {}
    
    function ui.init(parent, __data__, __update__)
    	if __update__ then return ui.update(__data__) end
    	-- Create ImageBG
    	local ImageBG = GUI:Image_Create(parent, "ImageBG", 0.00, 0.00, "res/custom/niumatequan/jm.png")
    	GUI:setAnchorPoint(ImageBG, 0.00, 0.00)
    	GUI:setTouchEnabled(ImageBG, false)
    	GUI:setTag(ImageBG, -1)
    
    	-- Create CloseLayout
    	local CloseLayout = GUI:Layout_Create(ImageBG, "CloseLayout", 865.00, 451.00, 75, 75, false)
    	GUI:setAnchorPoint(CloseLayout, 0.00, 0.00)
    	GUI:setTouchEnabled(CloseLayout, false)
    	GUI:setTag(CloseLayout, -1)
    
    	-- Create CloseButton
    	local CloseButton = GUI:Button_Create(CloseLayout, "CloseButton", 18.00, 13.00, "res/public/1900000510.png")
    	GUI:Button_loadTexturePressed(CloseButton, "res/public/1900000511.png")
    	GUI:Button_loadTextureDisabled(CloseButton, "res/private/gui_edit/Button_Disable.png")
    	GUI:Button_setTitleText(CloseButton, [[]])
    	GUI:Button_setTitleColor(CloseButton, "#ffffff")
    	GUI:Button_setTitleFontSize(CloseButton, 14)
    	GUI:Button_titleEnableOutline(CloseButton, "#000000", 1)
    	GUI:setAnchorPoint(CloseButton, 0.00, 0.00)
    	GUI:setTouchEnabled(CloseButton, true)
    	GUI:setTag(CloseButton, -1)
    
    	-- Create Button_1
    	local Button_1 = GUI:Button_Create(ImageBG, "Button_1", 206.00, 138.00, "res/custom/niumatequan/an1.png")
    	GUI:Button_setTitleText(Button_1, [[]])
    	GUI:Button_setTitleColor(Button_1, "#ffffff")
    	GUI:Button_setTitleFontSize(Button_1, 16)
    	GUI:Button_titleEnableOutline(Button_1, "#000000", 1)
    	GUI:setAnchorPoint(Button_1, 0.00, 0.00)
    	GUI:setTouchEnabled(Button_1, true)
    	GUI:setTag(Button_1, 0)
    
    	-- Create Button_2
    	local Button_2 = GUI:Button_Create(ImageBG, "Button_2", 434.00, 138.00, "res/custom/niumatequan/an2.png")
    	GUI:Button_setTitleText(Button_2, [[]])
    	GUI:Button_setTitleColor(Button_2, "#ffffff")
    	GUI:Button_setTitleFontSize(Button_2, 16)
    	GUI:Button_titleEnableOutline(Button_2, "#000000", 1)
    	GUI:setAnchorPoint(Button_2, 0.00, 0.00)
    	GUI:setTouchEnabled(Button_2, true)
    	GUI:setTag(Button_2, 0)
    
    	-- Create Button_3
    	local Button_3 = GUI:Button_Create(ImageBG, "Button_3", 662.00, 138.00, "res/custom/niumatequan/an3.png")
    	GUI:Button_setTitleText(Button_3, [[]])
    	GUI:Button_setTitleColor(Button_3, "#ffffff")
    	GUI:Button_setTitleFontSize(Button_3, 16)
    	GUI:Button_titleEnableOutline(Button_3, "#000000", 1)
    	GUI:setAnchorPoint(Button_3, 0.00, 0.00)
    	GUI:setTouchEnabled(Button_3, true)
    	GUI:setTag(Button_3, 0)
    
    	-- Create Image_1
    	local Image_1 = GUI:Image_Create(ImageBG, "Image_1", 230.00, 141.00, "res/custom/JuQing/btn0.png")
    	GUI:setAnchorPoint(Image_1, 0.00, 0.00)
    	GUI:setScaleX(Image_1, 0.40)
    	GUI:setScaleY(Image_1, 0.40)
    	GUI:setTouchEnabled(Image_1, false)
    	GUI:setTag(Image_1, 0)
    
    	-- Create Image_2
    	local Image_2 = GUI:Image_Create(ImageBG, "Image_2", 457.00, 141.00, "res/custom/JuQing/btn0.png")
    	GUI:setAnchorPoint(Image_2, 0.00, 0.00)
    	GUI:setScaleX(Image_2, 0.40)
    	GUI:setScaleY(Image_2, 0.40)
    	GUI:setTouchEnabled(Image_2, false)
    	GUI:setTag(Image_2, 0)
    
    	-- Create Image_3
    	local Image_3 = GUI:Image_Create(ImageBG, "Image_3", 685.00, 141.00, "res/custom/JuQing/btn0.png")
    	GUI:setAnchorPoint(Image_3, 0.00, 0.00)
    	GUI:setScaleX(Image_3, 0.40)
    	GUI:setScaleY(Image_3, 0.40)
    	GUI:setTouchEnabled(Image_3, false)
    	GUI:setTag(Image_3, 0)
    
    	ui.update(__data__)
    	return ImageBG
    end
    
    function ui.update(data)
    	for _, func in pairs(FUNCQUEUE) do
    		if func then func(data) end
    	end
    end
    
    return ui
      local NiuMaZanZhu = {} -- 定义一个本地表 NiuMaZanZhu,用于封装赞助相关功能
      -- 定义赞助等级的数据,包含称号和所需的累计充值金额
      local Title_Data  = {{title = "白银赞助",num = 0},{title = "黄金赞助",num = 38},{title = "至尊赞助",num = 68},}
      
      -- 处理玩家请求领取赞助的逻辑
      -- actor: 玩家对象
      -- var: 请求领取的赞助等级索引 (1:白银, 2:黄金, 3:至尊)
      function NiuMaZanZhu.Request(actor, var)
          local LeiChong = getplaydef(actor, VarCfg["U_真实充值"]) -- 获取玩家的真实累计充值金额
          local cfg = Title_Data[var] -- 根据传入的var获取对应的赞助配置
          if not cfg then
              return -- 如果配置不存在,直接返回
          end
          -- 如果玩家已经是至尊赞助,则不能再领取其他赞助(至尊赞助是最高级)
          if checktitle(actor, "至尊赞助") then return end
          -- 检查玩家是否已经领取过当前请求的赞助称号
          if checktitle(actor, cfg.title) then
              Player.sendmsgEx(actor, "提示#251|:#255|你已领取过|" .. cfg.title .. "#249|请勿重复领取...") -- 提示重复领取
              return
          end
          -- 检查玩家的累计充值是否满足领取条件
          if  LeiChong < cfg.num  then
              Player.sendmsgEx(actor, "提示#251|:#255|对不起,你的|累计充值#249|不足|" .. cfg.num .. "#249|领取失败...") -- 提示充值不足
              return
          end
      
          -- 如果玩家已拥有白银赞助,则剥夺白银赞助称号(升级赞助时移除旧称号)
          if checktitle(actor, "白银赞助") then deprivetitle(actor, "白银赞助") end
          -- 如果玩家已拥有黄金赞助,则剥夺黄金赞助称号(升级赞助时移除旧称号)
          if checktitle(actor, "黄金赞助") then deprivetitle(actor, "黄金赞助") end
          confertitle(actor, cfg.title) -- 授予玩家新的赞助称号
          Player.sendmsgEx(actor, "提示#251|:#255|恭喜你,领取|" .. cfg.title .. "#249|成功...") -- 提示领取成功
          NiuMaZanZhu.SyncResponse(actor) -- 同步赞助状态到客户端
      
          -- 处理红点提示逻辑
          if getplaydef(actor, "N$牛马赞助红点") == 1 then -- 如果当前有红点提示
              local flag = 0 -- 默认不显示红点
      
              if var < 3 then -- 如果当前领取的不是最高级赞助(至尊赞助)
                  -- 检查是否满足下一个赞助等级的充值条件
                  if LeiChong >= Title_Data[var+1].num then
                      flag = 1 -- 如果满足,则下一个赞助有红点
                  else
                      flag = 0 -- 不满足,无红点
                  end
              end
      
              if flag == 0 then -- 如果最终判断没有红点
                  setplaydef(actor, "N$牛马赞助红点", flag) -- 清除红点变量
                  Message.sendmsg(actor, ssrNetMsgCfg.NiuMaZanZhu_AddRedPoint, flag, 0, 0, {}) -- 发送消息通知客户端清除红点
              end
          end
      
          -- 如果领取的是至尊赞助(var > 2,即var=3if var > 2 then
              local skill = getskillinfo(actor, 75, 3) -- 检查是否拥有特定技能
              if not skill then
                  addskill(actor, 75, 3) -- 如果没有,则添加该技能
              end
              TopIcon.addico(actor) -- 添加顶部图标(可能与赞助特权相关)
          end
      end
      
      -- 同步赞助状态到客户端
      -- actor: 玩家对象
      -- logindatas: 登录数据(可选,用于登录时批量发送消息)
      function NiuMaZanZhu.SyncResponse(actor, logindatas)
          local TitleNum = 0 -- 初始化赞助等级数字表示
          -- 根据玩家当前拥有的赞助称号设置TitleNum
          if checktitle(actor, "白银赞助") then
              TitleNum = 1
          elseif checktitle(actor, "黄金赞助") then
              TitleNum = 2
          elseif checktitle(actor, "至尊赞助") then
              TitleNum = 3
          end
      
          local _login_data = { ssrNetMsgCfg.NiuMaZanZhu_SyncResponse, 0, 0, 0, {TitleNum}} -- 构造同步消息数据
          if logindatas then
              table.insert(logindatas, _login_data) -- 如果是登录时调用,则插入到登录数据列表中
          else
              Message.sendmsg(actor, ssrNetMsgCfg.NiuMaZanZhu_SyncResponse, 0, 0, 0, {TitleNum}) -- 否则直接发送消息
          end
      end
      
      Message.RegisterNetMsg(ssrNetMsgCfg.NiuMaZanZhu, NiuMaZanZhu) -- 注册牛马赞助相关的网络消息处理
      
      -- 充值结束事件处理函数
      -- actor: 玩家对象
      local function _onRechargeEnd(actor)
          local reveive = getplaydef(actor, "N$牛马赞助红点") -- 获取当前红点状态
          if reveive == 0 then -- 如果当前没有红点提示
              local TitleNum = 0
              -- 再次获取玩家当前赞助等级
              if checktitle(actor, "白银赞助") then
                  TitleNum = 1
              elseif checktitle(actor, "黄金赞助") then
                  TitleNum = 2
              elseif checktitle(actor, "至尊赞助") then
                  TitleNum = 3
              end
      
              local money = getplaydef(actor, VarCfg["U_真实充值"]) -- 获取玩家的真实累计充值
              local flag = 0 -- 默认不显示红点
      
              -- 检查是否可以升级到下一个赞助等级,并且当前没有红点
              if TitleNum < 3 and getplaydef(actor, "N$牛马赞助红点") == 0 then
                  if money >= Title_Data[TitleNum+1].num then -- 如果充值满足下一个等级条件
                      flag = 1 -- 设置红点标志
                  end
              end
      
              if flag > 0 then -- 如果需要显示红点
                  setplaydef(actor, "N$牛马赞助红点", 1) -- 设置红点变量
                  Message.sendmsg(actor, ssrNetMsgCfg.NiuMaZanZhu_AddRedPoint, 1, 0, 0, {}) -- 发送消息通知客户端显示红点
              else
                  setplaydef(actor, "N$牛马赞助红点", 0) -- 清除红点变量
                  Message.sendmsg(actor, ssrNetMsgCfg.NiuMaZanZhu_AddRedPoint, 0, 0, 0, {}) -- 发送消息通知客户端清除红点
              end
          end
      end
      
      GameEvent.add(EventCfg.onRechargeEnd, _onRechargeEnd,NiuMaZanZhu) -- 注册充值结束事件监听
      
      -- 登录触发事件处理函数
      -- actor: 玩家对象
      -- logindatas: 登录数据
      local function _onLoginEnd(actor, logindatas)
          NiuMaZanZhu.SyncResponse(actor, logindatas) -- 登录时同步赞助状态
          
          -- 如果玩家拥有黄金赞助或至尊赞助,检查并添加特定技能
          if checktitle(actor, "黄金赞助") or checktitle(actor, "至尊赞助") then
              local skill = getskillinfo(actor, 75, 3)
              if not skill then
                  addskill(actor, 75, 3)
              end
          end
      
          delaygoto(actor,500,"niumazanzhu_init_redpoint") -- 延迟执行红点初始化函数
      end
      
      -- 红点初始化函数,在延迟后执行
      function niumazanzhu_init_redpoint(actor)
          _onRechargeEnd(actor) -- 调用充值结束事件处理函数来初始化红点状态
      end
      
      GameEvent.add(EventCfg.onLoginEnd, _onLoginEnd, NiuMaZanZhu) -- 注册登录结束事件监听
      
      return NiuMaZanZhu -- 返回NiuMaZanZhu对象
        撰写回复...