ClimbingTowerDataMgr.lua 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796
  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. self.towerMode = 0 -- 0 原来的模式 1 无尽模式
  18. self.wjLevel = 1
  19. self.wjBossInfo = nil
  20. self.wjRewordCfg = nil
  21. end
  22. function ClimbingTowerDataMgr:Clear()
  23. self.bInited = false
  24. self.requested = false
  25. self.levels = nil
  26. self.ranks = nil
  27. self.rankPlayerIds = nil
  28. self.showLevels = nil
  29. self.battleEndCondList = nil
  30. self.changeTowerState = nil
  31. end
  32. function ClimbingTowerDataMgr:RegisterNetEvents()
  33. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_CLIMBING_TOWER_INFO_ACK,self.OnClimbingTowerInfoAck,self)
  34. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_FRIEND_PASS_TOWER_INFO_ACK,self.OnTowerFriendPassTowerInfoAck,self)
  35. -- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_TOWER_LEVEL_MIN_FIGHT_POWER_NTF,self.OnTowerLevelMinFightPowerNtf,self)
  36. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_CLIMBING_TOWER_BEGIN_ACK,self.OnClimbingTowerBeginAck,self)
  37. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_CLIMBING_TOWER_END_ACK,self.OnClimbingTowerEndAck,self)
  38. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_CLIMBING_TOWER_RANK_ACK,self.OnClimbingTowerRankAck,self)
  39. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_CLIMBING_TOWER_DAY_REWARD_ACK,self.OnClimbingTowerDayRewardAck,self)
  40. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_CLIMBING_TOWER_WJ_BEGIN_ACK,self.OnWjBeginAck,self)
  41. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_CLIMBING_TOWER_WJ_END_ACK,self.OnWjEndAck,self)
  42. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_CLIMBING_TOWER_WJ_RANK_ACK,self.OnWjRankAck,self)
  43. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_CLIMBING_TOWER_WJ_BOSS_NTF,self.OnWjBossNtf,self)
  44. ManagerContainer.LuaEventMgr:RegisterEvent(UIEventNames.EID_SC_GET_OTHER_PLAYER_BRIEF_INFO_ACK,self,self.OnGetRankBriefInfoAck)
  45. end
  46. function ClimbingTowerDataMgr:UnRegisterNetEvents()
  47. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_CLIMBING_TOWER_INFO_ACK)
  48. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_FRIEND_PASS_TOWER_INFO_ACK)
  49. --ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_TOWER_LEVEL_MIN_FIGHT_POWER_NTF)
  50. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_CLIMBING_TOWER_BEGIN_ACK)
  51. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_CLIMBING_TOWER_END_ACK)
  52. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_CLIMBING_TOWER_RANK_ACK)
  53. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_CLIMBING_TOWER_WJ_BEGIN_ACK)
  54. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_CLIMBING_TOWER_WJ_END_ACK)
  55. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_CLIMBING_TOWER_WJ_RANK_ACK)
  56. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_CLIMBING_TOWER_WJ_BOSS_NTF)
  57. ManagerContainer.LuaEventMgr:UnregisterEvent(UIEventNames.EID_SC_GET_OTHER_PLAYER_BRIEF_INFO_ACK,self,self.OnGetRankBriefInfoAck);
  58. end
  59. function ClimbingTowerDataMgr:InitData()
  60. if self.bInited then
  61. return
  62. end
  63. self.levels = {}
  64. local cfgList = ManagerContainer.CfgMgr:GetClimbingTowerCfg()
  65. if cfgList ~= nil then
  66. for i = 1, #cfgList do
  67. self.levels[#self.levels+1] = ClimbingTowerLevelData:new(cfgList[i])
  68. end
  69. end
  70. self:SortLevelList()
  71. self.bInited = true
  72. end
  73. function ClimbingTowerDataMgr:SetShowLevels()
  74. self.showLevels = {}
  75. local maxLevel = self.curChallengeLevel + 4
  76. if maxLevel > #self.levels then
  77. maxLevel = #self.levels
  78. end
  79. for i = 1, maxLevel do
  80. local level = self:FindLevelData(i)
  81. level:SetPassed(level.levelId<self.curChallengeLevel)
  82. self.showLevels[#self.showLevels+1] = level
  83. end
  84. end
  85. function ClimbingTowerDataMgr:GetShowLevels()
  86. return self.showLevels
  87. end
  88. function ClimbingTowerDataMgr:SortLevelList()
  89. if self.levels == nil or #self.levels < 2 then
  90. return
  91. end
  92. table.sort(
  93. self.levels,
  94. function(a, b)
  95. return a.levelId > b.levelId
  96. end
  97. )
  98. end
  99. function ClimbingTowerDataMgr:ChangeData()
  100. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_REFRESH_CLIMBINGTOWER_DATA);
  101. end
  102. function ClimbingTowerDataMgr:GetLevels()
  103. return self.levels
  104. end
  105. function ClimbingTowerDataMgr:FindLevelData(levelId)
  106. if self.levels == nil then
  107. return nil
  108. end
  109. for i = 1,#self.levels do
  110. local level = self.levels[i]
  111. if level.levelId == levelId then
  112. return level
  113. end
  114. end
  115. return nil
  116. end
  117. --function ClimbingTowerDataMgr:FindLevelIsPassed(LevelId)
  118. function ClimbingTowerDataMgr:FindLevelIsPassed()
  119. --local lvData = self:FindLevelData(levelId)
  120. --if(lvData) then
  121. --return lvData.hasPassed
  122. --end
  123. --return false
  124. --LogError("================ curChallengeLevel = "..self.curChallengeLevel.." ========================")
  125. return self.curChallengeLevel >= self:GetTopTowerUnlockLv() --true --
  126. end
  127. function ClimbingTowerDataMgr:FindRankerData(uid)
  128. if self.ranks == nil then
  129. return nil
  130. end
  131. for i=1, #self.ranks do
  132. if self.ranks[i].playerId == uid then
  133. return self.ranks[i]
  134. end
  135. end
  136. return nil
  137. end
  138. function ClimbingTowerDataMgr:GetCurChallengeLevel()
  139. return self.curChallengeLevel
  140. end
  141. function ClimbingTowerDataMgr:GetRankList()
  142. return self.ranks
  143. end
  144. function ClimbingTowerDataMgr:GetCurrentLevelInfo()
  145. return self:FindLevelData(self.curChallengeLevel)
  146. end
  147. function ClimbingTowerDataMgr:SendClimbingTowerInfoReq(changeTower)
  148. if self.requested then
  149. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_CHANGE_TOWER_SHOW_REFRESH, changeTower)
  150. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_REFRESH_CLIMBINGTOWER_DATA)
  151. return
  152. end
  153. self.changeTowerState = changeTower
  154. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_CLIMBING_TOWER_INFO_REQ, {})
  155. end
  156. function ClimbingTowerDataMgr:InitClimbingTowerInfo(data)
  157. self.curChallengeLevel = data.now_tower_level + 1
  158. self.lastPassedTime = data.now_tower_time
  159. self.dayRewardTime = data.tower_level_day_reward_time
  160. end
  161. function ClimbingTowerDataMgr:OnClimbingTowerDayRewardAck(data)
  162. if data.error == 0 then
  163. self.dayRewardTime = data.next_day_reward_time
  164. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.REFRESH_CLIMBINGTOWER_DAYREWARD,data.reward_list)
  165. end
  166. end
  167. function ClimbingTowerDataMgr:GetDayRewardTime()
  168. return self.dayRewardTime and (type(self.dayRewardTime) == "number" and self.dayRewardTime or #self.dayRewardTime) or 0
  169. end
  170. function ClimbingTowerDataMgr:OnClimbingTowerDayRewardREQ()
  171. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_CLIMBING_TOWER_DAY_REWARD_REQ)
  172. end
  173. function ClimbingTowerDataMgr:OnClimbingTowerInfoAck(data)
  174. self:InitData()
  175. self.curChallengeLevel = data.now_tower_level + 1
  176. self.lastPassedTime = data.pass_time
  177. if data.infos ~= nil then
  178. for i = 1, #data.infos do
  179. local friendTowerInfo = data.infos[i]
  180. local levelInfo = self:FindLevelData(friendTowerInfo.tower_level)
  181. if levelInfo ~= nil then
  182. levelInfo:SetFriendData(friendTowerInfo.infos)
  183. end
  184. end
  185. end
  186. self:SetShowLevels()
  187. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_CHANGE_TOWER_SHOW_REFRESH, self.changeTowerState)
  188. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_REFRESH_CLIMBINGTOWER_DATA)
  189. self.requested = true
  190. end
  191. function ClimbingTowerDataMgr:SendFriendPassTowerInfoReq(beginIdx,endIdx)
  192. -- LogError("SendFriendPassTowerInfoReq:" .. beginIdx .. "---" .. endIdx)
  193. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_FRIEND_PASS_TOWER_INFO_REQ, {begin_index=beginIdx,end_index=endIdx})
  194. end
  195. function ClimbingTowerDataMgr:OnTowerFriendPassTowerInfoAck(data)
  196. -- LogError("OnTowerFriendPassTowerInfoAck:" .. Inspect(data))
  197. if data.infos ~= nil then
  198. local levelIds = {}
  199. for i = 1, #data.infos do
  200. local friendTowerInfo = data.infos[i]
  201. local levelInfo = self:FindLevelData(friendTowerInfo.tower_level)
  202. if levelInfo ~= nil then
  203. levelInfo:SetFriendData(friendTowerInfo.infos)
  204. levelIds[#levelIds+1] = friendTowerInfo.tower_level
  205. end
  206. end
  207. if #levelIds > 0 then
  208. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Refresh_ClimbingTower_FriendInfo,levelIds)
  209. end
  210. end
  211. end
  212. function ClimbingTowerDataMgr:OnTowerLevelMinFightPowerNtf(data)
  213. -- LogError("OnTowerLevelMinFightPowerNtf:" .. Inspect(data))
  214. if data.min_tower_info ~= nil then
  215. for i=1, #data.min_tower_info do
  216. local info = data.min_tower_info[i]
  217. local levelInfo = self:FindLevelData(info.tower_level)
  218. if levelInfo ~= nil then
  219. levelInfo:SetLowestPlayerInfo(info.brief,info.fight_power,info.record_time,info.battle_time)
  220. end
  221. end
  222. end
  223. end
  224. function ClimbingTowerDataMgr:SendClimbingTowerBeginReq(towerLevel)
  225. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_CLIMBING_TOWER_BEGIN_REQ, {tower_level = towerLevel})
  226. end
  227. function ClimbingTowerDataMgr:OnClimbingTowerBeginAck(data)
  228. -- LogError("OnClimbingTowerBeginAck:" .. Inspect(data))
  229. if data.error == 0 then
  230. self:EnterBattle(data.tower_level,data.factor_list)
  231. end
  232. end
  233. function ClimbingTowerDataMgr:SendClimbingTowerEndReq(loadingTime,towerLevel,timeStamp)
  234. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_CLIMBING_TOWER_END_REQ, {loading_time = loadingTime, tower_level = towerLevel,record_time_stamp = timeStamp})
  235. end
  236. function ClimbingTowerDataMgr:OnClimbingTowerEndAck(data)
  237. -- LogError("OnClimbingTowerEndAck:" .. Inspect(data))
  238. if data.error == 0 then
  239. local levelInfo = self:GetCurrentLevelInfo()
  240. if data.reward_list ~= nil then
  241. local rewards = {}
  242. for i = 1, #data.reward_list do
  243. local itemData = data.reward_list[i];
  244. rewards[#rewards+1] = {itemData.key, itemData.value,0}
  245. end
  246. if data.ex_reward_list ~= nil then
  247. for i =1, #data.ex_reward_list do
  248. local itemData = data.ex_reward_list[i];
  249. rewards[#rewards+1] = {itemData.key, itemData.value,1}
  250. end
  251. end
  252. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIClimbingTowerBattleWin,{Enum.UIPageName.UIClimbingTower,rewards})
  253. else
  254. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIClimbingTowerBattleWin,{Enum.UIPageName.UIClimbingTower,nil})
  255. end
  256. self.curChallengeLevel = data.tower_level + 1
  257. if data.pass_time ~= nil then
  258. self.lastPassedTime = data.pass_time
  259. end
  260. if data.pass_info ~= nil then
  261. local levelInfo = self:FindLevelData(data.pass_info.tower_level)
  262. if levelInfo ~= nil then
  263. levelInfo:SetFriendData(data.pass_info.infos)
  264. end
  265. end
  266. self:SetShowLevels()
  267. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_REFRESH_CLIMBINGTOWER_DATA)
  268. ManagerContainer.DataMgr.RankActivitiesMgr:QueryCurRankActivityData(Enum.RankActivitiesType.ClimbingTower)
  269. else
  270. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIClimbingTowerBattleFailed,Enum.UIPageName.UIClimbingTower)
  271. end
  272. end
  273. function ClimbingTowerDataMgr:SendClimbingTowerRankReq()
  274. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_CLIMBING_TOWER_RANK_REQ, {})
  275. end
  276. function ClimbingTowerDataMgr:OnClimbingTowerRankAck(data)
  277. -- LogError("OnClimbingTowerRankAck:" .. Inspect(data))
  278. if data.error == 0 then
  279. self.ranks = {}
  280. self.rankPlayerIds = {}
  281. for i = 1, #data.rank_list do
  282. local player = ClimbingTowerRankData:new(data.rank_list[i].key,data.rank_list[i].value)
  283. self.ranks[#self.ranks+1] = player
  284. self.rankPlayerIds[#self.rankPlayerIds+1] = data.rank_list[i].key
  285. end
  286. self.selfRank = data.self_rank
  287. local uid_list = self:GetRankUidList(10)
  288. self:ReqTowerRankBriefData(uid_list)
  289. else
  290. self.ranks = nil
  291. end
  292. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Refresh_ClimbingTower_RankData)
  293. end
  294. function ClimbingTowerDataMgr:ReqTowerRankBriefData(uids)
  295. if uids == nil or #uids == 0 then
  296. return
  297. end
  298. -- LogError("ClimbingTowerDataMgr : " .. Inspect(uids))
  299. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_GET_OTHER_PLAYER_BRIEF_INFO_REQ, {type=Enum.FriendTogglePageType.ClimbingTower, player_list=uids})
  300. end
  301. function ClimbingTowerDataMgr:OnGetRankBriefInfoAck(data)
  302. -- LogError("OnGetRankBriefInfoAck:" .. Inspect(data))
  303. if data.type == Enum.FriendTogglePageType.ClimbingTower then
  304. if data.brief_info ~= nil then
  305. for i = 1,#data.brief_info do
  306. local info = data.brief_info[i]
  307. local ranker = self:FindRankerData(info.uid)
  308. if ranker ~= nil then
  309. ranker:SetRankData(info)
  310. end
  311. self:RemoveTempRankerId(info.uid)
  312. end
  313. end
  314. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Refresh_ClimbingTower_RankDetailData)
  315. end
  316. end
  317. function ClimbingTowerDataMgr:RemoveTempRankerId(uid)
  318. if self.rankPlayerIds == nil then
  319. return
  320. end
  321. for i = 1, #self.rankPlayerIds do
  322. if self.rankPlayerIds[i] == uid then
  323. table.remove(self.rankPlayerIds,i)
  324. return
  325. end
  326. end
  327. end
  328. function ClimbingTowerDataMgr:GetRankUidList(cnt)
  329. local uids = {}
  330. if self.rankPlayerIds ~= nil then
  331. if cnt > #self.rankPlayerIds then
  332. cnt = #self.rankPlayerIds
  333. end
  334. for i = 1, cnt do
  335. uids[#uids+1] = self.rankPlayerIds[i]
  336. end
  337. end
  338. return uids
  339. end
  340. function ClimbingTowerDataMgr:InitEndBattleCondition()
  341. if self.battleEndCondList ~= nil then
  342. return
  343. end
  344. self.battleEndCondList = System.Array.CreateInstance(Enum.TypeInfo.BattleEndCondition, 2)
  345. self.battleEndCondList[0] = BattleEndCondition.New(Constants.EndBattle_By_UndeadCount,Constants.ResultType_Normal)
  346. self.battleEndCondList[1] = BattleEndCondition.New(Constants.EndBattle_By_BattleTime,Constants.ResultType_Normal)
  347. end
  348. function ClimbingTowerDataMgr:EnterBattle(towerLevel,factorList)
  349. local levelInfo = self:FindLevelData(towerLevel)
  350. if levelInfo ~= nil then
  351. local teams = ManagerContainer.DataMgr.UserData:GetTeamData(true);
  352. if teams ~= nil then
  353. ManagerContainer.LuaGameMgr:SetTeamData(teams,{false})
  354. end
  355. ManagerContainer.LuaGameMgr:RefreshTeamData()
  356. self.curMaxFightingTime = levelInfo.maxFightingTime
  357. local curOurActors = {}
  358. local curEnemyActors = {}
  359. local teams = ManagerContainer.DataMgr.UserData:GetTeamData(true)
  360. if teams ~= nil then
  361. --会有技能 没有即使更新 此处同步属性
  362. ManagerContainer.LuaGameMgr:SetTeamData(teams,{true})
  363. --打印
  364. for i = 1, #teams do
  365. Log("ClimbingTowerDataMgr EnterBattle RoleID = "..tostring(teams[i].uid))
  366. Log("Pet Id"..tostring(petId))
  367. local Skills = teams[i].skills
  368. for i = 1, #Skills do
  369. local skillId = Skills[i].skillId
  370. local petId = Skills[i].petId
  371. Log("Role Skill"..tostring(skillId))
  372. end
  373. end
  374. end
  375. local ourActors = System.Array.CreateInstance(Enum.TypeInfo.ActorData, #teams)
  376. for i = 1 , #teams do
  377. local actor = ManagerContainer.LuaActorDataMgr:GetActorsById(teams[i].uid,teams[i].id)
  378. --增加对应压制mark
  379. ManagerContainer.DataMgr.UserData:SetActorPveMark(teams[i].uid,actor)
  380. ourActors[i-1] = actor
  381. curOurActors[#curOurActors+1] = actor
  382. end
  383. local enemyActors = System.Array.CreateInstance(Enum.TypeInfo.ActorData, #levelInfo.npcs)
  384. for i = 1, #levelInfo.npcs do
  385. local npcInfo = levelInfo.npcs[i]
  386. local actor = ManagerContainer.LuaActorDataMgr:CreateNpc(10000+i,npcInfo.npcId,npcInfo.npcPos,npcInfo.npcLevel)
  387. if actor ~= nil then
  388. actor.IsBoss = npcInfo.isBoss
  389. enemyActors[i-1] = actor
  390. curEnemyActors[#curEnemyActors+1] = actor
  391. end
  392. end
  393. local battleFactors = System.Array.CreateInstance(Enum.TypeInfo.ValType, #factorList)
  394. for i = 1, #factorList do
  395. local factor = ValType.New(factorList[i].key,factorList[i].value)
  396. battleFactors[i-1] = factor
  397. end
  398. self.curEnterBattleTime = Time.realtimeSinceStartup
  399. self.isPlayRecord = false
  400. self:InitEndBattleCondition()
  401. ManagerContainer.LuaGameMgr:EnterClimbingTowerBattle(levelInfo.sceneName,levelInfo.bgmName,levelInfo.maxFightingTime,ourActors,enemyActors,self.battleEndCondList,nil,battleFactors)
  402. end
  403. end
  404. function ClimbingTowerDataMgr:ReplayBattle(towerLevel,battleRecordStr,replayername)
  405. local levelInfo = self:FindLevelData(towerLevel)
  406. if levelInfo == nil then
  407. return
  408. end
  409. self.isPlayRecord = true
  410. self.recordLevelId = towerLevel
  411. ManagerContainer.LuaGameMgr:EnterClimbingTowerBattle(levelInfo.sceneName,levelInfo.bgmName,levelInfo.maxFightingTime,nil,nil,nil,battleRecordStr,nil,replayername)
  412. end
  413. function ClimbingTowerDataMgr:IsPlayRecord()
  414. return self.isPlayRecord,self.recordLevelId
  415. end
  416. function ClimbingTowerDataMgr:GetCurrentMaxFightingTime()
  417. return self.curMaxFightingTime
  418. end
  419. function ClimbingTowerDataMgr:BattleEnd(battleTime,isPlayRecord,timeStamp)
  420. if self.isPlayRecord then
  421. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_SHUT_TIMEBATTLE,Enum.UIPageName.UIClimbingTower)
  422. return
  423. end
  424. if self:GetTowerMode() == 2 then
  425. LogError("無盡模式!!")
  426. --self.wjLevel = self.wjLevel + 1
  427. --ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIClimbingTowerBattleWin,{Enum.UIPageName.UIClimbingTower,nil})
  428. self:SendWjEndReq(battleTime,self.wjLevel,timeStamp)
  429. return
  430. end
  431. self:SendClimbingTowerEndReq(battleTime,self.curChallengeLevel,timeStamp)
  432. end
  433. function ClimbingTowerDataMgr:EnterBattle_WJ(towerLevel, factorList)
  434. local scenceName = "scene_climbingtower"
  435. local bgmName = "bgm_08"
  436. local wjinfo = self:GetCurWJTowerInfo()
  437. local NpcList = wjinfo.npcList
  438. local maxFight = 120
  439. --local levelInfo = self:FindLevelData(towerLevel)
  440. local teams = ManagerContainer.DataMgr.UserData:GetTeamData(true);
  441. if teams ~= nil then
  442. ManagerContainer.LuaGameMgr:SetTeamData(teams, {false})
  443. end
  444. ManagerContainer.LuaGameMgr:RefreshTeamData()
  445. self.curMaxFightingTime = maxFight
  446. local curOurActors = {}
  447. local curEnemyActors = {}
  448. local teams = ManagerContainer.DataMgr.UserData:GetTeamData(true)
  449. if teams ~= nil then
  450. -- 会有技能 没有即使更新 此处同步属性
  451. ManagerContainer.LuaGameMgr:SetTeamData(teams, {true})
  452. -- 打印
  453. for i = 1, #teams do
  454. Log("ClimbingTowerDataMgr EnterBattle RoleID = " .. tostring(teams[i].uid))
  455. Log("Pet Id" .. tostring(petId))
  456. local Skills = teams[i].skills
  457. for i = 1, #Skills do
  458. local skillId = Skills[i].skillId
  459. local petId = Skills[i].petId
  460. Log("Role Skill" .. tostring(skillId))
  461. end
  462. end
  463. end
  464. local ourActors = System.Array.CreateInstance(Enum.TypeInfo.ActorData, #teams)
  465. for i = 1, #teams do
  466. local actor = ManagerContainer.LuaActorDataMgr:GetActorsById(teams[i].uid, teams[i].id)
  467. -- 增加对应压制mark
  468. ManagerContainer.DataMgr.UserData:SetActorPveMark(teams[i].uid, actor)
  469. ourActors[i - 1] = actor
  470. curOurActors[#curOurActors + 1] = actor
  471. end
  472. local cfg = self:GetWjRewordCfgByLv(self.wjLevel)
  473. local buffValue = self:GetWjBossbuffValueByCfg(cfg)
  474. local enemyActors = System.Array.CreateInstance(Enum.TypeInfo.ActorData, #NpcList)
  475. for i = 1, #NpcList do
  476. local npcInfo = NpcList[i]
  477. local actor = ManagerContainer.LuaActorDataMgr:CreateNpc(10000 + i, npcInfo.npcId, npcInfo.npcPos,
  478. npcInfo.npcLevel)
  479. if actor ~= nil then
  480. actor.IsBoss = npcInfo.isBoss
  481. if buffValue > 0 then
  482. ManagerContainer.LuaBattleMgr:AddBuffToActor_New(actor,true,self:CreateBossBuffcfg(buffValue))
  483. end
  484. enemyActors[i - 1] = actor
  485. curEnemyActors[#curEnemyActors + 1] = actor
  486. end
  487. end
  488. local battleFactors = System.Array.CreateInstance(Enum.TypeInfo.ValType, #factorList)
  489. for i = 1, #factorList do
  490. local factor = ValType.New(factorList[i].key, factorList[i].value)
  491. battleFactors[i - 1] = factor
  492. end
  493. self.curEnterBattleTime = Time.realtimeSinceStartup
  494. self.isPlayRecord = false
  495. self:InitEndBattleCondition()
  496. ManagerContainer.LuaGameMgr:EnterClimbingTowerBattle(scenceName, bgmName, maxFight, ourActors, enemyActors,
  497. self.battleEndCondList, nil, battleFactors)
  498. end
  499. function ClimbingTowerDataMgr:CreateBossBuffcfg(value)
  500. return {buffEffect = {{6,value}}}
  501. end
  502. function ClimbingTowerDataMgr:CreateNpcList(npclist, lv)
  503. local ClimbingTowerNpcData = require("ClimbingTower/ClimbingTowerNpcData")
  504. local npcs = {}
  505. for i = 1, #npclist, 1 do
  506. npcs[#npcs + 1] = ClimbingTowerNpcData:new(npclist[i], lv)
  507. end
  508. return npcs
  509. end
  510. function ClimbingTowerDataMgr:GetTowerMode()
  511. if self.towerMode == nil then
  512. self.towerMode = 0
  513. end
  514. return self.towerMode
  515. end
  516. function ClimbingTowerDataMgr:SetTowerMode(mode)
  517. self.towerMode = mode
  518. end
  519. function ClimbingTowerDataMgr:GetCurWJTowerInfo()
  520. local info = {}
  521. local npclv = math.floor(self.wjLevel*6.7 + 0.5)
  522. info.npcList = self:CreateNpcList({{70001, 1}, {70006, 4}, {70001, 3}, {70001, 2}}, npclv)
  523. info.lv = self.wjLevel
  524. return info
  525. end
  526. function ClimbingTowerDataMgr:GetTopTowerUnlockLv()
  527. return 1001
  528. end
  529. function ClimbingTowerDataMgr:GetWjTowerUnlockLv()
  530. return 1001
  531. end
  532. function ClimbingTowerDataMgr:GetWjIsUnlock()
  533. return true
  534. end
  535. function ClimbingTowerDataMgr:GetModelockInfo(mode)
  536. local lockInfo ={isunlock = true, unlockLv = 0}
  537. if mode == 1 then
  538. lockInfo.isunlock = self:FindLevelIsPassed()
  539. lockInfo.unlockLv = self:GetTopTowerUnlockLv()
  540. elseif mode == 2 then
  541. lockInfo.isunlock = self:GetWjIsUnlock()
  542. lockInfo.unlockLv = self:GetWjTowerUnlockLv()
  543. end
  544. return lockInfo
  545. end
  546. function ClimbingTowerDataMgr:GetCurWjLevel()
  547. return self.wjLevel
  548. end
  549. function ClimbingTowerDataMgr:SetCurWjLevel(lv)
  550. self.wjLevel = lv
  551. end
  552. function ClimbingTowerDataMgr:GetWjRewordCfgByLv(lv)
  553. local cfgmgr = ManagerContainer.CfgMgr
  554. local cfg = nil
  555. if self.wjRewordCfg and cfgmgr:LevelISWjRewordCfg(self.wjRewordCfg,lv) then
  556. cfg = self.wjRewordCfg
  557. else
  558. cfg = cfgmgr:GetWjRewordByLv(lv)
  559. end
  560. return cfg
  561. end
  562. function ClimbingTowerDataMgr:GetWjRewordByLv(lv)
  563. local cfg = self:GetWjRewordCfgByLv(lv)
  564. local maxLv = cfg.levels[1][2]
  565. local minLv = cfg.levels[1][1]
  566. -- {cfgId = reward[1], num = reward[2]}
  567. local reword = {}
  568. for _, v in pairs(cfg.reward) do
  569. local item = {cfgId = v[1], num = v[2]}
  570. reword[item.cfgId] = item
  571. end
  572. for _, v in pairs(cfg.levelReward) do
  573. local item = {cfgId = v[1], num = v[2]}
  574. local num = (lv - minLv) * item.num
  575. if reword[item.cfgId] == nil then
  576. item.num = num
  577. reword[item.cfgId] = item
  578. else
  579. local temp = reword[item.cfgId]
  580. temp.num = temp.num + num
  581. end
  582. end
  583. local ret = {}
  584. for _, v in pairs(reword) do
  585. table.insert(ret,v)
  586. end
  587. return ret
  588. end
  589. function ClimbingTowerDataMgr:GetCurWjReword()
  590. return self:GetWjRewordByLv(self.wjLevel)
  591. end
  592. function ClimbingTowerDataMgr:GetCurSpecialReword(isShow)
  593. local cfg = self:GetWjRewordCfgByLv(self.wjLevel)
  594. if isShow then
  595. return ManagerContainer.CfgMgr:GetReward(cfg.specialReward)
  596. end
  597. return cfg.specialReward
  598. end
  599. function ClimbingTowerDataMgr:GetWjBossbuffValueByCfg(cfg)
  600. local minLv = cfg.levels[1][1]
  601. local num = cfg.basicDF
  602. num = num + cfg.incrementalDf * (self.wjLevel - minLv)
  603. return num
  604. end
  605. -- =================================无尽协议===================================
  606. function ClimbingTowerDataMgr:SendWjBeginReq()
  607. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_CLIMBING_TOWER_WJ_BEGIN_REQ, {tower_level=self.wjLevel})
  608. end
  609. function ClimbingTowerDataMgr:OnWjBeginAck(data)
  610. LogError("OnWjBeginAck ----- " ..Inspect(data))
  611. self:EnterBattle_WJ(data.tower_level,{})
  612. end
  613. function ClimbingTowerDataMgr:SendWjEndReq(loadingTime,towerLevel,timeStamp)
  614. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_CLIMBING_TOWER_WJ_END_REQ, {loading_time = loadingTime, tower_level = towerLevel,record_time_stamp = timeStamp})
  615. end
  616. function ClimbingTowerDataMgr:OnWjEndAck(data)
  617. LogError("OnWjEndAck ----- " ..Inspect(data))
  618. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIClimbingTowerBattleWin,{Enum.UIPageName.UIClimbingTower,nil})
  619. end
  620. function ClimbingTowerDataMgr:SendWjRankReq()
  621. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_CLIMBING_TOWER_WJ_RANK_REQ, {})
  622. end
  623. function ClimbingTowerDataMgr:OnWjRankAck(data)
  624. LogError("OnWjRankAck ----- " ..Inspect(data))
  625. end
  626. function ClimbingTowerDataMgr:OnWjBossNtf(data)
  627. LogError("OnWjBossNtf ----- " ..Inspect(data))
  628. self.wjBossInfo = {}
  629. self.wjLevel = data.wj_level
  630. for i = 1, 4, 1 do
  631. local boss = {data["boss"..i] ,i}
  632. table.insert(self.wjBossInfo,boss)
  633. end
  634. end
  635. -- =================================无尽协议===================================
  636. function ClimbingTowerDataMgr:GetCurWjLevel()
  637. return self.wjLevel
  638. end
  639. function ClimbingTowerDataMgr:GetCurBattleBuffInfo()
  640. if self.wjBattleBuffInfo == nil then
  641. self.wjBattleBuffInfo =
  642. {
  643. buff1 = 0,
  644. buff2 = 1,
  645. buff3 = 0,
  646. }
  647. end
  648. return self.wjBattleBuffInfo
  649. end
  650. function ClimbingTowerDataMgr:SetCurBattleBuffInfo(type,lv)
  651. self.wjBattleBuffInfo['buff'..type] = lv
  652. self:RefBattleInfo()
  653. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.WJ_ON_BATTLE_CHANGE);
  654. end
  655. function ClimbingTowerDataMgr:RefBattleInfo()
  656. --self.AllBattleInfos = nil
  657. local cfgs = ManagerContainer.CfgMgr:GetWjBattleBuffCfg()
  658. local buffinfo = self:GetCurBattleBuffInfo()
  659. local allInfo = {value = 0,infos ={}}
  660. local value = 0
  661. for i = 1, 3, 1 do
  662. local tempInfo = {}
  663. local cfg = cfgs[i]
  664. tempInfo.curLv = buffinfo["buff" .. i]
  665. tempInfo.id = i
  666. tempInfo.lvEffect = cfg.BuffEffect[1][2]
  667. tempInfo.curEffect = tempInfo.lvEffect * tempInfo.curLv
  668. tempInfo.max = cfg.Max
  669. tempInfo.cost = cfg.Cost[tempInfo.curLv + 1]
  670. allInfo.infos[i] = tempInfo
  671. if tempInfo.curLv > 0 then
  672. value = value + tempInfo.curEffect
  673. end
  674. end
  675. allInfo.value = value
  676. LogError(Inspect(allInfo))
  677. self.AllBattleInfos = allInfo
  678. end
  679. function ClimbingTowerDataMgr:GetCurAllBattleBuffInfo()
  680. if self.AllBattleInfos == nil then
  681. self:RefBattleInfo()
  682. end
  683. return self.AllBattleInfos
  684. end
  685. return ClimbingTowerDataMgr