Kaynağa Gözat

神威灵装相关效果

gitxsm 2 ay önce
ebeveyn
işleme
eef0e1a100

+ 73 - 0
script/module/combat/BeSkill.lua

@@ -1839,6 +1839,15 @@ function getExtraHurtRate(attacker,defender,skillConfig)
 						end
 					end
 				end
+			elseif config.cmd == "hpSubHurtAdd" then
+				local nowHp = attacker.hp
+				local hpMax = CombatObj.getHpMax(attacker)
+				local percent = math.floor((hpMax - nowHp )/hpMax * 100) --已损失血量百分比
+				local condCfg = config.beSkillArgs
+				local condRate = condCfg[1]
+				if percent >= condRate then
+					hpHurtRate = hpHurtRate + condCfg[2]
+				end
 			end
 		end
 	end
@@ -2344,4 +2353,68 @@ function isNoFanji(obj)
         end
 	end
 	return false
+end
+
+-- 获取与神威灵装"真伤附加"效果相对的"真伤减免"
+function GetTrueDamegeOffset(obj)
+	if obj.beSkillList[BESKILL_TYPE72] then
+		for _, v in ipairs(obj.beSkillList[BESKILL_TYPE72]) do
+			local skillConfig = Skill.GetSkillConfig(v[1])
+			if skillConfig.cmd == "trueDamegeOffset" then
+				local offsetInfo = {}
+				offsetInfo[1] = skillConfig.beSkillArgs[1]
+				offsetInfo[2] = skillConfig.beSkillArgs[2]
+				return offsetInfo
+			end
+        end
+	end
+end
+
+-- 触发格挡后额外减伤
+function GetGeDangExtraDef(obj)
+	if obj.beSkillList[BESKILL_TYPE72] then
+		for _, v in ipairs(obj.beSkillList[BESKILL_TYPE72]) do
+			local skillConfig = Skill.GetSkillConfig(v[1])
+			if skillConfig.cmd == "gedangExtraDef" then
+				return skillConfig.beSkillArgs[1]
+			end
+        end
+	end
+
+	return 0
+end
+
+-- 伤害翻倍
+function GetBeSkillHurtMul(obj)
+	if obj.beSkillList[BESKILL_TYPE72] then
+		for _, v in ipairs(obj.beSkillList[BESKILL_TYPE72]) do
+			local skillConfig = Skill.GetSkillConfig(v[1])
+			if skillConfig.cmd == "physicalDamageMul" and obj.hurtType == CombatDefine.PHY_HURT_TYPE then
+				return math.random(skillConfig.beSkillArgs[1], skillConfig.beSkillArgs[2])
+			end
+
+			if skillConfig.cmd == "magicDamageMul" and obj.hurtType == CombatDefine.MAGIC_HURT_TYPE then
+				return math.random(skillConfig.beSkillArgs[1], skillConfig.beSkillArgs[2])
+			end
+        end
+	end
+end
+
+-- 回血翻倍
+function GetBeSkillRestoretHPMul(obj)
+	local mul = 1
+	if obj.beSkillList[BESKILL_TYPE72] then
+		for _, v in ipairs(obj.beSkillList[BESKILL_TYPE72]) do
+			local skillConfig = Skill.GetSkillConfig(v[1])
+			if skillConfig.cmd == "restoreHPMul" then
+				local r = math.random(1,10000)
+				if r <= (skillConfig.beSkillArgs[2] or 0) then
+					mul =  skillConfig.beSkillArgs[1] or 1
+				end
+				return mul
+			end
+        end
+	end
+
+	return mul
 end

+ 28 - 3
script/module/combat/CombatCalc.lua

@@ -477,6 +477,19 @@ local function getHurtMul(skillConfig)
     return mul
 end
 
+-- 触发格挡后额外减伤
+local function triggerGeDangExtraDef(defender)
+    local extraDefVal = BeSkill.GetGeDangExtraDef(defender) or 0
+    extraDefVal = extraDefVal / 10000
+    return extraDefVal
+end
+
+-- 被动技能的伤害倍数
+local function getBeSkillHurtMul(attacker)
+    local hurtMul = BeSkill.GetBeSkillHurtMul(attacker) or 10000
+    hurtMul = hurtMul / 10000
+    return hurtMul
+end
 
 function initAttacker(attacker)
     if attacker.isPet or attacker.isElf then
@@ -582,12 +595,18 @@ function calcPhyHurt(attacker, index, targets, skillConfig)
 
     --是否触发格挡
     if isGedang(defender) then
-        hurt = hurt * 0.5
+        -- hurt = hurt * 0.5
+        local extraDefVal = triggerGeDangExtraDef(defender)
+        hurt = hurt * (1- (0.5 + extraDefVal))
     end
 
     local hurtMul = getHurtMul(skillConfig)
     hurt = hurt * hurtMul
 
+    hurtMul = getBeSkillHurtMul(attacker)
+    hurt = hurt * hurtMul
+    hurt = math.ceil(hurt)
+
     hurt = math.max(hurt, 1)
     CombatObj.updateValue(attacker, RoleDefine.HURT_COMBAT_NOW, hurt)
     return hurt, flag
@@ -686,13 +705,19 @@ function calcMagicHurt(attacker, index, targets, skillConfig)
 
     --是否触发格挡
     if isGedang(defender) then
-        hurt = hurt * 0.5
+        -- hurt = hurt * 0.5
+        local extraDefVal = triggerGeDangExtraDef(defender)
+        hurt = hurt * (1- (0.5 + extraDefVal))
     end
 
     local hurtMul = getHurtMul(skillConfig)
     hurt = hurt * hurtMul
 
-    hurt = hurt > 0 and hurt or 1
+    hurtMul = getBeSkillHurtMul(attacker)
+    hurt = hurt * hurtMul
+    hurt = math.ceil(hurt)
+
+    hurt = math.max(hurt, 1)
 
     CombatObj.updateValue(attacker, RoleDefine.HURT_COMBAT_NOW, hurt)
     return hurt, flag

+ 44 - 0
script/module/combat/Skill.lua

@@ -429,6 +429,10 @@ function CMD.hp(obj,skillConfig,skillTargets)
                 if target.side == CombatDefine.DEFEND_SIDE then
 					hp = CombatImpl.commonArgs.hpLimit or hp
 				end
+
+				local restoreMul = BeSkill.GetBeSkillRestoretHPMul(target) or 1
+				hp = hp * restoreMul
+
 				local d, _, extraHandleTb = CombatObj.updateHp(target,hp,nil,true,obj.pos,CombatObj.EXTRA_HP_TYPE)
                 local showHp = hp
                 if hp > 0 and d < 0 then
@@ -1922,4 +1926,44 @@ function CMD.exchangeHP(obj,skillConfig,skillTargets)
 
 		end
 	end
+end
+
+-- 神威灵装被动-真伤附加
+function CMD.trueDamegeAddtional(obj,skillConfig,skillTargets)
+	local args = obj.isPet and obj.args or skillConfig.args
+	local r = math.random(0,10000)
+	if r > args[4] then 
+		return
+	end
+	local calcType = args[1]
+	local rate = args[2]
+	local targets = TargetMode.getTargets(obj, args[3],skillTargets)
+	local hp
+	local limit
+	local ret = {}
+	if args[5] then
+		limit = args[5] * CombatObj.getValue(obj,RoleDefine.ATK_COMBAT_NOW) / 10000
+	end
+	for _,target in ipairs(targets) do
+		hp = calcHp(obj,target,calcType,rate,limit)
+		local offsetInfo = BeSkill.GetTrueDamegeOffset(target)
+		if offsetInfo then
+			local offsetHurt = calcHp(obj,target,offsetInfo[1],offsetInfo[2],limit)
+			hp = math.max(hp - offsetHurt, 0)
+		end
+
+		if hp ~= 0 then
+			local d, _, extraHandleTb = CombatObj.updateHp(target,-hp,nil,true, obj.pos,CombatObj.EXTRA_HP_TYPE)
+			if d ~= 0 then
+				CombatImpl.setExtraHit(target,-hp,CMD2ID["hurt"])
+				CombatObj.onHpCB(target,d, obj.pos)
+				ret[#ret+1] = target
+			end
+
+			if extraHandleTb then
+				ExtraHandle(target, extraHandleTb)
+			end
+		end
+	end
+	return ret
 end

+ 2 - 4
script/module/hero/HeroArtifacts.lua

@@ -391,12 +391,10 @@ local function updateRedDot(human, heroGrid)
     HeroLogic.refreshDot(human, heroGrid.uuid)
 end
 
--- 刷新战力和红点
+-- 刷新战力, 红点, 英雄属性
 local function updatePowerAndRedDot(human, heroGrid, heroID, heroIndex)
     -- 更新战力
-    RoleAttr.cleanHeroAttrCache(human)
-    ObjHuman.doCalc(human)
-    ObjHuman.sendAttr(human, RoleDefine.ZHANDOULI)
+    updatePower(human)
 
     -- 刷新红点
     updateRedDot(human, heroGrid)