EvilData.lua 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. local EvilData = class("EvilData",require("DataBase"))
  2. local EvilBossSlotData = require("Evil/EvilBossSlotData")
  3. function EvilData:ctor()
  4. self.maxEvilExp = 0
  5. self.maxFreeRefreshTimes = 8
  6. self.leftFreeCnt = 8 --剩下的刷新次数
  7. self.isFreeLimit = false
  8. self.challengedCount = 0 --挑战的次数
  9. self.curEvilLevel = 0
  10. self.nextEvilLevelCnt = 0
  11. self.maxEvilLevel = 7
  12. self.costEvilExp = 0
  13. self.refreshCostGold = 50
  14. self.slots = {}
  15. self.bInited = false
  16. end
  17. function EvilData:RegisterNetEvents()
  18. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_EVIL_REFRESH_ACK,self.OnEvilRefreshAck,self)
  19. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_EVIL_CHANGE_NTF,self.OnEvilChangeNtf,self)
  20. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_EVIL_CHALLENGE_ACK,self.OnEvilChallengeAck,self)
  21. ManagerContainer.LuaEventMgr:RegisterEvent(UIEventNames.EID_ROLE_EVIL_EXP_CHANGED,self,self.OnCheckRPState)
  22. end
  23. function EvilData:Clear()
  24. self.bInited = false
  25. self.slots = {}
  26. end
  27. function EvilData:Destroy()
  28. if self.Clear then
  29. self:Clear()
  30. end
  31. self:UnRegisterNetEvents()
  32. end
  33. function EvilData:UnRegisterNetEvents()
  34. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_EVIL_REFRESH_ACK)
  35. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_EVIL_CHANGE_NTF)
  36. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_EVIL_CHALLENGE_ACK)
  37. ManagerContainer.LuaEventMgr:UnregisterEvent(UIEventNames.EID_ROLE_EVIL_EXP_CHANGED,self,self.OnCheckRPState);
  38. end
  39. function EvilData:InitData()
  40. if self.bInited then
  41. return
  42. end
  43. self.maxFreeRefreshTimes = GlobalConfig.Instance:GetConfigIntValue(155)
  44. self.maxEvilExp = GlobalConfig.Instance:GetConfigIntValue(158)
  45. self.costEvilExp = GlobalConfig.Instance:GetConfigIntValue(157)
  46. self.refreshCostGold = GlobalConfig.Instance:GetConfigIntValue(188)
  47. for i=1, 4 do
  48. self.slots[#self.slots+1] = EvilBossSlotData:new(i)
  49. end
  50. self.bInited = true
  51. end
  52. function EvilData:FindSlotData(slotId)
  53. if self.slots == nil then
  54. return nil
  55. end
  56. for i=1, #self.slots do
  57. if self.slots[i].slotId == slotId then
  58. return self.slots[i]
  59. end
  60. end
  61. return nil
  62. end
  63. function EvilData:HasCanFightBoss()
  64. if self.slots == nil then
  65. return false
  66. end
  67. for i = 1, #self.slots do
  68. if self.slots[i]:IsBossDead() == false then
  69. return true
  70. end
  71. end
  72. return false
  73. end
  74. function EvilData:SendEvilRefreshReq(force)
  75. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_EVIL_REFRESH_REQ, {b_force=force})
  76. end
  77. function EvilData:OnEvilRefreshAck(data)
  78. if data.pos_idx_list and #data.pos_idx_list > 0 then
  79. for _, posIdx in pairs(data.pos_idx_list) do
  80. local slotData = self:FindSlotData(posIdx)
  81. if slotData then
  82. slotData:SetChangeState(true)
  83. end
  84. end
  85. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Refresh_SkillExpBattle_SlotData)
  86. end
  87. end
  88. function EvilData:OnEvilChangeNtf(data)
  89. self:SetEvilData(data.evil_info)
  90. if data.add_item_list and #data.add_item_list > 0 then
  91. local levelUPRewards = {};
  92. for i = 1, #data.add_item_list do
  93. local itemData = data.add_item_list[i];
  94. levelUPRewards[#levelUPRewards+1] = {cfgId = itemData.key, num = itemData.value}
  95. end
  96. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_ROLE_EVIL_Level_CHANGED,levelUPRewards)
  97. end
  98. end
  99. function EvilData:SetEvilData(evilInfo)
  100. self:InitData()
  101. self.leftFreeCnt = evilInfo.free_count
  102. self.isFreeLimit = evilInfo.free_limit
  103. self.challengedCount = evilInfo.challenge_count
  104. self.curEvilLevel = evilInfo.evil_level
  105. local evilCfg = ManagerContainer.CfgMgr:GetEvilCfgByLevel(self.curEvilLevel)
  106. local nextEvilCfg = ManagerContainer.CfgMgr:GetEvilCfgByLevel(self.curEvilLevel+1)
  107. if nextEvilCfg ~= nil then
  108. self.maxEvilLevel = self.curEvilLevel + 1
  109. else
  110. self.maxEvilLevel = self.curEvilLevel
  111. end
  112. self.nextEvilLevelCnt = evilCfg.LevelTimes
  113. if evilInfo.boss_list ~= nil then
  114. for i=1, #evilInfo.boss_list do
  115. local bossData = evilInfo.boss_list[i]
  116. local slotData = self:FindSlotData(bossData.pos_idx)
  117. if slotData~= nil then
  118. local bossHead = self:FindEvilBossHead(evilCfg,bossData.boss_id)
  119. slotData:SetServerData(bossData,self:FindEvilBossCfg(evilCfg,bossData.boss_id),bossHead)
  120. end
  121. end
  122. end
  123. self:OnCheckRPState()
  124. end
  125. function EvilData:OnCheckRPState()
  126. if ManagerContainer.DataMgr.UserData:GetEvilExp() >= self.costEvilExp and (self:HasCanFightBoss() or self.leftFreeCnt > 0) then
  127. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.EvilBattle, true)
  128. else
  129. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.EvilBattle, false)
  130. end
  131. end
  132. function EvilData:FindEvilBossCfg(evilCfg,bossId)
  133. if evilCfg == nil or evilCfg.MonsterList == nil then
  134. return nil
  135. end
  136. for i = 1, #evilCfg.MonsterList do
  137. if evilCfg.MonsterList[i][1] == bossId then
  138. return evilCfg.MonsterList[i]
  139. end
  140. end
  141. return nil
  142. end
  143. function EvilData:FindEvilBossHead(evilCfg,bossId)
  144. if evilCfg == nil or evilCfg.BossHeadList == nil then
  145. return nil
  146. end
  147. for i = 1, #evilCfg.BossHeadList do
  148. if evilCfg.BossHeadList[i][1] == bossId then
  149. return evilCfg.BossHeadList[i][2]
  150. end
  151. end
  152. return nil
  153. end
  154. function EvilData:SendEvilChallengeReq(slotIdx)
  155. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_EVIL_CHALLENGE_REQ, {pos_idx = slotIdx})
  156. end
  157. function EvilData:OnEvilChallengeAck(data)
  158. if data.error == 0 then
  159. local _rewards = {};
  160. _rewards[#_rewards+1] = { cfgId = Enum.ItemType.SkillExp,num = data.add_count}
  161. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Challenge_Evil_Ok,_rewards)
  162. local slotData = self:FindSlotData(data.pos_idx)
  163. if slotData then
  164. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Refresh_SkillExpBattle_SlotData)
  165. end
  166. end
  167. end
  168. return EvilData