HundredDojoDataMgr.lua 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688
  1. local HundredDojoDataMgr = class("HundredDojoDataMgr", require("DataBase"))
  2. local HundredDojoAreaData = require('HundredDojo/HundredDojoAreaData')
  3. local HundredDojoLogData = require('HundredDojo/HundredDojoLogData')
  4. local CreateActorSystem = require("CreateActorSystem")
  5. local REQ_CD = 1000
  6. function HundredDojoDataMgr:ctor()
  7. end
  8. function HundredDojoDataMgr:Clear()
  9. self.challengeCount = 0
  10. self.buyChallengeCount = 0
  11. self.baseRewardTime = nil
  12. self.logState = false
  13. self.selfAreaData = nil
  14. self.tempAreaData = nil -- 在自身未占道场数据时,用于填充数据进道场列表中
  15. self.areaDatas = nil
  16. self.areaMaxId = nil
  17. self.logData = nil
  18. self.rewardRedPoint = nil
  19. if self.rewardTimer then
  20. self.rewardTimer:Stop()
  21. self.rewardTimer = nil
  22. end
  23. end
  24. function HundredDojoDataMgr:Destroy()
  25. self.challengeCount = nil
  26. self.buyChallengeCount = nil
  27. self.baseRewardTime = nil
  28. self.logState = nil
  29. self.selfAreaData = nil
  30. self.tempAreaData = nil
  31. self.areaDatas = nil
  32. self.areaMaxId = nil
  33. self.logData = nil
  34. self.rewardRedPoint = nil
  35. if self.rewardTimer then
  36. self.rewardTimer:Stop()
  37. self.rewardTimer = nil
  38. end
  39. self.lastSendMsgTimeMap = nil
  40. self:UnRegisterNetEvents()
  41. end
  42. function HundredDojoDataMgr:RegisterNetEvents()
  43. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_DAO_CHANG100_DATA_CHANG_NTF, self.OnDataChangeNtf, self)
  44. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_DAO_CHANG100_PLAYER_INFO_ACK, self.OnAreaInfoAck, self)
  45. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_DAO_CHANG100_ACK, self.OnAreaInfosAck, self)
  46. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_DAO_CHANG100_LOG_ACK, self.OnBattleLogAck, self)
  47. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_DAO_CHANG100_TIME_REWARD_ACK, self.OnGetRewardAck, self)
  48. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_DAO_CHANG100_BUY_CHALLENGE_COUNT_ACK, self.OnBuyChallengeCountAck, self)
  49. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_DAO_CHANG100_CHALLENGE_ACK, self.OnChallengeAck, self)
  50. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_DAO_CHANG100_SET_TIPS_ACK, self.OnSloganAck, self)
  51. end
  52. function HundredDojoDataMgr:UnRegisterNetEvents()
  53. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_DAO_CHANG100_DATA_CHANG_NTF)
  54. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_DAO_CHANG100_PLAYER_INFO_ACK)
  55. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_DAO_CHANG100_ACK)
  56. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_DAO_CHANG100_LOG_ACK)
  57. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_DAO_CHANG100_TIME_REWARD_ACK)
  58. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_DAO_CHANG100_BUY_CHALLENGE_COUNT_ACK)
  59. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_DAO_CHANG100_CHALLENGE_ACK)
  60. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_DAO_CHANG100_SET_TIPS_ACK)
  61. end
  62. function HundredDojoDataMgr:OnDataChangeNtf(data)
  63. -- LogError('[wboy] SC_DAO_CHANG100_DATA_CHANG_NTF ' .. Inspect(data))
  64. if ManagerContainer.NetManager:IsErrorData(data) then
  65. return
  66. end
  67. local changed, oldId, newId = self:ChangeSelfAreaData(data.self_pos_data)
  68. local challengeCount, buyChallengeCount, rewardTime, logState, lastBeAttackUid, slogan
  69. if data.ntf_data then
  70. local challengeCount1 = data.ntf_data.challenge_count or 0
  71. local challengeCount2 = data.ntf_data.challenge_buy_count or 0
  72. challengeCount = challengeCount1 + challengeCount2
  73. buyChallengeCount = data.ntf_data.buy_count or 0
  74. rewardTime = data.ntf_data.base_reward_time
  75. logState = data.ntf_data.log_state or false
  76. lastBeAttackUid = data.ntf_data.last_attack_uid
  77. slogan = data.ntf_data.tips_desc or ''
  78. else
  79. challengeCount = 0
  80. buyChallengeCount = 0
  81. rewardTime = nil
  82. logState = false
  83. lastBeAttackUid = nil
  84. slogan = ''
  85. end
  86. local changed1 = (self.challengeCount ~= challengeCount)
  87. local changed2 = (self.baseRewardTime ~= rewardTime)
  88. local changed3 = (self.logState ~= logState)
  89. -- local changed4 = (self.lastBeAttackUid ~= lastBeAttackUid)
  90. local changed5 = (self.slogan ~= slogan)
  91. self.challengeCount = challengeCount
  92. self.buyChallengeCount = buyChallengeCount
  93. self.baseRewardTime = rewardTime
  94. self.logState = logState
  95. self.lastBeAttackUid = lastBeAttackUid
  96. self.slogan = slogan
  97. if changed then
  98. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.HUNDRED_DOJO_SELF_AREA_DATA_CHANGED, oldId, newId)
  99. end
  100. if changed1 then
  101. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.HUNDRED_DOJO_CHALLENGE_NUM_CHANGED)
  102. end
  103. if changed2 then
  104. self:HandleRewardRedPoint()
  105. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.HUNDRED_DOJO_BASE_TIME_CHANGED)
  106. end
  107. if changed3 then
  108. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.HundredDojo, logState)
  109. end
  110. if changed5 then
  111. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.HUNDRED_DOJO_SLOGAN_CHANGED)
  112. end
  113. end
  114. function HundredDojoDataMgr:OnAreaInfoAck(data)
  115. -- LogError('[wboy] SC_DAO_CHANG100_SELF_INFO_ACK ' .. Inspect(data))
  116. if ManagerContainer.NetManager:IsErrorData(data) then
  117. return
  118. end
  119. local uid = data.player_uid
  120. local areaId = nil
  121. if data.player_pos_data then
  122. areaId = data.player_pos_data.pos_idx
  123. if areaId and areaId <= 0 then
  124. areaId = nil
  125. end
  126. end
  127. if int64.equals(data.player_uid, ManagerContainer.DataMgr.UserData:GetUserId()) then
  128. local changed, oldId, newId = self:ChangeSelfAreaData(data.player_pos_data)
  129. if changed then
  130. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.HUNDRED_DOJO_SELF_AREA_DATA_CHANGED, oldId, newId)
  131. end
  132. else
  133. if data.player_pos_data then
  134. local id = data.player_pos_data.pos_idx
  135. local changed, oldId, newId = self:ChangeAreaData(self:GetAreaDataById(id), data.player_pos_data)
  136. if changed then
  137. local changedIds = {}
  138. if oldId then
  139. changedIds[#changedIds + 1] = oldId
  140. end
  141. if newId and oldId ~= newId then
  142. changedIds[#changedIds + 1] = newId
  143. end
  144. if #changedIds > 0 then
  145. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.HUNDRED_DOJO_OTHER_AREA_DATA_CHANGED, changedIds)
  146. end
  147. end
  148. end
  149. end
  150. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.HUNDRED_DOJO_QUERY_AREA_DATA_COMPLETED, uid, areaId)
  151. end
  152. function HundredDojoDataMgr:OnAreaInfosAck(data)
  153. -- LogError('[wboy] SC_DAO_CHANG100_ACK ' .. Inspect(data))
  154. if ManagerContainer.NetManager:IsErrorData(data) then
  155. return
  156. end
  157. local changedIds = {}
  158. local areaInfos = data.pos_data_list
  159. if areaInfos then
  160. for i = 1, #areaInfos do
  161. local areaInfo = areaInfos[i]
  162. if areaInfo then
  163. local id = areaInfo.pos_idx
  164. local childChanged, oldId, newId = self:ChangeAreaData(self:GetAreaDataById(id), areaInfo)
  165. if childChanged then
  166. if not CommonUtil.EleInTable(oldId, changedIds) then
  167. changedIds[#changedIds + 1] = oldId
  168. end
  169. if oldId ~= newId then
  170. if not CommonUtil.EleInTable(newId, changedIds) then
  171. changedIds[#changedIds + 1] = newId
  172. end
  173. end
  174. end
  175. end
  176. end
  177. end
  178. if #changedIds > 0 then
  179. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.HUNDRED_DOJO_OTHER_AREA_DATA_CHANGED, changedIds)
  180. end
  181. end
  182. function HundredDojoDataMgr:OnBattleLogAck(data)
  183. -- LogError('[wboy] SC_DAO_CHANG100_LOG_ACK ' .. Inspect(data))
  184. if ManagerContainer.NetManager:IsErrorData(data) then
  185. return
  186. end
  187. if not self.logData then
  188. self.logData = HundredDojoLogData:new()
  189. end
  190. local changed, startChanged, endChanged = self.logData:SetLogs(data.log_list, data.is_end)
  191. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.HUNDRED_DOJO_LOG_CHANGED, changed, startChanged, endChanged)
  192. end
  193. function HundredDojoDataMgr:OnGetRewardAck(data)
  194. -- LogError('[wboy] SC_DAO_CHANG100_TIME_REWARD_ACK ' .. Inspect(data))
  195. if ManagerContainer.NetManager:IsErrorData(data) then
  196. return
  197. end
  198. local rewardNum = data.reward_num
  199. local rewardList = data.reward_list
  200. if not rewardNum or rewardNum <= 0 or not rewardList or #rewardList <= 0 then
  201. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay(250)
  202. return
  203. end
  204. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.HUNDRED_DOJO_GET_REWARD_COMPLETED, rewardNum, rewardList)
  205. end
  206. function HundredDojoDataMgr:OnBuyChallengeCountAck(data)
  207. -- LogError('[wboy] SC_DAO_CHANG100_BUY_CHALLENGE_COUNT_ACK ' .. Inspect(data))
  208. if ManagerContainer.NetManager:IsErrorData(data) then
  209. return
  210. end
  211. end
  212. function HundredDojoDataMgr:OnChallengeAck(data)
  213. --LogError('[wboy] SC_DAO_CHANG100_CHALLENGE_ACK ' .. Inspect(data))
  214. if ManagerContainer.NetManager:IsErrorData(data) then
  215. if data.challenge_pos_data then
  216. local _, changed, oldId, newId = self:ChangeAreaData(self:GetAreaDataById(data.pos_idx), data.challenge_pos_data)
  217. if changed then
  218. local changedIds = {}
  219. changedIds[#changedIds + 1] = oldId
  220. if newId ~= oldId then
  221. changedIds[#changedIds + 1] = newId
  222. end
  223. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.HUNDRED_DOJO_OTHER_AREA_DATA_CHANGED, changedIds)
  224. end
  225. end
  226. return
  227. end
  228. if data.challenge_pos_data then
  229. local _, changed, oldId, newId = self:ChangeAreaData(self:GetAreaDataById(data.pos_idx), data.challenge_pos_data)
  230. if changed then
  231. local changedIds = {}
  232. changedIds[#changedIds + 1] = oldId
  233. if newId ~= oldId then
  234. changedIds[#changedIds + 1] = newId
  235. end
  236. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.HUNDRED_DOJO_OTHER_AREA_DATA_CHANGED, changedIds)
  237. end
  238. elseif data.fight_info then
  239. local actorSystem = CreateActorSystem:new()
  240. actorSystem:ParseFightRoleInfo(data.fight_info)
  241. self:EnterBattle(data.pos_idx, actorSystem)
  242. end
  243. self:ReportChallenge(true)
  244. end
  245. function HundredDojoDataMgr:ReportChallenge(success)
  246. if not SDKMgr.Instance:IsReportAction() then
  247. return
  248. end
  249. local datas = System.Collections.Generic.Dictionary_object_object()
  250. datas:Add('event', 'mj_daochang')
  251. datas:Add('is_achieve', (success and 1 or 0))
  252. --SDKMgr.Instance:ReportAction(datas)
  253. end
  254. function HundredDojoDataMgr:OnSloganAck(data)
  255. -- LogError('[wboy] SC_DAO_CHANG100_SET_TIPS_ACK ' .. Inspect(data))
  256. if ManagerContainer.NetManager:IsErrorData(data) then
  257. return
  258. end
  259. end
  260. function HundredDojoDataMgr:SendGetAreaInfoReq(uid)
  261. if not self:IsCanSend(1) then return false end
  262. if int64.equals(uid, ManagerContainer.DataMgr.UserData:GetUserId()) then
  263. if self.selfAreaData then
  264. self.selfAreaData:SetValidState(false)
  265. end
  266. end
  267. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_DAO_CHANG100_PLAYER_INFO_REQ, {player_uid = uid})
  268. return true
  269. end
  270. function HundredDojoDataMgr:SendGetOtherInfosReq(areaIds)
  271. if not self:IsCanSend(2) then return false end
  272. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_DAO_CHANG100_REQ, {pos_idx_list = areaIds})
  273. return true
  274. end
  275. function HundredDojoDataMgr:SendGetLogReq(beginTime)
  276. if not self:IsCanSend(3) then return false end
  277. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_DAO_CHANG100_LOG_REQ, {begin_time = beginTime})
  278. return true
  279. end
  280. function HundredDojoDataMgr:SendGetRewardReq()
  281. if not self:IsCanSend(4) then return false end
  282. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_DAO_CHANG100_TIME_REWARD_REQ)
  283. return true
  284. end
  285. function HundredDojoDataMgr:SendBuyChallengeNumReq()
  286. if not self:IsCanSend(5) then return false end
  287. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_DAO_CHANG100_BUY_CHALLENGE_COUNT_REQ)
  288. return true
  289. end
  290. function HundredDojoDataMgr:SendChallengeReq(id)
  291. if not self:IsCanSend(6) then return false end
  292. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_DAO_CHANG100_CHALLENGE_REQ, {pos_idx = id})
  293. return true
  294. end
  295. function HundredDojoDataMgr:SendChallengeResultReq(id, uid, battleTime, battleResult)
  296. if not self:IsCanSend(7) then return false end
  297. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_DAO_CHANG100_CHALLENGE_RESULT_REQ, {pos_idx = id, pos_uid = uid, battle_time = battleTime, battle_result = battleResult})
  298. return true
  299. end
  300. function HundredDojoDataMgr:SendChangeSlogan(slogan)
  301. if not self:IsCanSend(8) then return false end
  302. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_DAO_CHANG100_SET_TIPS_REQ, {tip_desc = slogan})
  303. return true
  304. end
  305. function HundredDojoDataMgr:IsCanSend(key, cdTime)
  306. local curTime = ManagerContainer.LuaTimerMgr:CurLuaServerTime()
  307. if not self.lastSendMsgTimeMap then
  308. self.lastSendMsgTimeMap = {}
  309. self.lastSendMsgTimeMap[key] = curTime
  310. return true
  311. end
  312. local lastTime = self.lastSendMsgTimeMap[key]
  313. if lastTime then
  314. local cd = cdTime or REQ_CD
  315. if (curTime - lastTime) < cd then
  316. return false
  317. end
  318. end
  319. self.lastSendMsgTimeMap[key] = curTime
  320. return true
  321. end
  322. function HundredDojoDataMgr:InitData(data)
  323. if data then
  324. local challengeCount1 = data.challenge_count or 0
  325. local challengeCount2 = data.challenge_buy_count or 0
  326. self.challengeCount = challengeCount1 + challengeCount2
  327. self.buyChallengeCount = data.buy_count or 0
  328. self.baseRewardTime = data.base_reward_time
  329. self.logState = data.log_state or false
  330. self.lastBeAttackUid = data.last_attack_uid
  331. self.slogan = data.tips_desc or ''
  332. else
  333. self.challengeCount = 0
  334. self.buyChallengeCount = 0
  335. self.baseRewardTime = nil
  336. self.logState = false
  337. self.lastBeAttackUid = nil
  338. self.slogan = ''
  339. end
  340. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.HundredDojo, self.logState)
  341. self:HandleRewardRedPoint(true)
  342. end
  343. function HundredDojoDataMgr:HandleRewardRedPoint(first)
  344. local rewardMaxTime = GlobalConfig.Instance:GetConfigIntValue(255) * 3600
  345. local remainTime = 0
  346. if self.baseRewardTime and self.baseRewardTime > 0 then
  347. remainTime = ManagerContainer.LuaTimerMgr:CurLuaServerTime() - self.baseRewardTime
  348. remainTime = remainTime / 1000
  349. if type(remainTime) == 'userdata' then
  350. remainTime = #remainTime
  351. end
  352. end
  353. if remainTime >= rewardMaxTime then
  354. if not self.rewardRedPoint then
  355. if self.rewardTimer then
  356. self.rewardTimer:Stop()
  357. self.rewardTimer = nil
  358. end
  359. self.rewardRedPoint = true
  360. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.HundredDojoReward, true)
  361. end
  362. else
  363. remainTime = (rewardMaxTime - remainTime)
  364. if self.rewardRedPoint then
  365. self.rewardRedPoint = nil
  366. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.HundredDojoReward, false)
  367. elseif first then
  368. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.HundredDojoReward, false)
  369. end
  370. if self.rewardTimer then
  371. self.rewardTimer.time = remainTime
  372. self.rewardTimer.duration = remainTime
  373. else
  374. self.rewardTimer = Timer.New(slot(self.HandleRewardRedPoint, self), remainTime, 1)
  375. end
  376. if not self.rewardTimer.running then
  377. self.rewardTimer:Start()
  378. end
  379. end
  380. end
  381. function HundredDojoDataMgr:ChangeSelfAreaData(msgData)
  382. local oldId = nil
  383. local newId = nil
  384. if self.selfAreaData then
  385. oldId = self.selfAreaData.id
  386. if oldId and oldId <= 0 then
  387. oldId = nil
  388. end
  389. else
  390. self.selfAreaData = HundredDojoAreaData:new()
  391. end
  392. if msgData then
  393. self.selfAreaData:SetData(msgData)
  394. else
  395. self.selfAreaData:Clear()
  396. self.selfAreaData:SetValidState(true)
  397. end
  398. newId = self.selfAreaData.id
  399. if newId and newId <= 0 then
  400. newId = nil
  401. end
  402. if not self.areaDatas then
  403. self.areaDatas = {}
  404. end
  405. if oldId ~= newId then
  406. if newId then
  407. local areaData = self.areaDatas[newId]
  408. if areaData then
  409. if oldId then
  410. areaData:Clear()
  411. areaData.id = oldId
  412. areaData:SetValidState(true)
  413. self.areaDatas[oldId] = areaData
  414. else
  415. areaData:Dispose()
  416. self.tempAreaData = areaData
  417. end
  418. end
  419. self.areaDatas[newId] = self.selfAreaData
  420. else
  421. local areaData = self.areaDatas[oldId]
  422. if areaData == self.selfAreaData then
  423. if not self.tempAreaData then
  424. self.tempAreaData = HundredDojoAreaData:new()
  425. end
  426. self.tempAreaData.id = oldId
  427. self.tempAreaData:Clear()
  428. self.tempAreaData:SetValidState(true)
  429. self.areaDatas[oldId] = self.tempAreaData
  430. self.tempAreaData = nil
  431. self.selfAreaData:Clear()
  432. self.selfAreaData:SetValidState(true)
  433. else
  434. LogError('[wboy] data is expection self area data and areaDatas is not same. id : ' .. tostring(oldId))
  435. end
  436. end
  437. end
  438. return true, oldId, newId
  439. end
  440. function HundredDojoDataMgr:ChangeAreaData(areaData, msgData)
  441. if not msgData then
  442. if areaData then
  443. local oldId = areaData.id
  444. areaData:SetValidState(false)
  445. local id = areaData.id
  446. return areaData, true, oldId, id
  447. else
  448. return areaData, false, 0, 0
  449. end
  450. end
  451. if not areaData then
  452. areaData = HundredDojoAreaData:new()
  453. end
  454. if not self.areaDatas then
  455. self.areaDatas = {}
  456. end
  457. local oldId = areaData.id
  458. local changed = areaData:SetData(msgData)
  459. local id = areaData.id
  460. if changed then
  461. if oldId ~= id then
  462. if id and id > 0 then
  463. local tempAreaData = self.areaDatas[id]
  464. if tempAreaData then
  465. if oldId and oldId > 0 then
  466. tempAreaData:Clear()
  467. tempAreaData.id = oldId
  468. tempAreaData:SetValidState(true)
  469. self.areaDatas[oldId] = tempAreaData
  470. end
  471. end
  472. self.areaDatas[id] = areaData
  473. end
  474. end
  475. end
  476. return changed, oldId, id
  477. end
  478. function HundredDojoDataMgr:GetAreaMaxId()
  479. if not self.areaMaxId then
  480. self.areaMaxId = 0
  481. for key, _ in pairs(ManagerContainer.CfgMgr:GetHundredDojoCfg()) do
  482. if key > self.areaMaxId then
  483. self.areaMaxId = key
  484. end
  485. end
  486. end
  487. return self.areaMaxId
  488. end
  489. function HundredDojoDataMgr:GetSelfAreaData()
  490. return self.selfAreaData
  491. end
  492. function HundredDojoDataMgr:GetAreaDataById(id)
  493. if not self.areaDatas then
  494. return nil
  495. end
  496. return self.areaDatas[id]
  497. end
  498. function HundredDojoDataMgr:GetChallengeCount()
  499. return self.challengeCount
  500. end
  501. function HundredDojoDataMgr:GetBuyChallengeCount()
  502. return self.buyChallengeCount
  503. end
  504. function HundredDojoDataMgr:GetBaseRewardStartTime()
  505. return self.baseRewardTime
  506. end
  507. function HundredDojoDataMgr:GetLogData()
  508. return self.logData
  509. end
  510. function HundredDojoDataMgr:GetLastBeAttackUid()
  511. return self.lastBeAttackUid
  512. end
  513. function HundredDojoDataMgr:GetSlogan()
  514. return self.slogan
  515. end
  516. function HundredDojoDataMgr:SetLogState(state)
  517. if self.logState ~= state then
  518. self.logState = state
  519. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.HundredDojo, state)
  520. end
  521. end
  522. ----------------------------------------- 战斗 -----------------------------------------
  523. function HundredDojoDataMgr:EnterBattle(areaId, actorSystem)
  524. self.areaId = areaId
  525. self.actorSystem = actorSystem
  526. if not self.actorSystem.userData.inited then
  527. return
  528. end
  529. ManagerContainer.LuaGameMgr:RefreshTeamData()
  530. self.matchFighterName = actorSystem:GetUserNickname()
  531. self.enemyActors = {}
  532. if actorSystem:GetPlayerActorParam() ~= nil then
  533. self.enemyActors[#self.enemyActors+1] = actorSystem:GetPlayerActorParam()
  534. end
  535. local fellowActors = actorSystem:GetFellowActorParam()
  536. if fellowActors ~= nil then
  537. for k,actor in pairs(fellowActors) do
  538. self.enemyActors[#self.enemyActors +1] = actor
  539. end
  540. end
  541. self.ourMembers = {}
  542. local actorData = ManagerContainer.LuaActorDataMgr:GetActorData(true, ManagerContainer.DataMgr.UserData:GetId())
  543. if actorData then
  544. self.ourMembers[#self.ourMembers + 1] = actorData
  545. end
  546. local list = ManagerContainer.DataMgr.PartnerData:GetPartnerDatas()
  547. if list ~= nil then
  548. for _,v in pairs(list) do
  549. if v.owned and v.isBattle then
  550. actorData = ManagerContainer.LuaActorDataMgr:GetActorData(false, v.configId)
  551. if actorData then
  552. self.ourMembers[#self.ourMembers + 1] = actorData
  553. end
  554. end
  555. end
  556. end
  557. local selfMaskDatas = nil
  558. local enemyPvPVal = actorSystem:GetSkillPvPVal()
  559. local OurPvPVal = ManagerContainer.DataMgr.UserData:GetCurrRoleSkillPress()
  560. local IsPresspoint,BuffId = ManagerContainer.CfgMgr:GetPresspointPvPCfg(OurPvPVal,enemyPvPVal)
  561. if BuffId > -1 then
  562. --设置压制ID
  563. --LogError("添加压制markid"..tostring(BuffId))
  564. selfMaskDatas = {}
  565. selfMaskDatas[1] = GvGMark.New(BuffId, 1)
  566. end
  567. local limitedTime = self:GetLimitedTime()
  568. local battleEndCondList = System.Array.CreateInstance(Enum.TypeInfo.BattleEndCondition, 2)
  569. battleEndCondList[0] = BattleEndCondition.New(Constants.EndBattle_By_UndeadCount, Constants.ResultType_Normal)
  570. battleEndCondList[1] = BattleEndCondition.New(Constants.EndBattle_By_BattleTime, limitedTime, Constants.ResultType_Normal, false)
  571. ManagerContainer.LuaGameMgr:EnterHundredDojo('scenes_test_pvp', self.ourMembers, self.enemyActors, limitedTime,selfMaskDatas,IsPresspoint,OurPvPVal+enemyPvPVal, battleEndCondList)
  572. end
  573. function HundredDojoDataMgr:BattleEnd(result)
  574. local battleTime = LuaBattleBridge.GetFightingTime()
  575. if battleTime < 0 then
  576. battleTime = 0
  577. else
  578. battleTime = Mathf.Ceil(battleTime)
  579. end
  580. self:SendChallengeResultReq(self.areaId, self.actorSystem and self.actorSystem:GetUserId() or nil, battleTime, (result == 1))
  581. self.actorSystem = nil
  582. self.matchFighterName = nil
  583. self.enemyActors = nil
  584. self.ourMembers = nil
  585. end
  586. function HundredDojoDataMgr:GetMatchFighterName()
  587. return self.matchFighterName
  588. end
  589. function HundredDojoDataMgr:GetOurMembers()
  590. return self.ourMembers
  591. end
  592. function HundredDojoDataMgr:GetEnemyMembers()
  593. return self.enemyActors
  594. end
  595. function HundredDojoDataMgr:GetLimitedTime()
  596. return GlobalConfig.Instance:GetConfigIntValue(251)
  597. end
  598. function HundredDojoDataMgr:GetLastAttackAreaId()
  599. return self.areaId
  600. end
  601. function HundredDojoDataMgr:ClearLastAttackAreaId()
  602. self.areaId = nil
  603. end
  604. return HundredDojoDataMgr