// 지속 효과 적용 방안
 // 버그 발생 확인 필요 : lambda로 캡쳐한 변수가 시간이 지나면 달라질 수 있음
 // 해결 방안 2 : Timer에는 id만 보내고 실제 내용은 CharacterPara에 LinkedList 만들어서 관리하기
 protected void ApplyPersistEffect(CUseEffect.PersistEffect persistEffect)
 {
     // 초기화 값이 들어가는거 방지용
     if (persistEffect.IsValid())
     {
         _buffTimer.Register(persistEffect.id, persistEffect.time, persistEffect.maxStack, persistEffect.increaseStack,
                             (int buffStack) => StartPersistEffect(persistEffect, buffStack),
                             (int buffStack) => EndPersistEffect(persistEffect, buffStack));
     }
 }
Beispiel #2
0
    private static string CreatePersistEffectText(CUseEffect.PersistEffect persist)
    {
        if (!persist.IsValid())
        {
            return("");
        }

        StringBuilder sb = new StringBuilder();

        sb.Append(persist.time + "초 동안 ");

        // 틱 데미지(할)
        if (persist.HasTickHpChange())
        {
            sb.Append(persist.TickPeriod + "초 마다 ")
            .Append(CreateHpChangeText(persist.TickHpChange));
        }

        // 능력치 강화
        foreach (var ability in persist.changeAbilities)
        {
            if (!ability.IsValid())
            {
                continue;
            }

            if (!AbilityNameDict.TryGetValue(ability.ability, out string abilityName))
            {
                abilityName = "??";
            }
            string increasePerStackStr = ability.increasePerStack != 1 ? ability.increasePerStack.ToString() : "";
            sb.Append(abilityName + " " + ability.increaseBase + "+" + increasePerStackStr + "n% 만큼 ");
            sb.AppendLine(ability.isBuff ? "증가" : "감소");
        }

        sb.Append("최대 " + persist.maxStack + "중첩");

        CreateStackAccumulateEffectText(persist.stackAccumulateEffect);

        return(sb.ToString() + "\n");
    }