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