RoleBattle.lua 6.25 KB
local RoleBattle = {}

--[[
	100	剧情关卡类	
	200	非剧情类普通关卡	
	300	每日任务类、日常本类	
	400	资源获取类关卡	
	500	PVP关卡	
	1000	活动期间限定类关卡	
	2000	其他	
]]

local BattleType = {
	hang = 100,
	tower = 200,
	bonus = 300,
	pvpc = 500,
	pvph = 501,
}

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:getProperty("towerF")
			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:getProperty("bTeam")
			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["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,
		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[1]) 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[1]) 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 = 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