---@class KLUnionInfoPanel:UIKmlLuaPanelBase
---@field view KLUnionInfoPanelView
local KLUnionInfoPanel = class(UIKmlLuaPanelBase)
local this =KLUnionInfoPanel
---创建时调用一次
function this:Init()
end
---创建或者刷新界面数据时调用
function this:Refresh()
SL:ReqViewUnionMessage()
SL:ReqUnionMemberDynamicMessage()
GUI:setVisible(self.view.btn_Impeach, false)
GUI:setVisible(self.view.btn_Replace, false)
---放到KLUnionToggleListPanel界面请求,如果没有数据(网络延时等等),重新请求一次
local info = InfoManager.unionElectionInfo.MyUnionInfo
if InfoManager.unionElectionInfo.MyUnionInfo then
self:RES_GET_UNION_INFO(_, info)
else
self.timer = SL:ScheduleOnce(Time.deltaTime,function()
SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_GET_UNION_INFO)
end)
end
end
function this:StopTimer()
if self.timer then
SL:UnSchedule(self.timer)
self.timer = nil
end
end
---注册UI事件和服务器消息
function this:RegistEvents()
SL:RegisterLUAEvent(LUA_EVENT_VIEW_UNION,self.ResViewUnionMessage, self)
SL:RegisterLUAEvent(LUA_EVENT_UNION_MEMBER_DYNAMIC,self.ResUnionMemberDynamicMessage, self)
SL:RegisterLUAEvent(LUA_EVENT_UNION_NAME_VIEW,self.ResUnionNameViewMessage, self)
SL:RegisterLUAEvent(LUA_EVENT_QUIT_UNION,self.ResQuitUnionMessage, self)
SL:RegisterLUAEvent(LUA_EVENT_UNION_MEMBER_CHANGE,self.ResUnionMemberChangeMessage, self)
SL:RegisterLUAEvent(LUA_EVENT_VIEW_UNION_CHANGE,self.ResViewUnionChangeMessage, self)
GUI:AddOnClickEvent(self.view.exitButton, self, self.exitButton)
GUI:AddOnClickEvent(self.view.changeUnionNameBtn, self, self.changeUnionNameBtn)
GUI:AddOnClickEvent(self.view.btn_panel_name_no, self, self.btn_panel_name_no)
GUI:AddOnClickEvent(self.view.btn_panel_name_yes, self, self.btn_panel_name_yes)
GUI:AddOnClickEvent(self.view.btn_3DItem, self, self.btn_3DItem)
GUI:AddOnClickEvent(self.view.CloseButton, self, self.CloseButton)
GUI:AddOnClickEvent(self.view.changeFlagBtn, self, self.changeFlagBtn)
GUI:AddOnClickEvent(self.view.changeAnnoyBtn, self, self.changeAnnoyBtn)
GUI:AddOnClickEvent(self.view.btn_panel_report_yes, self, self.btn_panel_report_yes)
GUI:AddOnClickEvent(self.view.btn_panel_report_no, self, self.btn_panel_report_no)
GUI:AddOnClickEvent(self.view.reportMask, self, self.reportMask)
GUI:AddOnClickEvent(self.view.nameMask, self, self.nameMask)
GUI:AddOnClickEvent(self.view.inexpAddButton, self, self.inexpAddButton)
GUI:AddOnClickEvent(self.view.btn_Impeach, self, self.OnClickBtnImpeach)
GUI:AddOnClickEvent(self.view.btn_Election, self, self.OnClickBtnElection)
GUI:AddOnClickEvent(self.view.btn_Replace, self, self.OnClickBtnReplace)
SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_GET_UNION_INFO, self.RES_GET_UNION_INFO, self)
SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_UNION_LEADER_ON_LINE_STATE, self.RES_GET_UNION_INFO, self)
end
function this:RES_GET_UNION_INFO(id, message)
self.outUnionInfo = message
self:StopCountDownReqUnionInfo()
if tostring(message.leaderid) ~= "0" then
GUI:setVisible(self.view.btn_Election, false)
local myId = SL:GetMetaValue(EMetaVarGetKey.MAIN_ACTOR_ID)
if tonumber(myId) == tonumber(message.leaderid) then
--盟主是自己的时候不显示取代和弹劾
GUI:setVisible(self.view.btn_Replace, false)
GUI:setVisible(self.view.btn_Impeach, false)
return
end
--有盟主显示 弹劾或者取代
---@type cfg_unionLevel_column
local cfg = SL:GetConfig("cfg_unionLevel", tonumber(message.unionlevel), "unionLevel")
local leaderInfo = message.memberinfos[tostring(message.leaderid)]
local now = tonumber(SL:GetMetaValue(EMetaVarGetKey.SERVER_TIME))
local deltaTime = now - tonumber(leaderInfo.quitlinetime)
if deltaTime > cfg.continuousOfflineTime * 60000 and tostring( leaderInfo.online) ~= "true" then
--盟主离线cfg.continuousOfflineTime分钟后,显示取代
GUI:setVisible(self.view.btn_Replace, true)
GUI:setVisible(self.view.btn_Impeach, false)
local endTime = InfoManager.unionElectionInfo:GetReplaceEndTime()
if endTime then
if tonumber(endTime) <= now then
GUI:setVisible(self.view.btn_Replace, false)
end
end
else
GUI:setVisible(self.view.btn_Replace, false)
GUI:setVisible(self.view.btn_Impeach, true)
local delta = cfg.continuousOfflineTime * 60000 - deltaTime
if delta > 0 and tostring(leaderInfo.online) ~= "true" then
--计算盟主的离线时间 当打到取代条件时刷新界面显示取代按钮
self.countDownReq = SL:ScheduleOnce((delta)/1000 + 1, function()
SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_GET_UNION_INFO)
end)
end
end
else
--无盟主状态下显示竞选
GUI:setVisible(self.view.btn_Election, true)
local endTime = InfoManager.unionElectionInfo:GetElectionEndTime()
if endTime then
local now = SL:GetMetaValue(EMetaVarGetKey.SERVER_TIME)
if tonumber(endTime) <= tonumber(now) then
GUI:setVisible(self.view.btn_Election, false)
end
end
GUI:setVisible(self.view.btn_Replace, false)
GUI:setVisible(self.view.btn_Impeach, false)
end
end
function this:StopCountDownReqUnionInfo()
if self.countDownReq then
SL:UnSchedule(self.countDownReq)
end
self.countDownReq = nil
end
--弹劾盟主
function this:OnClickBtnImpeach()
local data = InfoManager.unionElectionInfo:GetCampaignData()
if table.isNullOrEmpty(data) then
if not self.outUnionInfo then
return
end
local onTime = tonumber(self.outUnionInfo.leaderontime)
local nowTime = tonumber(SL:GetMetaValue(EMetaVarGetKey.SERVER_TIME))
local deltaTime = nowTime - onTime
---@type cfg_unionLevel_column
local cfg = SL:GetConfig("cfg_unionLevel", self.unionInfo.unionLevel, "unionLevel")
if deltaTime < cfg.abdicationTime * 60 * 1000 then
SL:MessageTip({id=298})---盟主在位没有超过3天,不能弹劾
return
end
GUI:UIPanel_Open("dev/outui/Union/Panel/KLUnionLeaderOperate/KLUnionLeaderOperatePanel",
_, _, {type = 2, unionLevel = self.unionInfo.unionLevel})
else
SL:onLUAEvent(LUA_EVENT_CHANGE_UNION_FUNCTION, "campaignToggle")
end
end
--竞选盟主
function this:OnClickBtnElection()
local data = InfoManager.unionElectionInfo:GetElectionDataList()
if table.count(data) > 0 then
SL:onLUAEvent(LUA_EVENT_CHANGE_UNION_FUNCTION, "electionToggle")
else
GUI:UIPanel_Open("dev/outui/Union/Panel/KLUnionLeaderOperate/KLUnionLeaderOperatePanel",
_, _, {type = 1, unionLevel = self.unionInfo.unionLevel})
end
end
--取代盟主
function this:OnClickBtnReplace()
local data = InfoManager.unionElectionInfo:GetReplaceDataList()
if table.count(data) > 0 then
SL:onLUAEvent(LUA_EVENT_CHANGE_UNION_FUNCTION, "replaceToggle")
else
if not self.outUnionInfo then
return
end
local onTime = tonumber(self.outUnionInfo.leaderontime)
local nowTime = tonumber(SL:GetMetaValue(EMetaVarGetKey.SERVER_TIME))
local deltaTime = nowTime - onTime
---@type cfg_unionLevel_column
local cfg = SL:GetConfig("cfg_unionLevel", self.unionInfo.unionLevel, "unionLevel")
if deltaTime < cfg.abdicationTime * 60 * 1000 then
SL:TipMessage(SL:GetConfig('cfg_string',298).text, 1, NoticeType.NoticeLeftBottom)--,"盟主在位没有超过3天,不能取代",
return
end
GUI:UIPanel_Open("dev/outui/Union/Panel/KLUnionLeaderOperate/KLUnionLeaderOperatePanel",
_, _, {type = 3, unionLevel = self.unionInfo.unionLevel})
end
end
function this:inexpAddButton()
SL:CommonItemGetPath(nil, 10090001)
end
---@param message UnionProto.ViewUnionRes
function this:ResViewUnionChangeMessage(_, message)
SL:ReqUnionMemberDynamicMessage()
self:ResViewUnionMessage(_, message)
end
function this:nameMask()
--GUI:setVisible(self.view.unionNameModify, false)
self:btn_panel_name_no()
end
function this:reportMask()
--GUI:setVisible(self.view.panel_report, false)
self:btn_panel_report_no()
end
---@param message UnionProto.UnionMemberChangeRes
function this:ResUnionMemberChangeMessage(_, message)
--
--local isBoss = false
--for _, memberInfo in pairs(message.unionMemberInfo) do
-- if memberInfo.memberId == SL:GetMetaValue(EMetaVarGetKey.UID) and memberInfo.position == 1 then
-- isBoss = true
-- end
--end
--if isBoss then
-- GUI:setVisible(self.view.changeUnionNameBtn,true)
-- GUI:setVisible(self.view.changeAnnoyBtn,true)
-- GUI:setVisible(self.view.changeFlagBtn,true)
--else
-- GUI:setVisible(self.view.changeUnionNameBtn,false)
-- GUI:setVisible(self.view.changeAnnoyBtn,false)
-- GUI:setVisible(self.view.changeFlagBtn,false)
--end
end
function this:ResQuitUnionMessage()
self:CloseButton()
end
function this:btn_panel_report_yes()
SL:ReqChangeAnnouncementMessage(GUI:Button_getTitleText(self.view.noticeInput))
GUI:setVisible(self.view.panel_report, false)
end
function this:btn_panel_report_no()
GUI:setVisible(self.view.panel_report, false)
end
function this:changeAnnoyBtn()
GUI:setVisible(self.view.panel_report, true)
GUI:Button_setTitleText(self.view.noticeInput, "")
end
function this:changeFlagBtn()
GUI:UIPanel_Close("dev/ui/Union/Panel/KLUnionMemberList/KLUnionMemberListPanel")
GUI:UIPanel_Open("dev/ui/Union/Panel/KLUnionModifyFlag/KLUnionModifyFlagPanel", nil, nil, {unionInfo=self.unionInfo})
end
function this:CloseButton()
GUI:UIPanel_Close("dev/ui/Union/Panel/KLUnionMemberList/KLUnionMemberListPanel")
GUI:UIPanel_Close("dev/ui/Union/Panel/KLUnionToggleList/KLUnionToggleListPanel")
GUI:UIPanel_Close("dev/ui/Union/Panel/KLUnionInfo/KLUnionInfoPanel")
GUI:UIPanel_Close("dev/ui/Union/Panel/KLUnionModifyFlag/KLUnionModifyFlagPanel")
end
function this:changeUnionNameBtn()
if InfoManager.loranSiegeInfo:GetIsOpen() then
SL:TipMessage(SL:GetConfig("cfg_string",16009).text ,1, NoticeType.NoticeMid)
return
end
--GUI:setVisible(self.view.unionNameModify, true)
GUI:UIPanel_Open("dev/outui/ReName/Panel/KLRoleReName/KLRoleReNamePanel", nil, nil, {title="rename",des="请输入新的战盟名称:",cfgId=60090003})
end
function this:btn_3DItem()
local needItemInfo = string.split(SL:GetConfig('cfg_global', 1600).value,'|')[1]
local needItemInfo1 = string.split(needItemInfo, '#')
local itemId = tonumber(needItemInfo1[1])
SL:OpenTips(nil, itemId)
end
---@param message UnionProto.ChangeUnionNameViewRes
function this:ResUnionNameViewMessage(_, message)
local isChange = message.isChange
GUI:setVisible(self.view.unionNameModify, true)
local needItemInfo = string.split(SL:GetConfig('cfg_global', 1600).value,'|')[1]
local needItemInfo1 = string.split(needItemInfo, '#')
local itemId = tonumber(needItemInfo1[1])
local needCount = tonumber(needItemInfo1[2])
GUI:Item_setItemId(self.view.cost_item, itemId)
GUI:setVisible(self.view.cost_item, true)
if isChange then
GUI:Text_setString(self.view.cost_txt_count, tostring(needCount))
if needCount <= SL:GetBagItemCount(itemId) then
GUI:Text_setTextColor(self.view.cost_txt_count, "#FFFFFF")
else
GUI:Text_setTextColor(self.view.cost_txt_count, "#FF0000")
end
else
GUI:Text_setString(self.view.cost_txt_count, "免费改名")
end
end
function this:btn_panel_name_no()
GUI:setVisible(self.view.unionNameModify, false)
GUI:setVisible(self.view.cost_item, false)
GUI:Button_setTitleText(self.view.warAllianceNameInput, "")
end
function this:btn_panel_name_yes()
SL:ReqChangeUnionNameMessage(GUI:Button_getTitleText(self.view.warAllianceNameInput))
GUI:setVisible(self.view.unionNameModify, false)
GUI:setVisible(self.view.cost_item, false)
end
function this:exitButton()
if InfoManager.loranSiegeInfo:GetIsOpen() then
SL:TipMessage(SL:GetConfig("cfg_string",16007).text ,1, NoticeType.NoticeMid)
return
end
if SL:UnionInfo_IsBoos() then
if SL:UnionInfo_GetAllNum() == 1 then
SL:CommonTipsMessage({stringTblID=239,
showTips = "退出后,该战盟将被解散,所有战盟资源,成长都将被清除!",
callback = function()
SL:ReqQuitUnionMessage()
end,
})
else
SL:ReqQuitUnionMessage()
end
else
SL:CommonTipsMessage({stringTblID=240,
showTips = "是否确定退出战盟",
callback = function()
SL:ReqQuitUnionMessage()
end,
--cancelCallBack = function()
--
--end
})
end
end
function this:Close()
self:StopCountDownReqUnionInfo()
self:StopTimer()
end
---@param message UnionProto.ViewUnionRes
function this:ResViewUnionMessage(_, message)
local unionInfo = message.unionInfo
self.unionInfo = unionInfo
GUI:Text_setString(self.view.unionName, unionInfo.unionName)
GUI:Text_setString(self.view.levelValue, tostring(unionInfo.unionLevel))
if SL:HasConfig('cfg_unionLevel', unionInfo.unionLevel+1, 'unionLevel') then
local nextExp = SL:GetConfig('cfg_unionLevel', unionInfo.unionLevel, 'unionLevel').unionExp
GUI:Text_setString(self.view.inexpValue, unionInfo.unionExp .. "/" .. nextExp)
else
GUI:Text_setString(self.view.inexpValue, tostring(unionInfo.unionExp))
end
--local nextExp = SL:GetConfig('cfg_unionLevel', unionInfo.unionLevel, 'unionLevel').unionExp
--GUI:Text_setString(self.view.inexpValue, unionInfo.unionExp .. "/" .. nextExp)
local maxPeople = SL:GetConfig('cfg_unionLevel', unionInfo.unionLevel, 'unionLevel').playerNumber
GUI:Text_setString(self.view.peopleCountValue, table.count(unionInfo.unionMemberInfo) .. "/" .. maxPeople)
GUI:Text_setString(self.view.inMoneyValue, tostring(unionInfo.unionCapital))
local bossName = this.GetBossName(unionInfo.unionMemberInfo)
GUI:Text_setString(self.view.bossValue, bossName)
GUI:Image_loadTexture(self.view.flag_img, string.format("Texture/log%s.png",unionInfo.unionArmband), "")
GUI:Text_setString(self.view.inUnionAnnoy, unionInfo.announcement)
--GUI:Text_setString(self.view.inUnionEnemy, "无")
if this.GetIsPowerMan(unionInfo.unionMemberInfo) then
GUI:setVisible(self.view.changeUnionNameBtn,true)
GUI:setVisible(self.view.changeAnnoyBtn,true)
GUI:setVisible(self.view.changeFlagBtn,true)
else
GUI:setVisible(self.view.changeUnionNameBtn,false)
GUI:setVisible(self.view.changeAnnoyBtn,false)
GUI:setVisible(self.view.changeFlagBtn,false)
end
end
---@param message UnionProto.UnionMemberDynamic
function this:ResUnionMemberDynamicMessage(_, message)
GUI:Text_setString(self.view.inMemberState, this.GetMemberDynamicText(message.memberDynamic))
end
function this.GetBossName(unionMemberList)
for _, memberInfo in pairs(unionMemberList) do
-- 是盟主或副盟主
if memberInfo.position == 1 then
return memberInfo.name
end
end
return "无"
end
---@param unionMemberList UnionProto.UnionMemberInfo[]
function this.GetIsPowerMan(unionMemberList)
for _, memberInfo in pairs(unionMemberList) do
-- 是盟主或副盟主
if memberInfo.memberId == SL:GetMetaValue(EMetaVarGetKey.UID) and (memberInfo.position == 1 or memberInfo.position == 2) then
return true
end
end
return false
end
-- 拼接成员动态相关
function this.GetMemberDynamicText(dynamicList)
local ret = ""
for _, dynamicInfo in pairs(dynamicList) do
local time = dynamicInfo.time
-- 时间戳转时间
ret = ret .. os.date("%Y-%m-%d.%H:%M:%S", time) .. ".."
-- 修改职位
if dynamicInfo.type == 1 then
local preColor = EUnionPositionToColor[dynamicInfo.memberPosition]
local nowColor = EUnionPositionToColor[dynamicInfo.changePosition]
-- 之前职位文本
ret = ret .. string.format("%s", Misc.TransUnityColorToTableColor(preColor), EUnionPositionToName[dynamicInfo.memberPosition])
-- 名字文本
ret = ret .. string.format("%s", dynamicInfo.memberName) .. '成为了'
-- 改变后的职位文本
ret = ret .. string.format("%s", Misc.TransUnityColorToTableColor(nowColor), EUnionPositionToName[dynamicInfo.changePosition]) .. "\n"
elseif dynamicInfo.type == 2 then
ret = ret .. string.format("%s", dynamicInfo.memberName) .. '加入了战盟' .. "\n"
elseif dynamicInfo.type == 3 then
local color = EUnionPositionToColor[dynamicInfo.memberPosition]
-- 被踢的人的文本
ret = ret .. string.format("%s", dynamicInfo.memberName) .. '被'
-- 踢的人的职位
ret = ret .. string.format("%s", Misc.TransUnityColorToTableColor(color), EUnionPositionToName[dynamicInfo.masterPosition])
ret = ret .. string.format("%s", dynamicInfo.masterName) .. '踢出了战盟' .. "\n"
-- 退出战盟
elseif dynamicInfo.type == 4 then
-- 盟主或副盟主和成员的退出发的字段不一样
if dynamicInfo.memberName ~= nil then
ret = ret .. string.format("%s", dynamicInfo.memberName) .. '退出了战盟' .. "\n"
else
ret = ret .. string.format("%s", dynamicInfo.masterName) .. '退出了战盟' .. "\n"
end
-- 宣战
elseif dynamicInfo.type == 5 then
ret = ret .. string.format("%s", dynamicInfo.masterName) .. '对'
ret = ret .. string.format("%s", dynamicInfo.enemyName) .. '正式发起宣战!' .. "\n"
end
end
return ret
end
return this