ClimbingTowerDataMgr.lua 31 KB

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