public BuffInfo(Buff buff, BuffDurationType durationType, BuffSourceType sourceType, int duration = 1) { Buff = buff; DurationType = durationType; SourceType = sourceType; Duration = duration; }
private List <BuffInfo> FindDisplayableBuffs(BuffSourceType sourceType, BuffDurationType durationType, bool isPositive) { var displayableBuffs = BuffInfo.FindAll(info => info.SourceType == sourceType && info.ModifierValue != 0 && info.DurationType == durationType && info.Buff.IsPositive() == isPositive). OrderBy(info => info.Buff.AttributeType).ThenBy(info => info.Buff.RuleType).ToList(); displayableBuffs.RemoveAll(buff => buff.Buff.AttributeType == AttributeType.DamageLow); return(displayableBuffs); }
public void UpdateDurations(BuffDurationType durationType) { foreach (var buffEntry in BuffInfo.FindAll(roundBuff => roundBuff.DurationType == durationType)) { if (--buffEntry.Duration <= 0) { RemoveBuff(buffEntry); } } }
public void DetachBuff(BuffDurationType type) { for (int i = 0; i < BuffDic.Count; i++) { if (BuffDic[i].BuffDurType == type) { BuffDic[i].DetachBuff(); } } }
//해당 타입의 버프가 해당 해제타입인지 체크 public bool CheckBuffType(uint BuffID, BuffDurationType type) { for (int i = 0; i < BuffDic.Count; i++) { if (BuffDic[i] != null) { if (BuffDic[i].buffInfo.Indx == BuffID && BuffDic[i].BuffDurType == type) { return(true); } } } return(false); }
public void OnAttach(BuffController _controller, Unit _Caster, Unit _Target, SkillTables.BuffInfo _buffInfo, float _affectValue, BuffDurationType _Type, float _BuffDuration) { controller = _controller; buffInfo = _buffInfo; //ability = _ability; BuffDurType = _Type; BuffDuration = _BuffDuration; Caster = _Caster; Target = _Target; byte overLapCount = _buffInfo.overLapCount; if (overLapCount == 0) { overLapCount = 1; } //< 중첩 카운트 체크 if (overLapCount <= AccrueCount) { //BuffController.BuffInfoStringShow(_Caster, _Target, buffInfo, "(Max)"); return; } //< 능력치부터 적용 AffectBuff(_affectValue, (type) => { if (!type) { //< 적용부터 실패했다면 바로 버프를 삭제시켜줌 controller.DetachBuff(this, true); BuffController.BuffInfoStringShow(_Caster, _Target, buffInfo, "抵抗"); return; } //< 머리위에 띄워주기위함 BuffController.BuffInfoStringShow(_Caster, _Target, buffInfo, ""); //< 값 누적 affectedValue += _affectValue; //< 데이터 적용 AccrueCount++; affectValue = _affectValue; //< 무적관련 버프일경우에는 이미 버프중에 무적이 걸려있을때에 이전 이펙트를 삭제시켜준다. switch ((BuffType)_buffInfo.buffType) { case BuffType.AllImmune: case BuffType.AttackImmune: case BuffType.SkillImmune: controller.SetImmuneEffect(false); break; } Live = true; //< 버프에따른 이펙트를 붙인다 SetEffect(true); //< 버프 아이콘 이름 대입 if (BuffIcon == "") { UnitStateBase _UnitStateBase = null; if (Caster != null && Caster.FSM.GetState(UnitState.Skill, out _UnitStateBase) && _UnitStateBase is SkillState && (_UnitStateBase as SkillState).actionData != null) { BuffIcon = _LowDataMgr.instance.GetLowDataIcon((_UnitStateBase as SkillState).actionData.Icon); } else { BuffIcon = buffInfo.icon; } } //< 버프 유지시간 대입 LifeTime = _BuffDuration; //< 틱 시간 대입 TickTime = buffInfo.tic; //if (SkillAbility.SkillDebugMode && _Caster.UnitType == UnitType.Unit && SimulationGameInfo.SimulationGameCheck) // Debug.Log("버프 생성 : " + (BuffType)_buffInfo.buffType + " , LifeTime " + LifeTime + " , TickTime" + TickTime, Target.gameObject); }); }
public BuffInfo(BuffDurationType durationType, BuffSourceType sourceType) { DurationType = durationType; SourceType = sourceType; }