| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- ---------------------------------------------------
- -- 过关斩将/圣树试炼 db
- -- 战斗对象
- -- drillObj = {_id,lv,head,headFrame,name,unionUuid,zhandouli,svrIndex,heroList,pet}
- -- 活动数据(进度等)
- -- drillData = {_id,drillId,drillObjs,heroStatus,buff,oper}
- ---------------------------------------------------
- local Config = require("Config")
- local DrillExcel = require("excel.drill")
- local LuaMongo = _G.lua_mongo
- local DB = require("common.DB")
- local Util = require("common.Util")
- local CommonDB = require("common.CommonDB")
- local CombatLogic = require("combat.CombatLogic")
- local CombatDefine = require("combat.CombatDefine")
- local CreateRole = require("role.CreateRole")
- local RoleLogic = require("role.RoleLogic")
- local BillboardDefine = require("billboard.BillboardDefine")
- local BillboardDB = require("billboard.BillboardDB")
- local FieldsRandom = {uuid = 1, zhandouli = 1}
- FieldsDot = {drillId = 1, heroStatus = 1}
- FieldsHelpInfo = {helpInfo = 1}
- QueryByUuid = {_id = nil}
- local QueryDrillByRandom = {zhandouli = {["$gte"] = 0, ["$lte"] = 0}, uuid = {["$nin"] = {}}}
- MONSTER_OBJLIST = MONSTER_OBJLIST or {} --
- local DRILL_DATA = {}
- function isUuidExistInDB(uuid)
- QueryByUuid._id = uuid
- LuaMongo.find(DB.db_drill, QueryByUuid, FieldName)
- return LuaMongo.next(DRILL_DATA) and DRILL_DATA
- end
- -- (本服)创建玩家对战信息
- function createDrillData(human, drillId)
- local heroList, helpList, rolebase , formation, jiban = CombatLogic.getHumanObjList(human, CombatDefine.COMBAT_TYPE1)
- if not heroList or not next(heroList) then return end -- 没有上阵
- local drillData = {}
- drillData._id = human.db._id
- drillData.uuid = human.db._id
- drillData.drillId = drillId -- 当前关卡id 1-16,16表示已通关
- drillData.drillObjs = {} -- 关卡对象列表[drillId] = drillObj
- drillData.heroList = heroList
- drillData.helpList = helpList
- drillData.jiban = jiban
- drillData.formation = formation
- drillData.heroStatus = nil -- 英雄状态 [heroUuid] = hpRate
- drillData.helpUuids = nil -- 雇佣的助战英雄
- drillData.buff = nil -- 已获得buffer [id] = cnt
- drillData.oper = nil -- 操作次数 [optype] = cnt
- drillData.zhandouli = rolebase.zhandouli
- return drillData
- end
- -- (本服)获取数据
- function getDrillDataByUuid(uuid, fields)
- if _G.is_middle then return end
- if not uuid then return end -- 不能是空哦
- QueryByUuid._id = uuid
- LuaMongo.find(DB.db_drill, QueryByUuid, fields)
- local drillData = {}
- if not LuaMongo.next(drillData) then
- return
- end
- return drillData.drillId and drillData
- end
- -- (本服)更新
- function updateDrillData(drillData)
- if _G.is_middle then return end
- if not drillData._id then return end
- if not drillData.drillId then return end
- local uuid = drillData._id
- if isUuidExistInDB(uuid) then
- QueryByUuid._id = uuid
- LuaMongo.update(DB.db_drill, QueryByUuid, drillData)
- else
- LuaMongo.insert(DB.db_drill, drillData)
- end
- end
- -- (本服)检查是否需要重置
- function checkDrillReset()
- if _G.is_middle then return end
- local drill = CommonDB.getValueByKey(CommonDB.KEY_DRILL)
- if not drill or not Util.isSameDay(drill.time) then
- reset()
- drill = {}
- drill.time = os.time()
- CommonDB.updateValue(CommonDB.KEY_DRILL, drill)
- end
- end
- -- (本服)创建对象数据(怪物)
- function createDrillMonster(uuid, monsterOutID, zhandouli)
- if not uuid then return end
- local heroList, helpList, rolebase, formation = CombatLogic.getMonsterObjList(monsterOutID)
- if not rolebase then return end
- local drillObj = {}
- RoleLogic.makeRoleBase(rolebase, drillObj, true) -- 先初始角色基础信息
- drillObj.uuid = uuid
- drillObj.svrIndex = 1
- drillObj.svrName = Config.SVR_NAME
- drillObj.heroList = heroList
- drillObj.helpList = helpList
- drillObj.formation = formation
- drillObj.monsterOutID = monsterOutID -- 怪物额外字段
- drillObj.objStatus = nil -- 英雄状态 [index] = hpRate
-
- -- 重新设置某些基础信息
- drillObj.name = CreateRole.getRandomName()
- drillObj.head = CreateRole.getRandomHead()
- drillObj.zhandouli = zhandouli
- return drillObj
- end
- -- (本服)每次重启都重新生成怪物数据
- local MONSTER_RANDOM_CNT = 15 -- 每个区间生成怪物数量
- function createMonsterDrillObj()
- MONSTER_OBJLIST = {}
- for i = 1, #DrillExcel.npc do
- local config = DrillExcel.npc[i]
- for j = 1, MONSTER_RANDOM_CNT do
- local zhandouli = math.random(config.zhandouli[1], config.zhandouli[2])
- local r = math.random(1, #config.monsterOutID)
- local monsterOutID = config.monsterOutID[r]
- local monsterUuid = "npc-" .. i .. "-" .. j
- local drillObj = createDrillMonster(monsterUuid, monsterOutID, zhandouli)
- MONSTER_OBJLIST[#MONSTER_OBJLIST + 1] = drillObj
- end
- end
- end
- -- 创建对象数据(人物)
- function createDrillObj(uuid)
- local fakeHuman = CombatLogic.createCombatFakeHuman(uuid)
- if not fakeHuman then return end
- local objList, helpList, rolebase, formation, jiban = CombatLogic.getHumanObjList(fakeHuman, CombatDefine.COMBAT_TYPE1)
- if not objList or not next(objList) then return end -- 没有上阵
- local drillObj = {}
- RoleLogic.makeRoleBase(rolebase, drillObj, true) -- 先初始角色基础信息
- drillObj._id = fakeHuman.db._id
- drillObj.uuid = nil
- drillObj.heroList = objList
- drillObj.helpList = helpList
- drillObj.formation = formation
- drillObj.jiban = jiban
- drillObj.objStatus = nil -- 英雄状态 [index] = hpRate
- return drillObj
- end
- -- (本服)随机一个战斗对象
- local RANDOM_LIST = {}
- function randomDrillObj(zdlMin, zdlMax, ninTb, isMonster)
- local cnt = 0
- local without = {}
- for _, uuid in pairs(ninTb) do
- without[uuid] = true
- end
- if isMonster then
- RANDOM_LIST = {}
- for _, drillObj in ipairs(MONSTER_OBJLIST) do
- if drillObj.zhandouli >= zdlMin and
- drillObj.zhandouli <= zdlMax and
- not without[drillObj.uuid] then
- cnt = cnt + 1
- RANDOM_LIST[cnt]= drillObj
- end
- end
- if cnt < 1 then return end
- local r = math.random(1, cnt)
- return RANDOM_LIST[r]
- else
- RANDOM_LIST = {}
- local board = BillboardDB.getBoard(BillboardDefine.TYPE_ZHANDOULI)
- local boardLen = board and #board.rank2data or 0
- for i = 1, boardLen do
- local rankData = board.rank2data[i]
- if zdlMin <= rankData.value1 and
- rankData.value1 <= zdlMax and
- not without[rankData.uuid] then
- cnt = cnt + 1
- RANDOM_LIST[cnt] = rankData.uuid
- end
- end
- if cnt < 1 then return end
- local r = math.random(1, cnt)
- local uuid = RANDOM_LIST[r]
- return createDrillObj(uuid)
- end
- end
- function reset()
- LuaMongo.remove(DB.db_drill)
- createMonsterDrillObj()
- end
- function initAfterStart()
- createMonsterDrillObj()
- checkDrillReset()
- end
|