public static bool CalcDot(Character attacker, Character defender, ActBuff buff, EDamageType type, float percent, int fixValue, bool ignoreDefense) { XDamage dmg = new XDamage(); dmg.AttackerName = attacker.Name; dmg.DefenderName = defender.Name; dmg.Skill = buff.Name; dmg.Type = (int)type; switch (type) { case EDamageType.TYPE_PHYSICS: dmg.Value = (int)(percent * attacker.CurrAttr.AP + fixValue); break; case EDamageType.TYPE_DARK: dmg.Value = (int)(percent * (attacker.CurrAttr.AP + attacker.CurrAttr.BAP) + fixValue); break; case EDamageType.TYPE_ICE: dmg.Value = (int)(percent * (attacker.CurrAttr.AP + attacker.CurrAttr.IAP) + fixValue); break; case EDamageType.TYPE_LIGHT: dmg.Value = (int)(percent * (attacker.CurrAttr.AP + attacker.CurrAttr.LAP) + fixValue); break; case EDamageType.TYPE_FIRE: dmg.Value = (int)(percent * (attacker.CurrAttr.AP + attacker.CurrAttr.FAP) + fixValue); break; } CalcDamage(attacker, defender, dmg, ignoreDefense); return(true); }
public void Execute() { if (mCurrentSkill != null) { mCurrentSkill.Loop(); } if (mCurrentSkill != null && mCurrentSkill.Status == EActStatus.SUCCESS) { mCurrentSkill.Clear(); mCurrentSkill = null; } Dictionary <int, ActBuff> .Enumerator em = mBuffs.GetEnumerator(); while (em.MoveNext()) { ActBuff buff = em.Current.Value; buff.Loop(); if (buff.Status == EActStatus.SUCCESS) { mDeleteBuffs.Add(buff.ID); } } em.Dispose(); for (int i = 0; i < mDeleteBuffs.Count; i++) { mBuffs.Remove(mDeleteBuffs[i]); } mDeleteBuffs.Clear(); }
public bool AddBuff(int id, Character carryer, Character caster) { ActBuff newBuff = ActBuffSystem.Create(id, carryer, caster); if (newBuff == null) { return(false); } else { if (newBuff.Check()) { ActBuff curBuff = null; mBuffs.TryGetValue(id, out curBuff); if (curBuff == null) { mBuffs[newBuff.ID] = newBuff; } else { switch (curBuff.OverlayType) { case EBuffOverlayType.UnChange: break; case EBuffOverlayType.Overlay: if (curBuff.MaxOverlayNum > 0 && curBuff.CurOverlayNum < curBuff.MaxOverlayNum) { curBuff.Overlay(); } break; case EBuffOverlayType.Refresh: { curBuff.Refresh(); } break; case EBuffOverlayType.OverlayAndRefresh: if (curBuff.MaxOverlayNum > 0 && curBuff.CurOverlayNum < curBuff.MaxOverlayNum) { curBuff.Overlay(); } curBuff.Refresh(); break; default: break; } } return(true); } else { return(false); } } }
private void OnRefreshBuffItems() { Dictionary <int, ActBuff> buffs = CharacterManager.Main.Skill.GetBuffs(); Dictionary <int, ActBuff> .Enumerator em = buffs.GetEnumerator(); int index = 0; while (em.MoveNext()) { if (index > mBuffItems.Count - 1) { break; } ActBuff current = em.Current.Value; ItemBuff tab = mBuffItems[index]; tab.item.SetActive(true); tab.icon.spriteName = current.Icon; switch (current.OverlayType) { case EBuffOverlayType.Overlay: case EBuffOverlayType.OverlayAndRefresh: tab.ovelayNum.text = (current.MaxOverlayNum > 0 && current.CurOverlayNum > 1) ? current.CurOverlayNum.ToString() : string.Empty; break; case EBuffOverlayType.Refresh: case EBuffOverlayType.UnChange: tab.ovelayNum.text = string.Empty; break; } if (current.Duration > 0) { tab.mask.fillAmount = current.LeftTime / current.Duration; } else { tab.mask.fillAmount = 0; } index++; } em.Dispose(); for (int i = index; i < mBuffItems.Count; i++) { ItemBuff tab = mBuffItems[index]; tab.item.SetActive(false); } }
public void DelBuffByType(EBuffType type, int delBuffNum = 0) { int num = 0; List <ActBuff> list = new List <ActBuff>(mBuffs.Values); for (int i = 0; i < list.Count; i++) { ActBuff current = list[i]; if (current.Type == type) { num++; current.Stop(); } if (delBuffNum > 0 && num >= delBuffNum) { break; } } }