| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- -- 众神之战 战斗逻辑 --
- local JjcGodWarLogic = require("jjcGodWar.JjcGodWarLogic")
- local JjcGodWarDB = require("jjcGodWar.JjcGodWarDB")
- local CombatVideo = require("combat.CombatVideo")
- local CreateRole = require("role.CreateRole")
- local CombatDefine = require("combat.CombatDefine")
- local HeroGrid = require("hero.HeroGrid")
- local CombatLogic = require("combat.CombatLogic")
- local JjcDB = require("jjc.JjcDB")
- local WarReportLogic = require("warReport.WarReportLogic")
- local Util = require("common.Util")
- --竞猜阶段就开始生成战斗数据
- function timerCombat()
- local state,round,leftTime = JjcGodWarLogic.getNowGodWarState()
- if state == JjcGodWarLogic.GODWAR_STATE_WAIT or state == JjcGodWarLogic.GODWAR_STATE_END then return end
- if round == JjcGodWarLogic.GODWAR_JIEDUAN_ZHUNBEI then return end
- local paiweiMatch,needCombat = JjcGodWarDB.getNowNeedCombat(state)
- if not paiweiMatch or not needCombat then return end
- for i=1,#needCombat do
- local pairsData = needCombat[i]
- local atkUuid = pairsData.atkUuid
- local defUuid = pairsData.defUuid
- -- local atkRoleData = JjcGodWarDB.getGodWarDataByUuid(atkUuid)
- -- local defRoleData = JjcGodWarDB.getGodWarDataByUuid(defUuid)
-
- -- require("common.Util").printTable(atkRoleData)
- -- require("common.Util").printTable(defRoleData)
- local fakeHuman = {}
- fakeHuman.db = {}
- fakeHuman.db.combatQuick = {}
- local param = {}
- local cbParam = {}
- cbParam.atkIndex = 1
- cbParam.defIndex = 1
- cbParam.atkUuid = atkUuid
- cbParam.defUuid = defUuid
- cbParam.fenzuID = pairsData.fenzuID
- cbParam.pairsIndex = pairsData.pairsIndex
- --print("pairsIndex",pairsData.pairsIndex)
- cbParam.combatInfos = {}
-
- param.atkUuid = atkUuid
- param.defUuid = defUuid
- -- require("common.Util").printTable(atkRoleData)
- -- require("common.Util").printTable(defRoleData)
- CombatLogic.combatBegin(fakeHuman, 1001, param, CombatDefine.COMBAT_TYPE4, cbParam, true)
- end
- end
- function getCombatObjList(human, side, args)
- --print("getCombatObjList(human, side, args)")
- local uuid = args.atkUuid
- if CombatDefine.DEFEND_SIDE == side then
- uuid = args.defUuid
- end
-
- local data = JjcGodWarDB.getGodWarDataByUuid(uuid)
- if JjcDB.isNpc(data) then return end
- --require("common.Util").printTable(data.rolebase)
- return data.objList, data.helpList, data.rolebase, data.formation
- end
- function getCombatMonsterOutID(human, side, args)
- --print("getCombatMonsterOutID(human, side, args)")
- local uuid = args.atkUuid
- if CombatDefine.DEFEND_SIDE == side then
- uuid = args.defUuid
- end
-
- local data = JjcGodWarDB.getGodWarDataByUuid(uuid)
- --require("common.Util").printTable(data)
- if not JjcDB.isNpc(data) then return end
- --print("data.monsterOutID",data.monsterOutID)
- return data.monsterOutID,data.zhandouli
- end
- local function xuanbaPointCanGet(winUuid,state)
- if state == JjcGodWarLogic.GODWAR_STATE_XUANBA1 then return 20 end
- local list = JjcGodWarDB.getCombatResultListByUuid(winUuid)
- if not list then return 20 end
- local winCnt = 0
- for lastState=1,state-1 do
- if list[lastState] then
- winCnt = winCnt + 1
- else
- winCnt = 0
- end
- end
- return 20 + winCnt * 10
- end
- function checkHurtResult(combatInfo)
- local atkHurt = 0
- local defHurt = 0
- for pos = 1, CombatDefine.COMBAT_HERO_ALL_CNT do
- local obj = combatInfo.objList and combatInfo.objList[pos]
- if obj then
- if pos <= 10 then
- atkHurt = atkHurt + obj.result[1]
- else
- defHurt = defHurt + obj.result[1]
- end
- end
- end
- if atkHurt < defHurt then
- return true
- end
- end
- -- 战斗结束
- function onFightEnd(human, result, type, cbParam, combatInfo)
- --print("result",result)
- --require("common.Util").printTable(cbParam)
- --require("common.Util").printTable(combatInfo)
- --print("atkFormation,defFormation,atkUuid,defUuid",combatInfo.atkFormation,combatInfo.defFormation,cbParam.atkUuid,cbParam.defUuid)
- local state,round,leftTime = JjcGodWarLogic.getNowGodWarState()
- if state == JjcGodWarLogic.GODWAR_STATE_WAIT or state == JjcGodWarLogic.GODWAR_STATE_END then return end
- if round == JjcGodWarLogic.GODWAR_JIEDUAN_ZHUNBEI then return end
- if combatInfo.result.round >= combatInfo.maxRound then
- if CombatLogic.calcWinByHurt(combatInfo) then
- combatInfo.isWin = true
- result = CombatDefine.RESULT_WIN
- else
- combatInfo.isWin = false
- result = CombatDefine.RESULT_FAIL
- end
- end
- local winUuid = nil
- if CombatDefine.RESULT_WIN == result then --atkuuid胜利
- winUuid = cbParam.atkUuid
- else --defUuid胜利
- winUuid = cbParam.defUuid
- end
- if not winUuid then return end
- --选拔赛需要累计积分 赢+20 连胜额外+10 输不掉分
- if state <= JjcGodWarLogic.GODWAR_STATE_XUANBA6 then
- local winRoleData = JjcGodWarDB.getGodWarDataByUuid(winUuid)
- if winRoleData then
- local point = xuanbaPointCanGet(winUuid,state)
- winRoleData.combatResultList = winRoleData.combatResultList or {}
- winRoleData.combatResultList[state] = {}
- winRoleData.combatResultList[state] = point --本轮战斗获得的积分记录
- end
- end
- --更新战斗配对信息
- local fenzuID = cbParam.fenzuID
- local pairsIndex = cbParam.pairsIndex
- local match = JjcGodWarDB.getMatch2Fight(state)
- match[fenzuID][pairsIndex].winUuid = winUuid
- --保存战斗记录
- local vestID = JjcGodWarDB.addCombatRecord(cbParam,combatInfo,result)
- match[fenzuID][pairsIndex].vestID = vestID
- end
|