| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317 |
- local HeadFrameDataMgr = class("HeadFrameDataMgr", require("DataBase"))
- local HeadFrameData = require("HeadFrame/HeadFrameData")
- function HeadFrameDataMgr:ctor()
- self._allFrameData = nil;
- self.bInited = false
- end
- function HeadFrameDataMgr:RegisterNetEvents()
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_CHANGE_HEAD_FRAME_ACK,self.OnChangeHeadFrameAck, self);
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_HEAD_FRAME_CHANGE_NTF,self.OnHeadFrameChangeNtf, self);
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_HEAD_FRAME_INFO_ACK,self.OnHeadFrameInfoAck, self);
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_USE_HEAD_FRAME_ITEM_ACK,self.OnUseHeadFrameItemAck, self);
- ManagerContainer.LuaEventMgr:RegisterEvent(UIEventNames.EID_Refresh_HeadFrame_RP, self, self.OnRefreshHeadFrameRP)
- end
- function HeadFrameDataMgr:Clear()
- self._allFrameData = nil;
- self.bInited = false
- end
- function HeadFrameDataMgr:Destroy()
- if self.Clear then
- self:Clear()
- end
- self:UnRegisterNetEvents()
- end
- function HeadFrameDataMgr:UnRegisterNetEvents()
- ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_CHANGE_HEAD_FRAME_ACK);
- ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_HEAD_FRAME_CHANGE_NTF);
- ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_HEAD_FRAME_INFO_ACK);
- ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_USE_HEAD_FRAME_ITEM_ACK);
- ManagerContainer.LuaEventMgr:UnregisterEvent(UIEventNames.EID_Refresh_HeadFrame_RP, self, self.OnRefreshHeadFrameRP)
- end
- function HeadFrameDataMgr:InitData(serverData)
- if self.bInited then
- return
- end
- local _allHeadFrameDataOriginal = ManagerContainer.CfgMgr:GetAllHeadFrameData();
- self._allFrameData = {};
- for _k, _v in pairs(_allHeadFrameDataOriginal) do
- if Constant.OpenPay or not _v.NoPay then
- self._allFrameData[#self._allFrameData+1] = HeadFrameData:new(_v)
- end
- end
- if serverData ~= nil then
- --头像框列表
- if serverData.head_frame_list ~= nil then
- for i = 1, #serverData.head_frame_list do
- local frame = self:GetHeadFrameById(serverData.head_frame_list[i].head_frame_id)
- if frame ~= nil then
- frame:SyncServerData(serverData.head_frame_list[i].head_frame_time)
- frame:SetFrameState(Enum.HeadFrameState.GotFrame)
- end
- end
- end
- end
- self:SortFrame()
- self:ReadRedPointData()
- self.bInited = true
- end
- function HeadFrameDataMgr:UseHeadFrameItem(itemUid,headFrameId,cnt)
- local headFrame = self:GetHeadFrameById(headFrameId)
- if headFrame == nil then
- self:SendUseHeadFrameReq(itemUid,cnt)
- elseif headFrame:IsOwned() and headFrame:IsForever() then
- local cost = headFrame.resolveCost * cnt
- ManagerContainer.LuaUIMgr:ShowMessageBox("ConvertHeadFrame",{headFrame.name,cost},{itemUid,cnt},self,self.OnConfirmUseHeadFrame,nil)
- else
- self:SendUseHeadFrameReq(itemUid,cnt)
- end
- end
- function HeadFrameDataMgr:OnConfirmUseHeadFrame(tbl)
- local itemUid = tbl[1]
- local cnt = tbl[2]
- self:SendUseHeadFrameReq(itemUid,cnt)
- end
- function HeadFrameDataMgr:SendUseHeadFrameReq(id,cnt)
- -- LogError("id = " .. tostring(id) .. " cnt = " .. cnt)
- ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_USE_HEAD_FRAME_ITEM_REQ, {item_id = id,item_num = cnt})
- end
- function HeadFrameDataMgr:OnUseHeadFrameItemAck(data)
- if data.error == 0 then
- ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("HeadFrameUseSuCcess")
- elseif data.error == 462 then
- ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("HeadFrameResolveSuCcess")
- end
- end
- function HeadFrameDataMgr:SendHeadFrameInfoReq()
- ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_HEAD_FRAME_INFO_REQ)
- end
- function HeadFrameDataMgr:OnHeadFrameInfoAck(_data)
- if _data.error ~= Enum.NetErrorCode.ERROR_OK then
- return
- end
- if _data.head_frame ~= nil then
- for i=1, #_data.head_frame do
- local frame = self:GetHeadFrameById(_data.head_frame[i].head_frame_id)
- if frame ~= nil then
- frame:SyncServerData(_data.head_frame[i].head_frame_time)
- end
- end
- end
- for i = 1, #self._allFrameData do
- local frame = self._allFrameData[i]
- if frame:IsLoss() then
- if ManagerContainer.DataMgr.BagData:GetItemByCfgId(frame.frameId) ~= nil then
- frame:SetFrameState(Enum.HeadFrameState.GotItem)
- end
- end
- end
-
- self:SortFrame()
- ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIChangeHeadFrame);
- end
- function HeadFrameDataMgr:OnHeadFrameChangeNtf(_data)
- if _data.head_frame ~= nil then
- for i =1, #_data.head_frame do
- local frame = self:GetHeadFrameById(_data.head_frame[i].head_frame_id)
- if frame ~= nil then
- frame:SyncServerData(_data.head_frame[i].head_frame_time)
- if _data.head_frame[i].head_frame_time == 0 then
- frame:SetFrameState(Enum.HeadFrameState.Loss)
- else
- if frame:IsLoss() or frame:IsGot() then
- frame:SetRedPointStatus(true)
- end
- frame:SetFrameState(Enum.HeadFrameState.GotFrame)
- end
- end
- end
- end
- self:SortFrame()
- self:SaveRedPointData()
- ManagerContainer.DataMgr.UserData:InitHeroAttrFromBattle()
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.HEAD_FRAME_CHANGE)
- end
- function HeadFrameDataMgr:SendChangeHeadFrameReq(frameId)
- ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_CHANGE_HEAD_FRAME_REQ, { head_frame_id = frameId })
- end
- function HeadFrameDataMgr:OnChangeHeadFrameAck(_data)
- if _data.error ~= Enum.NetErrorCode.ERROR_OK then
- return
- end
- local _oldId = ManagerContainer.DataMgr.UserData:GetHeadFrameId();
- local oldFrame = self:GetHeadFrameById(_oldId)
- if oldFrame ~= nil then
- oldFrame:SetFrameState(Enum.HeadFrameState.GotFrame)
- end
- ManagerContainer.DataMgr.UserData:SetHeadFrameId(_data.head_frame_id)
- self:SortFrame()
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.HEAD_FRAME_CHANGE)
- end
- function HeadFrameDataMgr:GetHeadFrameById(headFrameId)
- if self._allFrameData == nil then
- return nil
- end
- for i=1, #self._allFrameData do
- local frame = self._allFrameData[i]
- if frame.frameId == headFrameId then
- return frame
- end
- end
- return nil
- end
- --获取头像框的数据
- function HeadFrameDataMgr:GetAllHeadFrames()
- return self._allFrameData;
- end
- function HeadFrameDataMgr:HasNewHeadFrame()
- if self._allFrameData == nil then
- return false
- end
- for i=1, #self._allFrameData do
- if self._allFrameData[i].redPointState then
- return true
- end
- end
- return false
- end
- function HeadFrameDataMgr:OnRefreshHeadFrameRP()
- local hasRP = self:HasNewHeadFrame()
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.HeadFrame, hasRP)
- end
- function HeadFrameDataMgr:SaveRedPointData()
- local rpStr = ""
- for i=1, #self._allFrameData do
- local frame = self._allFrameData[i]
- local rpFlag = 0
- if frame.redPointState then
- rpFlag = 1
- end
- if i < #self._allFrameData then
- rpStr = rpStr .. frame.frameId .. ":" .. rpFlag .. ";"
- else
- rpStr = rpStr .. frame.frameId .. ":" .. rpFlag
- end
- end
- local uid = ManagerContainer.DataMgr.UserData:GetUserId()
- UnityEngine.PlayerPrefs.SetString(tostring(uid).."_headframesRP",rpStr)
- end
- function HeadFrameDataMgr:ReadRedPointData()
- local uid = ManagerContainer.DataMgr.UserData:GetUserId()
- local headFramesRPStr = UnityEngine.PlayerPrefs.GetString(tostring(uid).."_headframesRP")
-
- if headFramesRPStr ~= nil and headFramesRPStr ~= "" then
- local temp1 = string.split(headFramesRPStr,';')
- if temp1 ~= nil then
- for i =1, #temp1 do
- local temp2 = string.split(temp1[i],':')
- if temp2 ~= nil and #temp2 == 2 then
- local frame = self:GetHeadFrameById(tonumber(temp2[1]))
- if frame ~= nil then
- frame:SetRedPointStatus(tonumber(temp2[2]) > 0)
- end
- end
- end
- end
- end
- end
- function HeadFrameDataMgr:CalcAttrs()
- local attrList = {}
- for _,v in pairs(Enum.HeroAttrType) do
- attrList[v] = 0
- end
- if self._allFrameData ~= nil then
- for i=1, #self._allFrameData do
- local frame = self._allFrameData[i]
- if frame:IsOwned() then
- local attrs = frame:GetAttrs()
- if attrs ~= nil then
- for j = 1, #attrs do
- if attrList[attrs[j][1]] == nil then
- attrList[attrs[j][1]] = attrs[j][2]
- else
- attrList[attrs[j][1]] = attrList[attrs[j][1]] + attrs[j][2]
- end
- end
- end
- end
- end
- end
- return attrList
- end
- function HeadFrameDataMgr:SortFrame()
- if self._allFrameData == nil or #self._allFrameData < 2 then
- return
- end
- table.sort(
- self._allFrameData,
- function(a, b)
- if a:IsOwned() and (not b:IsOwned()) then
- return true
- end
- if (not a:IsOwned()) and b:IsOwned() then
- return false
- end
- if a:IsOwned() and b:IsOwned() then
- return a.frameId > b.frameId
- end
- -- if a:IsGot() and (not b:IsGot()) then
- -- return true
- -- end
- -- if (not a:IsGot()) and b:IsGot() then
- -- return false
- -- end
- -- if a:IsGot() and b:IsGot() then
- -- return a.frameId > b.frameId
- -- end
- return a.frameId > b.frameId
- end
- )
- end
- return HeadFrameDataMgr
|