jjcNewLadderDB.lua 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. --------------------------------
  2. -- 文件名 : jjcNewLadderDB.lua
  3. -- 文件说明 : 天梯赛-DB数据
  4. -- 创建时间 : 2025/05/06
  5. -- 创建人 : FC
  6. --------------------------------
  7. local LuaMongo = _G.lua_mongo
  8. local Config = require("Config")
  9. local DB = require("common.DB")
  10. local Util = require("common.Util")
  11. local CommonDB = require("common.CommonDB")
  12. local CombatVideo = require("combat.CombatVideo")
  13. local CreateRole = require("role.CreateRole")
  14. local WarZoneConf = require("excel.WarZone")
  15. local JjcExcel = require("excel.jjc")
  16. local jjcNewLadderDefine = require("jjcnewladder.jjcNewLadderDefine")
  17. local nServerOffSet = 810538 -- 配置中服务器ID偏移量
  18. JJCNEWLADDERDB_PLAYER_RANK = {} -- 天梯赛真人对应排名
  19. JJCNEWLADDERDB_ROBOT_RANK = {} -- 机器人对应排名信息
  20. JJCNEWLADDERDB_ALL_RANK = {} -- 天梯赛排行榜信息
  21. local Jjc_QueryByUuid = {uuid = nil} -- DB查询数据
  22. -------------------------------- 以下是战区归宿的第一个服操作 ---------------------------
  23. -- 获取战区服务器ID
  24. function JjcNewLadderDB_ConfServerID2TrueServerID(nServerIDConf)
  25. return nServerIDConf + nServerOffSet - 1
  26. end
  27. -- 获取战区配置服务器ID
  28. function JjcNewLadderDB_TrueServerID2ConfServerID(nServerID)
  29. return nServerID - nServerOffSet + 1
  30. end
  31. -- 判断是否是战区所属的第一个服
  32. local function JjcNewLadderDB_IsFirstServer(nServerID)
  33. local nServerIDConf = JjcNewLadderDB_TrueServerID2ConfServerID(nServerID)
  34. local bRet = false
  35. for _, v in pairs(WarZoneConf) do
  36. if v.nMinServerID == nServerIDConf then
  37. bRet = true
  38. break
  39. end
  40. -- 大于了,没必要找直接返回
  41. if v.nMinServerID > nServerIDConf then
  42. break
  43. end
  44. end
  45. return bRet
  46. end
  47. -- 移除数据
  48. local function JjcNewLadderDB_RemoveDB(uuid)
  49. if not uuid then return end
  50. Jjc_QueryByUuid.uuid = uuid
  51. LuaMongo.remove(DB.db_jjcLadder, QueryByUuid)
  52. end
  53. -- 更新数据
  54. local function JjcNewLadderDB_UpdateData(tRankData)
  55. if not tRankData.uuid then return end
  56. QueryByUuid.uuid = tRankData.uuid
  57. LuaMongo.update(DB.db_jjcLadder, QueryByUuid, tRankData)
  58. end
  59. -- 插入数据
  60. local function JjcNewLadderDB_InsertData(tRankData)
  61. LuaMongo.insert(DB.db_jjcLadder, tRankData)
  62. end
  63. -- 判断是否是NPC
  64. local function JjcNewLadderDB_isNpc(tRankData)
  65. if tRankData.nPoint and tRankData.nMonsterOutID then
  66. return true
  67. end
  68. return false
  69. end
  70. local function JjcNewLadderDB_AddNpc(tNpcConfig, nID)
  71. local jjcData = {}
  72. local r = math.random(1, #tNpcConfig.monsterOutID)
  73. jjcData.monsterOutID = tNpcConfig.monsterOutID[r]
  74. jjcData.lv = 50
  75. jjcData.head = CreateRole.getRandomHead()
  76. jjcData.name = CreateRole.getRandomName()
  77. jjcData.body = CreateRole.getRandomBody()
  78. jjcData.identity = CreateRole.getFakeIdentityMax()
  79. jjcData.point = tNpcConfig.initPoint
  80. jjcData.zhandouli = math.random(tNpcConfig.zhandouli[1], tNpcConfig.zhandouli[2])
  81. jjcData.time = os.time()
  82. jjcData.uuid = nID
  83. LuaMongo.insert(DB.db_jjcLadder, jjcData)
  84. JJCNEWLADDERDB_ALL_RANK[#JJCNEWLADDERDB_ALL_RANK + 1] = jjcData
  85. if #JJCNEWLADDERDB_ROBOT_RANK < jjcNewLadderDefine.JJC_NEWLADDER_ROBOT_NUM then
  86. JJCNEWLADDERDB_ROBOT_RANK[#JJCNEWLADDERDB_ROBOT_RANK + 1] = jjcData
  87. end
  88. end
  89. -- 初始化机器人数据
  90. local function JjcNewLadderDB_InitRobot()
  91. if false == JjcNewLadderDB_IsFirstServer(Config.SVR_INDEX) then
  92. return
  93. end
  94. -- 生成NPC数据
  95. for _, npcConfig in ipairs(JjcExcel.skyladdernpc) do
  96. local nID = 1
  97. for i = 1, npcConfig.cnt do
  98. JjcNewLadderDB_AddNpc(npcConfig, nID)
  99. nID = nID + 1
  100. end
  101. end
  102. end
  103. local function JjcNewLadderDB_ownCmp(a, b)
  104. if a.point ~= b.point then
  105. return a.point > b.point
  106. end
  107. return a.time < b.time
  108. end
  109. -- 进行排序
  110. local function JjcNewLadderDB_SortRank()
  111. if #JJCNEWLADDERDB_ALL_RANK > 1 then
  112. table.sort(JJCNEWLADDERDB_ALL_RANK, JjcNewLadderDB_ownCmp)
  113. end
  114. for rank = 1, #JJCNEWLADDERDB_ALL_RANK do
  115. local uuid = JJCNEWLADDERDB_ALL_RANK[rank].uuid
  116. UUID_2_RANK[uuid] = rank
  117. end
  118. end
  119. -- 战区第一个服清理数据
  120. local function JjcNewLadderDB_FirstServerRest(nOperate)
  121. JJCNEWLADDERDB_PLAYER_RANK = {}
  122. JJCNEWLADDERDB_ROBOT_RANK = {}
  123. JJCNEWLADDERDB_ALL_RANK = {}
  124. LuaMongo.remove(DB.db_jjcLadder)
  125. -- for i = 1, nLen, 1 do
  126. -- local tRankData = JJCNEWLADDERDB_ALL_RANK[i]
  127. -- if false == JjcNewLadderDB_isNpc(tRankData) then
  128. -- JjcNewLadderDB_RemoveDB(tRankData.uuid)
  129. -- end
  130. -- JJCNEWLADDERDB_ALL_RANK[i] = nil
  131. -- end
  132. --
  133. -- 初始化机器人
  134. if true == nOperate then
  135. JjcNewLadderDB_InitRobot()
  136. end
  137. -- 进行排序和映射
  138. JjcNewLadderDB_SortRank()
  139. end
  140. -- 初始化数据
  141. function JjcNewLadderDB_Init()
  142. if JjcNewLadderDB_IsFirstServer(Config.SVR_INDEX) then
  143. JjcNewLadderDB_FirstServerRest(true)
  144. end
  145. -- 清理录像
  146. CombatVideo.cleanJJCLadderVideo()
  147. end
  148. -- 判断是否为空
  149. local function JjcNewLadderDB_isEmpty()
  150. LuaMongo.find(DB.db_jjcLadder)
  151. local data = {}
  152. if not LuaMongo.next(data) then
  153. return true
  154. end
  155. return false
  156. end
  157. -- 加载数据
  158. local function JjcNewLadderDB_LoadData()
  159. LuaMongo.find(DB.db_jjcLadder)
  160. while true do
  161. local data = {}
  162. if not LuaMongo.next(data) then
  163. break
  164. end
  165. if data.point then
  166. JJCNEWLADDERDB_ALL_RANK[#JJCNEWLADDERDB_ALL_RANK + 1] = data
  167. else
  168. return
  169. end
  170. end
  171. -- 加载完排序
  172. JjcNewLadderDB_SortRank()
  173. for i = 1, #JJCNEWLADDERDB_ALL_RANK do
  174. if #JJCNEWLADDERDB_ROBOT_RANK >= jjcNewLadderDefine.JJC_NEWLADDER_ROBOT_NUM then
  175. break
  176. end
  177. local tRankData = JJCNEWLADDERDB_ALL_RANK[i]
  178. if isNpc(tRankData) then
  179. JJCNEWLADDERDB_ROBOT_RANK[#JJCNEWLADDERDB_ROBOT_RANK + 1] = tRankData
  180. end
  181. end
  182. end
  183. -- 起服操作
  184. function JjcNewLadderDB_initAfterStart()
  185. if _G.is_middle == true then
  186. return
  187. end
  188. if true == JjcNewLadderDB_IsFirstServer(Config.SVR_INDEX) then
  189. if true == JjcNewLadderDB_isEmpty() then
  190. JjcNewLadderDB_Init()
  191. else
  192. JjcNewLadderDB_LoadData()
  193. end
  194. else
  195. end
  196. end
  197. -------------------------------- 战区归宿的第一个服操作结束 ---------------------------
  198. -------------------------------- 通用函数 ---------------------------
  199. function JjcNewLadderDB_CheckIsReset()
  200. local nNowTime = os.time()
  201. local nEndTime = CommonDB.GetJjcLadderEndTime()
  202. if 0 >= nEndTime then
  203. local tDate = os.date("*t",nNowTime)
  204. if tDate.wday >= jjcNewLadderDefine.JJC_NEWLADDER_OPENDAY and jjcNewLadderDefine.JJC_NEWLADDER_OPENDAY <= tDate.wday then
  205. return true
  206. end
  207. return false
  208. else
  209. return nNowTime > nEndTime
  210. end
  211. end
  212. -------------------------------- 通用函数 ---------------------------