肉鸽
This commit is contained in:
parent
cfe72dae8d
commit
7ce2b6a419
@ -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
|
||||||
@ -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
|
||||||
@ -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"]={
|
||||||
|
|||||||
@ -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]={
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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,6 +1785,7 @@ 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()
|
||||||
|
self:generateUniversal(function()
|
||||||
if self.onFillBoardOverCallback then
|
if self.onFillBoardOverCallback then
|
||||||
local callback = self.onFillBoardOverCallback
|
local callback = self.onFillBoardOverCallback
|
||||||
self.onFillBoardOverCallback = nil
|
self.onFillBoardOverCallback = nil
|
||||||
@ -1789,6 +1795,7 @@ function BattleBaseController:onFillBoardOver(isRoundBeginCheck)
|
|||||||
end
|
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())
|
||||||
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
@ -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
|
||||||
@ -515,6 +515,11 @@ BattleRogueSkillHandle._effectOn = {
|
|||||||
[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, -- 每次消除获得的主要英雄能量+X,parameter配置能量增加数
|
||||||
|
-- [22] = _addSkillLinkNumRound, -- 随机1名英雄能量+X,parameter配置能量增加数
|
||||||
|
-- [23] = _addSkillLinkNumRound, -- 全体英雄能量+X,parameter配置能量增加数
|
||||||
|
-- [24] = _addSkillLinkNumRound, -- 随机将一个技能能量加满
|
||||||
}
|
}
|
||||||
|
|
||||||
function BattleRogueSkillHandle.takeEffect(skillId, battleData, battleController, value, side, isSnapshot)
|
function BattleRogueSkillHandle.takeEffect(skillId, battleData, battleController, value, side, isSnapshot)
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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 {}
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user