public override TimeSpan OnSwing(Mobile attacker, Mobile defender) { // Make sure we've been standing still for one second if (DateTime.Now > (attacker.LastMoveTime + TimeSpan.FromSeconds(Core.AOS ? 0.5 : 1.0)) || (Core.AOS && WeaponAbility.GetCurrentAbility(attacker) is MovingShot) || (attacker is TeiravonMobile && ((TeiravonMobile)attacker).Shapeshifted && ((TeiravonMobile)attacker).IsArcher() && ((TeiravonMobile)attacker).IsUndead())) { bool canSwing = true; if (Core.AOS) { canSwing = (!attacker.Paralyzed && !attacker.Frozen); if (canSwing) { Spell sp = attacker.Spell as Spell; canSwing = (sp == null || !sp.IsCasting || !sp.BlocksMovement); } } if (this is DwarvenBallista) { DwarvenBallista db = (DwarvenBallista)this; canSwing = false; foreach (Item item in attacker.GetItemsInRange(1)) { if (item is AddonComponent) { AddonComponent aoc = (AddonComponent)item; if (aoc.Addon == db.Ballista) { canSwing = true; } } } } if (canSwing && attacker.HarmfulCheck(defender)) { attacker.DisruptiveAction(); attacker.Send(new Swing(0, attacker, defender)); if (OnFired(attacker, defender)) { if (CheckAim(attacker, defender) && !CheckDodge(attacker, defender)) { OnHit(attacker, defender); } else { OnMiss(attacker, defender); } } } return(GetDelay(attacker)); } else { return(TimeSpan.FromSeconds(0.25)); } }
protected override void OnTarget(Mobile from, object targeted) { IPoint3D p = targeted as IPoint3D; Map map = from.Map; if (p == null || map == null || m_Deed.Deleted) { return; } if (m_Deed.IsChildOf(from.Backpack)) { BaseAddon addon = m_Deed.Addon; Server.Spells.SpellHelper.GetSurfaceTop(ref p); ArrayList houses = null; AddonFitResult res = addon.CouldFit(p, map, from, ref houses); if (res == AddonFitResult.Valid) { addon.MoveToWorld(new Point3D(p), map); if (from is TeiravonMobile) { TeiravonMobile player = (TeiravonMobile)from; if (addon is BallistaEastAddon) { BallistaEastAddon m_ballista = (BallistaEastAddon)addon; if (player.Backpack != null) { DwarvenBallista wep = new DwarvenBallista(); wep.Ballista = addon; player.AddToBackpack(wep); m_ballista.Controller = wep; } } if (addon is OrcCombatBridgeAddon) { OrcCombatBridgeAddon bridge = (OrcCombatBridgeAddon)addon; bridge.Z = player.Z; } } } else if (res == AddonFitResult.Blocked) { from.SendLocalizedMessage(500269); // You cannot build that there. } else if (res == AddonFitResult.NotInHouse) { from.SendLocalizedMessage(500274); // You can only place this in a house that you own! } else if (res == AddonFitResult.DoorsNotClosed) { from.SendMessage("You must close all house doors before placing this."); } else if (res == AddonFitResult.DoorTooClose) { from.SendLocalizedMessage(500271); // You cannot build near the door. } else if (res == AddonFitResult.NoWall) { from.SendLocalizedMessage(500268); // This object needs to be mounted on something. } if (res == AddonFitResult.Valid) { m_Deed.Delete(); if (houses != null) { foreach (Server.Multis.BaseHouse h in houses) { h.Addons.Add(addon); } } } else { addon.Delete(); } } else { from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it. } }