2025-06-04 05:12:01 +08:00

280 lines
9.7 KiB
Plaintext

autoImport("TeamPwsMemberCell")
autoImport("TeamPwsRankPopUp")
TeamPwsView = class("TeamPwsView", SubView)
local teamPwsView_Path = ResourcePathHelper.UIView("TeamPwsView");
TeamPwsView.TexUp = "pvp_bg_06"
TeamPwsView.TexSeason = "pvp_icon_season_1"
local T_PVP_TYPE
function TeamPwsView:Init()
T_PVP_TYPE = PvpProxy.Type.TeamPws
self:FindObjs()
self:AddBtnEvts()
self:AddViewEvts()
self:InitShow()
end
function TeamPwsView:FindObjs()
self:LoadSubView()
local gridMember = self:FindComponent("memberGrid", UIGrid, self.objRoot)
self.listMember = UIGridListCtrl.new(gridMember, TeamPwsMemberCell, "TeamPwsMemberCell")
self.labFightCountInfo = self:FindComponent("labFightCountInfo", UILabel, self.objRoot)
self.objMyLevel = self:FindGO("sprLabMyLevel", self.objRoot)
self.labMyScore = self:FindComponent("labMyScore", UILabel, self.objRoot)
self.labTeamScore = self:FindComponent("labTeamScore", UILabel, self.objRoot)
self.objLowLevel = self:FindGO("labLowLevel", self.objRoot)
self.objEmptyTeam = self:FindGO("EmptyTeam", self.objRoot)
self.objBtnMatch = self:FindGO("MatchBtn", self.objRoot)
self.colBtnMatch = self.objBtnMatch:GetComponent(BoxCollider)
self.sprBtnMatch = self:FindComponent("BG", UISprite, self.objBtnMatch)
self.objEnableMatchBtnLabel = self:FindGO("enableLabel", self.objBtnMatch)
self.objDisableMatchBtnLabel = self:FindGO("disableLabel", self.objBtnMatch)
end
function TeamPwsView:LoadSubView()
self.objRoot = self:FindGO("TeamPwsView")
local obj = self:LoadPreferb_ByFullPath(teamPwsView_Path, self.objRoot, true);
obj.name = "TeamPwsView";
end
function TeamPwsView:AddBtnEvts()
self:AddClickEvent(self:FindGO("RuleBtn", self.objRoot), function() self:ClickButtonRule() end)
self:AddClickEvent(self:FindGO("RankBtn", self.objRoot), function() self:ClickButtonRank() end)
self:AddClickEvent(self.objBtnMatch, function() self:ClickButtonMatch() end)
end
function TeamPwsView:AddViewEvts()
self:AddListenEvt(LoadSceneEvent.FinishLoad, self.UpdateMatchButton);
self:AddListenEvt(ServiceEvent.MatchCCmdNtfMatchInfoCCmd, self.UpdateMatchButton)
self:AddListenEvt(ServiceEvent.MatchCCmdQueryTeamPwsTeamInfoMatchCCmd, self.HandleQueryTeamPwsTeamInfo)
self:AddListenEvt(ServiceEvent.SessionTeamEnterTeam, self.UpdateMemberInfosAndScore)
self:AddListenEvt(TeamEvent.MemberEnterTeam, self.UpdateMemberInfosAndScore)
self:AddListenEvt(ServiceEvent.SessionTeamMemberDataUpdate, self.UpdateMemberInfosOnly)
self:AddListenEvt(TeamEvent.MemberExitTeam, self.UpdateMemberInfosOnly)
self:AddListenEvt(ServiceEvent.SessionTeamExitTeam, self.UpdateMemberInfosOnly)
self.listMember:AddEventListener(MouseEvent.MouseClick, self.ClickTeamMember, self);
end
function TeamPwsView:InitShow()
PictureManager.Instance:SetPVP(TeamPwsView.TexUp, self:FindComponent("upTexture", UITexture, self.objRoot))
local texSeason = self:FindComponent("texSeason", UITexture, self.objRoot)
PictureManager.Instance:SetPVP(TeamPwsView.TexSeason, texSeason)
texSeason:MakePixelPerfect()
self.sprLabMyLevel = SpriteLabel.new(self.objMyLevel, nil, 42, 35, true)
self:UpdateView()
end
function TeamPwsView:UpdateMatchButton()
local btnMatchEnable = true
local matchStatus = PvpProxy.Instance:GetMatchState(T_PVP_TYPE)
local freeBattleMatchStatus = PvpProxy.Instance:GetMatchState(PvpProxy.Type.FreeBattle)
if (matchStatus and matchStatus.ismatch or freeBattleMatchStatus and freeBattleMatchStatus.ismatch or
Game.MapManager:IsPVPMode_TeamPws()) then
btnMatchEnable = false
end
self.colBtnMatch.enabled = btnMatchEnable
if (btnMatchEnable) then
self:SetTextureWhite(self.sprBtnMatch)
else
self:SetTextureGrey(self.sprBtnMatch)
end
self.objEnableMatchBtnLabel:SetActive(btnMatchEnable)
self.objDisableMatchBtnLabel:SetActive(not btnMatchEnable)
end
function TeamPwsView:UpdateMemberInfosAndScore()
self:UpdateMemberInfos(true)
end
function TeamPwsView:UpdateMemberInfosOnly()
self:UpdateMemberInfos(false)
end
function TeamPwsView:UpdateMemberInfos(refreshScore)
if (TeamProxy.Instance:IHaveTeam()) then
self.objEmptyTeam:SetActive(false)
local isLowLevel = false
local memberlst = TeamProxy.Instance.myTeam:GetPlayerMemberList(true, true)
local member
for i = 1, #memberlst do
member = memberlst[i]
if (member.baselv < GameConfig.PvpTeamRaid.RequireLv) then
isLowLevel = true
break
end
self.labTeamScore.gameObject:SetActive(not isLowLevel)
self.objLowLevel:SetActive(isLowLevel)
end
self.listMember:ResetDatas(memberlst)
for i = #memberlst + 1, GameConfig.Team.maxmember do
self.listMember:AddCell(MyselfTeamData.EMPTY_STATE, i)
end
self.listMember:Layout()
self:UpdateTeamScoreInfo()
if (refreshScore) then
ServiceMatchCCmdProxy.Instance:CallQueryTeamPwsTeamInfoMatchCCmd()
end
else
self.listMember:RemoveAll()
self.objEmptyTeam:SetActive(true)
self.labTeamScore.gameObject:SetActive(false)
self.objLowLevel:SetActive(Game.Myself.data.userdata:Get(UDEnum.ROLELEVEL) < GameConfig.PvpTeamRaid.RequireLv)
end
end
function TeamPwsView:HandleQueryTeamPwsTeamInfo(note)
self.teamInfoData = note.body
self:UpdateTeamScoreInfo()
end
function TeamPwsView:UpdateTeamScoreInfo()
if (not self.teamInfoData) then return end
local datas = self.teamInfoData.userinfos
local myRank = self.teamInfoData.myrank
local allScore, memberNum = 0, 0
local myID = Game.Myself.data.id
local cells = self.listMember:GetCells()
local data, cell
for i = 1, #datas do
data = datas[i]
if (data.charid == myID) then
self.sprLabMyLevel:Reset()
if (data.erank ~= MatchCCmd_pb.ETEAMPWSRANK_NONE) then
local iconName = string.format("ui_teampvp_lv%s", data.erank)
local myLevelInfo = string.format(ZhString.TeamPws_MyLevel, string.format("{uiicon=%s}", iconName))
if (myRank and 0 ~= myRank) then
myLevelInfo = string.format("%s %s", myLevelInfo, myRank)
end
self.sprLabMyLevel:SetText(myLevelInfo, true)
else
self.sprLabMyLevel:SetText(string.format(ZhString.TeamPws_MyLevel, myRank and myRank ~= 0 and myRank or "-"), true)
end
self.labMyScore.text = string.format(ZhString.TeamPws_MyScore, data.score)
if (not TeamProxy.Instance:IHaveTeam()) then return end
end
for j = 1, #cells do
cell = cells[j]
if (data.charid == cell.charID) then
allScore = allScore + data.score
memberNum = memberNum + 1
cell:SetScore(data)
break
end
end
end
self.labTeamScore.text = string.format(ZhString.TeamPws_TeamScore, memberNum > 0 and math.floor(allScore / memberNum) or 0)
end
function TeamPwsView:ClickButtonRule()
local panelId = PanelConfig.TeamPwsView.id
local Desc = Table_Help[panelId] and Table_Help[panelId].Desc or ZhString.Help_RuleDes
TipsView.Me():ShowGeneralHelp(Desc)
end
function TeamPwsView:ClickButtonRank()
GameFacade.Instance:sendNotification(UIEvent.JumpPanel, {view = PanelConfig.TeamPwsRankPopUp})
end
function TeamPwsView:ClickButtonMatch()
if (self.disableClick) then return end
local teamPwsMatchStatus = PvpProxy.Instance:GetMatchState(T_PVP_TYPE)
if (teamPwsMatchStatus and teamPwsMatchStatus.ismatch) then
MsgManager.ShowMsgByID(25917) -- 已經開始匹配
return
end
if (not self.haveChance) then
MsgManager.ShowMsgByID(25906)
end
if(TeamProxy.Instance:IHaveTeam())then
if (not TeamProxy.Instance:CheckImTheLeader()) then
MsgManager.ShowMsgByID(25901)
return
end
local memberlst = TeamProxy.Instance.myTeam:GetPlayerMemberList(true, true)
local myZoneID = MyselfProxy.Instance:GetZoneId()
local member
for i = 1, #memberlst do
member = memberlst[i]
if (member:IsOffline() or member.zoneid ~= myZoneID) then
MsgManager.ShowMsgByID(25903)
return
end
if (member.baselv < GameConfig.PvpTeamRaid.RequireLv) then
MsgManager.ShowMsgByID(25900)
return
end
end
if (#memberlst < GameConfig.Team.maxmember) then
MsgManager.ConfirmMsgByID(25904, function() self:CallMatch() end, nil)
return
end
else
MsgManager.ShowMsgByID(Game.Myself.data.userdata:Get(UDEnum.ROLELEVEL) < GameConfig.PvpTeamRaid.RequireLv and 25900 or 25924)
return
end
self:CallMatch()
end
function TeamPwsView:CallMatch()
if (self.disableClick) then return end
ServiceMatchCCmdProxy.Instance:CallJoinRoomCCmd(T_PVP_TYPE)
self.disableClick = true
self.ltDisableClick = LeanTween.delayedCall(3, function()
self.disableClick = false
self.ltDisableClick = nil
end)
end
function TeamPwsView:UpdateView()
local teamPwsCount = MyselfProxy.Instance:getVarValueByType(Var_pb.EVARTYPE_TEAMPWS_COUNT) or 0
self.labFightCountInfo.text = string.format(ZhString.TeamPws_FightCount, teamPwsCount, GameConfig.teamPVP.Maxtime)
self.haveChance = teamPwsCount < GameConfig.teamPVP.Maxtime
self:UpdateMatchButton()
self:UpdateMemberInfosAndScore()
end
function TeamPwsView:ClickTeamMember(cellCtl)
local memberData = cellCtl.data
if (cellCtl == self.curCell or cellCtl.charID == Game.Myself.data.id or memberData.cat and memberData.cat ~= 0) then
FunctionPlayerTip.Me():CloseTip()
self.curCell = nil
return
end
self.curCell = cellCtl
local playerTip = FunctionPlayerTip.Me():GetPlayerTip(cellCtl.headIcon.frameSp, NGUIUtil.AnchorSide.TopRight, {-70, 14})
local playerData = PlayerTipData.new()
playerData:SetByTeamMemberData(memberData)
local funckeys = FunctionPlayerTip.Me():GetPlayerFunckey(memberData.id)
playerTip:SetData({playerData = playerData, funckeys = funckeys})
playerTip:AddIgnoreBound(cellCtl.headIcon.gameObject)
playerTip.closecallback = function() self.curCell = nil end
end
function TeamPwsView:OnEnter()
TeamPwsView.super.OnEnter(self);
end
function TeamPwsView:OnExit()
PictureManager.Instance:UnLoadPVP()
if (self.sprLabMyLevel) then self.sprLabMyLevel:Destroy() end
if (self.ltDisableClick) then
self.ltDisableClick:cancel()
self.ltDisableClick = nil
end
TeamPwsView.super.OnExit(self);
end