每日战斗战斗部分

This commit is contained in:
xiekaidong 2023-05-24 17:59:56 +08:00 committed by Fang
parent 9830ac3cbd
commit 7fa2c93ad5
11 changed files with 325 additions and 11 deletions

View File

@ -91,6 +91,7 @@ function ConfigManager:preLoadConfig()
self:clearConfigCache(name)
end
handleMonsterGrow("monster_chapter")
handleMonsterGrow("monster_daily_challenge")
self.configs["monster"] = {
data = monsterFullData,

View File

@ -19,12 +19,12 @@ local hero = {
["rouge_skill_7"]=1200107,
["begin_lv"]=1,
["hp"]={
2000000,
2400000,
2000000000,
2400000000,
2800000,
3220000,
3660000,
4120000,
3660000000,
4120000000,
4620000,
5160000,
5760000,
@ -40,7 +40,7 @@ local hero = {
1200000,
1400000,
1610000,
1830000,
18300000,
2060000,
2310000,
2580000,

View File

@ -76,6 +76,7 @@ BattleConst.TIME_SCALE = {
-- 为方便存储,这里使用字符串
BattleConst.BATTLE_TYPE = {
STAGE = "1",
DAILY_CHALLENGE = "2",
}
BattleConst.TYPEOF_LUA_COMP = {

View File

@ -7,7 +7,8 @@ BattleManager.SKILL_CFG = ConfigManager:getConfig("skill")
local BATTLE_CONTROLLER_BASE = "app/module/battle/controller/battle_controller"
local BATTLE_CONTROLLER = {
[BattleConst.BATTLE_TYPE.STAGE] = "app/module/battle/controller/battle_controller_stage"
[BattleConst.BATTLE_TYPE.STAGE] = "app/module/battle/controller/battle_controller_stage",
[BattleConst.BATTLE_TYPE.DAILY_CHALLENGE] = "app/module/battle/controller/battle_controller_daily_challenge",
}
function BattleManager:showPauseUI()

View File

@ -30,10 +30,39 @@ function BattleController:getNotInvolvedSkills()
return {}
end
function BattleController:getFixedRogueSkill()
return {}
end
function BattleController:getSealElementType()
return {}
end
function BattleController:getBuffs()
return {}
end
function BattleController:handleBuffs(side)
for _, buffEntity in ipairs(self:getBuffs()) do
local buffTargetSide = buffEntity:getTargetSide()
local target
if buffTargetSide == BattleConst.SIDE_ATK then
target = self.atkTeam:getMainUnit()
else
target = self.defTeam:getMainUnit()
end
if side then
if buffTargetSide == side then
buffEntity:setOwner(target)
target:takeEffect(buffEntity, target)
end
else
buffEntity:setOwner(target)
target:takeEffect(buffEntity, target)
end
end
end
-- 战斗对应的ui
function BattleController:getBattleUIPath()
return "app/ui/battle/battle_ui"
@ -47,6 +76,16 @@ end
function BattleController:initOther()
end
-- 怪物攻击力加成
function BattleController:getMonsterAtkAddition()
return BattleConst.DEFAULT_FACTOR
end
-- 怪物血量加成
function BattleController:getMonsterHpAddition()
return BattleConst.DEFAULT_FACTOR
end
-- 需要额外加载的资源
function BattleController:loadOtherRes(callback)
return callback()
@ -364,6 +403,7 @@ function BattleController:getOtherSideMainUnit(side)
end
function BattleController:onLoadComplete()
self:handleBuffs()
self:battleStart()
end

View File

@ -0,0 +1,248 @@
local BattleHelper = require "app/module/battle/helper/battle_helper"
local BattleController = require "app/module/battle/controller/battle_controller"
local BattleControllerDailyChallenge = class("BattleControllerDailyChallenge", BattleController)
local CHAPTER_CFG = ConfigManager:getConfig("chapter_daily_challenge")
local BattleBuffEntity = require "app/userdata/battle/skill/battle_buff_entity"
function BattleControllerDailyChallenge:getChapterId()
return 1 -- 临时
end
function BattleControllerDailyChallenge:getMaxWave()
if CHAPTER_CFG[self.chapterId] then
return #CHAPTER_CFG[self.chapterId].monster
end
return 0
end
function BattleControllerDailyChallenge:getChessBoardBgName()
local chapterInfo = CHAPTER_CFG[self.chapterId]
if not chapterInfo then
return "chessboard_1"
end
return chapterInfo.chess_board
end
function BattleControllerDailyChallenge:getBuffs()
if not self.initBuffs then
self.initBuffs = {}
end
return self.initBuffs
end
function BattleControllerDailyChallenge:initOther()
local cfg = ConfigManager:getConfig("chapter")[2] -- 临时
self.monsterAtkAddition = 0
self.monsterHpAddition = 0
if cfg and cfg.daily_challenge_difficulty then
self.monsterAtkAddition = cfg.daily_challenge_difficulty[2]
self.monsterHpAddition = cfg.daily_challenge_difficulty[1]
end
end
-- 怪物攻击力加成
function BattleControllerDailyChallenge:getMonsterAtkAddition()
return self.monsterAtkAddition
end
-- 怪物血量加成
function BattleControllerDailyChallenge:getMonsterHpAddition()
return self.monsterHpAddition
end
function BattleControllerDailyChallenge:initDefUnits(callback)
local config = CHAPTER_CFG[self.chapterId]
self.battleUI:loadBg(config.scene)
local unitEntity = DataManager.BattleData:addMonster(config.monster[1], nil, self)
local modelId = unitEntity:getModelId()
BattleHelper:loadBattleHeroModel(modelId, self.battleUI:getBattleNode(), function(spineObject)
local monsterComp = spineObject:addLuaComponent(GConst.BattleConst.TYPEOF_LUA_COMP.BATTLE_MONSTER_COMPONENT)
monsterComp:initWithEntity(modelId, unitEntity, self)
self.defTeam:addUnit(monsterComp, true)
self.battleUI:refreshDefHp(unitEntity:getHp(), unitEntity:getHpPercent())
callback()
end)
end
function BattleControllerDailyChallenge:_stageGenerateNextMonster()
local config = CHAPTER_CFG[self.chapterId]
local monsterId = config.monster[self.waveIndex + 1]
if monsterId == nil then
return self:enterNextWave()
end
local isBoss = self.defTeam:getIsBoss()
local unitEntity = DataManager.BattleData:addMonster(monsterId, true, self)
local modelId = unitEntity:getModelId()
BattleHelper:loadBattleHeroModel(modelId, self.battleUI:getBattleNode(), function(spineObject)
self.defTeam:removeAllUnits()
local monsterComp = spineObject:addLuaComponent(GConst.BattleConst.TYPEOF_LUA_COMP.BATTLE_MONSTER_COMPONENT)
monsterComp:initWithEntity(modelId, unitEntity, self)
self.defTeam:addUnit(monsterComp, true)
self:handleBuffs(GConst.BattleConst.SIDE_DEF)
self.battleUI:refreshDefHp(unitEntity:getHp(), unitEntity:getHpPercent())
local bornTime = monsterComp:getAnimationDuration(GConst.BattleConst.SPINE_ANIMATION_NAME.BORN)
if isBoss then -- 如果是boss就跑过去
local count = 0
local function onFinish()
count = count + 1
if count == 2 then
self.atkTeam:stopRunAction()
self:onRoundEnd(true)
end
end
self.atkTeam:playRunAction()
self.atkTeam:recoverHpOnWaveOver(onFinish)
isBoss = self.defTeam:getIsBoss()
if isBoss then
local monsterInfo = ConfigManager:getConfig("monster")[monsterId]
self.battleUI:showBossEnterAni(bornTime, ModuleManager.HeroManager:getMonsterName(monsterInfo.monster_base), monsterComp, function()
monsterComp:playEnterBattlefield(true, onFinish)
end)
else
monsterComp:playEnterBattlefield(true, onFinish)
end
else
local count = 0
local function onFinish()
count = count + 1
if count == 2 then
self:onRoundEnd(true)
end
end
self.atkTeam:recoverHpOnWaveOver(onFinish)
isBoss = self.defTeam:getIsBoss()
if isBoss then
local monsterInfo = ConfigManager:getConfig("monster")[monsterId]
self.battleUI:showBossEnterAni(bornTime, ModuleManager.HeroManager:getMonsterName(monsterInfo.monster_base), monsterComp, function()
monsterComp:playEnterBattlefield(false, onFinish)
end)
else
monsterComp:playEnterBattlefield(false, onFinish)
end
end
end)
end
function BattleControllerDailyChallenge:getInitBoard()
if not self.boradList then
self.boradList = {}
self.fixedRandomGrid = {}
self.mysteryBoxIndexMap = {}
local config = CHAPTER_CFG[self.chapterId]
local boardCfg = ConfigManager:getConfig("chapter_board_daily_challenge")
for _, boardId in ipairs(config.chapter_board_daily_challenge) do
local cfg = boardCfg[boardId]
if cfg then
table.insert(self.boradList, {board = GFunc.getTable(cfg.board_daily_challenge)})
end
end
end
return self.boradList, self.fixedRandomGrid, self.mysteryBoxIndexMap
end
function BattleControllerDailyChallenge:getSealElementType()
if not self.sealElementType then
self.sealElementType = {}
local config = CHAPTER_CFG[self.chapterId]
if config.seal_element then
for _, elementType in ipairs(config.seal_element) do
self.sealElementType[elementType] = true
end
end
end
return self.sealElementType
end
function BattleControllerDailyChallenge:getNotInvolvedSkills()
if not self.notInvolvedSkills then
self.notInvolvedSkills = {}
local config = CHAPTER_CFG[self.chapterId]
if config.not_involved_skill then
for _, skillId in ipairs(config.not_involved_skill) do
self.notInvolvedSkills[skillId] = true
end
end
end
return self.notInvolvedSkills
end
function BattleControllerDailyChallenge:getFixedRogueSkill()
if not self.fixedRogueSkill then
local config = CHAPTER_CFG[self.chapterId]
if config.involved_skill then
self.fixedRogueSkill = GFunc.getTable(config.involved_skill)
else
self.fixedRogueSkill = {}
end
end
return self.fixedRogueSkill
end
function BattleControllerDailyChallenge:findNextDefUnit()
self:_stageGenerateNextMonster()
end
function BattleControllerDailyChallenge:controllBattleEnd()
self.combatReport = {
battleType = GConst.BattleConst.BATTLE_TYPE.DAILY_CHALLENGE,
wave = self.waveIndex,
victory = self.victory,
}
local atkReport = {}
local teamEntity = DataManager.BattleData:getAtkTeam()
local members = teamEntity:getAllMembers()
for k, v in pairs(members) do
local report = {
heroId = v:getId(),
dmg = v:getDamageCount(),
}
table.insert(atkReport, report)
end
self.combatReport.atkReport = atkReport
if not self.victory then
self.combatReport.wave = self.combatReport.wave - 1
end
Logger.logHighlight("BattleControllerDailyChallenge fight over")
-- ModuleManager.ChapterManager:endFight(self.chapterId, self.combatReport, self.gotMysteryBoxIndexs, self.taskProgress)
end
function BattleControllerDailyChallenge:postWaveOver(atkDead, isQuit)
local deathType = BIReport.FIGHT_DEATH_TYPE.SURVIVE
local waveEndType = BIReport.FIGHT_WAVE_END_TYPE.WIN
if atkDead then
if self.isBossWave then
deathType = BIReport.FIGHT_DEATH_TYPE.BOSS_FAIL
else
deathType = BIReport.FIGHT_DEATH_TYPE.NORMAL_FAIL
end
waveEndType = BIReport.FIGHT_WAVE_END_TYPE.FAIL
end
if isQuit then
waveEndType = BIReport.FIGHT_WAVE_END_TYPE.QUIT
end
local duration = Time:getServerTime() - self.waveStartTime
local totalTime = Time:getServerTime() - self.battleStartTime
local startTimes = 1 -- TODO
local isFirstWin = false -- TODO
local isFianlStep = self.waveIndex >= self.maxWaveIndex
BIReport:postFightEnd(GConst.BattleConst.BATTLE_TYPE.DAILY_CHALLENGE, self.chapterId, self.waveIndex, duration, totalTime, self.eliminateCount, self.eliminateTotalCount, waveEndType, deathType, startTimes, isFirstWin, isFianlStep)
end
function BattleControllerDailyChallenge:postFightStart()
local unlockMaxChapter = DataManager.ChapterData:getNewChapterId()
BIReport:postFightBegin(GConst.BattleConst.BATTLE_TYPE.DAILY_CHALLENGE, self.waveIndex, self.chapterId, unlockMaxChapter, 1)
end
return BattleControllerDailyChallenge

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: b8ac1cad3e089ab49a3f7b7c2d6923ac
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3}

View File

@ -28,7 +28,7 @@ function BattleControllerStage:getChessBoardBgName()
end
function BattleController:initOther()
function BattleControllerStage:initOther()
end
@ -202,7 +202,7 @@ function BattleControllerStage:controllBattleEnd()
ModuleManager.ChapterManager:endFight(self.chapterId, self.combatReport, self.gotMysteryBoxIndexs, self.taskProgress)
end
function BattleController:postWaveOver(atkDead, isQuit)
function BattleControllerStage:postWaveOver(atkDead, isQuit)
local deathType = BIReport.FIGHT_DEATH_TYPE.SURVIVE
local waveEndType = BIReport.FIGHT_WAVE_END_TYPE.WIN
if atkDead then

View File

@ -293,7 +293,7 @@ function BattleTeam:removeAllBuff()
local count = #self.buffList
for i = count, 1, -1 do
buffEffect = self.buffList[i]
if buffEffect then
if buffEffect and not buffEffect.buff:isCantRemove() then
self:updateBuffState(buffEffect.buff, -1)
table.remove(self.buffList, i)
BattleBuffHandle.removeBuff(self.mainUnit, buffEffect)
@ -332,7 +332,7 @@ function BattleTeam:putCacheBuffByDecr(buffDecr)
local count = #self.buffList
for i = count, 1, -1 do
buffEffect = self.buffList[i]
if buffEffect and buffEffect.buff:getDecr() == buffDecr then
if buffEffect and buffEffect.buff:getDecr() == buffDecr and not buffEffect.buff:isCantRemove() then
self:updateBuffState(buffEffect.buff, -1)
table.remove(self.buffList, i)
BattleBuffHandle.removeBuff(self.mainUnit, buffEffect, true)

View File

@ -614,10 +614,14 @@ function BattleData:initHeroData()
return data
end
function BattleData:addMonster(monsterId, newTeam)
function BattleData:addMonster(monsterId, newTeam, battleController)
local monsterInfo = ConfigManager:getConfig("monster")[monsterId]
local hp = monsterInfo.hp // DEFAULT_FACTOR
local atk = monsterInfo.atk // DEFAULT_FACTOR
if battleController then
hp = hp * (DEFAULT_FACTOR + battleController:getMonsterHpAddition()) // DEFAULT_FACTOR
atk = atk * (DEFAULT_FACTOR + battleController:getMonsterAtkAddition()) // DEFAULT_FACTOR
end
local unitData = {
id = monsterId,
modelId = monsterInfo.model_id,

View File

@ -16,6 +16,7 @@ function BattleBuffEntity:init(effectParams, owner, hostSkill)
self.targetSide = nil
self.buffInfo = ConfigManager:getConfigWithOtherKey("buff", "name")[self.name]
self.buffType = self.buffInfo.buff_type
self.cantRemove = false
end
function BattleBuffEntity:setOwner(owner)
@ -114,4 +115,12 @@ function BattleBuffEntity:getFxDisappear()
return self.buffInfo.fx_disappear
end
function BattleBuffEntity:isCantRemove()
return self.cantRemove
end
function BattleBuffEntity:setIsCantRemove(cantRemove)
self.cantRemove = cantRemove
end
return BattleBuffEntity