From 7ce2b6a4196bf3dcef14c54e6040c2cfc037f465 Mon Sep 17 00:00:00 2001 From: puxuan <413323644@qq.com> Date: Thu, 16 Oct 2025 21:16:15 +0800 Subject: [PATCH] =?UTF-8?q?=E8=82=89=E9=B8=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lua/app/config/buff.lua | 20 ++- lua/app/config/item.lua | 21 ++- lua/app/config/skill.lua | 2 +- lua/app/config/skill_rogue.lua | 36 +++-- lua/app/module/battle/battle_const.lua | 5 +- .../battle/component/battle_unit_comp.lua | 1 + .../controller/battle_base_controller.lua | 129 ++++++++++++------ .../helper/battle_board_touch_helper.lua | 8 +- .../module/battle/helper/battle_passive.lua | 20 +++ .../skill/battle_rogue_skill_handle.lua | 7 +- lua/app/module/battle/team/battle_team.lua | 16 +++ lua/app/ui/battle/battle_base_ui.lua | 2 + .../battle/cell/battle_select_skill_cell.lua | 3 + lua/app/ui/battle/cell/grid_cell.lua | 15 +- lua/app/userdata/battle/battle_base_data.lua | 3 +- .../userdata/battle/battle_grid_entity.lua | 35 ++++- .../battle/skill/battle_buff_entity.lua | 10 ++ .../battle/skill/battle_skill_entity.lua | 4 + lua/app/userdata/hero/hero_entity.lua | 23 ++++ 19 files changed, 291 insertions(+), 69 deletions(-) diff --git a/lua/app/config/buff.lua b/lua/app/config/buff.lua index 68c5619d..7df9fb0e 100644 --- a/lua/app/config/buff.lua +++ b/lua/app/config/buff.lua @@ -1035,6 +1035,20 @@ local buff = { ["buff_type"]=7, ["stack"]=0, ["decr"]=3 + }, + [111]={ + ["id"]=111, + ["name"]="random_universal", + ["buff_type"]=7, + ["stack"]=0, + ["decr"]=3 + }, + [112]={ + ["id"]=112, + ["name"]="main_hero_energyadd", + ["buff_type"]=7, + ["stack"]=0, + ["decr"]=3 } } local keys = { @@ -1148,12 +1162,14 @@ local keys = { ["yellow_refresh_weight"]=buff[107], ["green_refresh_weight"]=buff[108], ["blue_refresh_weight"]=buff[109], - ["purple_refresh_weight"]=buff[110] + ["purple_refresh_weight"]=buff[110], + ["random_universal"]=buff[111], + ["main_hero_energyadd"]=buff[112] } } local config = { data=buff, keys=keys, -count=110 +count=112 } return config \ No newline at end of file diff --git a/lua/app/config/item.lua b/lua/app/config/item.lua index dabbe7af..ab3b659b 100644 --- a/lua/app/config/item.lua +++ b/lua/app/config/item.lua @@ -1247,6 +1247,25 @@ local item = { ["qlt"]=4, ["icon"]="48" }, + [49]={ + ["type"]=6, + ["qlt"]=3, + ["icon"]="49", + ["box_drop"]={ + { + ["type"]=1, + ["id"]=14, + ["num"]=1, + ["weight"]=6000 + }, + { + ["type"]=1, + ["id"]=15, + ["num"]=1, + ["weight"]=4000 + } + } + }, [13001]={ ["type"]=5, ["inbag"]=1, @@ -1484,6 +1503,6 @@ local item = { } } local config = { -data=item,count=72 +data=item,count=73 } return config \ No newline at end of file diff --git a/lua/app/config/skill.lua b/lua/app/config/skill.lua index f9c41f88..aae4b9fc 100644 --- a/lua/app/config/skill.lua +++ b/lua/app/config/skill.lua @@ -105,7 +105,7 @@ local skill = { }, [15]={ ["effect_type"]=2, - ["trigger"]=11, + ["trigger"]=12, ["trigger_value"]=10, ["trigger_limit"]=15, ["effect"]={ diff --git a/lua/app/config/skill_rogue.lua b/lua/app/config/skill_rogue.lua index f501101f..aefac951 100644 --- a/lua/app/config/skill_rogue.lua +++ b/lua/app/config/skill_rogue.lua @@ -19,24 +19,36 @@ local skill_rogue = { [2]={ ["universal"]=1, ["limit_times"]=1, - ["weight"]=1000, + ["weight"]=1000000000000, ["qlt"]=5, - ["type"]=20, - ["parameter"]={ - 1000 + ["type"]=9, + ["effect"]={ + { + ["type"]="random_universal", + ["num"]=20000, + ["ratio"]=20000, + ["round"]=9999 + } }, - ["icon"]="17" + ["obj"]=1, + ["icon"]="30" }, [3]={ ["universal"]=1, ["limit_times"]=1, ["weight"]=1000, ["qlt"]=5, - ["type"]=21, - ["parameter"]={ - 1 + ["type"]=9, + ["effect"]={ + { + ["type"]="main_hero_energyadd", + ["num"]=1, + ["ratio"]=10000, + ["round"]=0 + } }, - ["icon"]="29" + ["obj"]=1, + ["icon"]="30" }, [4]={ ["universal"]=1, @@ -284,7 +296,7 @@ local skill_rogue = { ["universal"]=1, ["weight"]=1000, ["qlt"]=4, - ["type"]=22, + ["type"]=20, ["parameter"]={ 5 }, @@ -294,7 +306,7 @@ local skill_rogue = { ["universal"]=1, ["weight"]=1000, ["qlt"]=4, - ["type"]=23, + ["type"]=21, ["parameter"]={ 2 }, @@ -304,7 +316,7 @@ local skill_rogue = { ["universal"]=1, ["weight"]=1000, ["qlt"]=4, - ["type"]=24, + ["type"]=22, ["icon"]="27" }, [23]={ diff --git a/lua/app/module/battle/battle_const.lua b/lua/app/module/battle/battle_const.lua index f5af2b9a..c25fd95b 100644 --- a/lua/app/module/battle/battle_const.lua +++ b/lua/app/module/battle/battle_const.lua @@ -252,7 +252,8 @@ BattleConst.SPECIAL_DAMAGE_OR_CURE_TYPE = { } BattleConst.SKILL_RECORD_DATA_NAME = { - HP_LOWER_THAN = 1 + HP_LOWER_THAN = 1, + LINK_X_THAN = 2, } BattleConst.SKILL_CONDITION_TYPE = { @@ -282,6 +283,7 @@ BattleConst.PASSIVE_EVENT = { ON_DEAD_BY_SKILL = 9, -- 有敌人死于技能时触发 ON_DEAD_WITH_BLEED = 10, -- 死亡时带有流血buff ON_DEAD = 11, -- 死亡时 + ON_LINK_X = 12, -- 每消除X个色块(trigger_value触发参数配置)获得一次effect效果,增加触发上限功能(trigger_limit) } local BUFF_NAME = { @@ -373,6 +375,7 @@ local BUFF_NAME = { FOREVER_DEC_DMG_PURPLE_ADD = "forever_dec_dmg_purple_add", FOREVER_DEC_DMG_ALL_ADD = "forever_dec_dmg_all_add", FOREVER_THORNS = "forever_thorns", + RANDOM_UNIVERSAL = "random_universal", } BattleConst.BUFF_NAME = BUFF_NAME diff --git a/lua/app/module/battle/component/battle_unit_comp.lua b/lua/app/module/battle/component/battle_unit_comp.lua index 8ff5e5f7..06e0d2ff 100644 --- a/lua/app/module/battle/component/battle_unit_comp.lua +++ b/lua/app/module/battle/component/battle_unit_comp.lua @@ -469,6 +469,7 @@ end function BattleUnitComp:useNormalSkill(count, effectType, callback) self.actionOverCallback = callback self.normalSkillCount = count + self:checkPassiveEvent(PASSIVE_EVENT.ON_LINK_X) if effectType == BattleConst.EFFECT_TYPE.DIRECT then self.normalSkillCount = self.normalSkillCount + self.unitEntity:getNormalAttackAddCount() end diff --git a/lua/app/module/battle/controller/battle_base_controller.lua b/lua/app/module/battle/controller/battle_base_controller.lua index 3c177ac8..df44ba9d 100644 --- a/lua/app/module/battle/controller/battle_base_controller.lua +++ b/lua/app/module/battle/controller/battle_base_controller.lua @@ -287,7 +287,8 @@ function BattleBaseController:onLinkChange() local entity = self.battleData:getGridEntity(info.posId) if not mainElementType or not dmgSkillId then local skillId = entity:getSkillId() - if not skillId and not mainElementType then + local isUniversal = entity:getIsUniversal() + if not skillId and not mainElementType and not isUniversal then mainElementType = entity:getElementType() end if skillId and not dmgSkillId then @@ -1481,7 +1482,7 @@ function BattleBaseController:calculateCurElimination(onlyCheck) local entity = gridEntities[info.posId] local elementType = entity:getElementType() if not info.noAni and info.isIdle then - if not info.isSkill then + if not info.isSkill and not info.isUniversal then if not entity:isElmentTypeInvalid() then self.elementTypeMap[elementType] = (self.elementTypeMap[elementType] or 0) + 1 end @@ -1514,6 +1515,9 @@ function BattleBaseController:dealGridBreak(posId, condition, time, breakedMap, if entity:getSkillId() then aniUnit.isSkill = true end + if entity:getIsUniversal() then + aniUnit.isUniversal = true + end if breaked or entity:canBreakByThisCondition(condition) then breakedMap[posId] = true @@ -1658,6 +1662,7 @@ function BattleBaseController:getEliminattionAniInfo(posId, timeIdx) timeIdx = timeIdx, conditions = nil, isSkill = false, + isUniversal = false, isIdle = false, callback = nil, overCallback = nil, @@ -1780,23 +1785,25 @@ function BattleBaseController:onFillBoardOver(isRoundBeginCheck) EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.BOARD_FILL_OVER) self:popBoardCacheSkill(function() self:generateSkill(function() - if self.onFillBoardOverCallback then - local callback = self.onFillBoardOverCallback - self.onFillBoardOverCallback = nil - callback() - else - self:enterElimination(true) - end + self:generateUniversal(function() + if self.onFillBoardOverCallback then + local callback = self.onFillBoardOverCallback + self.onFillBoardOverCallback = nil + callback() + else + self:enterElimination(true) + end + end) end) end) else self:generateSkill(function() - self.battleUI:refreshSkill(nil, nil, self:getCurActionSide()) - if self.onFillBoardOverCallback then - local callback = self.onFillBoardOverCallback - self.onFillBoardOverCallback = nil - callback() - end + self.battleUI:refreshSkill(nil, nil, self:getCurActionSide()) + if self.onFillBoardOverCallback then + local callback = self.onFillBoardOverCallback + self.onFillBoardOverCallback = nil + callback() + end end) end end @@ -1974,6 +1981,49 @@ function BattleBaseController:setGridSkillId(posId, skillId, noDirty) end end +function BattleBaseController:getUniversalElementList() + local gridEntities = self.battleData:getGridEnties() + if not gridEntities then + return + end + local posIds = {} + for row = 1, BattleConst.ROW_COUNT do + for column = 1, BattleConst.COLUMN_COUNT do + local posId = ModuleManager.BattleManager:getPosId(row, column) + local entity = gridEntities[posId] + if entity and entity:canChangeInfo() then + table.insert(posIds, posId) + end + end + end + if #posIds == 0 then + return + end + + return posIds[math.random(1, #posIds)] +end + +function BattleBaseController:generateUniversal(callback) + local posId = self:getUniversalElementList() + + if not self.battleUI or not posId then + if callback then + callback() + end + return + end + + if self.atkTeam:checkUniversal() then + local gridEntities = self.battleData:getGridEnties() + local entity = gridEntities[posId] + entity:setUniversal(true, false, self.curActionSide) + local cell = entity:getCell() + cell:refresh(entity) + callback() + else + callback() + end +end function BattleBaseController:generateGridType(skillTypeParameter, monsterPos) if not skillTypeParameter then @@ -2253,32 +2303,33 @@ function BattleBaseController:getRandomGridInfo() local fixedRandomList = fixedRandomGrid[self.curBoardIndex] local gridType = 0 - local elementType - if fixedRandomList and fixedRandomList[1] then - elementType = table.remove(fixedRandomList, 1) - else - local map = self.battleData:getElementTypeMap() - self.getRandomGridInfoIndexs = table.clearOrCreate(self.getRandomGridInfoIndexs) - self.getRandomGridInfoTypeList = table.clearOrCreate(self.getRandomGridInfoTypeList) - for typeName, typeNum in pairs(BattleConst.ELEMENT_TYPE) do - if not self:getSealElementType()[typeNum] and self:getSkillEntityByElement(typeNum) then - local weight = ((map[typeNum] or 0) + 1) * BattleConst.ELEMENT_WIGHT - if self.elementWeightMap and self.elementWeightMap[typeNum] then - weight = weight + self.elementWeightMap[typeNum] - end - if weight > BattleConst.MAX_ELEMENT_WIGHT then - weight = BattleConst.MAX_ELEMENT_WIGHT - end - table.insert(self.getRandomGridInfoIndexs, weight) - table.insert(self.getRandomGridInfoTypeList, typeNum) - end - end + -- local elementType + -- if fixedRandomList and fixedRandomList[1] then + -- elementType = table.remove(fixedRandomList, 1) + -- else + -- local map = self.battleData:getElementTypeMap() + -- self.getRandomGridInfoIndexs = table.clearOrCreate(self.getRandomGridInfoIndexs) + -- self.getRandomGridInfoTypeList = table.clearOrCreate(self.getRandomGridInfoTypeList) + -- for typeName, typeNum in pairs(BattleConst.ELEMENT_TYPE) do + -- if not self:getSealElementType()[typeNum] and self:getSkillEntityByElement(typeNum) then + -- local weight = ((map[typeNum] or 0) + 1) * BattleConst.ELEMENT_WIGHT + -- if self.elementWeightMap and self.elementWeightMap[typeNum] then + -- weight = weight + self.elementWeightMap[typeNum] + -- end + -- if weight > BattleConst.MAX_ELEMENT_WIGHT then + -- weight = BattleConst.MAX_ELEMENT_WIGHT + -- end + -- table.insert(self.getRandomGridInfoIndexs, weight) + -- table.insert(self.getRandomGridInfoTypeList, typeNum) + -- end + -- end - local index = GFunc.getRandomIndex(self.getRandomGridInfoIndexs) - elementType = self.getRandomGridInfoTypeList[index] - end + -- local index = GFunc.getRandomIndex(self.getRandomGridInfoIndexs) + -- elementType = self.getRandomGridInfoTypeList[index] + -- end + local elementType = math.random(1, BattleConst.ELEMENT_TYPE.PURPLE) - return {gridType = gridType, elementType = elementType} + return {gridType = gridType, elementType = elementType, isUniversal = true} end diff --git a/lua/app/module/battle/helper/battle_board_touch_helper.lua b/lua/app/module/battle/helper/battle_board_touch_helper.lua index 51021b6a..f92e5dc7 100644 --- a/lua/app/module/battle/helper/battle_board_touch_helper.lua +++ b/lua/app/module/battle/helper/battle_board_touch_helper.lua @@ -62,7 +62,7 @@ function BattleBoardTouchHelper:onLinkStart(entity, posId, isVirtual) end self.battleData:insertGridSequence(posId, self.battleController:snapshotBoard(), isVirtual) local skillEntity = self.battleController:getSkillEntityBySkillId(entity:getSkillId()) - local maskElementType = entity:getElementType(skillEntity) + local maskElementType = entity:getElementType(skillEntity, true) self.battleUI:showBoardMask(maskElementType, skillEntity and entity:getPosId()) self.battleController:findSkillInfluenceGrids() self.battleController:onLinkChange() @@ -110,12 +110,12 @@ function BattleBoardTouchHelper:onLinkEnter(entity, posId, isVirtual) local skillId = entity:getSkillId() local skillEntity = self.battleController:getSkillEntityBySkillId(skillId) - local elementType = entity:getElementType(skillEntity) + local elementType = entity:getElementType(skillEntity, true) local lastEntity = self.battleData:getGridEntity(lastPosId) local lastSkillId = lastEntity:getSkillId() local lastSkillEntity = self.battleController:getSkillEntityBySkillId(lastSkillId) - local lastElementType = lastEntity:getElementType(lastSkillEntity) + local lastElementType = lastEntity:getElementType(lastSkillEntity, true) local hadSkillId, skillPosId = self.battleData:getSequenceHadSkill() if skillEntity and hadSkillId then @@ -244,7 +244,7 @@ function BattleBoardTouchHelper:clearSequenceByPosId(posId) end local gridEntity = self.battleData:getGridEntity(posId) local skillEntity = self.battleController:getSkillEntityBySkillId(gridEntity:getSkillId()) - local maskElementType = gridEntity:getElementType(skillEntity) + local maskElementType = gridEntity:getElementType(skillEntity, true) local _, skillPosId = self.battleData:getSequenceHadSkill() self.battleUI:showBoardMask(maskElementType, skillPosId) diff --git a/lua/app/module/battle/helper/battle_passive.lua b/lua/app/module/battle/helper/battle_passive.lua index cca31052..fbf0990e 100644 --- a/lua/app/module/battle/helper/battle_passive.lua +++ b/lua/app/module/battle/helper/battle_passive.lua @@ -69,6 +69,25 @@ local function _checkOnDead(unitComp, skill, targetComp) return 1 end +local function _checkLinkX(unitComp, skill, targetComp) + local triggerLimit = skill:getTriggerLimit() or 0 + local data = unitComp.unitEntity:getTeamRecordData(SKILL_RECORD_DATA_NAME.LINK_X_THAN) or 0 + if data >= triggerLimit then + return 0 + end + local maxCount = 0 + local eliminateMap = unitComp.battleController.totalEliminateCountMap + for _, v in pairs(eliminateMap) do + maxCount = maxCount + v + end + local triggerValue = skill:getPassiveTriggerValue() or 0 + if maxCount >= (data + 1) * triggerValue then + unitComp.unitEntity:setTeamRecordData(SKILL_RECORD_DATA_NAME.LINK_X_THAN, data + 1) + return 1 + end + return 0 +end + BattlePassive.checkTrigger = { [PASSIVE_EVENT.ON_UNIT_PREPARE_OVER] = _checkOnUnitPrepareOver, [PASSIVE_EVENT.ON_UNI_ATTACK_START] = _checkOnUniAttackStart, @@ -80,6 +99,7 @@ BattlePassive.checkTrigger = { [PASSIVE_EVENT.ON_DEAD_BY_SKILL] = _checkOnDeadBySkill, [PASSIVE_EVENT.ON_DEAD_WITH_BLEED] = _checkOnDeadWithBleed, [PASSIVE_EVENT.ON_DEAD] = _checkOnDead, + [PASSIVE_EVENT.ON_LINK_X] = _checkLinkX, } return BattlePassive \ No newline at end of file diff --git a/lua/app/module/battle/skill/battle_rogue_skill_handle.lua b/lua/app/module/battle/skill/battle_rogue_skill_handle.lua index 4b291488..8572594c 100644 --- a/lua/app/module/battle/skill/battle_rogue_skill_handle.lua +++ b/lua/app/module/battle/skill/battle_rogue_skill_handle.lua @@ -514,7 +514,12 @@ BattleRogueSkillHandle._effectOn = { [16] = _addSkillRatio, -- 增加技能效果概率 [17] = _addSkillBreakEnergyMultiple, -- 增加技能消除的元素的能量倍数 [18] = _addSkillMerge, -- 融合技能,参数配本表的ID,获得后直接让配的技能ID都生效 - [19] = _addSkillLinkNumRound, -- 需要做成链接超X个元素时将主技能的第几个BUFF的回合数增加。参数配置[链接数,第几个BUFF,回合数加值] + [19] = _addSkillLinkNumRound, -- 需要做成链接超X个元素时将主技能的第几个BUFF的回合数增加。参数配置[链接数,第几个BUFF,回合数加值] + -- [20] = _randomOneUniversal, -- 概率刷出万能块,技能参数parameter配置其概率 + -- [21] = _addSkillLinkNumRound, -- 每次消除获得的主要英雄能量+X,parameter配置能量增加数 + -- [22] = _addSkillLinkNumRound, -- 随机1名英雄能量+X,parameter配置能量增加数 + -- [23] = _addSkillLinkNumRound, -- 全体英雄能量+X,parameter配置能量增加数 + -- [24] = _addSkillLinkNumRound, -- 随机将一个技能能量加满 } function BattleRogueSkillHandle.takeEffect(skillId, battleData, battleController, value, side, isSnapshot) diff --git a/lua/app/module/battle/team/battle_team.lua b/lua/app/module/battle/team/battle_team.lua index 04675749..3e99aa2c 100644 --- a/lua/app/module/battle/team/battle_team.lua +++ b/lua/app/module/battle/team/battle_team.lua @@ -685,6 +685,22 @@ function BattleTeam:updateBuffState(buff, num) end end +function BattleTeam:hadUniversalBuff() + for i,v in ipairs(self.buffList) do + if v.buff:getName() == BattleConst.BUFF_NAME.RANDOM_UNIVERSAL and v.buff:isActive() then + return true + end + end + return false +end + +-- 回合结束的时候要结算buff和技能 +function BattleTeam:checkUniversal() + if self:hadUniversalBuff() then + return true + end +end + function BattleTeam:getBuffCountByName(buffName) return self.sameBuffCount[buffName] or 0 end diff --git a/lua/app/ui/battle/battle_base_ui.lua b/lua/app/ui/battle/battle_base_ui.lua index cf263b06..b8721ca6 100644 --- a/lua/app/ui/battle/battle_base_ui.lua +++ b/lua/app/ui/battle/battle_base_ui.lua @@ -2167,6 +2167,8 @@ function BattleBaseUI:refreshWave(wave, iconAtlas, iconName) end function BattleBaseUI:getSfxLine(elementType, index, func) + --@TODO 2025-10-16 21:12:05 缺光效 + elementType = elementType or 1 self.hidingAllSfxLine = false self.root.lineSfxObjs = self.root.lineSfxObjs or {} diff --git a/lua/app/ui/battle/cell/battle_select_skill_cell.lua b/lua/app/ui/battle/cell/battle_select_skill_cell.lua index 8996165e..40d2df64 100644 --- a/lua/app/ui/battle/cell/battle_select_skill_cell.lua +++ b/lua/app/ui/battle/cell/battle_select_skill_cell.lua @@ -23,6 +23,9 @@ function BattleSelectSkillCell:refresh(skillId, func) value = I18N:getText("skill_rogue", skillId, "desc", value) end else + if EDITOR_MODE then + Logger.logHighlight("=================== skillId = %s", skillId) + end value = ModuleManager.HeroManager:getSkillRogueDesc(skillId, self.value) end end diff --git a/lua/app/ui/battle/cell/grid_cell.lua b/lua/app/ui/battle/cell/grid_cell.lua index c111491a..4b6cd564 100644 --- a/lua/app/ui/battle/cell/grid_cell.lua +++ b/lua/app/ui/battle/cell/grid_cell.lua @@ -62,6 +62,7 @@ function GridCell:refresh(gridEntity, curElement, skillPosId) local skillIcon = uiMap["grid_cell.touch_node.ani_node.skill_icon"] local skillId = gridEntity:getSkillId() + local isUniversal = gridEntity:getIsUniversal() if skillId then elementIcon:setVisible(false) skillIcon:setVisible(true) @@ -105,6 +106,12 @@ function GridCell:refresh(gridEntity, curElement, skillPosId) downBg:setSprite(GConst.ATLAS_PATH.BATTLE, self.lastSkillBg) end end + elseif isUniversal then + elementIcon:setVisible(false) + downBg:setVisible(true) + skillIcon:setVisible(false) + showMask = false + downBg:setSprite(GConst.ATLAS_PATH.BATTLE, "battle_bg_lv") else skillIcon:setVisible(false) end @@ -159,8 +166,9 @@ function GridCell:showHighLight(show, mainElementType) local downBg = uiMap["grid_cell.touch_node.ani_node.down_bg"] local skillId = self.gridEntity:getSkillId() - downBg:setVisible(skillId ~= nil) + local isUniversal = self.gridEntity:getIsUniversal() if skillId then + downBg:setVisible(true) show = true -- 有技能,强制显示特效 local skillEntity = self:getSkillEntity() local ignoreElementType = skillEntity:getIgnoreElementType() @@ -175,6 +183,11 @@ function GridCell:showHighLight(show, mainElementType) self.lastSkillBg = skillBg downBg:setSprite(GConst.ATLAS_PATH.BATTLE, self.lastSkillBg) end + elseif isUniversal then + downBg:setVisible(true) + downBg:setSprite(GConst.ATLAS_PATH.BATTLE, "battle_bg_lv") + else + downBg:setVisible(false) end diff --git a/lua/app/userdata/battle/battle_base_data.lua b/lua/app/userdata/battle/battle_base_data.lua index a972a857..7ccaa15c 100644 --- a/lua/app/userdata/battle/battle_base_data.lua +++ b/lua/app/userdata/battle/battle_base_data.lua @@ -168,7 +168,7 @@ function BattleBaseData:initRogueSkills(side, formation) local skillId = heroEntity:getBaseSkill() local cfg = SKILL_CFG[skillId] self.skillMap[side][cfg.position] = BATTLE_BOARD_SKILL_ENTITY:create(skillId, side) - self.skillMap[side][cfg.position]:addUpSkills(heroEntity:getRogueSkillList()) + self.skillMap[side][cfg.position]:addUpSkills(heroEntity:getRogueSkillListBattle()) self.skillMap[side][cfg.position]:setUnlockId(heroEntity:getUnlockRogueId()) for _, id in ipairs(heroEntity:getActiveRogueSkills()) do if not skillmap[id] then @@ -451,6 +451,7 @@ function BattleBaseData:setGridInfo(posId, gridInfo) end entity:setSkilId() -- 清除skillId + entity:setUniversal(gridInfo.isUniversal) -- 清除万能地块 entity:determineIdleStatus() end diff --git a/lua/app/userdata/battle/battle_grid_entity.lua b/lua/app/userdata/battle/battle_grid_entity.lua index 8a61cb49..36123a04 100644 --- a/lua/app/userdata/battle/battle_grid_entity.lua +++ b/lua/app/userdata/battle/battle_grid_entity.lua @@ -9,6 +9,7 @@ function BattleGridEntity:ctor(data) self.gridType = data.gridType or BattleConst.GRID_TYPE.EMPTY self.elementType = data.elementType or BattleConst.ELEMENT_TYPE.NONE self.skillId = data.skillId + self.isUniversal = data.universalId self.linkSkillCount = data.linkSkillCount or 0 -- 任意链接技能激活次数 self.battleData = data.battleData self.isIdle = false @@ -21,6 +22,7 @@ function BattleGridEntity:clear() self.gridType = BattleConst.GRID_TYPE.EMPTY self.elementType = BattleConst.ELEMENT_TYPE.RED self.skillId = nil + self.isUniversal = nil self.linkSkillCount = 0 -- 任意链接技能激活次数 self.isIdle = false self.breakCount = 0 @@ -38,6 +40,7 @@ function BattleGridEntity:getSnapshoptInfo() elementType = self.elementType, isIdle = self.isIdle, skillId = self.skillId, + universalId = self.isUniversal, linkSkillCount = self.linkSkillCount, breakCount = self.breakCount, } @@ -49,6 +52,7 @@ function BattleGridEntity:setInfoBySnapshop(snapshot) self.elementType = snapshot.elementType or BattleConst.ELEMENT_TYPE.RED self.isIdle = snapshot.isIdle self.skillId = snapshot.skillId + self.isUniversal = snapshot.universalId self.linkSkillCount = snapshot.linkSkillCount self.breakCount = snapshot.breakCount self:setDirty() @@ -70,11 +74,13 @@ function BattleGridEntity:getGridType() return self.gridType end -function BattleGridEntity:getElementType(skillEntity) +function BattleGridEntity:getElementType(skillEntity, checkUniversal) if skillEntity and skillEntity:getIgnoreElementType() and self.linkSkillCount <= 0 then return nil end - + if checkUniversal and self.isUniversal then + return nil + end return self.elementType end @@ -138,6 +144,12 @@ function BattleGridEntity:tryBreakGrid(condition, onlyCheck) else return false end + elseif self:getIsUniversal() then + if condition == BattleConst.GRID_BREAK_CONDITION.LINE or condition == BattleConst.GRID_BREAK_CONDITION.SKILL then -- 技能破碎逻辑为,链接消除 + isIdle = true + else + return false + end else if self:isEmptyIdle() and (condition == BattleConst.GRID_BREAK_CONDITION.LINE or condition == BattleConst.GRID_BREAK_CONDITION.SKILL) then -- 空类型/带技能破碎逻辑为,链接消除 置为闲置即消除 isIdle = true @@ -208,7 +220,7 @@ end function BattleGridEntity:setElementType(elementType, noDirty) self.elementType = elementType - if self.battleData:getCacheLockedElement(self.elementType) and not self.skillId then + if self.battleData:getCacheLockedElement(self.elementType) and not self.skillId and not self.isUniversal then self:setGridType(BattleConst.GRID_TYPE.LOCK) end if not noDirty then @@ -254,26 +266,37 @@ end function BattleGridEntity:canChangeInfo() - if self:canLink() and not self:getSkillId() then + if self:canLink() and not self:getSkillId() and not self:getIsUniversal() then return true end return false end function BattleGridEntity:isEmptyIdle() - if self:isEmptyType() and not self:getSkillId() and not self:getIsIdle() then + if self:isEmptyType() and not self:getSkillId() and not self:getIsIdle() and not self:getIsUniversal() then return true end return false end function BattleGridEntity:isNotObstacleIdle() - if not self:isObstacleType() and not self:getSkillId() and not self:getIsIdle() then + if not self:isObstacleType() and not self:getSkillId() and not self:getIsIdle() and not self:getIsUniversal() then return true end return false end +function BattleGridEntity:getIsUniversal() + return self.isUniversal or false +end + +function BattleGridEntity:setUniversal(isUniversal, noDirty, side) + self.isUniversal = isUniversal + if not noDirty then + self:setDirty() + end +end + function BattleGridEntity:isCanFallStatus() if not self:isCantFallType() and not self:getIsIdle() then return true diff --git a/lua/app/userdata/battle/skill/battle_buff_entity.lua b/lua/app/userdata/battle/skill/battle_buff_entity.lua index dd5f8b29..7c785015 100644 --- a/lua/app/userdata/battle/skill/battle_buff_entity.lua +++ b/lua/app/userdata/battle/skill/battle_buff_entity.lua @@ -1,4 +1,5 @@ local BattleConst = require "app/module/battle/battle_const" +local BattleHelper = require "app/module/battle/helper/battle_helper" local BattleBuffEntity = class("BattleBuffEntity", BaseData) local BUFF_TYPE_DIRECT_HURT = BattleConst.BUFF_TYPE.DIRECT_HURT @@ -26,6 +27,15 @@ function BattleBuffEntity:init(effectParams, owner, hostSkill) self.needSave = self.hostSkill ~= nil end +function BattleBuffEntity:isActive() + if self.ratio < BattleConst.DEFAULT_FACTOR then + if BattleHelper:random(1, BattleConst.DEFAULT_FACTOR) > self.ratio then -- 没有通过命中概率 + return false + end + end + return true +end + function BattleBuffEntity:setOwner(owner) self.owner = owner end diff --git a/lua/app/userdata/battle/skill/battle_skill_entity.lua b/lua/app/userdata/battle/skill/battle_skill_entity.lua index ced97378..cf65d17f 100644 --- a/lua/app/userdata/battle/skill/battle_skill_entity.lua +++ b/lua/app/userdata/battle/skill/battle_skill_entity.lua @@ -351,6 +351,10 @@ function BattleSkillEntity:getPassiveTriggerId() return self.skillInfo.trigger end +function BattleSkillEntity:getTriggerLimit() + return self.skillInfo.trigger_limit +end + function BattleSkillEntity:getFxBg() if self.skillShow then if not self:getIsAtkSideSkill() and self:getUsePvpEffect() then diff --git a/lua/app/userdata/hero/hero_entity.lua b/lua/app/userdata/hero/hero_entity.lua index fd3983ed..8f237467 100644 --- a/lua/app/userdata/hero/hero_entity.lua +++ b/lua/app/userdata/hero/hero_entity.lua @@ -623,6 +623,29 @@ function HeroEntity:getRogueSkillList() return self.rogueSkillList end +function HeroEntity:getRogueSkillListBattle() + if not self.rogueSkillList then + self.rogueSkillList = {} + local count = 1 + while true do + local ids = self.config["rouge_skill_" .. count] + if ids then + for i = #ids, 1, -1 do + if self.data.star >= ids[i][1] then + table.insert(self.rogueSkillList, ids[i][2]) + break + end + end + else + break + end + count = count + 1 + end + end + + return self.rogueSkillList +end + function HeroEntity:getRogueSkillListByIdx(idx) local ids = self.config["rouge_skill_" .. idx] local lv = 0