local LuaMongo = _G.lua_mongo local DB = require("common.DB") local HeroExcel = require("excel.hero") local HeroLogic = require("hero.HeroLogic") local Config = require("Config") local RoleLogic = require("role.RoleLogic") local ObjHuman = require("core.ObjHuman") local RoleDefine = require("role.RoleDefine") local AssessExcel = require("excel.assess") local MoshouLogic = require("moshou.MoshouLogic") local CombatDefine = require("combat.CombatDefine") local CombatPosLogic = require("combat.CombatPosLogic") local Msg = require("core.Msg") db = db or { } -- 启动后初始化 function initAfterStart() -- 中心服不处理 if _G.is_middle == true then return end -- 处理排行榜数据 local cnt = 0 LuaMongo.find(DB.db_hero_pingfen, nil, { id = 1, attr=1 }) while true do local net = { } if not LuaMongo.next(net) then break end cnt = cnt + 1 if cnt % 1000 == 0 then _G.collectgarbage("step", 100000) end updateData(net.id, RoleDefine.PINGFEN_LV, net.attr[RoleDefine.PINGFEN_LV]) updateData(net.id, RoleDefine.PINGFEN_STAR, net.attr[RoleDefine.PINGFEN_STAR]) updateData(net.id, RoleDefine.PINGFEN_JINJIE, net.attr[RoleDefine.PINGFEN_JINJIE]) updateData(net.id, RoleDefine.PINGFEN_EQUIP, net.attr[RoleDefine.PINGFEN_EQUIP]) updateData(net.id, RoleDefine.PINGFEN_UNION, net.attr[RoleDefine.PINGFEN_UNION]) updateData(net.id, RoleDefine.PINGFEN_FUWEN, net.attr[RoleDefine.PINGFEN_FUWEN]) end end function updateData(heroID, pingFengType, pingFeng) db[heroID] = db[heroID] or { } db[heroID][pingFengType] = db[heroID][pingFengType] or 0 if pingFeng > db[heroID][pingFengType] then db[heroID][pingFengType] = pingFeng end end -- 提交当前战役阵容 local queryHeroByUuid = { uuid = nil} local net = {} function onLogin(human) if _G.is_middle == true then return end local combatHero = CombatPosLogic.getCombatHeros(human, CombatDefine.COMBAT_TYPE1) if not combatHero then return end local len = 0 for k, uuid in pairs(combatHero) do local heroGrid = HeroLogic.getHeroGridByUuid(human, uuid) if heroGrid then local heroConfig = HeroExcel.hero[heroGrid.id] local attrs = ObjHuman.getHeroAttrs(human, heroGrid.bagIndex) net.index = heroGrid.bagIndex net.id = heroGrid.id net.lv = heroGrid.lv net.quality = heroGrid.quality net.camp = heroConfig.camp net.uuid = heroGrid.uuid net[RoleDefine.PINGFEN_LV] = attrs[RoleDefine.PINGFEN_LV] net[RoleDefine.PINGFEN_STAR] = attrs[RoleDefine.PINGFEN_STAR] net[RoleDefine.PINGFEN_JINJIE] = attrs[RoleDefine.PINGFEN_JINJIE] net[RoleDefine.PINGFEN_EQUIP] = attrs[RoleDefine.PINGFEN_EQUIP] net[RoleDefine.PINGFEN_UNION] = attrs[RoleDefine.PINGFEN_UNION] net[RoleDefine.PINGFEN_FUWEN] = attrs[RoleDefine.PINGFEN_FUWEN] add(human, net) end end end -- function add(human, grid) local heroConfig = HeroExcel.hero[grid.id] local net = { } net.id = grid.id net.uuid = grid.uuid or 0 net.icon = heroConfig.head net.camp = heroConfig.camp net.job = heroConfig.job net.star = heroConfig.star net.lv = grid.lv or 1 net.quality = grid.quality or 0 net.srvIndex = Config.SVR_INDEX net.srvName = Config.SVR_NAME net.attr = {} net.attr[RoleDefine.PINGFEN_LV] = grid[RoleDefine.PINGFEN_LV] net.attr[RoleDefine.PINGFEN_STAR] = grid[RoleDefine.PINGFEN_STAR] net.attr[RoleDefine.PINGFEN_JINJIE] = grid[RoleDefine.PINGFEN_JINJIE] net.attr[RoleDefine.PINGFEN_EQUIP] = grid[RoleDefine.PINGFEN_EQUIP] net.attr[RoleDefine.PINGFEN_UNION] = grid[RoleDefine.PINGFEN_UNION] net.attr[RoleDefine.PINGFEN_FUWEN] = grid[RoleDefine.PINGFEN_FUWEN] net.roleBase = {} RoleLogic.makeRoleBase(human.db, net.roleBase) updateData(net.id, RoleDefine.PINGFEN_LV, net.attr[RoleDefine.PINGFEN_LV]) updateData(net.id, RoleDefine.PINGFEN_STAR, net.attr[RoleDefine.PINGFEN_STAR]) updateData(net.id, RoleDefine.PINGFEN_JINJIE, net.attr[RoleDefine.PINGFEN_JINJIE]) updateData(net.id, RoleDefine.PINGFEN_EQUIP, net.attr[RoleDefine.PINGFEN_EQUIP]) updateData(net.id, RoleDefine.PINGFEN_UNION, net.attr[RoleDefine.PINGFEN_UNION]) updateData(net.id, RoleDefine.PINGFEN_FUWEN, net.attr[RoleDefine.PINGFEN_FUWEN]) local data = queryDB(grid.uuid, pingFengType) if data ~= nil then queryHeroByUuid.uuid = grid.uuid local setTb = { ["$set"] = net } LuaMongo.update(DB.db_hero_pingfen, queryHeroByUuid, setTb) return end LuaMongo.insert(DB.db_hero_pingfen, net) end -- 查询队列 function queryDB(uuid) queryHeroByUuid.uuid = uuid local heroData = { } LuaMongo.find(DB.db_hero_pingfen, queryHeroByUuid) if not LuaMongo.next(heroData) then return nil end return heroData end -- function query(human, id) local dbData = db[id] if not dbData then return end local msgRet = Msg.gc.GC_HERO_STRONG_QUERY local len = 0 for k, v in pairs(dbData) do len = len + 1 msgRet.pingFengType[len] = k msgRet.pingFengValue[len] = v end msgRet.pingFengType[0] = len msgRet.pingFengValue[0] = len Msg.send(msgRet, human.fd) end function doCalcMoShouPingFen(human, attr) -- 魔兽评分 local moShouPingFen = 0 local moShouLv = MoshouLogic.getMoshouLv(human) local moShouLvPingFen = AssessExcel.moShouLv[moShouLv] and AssessExcel.moShouLv[moShouLv].grade or 0 moShouPingFen = moShouPingFen + moShouLvPingFen local jingLian = MoshouLogic.getMoShouJiLian(human) local jingLianPingFen = AssessExcel.moShouJingLian[jingLian] and AssessExcel.moShouJingLian[jingLian].grade or 0 moShouPingFen = moShouPingFen + jingLianPingFen local zhuHun = MoshouLogic.getMoShouZhuHunNum(human) local zhuHunPingFen = AssessExcel.moShouZhuHun[zhuHun] and AssessExcel.moShouZhuHun[zhuHun].grade or 0 moShouPingFen = moShouPingFen + zhuHunPingFen local skillLV = MoshouLogic.getMoShouSkillLv(human) local skillLVPingFen = AssessExcel.moShouSkillLv[skillLV] and AssessExcel.moShouSkillLv[skillLV].grade or 0 moShouPingFen = moShouPingFen + skillLVPingFen attr[RoleDefine.PINGFEN_MOSHOU] = moShouPingFen human.db.moShouPingFen = moShouPingFen end