RoleStrongLogic.lua 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. local LuaMongo = _G.lua_mongo
  2. local DB = require("common.DB")
  3. local HeroExcel = require("excel.hero")
  4. local HeroLogic = require("hero.HeroLogic")
  5. local Config = require("Config")
  6. local RoleLogic = require("role.RoleLogic")
  7. local ObjHuman = require("core.ObjHuman")
  8. local RoleDefine = require("role.RoleDefine")
  9. local AssessExcel = require("excel.assess")
  10. local MoshouLogic = require("moshou.MoshouLogic")
  11. local CombatDefine = require("combat.CombatDefine")
  12. local CombatPosLogic = require("combat.CombatPosLogic")
  13. local Msg = require("core.Msg")
  14. db = db or { }
  15. -- 启动后初始化
  16. function initAfterStart()
  17. -- 中心服不处理
  18. if _G.is_middle == true then return end
  19. -- 处理排行榜数据
  20. local cnt = 0
  21. LuaMongo.find(DB.db_hero_pingfen, nil, { id = 1, attr=1 })
  22. while true do
  23. local net = { }
  24. if not LuaMongo.next(net) then
  25. break
  26. end
  27. cnt = cnt + 1
  28. if cnt % 1000 == 0 then
  29. _G.collectgarbage("step", 100000)
  30. end
  31. updateData(net.id, RoleDefine.PINGFEN_LV, net.attr[RoleDefine.PINGFEN_LV])
  32. updateData(net.id, RoleDefine.PINGFEN_STAR, net.attr[RoleDefine.PINGFEN_STAR])
  33. updateData(net.id, RoleDefine.PINGFEN_JINJIE, net.attr[RoleDefine.PINGFEN_JINJIE])
  34. updateData(net.id, RoleDefine.PINGFEN_EQUIP, net.attr[RoleDefine.PINGFEN_EQUIP])
  35. updateData(net.id, RoleDefine.PINGFEN_UNION, net.attr[RoleDefine.PINGFEN_UNION])
  36. updateData(net.id, RoleDefine.PINGFEN_FUWEN, net.attr[RoleDefine.PINGFEN_FUWEN])
  37. end
  38. end
  39. function updateData(heroID, pingFengType, pingFeng)
  40. db[heroID] = db[heroID] or { }
  41. db[heroID][pingFengType] = db[heroID][pingFengType] or 0
  42. if pingFeng > db[heroID][pingFengType] then
  43. db[heroID][pingFengType] = pingFeng
  44. end
  45. end
  46. -- 提交当前战役阵容
  47. local queryHeroByUuid = { uuid = nil}
  48. local net = {}
  49. function onLogin(human)
  50. if _G.is_middle == true then return end
  51. local combatHero = CombatPosLogic.getCombatHeros(human, CombatDefine.COMBAT_TYPE1)
  52. if not combatHero then return end
  53. local len = 0
  54. for k, uuid in pairs(combatHero) do
  55. local heroGrid = HeroLogic.getHeroGridByUuid(human, uuid)
  56. if heroGrid then
  57. local heroConfig = HeroExcel.hero[heroGrid.id]
  58. local attrs = ObjHuman.getHeroAttrs(human, heroGrid.bagIndex)
  59. net.index = heroGrid.bagIndex
  60. net.id = heroGrid.id
  61. net.lv = heroGrid.lv
  62. net.quality = heroGrid.quality
  63. net.camp = heroConfig.camp
  64. net.uuid = heroGrid.uuid
  65. net[RoleDefine.PINGFEN_LV] = attrs[RoleDefine.PINGFEN_LV]
  66. net[RoleDefine.PINGFEN_STAR] = attrs[RoleDefine.PINGFEN_STAR]
  67. net[RoleDefine.PINGFEN_JINJIE] = attrs[RoleDefine.PINGFEN_JINJIE]
  68. net[RoleDefine.PINGFEN_EQUIP] = attrs[RoleDefine.PINGFEN_EQUIP]
  69. net[RoleDefine.PINGFEN_UNION] = attrs[RoleDefine.PINGFEN_UNION]
  70. net[RoleDefine.PINGFEN_FUWEN] = attrs[RoleDefine.PINGFEN_FUWEN]
  71. add(human, net)
  72. end
  73. end
  74. end
  75. --
  76. function add(human, grid)
  77. local heroConfig = HeroExcel.hero[grid.id]
  78. local net = { }
  79. net.id = grid.id
  80. net.uuid = grid.uuid or 0
  81. net.icon = heroConfig.head
  82. net.camp = heroConfig.camp
  83. net.job = heroConfig.job
  84. net.star = heroConfig.star
  85. net.lv = grid.lv or 1
  86. net.quality = grid.quality or 0
  87. net.srvIndex = Config.SVR_INDEX
  88. net.srvName = Config.SVR_NAME
  89. net.attr = {}
  90. net.attr[RoleDefine.PINGFEN_LV] = grid[RoleDefine.PINGFEN_LV]
  91. net.attr[RoleDefine.PINGFEN_STAR] = grid[RoleDefine.PINGFEN_STAR]
  92. net.attr[RoleDefine.PINGFEN_JINJIE] = grid[RoleDefine.PINGFEN_JINJIE]
  93. net.attr[RoleDefine.PINGFEN_EQUIP] = grid[RoleDefine.PINGFEN_EQUIP]
  94. net.attr[RoleDefine.PINGFEN_UNION] = grid[RoleDefine.PINGFEN_UNION]
  95. net.attr[RoleDefine.PINGFEN_FUWEN] = grid[RoleDefine.PINGFEN_FUWEN]
  96. net.roleBase = {}
  97. RoleLogic.makeRoleBase(human.db, net.roleBase)
  98. updateData(net.id, RoleDefine.PINGFEN_LV, net.attr[RoleDefine.PINGFEN_LV])
  99. updateData(net.id, RoleDefine.PINGFEN_STAR, net.attr[RoleDefine.PINGFEN_STAR])
  100. updateData(net.id, RoleDefine.PINGFEN_JINJIE, net.attr[RoleDefine.PINGFEN_JINJIE])
  101. updateData(net.id, RoleDefine.PINGFEN_EQUIP, net.attr[RoleDefine.PINGFEN_EQUIP])
  102. updateData(net.id, RoleDefine.PINGFEN_UNION, net.attr[RoleDefine.PINGFEN_UNION])
  103. updateData(net.id, RoleDefine.PINGFEN_FUWEN, net.attr[RoleDefine.PINGFEN_FUWEN])
  104. local data = queryDB(grid.uuid, pingFengType)
  105. if data ~= nil then
  106. queryHeroByUuid.uuid = grid.uuid
  107. local setTb = { ["$set"] = net }
  108. LuaMongo.update(DB.db_hero_pingfen, queryHeroByUuid, setTb)
  109. return
  110. end
  111. LuaMongo.insert(DB.db_hero_pingfen, net)
  112. end
  113. -- 查询队列
  114. function queryDB(uuid)
  115. queryHeroByUuid.uuid = uuid
  116. local heroData = { }
  117. LuaMongo.find(DB.db_hero_pingfen, queryHeroByUuid)
  118. if not LuaMongo.next(heroData) then
  119. return nil
  120. end
  121. return heroData
  122. end
  123. --
  124. function query(human, id)
  125. local dbData = db[id]
  126. if not dbData then return end
  127. local msgRet = Msg.gc.GC_HERO_STRONG_QUERY
  128. local len = 0
  129. for k, v in pairs(dbData) do
  130. len = len + 1
  131. msgRet.pingFengType[len] = k
  132. msgRet.pingFengValue[len] = v
  133. end
  134. msgRet.pingFengType[0] = len
  135. msgRet.pingFengValue[0] = len
  136. Msg.send(msgRet, human.fd)
  137. end
  138. function doCalcMoShouPingFen(human, attr)
  139. -- 魔兽评分
  140. local moShouPingFen = 0
  141. local moShouLv = MoshouLogic.getMoshouLv(human)
  142. local moShouLvPingFen = AssessExcel.moShouLv[moShouLv] and AssessExcel.moShouLv[moShouLv].grade or 0
  143. moShouPingFen = moShouPingFen + moShouLvPingFen
  144. local jingLian = MoshouLogic.getMoShouJiLian(human)
  145. local jingLianPingFen = AssessExcel.moShouJingLian[jingLian] and AssessExcel.moShouJingLian[jingLian].grade or 0
  146. moShouPingFen = moShouPingFen + jingLianPingFen
  147. local zhuHun = MoshouLogic.getMoShouZhuHunNum(human)
  148. local zhuHunPingFen = AssessExcel.moShouZhuHun[zhuHun] and AssessExcel.moShouZhuHun[zhuHun].grade or 0
  149. moShouPingFen = moShouPingFen + zhuHunPingFen
  150. local skillLV = MoshouLogic.getMoShouSkillLv(human)
  151. local skillLVPingFen = AssessExcel.moShouSkillLv[skillLV] and AssessExcel.moShouSkillLv[skillLV].grade or 0
  152. moShouPingFen = moShouPingFen + skillLVPingFen
  153. attr[RoleDefine.PINGFEN_MOSHOU] = moShouPingFen
  154. human.db.moShouPingFen = moShouPingFen
  155. end