UnionWarMiddleLogic.lua 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492
  1. local Util = require("common.Util")
  2. local ObjHuman = require("core.ObjHuman")
  3. local InnerMsg = require("core.InnerMsg")
  4. local UnionWarDBLogic = require("union.UnionWarDBLogic")
  5. local UnionWarLogic = require("union.UnionWarLogic")
  6. local MiddleManager = require("middle.MiddleManager")
  7. local CombatDefine = require("combat.CombatDefine")
  8. local UnionWarExcel = require("excel.unionWar")
  9. function WL_UNION_WAR_REFRESH(fd,msg)
  10. UnionWarLogic.refreshData(fd)
  11. end
  12. function LW_UNION_WAR_ADD(fd, msg)
  13. UnionWarDBLogic.addUnion(fd,msg)
  14. end
  15. function LW_UNION_WAR_MEMBER(fd, msg)
  16. print(" LW_UNION_WAR_MEMBER !!!!!")
  17. UnionWarDBLogic.addUnionMember(fd,msg)
  18. end
  19. local function fontWarData(net,data)
  20. if data then
  21. net.unionUuid = data.unionUuid
  22. net.name = data.name
  23. net.bannerID = data.bannerID
  24. net.zhandouli = data.zhandouli
  25. net.star = data.star
  26. net.svrName = data.svrName
  27. net.member = {}
  28. local len = 0
  29. local member
  30. for k,_ in pairs(data.member) do
  31. member = UnionWarDBLogic.getMember(k)
  32. if member then
  33. len = len + 1
  34. net.member[len] = {}
  35. net.member[len].index = member.index
  36. net.member[len].uuid = k
  37. net.member[len].name = member.name
  38. net.member[len].star = member.defendStar
  39. net.member[len].zhandouli = member.rolebase.zhandouli
  40. net.member[len].rank = member.rank or 0
  41. end
  42. end
  43. end
  44. end
  45. function LW_UNION_WAR_QUERY(fd,msg)
  46. local db = UnionWarDBLogic.getDB()
  47. local union = db.unionList[msg.unionUuid]
  48. local msgRet = InnerMsg.wl.WL_UNION_WAR_QUERY
  49. msgRet.uuid = msg.uuid
  50. msgRet.attacker = {}
  51. msgRet.defender = {}
  52. if not union then
  53. msgRet.cnt = 0
  54. msgRet.state = UnionWarLogic.UNION_STATE2
  55. elseif union.targetID then
  56. local member = UnionWarDBLogic.getMember(msg.uuid)
  57. msgRet.cnt = member and member.attackCnt or 0
  58. msgRet.state = UnionWarLogic.UNION_STATE1
  59. local targetUnion = db.unionList[union.targetID]
  60. fontWarData(msgRet.attacker,union)
  61. fontWarData(msgRet.defender,targetUnion)
  62. else
  63. local member = UnionWarDBLogic.getMember(msg.uuid)
  64. msgRet.cnt = member and member.attackCnt or 0
  65. msgRet.state = UnionWarLogic.UNION_STATE3
  66. end
  67. InnerMsg.sendMsg(fd, msgRet)
  68. end
  69. function WL_UNION_WAR_QUERY(fd, msg)
  70. local human = ObjHuman.onlineUuid[msg.uuid]
  71. if human == nil then
  72. return
  73. end
  74. UnionWarLogic.WLQuery(human,msg)
  75. end
  76. function LW_UNION_WAR_BUFF_QUERY(fd, msg)
  77. local db = UnionWarDBLogic.getDB()
  78. local union = db.unionList[msg.unionUuid]
  79. local msgRet = InnerMsg.wl.WL_UNION_WAR_BUFF_QUERY
  80. msgRet.uuid = msg.uuid
  81. msgRet.unionUuid = msg.unionUuid
  82. msgRet.buffLv = union and union.buffLv or 0
  83. InnerMsg.sendMsg(fd, msgRet)
  84. end
  85. function WL_UNION_WAR_BUFF_QUERY(fd, msg)
  86. if msg.uuid == "" then
  87. UnionWarLogic.WLBuffQuery(nil,msg)
  88. else
  89. local human = ObjHuman.onlineUuid[msg.uuid]
  90. if human == nil then
  91. return
  92. end
  93. UnionWarLogic.WLBuffQuery(human,msg)
  94. end
  95. end
  96. function LW_UNION_WAR_MATCH(fd,msg)
  97. local matchList,db = UnionWarDBLogic.getMatchList()
  98. if not matchList or #matchList == 0 then
  99. return
  100. end
  101. local unionList = db.unionList
  102. local svrIndex = MiddleManager.FD_2_SVRINDEX[fd]
  103. local unionUuid = msg.unionUuid
  104. local tb = {}
  105. local len = 0
  106. for k,v in ipairs(db.matchList) do
  107. local union1 = unionList[v[1]]
  108. local union2 = unionList[v[2]]
  109. if union1 and union2 then
  110. len = len + 1
  111. tb[len]= {}
  112. if union2.svrIndex == svrIndex then
  113. union1,union2 = union2,union1
  114. end
  115. tb[len][1] = {union1.name,union1.jifen, union1.rank}
  116. tb[len][2] = {union2.name,union2.jifen, union2.rank}
  117. tb[len][3] = {union1.unionUuid,union2.unionUuid,union1.svrName, union2.svrName}
  118. end
  119. end
  120. table.sort(tb,function(a,b)
  121. if a[3][1] == unionUuid or a[3][2] == unionUuid then
  122. return true
  123. else
  124. return a[3] == svrIndex
  125. end
  126. end)
  127. local msgRet = InnerMsg.wl.WL_UNION_WAR_MATCH
  128. msgRet.uuid = msg.uuid
  129. msgRet.list = {}
  130. len = 0
  131. for k,v in ipairs(tb) do
  132. len = len + 1
  133. msgRet.list[len] = {v[1],v[2], v[3]}
  134. end
  135. InnerMsg.sendMsg(fd, msgRet)
  136. end
  137. function WL_UNION_WAR_MATCH(fd,msg)
  138. local human = ObjHuman.onlineUuid[msg.uuid]
  139. if human == nil then
  140. return
  141. end
  142. UnionWarLogic.WLMatch(human,msg)
  143. end
  144. local function fontAtkHeroList(net, data)
  145. net.objList = {}
  146. -- Util.printTable(data.objList)
  147. for i = 1 ,CombatDefine.COMBAT_HERO_CNT do
  148. local obj = data.objList[i]
  149. if obj then
  150. net.objList[i] = {}
  151. net.objList[i].id = obj.id
  152. net.objList[i].bagIndex = obj.bagIndex or 0
  153. net.objList[i].lv = obj.lv
  154. net.objList[i].star = obj.star
  155. end
  156. end
  157. end
  158. local function fontHeroList(net,data)
  159. net.index = data.index
  160. net.defendStar = data.defendStar
  161. net.defendCnt = data.defendCnt
  162. net.loseBuff = data.loseBuff or 0
  163. net.zhandouli = data.rolebase.zhandouli
  164. if data.monsterOutID then
  165. net.monsterOutID = data.monsterOutID
  166. end
  167. net.objList = {}
  168. for i = 1,CombatDefine.COMBAT_HERO_CNT do
  169. local obj = data.objList[i]
  170. if obj then
  171. net.objList[i] = {}
  172. net.objList[i].id = obj.id
  173. net.objList[i].bagIndex = obj.bagIndex or 0
  174. net.objList[i].lv = obj.lv
  175. net.objList[i].star = obj.star
  176. end
  177. end
  178. end
  179. FIGHT1 = 1 --可以挑战
  180. FIGHT2 = 2 --次数不足
  181. FIGHT3 = 3 --重复挑战
  182. FIGHT4 = 4 --对手被挑战中
  183. FIGHT5 = 5 --星数不足
  184. FIGHT6 = 6 --无参与
  185. local function canFight(attackUuid,defendUuid,attackUnion,defendUnion)
  186. local attacker = UnionWarDBLogic.getMember(attackUuid)
  187. --判断次数
  188. if not attacker then
  189. return FIGHT6
  190. end
  191. if attacker.attackCnt >= UnionWarExcel.define[1].cnt then
  192. return FIGHT2
  193. end
  194. if attackUnion.combat[attackUuid] then
  195. if os.time() - attackUnion.combat[attackUuid][3] >= 60 * 5 then
  196. attackUnion.combat[attackUuid] = nil
  197. else
  198. return FIGHT3
  199. end
  200. end
  201. for k,v in pairs(attackUnion.combat) do
  202. if v[1] == defendUuid then
  203. return FIGHT4
  204. end
  205. end
  206. local defender = UnionWarDBLogic.getMember(defendUuid)
  207. if defender.defendStar <= 0 and defender.loseBuff and defender.loseBuff >= UnionWarLogic.UNION_FEIXU_CNT then
  208. return FIGHT5
  209. end
  210. return FIGHT1
  211. end
  212. function LW_UNION_WAR_INFO(fd,msg)
  213. local db = UnionWarDBLogic.getDB()
  214. local attackUnion = db.unionList[msg.attackUnionUuid]
  215. local union = db.unionList[attackUnion.targetID]
  216. local target = UnionWarDBLogic.getMember(msg.targetUuid)
  217. local state = canFight(msg.uuid,msg.targetUuid,attackUnion,union)
  218. local msgRet = InnerMsg.wl.WL_UNION_WAR_INFO
  219. msgRet.unionUuid = msg.unionUuid
  220. msgRet.uuid = msg.uuid
  221. if state == 6 then
  222. msgRet.cnt = 0
  223. else
  224. local member = UnionWarDBLogic.getMember(msg.uuid)
  225. msgRet.cnt = member and member.attackCnt or 0
  226. end
  227. msgRet.target = {}
  228. fontHeroList(msgRet.target,target)
  229. msgRet.target.uuid = msg.targetUuid
  230. msgRet.target.svrIndex = union.svrIndex
  231. msgRet.index = target.index
  232. msgRet.canFight = state
  233. InnerMsg.sendMsg(fd, msgRet)
  234. end
  235. function WL_UNION_WAR_INFO(fd,msg)
  236. local human = ObjHuman.onlineUuid[msg.uuid]
  237. if human == nil then
  238. return
  239. end
  240. UnionWarLogic.WLInfo(human,msg)
  241. end
  242. function LW_UNION_WAR_FIGHT(fd,msg)
  243. local db = UnionWarDBLogic.getDB()
  244. local attackUnion = db.unionList[msg.unionUuid]
  245. local defendUnion = db.unionList[attackUnion.targetID]
  246. local msgRet = InnerMsg.wl.WL_UNION_WAR_FIGHT
  247. msgRet.uuid = msg.attackUuid
  248. local state = canFight(msg.attackUuid,msg.defendUuid,attackUnion,defendUnion)
  249. msgRet.state = state
  250. if state == FIGHT1 then
  251. attackUnion.combat[msg.attackUuid] = {msg.defendUuid,msg.diff,os.time()}
  252. local defender = UnionWarDBLogic.getMember(msg.defendUuid)
  253. msgRet.defender = Util.copyTable(defender)
  254. msgRet.defender.uuid = msg.defendUuid
  255. else
  256. msgRet.defender = {}
  257. end
  258. msgRet.diff = msg.diff
  259. msgRet.name = defendUnion.name
  260. InnerMsg.sendMsg(fd, msgRet)
  261. end
  262. function WL_UNION_WAR_FIGHT(fd,msg)
  263. local human = ObjHuman.onlineUuid[msg.uuid]
  264. if human == nil then
  265. return
  266. end
  267. UnionWarLogic.WLFight(human,msg)
  268. end
  269. function LW_UNION_WAR_FIGHT_END(fd,msg)
  270. local atkUnion,defender,cnt,isFeixu,addStar, diff = UnionWarDBLogic.onFightEnd(msg)
  271. if not atkUnion then return end
  272. local db = UnionWarDBLogic.getDB()
  273. local defendUnion = db.unionList[atkUnion.targetID]
  274. local msgRet = InnerMsg.wl.WL_UNION_WAR_FIGHT_END
  275. msgRet.unionStar = atkUnion.star
  276. msgRet.defender = Util.copyTable(defender)
  277. -- msgRet.defendStar = defender.defendStar
  278. -- msgRet.defIndex = defender.index
  279. msgRet.diff = diff
  280. msgRet.uuid = msg.uuid
  281. msgRet.cnt = cnt
  282. msgRet.addStar = addStar
  283. msgRet.isFeixu = isFeixu and 1 or 0
  284. msgRet.defUnionName = defendUnion.name
  285. msgRet.combatInfo = Util.copyTable(msg.combatInfo)
  286. InnerMsg.sendMsg(fd, msgRet)
  287. if addStar and addStar > 0 then
  288. -- 星级 同步
  289. local db = UnionWarDBLogic.getDB()
  290. local defendUnion = db.unionList[atkUnion.targetID]
  291. local msgRet2 = InnerMsg.wl.WL_UNION_WAR_FIGHT_TONGZHI
  292. -- 给 攻击方公会的 在线玩家 刷新最新的星级数据
  293. msgRet2.unionUuid = msg.unionUuid
  294. msgRet2.atkUnion = msg.unionUuid
  295. msgRet2.defUnion = atkUnion.targetID
  296. msgRet2.atkUnionStar = atkUnion.star
  297. msgRet2.atkUuid = msg.uuid
  298. msgRet2.defUuid = defender.rolebase.uuid
  299. msgRet2.defStar = defender.defendStar
  300. msgRet2.defIndex = defender.index
  301. InnerMsg.sendMsg(fd, msgRet2)
  302. local defFd = MiddleManager.getFDBySvrIndex(defendUnion.svrIndex)
  303. if defFd then
  304. -- 给 被打方公会的 在线玩家 刷新 最新的星级数据
  305. msgRet2.unionUuid = atkUnion.targetID
  306. InnerMsg.sendMsg(defFd, msgRet2)
  307. end
  308. end
  309. if isFeixu and addStar == 0 then
  310. local msgRet3 = InnerMsg.wl.WL_UNION_WAR_BUFF_QUERY
  311. msgRet3.uuid = ""
  312. msgRet3.unionUuid = msg.unionUuid
  313. msgRet3.buffLv = atkUnion and atkUnion.buffLv or 0
  314. InnerMsg.sendMsg(fd, msgRet3)
  315. end
  316. end
  317. function WL_UNION_WAR_FIGHT_END(fd,msg)
  318. local human = ObjHuman.onlineUuid[msg.uuid]
  319. if human == nil then
  320. return
  321. end
  322. UnionWarLogic.WLFightEnd(human,msg)
  323. end
  324. function WL_UNION_WAR_FIGHT_TONGZHI(fd, msg)
  325. UnionWarLogic.WLFightTongzhi(msg)
  326. end
  327. function fontAtkLogMsg(msgRet, log, attacker, defender)
  328. local len = #msgRet.list + 1
  329. local name = attacker.monsterOutID and attacker.rolebase.name or attacker.name
  330. local defName = defender.monsterOutID and defender.name or defender.rolebase.name
  331. name = name or ""
  332. defName = defName or ""
  333. --时间,结果,攻击者名字,防守者名字,星数,积分 , 进攻者公会
  334. msgRet.list[len] = {log[1], log[2], name,defName , log[7],log[8], log[3], log[11],log[12]}
  335. end
  336. function LW_UNION_WAR_ATKLOG(fd,msg)
  337. local db = UnionWarDBLogic.getDB()
  338. local union = db.unionList[msg.unionUuid]
  339. if not union then
  340. return
  341. end
  342. local type = msg.type
  343. local msgRet = InnerMsg.wl.WL_UNION_WAR_ATKLOG
  344. msgRet.uuid = msg.uuid
  345. msgRet.type = type
  346. msgRet.list = {}
  347. -- ret 1 攻占成功 1 攻占废墟成功 3 防守成功 4 防守失败
  348. if type == 1 then
  349. local attacker = UnionWarDBLogic.getMember(msg.uuid)
  350. if attacker and attacker.winLog then
  351. for i = 1,#attacker.winLog do
  352. local log = db.log[attacker.winLog[i]]
  353. local attackUnion = db.unionList[log[3]]
  354. local attacker2 = UnionWarDBLogic.getMember(log[5])
  355. local defendUnion = db.unionList[log[4]]
  356. local defender2 = UnionWarDBLogic.getMember(log[6])
  357. fontAtkLogMsg(msgRet, log, attacker2, defender2)
  358. end
  359. end
  360. elseif type == 0 then
  361. local len = 0
  362. for i = 1, #union.log do
  363. local log = db.log[union.log[i]]
  364. local attackUnion = db.unionList[log[3]]
  365. local attacker = UnionWarDBLogic.getMember(log[5])
  366. local defendUnion = db.unionList[log[4]]
  367. local defender = UnionWarDBLogic.getMember(log[6])
  368. if log[2] then
  369. len = len + 1
  370. fontAtkLogMsg(msgRet, log, attacker, defender)
  371. if len >= 100 then
  372. break
  373. end
  374. end
  375. end
  376. end
  377. InnerMsg.sendMsg(fd, msgRet)
  378. end
  379. function WL_UNION_WAR_ATKLOG(fd,msg)
  380. local human = ObjHuman.onlineUuid[msg.uuid]
  381. if human == nil then
  382. return
  383. end
  384. UnionWarLogic.WLAtkLog(human,msg)
  385. end
  386. function LW_UNION_WAR_DEFLOG(fd,msg)
  387. local db = UnionWarDBLogic.getDB()
  388. local union = db.unionList[msg.unionUuid]
  389. if union.targetID ~= msg.defendUnion and msg.defendUnion ~= msg.unionUuid then
  390. return
  391. end
  392. local defendUnion = db.unionList[msg.defendUnion]
  393. local defendUuid = msg.defendUuid
  394. local defender = UnionWarDBLogic.getMember(defendUuid)
  395. local msgRet = InnerMsg.wl.WL_UNION_WAR_DEFLOG
  396. msgRet.uuid = msg.uuid
  397. msgRet.list = {}
  398. local len = 0
  399. for k,v in ipairs(defender.log) do
  400. local videoDB = UnionWarDBLogic.getRecordDB(v)
  401. len = len + 1
  402. msgRet.list[len] = {}
  403. msgRet.list[len].id = v
  404. msgRet.list[len].upTime = videoDB.upTime
  405. msgRet.list[len].diff = videoDB.diff
  406. local attacker = videoDB.combatInfo.attacker
  407. msgRet.list[len].name = attacker.name
  408. msgRet.list[len].zhandouli = attacker.zhandouli
  409. msgRet.list[len].result = videoDB.combatInfo.isWin and 1 or 0
  410. msgRet.list[len].target = {}
  411. msgRet.list[len].formation = videoDB.combatInfo.atkFormation
  412. msgRet.list[len].videoIndex = v
  413. fontAtkHeroList(msgRet.list[len].target, videoDB.combatInfo)
  414. msgRet.list[len].target.uuid = videoDB.attackUuid
  415. end
  416. msgRet.defender = {}
  417. msgRet.defender.uuid = defendUuid
  418. fontHeroList(msgRet.defender,defender)
  419. InnerMsg.sendMsg(fd, msgRet)
  420. end
  421. function WL_UNION_WAR_DEFLOG(human,msg)
  422. local human = ObjHuman.onlineUuid[msg.uuid]
  423. if human == nil then
  424. return
  425. end
  426. UnionWarLogic.WLDefLog(human,msg)
  427. end
  428. function LW_UNION_WAR_VIDEO(fd, msg)
  429. local videoDB = UnionWarDBLogic.getRecordDB(msg.index)
  430. local msgRet = InnerMsg.wl.WL_UNION_WAR_VIDEO
  431. msgRet.uuid = msg.uuid
  432. msgRet.combatInfo = videoDB.combatInfo
  433. InnerMsg.sendMsg(fd, msgRet)
  434. end
  435. function WL_UNION_WAR_VIDEO(fd, msg)
  436. local human = ObjHuman.onlineUuid[msg.uuid]
  437. if human == nil then
  438. return
  439. end
  440. UnionWarLogic.WLVideo(human,msg)
  441. end