public async Task ClearBuffByEffect(SkillStates effect) { var rem = _buffs.Where(x => x.State == effect); _buffs = _buffs.Except(rem).ToList(); await DelBuff(rem.First()); }
public virtual void Interrupt() { if (state != SkillStates.casting) { return; } charges--; castTimer = 0; preparingTimer = 0; if (isCanceled && freeCancel) { cooldownTimer = 0; } else { cooldownTimer = cooldown; } isCanceled = false; isExpired = false; state = SkillStates.idling; if (isOccupying && caster.isBusy) { caster.isBusy = false; } onInterrupted.Invoke(delayMoving); }
public async Task DelBuff(SkillStates effect) { var m = new SViewSkillState(0, (ushort)Player.Session.ID, (byte)effect); await Player.Session.SendAsync(m); await Player.SendV2Message(m); }
public override string ToString() { ElementData element = DataManager.Instance.GetElement(Element); string type = Text.FormatKey("MENU_SKILLS_ELEMENT", element.Name.ToLocal()); string category = Text.FormatKey("MENU_SKILLS_CATEGORY", Category.ToLocal()); BasePowerState powerState = SkillStates.GetWithDefault <BasePowerState>(); string power = Text.FormatKey("MENU_SKILLS_POWER", (powerState != null ? powerState.Power.ToString() : "---")); string acc = Text.FormatKey("MENU_SKILLS_HIT_RATE", (HitRate > -1 ? HitRate + "%" : "---")); return(type + ", " + category + "\n" + power + ", " + acc); }
private IEnumerator StartCooldown() { State = SkillStates.ON_COOLDOWN; ResetCoolDown(); while (TimeBeforeAvailability <= _CooldownTime) { TimeBeforeAvailability += 0.25f; yield return(new WaitForSeconds(0.25f)); } OnSkillCooldownCompleteEvent.Invoke(); State = SkillStates.AVAILABLE; }
protected void Activate() { //Debug.Log($"{name} IS ACTIVATED"); if (prepareTime > 0) { state = SkillStates.preparing; preparingTimer = prepareTime; RequestAnimation(animationTagDelay); } else { BeginScenario(); } }
protected virtual void BeginScenario() { state = SkillStates.casting; if (requireStop) { caster.Stop(); } if (isOccupying) { caster.isBusy = true; } castTimer = 0; }
protected virtual void Start() { State = SkillStates.AVAILABLE; _Animator = GetComponent <Animator>(); TimeBeforeAvailability = _CooldownTime; }
public async void SetBuff(SkillStates effect, TimeSpan time, Character source = null) { if (_buffs.Any(x => x.State == effect)) { return; } var buff = new Buff { State = effect, EndAt = DateTimeOffset.Now.Add(time), Source = source }; var @char = Player?.Character ?? null; switch (effect) { case SkillStates.ShadowPhantom: if (@char == null) { break; } buff.AttackAdd = @char.Level / 3 + 45; buff.DefenseAdd = @char.Level / 3 + 50; break; case SkillStates.SoulBarrier: buff.DefenseAddRate = 10 + source.AgilityTotal / 50 + source.EnergyTotal / 200; break; case SkillStates.Defense: buff.DefenseAdd = source.EnergyTotal / 8; break; case SkillStates.Attack: buff.AttackAdd = source.EnergyTotal / 7; break; case SkillStates.SwellLife: buff.LifeAdd = 12 + source.EnergyTotal / 10 + source.VitalityTotal / 100; Character.MaxHealth += buff.LifeAdd; break; case SkillStates.HAttackPower: buff.AttackAdd = 25; break; case SkillStates.HAttackSpeed: break; case SkillStates.HDefensePower: buff.DefenseAdd = 100; break; case SkillStates.HMaxLife: buff.LifeAdd = 500; break; case SkillStates.HMaxMana: buff.ManaAdd = 500; break; case SkillStates.Poison: buff.PoisonDamage = 12 + source.EnergyTotal / 10; break; } _buffs.Add(buff); if (Monster != null) { var m2 = new SViewSkillState(1, Monster.Index, (byte)effect); await Monster.ViewPort.Select(x => x.Session).SendAsync(m2); return; } var m = new SViewSkillState(1, (ushort)Player.Session.ID, (byte)effect); await Player.Session.SendAsync(m); await Player.SendV2Message(m); }
public bool BufActive(SkillStates effect) { return(_buffs.Any(x => x.State == effect)); }
public async void SetBuff(SkillStates effect, TimeSpan time, Character source = null) { if (_buffs.Any(x => x.State == effect)) { return; } var buff = new Buff { State = effect, EndAt = DateTimeOffset.Now.Add(time), }; var @char = Player.Character; switch (effect) { case SkillStates.ShadowPhantom: buff.AttackAdd = @char.Level / 3 + 45; buff.DefenseAdd = @char.Level / 3 + 50; break; case SkillStates.SoulBarrier: buff.DefenseAddRate = 10 + source.AgilityTotal / 50 + source.EnergyTotal / 200; break; case SkillStates.Defense: buff.DefenseAdd = source.EnergyTotal / 8; break; case SkillStates.Attack: buff.AttackAdd = source.EnergyTotal / 7; break; case SkillStates.SwellLife: buff.LifeAdd = 0; break; case SkillStates.HAttackPower: buff.AttackAdd = 25; break; case SkillStates.HAttackSpeed: break; case SkillStates.HDefensePower: buff.DefenseAdd = 100; break; case SkillStates.HMaxLife: buff.LifeAdd = 500; break; case SkillStates.HMaxMana: buff.ManaAdd = 500; break; } _buffs.Add(buff); var m = new SViewSkillState(1, (ushort)Player.Session.ID, (byte)effect); await Player.Session.SendAsync(m); await Player.SendV2Message(m); }