| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512 |
- local IdolData = class("IdolData", require("DataBase"))
- local BitUtil = require("BitUtil")
- local PlayerInfoReqLimit = 10
- local PlayerInfoMaxLimit = 50
- local hotValShowLimit = 0
- local ProtocalDataNormal = require("ProtocalDataNormal")
- function IdolData:ctor()
- PlayerInfoMaxLimit = GlobalConfig.Instance:GetConfigIntValue(343) or 50
- hotValShowLimit = GlobalConfig.Instance:GetConfigIntValue(345) or 0
- self.feedbackRP = false
- self.showDataList = {}
- self.idolRankInfo = {}
- self.idolRankLength = 0
- self.idolFansLength = 0
- self.idolFansInfo = {}
- self.fansRewardInfo = {}
- self.RankInfoReqLimit = PlayerInfoMaxLimit
- self.FansInfoReqLimit = PlayerInfoMaxLimit
- self.rankListReqPage = 1
- self.rewardRankListReqPage = 1
- end
- function IdolData:ClearIdolRankInfos()
- self.idolRankInfo = nil
- self.rankList = nil
- self.rankListReqPage = 1
- end
- function IdolData:ClearIdolFansRankInfos()
- self.rewardRankList = nil
- self.fansRewardInfo = nil
- self.idolFansInfo = nil
- self.rewardRankListReqPage = 1
- end
- function IdolData:ClearTempPlayerBirefInfos()
- self.tempPlayerBirefInfos = nil
- end
- function IdolData:InitRewardData(data)
- self.showDataList = self:InitDetailData(data.detail_list,data.vote_list)
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.REFRESH_RANK_MODEL_INFO)
- local rewards = data.day_reward or {}
- local firstState = false
- local secondState = false
- for i = 1, #rewards do
- if rewards[i] == 1 then
- firstState = true
- elseif rewards[i] == 2 then
- secondState = true
- end
- end
- self.TimeList = {{data.first_begin,data.first_end,firstState},{data.second_begin,data.second_end,secondState}}
- self.feedbackRP = data.has_box_reward
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.REFRESH_DAYS_REWARD_INFO)
- end
- function IdolData:InitDetailData(detail_list,vote_list)
- local list = {}
- if detail_list and vote_list then
- local showList = {}
- local uids = {}
- for i = 1, #detail_list do
- if not showList[detail_list[i].uid] then
- showList[detail_list[i].uid] = {}
- end
- local roleBase = detail_list[i].role_base
- local heroData = roleBase.role_data.hero_data
- showList[detail_list[i].uid].roleCfgId = CommonUtil.JobIdToRoleId(heroData.config_id, roleBase.sex)
- showList[detail_list[i].uid].viewData = ProtocalDataNormal.FashionDataToViewData(roleBase.fashion_data)
- local extGoesShowData = {}
- if heroData.skill_equip_slot and heroData.skill_equip_slot.slot_list then
- local curSkillEquipData = heroData.skill_equip_slot.slot_list[1]
- if curSkillEquipData then
- extGoesShowData[Enum.HeroExtGoesShowType.God_Art] = curSkillEquipData.skill_equip_config_id
- end
- end
- showList[detail_list[i].uid].extGoesShowData = extGoesShowData
- showList[detail_list[i].uid].nickName = CommonUtil.GetVaildNickName(roleBase.nick_name)
- table.insert(uids,detail_list[i].uid)
- end
- local selfUid = ManagerContainer.DataMgr.UserData:GetUserId()
- for i = 1, #vote_list do
- if not showList[vote_list[i].uid] then
- showList[vote_list[i].uid] = {}
- end
- showList[vote_list[i].uid].vote_list = vote_list[i]
- if vote_list[i].uid == selfUid then
- ManagerContainer.DataMgr.CompetitionData:SetRankAndScore(vote_list[i])
- end
- end
- for k, v in pairs(showList) do
- table.insert(list,v)
- end
- table.sort(list,function(a, b)
- return a.vote_list.rank < b.vote_list.rank
- end)
- self.isCanSendInfoReq = true
- self:SendIdolInfoReq(Enum.FriendTogglePageType.TempPlayerBirefInfos,uids)
- end
- return list
- end
- function IdolData:OnGetPlayerVoteInfoAck(data)
- if data.error == 0 then
- if data.idol_rank_data and self.VoteInfoUid and data.idol_rank_data.uid == self.VoteInfoUid then
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.REFRESH_SUPPORTTIPSVIEW,data.idol_rank_data)
- end
- end
- end
- function IdolData:ClearVoteInfoUid()
- self.VoteInfoUid = nil
- end
- function IdolData:GetVoteInfoUid()
- return self.VoteInfoUid
- end
- function IdolData:OnSureSupport(logicData) --确认投票
- local num = logicData[1]
- local uid = logicData[2]
- ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_COMPETITION_ON_VOTE_REQ, { ticket_count = num,uid = uid})
- end
- function IdolData:RegisterNetEvents()
- ManagerContainer.LuaEventMgr:RegisterEvent(UIEventNames.IDOL_GET_OTHER_PLAYER_BRIEF_INFO_ACK,self,self.OnIdolPlayerBriefInfoAck)
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_COMPETITION_FANS_DAY_REWARD_ACK, self.OnDayRewardAck,self)
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_COMPETITION_SELF_FANS_INFO_ACK, self.OnSelfFansInfoAck,self)
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_COMPETITION_VOTE_RANK_ACK, self.OnVoteRankAck,self)
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_COMPETITION_FANS_REWARD_RANK_ACK, self.OnFansRewardRankAck,self)
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_COMPETITION_FANS_GET_REWARD_ACK, self.OnGetFansRewardAck,self)
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_COMPETITION_ON_VOTE_ACK, self.OnVoteAck,self)
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_COMPETITION_GET_PLAYER_VOTE_RANK_ACK, self.OnGetPlayerVoteInfoAck,self)
- end
- function IdolData:UnRegisterNetEvents()
- ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_COMPETITION_FANS_DAY_REWARD_ACK)
- ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_COMPETITION_SELF_FANS_INFO_ACK)
- ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_COMPETITION_VOTE_RANK_ACK)
- ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_COMPETITION_FANS_REWARD_RANK_ACK)
- ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_COMPETITION_FANS_GET_REWARD_ACK)
- ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_COMPETITION_ON_VOTE_ACK)
- ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_COMPETITION_GET_PLAYER_VOTE_RANK_ACK)
- end
- function IdolData:OnVoteAck(data)
- if data.error == 0 then
- if data.detail and #data.detail > 0 and data.vote_list and #data.vote_list > 0 then
- self.showDataList = self:InitDetailData(data.detail,data.vote_list)
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.REFRESH_RANK_MODEL_INFO)
- end
- local selfUid = ManagerContainer.DataMgr.UserData:GetUserId()
- if data.vote_target.uid == selfUid then
- ManagerContainer.DataMgr.CompetitionData:SetRankAndScore(data.vote_target)
- end
- if data.vote_target.rank > 0 and self.rankList then
- local index = nil
- for i = 1, #self.rankList do
- if self.rankList[i].uid == data.vote_target.uid then
- index = i
- break
- end
- end
- if index then
- table.remove(self.rankList,index)
- end
- if data.vote_target.rank <= #self.rankList then
- table.insert(self.rankList, data.vote_target.rank, data.vote_target)
- else
- table.insert(self.rankList,data.vote_target)
- end
- for i = 1, #self.rankList do
- self.rankList[i].rank = i
- if self.rankList[i].uid == selfUid then
- ManagerContainer.DataMgr.CompetitionData:SetRankAndScore(self.rankList[i])
- end
- end
- end
- local limti = self:GetRankInfoLimit()
- if self.rankList and #self.rankList > limti then
- for i = limti + 1, #self.rankList do
- table.remove(self.rankList,i)
- end
- end
- local rewardData = data.reward_data
- if self.fansRewardInfo and rewardData and #rewardData > 0 then
- for i = 1, #rewardData do
- if not self.fansRewardInfo[rewardData[i].key] then
- self.fansRewardInfo[rewardData[i].key] = {}
- end
- self.fansRewardInfo[rewardData[i].key].hotVal = rewardData[i].value
- local rewardState = {}
- local val = rewardData[i].value2
- local len = ManagerContainer.CfgMgr:GetAidouluCfgLength()
- for i = 1, len do
- rewardState[i] = BitUtil.RshiftNumBandOne(val, i - 1) == 1
- end
- self.fansRewardInfo[rewardData[i].key].rewardState = rewardState
- end
- end
- local currTicket = data.ticket_count
- if currTicket > 0 and currTicket < hotValShowLimit then
- ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("SupportSucessTips")
- else
- ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.IdolSuccessTips)
- end
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.REFRESH_VOTE_VIEW_INFO)
- end
- end
- function IdolData:OnVoteRankAck(data)
- if data.error == 0 then
- if not self.rankList then
- self.rankList = {}
- end
- local rankList = data.rank_data
- local uids = {}
- for i = 1, #rankList do
- table.insert(self.rankList,rankList[i])
- table.insert(uids,rankList[i].uid)
- end
- self.rankListReqPage = self.rankListReqPage + 1
- if data.is_end then
- self.RankInfoReqLimit = self.rankList and #self.rankList or 0
- if data.page == 1 then
- --通知排行界面改变
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.REFRESH_IDOL_RANK_PLAYER_RANK_INFO)
- end
- end
- self.isCanSendInfoReq = true
- self:SendIdolInfoReq(Enum.FriendTogglePageType.IdolRankInfo,uids)
- end
- end
- function IdolData:OnFansRewardRankAck(data)
- if data.error == 0 then
- if not self.rewardRankList then
- self.rewardRankList = {}
- self.rewardRankListReqPage = 1
- end
- if data.page == 1 and data.reward_data then
- if not self.fansRewardInfo then
- self.fansRewardInfo = {}
- end
- local info = self.fansRewardInfo
- local rewardData = data.reward_data
- if rewardData and #rewardData > 0 then
- for i = 1, #rewardData do
- if not info[rewardData[i].key] then
- info[rewardData[i].key] = {}
- end
- info[rewardData[i].key].hotVal = rewardData[i].value
- local rewardState = {}
- local val = rewardData[i].value2
- local len = ManagerContainer.CfgMgr:GetAidouluCfgLength()
- for i = 1, len do
- rewardState[i] = BitUtil.RshiftNumBandOne(val, i - 1) == 1
- end
- info[rewardData[i].key].rewardState = rewardState
- end
- end
- end
- local rankList = data.data_list
- local uids = {}
- for i = 1, #rankList do
- table.insert(self.rewardRankList,rankList[i])
- table.insert(uids,rankList[i].uid)
- end
- self.rewardRankListReqPage = self.rewardRankListReqPage + 1
- if data.is_end then
- self.FansInfoReqLimit = self.rewardRankList and #self.rewardRankList or 0
- if data.page == 1 then
- --通知回馈界面改变
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.REFRESH_IDOL_FANS_PLAYER_RANK_INFO)
- end
- end
- self.isCanSendInfoReq = true
- self:SendIdolInfoReq(Enum.FriendTogglePageType.IdolFansInfo,uids)
- end
- end
- function IdolData:OnGetFansRewardAck(data)
- if data.error == 0 then
- if self.fansRewardInfo then
- if self.fansRewardInfo[data.uid] then
- local rewardState = {}
- local val = data.reward_flag
- local len = ManagerContainer.CfgMgr:GetAidouluCfgLength()
- for i = 1, len do
- rewardState[i] = BitUtil.RshiftNumBandOne(val, i - 1) == 1
- end
- self.fansRewardInfo[data.uid].rewardState = rewardState
- if data.reward_list and #data.reward_list > 0 then
- local rewards = {}
- for key, value in pairs(data.reward_list) do
- table.insert(rewards,{cfgId = value.key, num = value.value})
- end
- ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIPOPGot,{rewards = rewards})
- end
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.REFRESH_FASN_REWARD_INFO)
- end
- end
- end
- end
- --粉丝排行票数请求
- function IdolData:SendGetPlayerVoteRankReq(uid)
- self.VoteInfoUid = uid
- ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_COMPETITION_GET_PLAYER_VOTE_RANK_REQ, {uid = uid})
- end
- --粉丝领回馈请求
- function IdolData:SendFansGetRewardReq(uid)
- ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_COMPETITION_FANS_GET_REWARD_REQ, {uid = uid})
- end
-
- --粉丝得票排行请求
- function IdolData:SendGetVoteRankInfoReq()
- if not self.rankListReqPage then
- self.rankListReqPage = 1
- end
- ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_COMPETITION_VOTE_RANK_REQ, {page = self.rankListReqPage})
- end
- --回馈宝箱数据请求
- function IdolData:SendGetGiftRankInfoReq()
- if not self.rewardRankListReqPage then
- self.rewardRankListReqPage = 1
- end
- ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_COMPETITION_FANS_REWARD_RANK_REQ, {page = self.rewardRankListReqPage})
- end
- --获取自己粉丝数据请求
- function IdolData:SendGetSelfFansInfoReq()
- ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_COMPETITION_SELF_FANS_INFO_REQ)
- end
- --分批请求玩家数据
- function IdolData:SendIdolInfoReq(type,uids)
- if self.isCanSendInfoReq then
- self.isCanSendInfoReq = false
- ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_GET_OTHER_PLAYER_BRIEF_INFO_REQ, {type = type,player_list=uids})
- end
- end
- function IdolData:OnSelfFansInfoAck(data)
- if data.error == 0 then
- self.fansVoteList = data.fan_list
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.REFRESH_IDOL_MYFANS_INFO)
- end
- end
- function IdolData:OnDayRewardAck(data)
- if data.error == 0 then
- if self.TimeList and self.TimeList[data.id] then
- self.TimeList[data.id][3] = true
- end
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.REFRESH_DAYS_REWARD_INFO)
- end
- end
- function IdolData:OnIdolPlayerBriefInfoAck(data)
- self.isCanSendInfoReq = true
- if not data then
- return
- end
- if data.type == Enum.FriendTogglePageType.IdolRankInfo then
- if not self.idolRankInfo then
- self.idolRankInfo = {}
- self.idolRankLength = 0
- end
- local brief_info = data.brief_info
- if brief_info and #brief_info > 0 then
- local list = self.idolRankInfo
- for i = 1, #brief_info do
- local info = brief_info[i]
- if not list[info.uid] then
- self.idolRankLength = self.idolRankLength + 1
- end
- list[info.uid] = info
- end
- end
- --通知排行界面改变
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.REFRESH_IDOL_RANK_PLAYER_RANK_INFO)
- elseif data.type == Enum.FriendTogglePageType.IdolFansInfo then
- if not self.idolFansInfo then
- self.idolFansInfo = {}
- self.idolFansLength = 0
- end
- local brief_info = data.brief_info
- if brief_info and #brief_info > 0 then
- local list = self.idolFansInfo
- for i = 1, #brief_info do
- local info = brief_info[i]
- if not list[info.uid] then
- self.idolFansLength = self.idolFansLength + 1
- end
- list[info.uid] = info
- end
- end
- --通知回馈界面改变
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.REFRESH_IDOL_FANS_PLAYER_RANK_INFO)
- elseif data.type == Enum.FriendTogglePageType.TempPlayerBirefInfos then
- if not self.tempPlayerBirefInfos then
- self.tempPlayerBirefInfos = {}
- end
- local brief_info = data.brief_info
- if brief_info and #brief_info > 0 then
- local list = self.tempPlayerBirefInfos
- for i = 1, #brief_info do
- local info = brief_info[i]
- list[info.uid] = info
- end
- end
- end
- end
- function IdolData:GetRankInfoLimit()
- return self.RankInfoReqLimit or PlayerInfoMaxLimit
- end
- function IdolData:GetGiftInfoLimit()
- return self.FansInfoReqLimit or PlayerInfoMaxLimit
- end
- function IdolData:GetIdolGiftInfos()
- return self.rewardRankList or {}
- end
- function IdolData:GetRankInfosLength()
- return self.idolRankLength or 0
- end
- function IdolData:GetGiftInfosLength()
- return self.idolFansLength or 0
- end
- function IdolData:GetMyFansData()
- return self.fansVoteList or {}
- end
- function IdolData:GetRankInfoData()
- local tab = {}
- if self.rankList and #self.rankList > 0 then
- for i = 1, #self.rankList do
- table.insert(tab,self.rankList[i])
- end
- end
- return tab
- end
- function IdolData:GetRedState()
- return self.feedbackRP or false
- end
- function IdolData:SetRedState(flag)
- self.feedbackRP = flag
- end
- function IdolData:GetRewardsTimeList()
- return self.TimeList or nil
- end
- function IdolData:GetFansInfoLimit()
- return self.FansInfoReqLimit or 0
- end
- function IdolData:GetShowDataList()
- return self.showDataList or {}
- end
- function IdolData:GetFansRewardInfoByUid(uid)
- return self.fansRewardInfo and self.fansRewardInfo[uid]
- end
- function IdolData:GetPlayerBriefInfoByUid(uid)
- if self.idolRankInfo and self.idolRankInfo[uid] then
- return self.idolRankInfo and self.idolRankInfo[uid]
- end
- if self.idolFansInfo and self.idolFansInfo[uid] then
- return self.idolFansInfo and self.idolFansInfo[uid]
- end
- if self.tempPlayerBirefInfos and self.tempPlayerBirefInfos[uid] then
- return self.tempPlayerBirefInfos and self.tempPlayerBirefInfos[uid]
- end
- return nil
- end
- function IdolData:Clear()
- self.feedbackRP = nil
- self.showDataList = nil
- self.idolRankInfo = nil
- self.idolRankLength = nil
- self.idolFansLength = nil
- self.idolFansInfo = nil
- self.RankInfoReqLimit = nil
- self.FansInfoReqLimit = nil
- self.rankListReqPage = nil
- self.rewardRankListReqPage = nil
- end
- function IdolData:Destroy()
- if self.Clear then
- self:Clear()
- end
- self:UnRegisterNetEvents()
- end
- return IdolData
|