更新
This commit is contained in:
@@ -2,8 +2,8 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Continentis.MainGame.Card;
|
||||
using Continentis.MainGame.Equipment;
|
||||
using SLSFramework.General;
|
||||
using SLSFramework.UModAssistance;
|
||||
using SLSUtilities.General;
|
||||
using SLSUtilities.UModAssistance;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Continentis.MainGame.Character
|
||||
@@ -120,16 +120,33 @@ namespace Continentis.MainGame.Character
|
||||
|
||||
if (!dodged)
|
||||
{
|
||||
int remainingDamageAfterBlock = ignoreBlock ? startDamage : target.CheckBlock(startDamage);
|
||||
if (remainingDamageAfterBlock > 0)
|
||||
// 伤害前置拦截(HolyShield 等免疫类 Buff 在此处取消伤害)
|
||||
IncomingDamageModifier modifier = new IncomingDamageModifier(startDamage, context);
|
||||
if (!isSilent && !isHpRemoval)
|
||||
{
|
||||
blocked = startDamage - remainingDamageAfterBlock;
|
||||
int remainingDamageAfterShield = ignoreShield ? remainingDamageAfterBlock : target.CheckShield(remainingDamageAfterBlock);
|
||||
if (remainingDamageAfterShield > 0)
|
||||
target.eventSubmodule.onBeforeReceiveDamage.Invoke(modifier);
|
||||
if (!isReactive)
|
||||
{
|
||||
shielded = remainingDamageAfterBlock - remainingDamageAfterShield;
|
||||
hurt = remainingDamageAfterShield;
|
||||
target.HealthRemoval(remainingDamageAfterShield, context);
|
||||
target.combatBuffSubmodule.buffList.For(buff =>
|
||||
{
|
||||
buff.eventSubmodule?.onBeforeReceiveDamage.Invoke(modifier);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (!modifier.isCancelled)
|
||||
{
|
||||
int remainingDamageAfterBlock = ignoreBlock ? modifier.damage : target.CheckBlock(modifier.damage);
|
||||
if (remainingDamageAfterBlock > 0)
|
||||
{
|
||||
blocked = modifier.damage - remainingDamageAfterBlock;
|
||||
int remainingDamageAfterShield = ignoreShield ? remainingDamageAfterBlock : target.CheckShield(remainingDamageAfterBlock);
|
||||
if (remainingDamageAfterShield > 0)
|
||||
{
|
||||
shielded = remainingDamageAfterBlock - remainingDamageAfterShield;
|
||||
hurt = remainingDamageAfterShield;
|
||||
target.HealthRemoval(remainingDamageAfterShield, context);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -339,11 +356,15 @@ namespace Continentis.MainGame.Character
|
||||
public void Heal(int heal)
|
||||
{
|
||||
if (heal <= 0) return;
|
||||
|
||||
float multiplier = GetRawAttribute(CharacterAttributes.HealingGainMultiplier, 1f);
|
||||
int finalHeal = Mathf.Max(0, Mathf.RoundToInt(heal * multiplier));
|
||||
if (finalHeal <= 0) return;
|
||||
|
||||
ModifyAttribute("Health", heal);
|
||||
ModifyAttribute("Health", finalHeal);
|
||||
ClampAttribute("Health", 0, GetAttribute("MaximumHealth"));
|
||||
|
||||
MainGameManager.Instance.basePrefabs.GenerateHealText(heal, characterView);
|
||||
MainGameManager.Instance.basePrefabs.GenerateHealText(finalHeal, characterView);
|
||||
characterView.hudContainer.UpdateAllHUD();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user