diff --git a/lua/app/module/battle/battle_const.lua b/lua/app/module/battle/battle_const.lua index 53688d46..5cbea929 100644 --- a/lua/app/module/battle/battle_const.lua +++ b/lua/app/module/battle/battle_const.lua @@ -30,6 +30,7 @@ BattleConst.HURT_STATE_CRIT = 1 -- 暴击 BattleConst.EFFECT_COLOR_RED = 1 BattleConst.EFFECT_COLOR_GREEN = 2 BattleConst.EFFECT_COLOR_BLUE = 3 +BattleConst.EFFECT_COLOR_WHILTE = 4 BattleConst.EFFECT_TYPE_MOVE_L = 1 BattleConst.EFFECT_TYPE_MOVE_R = 2 BattleConst.EFFECT_TYPE_CRIT = 3 @@ -193,6 +194,7 @@ BattleConst.EFFECT_TYPE = { BattleConst.SPECIAL_DAMAGE_OR_CURE_TYPE = { ROUND_BEGIN_HEAL = "round_begin_heal", KILL_MAX_ELEMENT_AND_HEAL = "kill_max_element_and_heal", + BE_SUCKED = "be_sucked", } BattleConst.SKILL_RECORD_DATA_NAME = { diff --git a/lua/app/module/battle/component/battle_unit_comp.lua b/lua/app/module/battle/component/battle_unit_comp.lua index 8297dcb7..284f7ab1 100644 --- a/lua/app/module/battle/component/battle_unit_comp.lua +++ b/lua/app/module/battle/component/battle_unit_comp.lua @@ -1407,11 +1407,26 @@ function BattleUnitComp:takeDamageOrCure(atker, num, effectType, effectStatus, d if effectStatus == HURT_STATE_CRIT then self:showEffectNumber(BattleConst.EFFECT_COLOR_RED, BattleConst.EFFECT_TYPE_CRIT, "c" .. damage, x, y, delayTime) else - if self.side == BattleConst.SIDE_ATK then - self:showEffectNumber(BattleConst.EFFECT_COLOR_RED, BattleConst.EFFECT_TYPE_MOVE_L, damage, x, y, delayTime) + local effectColor = BattleConst.EFFECT_COLOR_RED + local damageStr = damage + local direction = BattleConst.EFFECT_TYPE_MOVE_R + local elementType = BattleHelper:getDamageOrCureType2MatchType(damageOrCureType) + local weekNessValue = self.unitEntity:getWeakness(elementType) + if weekNessValue > 0 then + damageStr = "a" .. damage else - self:showEffectNumber(BattleConst.EFFECT_COLOR_RED, BattleConst.EFFECT_TYPE_MOVE_R, damage, x, y, delayTime) + local decGmgValue = self.unitEntity:getDecDmg(elementType) + if decGmgValue > 0 then + effectColor = BattleConst.EFFECT_COLOR_WHILTE + damageStr = "d" .. damage + end end + + if self.side == BattleConst.SIDE_ATK then + direction = BattleConst.EFFECT_TYPE_MOVE_L + end + + self:showEffectNumber(effectColor, direction, damageStr, x, y, delayTime) end end if effectType == EFFECT_TYPE.DIRECT then @@ -1419,7 +1434,7 @@ function BattleUnitComp:takeDamageOrCure(atker, num, effectType, effectStatus, d atker:takeDamageOrCure(self, num*self.unitEntity:getShieldRebound() // DEFAULT_FACTOR, EFFECT_TYPE.REBOUND, 0, BattleConst.BUFF_NAME.SHIELD_REBOUND_200) end if self.unitEntity:getBeSucked() > 0 then -- 吸血 - atker:takeDamageOrCure(self, -num*self.unitEntity:getBeSucked() // DEFAULT_FACTOR, EFFECT_TYPE.HEAL, 0, BattleConst.ATTR_NAME.BE_SUCKED) + atker:takeDamageOrCure(self, -num*self.unitEntity:getBeSucked() // DEFAULT_FACTOR, EFFECT_TYPE.HEAL, 0, BattleConst.SPECIAL_DAMAGE_OR_CURE_TYPE.BE_SUCKED) end if self.unitEntity:getIsLethargy() then -- 移除昏睡 self:removeBuffByName(BattleConst.BUFF_NAME.LETHARGY) diff --git a/lua/app/module/battle/controller/battle_controller.lua b/lua/app/module/battle/controller/battle_controller.lua index 0ff46638..f04962e7 100644 --- a/lua/app/module/battle/controller/battle_controller.lua +++ b/lua/app/module/battle/controller/battle_controller.lua @@ -297,7 +297,8 @@ function BattleController:prepareFight() self.battleUI:addLoadUICompleteListener(function() BattleHelper:setEffectTextCache(self.battleUI:getBattleNumberRed(), self.battleUI:getBattleNumberGreen(), - self.battleUI:getBattleNumberBlue()) + self.battleUI:getBattleNumberBlue(), + self.battleUI:getBattleNumberWhite()) self:initAtkUnits(onPreloadFinished) self:initDefUnits(onPreloadFinished) self.battleUI:refreshChessBoard(self:getChessBoardBgName()) diff --git a/lua/app/module/battle/helper/battle_helper.lua b/lua/app/module/battle/helper/battle_helper.lua index 6000eb26..81c02b33 100644 --- a/lua/app/module/battle/helper/battle_helper.lua +++ b/lua/app/module/battle/helper/battle_helper.lua @@ -20,6 +20,7 @@ function BattleHelper:init() self.seed = tonumber(tostring(os.time()):reverse():sub(1,6)) self.baseOrder = 0 self.skillSoundPath = {} + self.damageOrCureType2MatchType = {} end function BattleHelper:setBaseOrder(baseOrder) @@ -175,13 +176,14 @@ function BattleHelper:addSpineBoneFollowerGraphic(effectObj) return boneFollower end -function BattleHelper:setEffectTextCache(cache1, cache2, cache3) +function BattleHelper:setEffectTextCache(cache1, cache2, cache3, cache4) if self.effectTextCacheList == nil then self.effectTextCacheList = {} end self.effectTextCacheList[1] = cache1 self.effectTextCacheList[2] = cache2 self.effectTextCacheList[3] = cache3 + self.effectTextCacheList[4] = cache4 end function BattleHelper:getEffectText(parent, colorType) @@ -256,6 +258,30 @@ function BattleHelper:playSkillSound(name, delay) end end +function BattleHelper:getDamageOrCureType2MatchType(damageOrCureType) + if not damageOrCureType then + return GConst.BattleConst.ELEMENT_TYPE.NONE + end + + if not self.damageOrCureType2MatchType[damageOrCureType] then + local elementType = GConst.BattleConst.ELEMENT_TYPE.NONE + if string.match(damageOrCureType, "red") then + elementType = GConst.BattleConst.ELEMENT_TYPE.RED + elseif string.match(damageOrCureType, "yellow") then + elementType = GConst.BattleConst.ELEMENT_TYPE.YELLOW + elseif string.match(damageOrCureType, "green") then + elementType = GConst.BattleConst.ELEMENT_TYPE.GREEN + elseif string.match(damageOrCureType, "blue") then + elementType = GConst.BattleConst.ELEMENT_TYPE.BLUE + elseif string.match(damageOrCureType, "purple") then + elementType = GConst.BattleConst.ELEMENT_TYPE.PURPLE + end + self.damageOrCureType2MatchType[damageOrCureType] = elementType + end + + return self.damageOrCureType2MatchType[damageOrCureType] +end + function BattleHelper:performDurationDelay(delay, func) return BattleScheduler:performWithDelayGlobal(func, delay) end diff --git a/lua/app/ui/battle/battle_ui.lua b/lua/app/ui/battle/battle_ui.lua index 59fb80b7..56d4b535 100644 --- a/lua/app/ui/battle/battle_ui.lua +++ b/lua/app/ui/battle/battle_ui.lua @@ -384,6 +384,7 @@ function BattleUI:initNumberNode() self.battleNumberRed = self.uiMap["battle_ui.cache_node.battle_number_red"] self.battleNumberGreen = self.uiMap["battle_ui.cache_node.battle_number_green"] self.battleNumberBlue = self.uiMap["battle_ui.cache_node.battle_number_blue"] + self.battleNumberWhite = self.uiMap["battle_ui.cache_node.battle_number_white"] end function BattleUI:getNumberNode() @@ -402,6 +403,10 @@ function BattleUI:getBattleNumberBlue() return self.battleNumberBlue end +function BattleUI:getBattleNumberWhite() + return self.battleNumberWhite +end + function BattleUI:initComboNode() self.comboNode = self.uiMap["battle_ui.top_node.combo"] self.comboAnimator = self.comboNode:getComponent(GConst.TYPEOF_UNITY_CLASS.ANIMATOR)