local RoleBattle = {} --[[ 100 剧情关卡类 200 非剧情类普通关卡 300 每日任务类、日常本类 400 资源获取类关卡 500 PVP关卡 1000 活动期间限定类关卡 2000 其他 ]] local BattleType = { hang = 100, tower = 200, bonus = 300, pvpc = 500, pvph = 501, act_battle = 502, } RoleBattle.bind = function (Role) -- TODO 检查战斗是否作弊 local function checkBattleCheat() end function Role:checkBattle(battleType, params) local clientInfo = params.info or {} if not BattleType[battleType] then print(string.format("NO find battleType: %s", battleType)) return end local selflist = {} local heroscore = 0 local teamskill = {} local enemylist = {} local fixData = { hang = function() for slot, hero in pairs(self:getProperty("hangTS")) do selflist[slot] = hero.type end heroscore = self:getProperty("hangTBV") for slot , one in pairs(self:getProperty("hangTB").supports) do teamskill[one[1]] = one[2] end local carbonData = csvdb["idle_battleCsv"][params.id] local monsterData = csvdb[carbonData.monster:match("/([^/]*)$") .. "Csv"] for slot, one in pairs(monsterData[1]) do enemylist[#enemylist + 1] = one["unitType"] end end, tower = function() local towerF = self:getTeamFormatByType(TeamSystemType.Tower) for slot, hero in pairs(self:getTeamHerosInfo(towerF).heros) do selflist[slot] = hero.type end heroscore = self:getTeamBattleValue(towerF.heros) for slot , one in pairs(self:getTeamBattleInfo(towerF).supports) do teamskill[one[1]] = one[2] end local carbonData = csvdb["tower_battleCsv"][params.id] local monsterData = csvdb[carbonData.monster:match("/([^/]*)$") .. "Csv"] for slot, one in pairs(monsterData[1]) do enemylist[#enemylist + 1] = one["unitType"] end end, bonus = function() local bTeam = self:getTeamFormatByType(TeamSystemType.BonusBattle) for slot, hero in pairs(self:getTeamHerosInfo(bTeam).heros) do selflist[slot] = hero.type end heroscore = self:getTeamBattleValue(bTeam.heros) for slot , one in pairs(self:getTeamBattleInfo(bTeam).supports) do teamskill[one[1]] = one[2] end local carbonData = csvdb["bonus_battleCsv"][params.id] local monsterData = csvdb[carbonData.monster:match("/([^/]*)$") .. "Csv"] for slot, one in pairs(monsterData[1]) do enemylist[#enemylist + 1] = one["unitType"] end end, act_battle = function() for slot, hero in pairs(self:getTeamHerosInfo(params).heros) do selflist[slot] = hero.type end heroscore = self:getTeamBattleValue(params.heros) for slot , one in pairs(params.supports) do teamskill[one[1]] = one[2] end local carbonData = params.cfg local monsterData = csvdb[carbonData.monster:match("/([^/]*)$") .. "Csv"] for slot, one in pairs(monsterData[1]) do enemylist[#enemylist + 1] = one["unitType"] end end, pvpc = function() for slot, hero in pairs(self:getProperty("pvpTSC")) do selflist[slot] = hero.type end heroscore = self:getProperty("pvpTBVC") for slot , one in pairs(self:getProperty("pvpTBC").supports) do teamskill[one[1]] = one[2] end if params.robotId then local carbonData = csvdb["pvp_robotCsv"][params.robotId] local monsterData = csvdb[carbonData.monster:match("/([^/]*)$") .. "Csv"] for slot, one in pairs(monsterData) do enemylist[#enemylist + 1] = one["unitType"] end else for slot, one in pairs((params.enemy or {})["heros"] or {}) do enemylist[slot] = one["type"] end end end, pvph = function() for idx, team in pairs(self:getProperty("pvpTSH")) do selflist[idx] = selflist[idx] or {} for slot, hero in pairs(team) do selflist[idx][slot] = hero.type end end for _, one in pairs(self:getProperty("pvpTBVH")) do heroscore = heroscore + one end for idx, team in pairs(self:getProperty("pvpTBH")) do for slot , one in pairs(team.supports) do teamskill[one[1]] = one[2] end end if params.robotId then local carbonData = csvdb["pvp_robot_groupCsv"][params.robotId] for idx = 1, 3 do enemylist[idx] = enemylist[idx] or {} local monsterData = csvdb[carbonData["monster" .. idx]:match("/([^/]*)$") .. "Csv"] for slot, one in pairs(monsterData) do enemylist[idx][#enemylist + 1] = one["unitType"] end end else for idx, team in pairs(params.enemy or {}) do enemylist[idx] = enemylist[idx] or {} for slot, one in pairs(team["heros"] or {}) do enemylist[idx][slot] = one["type"] end end end end } if fixData[battleType] then fixData[battleType]() end -- robotId = match.t == 2 and match.id or nil, -- enemy = match.t == 1 and (revenge and _pvpRecordBattleInfoCacheH[match.id] or _pvpBattleInfoCacheH[match.id]) or nil, -- score = myScore, -- reward = reward, self:log("mission", { mission_threadid = battleType == "hang" and math.floor((params.id % 100) / 100) or 0, -- 大关卡ID mission_id = params.id or 0, -- 关卡ID mission_type = BattleType[battleType], -- 关卡类型,见关卡类型枚举表 mission_herolist = selflist, -- 英雄ID,排序以玩家出战设置为准,PVP多个队伍则记录多个列表。示例:[[1,2,3],[456]] mission_heroscore = heroscore, -- 编队总评分 mission_enemylist = enemylist, -- 地方英雄ID,排序以玩家出战设置为准,PVP多个队伍则记录多个列表。示例:[[1,2,3],[456]] mission_damage = clientInfo.damage or {}, -- 英雄输出值。示例:{'heroid1':1000,'heroid2':2000,………..} mission_ultskill = clientInfo.ultskill or {}, -- 大招使用情况。示例:{'heroid1':1000,'heroid2':2000,………..} mission_reward = params.reward or {}, -- 获得奖励,建议使用json格式记录。示例:{ "XX": "1", "XXX": "3"} mission_starttime = clientInfo.start or 0, -- 战斗开始时间,格式 unixtime 秒级 mission_roundtime = clientInfo.atime or 0, -- 对局时长(秒) mission_result = params.isWin and 1 or 2, -- 战斗结果(0-无效,1-胜利,2-失败) mission_star = params.star or 0, -- 战斗完成星数,无星级的话填写0 mission_restriction = 0, -- 周期内参与限制(0表示没有上限) mission_difficulty = 0, -- 关卡困难度,无难度区分的话填写0 mission_strength = 1, -- 消耗的体力或次数 mission_score = params.score or 0, -- 本局分数,PVP玩法记录为对战后积分,无得分的填0 mission_cleartype = 1, -- 1正常通关;2代理拾荒 mission_rank = params.rank, -- 对战后排名,适用于PVP玩法和电波塔,其他玩法留空 misson_monsterkill = clientInfo.kill or {}, -- 击杀怪物ID和数量,建议使用json格式记录。示例:{ "XX": "1", "XXX": "3"} misson_teamskill = teamskill, -- 编队支援技能和技能等级情况,json格式记录,{"teamskill1":1,"teamskill2":2,………..} }) end end return RoleBattle