This commit is contained in:
SoulliesOfficial
2026-04-17 12:01:50 -04:00
parent dd2657573a
commit ac98ec3aef
438 changed files with 4505 additions and 428 deletions

View File

@@ -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();
}
}