MoZhuDB.lua 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. local LuaMongo = _G.lua_mongo
  2. local CommonDB = require("common.CommonDB")
  3. local Util = require("common.Util")
  4. local ObjHuman = require("core.ObjHuman")
  5. local CombatVideo = require("combat.CombatVideo")
  6. local RoleDBLogic = require("role.RoleDBLogic")
  7. local RoleLogic = require("role.RoleLogic")
  8. local CombatLogic = require("combat.CombatLogic")
  9. local CombatDefine = require("combat.CombatDefine")
  10. local CombatPosLogic = require("combat.CombatPosLogic")
  11. local MoZhuExcel = require("excel.mozhu")
  12. local Util = require("common.Util")
  13. MOZHU_DB = MOZHU_DB or {}
  14. function initAfterStart()
  15. --if _G.is_middle ~= true then return end
  16. print(" initAfterStart initAfterStart")
  17. MOZHU_DB = CommonDB.getValueByKey(CommonDB.KEY_CIYUAN_MOZHU) or {}
  18. if not MOZHU_DB.time then
  19. initMoZhu()
  20. end
  21. end
  22. MOZHU_CITIAO_RARE_MAX = nil
  23. -- 随机 次元魔蛛 词条
  24. function randomCiTiao()
  25. local weekTime = Util.getWeekStartTime(os.time())
  26. if MOZHU_DB.citiaoTime and MOZHU_DB.citiaoTime == weekTime then
  27. return
  28. end
  29. MOZHU_DB.citiao = {}
  30. if not MOZHU_CITIAO_RARE_MAX then
  31. -- 防止策划删减 词条
  32. MOZHU_CITIAO_RARE_MAX = 0
  33. for k, v in pairs(MoZhuExcel.citiao) do
  34. if v then
  35. MOZHU_CITIAO_RARE_MAX = MOZHU_CITIAO_RARE_MAX + v.quanzhong
  36. end
  37. end
  38. end
  39. local getRare = 0
  40. for i = 1 , 1 do
  41. local random = math.random(1, MOZHU_CITIAO_RARE_MAX - getRare)
  42. for k, v in pairs(MoZhuExcel.citiao) do
  43. if not MOZHU_DB.citiao[k] and random <= v.quanzhong then
  44. MOZHU_DB.citiao[k] = i
  45. getRare = getRare + v.quanzhong
  46. break
  47. elseif not MOZHU_DB.citiao[k] then
  48. -- 防止循环最后一个是 已经随机过的 导致 随机不出来
  49. random = random - v.quanzhong
  50. end
  51. end
  52. end
  53. MOZHU_DB.citiaoTime = weekTime
  54. return MOZHU_DB.citiao
  55. end
  56. function initMoZhu()
  57. MOZHU_DB.time = os.time()
  58. MOZHU_DB.unionRank = {}
  59. MOZHU_DB.roleRank = {}
  60. MOZHU_DB.role = {}
  61. MOZHU_DB.union= {}
  62. randomCiTiao()
  63. saveMoZhu()
  64. end
  65. function getMoZhu()
  66. if not MOZHU_DB or MOZHU_DB == {} then
  67. MOZHU_DB = CommonDB.getValueByKey(CommonDB.KEY_CIYUAN_MOZHU) or {}
  68. end
  69. return MOZHU_DB
  70. end
  71. function saveMoZhu()
  72. CommonDB.updateValue(CommonDB.KEY_CIYUAN_MOZHU, MOZHU_DB)
  73. -- Util.printTable(MOZHU_DB)
  74. end
  75. function updateHurt(uuid, roleBase, maxHurt)
  76. local isChange = false
  77. if not MOZHU_DB.role[uuid] then
  78. MOZHU_DB.role[uuid] = MOZHU_DB.role[uuid] or {}
  79. MOZHU_DB.role[uuid].roleBase = roleBase
  80. MOZHU_DB.role[uuid].hurt = maxHurt
  81. MOZHU_DB.roleRank[#MOZHU_DB.roleRank + 1 ] = uuid
  82. isChange = true
  83. else
  84. if MOZHU_DB.role[uuid].hurt < maxHurt then
  85. MOZHU_DB.role[uuid].hurt = maxHurt
  86. isChange = true
  87. end
  88. end
  89. if isChange then
  90. refresRoleRank()
  91. end
  92. return isChange
  93. end
  94. function updateUnion(unionUuid, unionBase, isChange)
  95. if not unionUuid or unionUuid == "" then return end
  96. if not MOZHU_DB.union[unionUuid] then
  97. MOZHU_DB.union[unionUuid] = MOZHU_DB.union[unionUuid] or {}
  98. MOZHU_DB.union[unionUuid].unionBase = unionBase
  99. MOZHU_DB.union[unionUuid].time = os.time()
  100. MOZHU_DB.unionRank[#MOZHU_DB.unionRank + 1] = unionUuid
  101. end
  102. local unionHurt = 0
  103. for _, db in pairs(MOZHU_DB.role) do
  104. if db.roleBase and db.roleBase.unionUuid == unionUuid then
  105. unionHurt = unionHurt + db.hurt
  106. end
  107. end
  108. MOZHU_DB.union[unionUuid].hurt = unionHurt
  109. MOZHU_DB.union[unionUuid].time = os.time()
  110. refreshUnionRank()
  111. end
  112. function chageRoleUnionUuid(uuid, unionUuid)
  113. if not MOZHU_DB.role[uuid] then
  114. return
  115. end
  116. MOZHU_DB.role[uuid].roleBase.unionUuid = unionUuid
  117. end
  118. function refreshUnion(unionUuid, notRefresh)
  119. if not MOZHU_DB.union[unionUuid] then
  120. return
  121. end
  122. local unionHurt = 0
  123. for _, db in pairs(MOZHU_DB.role) do
  124. if db.roleBase and db.roleBase.unionUuid == unionUuid then
  125. unionHurt = unionHurt + db.hurt
  126. end
  127. end
  128. MOZHU_DB.union[unionUuid].hurt = unionHurt
  129. if notRefresh then
  130. else
  131. refreshUnionRank()
  132. end
  133. end
  134. function sortUnion(a, b)
  135. print(" a , b ", a , b )
  136. local unionA = MOZHU_DB.union[a] or 0
  137. local unionB = MOZHU_DB.union[b] or 0
  138. if unionA.hurt > unionB.hurt then
  139. return true
  140. elseif unionA.hurt == unionB.hurt then
  141. return unionA.time < unionB.time
  142. end
  143. end
  144. function refreshAllUnion()
  145. for unionUuid in pairs(MOZHU_DB.union) do
  146. refreshUnion(unionUuid, true)
  147. end
  148. refreshUnionRank()
  149. end
  150. function refreshUnionRank()
  151. -- Util.printTable( MOZHU_DB.unionRank)
  152. table.sort( MOZHU_DB.unionRank, sortUnion )
  153. end
  154. function sortRole(a, b)
  155. local roleA = MOZHU_DB.role[a]
  156. local roleB = MOZHU_DB.role[b]
  157. return roleA.hurt > roleB.hurt
  158. end
  159. function refresRoleRank()
  160. table.sort( MOZHU_DB.roleRank, sortRole)
  161. end
  162. function getRoleRank(uuid)
  163. if not MOZHU_DB.role[uuid] then
  164. return 0,0
  165. end
  166. for k, v in ipairs(MOZHU_DB.roleRank) do
  167. if v == uuid then
  168. return k, MOZHU_DB.role[uuid].hurt
  169. end
  170. end
  171. return 0,0
  172. end
  173. function getUnionRank(unionUuid)
  174. if not unionUuid or unionUuid == "" then
  175. return 0
  176. end
  177. for k, v in ipairs(MOZHU_DB.unionRank) do
  178. if v == unionUuid then
  179. return k
  180. end
  181. end
  182. return 0
  183. end
  184. function dismissUnion(unionUuid)
  185. local rank = getUnionRank(unionUuid)
  186. if rank > 0 then
  187. table.remove( MOZHU_DB.unionRank, rank)
  188. end
  189. if MOZHU_DB.union[unionUuid] then
  190. MOZHU_DB.union[unionUuid] = nil
  191. end
  192. saveMoZhu()
  193. end
  194. function delRole(uuid)
  195. if MOZHU_DB.role and MOZHU_DB.role[uuid] then
  196. local rank = getRoleRank(uuid)
  197. local role = MOZHU_DB.role[uuid]
  198. if rank > 0 and role.hurt >= 50000000 then
  199. table.remove( MOZHU_DB.roleRank, rank)
  200. MOZHU_DB.role[uuid] = nil
  201. refreshUnion(role.roleBase.unionUuid)
  202. end
  203. end
  204. end
  205. function checkUnion()
  206. for index, unionUuid in ipairs(MOZHU_DB.unionRank) do
  207. if unionUuid == "" then
  208. table.remove( MOZHU_DB.unionRank, index)
  209. if MOZHU_DB.union[""] then
  210. MOZHU_DB.union[""] = nil
  211. end
  212. saveMoZhu()
  213. break
  214. end
  215. end
  216. end