ClimbingTowerDataMgr.lua 32 KB

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