| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- local EvilData = class("EvilData",require("DataBase"))
- local EvilBossSlotData = require("Evil/EvilBossSlotData")
- function EvilData:ctor()
- self.maxEvilExp = 0
- self.maxFreeRefreshTimes = 8
- self.leftFreeCnt = 8 --剩下的刷新次数
- self.isFreeLimit = false
- self.challengedCount = 0 --挑战的次数
- self.curEvilLevel = 0
- self.nextEvilLevelCnt = 0
- self.maxEvilLevel = 7
- self.costEvilExp = 0
- self.refreshCostGold = 50
- self.slots = {}
- self.bInited = false
- end
- function EvilData:RegisterNetEvents()
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_EVIL_REFRESH_ACK,self.OnEvilRefreshAck,self)
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_EVIL_CHANGE_NTF,self.OnEvilChangeNtf,self)
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_EVIL_CHALLENGE_ACK,self.OnEvilChallengeAck,self)
- ManagerContainer.LuaEventMgr:RegisterEvent(UIEventNames.EID_ROLE_EVIL_EXP_CHANGED,self,self.OnCheckRPState)
- end
- function EvilData:Clear()
- self.bInited = false
- self.slots = {}
- end
- function EvilData:Destroy()
- if self.Clear then
- self:Clear()
- end
- self:UnRegisterNetEvents()
- end
- function EvilData:UnRegisterNetEvents()
- ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_EVIL_REFRESH_ACK)
- ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_EVIL_CHANGE_NTF)
- ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_EVIL_CHALLENGE_ACK)
- ManagerContainer.LuaEventMgr:UnregisterEvent(UIEventNames.EID_ROLE_EVIL_EXP_CHANGED,self,self.OnCheckRPState);
- end
- function EvilData:InitData()
- if self.bInited then
- return
- end
- self.maxFreeRefreshTimes = GlobalConfig.Instance:GetConfigIntValue(155)
- self.maxEvilExp = GlobalConfig.Instance:GetConfigIntValue(158)
- self.costEvilExp = GlobalConfig.Instance:GetConfigIntValue(157)
- self.refreshCostGold = GlobalConfig.Instance:GetConfigIntValue(188)
-
- for i=1, 4 do
- self.slots[#self.slots+1] = EvilBossSlotData:new(i)
- end
- self.bInited = true
- end
- function EvilData:FindSlotData(slotId)
- if self.slots == nil then
- return nil
- end
- for i=1, #self.slots do
- if self.slots[i].slotId == slotId then
- return self.slots[i]
- end
- end
- return nil
- end
- function EvilData:HasCanFightBoss()
- if self.slots == nil then
- return false
- end
- for i = 1, #self.slots do
- if self.slots[i]:IsBossDead() == false then
- return true
- end
- end
- return false
- end
- function EvilData:SendEvilRefreshReq(force)
- ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_EVIL_REFRESH_REQ, {b_force=force})
- end
- function EvilData:OnEvilRefreshAck(data)
- if data.pos_idx_list and #data.pos_idx_list > 0 then
- for _, posIdx in pairs(data.pos_idx_list) do
- local slotData = self:FindSlotData(posIdx)
- if slotData then
- slotData:SetChangeState(true)
- end
- end
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Refresh_SkillExpBattle_SlotData)
- end
- end
- function EvilData:OnEvilChangeNtf(data)
- self:SetEvilData(data.evil_info)
- if data.add_item_list and #data.add_item_list > 0 then
- local levelUPRewards = {};
- for i = 1, #data.add_item_list do
- local itemData = data.add_item_list[i];
- levelUPRewards[#levelUPRewards+1] = {cfgId = itemData.key, num = itemData.value}
- end
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_ROLE_EVIL_Level_CHANGED,levelUPRewards)
- end
- end
- function EvilData:SetEvilData(evilInfo)
- self:InitData()
- self.leftFreeCnt = evilInfo.free_count
- self.isFreeLimit = evilInfo.free_limit
- self.challengedCount = evilInfo.challenge_count
- self.curEvilLevel = evilInfo.evil_level
- local evilCfg = ManagerContainer.CfgMgr:GetEvilCfgByLevel(self.curEvilLevel)
- local nextEvilCfg = ManagerContainer.CfgMgr:GetEvilCfgByLevel(self.curEvilLevel+1)
- if nextEvilCfg ~= nil then
- self.maxEvilLevel = self.curEvilLevel + 1
- else
- self.maxEvilLevel = self.curEvilLevel
- end
- self.nextEvilLevelCnt = evilCfg.LevelTimes
- if evilInfo.boss_list ~= nil then
- for i=1, #evilInfo.boss_list do
- local bossData = evilInfo.boss_list[i]
- local slotData = self:FindSlotData(bossData.pos_idx)
- if slotData~= nil then
- local bossHead = self:FindEvilBossHead(evilCfg,bossData.boss_id)
- slotData:SetServerData(bossData,self:FindEvilBossCfg(evilCfg,bossData.boss_id),bossHead)
- end
- end
- end
- self:OnCheckRPState()
- end
- function EvilData:OnCheckRPState()
- if ManagerContainer.DataMgr.UserData:GetEvilExp() >= self.costEvilExp and (self:HasCanFightBoss() or self.leftFreeCnt > 0) then
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.EvilBattle, true)
- else
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.EvilBattle, false)
- end
- end
- function EvilData:FindEvilBossCfg(evilCfg,bossId)
- if evilCfg == nil or evilCfg.MonsterList == nil then
- return nil
- end
- for i = 1, #evilCfg.MonsterList do
- if evilCfg.MonsterList[i][1] == bossId then
- return evilCfg.MonsterList[i]
- end
- end
- return nil
- end
- function EvilData:FindEvilBossHead(evilCfg,bossId)
- if evilCfg == nil or evilCfg.BossHeadList == nil then
- return nil
- end
- for i = 1, #evilCfg.BossHeadList do
- if evilCfg.BossHeadList[i][1] == bossId then
- return evilCfg.BossHeadList[i][2]
- end
- end
- return nil
- end
- function EvilData:SendEvilChallengeReq(slotIdx)
- ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_EVIL_CHALLENGE_REQ, {pos_idx = slotIdx})
- end
- function EvilData:OnEvilChallengeAck(data)
- if data.error == 0 then
- local _rewards = {};
- _rewards[#_rewards+1] = { cfgId = Enum.ItemType.SkillExp,num = data.add_count}
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Challenge_Evil_Ok,_rewards)
- local slotData = self:FindSlotData(data.pos_idx)
- if slotData then
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Refresh_SkillExpBattle_SlotData)
- end
- end
- end
- return EvilData
|