GuildWarDataMgr.lua 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701
  1. local GuildWarDataMgr = class('GuildWarDataMgr', require('DataBase'))
  2. local GuildWarMatchMapData = require('GuildWar/GuildWarMatchMapData')
  3. local GuildWarBattleFieldData = require('GuildWar/GuildWarBattleFieldData')
  4. local GuildWarBattleRankData = require('GuildWar/GuildWarBattleRankData')
  5. local CreateActorSystem = require("CreateActorSystem")
  6. local REQ_GUILD_CD = 1000
  7. function GuildWarDataMgr:ctor()
  8. end
  9. function GuildWarDataMgr:Clear()
  10. if self.matchMapData then
  11. self.matchMapData:Clear()
  12. self.matchMapData = nil
  13. end
  14. if self.battleFieldData then
  15. self.battleFieldData:Clear()
  16. self.battleFieldData = nil
  17. end
  18. if self.battleRankData then
  19. self.battleRankData:Clear()
  20. self.battleRankData = nil
  21. end
  22. if self.battlingTimer then
  23. if self.battlingTimer.running then
  24. self.battlingTimer:Stop()
  25. end
  26. self.battlingTimer = nil
  27. end
  28. self.lastSendMsgTimeMap = nil
  29. self.isOpen = nil
  30. self.lastAttackBattleIdx = nil
  31. self.lastAttackAreaId = nil
  32. self.actorSystem = nil
  33. self.matchFighterName = nil
  34. self.ourMembers = nil
  35. self.enemyActors = nil
  36. end
  37. function GuildWarDataMgr:Destroy()
  38. self:UnRegisterNetEvents()
  39. self:Clear()
  40. end
  41. function GuildWarDataMgr:RegisterNetEvents()
  42. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_GUILD_BATTLE_CP_RANK_ACK, self.OnGuildWarCPRankAck, self)
  43. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_GUILD_BATTLE_STAGE_NTF, self.OnGuildWarDataStageNtf, self)
  44. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_GUILD_BATTLE_COUNT_PART_ACK, self.OnGuildWarMatchMapAck, self)
  45. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_GUILD_BATTLE_INFO_ACK, self.OnGuildWarFieldInfoAck, self)
  46. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_GUILD_BATTLE_PK_DATA_ACK, self.OnGuildWarScoreDataAck, self)
  47. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_GUILD_BATTLE_POS_IDX_LIST_ACK, self.OnGuildWarAreaDatasAck, self)
  48. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_GUILD_BATTLE_DATA_CHANGE_NTF, self.OnGuildWarAreaDataNtf, self)
  49. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_GUILD_BATTLE_CHALLENGE_ACK, self.OnGuildWarChallengeAck, self)
  50. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_GUILD_BATTLE_CHALLENGE_NTF, self.OnGuildWarChallengeNtf, self)
  51. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_GUILD_BATTLE_SETTING_ACK, self.OnGuildWarSettingAck, self)
  52. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_GUILD_BATTLE_BUY_CHALLENGE_ACK, self.OnGuildWarBuyChallengeAck, self)
  53. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_GUILD_BATTLE_REBORN_ACK, self.OnGuildWarBuyRebornAck, self)
  54. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_GUILD_BATTLE_BUY_BUFF_ACK, self.OnGuildWarBuyBuffAck, self)
  55. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_GUILD_BATTLE_LOG_ACK, self.OnGuildWarLogAck, self)
  56. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_GUILD_BATTLE_RANK_LIST_ACK, self.OnGuildWarRankAck, self)
  57. end
  58. function GuildWarDataMgr:UnRegisterNetEvents()
  59. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_GUILD_BATTLE_CP_RANK_ACK)
  60. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_GUILD_BATTLE_STAGE_NTF)
  61. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_GUILD_BATTLE_COUNT_PART_ACK)
  62. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_GUILD_BATTLE_INFO_ACK)
  63. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_GUILD_BATTLE_PK_DATA_ACK)
  64. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_GUILD_BATTLE_POS_IDX_LIST_ACK)
  65. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_GUILD_BATTLE_DATA_CHANGE_NTF)
  66. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_GUILD_BATTLE_CHALLENGE_ACK)
  67. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_GUILD_BATTLE_SETTING_ACK)
  68. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_GUILD_BATTLE_BUY_CHALLENGE_ACK)
  69. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_GUILD_BATTLE_REBORN_ACK)
  70. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_GUILD_BATTLE_BUY_BUFF_ACK)
  71. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_GUILD_BATTLE_LOG_ACK)
  72. end
  73. function GuildWarDataMgr:IsCanSend(key, cdTime)
  74. local curTime = ManagerContainer.LuaTimerMgr:CurLuaServerTime()
  75. if not self.lastSendMsgTimeMap then
  76. self.lastSendMsgTimeMap = {}
  77. self.lastSendMsgTimeMap[key] = curTime
  78. return true
  79. end
  80. local lastTime = self.lastSendMsgTimeMap[key]
  81. if lastTime then
  82. local cd = cdTime or REQ_GUILD_CD
  83. if (curTime - lastTime) < cd then
  84. return false
  85. end
  86. end
  87. self.lastSendMsgTimeMap[key] = curTime
  88. return true
  89. end
  90. function GuildWarDataMgr:CheckErrorCode(data)
  91. if not data then
  92. return 1
  93. end
  94. if data.error and data.error ~= Enum.NetErrorCode.ERROR_OK then
  95. if data.error == Enum.NetErrorCode.ERROR_GUILDBATTLE_NOT_IN_GUILDBATTLE then
  96. self:SetOpenState(false)
  97. return 3
  98. elseif data.error == Enum.NetErrorCode.ERROR_GUILDBATTLE_CUR_BATTLE_FINISH then
  99. if self.battleFieldData then
  100. if self.battleFieldData:IsSameBattleField(data) then
  101. if self.battleFieldData:ChangeFinishState(true) then
  102. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.GUILD_WAR_BATTLE_FIELD_ENDED, data.guild_battle_idx)
  103. self:SendGuildWarScoreDataReq(data.guild_battle_idx)
  104. end
  105. end
  106. end
  107. return 2
  108. end
  109. return 1
  110. end
  111. return 0
  112. end
  113. function GuildWarDataMgr:OnGuildWarCPRankAck(data)
  114. -- LogError("[wboy] GuildWarDataMgr:OnGuildBattleCPRankAck " .. Inspect(data))
  115. if ManagerContainer.NetManager:IsErrorData(data) then
  116. return
  117. end
  118. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.GUILD_CP_RANK_LIST_CHANGED, data)
  119. end
  120. function GuildWarDataMgr:OnGuildWarDataStageNtf(data)
  121. -- LogError("[wboy] GuildWarDataMgr:OnGuildWarDataStageNtf " .. Inspect(data))
  122. if self:CheckErrorCode(data) ~= 0 then
  123. return
  124. end
  125. self:SetOpenState(data.in_guild_battle)
  126. end
  127. function GuildWarDataMgr:OnGuildWarMatchMapAck(data)
  128. -- LogError("[wboy] GuildWarDataMgr:OnGuildWarMatchMapAck " .. Inspect(data))
  129. if self:CheckErrorCode(data) ~= 0 then
  130. return
  131. end
  132. if not self.matchMapData then
  133. self.matchMapData = GuildWarMatchMapData:new()
  134. end
  135. self.matchMapData:InitData(data)
  136. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.GUILD_WAR_MATCH_MAP_CHANGED)
  137. end
  138. function GuildWarDataMgr:OnGuildWarFieldInfoAck(data)
  139. -- LogError("[wboy] GuildWarDataMgr:OnGuildWarFieldInfoAck " .. Inspect(data))
  140. if self:CheckErrorCode(data) ~= 0 then
  141. return
  142. end
  143. local battleIdxChanged = false
  144. if not self.battleFieldData then
  145. self.battleFieldData = GuildWarBattleFieldData:new()
  146. else
  147. if not self.battleFieldData:IsSameBattleField(data) then
  148. battleIdxChanged = true
  149. self.battleFieldData:Clear()
  150. LogError('[wboy] FieldInfoAck, GuildWarBattleFieldData is not same !!!' .. tostring(self.battleFieldData.id) .. ' ' .. tostring(data.guild_battle_idx))
  151. end
  152. end
  153. self.battleFieldData:InitData(data)
  154. if data.challenge_pos_data then
  155. self.lastAttackBattleIdx = self.battleFieldData.id
  156. self.lastAttackAreaId = data.challenge_pos_data.pos_idx
  157. end
  158. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.GUILD_WAR_BATTLE_FIELD_INFO_CHANGED, battleIdxChanged)
  159. end
  160. function GuildWarDataMgr:OnGuildWarScoreDataAck(data)
  161. -- LogError("[wboy] GuildWarDataMgr:OnGuildWarScoreDataAck " .. Inspect(data))
  162. local errorCode = self:CheckErrorCode(data)
  163. if errorCode ~= 0 and errorCode ~= 2 then
  164. return
  165. end
  166. if not self.battleFieldData then
  167. LogWarning('[wboy] ScoreDataAck, GuildWarBattleFieldData is null !!!')
  168. return
  169. end
  170. if not self.battleFieldData:IsSameBattleField(data) then
  171. LogError('[wboy] ScoreDataAck, GuildWarBattleFieldData is not same !!!' .. tostring(self.battleFieldData.id) .. ' ' .. tostring(data.guild_battle_idx))
  172. return
  173. end
  174. if self.battleFieldData:ChangeScoreData(data) then
  175. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.GUILD_WAR_BATTLE_SCORE_DATA_CHANGED)
  176. end
  177. end
  178. function GuildWarDataMgr:ChangeGuildWarAreaData(changedIds, areaMsgData)
  179. if not areaMsgData then return end
  180. local areaId = areaMsgData.pos_idx
  181. local changed, oldId, newId, selfId = self.battleFieldData:ChangeAreaData(self.battleFieldData:GetAreaDataById(areaId), areaMsgData)
  182. if changed then
  183. if not changedIds then
  184. changedIds = {}
  185. end
  186. if oldId and not CommonUtil.EleInTable(oldId, changedIds) then
  187. changedIds[#changedIds + 1] = oldId
  188. end
  189. if newId and not CommonUtil.EleInTable(newId, changedIds) then
  190. changedIds[#changedIds + 1] = newId
  191. end
  192. if selfId and not CommonUtil.EleInTable(selfId, changedIds) then
  193. changedIds[#changedIds + 1] = selfId
  194. end
  195. end
  196. return changedIds
  197. end
  198. function GuildWarDataMgr:OnGuildWarAreaDatasAck(data)
  199. -- LogError("[wboy] GuildWarDataMgr:OnGuildWarAreaDatasAck " .. Inspect(data))
  200. if self:CheckErrorCode(data) ~= 0 then
  201. return
  202. end
  203. if not self.battleFieldData then
  204. LogWarning('[wboy] AreaDatasAck, GuildWarBattleFieldData is null !!!')
  205. return
  206. end
  207. if not self.battleFieldData:IsSameBattleField(data) then
  208. LogError('[wboy] AreaDatasAck, GuildWarBattleFieldData is not same !!!' .. tostring(self.battleFieldData.id) .. ' ' .. tostring(data.guild_battle_idx))
  209. return
  210. end
  211. local changedIds = nil
  212. local areaInfos = data.pos_data_list
  213. if areaInfos then
  214. for i = 1, #areaInfos do
  215. local areaInfo = areaInfos[i]
  216. if areaInfo then
  217. changedIds = self:ChangeGuildWarAreaData(changedIds, areaInfo)
  218. end
  219. end
  220. end
  221. if changedIds and #changedIds > 0 then
  222. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.GUILD_WAR_BATTLE_AREA_DATA_CHANGED, changedIds)
  223. end
  224. end
  225. function GuildWarDataMgr:OnGuildWarAreaDataNtf(data)
  226. -- LogError("[wboy] GuildWarDataMgr:OnGuildWarAreaDataNtf " .. Inspect(data))
  227. if self:CheckErrorCode(data) ~= 0 then
  228. return
  229. end
  230. if not self.battleFieldData then
  231. LogWarning('[wboy] AreaDatasNtf, GuildWarBattleFieldData is null !!!')
  232. return
  233. end
  234. if not self.battleFieldData:IsSameBattleField(data) then
  235. LogError('[wboy] AreaDatasNtf, GuildWarBattleFieldData is not same !!!' .. tostring(self.battleFieldData.id) .. ' ' .. tostring(data.guild_battle_idx))
  236. return
  237. end
  238. self.battleFieldData:ChangeSelfData(data)
  239. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.GUILD_WAR_BATTLE_SELF_DATA_CHANGED, false)
  240. local areaInfo = data.pos_data
  241. local changedIds = nil
  242. changedIds = self:ChangeGuildWarAreaData(changedIds, areaInfo)
  243. if changedIds and #changedIds > 0 then
  244. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.GUILD_WAR_BATTLE_AREA_DATA_CHANGED, changedIds)
  245. end
  246. end
  247. function GuildWarDataMgr:OnGuildWarChallengeAck(data)
  248. -- LogError("[wboy] GuildWarDataMgr:OnGuildWarChallengeAck " .. Inspect(data))
  249. if not self.battleFieldData then
  250. LogWarning('[wboy] ChallengeAck, GuildWarBattleFieldData is null !!!')
  251. return
  252. end
  253. if not self.battleFieldData:IsSameBattleField(data) then
  254. LogError('[wboy] ChallengeAck, GuildWarBattleFieldData is not same !!!' .. tostring(self.battleFieldData.id) .. ' ' .. tostring(data.guild_battle_idx))
  255. return
  256. end
  257. if self:CheckErrorCode(data) ~= 0 then
  258. if data.challenge_pos_data then
  259. local changedIds = nil
  260. changedIds = self:ChangeGuildWarAreaData(changedIds, data.challenge_pos_data)
  261. if changedIds and #changedIds > 0 then
  262. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.GUILD_WAR_BATTLE_AREA_DATA_CHANGED, changedIds)
  263. end
  264. end
  265. return
  266. end
  267. if data.challenge_pos_data then
  268. local changedIds = nil
  269. changedIds = self:ChangeGuildWarAreaData(changedIds, data.challenge_pos_data)
  270. if changedIds and #changedIds > 0 then
  271. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.GUILD_WAR_BATTLE_AREA_DATA_CHANGED, changedIds)
  272. end
  273. elseif data.fight_info then
  274. local actorSystem = CreateActorSystem:new()
  275. actorSystem:ParseFightRoleInfo(data.fight_info)
  276. self:EnterBattle(data.guild_battle_idx, data.pos_idx, actorSystem, data.self_buff_list, data.fight_buff_list)
  277. end
  278. end
  279. function GuildWarDataMgr:OnGuildWarChallengeNtf(data)
  280. -- LogError("[wboy] GuildWarDataMgr:OnGuildWarChallengeNtf " .. Inspect(data))
  281. if self:CheckErrorCode(data) ~= 0 then
  282. return
  283. end
  284. if not self.battleFieldData then
  285. LogWarning('[wboy] ChallengeNtf, GuildWarBattleFieldData is null !!!')
  286. return
  287. end
  288. if not self.battleFieldData:IsSameBattleField(data) then
  289. LogError('[wboy] ChallengeNtf, GuildWarBattleFieldData is not same !!!' .. tostring(self.battleFieldData.id) .. ' ' .. tostring(data.guild_battle_idx))
  290. return
  291. end
  292. self.battleFieldData:ChangeSelfData(data)
  293. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.GUILD_WAR_BATTLE_SELF_DATA_CHANGED, false)
  294. local areaInfo = data.pos_data
  295. local changedIds = nil
  296. changedIds = self:ChangeGuildWarAreaData(changedIds, areaInfo)
  297. if changedIds and #changedIds > 0 then
  298. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.GUILD_WAR_BATTLE_AREA_DATA_CHANGED, changedIds)
  299. end
  300. end
  301. function GuildWarDataMgr:OnGuildWarSettingAck(data)
  302. -- LogError("[wboy] GuildWarDataMgr:OnGuildWarSettingAck " .. Inspect(data))
  303. if self:CheckErrorCode(data) ~= 0 then
  304. return
  305. end
  306. if not self.battleFieldData then
  307. LogWarning('[wboy] SettingAck, GuildWarBattleFieldData is null !!!')
  308. return
  309. end
  310. if not self.battleFieldData:IsSameBattleField(data) then
  311. LogError('[wboy] SettingAck, GuildWarBattleFieldData is not same !!!' .. tostring(self.battleFieldData.id) .. ' ' .. tostring(data.guild_battle_idx))
  312. return
  313. end
  314. self.battleFieldData:ChangeSelfData(data)
  315. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.GUILD_WAR_BATTLE_SELF_DATA_CHANGED, false)
  316. end
  317. function GuildWarDataMgr:OnGuildWarBuyChallengeAck(data)
  318. -- LogError("[wboy] GuildWarDataMgr:OnGuildWarBuyChallengeAck " .. Inspect(data))
  319. if self:CheckErrorCode(data) ~= 0 then
  320. return
  321. end
  322. if not self.battleFieldData then
  323. LogWarning('[wboy] BuyChallengeAck, GuildWarBattleFieldData is null !!!')
  324. return
  325. end
  326. if not self.battleFieldData:IsSameBattleField(data) then
  327. LogError('[wboy] BuyChallengeAck, GuildWarBattleFieldData is not same !!!' .. tostring(self.battleFieldData.id) .. ' ' .. tostring(data.guild_battle_idx))
  328. return
  329. end
  330. self.battleFieldData:ChangeSelfData(data)
  331. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.GUILD_WAR_BATTLE_SELF_DATA_CHANGED, false)
  332. end
  333. function GuildWarDataMgr:OnGuildWarBuyRebornAck(data)
  334. -- LogError("[wboy] GuildWarDataMgr:OnGuildWarBuyRebornAck " .. Inspect(data))
  335. if self:CheckErrorCode(data) ~= 0 then
  336. return
  337. end
  338. if not self.battleFieldData then
  339. LogWarning('[wboy] BuyRebornAck, GuildWarBattleFieldData is null !!!')
  340. return
  341. end
  342. if not self.battleFieldData:IsSameBattleField(data) then
  343. LogError('[wboy] BuyRebornAck, GuildWarBattleFieldData is not same !!!' .. tostring(self.battleFieldData.id) .. ' ' .. tostring(data.guild_battle_idx))
  344. return
  345. end
  346. self.battleFieldData:ChangeSelfData(data)
  347. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.GUILD_WAR_BATTLE_SELF_DATA_CHANGED, false)
  348. end
  349. function GuildWarDataMgr:OnGuildWarBuyBuffAck(data)
  350. -- LogError("[wboy] GuildWarDataMgr:OnGuildWarBuyBuffAck " .. Inspect(data))
  351. if self:CheckErrorCode(data) ~= 0 then
  352. return
  353. end
  354. if not self.battleFieldData then
  355. LogWarning('[wboy] BuyBuffAck, GuildWarBattleFieldData is null !!!')
  356. return
  357. end
  358. if not self.battleFieldData:IsSameBattleField(data) then
  359. LogError('[wboy] BuyBuffAck, GuildWarBattleFieldData is not same !!!' .. tostring(self.battleFieldData.id) .. ' ' .. tostring(data.guild_battle_idx))
  360. return
  361. end
  362. self.battleFieldData:ChangeSelfData(data)
  363. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.GUILD_WAR_BATTLE_SELF_DATA_CHANGED, false)
  364. end
  365. function GuildWarDataMgr:OnGuildWarLogAck(data)
  366. -- LogError("[wboy] GuildWarDataMgr:OnGuildWarLogAck " .. Inspect(data))
  367. if self:CheckErrorCode(data) ~= 0 then
  368. return
  369. end
  370. if not self.battleFieldData then
  371. LogWarning('[wboy] LogAck, GuildWarBattleFieldData is null !!!')
  372. return
  373. end
  374. if not self.battleFieldData:IsSameBattleField(data) then
  375. LogError('[wboy] LogAck, GuildWarBattleFieldData is not same !!!' .. tostring(self.battleFieldData.id) .. ' ' .. tostring(data.guild_battle_idx))
  376. return
  377. end
  378. local changed, startChanged, endChanged = self.battleFieldData:SetLogs(data.log_list, data.is_end)
  379. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.GUILD_WAR_BATTLE_LOG_DATA_CHANGED, changed, startChanged, endChanged)
  380. end
  381. function GuildWarDataMgr:OnGuildWarRankAck(data)
  382. -- LogError("[wboy] GuildWarDataMgr:OnGuildWarRankAck " .. Inspect(data))
  383. if self:CheckErrorCode(data) ~= 0 then
  384. return
  385. end
  386. if self.battleRankData then
  387. if not self.battleRankData:IsSameBattleField(data) then
  388. LogError('[wboy] RankAck, GuildWarBattleRankData is not same !!!' .. tostring(self.battleRankData.id) .. ' ' .. tostring(data.guild_battle_idx))
  389. return
  390. end
  391. else
  392. self.battleRankData = GuildWarBattleRankData:new()
  393. end
  394. self.battleRankData:SetData(data)
  395. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.GUILD_WAR_BATTLE_RANK_DATA_CHANGED)
  396. end
  397. function GuildWarDataMgr:SendGuildWarCPRankReq()
  398. if not self:IsCanSend(1) then return false end
  399. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_GUILD_BATTLE_CP_RANK_REQ)
  400. return true
  401. end
  402. function GuildWarDataMgr:SendGetGuildWarMatchMapReq()
  403. if not self:IsCanSend(2) then return false end
  404. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_GUILD_BATTLE_COUNT_PART_REQ)
  405. return true
  406. end
  407. function GuildWarDataMgr:SendGuildWarInfoReq(battleIdx)
  408. if not self:IsCanSend(3) then return false end
  409. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_GUILD_BATTLE_INFO_REQ, {guild_battle_idx = battleIdx})
  410. return true
  411. end
  412. function GuildWarDataMgr:SendGuildWarScoreDataReq(battleIdx)
  413. if not self:IsCanSend(4) then return false end
  414. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_GUILD_BATTLE_PK_DATA_REQ, {guild_battle_idx = battleIdx})
  415. return true
  416. end
  417. function GuildWarDataMgr:SendGuildWarAreaDatasReq(battleIdx, areaIds)
  418. if not self:IsCanSend(5) then return false end
  419. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_GUILD_BATTLE_POS_IDX_LIST_REQ, {guild_battle_idx = battleIdx, pos_idx_list = areaIds})
  420. return true
  421. end
  422. function GuildWarDataMgr:SendGuildWarChallengeReq(battleIdx, areaId)
  423. if not self:IsCanSend(6) then return false end
  424. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_GUILD_BATTLE_CHALLENGE_REQ, {guild_battle_idx = battleIdx, pos_idx = areaId})
  425. return true
  426. end
  427. function GuildWarDataMgr:SendGuildWarChallengeStayReq(battleIdx, areaId)
  428. if not self:IsCanSend(7) then return false end
  429. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_GUILD_BATTLE_CHALLENGE_PING_REQ, {guild_battle_idx = battleIdx, pos_idx = areaId})
  430. return true
  431. end
  432. function GuildWarDataMgr:SendGuildWarChallengeResultReq(battleIdx, areaId, uid, battleTime, battleResult)
  433. if not self:IsCanSend(8) then return false end
  434. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_GUILD_BATTLE_CHALLENGE_RESULT_REQ, {guild_battle_idx = battleIdx, pos_idx = areaId, pos_uid = uid, battle_time = battleTime, battle_result = battleResult})
  435. return true
  436. end
  437. function GuildWarDataMgr:SendGuildWarSettingReq(battleIdx, autoChallenge, autoReborn)
  438. if not self:IsCanSend(9) then return false end
  439. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_GUILD_BATTLE_SETTING_REQ, {guild_battle_idx = battleIdx, auto_challenge = autoChallenge, auto_reborn = autoReborn})
  440. return true
  441. end
  442. function GuildWarDataMgr:SendGuildWarBuyChallengeNumReq(battleIdx)
  443. if not self:IsCanSend(10) then return false end
  444. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_GUILD_BATTLE_BUY_CHALLENGE_REQ, {guild_battle_idx = battleIdx})
  445. return true
  446. end
  447. function GuildWarDataMgr:SendGuildWarBuyRebornReq(battleIdx)
  448. if not self:IsCanSend(11) then return false end
  449. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_GUILD_BATTLE_REBORN_REQ, {guild_battle_idx = battleIdx})
  450. return true
  451. end
  452. function GuildWarDataMgr:SendGuildWarBuyBuffReq(battleIdx, buffId)
  453. if not self:IsCanSend(12) then return false end
  454. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_GUILD_BATTLE_BUY_BUFF_REQ, {guild_battle_idx = battleIdx, buff_id_list = {buffId}})
  455. return true
  456. end
  457. function GuildWarDataMgr:SendGuildWarLogReq(battleIdx, beginTime)
  458. if not self:IsCanSend(13) then return false end
  459. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_GUILD_BATTLE_LOG_REQ, {guild_battle_idx = battleIdx, begin_time = beginTime})
  460. return true
  461. end
  462. function GuildWarDataMgr:SendGuildWarRankReq(battleIdx, rankType, pageIdx)
  463. if not self:IsCanSend(14, 0.5) then return false end
  464. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_GUILD_BATTLE_RANK_LIST_REQ, {guild_battle_idx = battleIdx, rank_type = rankType, page_idx = pageIdx})
  465. return true
  466. end
  467. function GuildWarDataMgr:GetOpenState()
  468. return self.isOpen
  469. end
  470. function GuildWarDataMgr:SetOpenState(state)
  471. if self.isOpen == state then
  472. return
  473. end
  474. self.isOpen = state
  475. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.GUILD_WAR_OPEN_STATE_CHANGED, state)
  476. end
  477. function GuildWarDataMgr:GetMatchMapData()
  478. return self.matchMapData
  479. end
  480. function GuildWarDataMgr:GetBattleFieldData()
  481. return self.battleFieldData
  482. end
  483. function GuildWarDataMgr:GetBattleRankData()
  484. return self.battleRankData
  485. end
  486. function GuildWarDataMgr:ClearBattleRankData()
  487. self.battleRankData = nil
  488. end
  489. ----------------------------------------- 战斗 -----------------------------------------
  490. function GuildWarDataMgr:EnterBattle(battleId, areaId, actorSystem, selfBuffs, fightBuffs)
  491. self.lastAttackBattleIdx = battleId
  492. self.lastAttackAreaId = areaId
  493. self.actorSystem = actorSystem
  494. ManagerContainer.LuaGameMgr:RefreshTeamData()
  495. self.matchFighterName = actorSystem:GetUserNickname()
  496. self.enemyActors = {}
  497. if actorSystem:GetPlayerActorParam() ~= nil then
  498. self.enemyActors[#self.enemyActors+1] = actorSystem:GetPlayerActorParam()
  499. end
  500. local fellowActors = actorSystem:GetFellowActorParam()
  501. if fellowActors ~= nil then
  502. for k,actor in pairs(fellowActors) do
  503. self.enemyActors[#self.enemyActors +1] = actor
  504. end
  505. end
  506. self.ourMembers = {}
  507. local actorData = ManagerContainer.LuaActorDataMgr:GetActorData(true, ManagerContainer.DataMgr.UserData:GetId())
  508. if actorData then
  509. self.ourMembers[#self.ourMembers + 1] = actorData
  510. end
  511. local list = ManagerContainer.DataMgr.PartnerData:GetPartnerDatas()
  512. if list ~= nil then
  513. for _,v in pairs(list) do
  514. if v.owned and v.isBattle then
  515. actorData = ManagerContainer.LuaActorDataMgr:GetActorData(false, v.configId)
  516. if actorData then
  517. self.ourMembers[#self.ourMembers + 1] = actorData
  518. end
  519. end
  520. end
  521. end
  522. local len = nil
  523. local buff = nil
  524. local selfMaskDatas = nil
  525. if selfBuffs then
  526. len = #selfBuffs
  527. selfMaskDatas = {}
  528. for i = 1, len do
  529. buff = selfBuffs[i]
  530. local cfgData = ManagerContainer.CfgMgr:GetGuildWarBuffCfgById(buff.key)
  531. if cfgData then
  532. selfMaskDatas[#selfMaskDatas + 1] = GvGMark.New(cfgData.Mark, buff.value)
  533. end
  534. end
  535. end
  536. local enemyPvPVal = actorSystem:GetSkillPvPVal()
  537. local OurPvPVal = ManagerContainer.DataMgr.UserData:GetCurrRoleSkillPress()
  538. local IsPresspoint,BuffId = ManagerContainer.CfgMgr:GetPresspointPvPCfg(OurPvPVal,enemyPvPVal)
  539. if BuffId > -1 then
  540. if nil == selfMaskDatas then
  541. selfMaskDatas = {}
  542. end
  543. --设置压制ID
  544. --LogError("添加压制markid"..tostring(BuffId))
  545. selfMaskDatas[#selfMaskDatas + 1] = GvGMark.New(BuffId, 1)
  546. end
  547. local fightMaskDatas = nil
  548. if fightBuffs then
  549. len = #fightBuffs
  550. fightMaskDatas = {}
  551. for i = 1, len do
  552. buff = fightBuffs[i]
  553. local cfgData = ManagerContainer.CfgMgr:GetGuildWarBuffCfgById(buff.key)
  554. if cfgData then
  555. fightMaskDatas[#fightMaskDatas + 1] = GvGMark.New(cfgData.Mark, buff.value)
  556. end
  557. end
  558. end
  559. local limitedTime = self:GetLimitedTime()
  560. local battleEndCondList = System.Array.CreateInstance(Enum.TypeInfo.BattleEndCondition, 2)
  561. battleEndCondList[0] = BattleEndCondition.New(Constants.EndBattle_By_UndeadCount, Constants.ResultType_Normal)
  562. battleEndCondList[1] = BattleEndCondition.New(Constants.EndBattle_By_BattleTime, limitedTime, Constants.ResultType_Normal, false)
  563. ManagerContainer.LuaGameMgr:EnterGvGBattle('scenes_test_pvp', self.ourMembers, self.enemyActors, limitedTime, battleEndCondList, selfMaskDatas, fightMaskDatas,IsPresspoint,OurPvPVal+enemyPvPVal)
  564. end
  565. function GuildWarDataMgr:StartStayBatting()
  566. if not self.battlingTimer then
  567. self.battlingTimer = Timer.New(slot(self.UploadBatting, self), 30, -1)
  568. end
  569. if not self.battlingTimer.running then
  570. self.battlingTimer:Start()
  571. end
  572. self:UploadBatting()
  573. end
  574. function GuildWarDataMgr:UploadBatting()
  575. self:SendGuildWarChallengeStayReq(self.lastAttackBattleIdx, self.lastAttackAreaId)
  576. end
  577. function GuildWarDataMgr:BattleEnd(result)
  578. if self.battlingTimer and self.battlingTimer.running then
  579. self.battlingTimer:Stop()
  580. end
  581. local battleTime = LuaBattleBridge.GetFightingTime()
  582. if battleTime < 0 then
  583. battleTime = 0
  584. else
  585. battleTime = Mathf.Ceil(battleTime)
  586. end
  587. self:SendGuildWarChallengeResultReq(self.lastAttackBattleIdx, self.lastAttackAreaId, self.actorSystem and self.actorSystem:GetUserId() or nil, battleTime, (result == 1))
  588. self.actorSystem = nil
  589. self.matchFighterName = nil
  590. self.enemyActors = nil
  591. self.ourMembers = nil
  592. end
  593. function GuildWarDataMgr:GetMatchFighterName()
  594. return self.matchFighterName
  595. end
  596. function GuildWarDataMgr:GetOurMembers()
  597. return self.ourMembers
  598. end
  599. function GuildWarDataMgr:GetEnemyMembers()
  600. return self.enemyActors
  601. end
  602. function GuildWarDataMgr:GetLimitedTime()
  603. return GlobalConfig.Instance:GetConfigIntValue(251)
  604. end
  605. function GuildWarDataMgr:GetLastAttackBattleIdx()
  606. return self.lastAttackBattleIdx
  607. end
  608. function GuildWarDataMgr:GetLastAttackAreaId()
  609. return self.lastAttackAreaId
  610. end
  611. function GuildWarDataMgr:ClearLastAttackInfo()
  612. self.lastAttackBattleIdx = nil
  613. self.lastAttackAreaId = nil
  614. end
  615. return GuildWarDataMgr