示例#1
0
文件: Cow.cs 项目: roidzilla/ACE
        public override void ActOnUse(ObjectGuid playerId)
        {
            Player player = CurrentLandblock.GetObject(playerId) as Player;

            if (player == null)
            {
                return;
            }

            ////if (playerDistanceTo >= 2500)
            ////{
            ////    var sendTooFarMsg = new GameEventDisplayStatusMessage(player.Session, StatusMessageType1.Enum_0037);
            ////    player.Session.Network.EnqueueSend(sendTooFarMsg, sendUseDoneEvent);
            ////    return;
            ////}

            if (!player.IsWithinUseRadiusOf(this))
            {
                player.DoMoveTo(this);
            }
            else
            {
                if (AllowedActivator == null)
                {
                    Activate(playerId);
                }

                var sendUseDoneEvent = new GameEventUseDone(player.Session);
                player.Session.Network.EnqueueSend(sendUseDoneEvent);
            }
        }
示例#2
0
文件: Door.cs 项目: roidzilla/ACE
        public override void ActOnUse(ObjectGuid playerId)
        {
            Player player = CurrentLandblock.GetObject(playerId) as Player;

            if (player == null)
            {
                return;
            }

            ////if (playerDistanceTo >= 2500)
            ////{
            ////    var sendTooFarMsg = new GameEventDisplayStatusMessage(player.Session, StatusMessageType1.Enum_0037);
            ////    player.Session.Network.EnqueueSend(sendTooFarMsg, sendUseDoneEvent);
            ////    return;
            ////}

            if (!player.IsWithinUseRadiusOf(this))
            {
                player.DoMoveTo(this);
            }
            else
            {
                ActionChain checkDoorChain = new ActionChain();

                checkDoorChain.AddAction(this, () =>
                {
                    if (!IsLocked ?? false)
                    {
                        if (!IsOpen ?? false)
                        {
                            Open(playerId);
                        }
                        else
                        {
                            Close(playerId);
                        }

                        // Create Door auto close timer
                        ActionChain autoCloseTimer = new ActionChain();
                        autoCloseTimer.AddDelaySeconds(ResetInterval);
                        autoCloseTimer.AddAction(this, () => Reset());
                        autoCloseTimer.EnqueueChain();
                    }
                    else
                    {
                        CurrentLandblock.EnqueueBroadcastSound(this, Sound.OpenFailDueToLock);
                    }

                    var sendUseDoneEvent = new GameEventUseDone(player.Session);
                    player.Session.Network.EnqueueSend(sendUseDoneEvent);
                });

                checkDoorChain.EnqueueChain();
            }
        }
示例#3
0
文件: Chest.cs 项目: PyrealMote/ACE
        public override void ActOnUse(ObjectGuid playerId)
        {
            Player player = CurrentLandblock.GetObject(playerId) as Player;

            if (player == null)
            {
                return;
            }

            ////if (playerDistanceTo >= 2500)
            ////{
            ////    var sendTooFarMsg = new GameEventDisplayStatusMessage(player.Session, StatusMessageType1.Enum_0037);
            ////    player.Session.Network.EnqueueSend(sendTooFarMsg, sendUseDoneEvent);
            ////    return;
            ////}

            if (!player.IsWithinUseRadiusOf(this) && Viewer != player.Guid.Full)
            {
                player.DoMoveTo(this);
            }
            else
            {
                if (!(IsLocked ?? false))
                {
                    if (!(IsOpen ?? false))
                    {
                        var turnToMotion = new UniversalMotion(MotionStance.Standing, Location, Guid);
                        turnToMotion.MovementTypes = MovementTypes.TurnToObject;

                        ActionChain turnToTimer = new ActionChain();
                        turnToTimer.AddAction(this, () => player.CurrentLandblock.EnqueueBroadcastMotion(player, turnToMotion));;
                        turnToTimer.AddDelaySeconds(1);
                        turnToTimer.AddAction(this, () => Open(player));
                        turnToTimer.EnqueueChain();

                        return;
                    }
                    else
                    {
                        if (Viewer == player.Guid.Full)
                        {
                            Close(player);
                        }
                        // else error msg?
                    }
                }
                else
                {
                    CurrentLandblock.EnqueueBroadcastSound(this, Sound.OpenFailDueToLock);
                }
                player.SendUseDoneEvent();
            }
        }
示例#4
0
        /// <summary>
        /// Fired when Client clicks on the Vendor World Object
        /// </summary>
        /// <param name="playerId"></param>
        public override void ActOnUse(ObjectGuid playerId)
        {
            Player player = CurrentLandblock.GetObject(playerId) as Player;

            if (player == null)
            {
                return;
            }

            if (!player.IsWithinUseRadiusOf(this))
            {
                player.DoMoveTo(this);
            }
            else
            {
                LoadInventory();
                ApproachVendor(player);
            }
        }
示例#5
0
        /// <summary>
        /// This is the OnUse method.   This is just an initial implemention.   I have put in the turn to action at this point.
        /// If we are out of use radius, move to the object.   Once in range, let's turn the creature toward us and get started.
        /// Note - we may need to make an NPC class vs monster as using a monster does not make them turn towrad you as I recall. Og II
        ///  Also, once we are reading in the emotes table by weenie - this will automatically customize the behavior for creatures.
        /// </summary>
        /// <param name="playerId">Identity of the player we are interacting with</param>
        public override void ActOnUse(ObjectGuid playerId)
        {
            Player player = CurrentLandblock.GetObject(playerId) as Player;

            if (player == null)
            {
                return;
            }

            if (!player.IsWithinUseRadiusOf(this))
            {
                player.DoMoveTo(this);
            }
            else
            {
                OnAutonomousMove(player.Location, this.Sequences, MovementTypes.TurnToObject, playerId);

                GameEventUseDone sendUseDoneEvent = new GameEventUseDone(player.Session);
                player.Session.Network.EnqueueSend(sendUseDoneEvent);
            }
        }
示例#6
0
        public override void ActOnUse(ObjectGuid playerId)
        {
            Player player = CurrentLandblock.GetObject(playerId) as Player;

            if (player == null)
            {
                return;
            }

            if (!player.IsWithinUseRadiusOf(this) && Viewer != player.Guid.Full)
            {
                player.DoMoveTo(this);
            }
            else
            {
                if (!(IsOpen ?? false))
                {
                    var turnToMotion = new UniversalMotion(MotionStance.Standing, Location, Guid);
                    turnToMotion.MovementTypes = MovementTypes.TurnToObject;

                    ActionChain turnToTimer = new ActionChain();
                    turnToTimer.AddAction(this, () => player.CurrentLandblock.EnqueueBroadcastMotion(player, turnToMotion));
                    turnToTimer.AddDelaySeconds(1);
                    turnToTimer.AddAction(this, () => Open(player));
                    turnToTimer.EnqueueChain();

                    return;
                }
                else
                {
                    if (Viewer == player.Guid.Full)
                    {
                        Close(player);
                    }
                    // else error msg?
                }

                player.SendUseDoneEvent();
            }
        }
示例#7
0
文件: Portal.cs 项目: roidzilla/ACE
        public override void ActOnUse(ObjectGuid playerId)
        {
            Player player = CurrentLandblock.GetObject(playerId) as Player;

            if (player == null)
            {
                return;
            }

            if (!player.IsWithinUseRadiusOf(this))
            {
                player.DoMoveTo(this);
            }
            else
            {
                // TODO: to be removed once physics collisions are implemented
                HandleActionOnCollide(playerId);
                // always send useDone event
                var sendUseDoneEvent = new GameEventUseDone(player.Session);
                player.Session.Network.EnqueueSend(sendUseDoneEvent);
            }
        }
示例#8
0
文件: Key.cs 项目: roidzilla/ACE
        public void HandleActionUseOnTarget(Player player, WorldObject target)
        {
            ActionChain chain = new ActionChain();

            var keyCode = GetProperty(PropertyString.KeyCode);

            chain.AddAction(player, () =>
            {
                if (player == null)
                {
                    return;
                }

                if (!player.IsWithinUseRadiusOf(target))
                {
                    player.DoMoveTo(target);
                }
                else
                {
                    var sendUseDoneEvent = new GameEventUseDone(player.Session);

                    if (target.WeenieType == WeenieType.Door)
                    {
                        Door door = target as Door;

                        Door.UnlockDoorResults results = door.UnlockDoor(keyCode);

                        switch (results)
                        {
                        case WorldObjects.Door.UnlockDoorResults.UnlockSuccess:
                            Structure--;
                            if (Structure < 1)
                            {
                                player.RemoveItemFromInventory(Guid.Full, player.Guid.Full, 1);
                            }

                            player.Session.Network.EnqueueSend(sendUseDoneEvent);
                            player.Session.Network.EnqueueSend(new GameMessagePublicUpdatePropertyInt(Sequences, Guid, PropertyInt.Structure, (int)Structure));
                            break;

                        case WorldObjects.Door.UnlockDoorResults.DoorOpen:
                            var messageDoorOpen = new GameEventDisplayStatusMessage(player.Session, StatusMessageType1.YouCannotLockWhatIsOpen);     // TODO: Messages are not quiet right. Need to find right one.
                            player.Session.Network.EnqueueSend(sendUseDoneEvent, messageDoorOpen);
                            break;

                        case WorldObjects.Door.UnlockDoorResults.AlreadyUnlocked:
                            var messageAlreadyUnlocked = new GameEventDisplayStatusMessage(player.Session, StatusMessageType1.KeyDoesntFitThisLock);     // TODO: Messages are not quiet right. Need to find right one.
                            player.Session.Network.EnqueueSend(sendUseDoneEvent, messageAlreadyUnlocked);
                            break;

                        default:
                            var messageIncorrectKey = new GameEventDisplayStatusMessage(player.Session, StatusMessageType1.KeyDoesntFitThisLock);
                            player.Session.Network.EnqueueSend(sendUseDoneEvent, messageIncorrectKey);
                            break;
                        }
                    }
                    else if (target.WeenieType == WeenieType.Chest)
                    {
                        var message = new GameMessageSystemChat($"Unlocking {target.Name} has not been implemented, yet!", ChatMessageType.System);
                        player.Session.Network.EnqueueSend(sendUseDoneEvent, message);
                    }
                    else
                    {
                        var message = new GameEventDisplayStatusMessage(player.Session, StatusMessageType1.YouCannotLockOrUnlockThat);
                        player.Session.Network.EnqueueSend(sendUseDoneEvent, message);
                    }
                }
            });

            chain.EnqueueChain();
        }