| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254 |
- --------------------------------
- -- 文件名 : jjcNewLadderDB.lua
- -- 文件说明 : 天梯赛-DB数据
- -- 创建时间 : 2025/05/06
- -- 创建人 : FC
- --------------------------------
- local LuaMongo = _G.lua_mongo
- local Config = require("Config")
- local DB = require("common.DB")
- local Util = require("common.Util")
- local CommonDB = require("common.CommonDB")
- local CombatVideo = require("combat.CombatVideo")
- local CreateRole = require("role.CreateRole")
- local WarZoneConf = require("excel.WarZone")
- local JjcExcel = require("excel.jjc")
- local jjcNewLadderDefine = require("jjcnewladder.jjcNewLadderDefine")
- local nServerOffSet = 810538 -- 配置中服务器ID偏移量
- JJCNEWLADDERDB_PLAYER_RANK = {} -- 天梯赛真人对应排名
- JJCNEWLADDERDB_ROBOT_RANK = {} -- 机器人对应排名信息
- JJCNEWLADDERDB_ALL_RANK = {} -- 天梯赛排行榜信息
- local Jjc_QueryByUuid = {uuid = nil} -- DB查询数据
- -------------------------------- 以下是战区归宿的第一个服操作 ---------------------------
- -- 获取战区服务器ID
- function JjcNewLadderDB_ConfServerID2TrueServerID(nServerIDConf)
- return nServerIDConf + nServerOffSet - 1
- end
- -- 获取战区配置服务器ID
- function JjcNewLadderDB_TrueServerID2ConfServerID(nServerID)
- return nServerID - nServerOffSet + 1
- end
- -- 判断是否是战区所属的第一个服
- local function JjcNewLadderDB_IsFirstServer(nServerID)
- local nServerIDConf = JjcNewLadderDB_TrueServerID2ConfServerID(nServerID)
-
- local bRet = false
- for _, v in pairs(WarZoneConf) do
- if v.nMinServerID == nServerIDConf then
- bRet = true
- break
- end
- -- 大于了,没必要找直接返回
- if v.nMinServerID > nServerIDConf then
- break
- end
- end
- return bRet
- end
- -- 移除数据
- local function JjcNewLadderDB_RemoveDB(uuid)
- if not uuid then return end
- Jjc_QueryByUuid.uuid = uuid
- LuaMongo.remove(DB.db_jjcLadder, QueryByUuid)
- end
- -- 更新数据
- local function JjcNewLadderDB_UpdateData(tRankData)
- if not tRankData.uuid then return end
- QueryByUuid.uuid = tRankData.uuid
- LuaMongo.update(DB.db_jjcLadder, QueryByUuid, tRankData)
- end
- -- 插入数据
- local function JjcNewLadderDB_InsertData(tRankData)
- LuaMongo.insert(DB.db_jjcLadder, tRankData)
- end
- -- 判断是否是NPC
- local function JjcNewLadderDB_isNpc(tRankData)
- if tRankData.nPoint and tRankData.nMonsterOutID then
- return true
- end
- return false
- end
- local function JjcNewLadderDB_AddNpc(tNpcConfig, nID)
- local jjcData = {}
- local r = math.random(1, #tNpcConfig.monsterOutID)
- jjcData.monsterOutID = tNpcConfig.monsterOutID[r]
- jjcData.lv = 50
- jjcData.head = CreateRole.getRandomHead()
- jjcData.name = CreateRole.getRandomName()
- jjcData.body = CreateRole.getRandomBody()
- jjcData.identity = CreateRole.getFakeIdentityMax()
- jjcData.point = tNpcConfig.initPoint
- jjcData.zhandouli = math.random(tNpcConfig.zhandouli[1], tNpcConfig.zhandouli[2])
- jjcData.time = os.time()
- jjcData.uuid = nID
- LuaMongo.insert(DB.db_jjcLadder, jjcData)
- JJCNEWLADDERDB_ALL_RANK[#JJCNEWLADDERDB_ALL_RANK + 1] = jjcData
-
- if #JJCNEWLADDERDB_ROBOT_RANK < jjcNewLadderDefine.JJC_NEWLADDER_ROBOT_NUM then
- JJCNEWLADDERDB_ROBOT_RANK[#JJCNEWLADDERDB_ROBOT_RANK + 1] = jjcData
- end
- end
- -- 初始化机器人数据
- local function JjcNewLadderDB_InitRobot()
- if false == JjcNewLadderDB_IsFirstServer(Config.SVR_INDEX) then
- return
- end
- -- 生成NPC数据
- for _, npcConfig in ipairs(JjcExcel.skyladdernpc) do
- local nID = 1
- for i = 1, npcConfig.cnt do
- JjcNewLadderDB_AddNpc(npcConfig, nID)
- nID = nID + 1
- end
- end
- end
- local function JjcNewLadderDB_ownCmp(a, b)
- if a.point ~= b.point then
- return a.point > b.point
- end
- return a.time < b.time
- end
- -- 进行排序
- local function JjcNewLadderDB_SortRank()
- if #JJCNEWLADDERDB_ALL_RANK > 1 then
- table.sort(JJCNEWLADDERDB_ALL_RANK, JjcNewLadderDB_ownCmp)
- end
- for rank = 1, #JJCNEWLADDERDB_ALL_RANK do
- local uuid = JJCNEWLADDERDB_ALL_RANK[rank].uuid
- UUID_2_RANK[uuid] = rank
- end
- end
- -- 战区第一个服清理数据
- local function JjcNewLadderDB_FirstServerRest(nOperate)
- JJCNEWLADDERDB_PLAYER_RANK = {}
- JJCNEWLADDERDB_ROBOT_RANK = {}
- JJCNEWLADDERDB_ALL_RANK = {}
- LuaMongo.remove(DB.db_jjcLadder)
- -- for i = 1, nLen, 1 do
- -- local tRankData = JJCNEWLADDERDB_ALL_RANK[i]
- -- if false == JjcNewLadderDB_isNpc(tRankData) then
- -- JjcNewLadderDB_RemoveDB(tRankData.uuid)
- -- end
- -- JJCNEWLADDERDB_ALL_RANK[i] = nil
- -- end
- --
- -- 初始化机器人
- if true == nOperate then
- JjcNewLadderDB_InitRobot()
- end
- -- 进行排序和映射
- JjcNewLadderDB_SortRank()
- end
- -- 初始化数据
- function JjcNewLadderDB_Init()
- if JjcNewLadderDB_IsFirstServer(Config.SVR_INDEX) then
- JjcNewLadderDB_FirstServerRest(true)
- end
- -- 清理录像
- CombatVideo.cleanJJCLadderVideo()
- end
- -- 判断是否为空
- local function JjcNewLadderDB_isEmpty()
- LuaMongo.find(DB.db_jjcLadder)
- local data = {}
- if not LuaMongo.next(data) then
- return true
- end
- return false
- end
- -- 加载数据
- local function JjcNewLadderDB_LoadData()
- LuaMongo.find(DB.db_jjcLadder)
- while true do
- local data = {}
- if not LuaMongo.next(data) then
- break
- end
- if data.point then
- JJCNEWLADDERDB_ALL_RANK[#JJCNEWLADDERDB_ALL_RANK + 1] = data
- else
- return
- end
- end
- -- 加载完排序
- JjcNewLadderDB_SortRank()
- for i = 1, #JJCNEWLADDERDB_ALL_RANK do
- if #JJCNEWLADDERDB_ROBOT_RANK >= jjcNewLadderDefine.JJC_NEWLADDER_ROBOT_NUM then
- break
- end
- local tRankData = JJCNEWLADDERDB_ALL_RANK[i]
- if isNpc(tRankData) then
- JJCNEWLADDERDB_ROBOT_RANK[#JJCNEWLADDERDB_ROBOT_RANK + 1] = tRankData
- end
- end
- end
- -- 起服操作
- function JjcNewLadderDB_initAfterStart()
- if _G.is_middle == true then
- return
- end
- if true == JjcNewLadderDB_IsFirstServer(Config.SVR_INDEX) then
- if true == JjcNewLadderDB_isEmpty() then
- JjcNewLadderDB_Init()
- else
- JjcNewLadderDB_LoadData()
- end
- else
- end
- end
- -------------------------------- 战区归宿的第一个服操作结束 ---------------------------
- -------------------------------- 通用函数 ---------------------------
- function JjcNewLadderDB_CheckIsReset()
- local nNowTime = os.time()
- local nEndTime = CommonDB.GetJjcLadderEndTime()
- if 0 >= nEndTime then
- local tDate = os.date("*t",nNowTime)
- if tDate.wday >= jjcNewLadderDefine.JJC_NEWLADDER_OPENDAY and jjcNewLadderDefine.JJC_NEWLADDER_OPENDAY <= tDate.wday then
- return true
- end
- return false
- else
- return nNowTime > nEndTime
- end
- end
- -------------------------------- 通用函数 ---------------------------
|