public override void AddBuff(Buff b) { if (Buffs.Any(d => d.Infinite && d.Type == b.Type)) return; //cant overwrite infinite buff with regular buff string caster = b.Caster != null ? b.Caster.Name : string.Empty; if (b.Values == null) b.Values = new int[1]; S.AddBuff addBuff = new S.AddBuff { Type = b.Type, Caster = caster, Expire = b.ExpireTime - Envir.Time, Values = b.Values, Infinite = b.Infinite, ObjectID = ObjectID, Visible = b.Visible }; if (b.Visible) Broadcast(addBuff); base.AddBuff(b); RefreshAll(); }
public void UpdateBuff(Buff b) { S.AddBuff addBuff = new S.AddBuff { Type = b.Type, Caster = b.Caster.Name, Expire = b.ExpireTime - Envir.Time, Value = b.Value, Infinite = b.Infinite, ObjectID = ObjectID, Visible = b.Visible }; Enqueue(addBuff); if (b.Visible) Broadcast(addBuff); RefreshStats(); }
public void SpellToggle(Spell spell, bool use) { UserMagic magic; magic = GetMagic(spell); if (magic == null) return; int cost; switch (spell) { case Spell.Thrusting: Info.Thrusting = use; break; case Spell.HalfMoon: Info.HalfMoon = use; break; case Spell.CrossHalfMoon: Info.CrossHalfMoon = use; break; case Spell.DoubleSlash: Info.DoubleSlash = use; break; case Spell.TwinDrakeBlade: if (TwinDrakeBlade) return; magic = GetMagic(spell); if (magic == null) return; cost = magic.Info.BaseCost + magic.Level * magic.Info.LevelCost; if (cost >= MP) return; TwinDrakeBlade = true; ChangeMP(-cost); Enqueue(new S.ObjectMagic { ObjectID = ObjectID, Direction = Direction, Location = CurrentLocation, Spell = spell }); break; case Spell.FlamingSword: if (FlamingSword || Envir.Time < FlamingSwordTime) return; magic = GetMagic(spell); if (magic == null) return; cost = magic.Info.BaseCost + magic.Level * magic.Info.LevelCost; if (cost >= MP) return; FlamingSword = true; FlamingSwordTime = Envir.Time + 10000; Enqueue(new S.SpellToggle { Spell = Spell.FlamingSword, CanUse = true }); ChangeMP(-cost); break; case Spell.CounterAttack: if (CounterAttack || Envir.Time < CounterAttackTime) return; magic = GetMagic(spell); if (magic == null) return; cost = magic.Info.BaseCost + magic.Level * magic.Info.LevelCost; if (cost >= MP) return; CounterAttack = true; CounterAttackTime = Envir.Time + 7000; AddBuff(new Buff { Type = BuffType.CounterAttack, Caster = this, ExpireTime = CounterAttackTime, Values = new int[] { 11 + magic.Level * 3 }, Visible = true }); ChangeMP(-cost); break; case Spell.MentalState: Info.MentalState = (byte)((Info.MentalState + 1) % 3); for (int i = 0; i < Buffs.Count; i++) { if (Buffs[i].Type == BuffType.MentalState) { Buffs[i].Values[0] = Info.MentalState; S.AddBuff addBuff = new S.AddBuff { Type = Buffs[i].Type, Caster = Buffs[i].Caster.Name, Expire = Buffs[i].ExpireTime - Envir.Time, Values = Buffs[i].Values, Infinite = Buffs[i].Infinite, ObjectID = ObjectID, Visible = Buffs[i].Visible }; Enqueue(addBuff); break; } } break; } }
public override void AddBuff(Buff b) { if (Buffs.Any(d => d.Infinite && d.Type == b.Type)) return; //cant overwrite infinite buff with regular buff base.AddBuff(b); S.AddBuff addBuff = new S.AddBuff { Type = b.Type, Caster = b.Caster.Name, Expire = b.ExpireTime - Envir.Time, Value = b.Value, Infinite = b.Infinite, ObjectID = ObjectID, Visible = b.Visible }; Enqueue(addBuff); if (b.Visible) Broadcast(addBuff); RefreshStats(); }