This commit is contained in:
puxuan 2025-10-16 21:16:15 +08:00
parent cfe72dae8d
commit 7ce2b6a419
19 changed files with 291 additions and 69 deletions

View File

@ -1035,6 +1035,20 @@ local buff = {
["buff_type"]=7, ["buff_type"]=7,
["stack"]=0, ["stack"]=0,
["decr"]=3 ["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 = { local keys = {
@ -1148,12 +1162,14 @@ local keys = {
["yellow_refresh_weight"]=buff[107], ["yellow_refresh_weight"]=buff[107],
["green_refresh_weight"]=buff[108], ["green_refresh_weight"]=buff[108],
["blue_refresh_weight"]=buff[109], ["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 = { local config = {
data=buff, data=buff,
keys=keys, keys=keys,
count=110 count=112
} }
return config return config

View File

@ -1247,6 +1247,25 @@ local item = {
["qlt"]=4, ["qlt"]=4,
["icon"]="48" ["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]={ [13001]={
["type"]=5, ["type"]=5,
["inbag"]=1, ["inbag"]=1,
@ -1484,6 +1503,6 @@ local item = {
} }
} }
local config = { local config = {
data=item,count=72 data=item,count=73
} }
return config return config

View File

@ -105,7 +105,7 @@ local skill = {
}, },
[15]={ [15]={
["effect_type"]=2, ["effect_type"]=2,
["trigger"]=11, ["trigger"]=12,
["trigger_value"]=10, ["trigger_value"]=10,
["trigger_limit"]=15, ["trigger_limit"]=15,
["effect"]={ ["effect"]={

View File

@ -19,24 +19,36 @@ local skill_rogue = {
[2]={ [2]={
["universal"]=1, ["universal"]=1,
["limit_times"]=1, ["limit_times"]=1,
["weight"]=1000, ["weight"]=1000000000000,
["qlt"]=5, ["qlt"]=5,
["type"]=20, ["type"]=9,
["parameter"]={ ["effect"]={
1000 {
["type"]="random_universal",
["num"]=20000,
["ratio"]=20000,
["round"]=9999
}
}, },
["icon"]="17" ["obj"]=1,
["icon"]="30"
}, },
[3]={ [3]={
["universal"]=1, ["universal"]=1,
["limit_times"]=1, ["limit_times"]=1,
["weight"]=1000, ["weight"]=1000,
["qlt"]=5, ["qlt"]=5,
["type"]=21, ["type"]=9,
["parameter"]={ ["effect"]={
1 {
["type"]="main_hero_energyadd",
["num"]=1,
["ratio"]=10000,
["round"]=0
}
}, },
["icon"]="29" ["obj"]=1,
["icon"]="30"
}, },
[4]={ [4]={
["universal"]=1, ["universal"]=1,
@ -284,7 +296,7 @@ local skill_rogue = {
["universal"]=1, ["universal"]=1,
["weight"]=1000, ["weight"]=1000,
["qlt"]=4, ["qlt"]=4,
["type"]=22, ["type"]=20,
["parameter"]={ ["parameter"]={
5 5
}, },
@ -294,7 +306,7 @@ local skill_rogue = {
["universal"]=1, ["universal"]=1,
["weight"]=1000, ["weight"]=1000,
["qlt"]=4, ["qlt"]=4,
["type"]=23, ["type"]=21,
["parameter"]={ ["parameter"]={
2 2
}, },
@ -304,7 +316,7 @@ local skill_rogue = {
["universal"]=1, ["universal"]=1,
["weight"]=1000, ["weight"]=1000,
["qlt"]=4, ["qlt"]=4,
["type"]=24, ["type"]=22,
["icon"]="27" ["icon"]="27"
}, },
[23]={ [23]={

View File

@ -252,7 +252,8 @@ BattleConst.SPECIAL_DAMAGE_OR_CURE_TYPE = {
} }
BattleConst.SKILL_RECORD_DATA_NAME = { BattleConst.SKILL_RECORD_DATA_NAME = {
HP_LOWER_THAN = 1 HP_LOWER_THAN = 1,
LINK_X_THAN = 2,
} }
BattleConst.SKILL_CONDITION_TYPE = { BattleConst.SKILL_CONDITION_TYPE = {
@ -282,6 +283,7 @@ BattleConst.PASSIVE_EVENT = {
ON_DEAD_BY_SKILL = 9, -- 有敌人死于技能时触发 ON_DEAD_BY_SKILL = 9, -- 有敌人死于技能时触发
ON_DEAD_WITH_BLEED = 10, -- 死亡时带有流血buff ON_DEAD_WITH_BLEED = 10, -- 死亡时带有流血buff
ON_DEAD = 11, -- 死亡时 ON_DEAD = 11, -- 死亡时
ON_LINK_X = 12, -- 每消除X个色块trigger_value触发参数配置获得一次effect效果增加触发上限功能trigger_limit
} }
local BUFF_NAME = { local BUFF_NAME = {
@ -373,6 +375,7 @@ local BUFF_NAME = {
FOREVER_DEC_DMG_PURPLE_ADD = "forever_dec_dmg_purple_add", FOREVER_DEC_DMG_PURPLE_ADD = "forever_dec_dmg_purple_add",
FOREVER_DEC_DMG_ALL_ADD = "forever_dec_dmg_all_add", FOREVER_DEC_DMG_ALL_ADD = "forever_dec_dmg_all_add",
FOREVER_THORNS = "forever_thorns", FOREVER_THORNS = "forever_thorns",
RANDOM_UNIVERSAL = "random_universal",
} }
BattleConst.BUFF_NAME = BUFF_NAME BattleConst.BUFF_NAME = BUFF_NAME

View File

@ -469,6 +469,7 @@ end
function BattleUnitComp:useNormalSkill(count, effectType, callback) function BattleUnitComp:useNormalSkill(count, effectType, callback)
self.actionOverCallback = callback self.actionOverCallback = callback
self.normalSkillCount = count self.normalSkillCount = count
self:checkPassiveEvent(PASSIVE_EVENT.ON_LINK_X)
if effectType == BattleConst.EFFECT_TYPE.DIRECT then if effectType == BattleConst.EFFECT_TYPE.DIRECT then
self.normalSkillCount = self.normalSkillCount + self.unitEntity:getNormalAttackAddCount() self.normalSkillCount = self.normalSkillCount + self.unitEntity:getNormalAttackAddCount()
end end

View File

@ -287,7 +287,8 @@ function BattleBaseController:onLinkChange()
local entity = self.battleData:getGridEntity(info.posId) local entity = self.battleData:getGridEntity(info.posId)
if not mainElementType or not dmgSkillId then if not mainElementType or not dmgSkillId then
local skillId = entity:getSkillId() 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() mainElementType = entity:getElementType()
end end
if skillId and not dmgSkillId then if skillId and not dmgSkillId then
@ -1481,7 +1482,7 @@ function BattleBaseController:calculateCurElimination(onlyCheck)
local entity = gridEntities[info.posId] local entity = gridEntities[info.posId]
local elementType = entity:getElementType() local elementType = entity:getElementType()
if not info.noAni and info.isIdle then 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 if not entity:isElmentTypeInvalid() then
self.elementTypeMap[elementType] = (self.elementTypeMap[elementType] or 0) + 1 self.elementTypeMap[elementType] = (self.elementTypeMap[elementType] or 0) + 1
end end
@ -1514,6 +1515,9 @@ function BattleBaseController:dealGridBreak(posId, condition, time, breakedMap,
if entity:getSkillId() then if entity:getSkillId() then
aniUnit.isSkill = true aniUnit.isSkill = true
end end
if entity:getIsUniversal() then
aniUnit.isUniversal = true
end
if breaked or entity:canBreakByThisCondition(condition) then if breaked or entity:canBreakByThisCondition(condition) then
breakedMap[posId] = true breakedMap[posId] = true
@ -1658,6 +1662,7 @@ function BattleBaseController:getEliminattionAniInfo(posId, timeIdx)
timeIdx = timeIdx, timeIdx = timeIdx,
conditions = nil, conditions = nil,
isSkill = false, isSkill = false,
isUniversal = false,
isIdle = false, isIdle = false,
callback = nil, callback = nil,
overCallback = nil, overCallback = nil,
@ -1780,23 +1785,25 @@ function BattleBaseController:onFillBoardOver(isRoundBeginCheck)
EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.BOARD_FILL_OVER) EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.BOARD_FILL_OVER)
self:popBoardCacheSkill(function() self:popBoardCacheSkill(function()
self:generateSkill(function() self:generateSkill(function()
if self.onFillBoardOverCallback then self:generateUniversal(function()
local callback = self.onFillBoardOverCallback if self.onFillBoardOverCallback then
self.onFillBoardOverCallback = nil local callback = self.onFillBoardOverCallback
callback() self.onFillBoardOverCallback = nil
else callback()
self:enterElimination(true) else
end self:enterElimination(true)
end
end)
end) end)
end) end)
else else
self:generateSkill(function() self:generateSkill(function()
self.battleUI:refreshSkill(nil, nil, self:getCurActionSide()) self.battleUI:refreshSkill(nil, nil, self:getCurActionSide())
if self.onFillBoardOverCallback then if self.onFillBoardOverCallback then
local callback = self.onFillBoardOverCallback local callback = self.onFillBoardOverCallback
self.onFillBoardOverCallback = nil self.onFillBoardOverCallback = nil
callback() callback()
end end
end) end)
end end
end end
@ -1974,6 +1981,49 @@ function BattleBaseController:setGridSkillId(posId, skillId, noDirty)
end end
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) function BattleBaseController:generateGridType(skillTypeParameter, monsterPos)
if not skillTypeParameter then if not skillTypeParameter then
@ -2253,32 +2303,33 @@ function BattleBaseController:getRandomGridInfo()
local fixedRandomList = fixedRandomGrid[self.curBoardIndex] local fixedRandomList = fixedRandomGrid[self.curBoardIndex]
local gridType = 0 local gridType = 0
local elementType -- local elementType
if fixedRandomList and fixedRandomList[1] then -- if fixedRandomList and fixedRandomList[1] then
elementType = table.remove(fixedRandomList, 1) -- elementType = table.remove(fixedRandomList, 1)
else -- else
local map = self.battleData:getElementTypeMap() -- local map = self.battleData:getElementTypeMap()
self.getRandomGridInfoIndexs = table.clearOrCreate(self.getRandomGridInfoIndexs) -- self.getRandomGridInfoIndexs = table.clearOrCreate(self.getRandomGridInfoIndexs)
self.getRandomGridInfoTypeList = table.clearOrCreate(self.getRandomGridInfoTypeList) -- self.getRandomGridInfoTypeList = table.clearOrCreate(self.getRandomGridInfoTypeList)
for typeName, typeNum in pairs(BattleConst.ELEMENT_TYPE) do -- for typeName, typeNum in pairs(BattleConst.ELEMENT_TYPE) do
if not self:getSealElementType()[typeNum] and self:getSkillEntityByElement(typeNum) then -- if not self:getSealElementType()[typeNum] and self:getSkillEntityByElement(typeNum) then
local weight = ((map[typeNum] or 0) + 1) * BattleConst.ELEMENT_WIGHT -- local weight = ((map[typeNum] or 0) + 1) * BattleConst.ELEMENT_WIGHT
if self.elementWeightMap and self.elementWeightMap[typeNum] then -- if self.elementWeightMap and self.elementWeightMap[typeNum] then
weight = weight + self.elementWeightMap[typeNum] -- weight = weight + self.elementWeightMap[typeNum]
end -- end
if weight > BattleConst.MAX_ELEMENT_WIGHT then -- if weight > BattleConst.MAX_ELEMENT_WIGHT then
weight = BattleConst.MAX_ELEMENT_WIGHT -- weight = BattleConst.MAX_ELEMENT_WIGHT
end -- end
table.insert(self.getRandomGridInfoIndexs, weight) -- table.insert(self.getRandomGridInfoIndexs, weight)
table.insert(self.getRandomGridInfoTypeList, typeNum) -- table.insert(self.getRandomGridInfoTypeList, typeNum)
end -- end
end -- end
local index = GFunc.getRandomIndex(self.getRandomGridInfoIndexs) -- local index = GFunc.getRandomIndex(self.getRandomGridInfoIndexs)
elementType = self.getRandomGridInfoTypeList[index] -- elementType = self.getRandomGridInfoTypeList[index]
end -- end
local elementType = math.random(1, BattleConst.ELEMENT_TYPE.PURPLE)
return {gridType = gridType, elementType = elementType} return {gridType = gridType, elementType = elementType, isUniversal = true}
end end

View File

@ -62,7 +62,7 @@ function BattleBoardTouchHelper:onLinkStart(entity, posId, isVirtual)
end end
self.battleData:insertGridSequence(posId, self.battleController:snapshotBoard(), isVirtual) self.battleData:insertGridSequence(posId, self.battleController:snapshotBoard(), isVirtual)
local skillEntity = self.battleController:getSkillEntityBySkillId(entity:getSkillId()) 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.battleUI:showBoardMask(maskElementType, skillEntity and entity:getPosId())
self.battleController:findSkillInfluenceGrids() self.battleController:findSkillInfluenceGrids()
self.battleController:onLinkChange() self.battleController:onLinkChange()
@ -110,12 +110,12 @@ function BattleBoardTouchHelper:onLinkEnter(entity, posId, isVirtual)
local skillId = entity:getSkillId() local skillId = entity:getSkillId()
local skillEntity = self.battleController:getSkillEntityBySkillId(skillId) local skillEntity = self.battleController:getSkillEntityBySkillId(skillId)
local elementType = entity:getElementType(skillEntity) local elementType = entity:getElementType(skillEntity, true)
local lastEntity = self.battleData:getGridEntity(lastPosId) local lastEntity = self.battleData:getGridEntity(lastPosId)
local lastSkillId = lastEntity:getSkillId() local lastSkillId = lastEntity:getSkillId()
local lastSkillEntity = self.battleController:getSkillEntityBySkillId(lastSkillId) local lastSkillEntity = self.battleController:getSkillEntityBySkillId(lastSkillId)
local lastElementType = lastEntity:getElementType(lastSkillEntity) local lastElementType = lastEntity:getElementType(lastSkillEntity, true)
local hadSkillId, skillPosId = self.battleData:getSequenceHadSkill() local hadSkillId, skillPosId = self.battleData:getSequenceHadSkill()
if skillEntity and hadSkillId then if skillEntity and hadSkillId then
@ -244,7 +244,7 @@ function BattleBoardTouchHelper:clearSequenceByPosId(posId)
end end
local gridEntity = self.battleData:getGridEntity(posId) local gridEntity = self.battleData:getGridEntity(posId)
local skillEntity = self.battleController:getSkillEntityBySkillId(gridEntity:getSkillId()) local skillEntity = self.battleController:getSkillEntityBySkillId(gridEntity:getSkillId())
local maskElementType = gridEntity:getElementType(skillEntity) local maskElementType = gridEntity:getElementType(skillEntity, true)
local _, skillPosId = self.battleData:getSequenceHadSkill() local _, skillPosId = self.battleData:getSequenceHadSkill()
self.battleUI:showBoardMask(maskElementType, skillPosId) self.battleUI:showBoardMask(maskElementType, skillPosId)

View File

@ -69,6 +69,25 @@ local function _checkOnDead(unitComp, skill, targetComp)
return 1 return 1
end 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 = { BattlePassive.checkTrigger = {
[PASSIVE_EVENT.ON_UNIT_PREPARE_OVER] = _checkOnUnitPrepareOver, [PASSIVE_EVENT.ON_UNIT_PREPARE_OVER] = _checkOnUnitPrepareOver,
[PASSIVE_EVENT.ON_UNI_ATTACK_START] = _checkOnUniAttackStart, [PASSIVE_EVENT.ON_UNI_ATTACK_START] = _checkOnUniAttackStart,
@ -80,6 +99,7 @@ BattlePassive.checkTrigger = {
[PASSIVE_EVENT.ON_DEAD_BY_SKILL] = _checkOnDeadBySkill, [PASSIVE_EVENT.ON_DEAD_BY_SKILL] = _checkOnDeadBySkill,
[PASSIVE_EVENT.ON_DEAD_WITH_BLEED] = _checkOnDeadWithBleed, [PASSIVE_EVENT.ON_DEAD_WITH_BLEED] = _checkOnDeadWithBleed,
[PASSIVE_EVENT.ON_DEAD] = _checkOnDead, [PASSIVE_EVENT.ON_DEAD] = _checkOnDead,
[PASSIVE_EVENT.ON_LINK_X] = _checkLinkX,
} }
return BattlePassive return BattlePassive

View File

@ -514,7 +514,12 @@ BattleRogueSkillHandle._effectOn = {
[16] = _addSkillRatio, -- 增加技能效果概率 [16] = _addSkillRatio, -- 增加技能效果概率
[17] = _addSkillBreakEnergyMultiple, -- 增加技能消除的元素的能量倍数 [17] = _addSkillBreakEnergyMultiple, -- 增加技能消除的元素的能量倍数
[18] = _addSkillMerge, -- 融合技能参数配本表的ID获得后直接让配的技能ID都生效 [18] = _addSkillMerge, -- 融合技能参数配本表的ID获得后直接让配的技能ID都生效
[19] = _addSkillLinkNumRound, -- 需要做成链接超X个元素时将主技能的第几个BUFF的回合数增加。参数配置[链接数,第几个BUFF回合数加值] [19] = _addSkillLinkNumRound, -- 需要做成链接超X个元素时将主技能的第几个BUFF的回合数增加。参数配置[链接数,第几个BUFF回合数加值]
-- [20] = _randomOneUniversal, -- 概率刷出万能块技能参数parameter配置其概率
-- [21] = _addSkillLinkNumRound, -- 每次消除获得的主要英雄能量+Xparameter配置能量增加数
-- [22] = _addSkillLinkNumRound, -- 随机1名英雄能量+Xparameter配置能量增加数
-- [23] = _addSkillLinkNumRound, -- 全体英雄能量+Xparameter配置能量增加数
-- [24] = _addSkillLinkNumRound, -- 随机将一个技能能量加满
} }
function BattleRogueSkillHandle.takeEffect(skillId, battleData, battleController, value, side, isSnapshot) function BattleRogueSkillHandle.takeEffect(skillId, battleData, battleController, value, side, isSnapshot)

View File

@ -685,6 +685,22 @@ function BattleTeam:updateBuffState(buff, num)
end end
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) function BattleTeam:getBuffCountByName(buffName)
return self.sameBuffCount[buffName] or 0 return self.sameBuffCount[buffName] or 0
end end

View File

@ -2167,6 +2167,8 @@ function BattleBaseUI:refreshWave(wave, iconAtlas, iconName)
end end
function BattleBaseUI:getSfxLine(elementType, index, func) function BattleBaseUI:getSfxLine(elementType, index, func)
--@TODO 2025-10-16 21:12:05 缺光效
elementType = elementType or 1
self.hidingAllSfxLine = false self.hidingAllSfxLine = false
self.root.lineSfxObjs = self.root.lineSfxObjs or {} self.root.lineSfxObjs = self.root.lineSfxObjs or {}

View File

@ -23,6 +23,9 @@ function BattleSelectSkillCell:refresh(skillId, func)
value = I18N:getText("skill_rogue", skillId, "desc", value) value = I18N:getText("skill_rogue", skillId, "desc", value)
end end
else else
if EDITOR_MODE then
Logger.logHighlight("=================== skillId = %s", skillId)
end
value = ModuleManager.HeroManager:getSkillRogueDesc(skillId, self.value) value = ModuleManager.HeroManager:getSkillRogueDesc(skillId, self.value)
end end
end end

View File

@ -62,6 +62,7 @@ function GridCell:refresh(gridEntity, curElement, skillPosId)
local skillIcon = uiMap["grid_cell.touch_node.ani_node.skill_icon"] local skillIcon = uiMap["grid_cell.touch_node.ani_node.skill_icon"]
local skillId = gridEntity:getSkillId() local skillId = gridEntity:getSkillId()
local isUniversal = gridEntity:getIsUniversal()
if skillId then if skillId then
elementIcon:setVisible(false) elementIcon:setVisible(false)
skillIcon:setVisible(true) skillIcon:setVisible(true)
@ -105,6 +106,12 @@ function GridCell:refresh(gridEntity, curElement, skillPosId)
downBg:setSprite(GConst.ATLAS_PATH.BATTLE, self.lastSkillBg) downBg:setSprite(GConst.ATLAS_PATH.BATTLE, self.lastSkillBg)
end end
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 else
skillIcon:setVisible(false) skillIcon:setVisible(false)
end end
@ -159,8 +166,9 @@ function GridCell:showHighLight(show, mainElementType)
local downBg = uiMap["grid_cell.touch_node.ani_node.down_bg"] local downBg = uiMap["grid_cell.touch_node.ani_node.down_bg"]
local skillId = self.gridEntity:getSkillId() local skillId = self.gridEntity:getSkillId()
downBg:setVisible(skillId ~= nil) local isUniversal = self.gridEntity:getIsUniversal()
if skillId then if skillId then
downBg:setVisible(true)
show = true -- 有技能,强制显示特效 show = true -- 有技能,强制显示特效
local skillEntity = self:getSkillEntity() local skillEntity = self:getSkillEntity()
local ignoreElementType = skillEntity:getIgnoreElementType() local ignoreElementType = skillEntity:getIgnoreElementType()
@ -175,6 +183,11 @@ function GridCell:showHighLight(show, mainElementType)
self.lastSkillBg = skillBg self.lastSkillBg = skillBg
downBg:setSprite(GConst.ATLAS_PATH.BATTLE, self.lastSkillBg) downBg:setSprite(GConst.ATLAS_PATH.BATTLE, self.lastSkillBg)
end end
elseif isUniversal then
downBg:setVisible(true)
downBg:setSprite(GConst.ATLAS_PATH.BATTLE, "battle_bg_lv")
else
downBg:setVisible(false)
end end

View File

@ -168,7 +168,7 @@ function BattleBaseData:initRogueSkills(side, formation)
local skillId = heroEntity:getBaseSkill() local skillId = heroEntity:getBaseSkill()
local cfg = SKILL_CFG[skillId] local cfg = SKILL_CFG[skillId]
self.skillMap[side][cfg.position] = BATTLE_BOARD_SKILL_ENTITY:create(skillId, side) 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()) self.skillMap[side][cfg.position]:setUnlockId(heroEntity:getUnlockRogueId())
for _, id in ipairs(heroEntity:getActiveRogueSkills()) do for _, id in ipairs(heroEntity:getActiveRogueSkills()) do
if not skillmap[id] then if not skillmap[id] then
@ -451,6 +451,7 @@ function BattleBaseData:setGridInfo(posId, gridInfo)
end end
entity:setSkilId() -- 清除skillId entity:setSkilId() -- 清除skillId
entity:setUniversal(gridInfo.isUniversal) -- 清除万能地块
entity:determineIdleStatus() entity:determineIdleStatus()
end end

View File

@ -9,6 +9,7 @@ function BattleGridEntity:ctor(data)
self.gridType = data.gridType or BattleConst.GRID_TYPE.EMPTY self.gridType = data.gridType or BattleConst.GRID_TYPE.EMPTY
self.elementType = data.elementType or BattleConst.ELEMENT_TYPE.NONE self.elementType = data.elementType or BattleConst.ELEMENT_TYPE.NONE
self.skillId = data.skillId self.skillId = data.skillId
self.isUniversal = data.universalId
self.linkSkillCount = data.linkSkillCount or 0 -- 任意链接技能激活次数 self.linkSkillCount = data.linkSkillCount or 0 -- 任意链接技能激活次数
self.battleData = data.battleData self.battleData = data.battleData
self.isIdle = false self.isIdle = false
@ -21,6 +22,7 @@ function BattleGridEntity:clear()
self.gridType = BattleConst.GRID_TYPE.EMPTY self.gridType = BattleConst.GRID_TYPE.EMPTY
self.elementType = BattleConst.ELEMENT_TYPE.RED self.elementType = BattleConst.ELEMENT_TYPE.RED
self.skillId = nil self.skillId = nil
self.isUniversal = nil
self.linkSkillCount = 0 -- 任意链接技能激活次数 self.linkSkillCount = 0 -- 任意链接技能激活次数
self.isIdle = false self.isIdle = false
self.breakCount = 0 self.breakCount = 0
@ -38,6 +40,7 @@ function BattleGridEntity:getSnapshoptInfo()
elementType = self.elementType, elementType = self.elementType,
isIdle = self.isIdle, isIdle = self.isIdle,
skillId = self.skillId, skillId = self.skillId,
universalId = self.isUniversal,
linkSkillCount = self.linkSkillCount, linkSkillCount = self.linkSkillCount,
breakCount = self.breakCount, breakCount = self.breakCount,
} }
@ -49,6 +52,7 @@ function BattleGridEntity:setInfoBySnapshop(snapshot)
self.elementType = snapshot.elementType or BattleConst.ELEMENT_TYPE.RED self.elementType = snapshot.elementType or BattleConst.ELEMENT_TYPE.RED
self.isIdle = snapshot.isIdle self.isIdle = snapshot.isIdle
self.skillId = snapshot.skillId self.skillId = snapshot.skillId
self.isUniversal = snapshot.universalId
self.linkSkillCount = snapshot.linkSkillCount self.linkSkillCount = snapshot.linkSkillCount
self.breakCount = snapshot.breakCount self.breakCount = snapshot.breakCount
self:setDirty() self:setDirty()
@ -70,11 +74,13 @@ function BattleGridEntity:getGridType()
return self.gridType return self.gridType
end end
function BattleGridEntity:getElementType(skillEntity) function BattleGridEntity:getElementType(skillEntity, checkUniversal)
if skillEntity and skillEntity:getIgnoreElementType() and self.linkSkillCount <= 0 then if skillEntity and skillEntity:getIgnoreElementType() and self.linkSkillCount <= 0 then
return nil return nil
end end
if checkUniversal and self.isUniversal then
return nil
end
return self.elementType return self.elementType
end end
@ -138,6 +144,12 @@ function BattleGridEntity:tryBreakGrid(condition, onlyCheck)
else else
return false return false
end 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 else
if self:isEmptyIdle() and (condition == BattleConst.GRID_BREAK_CONDITION.LINE or condition == BattleConst.GRID_BREAK_CONDITION.SKILL) then -- 空类型/带技能破碎逻辑为,链接消除 置为闲置即消除 if self:isEmptyIdle() and (condition == BattleConst.GRID_BREAK_CONDITION.LINE or condition == BattleConst.GRID_BREAK_CONDITION.SKILL) then -- 空类型/带技能破碎逻辑为,链接消除 置为闲置即消除
isIdle = true isIdle = true
@ -208,7 +220,7 @@ end
function BattleGridEntity:setElementType(elementType, noDirty) function BattleGridEntity:setElementType(elementType, noDirty)
self.elementType = elementType 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) self:setGridType(BattleConst.GRID_TYPE.LOCK)
end end
if not noDirty then if not noDirty then
@ -254,26 +266,37 @@ end
function BattleGridEntity:canChangeInfo() 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 return true
end end
return false return false
end end
function BattleGridEntity:isEmptyIdle() 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 return true
end end
return false return false
end end
function BattleGridEntity:isNotObstacleIdle() 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 return true
end end
return false return false
end 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() function BattleGridEntity:isCanFallStatus()
if not self:isCantFallType() and not self:getIsIdle() then if not self:isCantFallType() and not self:getIsIdle() then
return true return true

View File

@ -1,4 +1,5 @@
local BattleConst = require "app/module/battle/battle_const" local BattleConst = require "app/module/battle/battle_const"
local BattleHelper = require "app/module/battle/helper/battle_helper"
local BattleBuffEntity = class("BattleBuffEntity", BaseData) local BattleBuffEntity = class("BattleBuffEntity", BaseData)
local BUFF_TYPE_DIRECT_HURT = BattleConst.BUFF_TYPE.DIRECT_HURT 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 self.needSave = self.hostSkill ~= nil
end 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) function BattleBuffEntity:setOwner(owner)
self.owner = owner self.owner = owner
end end

View File

@ -351,6 +351,10 @@ function BattleSkillEntity:getPassiveTriggerId()
return self.skillInfo.trigger return self.skillInfo.trigger
end end
function BattleSkillEntity:getTriggerLimit()
return self.skillInfo.trigger_limit
end
function BattleSkillEntity:getFxBg() function BattleSkillEntity:getFxBg()
if self.skillShow then if self.skillShow then
if not self:getIsAtkSideSkill() and self:getUsePvpEffect() then if not self:getIsAtkSideSkill() and self:getUsePvpEffect() then

View File

@ -623,6 +623,29 @@ function HeroEntity:getRogueSkillList()
return self.rogueSkillList return self.rogueSkillList
end 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) function HeroEntity:getRogueSkillListByIdx(idx)
local ids = self.config["rouge_skill_" .. idx] local ids = self.config["rouge_skill_" .. idx]
local lv = 0 local lv = 0