Phase 1: 复合属性修饰器管线与伤害结算系统
This commit is contained in:
@@ -26,7 +26,15 @@ namespace SepCore.Battle
|
||||
float maxDodge = 0.8f;
|
||||
if (GameEntry.Luban != null && GameEntry.Luban.IsReady)
|
||||
{
|
||||
maxDodge = GameEntry.Luban.Global.MaxDodgeRate / 1000f;
|
||||
StatConfig dodgeConfig = GameEntry.Luban.Get<StatConfig>((int)StatType.Dodge);
|
||||
if (dodgeConfig != null && dodgeConfig.HasMax)
|
||||
{
|
||||
maxDodge = dodgeConfig.MaxValue;
|
||||
}
|
||||
else
|
||||
{
|
||||
maxDodge = GameEntry.Luban.Global.MaxDodgeRate / 1000f;
|
||||
}
|
||||
}
|
||||
|
||||
dodgeChance = Mathf.Clamp(dodgeChance, 0f, maxDodge);
|
||||
@@ -55,9 +63,11 @@ namespace SepCore.Battle
|
||||
// 3. 全局百分比增伤放大 (DamagePercent)
|
||||
float damagePercent = context.AttackerPipeline != null
|
||||
? context.AttackerPipeline.GetValue(StatType.DamagePercent)
|
||||
: 0f;
|
||||
float amplifiedDamage = rawDamage * (1f + damagePercent);
|
||||
amplifiedDamage = Mathf.Max(amplifiedDamage, 1f);
|
||||
: 1f;
|
||||
// 允许百分比降至 0,防止负向修饰(如 -100% 增伤/重度虚弱)被错误重置为 1 倍全额伤害
|
||||
damagePercent = Mathf.Max(0f, damagePercent);
|
||||
float amplifiedDamage = rawDamage * damagePercent;
|
||||
amplifiedDamage = Mathf.Max(amplifiedDamage, 0f);
|
||||
|
||||
// 4. 暴击判定 (CritChance & CritMultiplier)
|
||||
float attackerCrit = context.AttackerPipeline != null
|
||||
@@ -65,12 +75,16 @@ namespace SepCore.Battle
|
||||
: 0f;
|
||||
|
||||
float baseCrit = context.BaseCritChance;
|
||||
if (baseCrit <= 0f && GameEntry.Luban != null && GameEntry.Luban.IsReady)
|
||||
float maxCrit = 0.9f;
|
||||
if (GameEntry.Luban != null && GameEntry.Luban.IsReady)
|
||||
{
|
||||
baseCrit = GameEntry.Luban.Global.WeaponBaseCrit;
|
||||
StatConfig critConfig = GameEntry.Luban.Get<StatConfig>((int)StatType.CritChance);
|
||||
if (critConfig != null && critConfig.HasMax)
|
||||
{
|
||||
maxCrit = critConfig.MaxValue;
|
||||
}
|
||||
}
|
||||
|
||||
float totalCritChance = Mathf.Clamp(baseCrit + attackerCrit, 0f, 0.9f);
|
||||
float totalCritChance = Mathf.Clamp(baseCrit + attackerCrit, 0f, maxCrit);
|
||||
bool isCrit = totalCritChance > 0f && Random.value < totalCritChance;
|
||||
|
||||
float critMultiplier = context.CritMultiplier;
|
||||
|
||||
Reference in New Issue
Block a user