feat: 드로그 집행 개시 패턴 및 낙인 디버프 추가
- 드로그 시그니처 패턴 역할과 집행 개시 패턴 데이터를 추가하고 BT 브랜치에 연결 - 시그니처 차단 성공과 실패 흐름을 BossCombatBehaviorContext에 구현하고 authoring 그래프를 재구성 - 집행자의 낙인 이상상태를 추가하고 받는 피해 배율 증가가 플레이어 대미지 계산에 반영되도록 정리 - 집행 실패 시 광역 피해, 넉백, 다운, 낙인 부여 설정을 드로그 프리팹에 연결 - 성공 경로 검증 중 확인된 보스 Hit 트리거 오류를 방어 로직으로 수정 - Unity 플레이 검증으로 집행 개시 실패와 성공 분기를 모두 확인하고 설계값은 원복
This commit is contained in:
@@ -84,6 +84,11 @@ namespace Colosseum.Abnormalities
|
||||
[Range(0f, 1f)]
|
||||
public float slowMultiplier = 0.5f;
|
||||
|
||||
[Header("피해 배율")]
|
||||
[Tooltip("이상 상태가 적용된 동안 받는 피해 배율 (1 = 기본, 1.1 = 10% 증가)")]
|
||||
[Min(0f)]
|
||||
public float incomingDamageMultiplier = 1f;
|
||||
|
||||
/// <summary>
|
||||
/// 영구 효과인지 확인
|
||||
/// </summary>
|
||||
@@ -98,5 +103,10 @@ namespace Colosseum.Abnormalities
|
||||
/// 제어 효과가 있는지 확인
|
||||
/// </summary>
|
||||
public bool HasControlEffect => controlType != ControlType.None;
|
||||
|
||||
/// <summary>
|
||||
/// 받는 피해 배율 변경 여부
|
||||
/// </summary>
|
||||
public bool HasIncomingDamageModifier => !Mathf.Approximately(incomingDamageMultiplier, 1f);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,6 +32,7 @@ namespace Colosseum.Abnormalities
|
||||
private int silenceCount;
|
||||
private int invincibleCount;
|
||||
private float slowMultiplier = 1f;
|
||||
private float incomingDamageMultiplier = 1f;
|
||||
|
||||
// 클라이언트 판정용 제어 효과 동기화 변수
|
||||
private NetworkVariable<int> syncedStunCount = new NetworkVariable<int>(0);
|
||||
@@ -62,6 +63,11 @@ namespace Colosseum.Abnormalities
|
||||
/// </summary>
|
||||
public float MoveSpeedMultiplier => GetCurrentSlowMultiplier();
|
||||
|
||||
/// <summary>
|
||||
/// 받는 피해 배율 (1.0 = 기본, 1.1 = 10% 증가)
|
||||
/// </summary>
|
||||
public float IncomingDamageMultiplier => incomingDamageMultiplier;
|
||||
|
||||
/// <summary>
|
||||
/// 행동 가능 여부 (기절이 아닐 때)
|
||||
/// </summary>
|
||||
@@ -238,6 +244,7 @@ namespace Colosseum.Abnormalities
|
||||
|
||||
ApplyStatModifiers(newAbnormality);
|
||||
ApplyControlEffect(data);
|
||||
RecalculateIncomingDamageMultiplier();
|
||||
SyncAbnormalityAdd(newAbnormality, source);
|
||||
|
||||
OnAbnormalityAdded?.Invoke(newAbnormality);
|
||||
@@ -282,6 +289,7 @@ namespace Colosseum.Abnormalities
|
||||
{
|
||||
RemoveStatModifiers(abnormality);
|
||||
RemoveControlEffect(abnormality.Data);
|
||||
RecalculateIncomingDamageMultiplier();
|
||||
SyncAbnormalityRemove(abnormality);
|
||||
activeAbnormalities.Remove(abnormality);
|
||||
|
||||
@@ -488,6 +496,20 @@ namespace Colosseum.Abnormalities
|
||||
}
|
||||
}
|
||||
|
||||
private void RecalculateIncomingDamageMultiplier()
|
||||
{
|
||||
incomingDamageMultiplier = 1f;
|
||||
|
||||
for (int i = 0; i < activeAbnormalities.Count; i++)
|
||||
{
|
||||
AbnormalityData data = activeAbnormalities[i].Data;
|
||||
if (data == null || !data.HasIncomingDamageModifier)
|
||||
continue;
|
||||
|
||||
incomingDamageMultiplier *= Mathf.Max(0f, data.incomingDamageMultiplier);
|
||||
}
|
||||
}
|
||||
|
||||
private int GetCurrentStunCount() => IsServer ? stunCount : syncedStunCount.Value;
|
||||
|
||||
private int GetCurrentSilenceCount() => IsServer ? silenceCount : syncedSilenceCount.Value;
|
||||
|
||||
Reference in New Issue
Block a user