Example #1
0
    private static string CreateStackAccumulateEffectText(CUseEffect.StackAccumulateEffect stackAccumulateEffect)
    {
        if (stackAccumulateEffect.threshold == 0)
        {
            return("");
        }

        StringBuilder sb = new StringBuilder();

        sb.Append(stackAccumulateEffect.threshold);
        sb.Append("번 중첩 시 다음 효과 발생");
        sb.Append(CreateUseEffectText(stackAccumulateEffect.effect));

        return(sb.ToString());
    }
    protected void StackAccumalateEffect(int id, CUseEffect.StackAccumulateEffect stackAccumEffect)
    {
        if (stackAccumEffect.threshold == 0)
        {
            return;
        }

        int effectStack = _buffTimer.GetBuffStack(id);

        if (effectStack >= stackAccumEffect.threshold)
        {
            PersistStack persistStack;
            // 이미 효과가 발동됐는지 확인
            if ((persistStack = _PersistStackList.Find(x => x.id == id)) != null &&
                persistStack.operatedStack >= effectStack)
            {
                return;
            }

            // 발동되지 않은 경우 다음 한계치 설정하기
            // 발동했을 때의 스택 계산 : effectStack > operateStack + n * limit인 operateStack + n * limit의 최대치
            // ex) 6에서 발동하는데 처음 발동한 스택이 12인 경우, 그리고 다음 발동 스택이 18인 경우 이전 발동 스택은 12로 계산되며 6은 발동하면 안 됨
            int previousOperatedStack = stackAccumEffect.threshold;
            while (previousOperatedStack + stackAccumEffect.thresholdAdd <= effectStack)
            {
                previousOperatedStack += stackAccumEffect.thresholdAdd;
            }
            if (persistStack == null)
            {
                _PersistStackList.Add(new PersistStack(id, previousOperatedStack));
            }
            else
            {
                persistStack.operatedStack = previousOperatedStack;
            }

            TakeUseEffect(stackAccumEffect.effect);
        }
    }