ClimbingTowerDataMgr.lua 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484
  1. local ClimbingTowerDataMgr = class("ClimbingTowerDataMgr",require("DataBase"))
  2. local ClimbingTowerLevelData = require("ClimbingTower/ClimbingTowerLevelData")
  3. local ClimbingTowerRankData = require("ClimbingTower/ClimbingTowerRankData")
  4. function ClimbingTowerDataMgr:ctor()
  5. self.curChallengeLevel = 1 --当前需要挑战的关卡
  6. self.lastPassedTime = 0
  7. self.levels = nil
  8. self.ranks = nil
  9. self.rankPlayerIds = nil
  10. self.showLevels = nil
  11. self.selfRank = 10000
  12. self.requested = false
  13. self.curMaxFightingTime = 0
  14. self.curEnterBattleTime = 0
  15. self.battleEndCondList = nil
  16. self.bInited = false
  17. end
  18. function ClimbingTowerDataMgr:Clear()
  19. self.bInited = false
  20. self.requested = false
  21. self.levels = nil
  22. self.ranks = nil
  23. self.rankPlayerIds = nil
  24. self.showLevels = nil
  25. self.battleEndCondList = nil
  26. self.changeTowerState = nil
  27. end
  28. function ClimbingTowerDataMgr:RegisterNetEvents()
  29. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_CLIMBING_TOWER_INFO_ACK,self.OnClimbingTowerInfoAck,self)
  30. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_FRIEND_PASS_TOWER_INFO_ACK,self.OnTowerFriendPassTowerInfoAck,self)
  31. -- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_TOWER_LEVEL_MIN_FIGHT_POWER_NTF,self.OnTowerLevelMinFightPowerNtf,self)
  32. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_CLIMBING_TOWER_BEGIN_ACK,self.OnClimbingTowerBeginAck,self)
  33. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_CLIMBING_TOWER_END_ACK,self.OnClimbingTowerEndAck,self)
  34. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_CLIMBING_TOWER_RANK_ACK,self.OnClimbingTowerRankAck,self)
  35. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_CLIMBING_TOWER_DAY_REWARD_ACK,self.OnClimbingTowerDayRewardAck,self)
  36. ManagerContainer.LuaEventMgr:RegisterEvent(UIEventNames.EID_SC_GET_OTHER_PLAYER_BRIEF_INFO_ACK,self,self.OnGetRankBriefInfoAck)
  37. end
  38. function ClimbingTowerDataMgr:UnRegisterNetEvents()
  39. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_CLIMBING_TOWER_INFO_ACK)
  40. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_FRIEND_PASS_TOWER_INFO_ACK)
  41. --ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_TOWER_LEVEL_MIN_FIGHT_POWER_NTF)
  42. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_CLIMBING_TOWER_BEGIN_ACK)
  43. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_CLIMBING_TOWER_END_ACK)
  44. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_CLIMBING_TOWER_RANK_ACK)
  45. ManagerContainer.LuaEventMgr:UnregisterEvent(UIEventNames.EID_SC_GET_OTHER_PLAYER_BRIEF_INFO_ACK,self,self.OnGetRankBriefInfoAck);
  46. end
  47. function ClimbingTowerDataMgr:InitData()
  48. if self.bInited then
  49. return
  50. end
  51. self.levels = {}
  52. local cfgList = ManagerContainer.CfgMgr:GetClimbingTowerCfg()
  53. if cfgList ~= nil then
  54. for i = 1, #cfgList do
  55. self.levels[#self.levels+1] = ClimbingTowerLevelData:new(cfgList[i])
  56. end
  57. end
  58. self:SortLevelList()
  59. self.bInited = true
  60. end
  61. function ClimbingTowerDataMgr:SetShowLevels()
  62. self.showLevels = {}
  63. local maxLevel = self.curChallengeLevel + 4
  64. if maxLevel > #self.levels then
  65. maxLevel = #self.levels
  66. end
  67. for i = 1, maxLevel do
  68. local level = self:FindLevelData(i)
  69. level:SetPassed(level.levelId<self.curChallengeLevel)
  70. self.showLevels[#self.showLevels+1] = level
  71. end
  72. end
  73. function ClimbingTowerDataMgr:GetShowLevels()
  74. return self.showLevels
  75. end
  76. function ClimbingTowerDataMgr:SortLevelList()
  77. if self.levels == nil or #self.levels < 2 then
  78. return
  79. end
  80. table.sort(
  81. self.levels,
  82. function(a, b)
  83. return a.levelId > b.levelId
  84. end
  85. )
  86. end
  87. function ClimbingTowerDataMgr:ChangeData()
  88. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_REFRESH_CLIMBINGTOWER_DATA);
  89. end
  90. function ClimbingTowerDataMgr:GetLevels()
  91. return self.levels
  92. end
  93. function ClimbingTowerDataMgr:FindLevelData(levelId)
  94. if self.levels == nil then
  95. return nil
  96. end
  97. for i = 1,#self.levels do
  98. local level = self.levels[i]
  99. if level.levelId == levelId then
  100. return level
  101. end
  102. end
  103. return nil
  104. end
  105. --function ClimbingTowerDataMgr:FindLevelIsPassed(LevelId)
  106. function ClimbingTowerDataMgr:FindLevelIsPassed()
  107. --local lvData = self:FindLevelData(levelId)
  108. --if(lvData) then
  109. --return lvData.hasPassed
  110. --end
  111. --return false
  112. --LogError("================ curChallengeLevel = "..self.curChallengeLevel.." ========================")
  113. return self.curChallengeLevel >= 1001 --true --
  114. end
  115. function ClimbingTowerDataMgr:FindRankerData(uid)
  116. if self.ranks == nil then
  117. return nil
  118. end
  119. for i=1, #self.ranks do
  120. if self.ranks[i].playerId == uid then
  121. return self.ranks[i]
  122. end
  123. end
  124. return nil
  125. end
  126. function ClimbingTowerDataMgr:GetCurChallengeLevel()
  127. return self.curChallengeLevel
  128. end
  129. function ClimbingTowerDataMgr:GetRankList()
  130. return self.ranks
  131. end
  132. function ClimbingTowerDataMgr:GetCurrentLevelInfo()
  133. return self:FindLevelData(self.curChallengeLevel)
  134. end
  135. function ClimbingTowerDataMgr:SendClimbingTowerInfoReq(changeTower)
  136. if self.requested then
  137. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_CHANGE_TOWER_SHOW_REFRESH, changeTower)
  138. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_REFRESH_CLIMBINGTOWER_DATA)
  139. return
  140. end
  141. self.changeTowerState = changeTower
  142. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_CLIMBING_TOWER_INFO_REQ, {})
  143. end
  144. function ClimbingTowerDataMgr:InitClimbingTowerInfo(data)
  145. self.curChallengeLevel = data.now_tower_level + 1
  146. self.lastPassedTime = data.now_tower_time
  147. self.dayRewardTime = data.tower_level_day_reward_time
  148. end
  149. function ClimbingTowerDataMgr:OnClimbingTowerDayRewardAck(data)
  150. if data.error == 0 then
  151. self.dayRewardTime = data.next_day_reward_time
  152. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.REFRESH_CLIMBINGTOWER_DAYREWARD,data.reward_list)
  153. end
  154. end
  155. function ClimbingTowerDataMgr:GetDayRewardTime()
  156. return self.dayRewardTime and (type(self.dayRewardTime) == "number" and self.dayRewardTime or #self.dayRewardTime) or 0
  157. end
  158. function ClimbingTowerDataMgr:OnClimbingTowerDayRewardREQ()
  159. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_CLIMBING_TOWER_DAY_REWARD_REQ)
  160. end
  161. function ClimbingTowerDataMgr:OnClimbingTowerInfoAck(data)
  162. self:InitData()
  163. self.curChallengeLevel = data.now_tower_level + 1
  164. self.lastPassedTime = data.pass_time
  165. if data.infos ~= nil then
  166. for i = 1, #data.infos do
  167. local friendTowerInfo = data.infos[i]
  168. local levelInfo = self:FindLevelData(friendTowerInfo.tower_level)
  169. if levelInfo ~= nil then
  170. levelInfo:SetFriendData(friendTowerInfo.infos)
  171. end
  172. end
  173. end
  174. self:SetShowLevels()
  175. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_CHANGE_TOWER_SHOW_REFRESH, self.changeTowerState)
  176. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_REFRESH_CLIMBINGTOWER_DATA)
  177. self.requested = true
  178. end
  179. function ClimbingTowerDataMgr:SendFriendPassTowerInfoReq(beginIdx,endIdx)
  180. -- LogError("SendFriendPassTowerInfoReq:" .. beginIdx .. "---" .. endIdx)
  181. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_FRIEND_PASS_TOWER_INFO_REQ, {begin_index=beginIdx,end_index=endIdx})
  182. end
  183. function ClimbingTowerDataMgr:OnTowerFriendPassTowerInfoAck(data)
  184. -- LogError("OnTowerFriendPassTowerInfoAck:" .. Inspect(data))
  185. if data.infos ~= nil then
  186. local levelIds = {}
  187. for i = 1, #data.infos do
  188. local friendTowerInfo = data.infos[i]
  189. local levelInfo = self:FindLevelData(friendTowerInfo.tower_level)
  190. if levelInfo ~= nil then
  191. levelInfo:SetFriendData(friendTowerInfo.infos)
  192. levelIds[#levelIds+1] = friendTowerInfo.tower_level
  193. end
  194. end
  195. if #levelIds > 0 then
  196. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Refresh_ClimbingTower_FriendInfo,levelIds)
  197. end
  198. end
  199. end
  200. function ClimbingTowerDataMgr:OnTowerLevelMinFightPowerNtf(data)
  201. -- LogError("OnTowerLevelMinFightPowerNtf:" .. Inspect(data))
  202. if data.min_tower_info ~= nil then
  203. for i=1, #data.min_tower_info do
  204. local info = data.min_tower_info[i]
  205. local levelInfo = self:FindLevelData(info.tower_level)
  206. if levelInfo ~= nil then
  207. levelInfo:SetLowestPlayerInfo(info.brief,info.fight_power,info.record_time,info.battle_time)
  208. end
  209. end
  210. end
  211. end
  212. function ClimbingTowerDataMgr:SendClimbingTowerBeginReq(towerLevel)
  213. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_CLIMBING_TOWER_BEGIN_REQ, {tower_level = towerLevel})
  214. end
  215. function ClimbingTowerDataMgr:OnClimbingTowerBeginAck(data)
  216. -- LogError("OnClimbingTowerBeginAck:" .. Inspect(data))
  217. if data.error == 0 then
  218. self:EnterBattle(data.tower_level,data.factor_list)
  219. end
  220. end
  221. function ClimbingTowerDataMgr:SendClimbingTowerEndReq(loadingTime,towerLevel,timeStamp)
  222. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_CLIMBING_TOWER_END_REQ, {loading_time = loadingTime, tower_level = towerLevel,record_time_stamp = timeStamp})
  223. end
  224. function ClimbingTowerDataMgr:OnClimbingTowerEndAck(data)
  225. -- LogError("OnClimbingTowerEndAck:" .. Inspect(data))
  226. if data.error == 0 then
  227. local levelInfo = self:GetCurrentLevelInfo()
  228. if data.reward_list ~= nil then
  229. local rewards = {}
  230. for i = 1, #data.reward_list do
  231. local itemData = data.reward_list[i];
  232. rewards[#rewards+1] = {itemData.key, itemData.value,0}
  233. end
  234. if data.ex_reward_list ~= nil then
  235. for i =1, #data.ex_reward_list do
  236. local itemData = data.ex_reward_list[i];
  237. rewards[#rewards+1] = {itemData.key, itemData.value,1}
  238. end
  239. end
  240. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIClimbingTowerBattleWin,{Enum.UIPageName.UIClimbingTower,rewards})
  241. else
  242. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIClimbingTowerBattleWin,{Enum.UIPageName.UIClimbingTower,nil})
  243. end
  244. self.curChallengeLevel = data.tower_level + 1
  245. if data.pass_time ~= nil then
  246. self.lastPassedTime = data.pass_time
  247. end
  248. if data.pass_info ~= nil then
  249. local levelInfo = self:FindLevelData(data.pass_info.tower_level)
  250. if levelInfo ~= nil then
  251. levelInfo:SetFriendData(data.pass_info.infos)
  252. end
  253. end
  254. self:SetShowLevels()
  255. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_REFRESH_CLIMBINGTOWER_DATA)
  256. ManagerContainer.DataMgr.RankActivitiesMgr:QueryCurRankActivityData(Enum.RankActivitiesType.ClimbingTower)
  257. else
  258. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIClimbingTowerBattleFailed,Enum.UIPageName.UIClimbingTower)
  259. end
  260. end
  261. function ClimbingTowerDataMgr:SendClimbingTowerRankReq()
  262. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_CLIMBING_TOWER_RANK_REQ, {})
  263. end
  264. function ClimbingTowerDataMgr:OnClimbingTowerRankAck(data)
  265. -- LogError("OnClimbingTowerRankAck:" .. Inspect(data))
  266. if data.error == 0 then
  267. self.ranks = {}
  268. self.rankPlayerIds = {}
  269. for i = 1, #data.rank_list do
  270. local player = ClimbingTowerRankData:new(data.rank_list[i].key,data.rank_list[i].value)
  271. self.ranks[#self.ranks+1] = player
  272. self.rankPlayerIds[#self.rankPlayerIds+1] = data.rank_list[i].key
  273. end
  274. self.selfRank = data.self_rank
  275. local uid_list = self:GetRankUidList(10)
  276. self:ReqTowerRankBriefData(uid_list)
  277. else
  278. self.ranks = nil
  279. end
  280. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Refresh_ClimbingTower_RankData)
  281. end
  282. function ClimbingTowerDataMgr:ReqTowerRankBriefData(uids)
  283. if uids == nil or #uids == 0 then
  284. return
  285. end
  286. -- LogError("ClimbingTowerDataMgr : " .. Inspect(uids))
  287. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_GET_OTHER_PLAYER_BRIEF_INFO_REQ, {type=Enum.FriendTogglePageType.ClimbingTower, player_list=uids})
  288. end
  289. function ClimbingTowerDataMgr:OnGetRankBriefInfoAck(data)
  290. -- LogError("OnGetRankBriefInfoAck:" .. Inspect(data))
  291. if data.type == Enum.FriendTogglePageType.ClimbingTower then
  292. if data.brief_info ~= nil then
  293. for i = 1,#data.brief_info do
  294. local info = data.brief_info[i]
  295. local ranker = self:FindRankerData(info.uid)
  296. if ranker ~= nil then
  297. ranker:SetRankData(info)
  298. end
  299. self:RemoveTempRankerId(info.uid)
  300. end
  301. end
  302. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Refresh_ClimbingTower_RankDetailData)
  303. end
  304. end
  305. function ClimbingTowerDataMgr:RemoveTempRankerId(uid)
  306. if self.rankPlayerIds == nil then
  307. return
  308. end
  309. for i = 1, #self.rankPlayerIds do
  310. if self.rankPlayerIds[i] == uid then
  311. table.remove(self.rankPlayerIds,i)
  312. return
  313. end
  314. end
  315. end
  316. function ClimbingTowerDataMgr:GetRankUidList(cnt)
  317. local uids = {}
  318. if self.rankPlayerIds ~= nil then
  319. if cnt > #self.rankPlayerIds then
  320. cnt = #self.rankPlayerIds
  321. end
  322. for i = 1, cnt do
  323. uids[#uids+1] = self.rankPlayerIds[i]
  324. end
  325. end
  326. return uids
  327. end
  328. function ClimbingTowerDataMgr:InitEndBattleCondition()
  329. if self.battleEndCondList ~= nil then
  330. return
  331. end
  332. self.battleEndCondList = System.Array.CreateInstance(Enum.TypeInfo.BattleEndCondition, 2)
  333. self.battleEndCondList[0] = BattleEndCondition.New(Constants.EndBattle_By_UndeadCount,Constants.ResultType_Normal)
  334. self.battleEndCondList[1] = BattleEndCondition.New(Constants.EndBattle_By_BattleTime,Constants.ResultType_Normal)
  335. end
  336. function ClimbingTowerDataMgr:EnterBattle(towerLevel,factorList)
  337. local levelInfo = self:FindLevelData(towerLevel)
  338. if levelInfo ~= nil then
  339. local teams = ManagerContainer.DataMgr.UserData:GetTeamData(true);
  340. if teams ~= nil then
  341. ManagerContainer.LuaGameMgr:SetTeamData(teams,{false})
  342. end
  343. ManagerContainer.LuaGameMgr:RefreshTeamData()
  344. self.curMaxFightingTime = levelInfo.maxFightingTime
  345. local curOurActors = {}
  346. local curEnemyActors = {}
  347. local teams = ManagerContainer.DataMgr.UserData:GetTeamData(true)
  348. if teams ~= nil then
  349. --会有技能 没有即使更新 此处同步属性
  350. ManagerContainer.LuaGameMgr:SetTeamData(teams,{true})
  351. --打印
  352. for i = 1, #teams do
  353. Log("ClimbingTowerDataMgr EnterBattle RoleID = "..tostring(teams[i].uid))
  354. Log("Pet Id"..tostring(petId))
  355. local Skills = teams[i].skills
  356. for i = 1, #Skills do
  357. local skillId = Skills[i].skillId
  358. local petId = Skills[i].petId
  359. Log("Role Skill"..tostring(skillId))
  360. end
  361. end
  362. end
  363. local ourActors = System.Array.CreateInstance(Enum.TypeInfo.ActorData, #teams)
  364. for i = 1 , #teams do
  365. local actor = ManagerContainer.LuaActorDataMgr:GetActorsById(teams[i].uid,teams[i].id)
  366. --增加对应压制mark
  367. ManagerContainer.DataMgr.UserData:SetActorPveMark(teams[i].uid,actor)
  368. ourActors[i-1] = actor
  369. curOurActors[#curOurActors+1] = actor
  370. end
  371. local enemyActors = System.Array.CreateInstance(Enum.TypeInfo.ActorData, #levelInfo.npcs)
  372. for i = 1, #levelInfo.npcs do
  373. local npcInfo = levelInfo.npcs[i]
  374. local actor = ManagerContainer.LuaActorDataMgr:CreateNpc(10000+i,npcInfo.npcId,npcInfo.npcPos,npcInfo.npcLevel)
  375. if actor ~= nil then
  376. actor.IsBoss = npcInfo.isBoss
  377. enemyActors[i-1] = actor
  378. curEnemyActors[#curEnemyActors+1] = actor
  379. end
  380. end
  381. local battleFactors = System.Array.CreateInstance(Enum.TypeInfo.ValType, #factorList)
  382. for i = 1, #factorList do
  383. local factor = ValType.New(factorList[i].key,factorList[i].value)
  384. battleFactors[i-1] = factor
  385. end
  386. self.curEnterBattleTime = Time.realtimeSinceStartup
  387. self.isPlayRecord = false
  388. self:InitEndBattleCondition()
  389. ManagerContainer.LuaGameMgr:EnterClimbingTowerBattle(levelInfo.sceneName,levelInfo.bgmName,levelInfo.maxFightingTime,ourActors,enemyActors,self.battleEndCondList,nil,battleFactors)
  390. end
  391. end
  392. function ClimbingTowerDataMgr:ReplayBattle(towerLevel,battleRecordStr,replayername)
  393. local levelInfo = self:FindLevelData(towerLevel)
  394. if levelInfo == nil then
  395. return
  396. end
  397. self.isPlayRecord = true
  398. self.recordLevelId = towerLevel
  399. ManagerContainer.LuaGameMgr:EnterClimbingTowerBattle(levelInfo.sceneName,levelInfo.bgmName,levelInfo.maxFightingTime,nil,nil,nil,battleRecordStr,nil,replayername)
  400. end
  401. function ClimbingTowerDataMgr:IsPlayRecord()
  402. return self.isPlayRecord,self.recordLevelId
  403. end
  404. function ClimbingTowerDataMgr:GetCurrentMaxFightingTime()
  405. return self.curMaxFightingTime
  406. end
  407. function ClimbingTowerDataMgr:BattleEnd(battleTime,isPlayRecord,timeStamp)
  408. if self.isPlayRecord then
  409. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_SHUT_TIMEBATTLE,Enum.UIPageName.UIClimbingTower)
  410. return
  411. end
  412. self:SendClimbingTowerEndReq(battleTime,self.curChallengeLevel,timeStamp)
  413. end
  414. return ClimbingTowerDataMgr