Exemplo n.º 1
0
 public static void TriggerEvent(ItemEventType type, Item item)
 {
     if (m_itemEvents.ContainsKey(type))
     {
         m_itemEvents[type].Raise(item);
     }
 }
Exemplo n.º 2
0
 public ItemEvent(ItemEventType type, SmallItem item) :
     base(EventType.ItemEvent)
 {
     this.itemEventType = type;
     this.largeItem     = null;
     this.smallItem     = item;
 }
Exemplo n.º 3
0
        private bool DoItemStateChanged(ItemEventType ev, ListViewItem item, int index)
        {
            ItemStateChangedEventArgs e = new ItemStateChangedEventArgs(ev, item, index);

            OnItemStateChanged(e);
            return(e.Proceed);
        }
Exemplo n.º 4
0
        private static bool HandleSwitch(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode)
        {
            if (Event != ItemEventType.Interact)
            {
                return true;
            }
            RoomActor actor = Instance.GetActor(Session.CharacterId);
            if (actor == null)
            {
                return true;
            }

            foreach (Item item in Instance.GetFloorItems())
            {
                if (item.Definition.Behavior != ItemBehavior.WiredTrigger || WiredTypesUtil.TriggerFromInt(item.Definition.BehaviorData) != WiredTriggerTypes.state_changed)
                {
                    continue;
                }

                String[] Selected = item.WiredData.Data1.Split('|');

                if (Selected.Contains(Item.Id.ToString()))
                {
                    Instance.WiredManager.ExecuteActions(item, actor);
                }
            }
            return true;
        }
Exemplo n.º 5
0
        private static bool HandleExchangeRedemption(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData)
        {
            switch (Event)
            {
                case ItemEventType.Interact:

                    int ItemValue = 0;
                    int.TryParse(Item.Flags, out ItemValue);

                    using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                    {
                        if (ItemValue != 0)
                        {
                            Session.CharacterInfo.UpdateCreditsBalance(MySqlClient, ItemValue);
                            Session.SendData(CreditsBalanceComposer.Compose(Session.CharacterInfo.CreditsBalance));
                        }

                        Item.RemovePermanently(MySqlClient);
                    }

                    Instance.TakeItem(Item.Id);
                    Instance.RegenerateRelativeHeightmap();
                    break;
            }

            return true;
        }
Exemplo n.º 6
0
 public static void InvokeItemEventHandler(Session Session, Item Item, RoomInstance Instance, ItemEventType Type, int RequestData = 0, uint Opcode = 0, bool checkrights = true)
 {
     if (mEventHandlers.ContainsKey(Item.Definition.Behavior))
     {
         foreach (ItemEventHandler EventHandler in mEventHandlers[Item.Definition.Behavior])
         {
             if (!EventHandler.Invoke(Session, Item, Instance, Type, RequestData, Opcode))
             {
                 return;
             }
         }
     }
 }
Exemplo n.º 7
0
 public static void InvokeItemEventHandler(Session Session, Item Item, RoomInstance Instance, ItemEventType Type, int RequestData = 0)
 {
     lock (mSyncRoot)
     {
         if (mEventHandlers.ContainsKey(Item.Definition.Behavior))
         {
             foreach (ItemEventHandler EventHandler in mEventHandlers[Item.Definition.Behavior])
             {
                 if (!EventHandler.Invoke(Session, Item, Instance, Type, RequestData))
                 {
                     return;
                 }
             }
         }
     }
 }
Exemplo n.º 8
0
        private void HandleItemListener(IData itemData, String uuid, ItemEventType eventType, IItemListener <E> listener, bool includeValue)
        {
            var item = includeValue
                ? ToObject <E>(itemData)
                : default(E);
            var member    = GetContext().GetClusterService().GetMember(uuid);
            var itemEvent = new ItemEvent <E>(GetName(), eventType, item, member);

            if (eventType == ItemEventType.Added)
            {
                listener.ItemAdded(itemEvent);
            }
            else
            {
                listener.ItemRemoved(itemEvent);
            }
        }
Exemplo n.º 9
0
        private static bool HandleFixedSwitchSwitch(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode)
        {
            switch (Event)
            {
                case ItemEventType.Interact:

                    if (!Instance.CheckUserRights(Session))
                    {
                        break;
                    }

                    List<Vector2> SwitchTiles = Instance.CalculateAffectedTiles(Item, Item.RoomPosition.GetVector2(), Item.RoomRotation);

                    RoomActor Actor = Instance.GetActorByReferenceId(Session.CharacterId);

                    foreach (uint RefId in Item.TemporaryInteractionReferenceIds.Values)
                    {
                        RoomActor InteractingActor = Instance.GetActor(RefId);
                    }

                    int CurrentState = 0;
                    int.TryParse(Item.Flags, out CurrentState);

                    if (CurrentState >= (Item.Definition.BehaviorData - 1))
                    {
                        CurrentState = 0;
                        Item.Flags = CurrentState.ToString();
                        Item.DisplayFlags = CurrentState.ToString();
                    }
                    else
                    {
                        int NewState = CurrentState + 1;
                        Item.Flags = NewState.ToString();
                        Item.DisplayFlags = NewState.ToString();
                    }
                    RoomManager.MarkWriteback(Item, true);

                    Item.BroadcastStateUpdate(Instance);
                    Instance.WiredManager.HandleToggleState(Actor, Item);

                    Instance.RegenerateRelativeHeightmap();
                    break;
            }

            return true;
        }
        protected void HandleItemListener(IData itemData, Guid uuid, ItemEventType eventType,
                                          IItemListener <T> listener, bool includeValue)
        {
            var item = includeValue
                ? ToObject <T>(itemData)
                : default(T);
            var member    = Client.ClusterService.GetMember(uuid);
            var itemEvent = new ItemEvent <T>(Name, eventType, item, member);

            if (eventType == ItemEventType.Added)
            {
                listener.ItemAdded(itemEvent);
            }
            else
            {
                listener.ItemRemoved(itemEvent);
            }
        }
Exemplo n.º 11
0
        private static bool HandleBottle(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData)
        {
            switch (Event)
            {
                case ItemEventType.Placed:
                case ItemEventType.Removing:

                    if (Item.Flags != "0")
                    {
                        Item.Flags = "0";
                        Item.DisplayFlags = "0";

                        RoomManager.MarkWriteback(Item, true);
                    }

                    break;

                case ItemEventType.Interact:

                    if (Item.Flags != "-1")
                    {
                        Item.Flags = "-1";
                        Item.DisplayFlags = "-1";

                        Item.BroadcastStateUpdate(Instance);
                        Item.RequestUpdate(4);
                    }

                    break;

                case ItemEventType.UpdateTick:

                    Item.Flags = RandomGenerator.GetNext(0, 7).ToString();
                    Item.DisplayFlags = Item.Flags;

                    Item.BroadcastStateUpdate(Instance);

                    RoomManager.MarkWriteback(Item, true);

                    break;
            }

            return true;
        }
Exemplo n.º 12
0
        private static bool HandleAlert(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData)
        {
            switch (Event)
            {
                case ItemEventType.InstanceLoaded:
                case ItemEventType.Placed:
                case ItemEventType.Removing:

                    Item.Flags = "0";
                    Item.DisplayFlags = "0";
                    break;

                case ItemEventType.Interact:

                    if (!Instance.CheckUserRights(Session) || Item.Flags == "1")
                    {
                        break;
                    }

                    Item.Flags = "1";
                    Item.DisplayFlags = "1";

                    Item.RequestUpdate(4);
                    Item.BroadcastStateUpdate(Instance);
                    break;

                case ItemEventType.UpdateTick:

                    if (Item.Flags != "1")
                    {
                        break;
                    }

                    Item.Flags = "0";
                    Item.DisplayFlags = "0";

                    Item.BroadcastStateUpdate(Instance);
                    break;
            }

            return true;
        }
Exemplo n.º 13
0
        private static bool HandleWired(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode)
        {
            switch (Event) {
            case ItemEventType.Interact:
                switch (Item.Definition.Behavior) {
                case ItemBehavior.WiredTrigger:
                    Session.SendData (WiredFurniTriggerComposer.Compose (Item, Instance));
                    break;

                case ItemBehavior.WiredEffect:
                    Session.SendData (WiredFurniActionComposer.Compose (Item, Instance));
                    break;
                }
                break;
            case ItemEventType.Placed:
                Item.WiredData = Instance.WiredManager.LoadWired (Item.Id, Item.Definition.BehaviorData);
                break;
            case ItemEventType.Removing:
                using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) {
                    Instance.WiredManager.RemoveWired (Item.Id, MySqlClient);
                }

                Instance.WiredManager.DeRegisterWalkItem(Item.Id);
                break;
            case ItemEventType.UpdateTick:
                if (Item.Definition.Behavior == ItemBehavior.WiredTrigger) {
                    switch (WiredTypesUtil.TriggerFromInt (Item.Definition.BehaviorData)) {
                    case WiredTriggerTypes.periodically:
                        Instance.WiredManager.ExecuteActions (Item, null);
                        Item.RequestUpdate (Item.WiredData.Data2);
                        break;
                    case WiredTriggerTypes.at_given_time:
                        Instance.WiredManager.ExecuteActions (Item, null);
                        break;
                    }
                    return true;
                }
                Item.BroadcastStateUpdate (Instance);
                break;
            }
            return true;
        }
Exemplo n.º 14
0
        private static bool HandleRental(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData)
        {
            switch (Event)
            {
                case ItemEventType.Placed:
                case ItemEventType.InstanceLoaded:

                    if (Item.PendingExpiration)
                    {
                        int DesiredTicks = (int)((double)(Math.Ceiling(Item.ExpireTimeLeft * 2)));

                        if (DesiredTicks <= 0)
                        {
                            goto case ItemEventType.UpdateTick;
                        }

                        Item.RequestUpdate(DesiredTicks);
                        return true;
                    }

                    break;

                case ItemEventType.UpdateTick:

                    if (Item.PendingExpiration)
                    {
                        using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                        {
                            Item.RemovePermanently(MySqlClient);
                            Instance.TakeItem(Item.Id);
                            Instance.RegenerateRelativeHeightmap();
                        }

                        return true;
                    }

                    break;
            }

            return HandleGenericSwitch(Session, Item, Instance, Event, RequestData);
        }
Exemplo n.º 15
0
        private static bool HandleRoller(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode)
        {
            switch (Event)
            {
                case ItemEventType.UpdateTick:

                    List<RoomActor> ActorsToMove = Instance.GetActorsOnPosition(Item.RoomPosition.GetVector2());
                    List<Item> ItemsToMove = new List<Item>();

                    if (ActorsToMove != null)
                    {
                        foreach (RoomActor Actor in ActorsToMove)
                        {
                            if (Actor.IsMoving)
                            {
                                continue;
                            }

                            if (Instance.IsValidStep(Actor.Position.GetVector2(), Item.SquareInFront, true))
                            {
                                Actor.PositionToSet = Item.SquareInFront;
                                Instance.BroadcastMessage(RollerEventComposer.Compose(Actor.Position, new Vector3(
                                    Actor.PositionToSet.X, Actor.PositionToSet.Y,
                                    Instance.GetUserStepHeight(Actor.PositionToSet)), Item.Id, Actor.Id, 0));
                            }
                        }
                    }

                    goto case ItemEventType.InstanceLoaded;

                case ItemEventType.InstanceLoaded:
                case ItemEventType.Placed:

                    Item.RequestUpdate(4);
                    break;
            }

            return true;
        }
Exemplo n.º 16
0
        private static bool HandleFixedGateSwitch(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode)
        {
            switch (Event)
            {
                case ItemEventType.Interact:

                    if (!Instance.CheckUserRights(Session))
                    {
                        return true;
                    }

                    List<Vector2> GateTiles = Instance.CalculateAffectedTiles(Item, Item.RoomPosition.GetVector2(), Item.RoomRotation);

                    foreach (Vector2 Tile in GateTiles)
                    {
                        if (Instance.GetActorsOnPosition(Tile).Count > 0)
                        {
                            return true;
                        }
                    }

                    int CurrentState = 0;
                    int.TryParse(Item.Flags, out CurrentState);

                    Item.Flags = (CurrentState == 0 ? 1 : 0).ToString();
                    Item.DisplayFlags = Item.Flags;

                    RoomManager.MarkWriteback(Item, true);

                    Item.BroadcastStateUpdate(Instance);
                    Instance.RegenerateRelativeHeightmap();
                    break;
            }

            return true;
        }
Exemplo n.º 17
0
        private static bool HandleGenericSwitch(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData)
        {
            switch (Event)
            {
                case ItemEventType.Interact:

                    if (!Instance.CheckUserRights(Session))
                    {
                        return true;
                    }

                    int CurrentState = 0;
                    int.TryParse(Item.Flags, out CurrentState);

                    int NewState = CurrentState + 1;

                    if (CurrentState < 0 || CurrentState >= (Item.Definition.BehaviorData - 1))
                    {
                        NewState = 0;
                    }

                    if (CurrentState != NewState)
                    {
                        Item.Flags = NewState.ToString();
                        Item.DisplayFlags = Item.Flags;

                        RoomManager.MarkWriteback(Item, true);

                        Item.BroadcastStateUpdate(Instance);
                    }

                    break;
            }

            return true;
        }
Exemplo n.º 18
0
        private static bool HandleBottle(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData)
        {
            switch (Event)
            {
            case ItemEventType.Placed:
            case ItemEventType.Removing:

                if (Item.Flags != "0")
                {
                    Item.Flags        = "0";
                    Item.DisplayFlags = "0";

                    RoomManager.MarkWriteback(Item, true);
                }

                break;

            case ItemEventType.Interact:

                if (Item.Flags != "-1")
                {
                    Item.Flags        = "-1";
                    Item.DisplayFlags = "-1";

                    Item.BroadcastStateUpdate(Instance);
                    Item.RequestUpdate(4);
                }

                break;

            case ItemEventType.UpdateTick:

                Item.Flags        = RandomGenerator.GetNext(0, 7).ToString();
                Item.DisplayFlags = Item.Flags;

                Item.BroadcastStateUpdate(Instance);

                RoomManager.MarkWriteback(Item, true);

                break;
            }

            return(true);
        }
Exemplo n.º 19
0
        private static bool HandleDice(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData)
        {
            switch (Event)
            {
            case ItemEventType.Placed:
            case ItemEventType.Removing:

                if (Item.Flags != "0" && Item.Flags != "1")
                {
                    Item.Flags        = "0";
                    Item.DisplayFlags = "0";

                    RoomManager.MarkWriteback(Item, true);
                }

                break;

            case ItemEventType.Interact:

                RoomActor TargetActor = Instance.GetActorByReferenceId(Session.CharacterId);

                if (TargetActor == null)
                {
                    break;
                }

                if (!Distance.TilesTouching(TargetActor.Position.GetVector2(), Item.RoomPosition.GetVector2()) &&
                    !Distance.IsDiagonal(TargetActor.Position.GetVector2(), Item.RoomPosition.GetVector2()))
                {
                    TargetActor.MoveToItemAndInteract(Item, RequestData);
                    break;
                }

                if (RequestData >= 0)
                {
                    if (Item.Flags != "-1")
                    {
                        Item.Flags        = "-1";
                        Item.DisplayFlags = "-1";

                        Item.BroadcastStateUpdate(Instance);
                        Item.RequestUpdate(3);
                    }
                }
                else
                {
                    Item.Flags        = "0";
                    Item.DisplayFlags = "0";
                }

                break;

            case ItemEventType.UpdateTick:

                Item.Flags        = RandomGenerator.GetNext(1, 6).ToString();
                Item.DisplayFlags = Item.Flags;

                Item.BroadcastStateUpdate(Instance);

                RoomManager.MarkWriteback(Item, true);
                break;
            }

            return(true);
        }
Exemplo n.º 20
0
        private static bool HandleExchangeRedemption(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData)
        {
            switch (Event)
            {
            case ItemEventType.Interact:

                int ItemValue = 0;
                int.TryParse(Item.Flags, out ItemValue);

                using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                {
                    if (ItemValue != 0)
                    {
                        Session.CharacterInfo.UpdateCreditsBalance(MySqlClient, ItemValue);
                        Session.SendData(CreditsBalanceComposer.Compose(Session.CharacterInfo.CreditsBalance));
                    }

                    Item.RemovePermanently(MySqlClient);
                }

                Instance.TakeItem(Item.Id);
                Instance.RegenerateRelativeHeightmap();
                break;
            }

            return(true);
        }
Exemplo n.º 21
0
 public static void InvokeItemEventHandler(Session Session, Item Item, RoomInstance Instance, ItemEventType Type, int RequestData = 0)
 {
     lock (mSyncRoot)
     {
         if (mEventHandlers.ContainsKey(Item.Definition.Behavior))
         {
             foreach (ItemEventHandler EventHandler in mEventHandlers[Item.Definition.Behavior])
             {
                 if (!EventHandler.Invoke(Session, Item, Instance, Type, RequestData))
                 {
                     return;
                 }
             }
         }
     }
 }
Exemplo n.º 22
0
        private static bool HandleTeleporter(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode)
        {
            RoomActor Actor = null;

            uint LinkedRef = 0;
            uint.TryParse(Item.Flags, out LinkedRef);

            switch (Event)
            {
                case ItemEventType.InstanceLoaded:

                    Item.DisplayFlags = "0";
                    break;

                case ItemEventType.Moved:

                    if (RequestData != 1)
                    {
                        goto case ItemEventType.Removing;
                    }

                    break;

                case ItemEventType.Removing:
                case ItemEventType.Placed:

                    if (Item.DisplayFlags != "0")
                    {
                        Item.DisplayFlags = "0";

                        if (Event == ItemEventType.Moved)
                        {
                            Item.BroadcastStateUpdate(Instance);
                        }
                    }

                    foreach (uint RefId in Item.TemporaryInteractionReferenceIds.Values)
                    {
                        RoomActor InteractingActor = Instance.GetActor(RefId);

                        if (InteractingActor != null)
                        {
                            InteractingActor.UnblockWalking();
                        }
                    }

                    Item.TemporaryInteractionReferenceIds.Clear();
                    break;

                case ItemEventType.Interact:

                    if (Session != null)
                    {
                        Actor = Instance.GetActorByReferenceId(Session.CharacterId);
                    }

                    if (Actor == null)
                    {
                        break;
                    }

                    bool IsInFront = (Actor.Position.X == Item.SquareInFront.X && Actor.Position.Y == Item.SquareInFront.Y);
                    bool IsInTele = !IsInFront && (Actor.Position.X == Item.RoomPosition.X &&
                        Actor.Position.Y == Item.RoomPosition.Y);

                    if (!IsInFront && !IsInTele)
                    {
                        Actor.MoveToItemAndInteract(Item, RequestData, Opcode);
                        break;
                    }

                    if (Item.DisplayFlags == "0" && Item.TemporaryInteractionReferenceIds.Count == 0)
                    {
                        Item.TemporaryInteractionReferenceIds.Add(1, Actor.Id);
                        Actor.BlockWalking();

                        using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                        {
                            TeleporterLinkFinder.FillCache(MySqlClient, LinkedRef);
                        }

                        if (IsInTele)
                        {
                            Item.RequestUpdate(1);
                        }
                        else
                        {
                            Item.DisplayFlags = "1";
                            Actor.MoveTo(Item.RoomPosition.GetVector2(), true, true, true);

                            Item.BroadcastStateUpdate(Instance);
                            Item.RequestUpdate(3);
                        }
                    }

                    break;

                case ItemEventType.UpdateTick:

                    RoomActor OutgoingUser = null;
                    RoomActor IncomingUser = null;

                    if (Item.TemporaryInteractionReferenceIds.ContainsKey(1))
                    {
                        OutgoingUser = Instance.GetActor(Item.TemporaryInteractionReferenceIds[1]);

                        if (OutgoingUser == null)
                        {
                            Item.TemporaryInteractionReferenceIds.Remove(1);
                        }
                    }

                    if (Item.TemporaryInteractionReferenceIds.ContainsKey(2))
                    {
                        IncomingUser = Instance.GetActor(Item.TemporaryInteractionReferenceIds[2]);

                        if (IncomingUser == null)
                        {
                            Item.TemporaryInteractionReferenceIds.Remove(2);
                        }
                    }

                    string EffectToApply = "0";
                    uint LinkedRoomRefId = TeleporterLinkFinder.GetValue(LinkedRef);
                    RoomInstance LinkedRoomRef = RoomManager.GetInstanceByRoomId(LinkedRoomRefId);

                    if (OutgoingUser != null)
                    {
                        Item TargetItem = null;
                        Session OutgoingSession = SessionManager.GetSessionByCharacterId(OutgoingUser.ReferenceId);

                        if (LinkedRoomRef == null && LinkedRoomRefId > 0)
                        {
                            RoomManager.TryLoadRoomInstance(LinkedRoomRefId);
                            LinkedRoomRef = RoomManager.GetInstanceByRoomId(LinkedRoomRefId);
                        }

                        if (LinkedRoomRef != null)
                        {
                            TargetItem = LinkedRoomRef.GetItem(LinkedRef);
                        }

                        if (OutgoingSession == null || OutgoingUser.Position.X != Item.RoomPosition.X ||
                            OutgoingUser.Position.Y != Item.RoomPosition.Y || (TargetItem != null &&
                            TargetItem.TemporaryInteractionReferenceIds.ContainsKey(2)))
                        {
                            OutgoingUser.UnblockWalking();
                            Item.TemporaryInteractionReferenceIds.Remove(1);
                        }
                        else if (TargetItem != null)
                        {
                            EffectToApply = "2";

                            RoomActor TeleActor = OutgoingUser;

                            if (Instance != LinkedRoomRef)
                            {
                                OutgoingSession.IsTeleporting = true;
                                OutgoingSession.TargetTeleporterId = LinkedRef;

                                RoomHandler.PrepareRoom(OutgoingSession, LinkedRoomRefId, string.Empty, true);

                                TeleActor = null;
                            }

                            if (TeleActor != null)
                            {
                                TeleActor.BlockWalking();

                                TeleActor.Position = new Vector3(TargetItem.RoomPosition.X, TargetItem.RoomPosition.Y, TargetItem.RoomPosition.Z);
                                TeleActor.BodyRotation = TargetItem.RoomRotation;
                                TeleActor.HeadRotation = TeleActor.BodyRotation;
                                TeleActor.UpdateNeeded = true;

                                if (TargetItem.DisplayFlags != "2")
                                {
                                    TargetItem.DisplayFlags = "2";
                                    TargetItem.BroadcastStateUpdate(LinkedRoomRef);
                                    TargetItem.RequestUpdate(3);
                                }

                                TargetItem.TemporaryInteractionReferenceIds.Add(2, TeleActor.Id);
                            }

                            Item.TemporaryInteractionReferenceIds.Remove(1);
                            Item.RequestUpdate(2);
                        }
                        else if (TargetItem == null)
                        {
                            EffectToApply = "1";
                            OutgoingUser.UnblockWalking();

                            if (Item.Definition.SpriteId == 5000)
                            {
                                if (Instance.IsValidStep(OutgoingUser.Position.GetVector2(), Item.SquareBehind, true))
                                {
                                    OutgoingUser.MoveTo(Item.SquareInFront);
                                }
                            }
                            else
                            {
                                if (Instance.IsValidStep(OutgoingUser.Position.GetVector2(), Item.SquareInFront, true))
                                {
                                    OutgoingUser.MoveTo(Item.SquareInFront);
                                }
                            }

                            Item.TemporaryInteractionReferenceIds.Remove(1);
                            Item.RequestUpdate(2);
                        }
                    }

                    if (IncomingUser != null)
                    {
                        if (IncomingUser.Position.X != Item.RoomPosition.X || IncomingUser.Position.Y != IncomingUser.Position.Y)
                        {
                            IncomingUser.UnblockWalking();
                            Item.TemporaryInteractionReferenceIds.Remove(2);
                        }
                        else
                        {
                            EffectToApply = "1";

                            IncomingUser.UnblockWalking();
                            Item.TemporaryInteractionReferenceIds.Remove(2);
                            if (Item.Definition.SpriteId == 5000)
                            {
                                if (Instance.CanInitiateMoveToPosition(Item.SquareBehind))
                                {
                                    IncomingUser.MoveTo(Item.SquareBehind);
                                }
                            }
                            else
                            {
                                if (Instance.CanInitiateMoveToPosition(Item.SquareInFront))
                                {
                                    IncomingUser.MoveTo(Item.SquareInFront);
                                }
                            }

                            Item.RequestUpdate(3);
                        }
                    }

                    if (Item.DisplayFlags != EffectToApply)
                    {
                        Item.DisplayFlags = EffectToApply;
                        Item.BroadcastStateUpdate(Instance);
                    }

                    break;
            }

            return true;
        }
Exemplo n.º 23
0
        private static bool HandleDispenser(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode)
        {
            switch (Event)
            {
                case ItemEventType.Moved:
                    {
                        RoomActor InteractingActor = (Item.TemporaryInteractionReferenceIds.ContainsKey(0) ?
                            Instance.GetActor(Item.TemporaryInteractionReferenceIds[0]) : null);

                        if (InteractingActor != null)
                        {
                            InteractingActor.UnblockWalking();
                        }

                        goto case ItemEventType.InstanceLoaded;
                    }
                case ItemEventType.InstanceLoaded:
                    {
                        if (Item.DisplayFlags != "0")
                        {
                            Item.DisplayFlags = "0";
                            Item.BroadcastStateUpdate(Instance);
                        }

                        return true;
                    }
                case ItemEventType.Interact:
                    {
                        RoomActor InteractingActor = Instance.GetActorByReferenceId(Session.CharacterId);

                        if (InteractingActor == null)
                        {
                            return true;
                        }

                        if (InteractingActor.Position.X != Item.SquareInFront.X || InteractingActor.Position.Y !=
                            Item.SquareInFront.Y)
                        {
                            InteractingActor.MoveToItemAndInteract(Item, RequestData, Opcode);
                            return true;
                        }

                        if (Item.TemporaryInteractionReferenceIds.Count == 0)
                        {
                            Item.TemporaryInteractionReferenceIds.Add(0, InteractingActor.Id);

                            InteractingActor.BlockWalking();
                            InteractingActor.PositionToSet = Item.SquareInFront;

                            int NewRot = Rotation.Calculate(InteractingActor.Position.GetVector2(),
                                Item.RoomPosition.GetVector2());

                            if (InteractingActor.BodyRotation != NewRot)
                            {
                                InteractingActor.BodyRotation = NewRot;
                                InteractingActor.HeadRotation = NewRot;
                                InteractingActor.UpdateNeeded = true;
                            }

                            Item.DisplayFlags = "1";
                            Item.BroadcastStateUpdate(Instance);

                            Item.RequestUpdate(2);
                        }

                        return true;
                    }

                case ItemEventType.UpdateTick:
                    {
                        if (Item.DisplayFlags != "0")
                        {
                            Item.DisplayFlags = "0";
                            Item.BroadcastStateUpdate(Instance);
                        }

                        if (Item.TemporaryInteractionReferenceIds.Count < 1)
                        {
                            return true;
                        }

                        RoomActor InteractingActor = Instance.GetActor(Item.TemporaryInteractionReferenceIds[0]);
                        Item.TemporaryInteractionReferenceIds.Clear();

                        if (InteractingActor == null)
                        {
                            return true;
                        }

                        InteractingActor.CarryItem(DrinkSetManager.GetRandomDrinkForSet(Item.Definition.BehaviorData));

                        int NewRot = Rotation.Calculate(InteractingActor.Position.GetVector2(),
                            Item.RoomPosition.GetVector2());

                        if (InteractingActor.BodyRotation != NewRot)
                        {
                            InteractingActor.BodyRotation = NewRot;
                            InteractingActor.HeadRotation = NewRot;
                            InteractingActor.UpdateNeeded = true;
                        }

                        InteractingActor.UnblockWalking();
                        return true;
                    }
            }

            return true;
        }
Exemplo n.º 24
0
        private static bool HandleATM(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode)
        {
            switch (Event)
            {
                case ItemEventType.Moved:
                    {
                        RoomActor InteractingActor = (Item.TemporaryInteractionReferenceIds.ContainsKey(0) ?
                            Instance.GetActor(Item.TemporaryInteractionReferenceIds[0]) : null);

                        if (InteractingActor != null)
                        {
                            InteractingActor.UnblockWalking();
                        }

                        goto case ItemEventType.InstanceLoaded;
                    }
                case ItemEventType.InstanceLoaded:
                    {
                        if (Item.DisplayFlags != "0")
                        {
                            Item.DisplayFlags = "0";
                            Item.BroadcastStateUpdate(Instance);
                        }

                        return true;
                    }
                case ItemEventType.Interact:
                    {
                        RoomActor InteractingActor = Instance.GetActorByReferenceId(Session.CharacterId);

                        Session InteractingSession = SessionManager.GetSessionByCharacterId(InteractingActor.ReferenceId);
                        if (InteractingActor == null)
                        {
                            return true;
                        }

                        if (InteractingSession.CharacterInfo.Gathering == 1)
                        {
                            InteractingSession.SendData(RoomChatComposer.Compose(InteractingActor.Id, "[ATM] You are already logged in!", 0, ChatType.Whisper));
                            return true;
                        }

                        if (InteractingActor.Position.X != Item.SquareInFront.X || InteractingActor.Position.Y !=
                            Item.SquareInFront.Y)
                        {
                            InteractingActor.MoveToItemAndInteract(Item, RequestData, Opcode);
                            return true;
                        }

                        if (Item.TemporaryInteractionReferenceIds.Count == 0)
                        {
                            Item.TemporaryInteractionReferenceIds.Add(0, InteractingActor.Id);

                            InteractingActor.BlockWalking();
                            InteractingActor.PositionToSet = Item.SquareInFront;

                            int NewRot = Rotation.Calculate(InteractingActor.Position.GetVector2(),
                                Item.RoomPosition.GetVector2());

                            if (InteractingActor.BodyRotation != NewRot)
                            {
                                InteractingActor.BodyRotation = NewRot;
                                InteractingActor.HeadRotation = NewRot;
                                InteractingActor.UpdateNeeded = true;
                            }

                            Item.DisplayFlags = "1";
                            Item.BroadcastStateUpdate(Instance);

                            Item.RequestUpdate(2);
                        }

                        return true;
                    }

                case ItemEventType.UpdateTick:
                    {
                        if (Item.DisplayFlags != "0")
                        {
                            Item.DisplayFlags = "0";
                            Item.BroadcastStateUpdate(Instance);
                        }

                        if (Item.TemporaryInteractionReferenceIds.Count < 1)
                        {
                            return true;
                        }

                        RoomActor InteractingActor = Instance.GetActor(Item.TemporaryInteractionReferenceIds[0]);
                        Session InteractingSession = SessionManager.GetSessionByCharacterId(InteractingActor.ReferenceId);

                        Item.TemporaryInteractionReferenceIds.Clear();

                        if (InteractingActor == null)
                        {
                            return true;
                        }
                        SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient();
                        InteractingSession.CharacterInfo.UpdateGathering(1);

                        InteractingSession.SendData(RoomChatComposer.Compose(InteractingActor.Id, "[ATM] Processing transaction please wait...", 0, ChatType.Whisper));
                        int amount = InteractingSession.CharacterInfo.ATMamount;
                        if (amount > InteractingSession.CharacterInfo.Bank)
                        {
                            InteractingSession.SendData(RoomChatComposer.Compose(InteractingActor.Id, "[ATM] You do not have " + amount + " in your bank account", 0, ChatType.Whisper));
                            InteractingActor.UnblockWalking();
                            InteractingSession.CharacterInfo.UpdateGathering(0);
                            return true;
                        }

                        System.Threading.Thread.Sleep(2000);
                        int NewRot = Rotation.Calculate(InteractingActor.Position.GetVector2(),
                            Item.RoomPosition.GetVector2());

                        if (InteractingActor.BodyRotation != NewRot)
                        {
                            InteractingActor.BodyRotation = NewRot;
                            InteractingActor.HeadRotation = NewRot;
                            InteractingActor.UpdateNeeded = true;
                        }
                        InteractingSession.SendData(RoomChatComposer.Compose(InteractingActor.Id, "[ATM] Transaction succesful!", 0, ChatType.Whisper));

                        Instance.BroadcastMessage(RoomChatComposer.Compose(InteractingActor.Id, "*Withdraws " + amount + "$ from their account*", 0, ChatType.Shout));

                        InteractingActor.UnblockWalking();
                        InteractingSession.CharacterInfo.UpdateGathering(0);

                        InteractingSession.CharacterInfo.UpdateBank(MySqlClient, -amount);
                        int newcoins = InteractingSession.CharacterInfo.CreditsBalance + amount;
                        InteractingSession.SendData(CreditsBalanceComposer.Compose(newcoins));
                        InteractingSession.CharacterInfo.UpdateCreditsBalance(MySqlClient, +amount);
                        InteractingSession.CharacterInfo.UpdateATMamount(20);

                        return true;
                    }
            }

            return true;
        }
Exemplo n.º 25
0
        private static bool HandleOneWayGate(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode)
        {
            switch (Event)
            {
                case ItemEventType.InstanceLoaded:
                case ItemEventType.Moved:
                case ItemEventType.Placed:

                    if (Item.DisplayFlags != "0")
                    {
                        Item.DisplayFlags = "0";
                        Item.BroadcastStateUpdate(Instance);
                    }

                    foreach (uint ActorId in Item.TemporaryInteractionReferenceIds.Values)
                    {
                        RoomActor ActorToUnlock = Instance.GetActor(ActorId);

                        if (ActorToUnlock != null)
                        {
                            ActorToUnlock.UnblockWalking();
                        }
                    }

                    Item.TemporaryInteractionReferenceIds.Clear();
                    break;

                case ItemEventType.Interact:

                    RoomActor Actor = Instance.GetActorByReferenceId(Session.CharacterId);

                    if (Actor == null)
                    {
                        break;
                    }

                    if (Actor.Position.X != Item.SquareInFront.X || Actor.Position.Y != Item.SquareInFront.Y)
                    {
                        Actor.MoveToItemAndInteract(Item, RequestData, Opcode);
                        break;
                    }

                    if (Item.TemporaryInteractionReferenceIds.Count == 0 && Instance.IsValidStep(Item.RoomPosition.GetVector2(),
                        Item.SquareBehind, true) && Item.DisplayFlags == "0")
                    {
                        Actor.BlockWalking();
                        Actor.MoveTo(Item.RoomPosition.GetVector2(), true, true, true);
                        Item.TemporaryInteractionReferenceIds.Add(1, Actor.Id);
                        Item.RequestUpdate(1);
                    }

                    break;

                case ItemEventType.UpdateTick:

                    RoomActor UpdateActor = null;

                    if (Item.TemporaryInteractionReferenceIds.ContainsKey(1))
                    {
                        UpdateActor = Instance.GetActor(Item.TemporaryInteractionReferenceIds[1]);
                    }

                    if (UpdateActor == null || !Instance.IsValidStep(Item.RoomPosition.GetVector2(), Item.SquareBehind, true)
                        || ((UpdateActor.Position.X != Item.RoomPosition.X || UpdateActor.Position.Y !=
                        Item.RoomPosition.Y) && (UpdateActor.Position.X != Item.SquareInFront.X ||
                        UpdateActor.Position.Y != Item.SquareInFront.Y)))
                    {
                        if (Item.DisplayFlags != "0")
                        {
                            Item.DisplayFlags = "0";
                            Item.BroadcastStateUpdate(Instance);
                        }

                        if (Item.TemporaryInteractionReferenceIds.Count > 0)
                        {
                            Item.TemporaryInteractionReferenceIds.Clear();
                        }

                        if (UpdateActor != null)
                        {
                            UpdateActor.UnblockWalking();
                        }

                        break;
                    }

                    Item.DisplayFlags = "1";
                    Item.BroadcastStateUpdate(Instance);

                    UpdateActor.MoveTo(Item.SquareBehind, true, true, true);

                    Item.RequestUpdate(2);
                    break;
            }

            return true;
        }
Exemplo n.º 26
0
        private static bool HandleOneWayGate(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode)
        {
            switch (Event)
            {
            case ItemEventType.InstanceLoaded:
            case ItemEventType.Moved:
            case ItemEventType.Placed:

                if (Item.DisplayFlags != "0")
                {
                    Item.DisplayFlags = "0";
                    Item.BroadcastStateUpdate(Instance);
                }

                foreach (uint ActorId in Item.TemporaryInteractionReferenceIds.Values)
                {
                    RoomActor ActorToUnlock = Instance.GetActor(ActorId);

                    if (ActorToUnlock != null)
                    {
                        ActorToUnlock.UnblockWalking();
                    }
                }

                Item.TemporaryInteractionReferenceIds.Clear();
                break;

            case ItemEventType.Interact:

                RoomActor Actor = Instance.GetActorByReferenceId(Session.CharacterId);

                if (Actor == null)
                {
                    break;
                }

                if (Actor.Position.X != Item.SquareInFront.X || Actor.Position.Y != Item.SquareInFront.Y)
                {
                    Actor.MoveToItemAndInteract(Item, RequestData, Opcode);
                    break;
                }

                if (Item.TemporaryInteractionReferenceIds.Count == 0 && Instance.IsValidStep(Item.RoomPosition.GetVector2(),
                                                                                             Item.SquareBehind, true) && Item.DisplayFlags == "0")
                {
                    Actor.BlockWalking();
                    Actor.MoveTo(Item.RoomPosition.GetVector2(), true, true, true);
                    Item.TemporaryInteractionReferenceIds.Add(1, Actor.Id);
                    Item.RequestUpdate(1);
                }

                break;

            case ItemEventType.UpdateTick:

                RoomActor UpdateActor = null;

                if (Item.TemporaryInteractionReferenceIds.ContainsKey(1))
                {
                    UpdateActor = Instance.GetActor(Item.TemporaryInteractionReferenceIds[1]);
                }

                if (UpdateActor == null || !Instance.IsValidStep(Item.RoomPosition.GetVector2(), Item.SquareBehind, true) ||
                    ((UpdateActor.Position.X != Item.RoomPosition.X || UpdateActor.Position.Y !=
                      Item.RoomPosition.Y) && (UpdateActor.Position.X != Item.SquareInFront.X ||
                                               UpdateActor.Position.Y != Item.SquareInFront.Y)))
                {
                    if (Item.DisplayFlags != "0")
                    {
                        Item.DisplayFlags = "0";
                        Item.BroadcastStateUpdate(Instance);
                    }

                    if (Item.TemporaryInteractionReferenceIds.Count > 0)
                    {
                        Item.TemporaryInteractionReferenceIds.Clear();
                    }

                    if (UpdateActor != null)
                    {
                        UpdateActor.UnblockWalking();
                    }

                    break;
                }

                Item.DisplayFlags = "1";
                Item.BroadcastStateUpdate(Instance);

                UpdateActor.MoveTo(Item.SquareBehind, true, true, true);

                Item.RequestUpdate(2);
                break;
            }

            return(true);
        }
Exemplo n.º 27
0
        private static bool HandleFixedGateSwitch(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode)
        {
            switch (Event)
            {
            case ItemEventType.Interact:

                if (!Instance.CheckUserRights(Session))
                {
                    return(true);
                }

                List <Vector2> GateTiles = Instance.CalculateAffectedTiles(Item, Item.RoomPosition.GetVector2(), Item.RoomRotation);

                foreach (Vector2 Tile in GateTiles)
                {
                    if (Instance.GetActorsOnPosition(Tile).Count > 0)
                    {
                        return(true);
                    }
                }

                int CurrentState = 0;
                int.TryParse(Item.Flags, out CurrentState);

                Item.Flags        = (CurrentState == 0 ? 1 : 0).ToString();
                Item.DisplayFlags = Item.Flags;

                RoomManager.MarkWriteback(Item, true);

                Item.BroadcastStateUpdate(Instance);
                Instance.RegenerateRelativeHeightmap();
                break;
            }

            return(true);
        }
Exemplo n.º 28
0
        private static bool HandleDispenser(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode)
        {
            switch (Event)
            {
                case ItemEventType.Moved:
                    {
                        RoomActor InteractingActor = (Item.TemporaryInteractionReferenceIds.ContainsKey(0) ?
                            Instance.GetActor(Item.TemporaryInteractionReferenceIds[0]) : null);

                        if (InteractingActor != null)
                        {
                            InteractingActor.UnblockWalking();
                        }

                        goto case ItemEventType.InstanceLoaded;
                    }
                case ItemEventType.InstanceLoaded:
                    {
                        if (Item.DisplayFlags != "0")
                        {
                            Item.DisplayFlags = "0";
                            Item.BroadcastStateUpdate(Instance);
                        }

                        return true;
                    }
                case ItemEventType.Interact:
                    {
                        RoomActor InteractingActor = Instance.GetActorByReferenceId(Session.CharacterId);

                        if (InteractingActor == null)
                        {
                            return true;
                        }

                        if (InteractingActor.Position.X != Item.SquareInFront.X || InteractingActor.Position.Y !=
                            Item.SquareInFront.Y)
                        {
                            InteractingActor.MoveToItemAndInteract(Item, RequestData, Opcode);
                            return true;
                        }

                        Session InteractingSession = SessionManager.GetSessionByCharacterId(InteractingActor.ReferenceId);

                        #region Cooldown
                        TimeSpan span = DateTime.Now - Session.CharacterInfo.Cooldown;
                        if (span.Seconds < 5)
                        {
                            InteractingSession.SendData(RoomChatComposer.Compose(InteractingActor.Id, "You're cooling down! [" + span.Seconds + "/5]", 0, ChatType.Whisper));
                            return true;
                        }

                        #endregion

                        if (InteractingSession.CharacterInfo.CreditsBalance < 2)
                        {
                            InteractingSession.SendData(RoomChatComposer.Compose(InteractingActor.Id, "You don't have enough money, vending machines cost $10.", 0, ChatType.Whisper));
                            return true;
                        }

                        if (InteractingSession.CharacterInfo.Energy >= 100)
                        {
                            InteractingSession.SendData(RoomChatComposer.Compose(InteractingActor.Id, "You don't need to eat, you have enough energy.", 0, ChatType.Whisper));
                            return true;
                        }

                        if (Item.TemporaryInteractionReferenceIds.Count == 0)
                        {
                            Item.TemporaryInteractionReferenceIds.Add(0, InteractingActor.Id);

                            InteractingActor.BlockWalking();
                            InteractingActor.PositionToSet = Item.SquareInFront;

                            int NewRot = Rotation.Calculate(InteractingActor.Position.GetVector2(),
                                Item.RoomPosition.GetVector2());

                            if (InteractingActor.BodyRotation != NewRot)
                            {
                                InteractingActor.BodyRotation = NewRot;
                                InteractingActor.HeadRotation = NewRot;
                                InteractingActor.UpdateNeeded = true;
                            }

                            Item.DisplayFlags = "1";
                            Item.BroadcastStateUpdate(Instance);

                            Item.RequestUpdate(2);
                        }

                        return true;
                    }

                case ItemEventType.UpdateTick:
                    {
                        if (Item.DisplayFlags != "0")
                        {
                            Item.DisplayFlags = "0";
                            Item.BroadcastStateUpdate(Instance);
                        }

                        if (Item.TemporaryInteractionReferenceIds.Count < 1)
                        {
                            return true;
                        }

                        RoomActor InteractingActor = Instance.GetActor(Item.TemporaryInteractionReferenceIds[0]);
                        Item.TemporaryInteractionReferenceIds.Clear();

                        if (InteractingActor == null)
                        {
                            return true;
                        }

                        InteractingActor.CarryItem(DrinkSetManager.GetRandomDrinkForSet(Item.Definition.BehaviorData));

                        int NewRot = Rotation.Calculate(InteractingActor.Position.GetVector2(),
                            Item.RoomPosition.GetVector2());

                        if (InteractingActor.BodyRotation != NewRot)
                        {
                            InteractingActor.BodyRotation = NewRot;
                            InteractingActor.HeadRotation = NewRot;
                            InteractingActor.UpdateNeeded = true;
                        }
                        Session InteractingSession = SessionManager.GetSessionByCharacterId(InteractingActor.ReferenceId);

                        InteractingActor.UnblockWalking();
                        Instance.BroadcastMessage(RoomChatComposer.Compose(InteractingActor.Id, "*Grabs a tasty snack from the vending machine! [-$10 100e]*", 0, ChatType.Shout));
                        SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient();
                        int newcoins = InteractingSession.CharacterInfo.CreditsBalance - 10;
                        InteractingSession.SendData(CreditsBalanceComposer.Compose(newcoins));
                        InteractingSession.CharacterInfo.UpdateCreditsBalance(MySqlClient, -10);
                        InteractingSession.CharacterInfo.Energise(MySqlClient);
                        Session.CharacterInfo.Cooldown = DateTime.Now;

                        return true;
                    }
            }

            return true;
        }
Exemplo n.º 29
0
 public static void InvokeItemEventHandler(Session Session, Item Item, RoomInstance Instance, ItemEventType Type, int RequestData = 0, uint Opcode = 0, bool checkrights = true)
 {
     if (mEventHandlers.ContainsKey(Item.Definition.Behavior))
     {
         foreach (ItemEventHandler EventHandler in mEventHandlers[Item.Definition.Behavior])
         {
             if (!EventHandler.Invoke(Session, Item, Instance, Type, RequestData, Opcode))
             {
                 return;
             }
         }
     }
 }
Exemplo n.º 30
0
        private static bool HandleTrashcan(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode)
        {
            switch (Event)
            {
                case ItemEventType.Moved:
                    {
                        RoomActor InteractingActor = (Item.TemporaryInteractionReferenceIds.ContainsKey(0) ?
                            Instance.GetActor(Item.TemporaryInteractionReferenceIds[0]) : null);

                        if (InteractingActor != null)
                        {
                            InteractingActor.UnblockWalking();
                        }

                        goto case ItemEventType.InstanceLoaded;
                    }
                case ItemEventType.InstanceLoaded:
                    {
                        if (Item.DisplayFlags != "0")
                        {
                            Item.DisplayFlags = "0";
                            Item.BroadcastStateUpdate(Instance);
                        }

                        return true;
                    }
                case ItemEventType.Interact:
                    {
                        RoomActor InteractingActor = Instance.GetActorByReferenceId(Session.CharacterId);

                        Session InteractingSession = SessionManager.GetSessionByCharacterId(InteractingActor.ReferenceId);
                        if (InteractingActor == null)
                        {
                            return true;
                        }

                        if (InteractingActor.Position.X != Item.SquareInFront.X || InteractingActor.Position.Y !=
                            Item.SquareInFront.Y)
                        {
                            InteractingActor.MoveToItemAndInteract(Item, RequestData, Opcode);
                            return true;
                        }

                        if (Item.TemporaryInteractionReferenceIds.Count == 0)
                        {
                            Item.TemporaryInteractionReferenceIds.Add(0, InteractingActor.Id);

                            InteractingActor.BlockWalking();
                            InteractingActor.PositionToSet = Item.SquareInFront;

                            int NewRot = Rotation.Calculate(InteractingActor.Position.GetVector2(),
                                Item.RoomPosition.GetVector2());

                            if (InteractingActor.BodyRotation != NewRot)
                            {
                                InteractingActor.BodyRotation = NewRot;
                                InteractingActor.HeadRotation = NewRot;
                                InteractingActor.UpdateNeeded = true;
                            }

                            Item.DisplayFlags = "1";
                            Item.BroadcastStateUpdate(Instance);

                            Item.RequestUpdate(2);
                        }

                        return true;
                    }

                case ItemEventType.UpdateTick:
                    {
                        if (Item.DisplayFlags != "0")
                        {
                            Item.DisplayFlags = "0";
                            Item.BroadcastStateUpdate(Instance);
                        }

                        if (Item.TemporaryInteractionReferenceIds.Count < 1)
                        {
                            return true;
                        }

                        RoomActor InteractingActor = Instance.GetActor(Item.TemporaryInteractionReferenceIds[0]);
                        Session InteractingSession = SessionManager.GetSessionByCharacterId(InteractingActor.ReferenceId);

                        SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient();

                        int NewRot = Rotation.Calculate(InteractingActor.Position.GetVector2(),
                            Item.RoomPosition.GetVector2());

                        if (InteractingActor.BodyRotation != NewRot)
                        {
                            InteractingActor.BodyRotation = NewRot;
                            InteractingActor.HeadRotation = NewRot;
                            InteractingActor.UpdateNeeded = true;

                        }
                        InteractingSession.SendData(RoomChatComposer.Compose(InteractingActor.Id, "[Trashcan MSG] Transaction succesful!", 0, ChatType.Whisper));

                        Instance.BroadcastMessage(RoomChatComposer.Compose(InteractingActor.Id, "*Searches the trashcan and finds*", 0, ChatType.Shout));

                        InteractingActor.UnblockWalking();

                        InteractingSession.CharacterInfo.UpdateBank(MySqlClient, -20);
                        int newcoins = InteractingSession.CharacterInfo.CreditsBalance + 20;
                        InteractingSession.SendData(CreditsBalanceComposer.Compose(newcoins));
                        InteractingSession.CharacterInfo.UpdateCreditsBalance(MySqlClient, +20);

                        return true;
                    }
            }

            return true;
        }
Exemplo n.º 31
0
        private static bool HandleStepSwitch(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData)
        {
            switch (Event)
            {
                case ItemEventType.InstanceLoaded:
                case ItemEventType.Moved:
                case ItemEventType.Placed:

                    Item.RequestUpdate(1);
                    break;

                case ItemEventType.UpdateTick:

                    string Flags = "0";

                    if (Instance.GetActorsOnPosition(Item.RoomPosition.GetVector2()).Count > 0)
                    {
                        Flags = "1";
                    }

                    if (Item.DisplayFlags != Flags)
                    {
                        Item.DisplayFlags = Flags;
                        Item.BroadcastStateUpdate(Instance);
                    }

                    Item.RequestUpdate(1);
                    break;
            }

            return true;
        }
Exemplo n.º 32
0
        private static bool HandleJukebox(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData)
        {
            switch (Event)
            {
            case ItemEventType.Placed:
            case ItemEventType.InstanceLoaded:

                Instance.MusicController.Reset();
                Instance.MusicController.LinkRoomOutputItem(Item);

                List <Item> Disks = new List <Item>();

                using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                {
                    Disks = LoadPlaylist(MySqlClient, Item.Id);
                }

                foreach (Item Disk in Disks)
                {
                    Instance.MusicController.AddDisk(Disk);
                }

                if (Item.DisplayFlags == "1")
                {
                    if (Instance.MusicController.PlaylistSize > 0)
                    {
                        Instance.MusicController.Start();
                    }
                    else
                    {
                        Item.DisplayFlags = "0";
                        Item.BroadcastStateUpdate(Instance);
                    }
                }

                break;

            case ItemEventType.Removing:

                if (Instance.MusicController.IsPlaying)
                {
                    Instance.MusicController.Stop();
                    Instance.MusicController.BroadcastCurrentSongData(Instance);
                }

                Instance.MusicController.Reset();
                break;

            case ItemEventType.Interact:

                if (!Instance.CheckUserRights(Session, true))
                {
                    return(true);
                }

                switch (RequestData)
                {
                case -1:         // Open interface

                    break;

                default:         // it loves sending random numbers. as you do.

                    if (Item.DisplayFlags == "1")
                    {
                        Item.DisplayFlags = "0";
                        Instance.MusicController.Stop();
                    }
                    else
                    {
                        if (Instance.MusicController.PlaylistSize < 1)
                        {
                            break;
                        }

                        Item.DisplayFlags = "1";
                        Instance.MusicController.Start();
                    }

                    Item.BroadcastStateUpdate(Instance);
                    RoomManager.MarkWriteback(Item, true);

                    Instance.MusicController.BroadcastCurrentSongData(Instance);
                    break;
                }

                break;
            }

            return(true);
        }
Exemplo n.º 33
0
        private static bool HandleLoveShuffler(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData)
        {
            switch (Event)
            {
                case ItemEventType.Placed:
                case ItemEventType.Removing:

                    Item.Flags = "-1";
                    Item.DisplayFlags = "-1";
                    break;

                case ItemEventType.Interact:

                    if (!Instance.CheckUserRights(Session))
                    {
                        break;
                    }

                    if (Item.Flags != "0")
                    {
                        Item.Flags = "0";
                        Item.DisplayFlags = "0";

                        Item.RequestUpdate(10);
                        Item.BroadcastStateUpdate(Instance);
                    }

                    break;

                case ItemEventType.UpdateTick:

                    if (Item.Flags == "0")
                    {
                        Item.Flags = RandomGenerator.GetNext(1, 4).ToString();
                        Item.DisplayFlags = Item.Flags;

                        Item.BroadcastStateUpdate(Instance);
                    }

                    RoomManager.MarkWriteback(Item, true);

                    break;
            }

            return true;
        }
Exemplo n.º 34
0
        private static bool HandleRoller(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode)
        {
            switch (Event)
            {
                case ItemEventType.UpdateTick:

                    List<RoomActor> ActorsToMove = Instance.GetActorsOnPosition(Item.RoomPosition.GetVector2());
                    List<Item> ItemsToMove = new List<Item>();
                    ItemsToMove.AddRange(Instance.GetItemsOnPosition(Item.RoomPosition.GetVector2()));

                    if (ActorsToMove != null)
                    {
                        foreach (RoomActor Actor in ActorsToMove)
                        {
                            if (Actor.IsMoving)
                            {
                                continue;
                            }

                            if (Instance.IsValidStep(Actor.Position.GetVector2(), Item.SquareInFront, true))
                            {
                                Actor.PositionToSet = Item.SquareInFront;
                                Instance.BroadcastMessage(RollerEventComposer.Compose(Actor.Position, new Vector3(
                                    Actor.PositionToSet.X, Actor.PositionToSet.Y,
                                    Instance.GetUserStepHeight(Actor.PositionToSet)), Item.Id, Actor.Id, 0));
                            }
                        }
                    }
                    if (ItemsToMove.Count != 0)
                    {
                        foreach (Item item in ItemsToMove)
                        {
                            if (item == Item)
                            {
                                continue;
                            }

                            if (Item.RoomPosition.X == item.RoomPosition.X && Item.RoomPosition.Y == item.RoomPosition.Y)
                            {
                                Vector2 NewPosition = new Vector2(Item.SquareInFront.X, Item.SquareInFront.Y);
                                int NewRotation = item.RoomRotation;
                                Vector3 FinalizedPosition = Instance.SetFloorItem(Session, item, NewPosition, NewRotation);
                                Vector3 oldpos = item.RoomPosition;

                                if (FinalizedPosition != null)
                                {
                                    item.MoveToRoom(null, Instance.RoomId, FinalizedPosition, NewRotation, string.Empty);
                                    RoomManager.MarkWriteback(item, false);

                                    Instance.RegenerateRelativeHeightmap();
                                    Instance.BroadcastMessage(RoomItemUpdatedComposer.Compose(item));

                                    ItemEventDispatcher.InvokeItemEventHandler(Session, item, Instance, ItemEventType.Moved, 0);
                                    Instance.BroadcastMessage(RollerEventComposer.Compose(oldpos, FinalizedPosition, Item.Id, 0, item.Id));
                                }
                            }
                        }
                    }

                    goto case ItemEventType.InstanceLoaded;

                case ItemEventType.InstanceLoaded:
                case ItemEventType.Placed:

                    Item.RequestUpdate(4);
                    break;
                    }

            return true;
        }
Exemplo n.º 35
0
 public ItemEvent(string name, ItemEventType itemEventType, E item, IMember member) : base(name)
 {
     this.item   = item;
     eventType   = itemEventType;
     this.member = member;
 }
Exemplo n.º 36
0
 public ItemEvent(string name, ItemEventType itemEventType, TE item, IMember member) : base(name)
 {
     _item      = item;
     _eventType = itemEventType;
     _member    = member;
 }
Exemplo n.º 37
0
        private static bool HandleRoller(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData)
        {
            switch (Event)
            {
            case ItemEventType.UpdateTick:

                List <RoomActor> ActorsToMove = Instance.GetActorsOnPosition(Item.RoomPosition.GetVector2());
                List <Item>      ItemsToMove  = new List <Item>();

                if (ActorsToMove != null)
                {
                    foreach (RoomActor Actor in ActorsToMove)
                    {
                        if (Actor.IsMoving)
                        {
                            continue;
                        }

                        if (Instance.IsValidStep(Actor.Position.GetVector2(), Item.SquareInFront, true))
                        {
                            Actor.PositionToSet = Item.SquareInFront;
                            Instance.BroadcastMessage(RollerEventComposer.Compose(Actor.Position, new Vector3(
                                                                                      Actor.PositionToSet.X, Actor.PositionToSet.Y,
                                                                                      Instance.GetUserStepHeight(Actor.PositionToSet)), Item.Id, Actor.Id, 0));
                        }
                    }
                }

                goto case ItemEventType.InstanceLoaded;

            case ItemEventType.InstanceLoaded:
            case ItemEventType.Placed:

                Item.RequestUpdate(4);
                break;
            }

            return(true);
        }
Exemplo n.º 38
0
        private static bool HandleDispenser(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode)
        {
            switch (Event)
            {
            case ItemEventType.Moved:
            {
                RoomActor InteractingActor = (Item.TemporaryInteractionReferenceIds.ContainsKey(0) ?
                                              Instance.GetActor(Item.TemporaryInteractionReferenceIds[0]) : null);

                if (InteractingActor != null)
                {
                    InteractingActor.UnblockWalking();
                }

                goto case ItemEventType.InstanceLoaded;
            }

            case ItemEventType.InstanceLoaded:
            {
                if (Item.DisplayFlags != "0")
                {
                    Item.DisplayFlags = "0";
                    Item.BroadcastStateUpdate(Instance);
                }

                return(true);
            }

            case ItemEventType.Interact:
            {
                RoomActor InteractingActor = Instance.GetActorByReferenceId(Session.CharacterId);

                if (InteractingActor == null)
                {
                    return(true);
                }

                if (InteractingActor.Position.X != Item.SquareInFront.X || InteractingActor.Position.Y !=
                    Item.SquareInFront.Y)
                {
                    InteractingActor.MoveToItemAndInteract(Item, RequestData, Opcode);
                    return(true);
                }

                if (Item.TemporaryInteractionReferenceIds.Count == 0)
                {
                    Item.TemporaryInteractionReferenceIds.Add(0, InteractingActor.Id);

                    InteractingActor.BlockWalking();
                    InteractingActor.PositionToSet = Item.SquareInFront;

                    int NewRot = Rotation.Calculate(InteractingActor.Position.GetVector2(),
                                                    Item.RoomPosition.GetVector2());

                    if (InteractingActor.BodyRotation != NewRot)
                    {
                        InteractingActor.BodyRotation = NewRot;
                        InteractingActor.HeadRotation = NewRot;
                        InteractingActor.UpdateNeeded = true;
                    }

                    Item.DisplayFlags = "1";
                    Item.BroadcastStateUpdate(Instance);

                    Item.RequestUpdate(2);
                }

                return(true);
            }

            case ItemEventType.UpdateTick:
            {
                if (Item.DisplayFlags != "0")
                {
                    Item.DisplayFlags = "0";
                    Item.BroadcastStateUpdate(Instance);
                }

                if (Item.TemporaryInteractionReferenceIds.Count < 1)
                {
                    return(true);
                }

                RoomActor InteractingActor = Instance.GetActor(Item.TemporaryInteractionReferenceIds[0]);
                Item.TemporaryInteractionReferenceIds.Clear();

                if (InteractingActor == null)
                {
                    return(true);
                }

                InteractingActor.CarryItem(DrinkSetManager.GetRandomDrinkForSet(Item.Definition.BehaviorData));

                int NewRot = Rotation.Calculate(InteractingActor.Position.GetVector2(),
                                                Item.RoomPosition.GetVector2());

                if (InteractingActor.BodyRotation != NewRot)
                {
                    InteractingActor.BodyRotation = NewRot;
                    InteractingActor.HeadRotation = NewRot;
                    InteractingActor.UpdateNeeded = true;
                }

                InteractingActor.UnblockWalking();
                return(true);
            }
            }

            return(true);
        }
Exemplo n.º 39
0
        private static bool HandleAlert(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode)
        {
            switch (Event)
            {
            case ItemEventType.InstanceLoaded:
            case ItemEventType.Placed:
            case ItemEventType.Removing:

                Item.Flags        = "0";
                Item.DisplayFlags = "0";
                break;

            case ItemEventType.Interact:

                if (!Instance.CheckUserRights(Session) || Item.Flags == "1")
                {
                    break;
                }

                Item.Flags        = "1";
                Item.DisplayFlags = "1";

                Item.RequestUpdate(4);
                Item.BroadcastStateUpdate(Instance);
                break;

            case ItemEventType.UpdateTick:

                if (Item.Flags != "1")
                {
                    break;
                }

                Item.Flags        = "0";
                Item.DisplayFlags = "0";

                Item.BroadcastStateUpdate(Instance);
                break;
            }

            return(true);
        }
Exemplo n.º 40
0
        private static bool HandleFireworks(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode)
        {
            int CurrentCharges = 0;

            int.TryParse(Item.Flags, out CurrentCharges);

            switch (Event)
            {
            case ItemEventType.InstanceLoaded:
            case ItemEventType.Placed:
            case ItemEventType.Moved:
            case ItemEventType.UpdateTick:

                string DesiredDisplayFlags = "0";

                if (CurrentCharges > 0)
                {
                    DesiredDisplayFlags = "1";
                }

                if (Item.DisplayFlags != DesiredDisplayFlags)
                {
                    Item.DisplayFlags = DesiredDisplayFlags;
                    Item.BroadcastStateUpdate(Instance);
                }

                break;

            case ItemEventType.Interact:

                RoomActor Actor = Instance.GetActorByReferenceId(Session.CharacterId);

                if (Actor == null)
                {
                    return(true);
                }

                if (Distance.Calculate(Actor.Position.GetVector2(), Item.RoomPosition.GetVector2()) > 1)
                {
                    Actor.MoveToItemAndInteract(Item, RequestData, Opcode, Item.SquareBehind);
                    return(true);
                }

                switch (RequestData)
                {
                // Purchase charges
                case 2:

                    if (Session.CharacterInfo.CreditsBalance < CHARGE_COSTS_CREDITS)
                    {
                        return(true);
                    }

                    if (Session.CharacterInfo.ActivityPointsBalance < CHARGE_COSTS_PIXELS)
                    {
                        return(true);
                    }

                    bool Update = (CurrentCharges <= 0);
                    CurrentCharges += CHARGE_AMOUNT;

                    Item.Flags = CurrentCharges.ToString();

                    using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                    {
                        if (CHARGE_COSTS_CREDITS > 0)
                        {
                            Session.CharacterInfo.UpdateCreditsBalance(MySqlClient, -CHARGE_COSTS_CREDITS);
                            Session.SendData(CreditsBalanceComposer.Compose(Session.CharacterInfo.CreditsBalance));
                        }

                        if (CHARGE_COSTS_PIXELS > 0)
                        {
                            Session.CharacterInfo.UpdateActivityPointsBalance(MySqlClient, -CHARGE_COSTS_PIXELS);
                            Session.SendData(ActivityPointsBalanceComposer.Compose(Session.CharacterInfo.ActivityPointsBalance,
                                                                                   -CHARGE_COSTS_PIXELS));
                        }

                        Item.SynchronizeDatabase(MySqlClient, true);
                    }

                    Session.SendData(FireworksChargeInfoComposer.Compose(Item.Id, CurrentCharges, CHARGE_COSTS_CREDITS,
                                                                         CHARGE_COSTS_PIXELS, CHARGE_AMOUNT));

                    if (Update)
                    {
                        Item.DisplayFlags = "1";
                        Item.BroadcastStateUpdate(Instance);
                    }

                    break;

                case 1:

                    Session.SendData(FireworksChargeInfoComposer.Compose(Item.Id, CurrentCharges, CHARGE_COSTS_CREDITS,
                                                                         CHARGE_COSTS_PIXELS, CHARGE_AMOUNT));
                    break;

                default:
                case 0:

                    if (Item.DisplayFlags == "2")
                    {
                        return(true);
                    }

                    if (CurrentCharges > 0)
                    {
                        Item.DisplayFlags = "2";
                        Item.BroadcastStateUpdate(Instance);

                        Item.Flags = (--CurrentCharges).ToString();
                        RoomManager.MarkWriteback(Item, true);

                        Item.RequestUpdate(Item.Definition.BehaviorData);
                    }
                    else
                    {
                        goto case 1;
                    }

                    break;
                }

                break;
            }

            return(true);
        }
Exemplo n.º 41
0
        private static bool HandleScoreboard(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode)
        {
            switch (Event)
            {
            case ItemEventType.Interact:

                if (!Instance.CheckUserRights(Session))
                {
                    break;
                }

                RoomActor Actor = Instance.GetActorByReferenceId(Session.CharacterId);

                if (Actor == null)
                {
                    break;
                }

                if (!Distance.TilesTouching(Actor.Position.GetVector2(), Item.RoomPosition.GetVector2()))
                {
                    Actor.MoveToItemAndInteract(Item, RequestData, Opcode);
                    break;
                }

                int Val = 0;
                int.TryParse(Item.DisplayFlags, out Val);

                if (RequestData == 1)
                {
                    Val--;

                    if (Val < 0)
                    {
                        Val = 99;
                    }
                }
                else if (RequestData == 2)
                {
                    Val++;

                    if (Val > 99)
                    {
                        Val = 0;
                    }
                }
                else
                {
                    Val = (Val == -1 ? 0 : -1);
                }

                Item.DisplayFlags = Val.ToString();
                Item.BroadcastStateUpdate(Instance);
                break;
            }

            return(true);
        }
Exemplo n.º 42
0
        private static bool HandleRoller(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode)
        {
            switch (Event)
            {
            case ItemEventType.UpdateTick:

                List <RoomActor> ActorsToMove = Instance.GetActorsOnPosition(Item.RoomPosition.GetVector2());
                List <Item>      ItemsToMove  = new List <Item>();
                ItemsToMove.AddRange(Instance.GetItemsOnPosition(Item.RoomPosition.GetVector2()));

                if (ActorsToMove != null)
                {
                    foreach (RoomActor Actor in ActorsToMove)
                    {
                        if (Actor.IsMoving)
                        {
                            continue;
                        }

                        if (Instance.IsValidStep(Actor.Position.GetVector2(), Item.SquareInFront, true))
                        {
                            Actor.PositionToSet = Item.SquareInFront;
                            Instance.BroadcastMessage(RollerEventComposer.Compose(Actor.Position, new Vector3(
                                                                                      Actor.PositionToSet.X, Actor.PositionToSet.Y,
                                                                                      Instance.GetUserStepHeight(Actor.PositionToSet)), Item.Id, Actor.Id, 0));
                        }
                    }
                }
                if (ItemsToMove.Count != 0)
                {
                    foreach (Item item in ItemsToMove)
                    {
                        if (item == Item)
                        {
                            continue;
                        }

                        if (Item.RoomPosition.X == item.RoomPosition.X && Item.RoomPosition.Y == item.RoomPosition.Y)
                        {
                            Vector2 NewPosition       = new Vector2(Item.SquareInFront.X, Item.SquareInFront.Y);
                            int     NewRotation       = item.RoomRotation;
                            Vector3 FinalizedPosition = Instance.SetFloorItem(Session, item, NewPosition, NewRotation);
                            Vector3 oldpos            = item.RoomPosition;

                            if (FinalizedPosition != null)
                            {
                                item.MoveToRoom(null, Instance.RoomId, FinalizedPosition, NewRotation, string.Empty);
                                RoomManager.MarkWriteback(item, false);

                                Instance.RegenerateRelativeHeightmap();
                                Instance.BroadcastMessage(RoomItemUpdatedComposer.Compose(item));

                                ItemEventDispatcher.InvokeItemEventHandler(Session, item, Instance, ItemEventType.Moved, 0);
                                Instance.BroadcastMessage(RollerEventComposer.Compose(oldpos, FinalizedPosition, Item.Id, 0, item.Id));
                            }
                        }
                    }
                }


                goto case ItemEventType.InstanceLoaded;

            case ItemEventType.InstanceLoaded:
            case ItemEventType.Placed:

                Item.RequestUpdate(4);
                break;
            }

            return(true);
        }
Exemplo n.º 43
0
        private static bool HandleSwitch(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode)
        {
            if (Event != ItemEventType.Interact)
            {
                return(true);
            }
            RoomActor actor = Instance.GetActor(Session.CharacterId);

            if (actor == null)
            {
                return(true);
            }

            foreach (Item item in Instance.GetFloorItems())
            {
                if (item.Definition.Behavior != ItemBehavior.WiredTrigger || WiredTypesUtil.TriggerFromInt(item.Definition.BehaviorData) != WiredTriggerTypes.state_changed)
                {
                    continue;
                }

                String[] Selected = item.WiredData.Data1.Split('|');

                if (Selected.Contains(Item.Id.ToString()))
                {
                    Instance.WiredManager.ExecuteActions(item, actor);
                }
            }
            return(true);
        }
Exemplo n.º 44
0
        private static bool HandleHabboWheel(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData)
        {
            switch (Event)
            {
            case ItemEventType.Placed:

                Item.Flags        = "-1";
                Item.DisplayFlags = "-1";

                Item.RequestUpdate(10);
                break;

            case ItemEventType.Removing:

                Item.Flags        = "0";
                Item.DisplayFlags = "0";
                break;

            case ItemEventType.Interact:

                if (!Instance.CheckUserRights(Session))
                {
                    break;
                }

                if (Item.Flags != "-1")
                {
                    Item.Flags        = "-1";
                    Item.DisplayFlags = "-1";

                    Item.RequestUpdate(10);
                    Item.BroadcastStateUpdate(Instance);
                }

                break;

            case ItemEventType.UpdateTick:

                Item.Flags        = RandomGenerator.GetNext(1, 10).ToString();
                Item.DisplayFlags = Item.Flags;

                Item.BroadcastStateUpdate(Instance);

                RoomManager.MarkWriteback(Item, true);

                break;
            }

            return(true);
        }
Exemplo n.º 45
0
        private static bool HandleJukebox(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode)
        {
            switch (Event)
            {
                case ItemEventType.Placed:
                case ItemEventType.InstanceLoaded:

                    Instance.MusicController.Reset();
                    Instance.MusicController.LinkRoomOutputItem(Item);

                    List<Item> Disks = new List<Item>();

                    using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                    {
                        Disks = LoadPlaylist(MySqlClient, Item.Id);
                    }

                    foreach (Item Disk in Disks)
                    {
                        Instance.MusicController.AddDisk(Disk);
                    }

                    if (Item.DisplayFlags == "1")
                    {
                        if (Instance.MusicController.PlaylistSize > 0)
                        {
                            Instance.MusicController.Start();
                        }
                        else
                        {
                            Item.DisplayFlags = "0";
                            Item.BroadcastStateUpdate(Instance);
                        }
                    }

                    break;

                case ItemEventType.Removing:

                    if (Instance.MusicController.IsPlaying)
                    {
                        Instance.MusicController.Stop();
                        Instance.MusicController.BroadcastCurrentSongData(Instance);
                    }

                    Instance.MusicController.Reset();
                    break;

                case ItemEventType.Interact:

                    if (!Instance.CheckUserRights(Session, true))
                    {
                        return true;
                    }

                    switch (RequestData)
                    {
                        case -1: // Open interface

                            break;

                        default: // it loves sending random numbers. as you do.

                            if (Item.DisplayFlags == "1")
                            {
                                Item.DisplayFlags = "0";
                                Instance.MusicController.Stop();
                            }
                            else
                            {
                                if (Instance.MusicController.PlaylistSize < 1)
                                {
                                    break;
                                }

                                Item.DisplayFlags = "1";
                                Instance.MusicController.Start();
                            }

                            Item.BroadcastStateUpdate(Instance);
                            RoomManager.MarkWriteback(Item, true);

                            Instance.MusicController.BroadcastCurrentSongData(Instance);
                            break;
                    }

                    break;
            }

            return true;
        }
Exemplo n.º 46
0
        private static bool HandleScoreboard(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData)
        {
            switch (Event)
            {
                case ItemEventType.Interact:

                    if (!Instance.CheckUserRights(Session))
                    {
                        break;
                    }

                    RoomActor Actor = Instance.GetActorByReferenceId(Session.CharacterId);

                    if (Actor == null)
                    {
                        break;
                    }

                    if (!Distance.TilesTouching(Actor.Position.GetVector2(), Item.RoomPosition.GetVector2()))
                    {
                        Actor.MoveToItemAndInteract(Item, RequestData);
                        break;
                    }

                    int Val = 0;
                    int.TryParse(Item.DisplayFlags, out Val);

                    if (RequestData == 1)
                    {
                        Val--;

                        if (Val < 0)
                        {
                            Val = 99;
                        }
                    }
                    else if (RequestData == 2)
                    {
                        Val++;

                        if (Val > 99)
                        {
                            Val = 0;
                        }
                    }
                    else
                    {
                        Val = (Val == -1 ? 0 : -1);
                    }

                    Item.DisplayFlags = Val.ToString();
                    Item.BroadcastStateUpdate(Instance);
                    break;
            }

            return true;
        }
Exemplo n.º 47
0
        private static bool HandleFireworks(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData)
        {
            int CurrentCharges = 0;
            int.TryParse(Item.Flags, out CurrentCharges);

            switch (Event)
            {
                case ItemEventType.InstanceLoaded:
                case ItemEventType.Placed:
                case ItemEventType.Moved:
                case ItemEventType.UpdateTick:

                    string DesiredDisplayFlags = "0";

                    if (CurrentCharges > 0)
                    {
                        DesiredDisplayFlags = "1";
                    }

                    if (Item.DisplayFlags != DesiredDisplayFlags)
                    {
                        Item.DisplayFlags = DesiredDisplayFlags;
                        Item.BroadcastStateUpdate(Instance);
                    }

                    break;

                case ItemEventType.Interact:

                    RoomActor Actor = Instance.GetActorByReferenceId(Session.CharacterId);

                    if (Actor == null)
                    {
                        return true;
                    }

                    if (Distance.Calculate(Actor.Position.GetVector2(), Item.RoomPosition.GetVector2()) > 1)
                    {
                        Actor.MoveToItemAndInteract(Item, RequestData, Item.SquareBehind);
                        return true;
                    }

                    switch (RequestData)
                    {
                        // Purchase charges
                        case 2:

                            if (Session.CharacterInfo.CreditsBalance < CHARGE_COSTS_CREDITS)
                            {
                                return true;
                            }

                            if (Session.CharacterInfo.ActivityPointsBalance < CHARGE_COSTS_PIXELS)
                            {
                                return true;
                            }

                            bool Update = (CurrentCharges <= 0);
                            CurrentCharges += CHARGE_AMOUNT;

                            Item.Flags = CurrentCharges.ToString();

                            using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                            {
                                if (CHARGE_COSTS_CREDITS > 0)
                                {
                                    Session.CharacterInfo.UpdateCreditsBalance(MySqlClient, -CHARGE_COSTS_CREDITS);
                                    Session.SendData(CreditsBalanceComposer.Compose(Session.CharacterInfo.CreditsBalance));
                                }

                                if (CHARGE_COSTS_PIXELS > 0)
                                {
                                    Session.CharacterInfo.UpdateActivityPointsBalance(MySqlClient, -CHARGE_COSTS_PIXELS);
                                    Session.SendData(ActivityPointsBalanceComposer.Compose(Session.CharacterInfo.ActivityPointsBalance,
                                        -CHARGE_COSTS_PIXELS));
                                }

                                Item.SynchronizeDatabase(MySqlClient, true);
                            }

                            Session.SendData(FireworksChargeInfoComposer.Compose(Item.Id, CurrentCharges, CHARGE_COSTS_CREDITS,
                                CHARGE_COSTS_PIXELS, CHARGE_AMOUNT));

                            if (Update)
                            {
                                Item.DisplayFlags = "1";
                                Item.BroadcastStateUpdate(Instance);
                            }

                            break;

                        case 1:

                            Session.SendData(FireworksChargeInfoComposer.Compose(Item.Id, CurrentCharges, CHARGE_COSTS_CREDITS,
                                CHARGE_COSTS_PIXELS, CHARGE_AMOUNT));
                            break;

                        default:
                        case 0:

                            if (Item.DisplayFlags == "2")
                            {
                                return true;
                            }

                            if (CurrentCharges > 0)
                            {
                                Item.DisplayFlags = "2";
                                Item.BroadcastStateUpdate(Instance);

                                Item.Flags = (--CurrentCharges).ToString();
                                RoomManager.MarkWriteback(Item, true);

                                Item.RequestUpdate(Item.Definition.BehaviorData);
                            }
                            else
                            {
                                goto case 1;
                            }

                            break;
                    }

                    break;
            }

            return true;
        }
Exemplo n.º 48
0
        private static bool HandleWired(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode)
        {
            switch (Event)
            {
            case ItemEventType.Interact:
                switch (Item.Definition.Behavior)
                {
                case ItemBehavior.WiredTrigger:
                    Session.SendData(WiredFurniTriggerComposer.Compose(Item, Instance));
                    break;

                case ItemBehavior.WiredEffect:
                    Session.SendData(WiredFurniActionComposer.Compose(Item, Instance));
                    break;
                }
                break;

            case ItemEventType.Placed:
                Item.WiredData = Instance.WiredManager.LoadWired(Item.Id, Item.Definition.BehaviorData);
                break;

            case ItemEventType.Removing:
                using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) {
                    Instance.WiredManager.RemoveWired(Item.Id, MySqlClient);
                }

                Instance.WiredManager.DeRegisterWalkItem(Item.Id);
                break;

            case ItemEventType.UpdateTick:
                if (Item.Definition.Behavior == ItemBehavior.WiredTrigger)
                {
                    switch (WiredTypesUtil.TriggerFromInt(Item.Definition.BehaviorData))
                    {
                    case WiredTriggerTypes.periodically:
                        Instance.WiredManager.ExecuteActions(Item, null);
                        Item.RequestUpdate(Item.WiredData.Data2);
                        break;

                    case WiredTriggerTypes.at_given_time:
                        Instance.WiredManager.ExecuteActions(Item, null);
                        break;
                    }
                    return(true);
                }
                Item.BroadcastStateUpdate(Instance);
                break;
            }
            return(true);
        }
Exemplo n.º 49
0
        private static bool HandleDice(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData)
        {
            switch (Event)
            {
                case ItemEventType.Placed:
                case ItemEventType.Removing:

                    if (Item.Flags != "0" && Item.Flags != "1")
                    {
                        Item.Flags = "0";
                        Item.DisplayFlags = "0";

                        RoomManager.MarkWriteback(Item, true);
                    }

                    break;

                case ItemEventType.Interact:

                    RoomActor TargetActor = Instance.GetActorByReferenceId(Session.CharacterId);

                    if (TargetActor == null)
                    {
                        break;
                    }

                    if (!Distance.TilesTouching(TargetActor.Position.GetVector2(), Item.RoomPosition.GetVector2())
                        && !Distance.IsDiagonal(TargetActor.Position.GetVector2(), Item.RoomPosition.GetVector2()))
                    {
                        TargetActor.MoveToItemAndInteract(Item, RequestData);
                        break;
                    }

                    if (RequestData >= 0)
                    {
                        if (Item.Flags != "-1")
                        {
                            Item.Flags = "-1";
                            Item.DisplayFlags = "-1";

                            Item.BroadcastStateUpdate(Instance);
                            Item.RequestUpdate(3);
                        }
                    }
                    else
                    {
                        Item.Flags = "0";
                        Item.DisplayFlags = "0";
                    }

                    break;

                case ItemEventType.UpdateTick:

                    Item.Flags = RandomGenerator.GetNext(1, 6).ToString();
                    Item.DisplayFlags = Item.Flags;

                    Item.BroadcastStateUpdate(Instance);

                    RoomManager.MarkWriteback(Item, true);
                    break;
            }

            return true;
        }
 public bool Proceed = true;              //m_result;
 public ItemStateChangedEventArgs(ItemEventType ev, ListViewItem item, int index)
 {
     EventType = ev;
     Item      = item;
     ItemIndex = index;
 }
Exemplo n.º 51
0
        private static bool HandleRental(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode)
        {
            switch (Event)
            {
            case ItemEventType.Placed:
            case ItemEventType.InstanceLoaded:

                if (Item.PendingExpiration)
                {
                    int DesiredTicks = (int)((double)(Math.Ceiling(Item.ExpireTimeLeft * 2)));

                    if (DesiredTicks <= 0)
                    {
                        goto case ItemEventType.UpdateTick;
                    }

                    Item.RequestUpdate(DesiredTicks);
                    return(true);
                }

                break;

            case ItemEventType.UpdateTick:

                if (Item.PendingExpiration)
                {
                    using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                    {
                        Item.RemovePermanently(MySqlClient);
                        Instance.TakeItem(Item.Id);
                        Instance.RegenerateRelativeHeightmap();
                    }

                    return(true);
                }

                break;
            }

            return(HandleGenericSwitch(Session, Item, Instance, Event, RequestData, 0));
        }
Exemplo n.º 52
0
        private static bool HandleTeleporter(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode)
        {
            RoomActor Actor = null;

            uint LinkedRef = 0;

            uint.TryParse(Item.Flags, out LinkedRef);

            switch (Event)
            {
            case ItemEventType.InstanceLoaded:

                Item.DisplayFlags = "0";
                break;

            case ItemEventType.Moved:

                if (RequestData != 1)
                {
                    goto case ItemEventType.Removing;
                }

                break;

            case ItemEventType.Removing:
            case ItemEventType.Placed:

                if (Item.DisplayFlags != "0")
                {
                    Item.DisplayFlags = "0";

                    if (Event == ItemEventType.Moved)
                    {
                        Item.BroadcastStateUpdate(Instance);
                    }
                }

                foreach (uint RefId in Item.TemporaryInteractionReferenceIds.Values)
                {
                    RoomActor InteractingActor = Instance.GetActor(RefId);

                    if (InteractingActor != null)
                    {
                        InteractingActor.UnblockWalking();
                    }
                }

                Item.TemporaryInteractionReferenceIds.Clear();
                break;

            case ItemEventType.Interact:

                if (Session != null)
                {
                    Actor = Instance.GetActorByReferenceId(Session.CharacterId);
                }

                if (Actor == null)
                {
                    break;
                }

                bool IsInFront = (Actor.Position.X == Item.SquareInFront.X && Actor.Position.Y == Item.SquareInFront.Y);
                bool IsInTele  = !IsInFront && (Actor.Position.X == Item.RoomPosition.X &&
                                                Actor.Position.Y == Item.RoomPosition.Y);

                if (!IsInFront && !IsInTele)
                {
                    Actor.MoveToItemAndInteract(Item, RequestData, Opcode);
                    break;
                }

                if (Item.DisplayFlags == "0" && Item.TemporaryInteractionReferenceIds.Count == 0)
                {
                    Item.TemporaryInteractionReferenceIds.Add(1, Actor.Id);
                    Actor.BlockWalking();

                    using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                    {
                        TeleporterLinkFinder.FillCache(MySqlClient, LinkedRef);
                    }

                    if (IsInTele)
                    {
                        Item.RequestUpdate(1);
                    }
                    else
                    {
                        Item.DisplayFlags = "1";
                        Actor.MoveTo(Item.RoomPosition.GetVector2(), true, true, true);

                        Item.BroadcastStateUpdate(Instance);
                        Item.RequestUpdate(3);
                    }
                }

                break;

            case ItemEventType.UpdateTick:

                RoomActor OutgoingUser = null;
                RoomActor IncomingUser = null;

                if (Item.TemporaryInteractionReferenceIds.ContainsKey(1))
                {
                    OutgoingUser = Instance.GetActor(Item.TemporaryInteractionReferenceIds[1]);

                    if (OutgoingUser == null)
                    {
                        Item.TemporaryInteractionReferenceIds.Remove(1);
                    }
                }

                if (Item.TemporaryInteractionReferenceIds.ContainsKey(2))
                {
                    IncomingUser = Instance.GetActor(Item.TemporaryInteractionReferenceIds[2]);

                    if (IncomingUser == null)
                    {
                        Item.TemporaryInteractionReferenceIds.Remove(2);
                    }
                }

                string       EffectToApply   = "0";
                uint         LinkedRoomRefId = TeleporterLinkFinder.GetValue(LinkedRef);
                RoomInstance LinkedRoomRef   = RoomManager.GetInstanceByRoomId(LinkedRoomRefId);

                if (OutgoingUser != null)
                {
                    Item    TargetItem      = null;
                    Session OutgoingSession = SessionManager.GetSessionByCharacterId(OutgoingUser.ReferenceId);

                    if (LinkedRoomRef == null && LinkedRoomRefId > 0)
                    {
                        RoomManager.TryLoadRoomInstance(LinkedRoomRefId);
                        LinkedRoomRef = RoomManager.GetInstanceByRoomId(LinkedRoomRefId);
                    }

                    if (LinkedRoomRef != null)
                    {
                        TargetItem = LinkedRoomRef.GetItem(LinkedRef);
                    }

                    if (OutgoingSession == null || OutgoingUser.Position.X != Item.RoomPosition.X ||
                        OutgoingUser.Position.Y != Item.RoomPosition.Y || (TargetItem != null &&
                                                                           TargetItem.TemporaryInteractionReferenceIds.ContainsKey(2)))
                    {
                        OutgoingUser.UnblockWalking();
                        Item.TemporaryInteractionReferenceIds.Remove(1);
                    }
                    else if (TargetItem != null)
                    {
                        EffectToApply = "2";

                        RoomActor TeleActor = OutgoingUser;

                        if (Instance != LinkedRoomRef)
                        {
                            OutgoingSession.IsTeleporting      = true;
                            OutgoingSession.TargetTeleporterId = LinkedRef;

                            RoomHandler.PrepareRoom(OutgoingSession, LinkedRoomRefId, string.Empty, true);

                            TeleActor = null;
                        }

                        if (TeleActor != null)
                        {
                            TeleActor.BlockWalking();

                            TeleActor.Position     = new Vector3(TargetItem.RoomPosition.X, TargetItem.RoomPosition.Y, TargetItem.RoomPosition.Z);
                            TeleActor.BodyRotation = TargetItem.RoomRotation;
                            TeleActor.HeadRotation = TeleActor.BodyRotation;
                            TeleActor.UpdateNeeded = true;

                            if (TargetItem.DisplayFlags != "2")
                            {
                                TargetItem.DisplayFlags = "2";
                                TargetItem.BroadcastStateUpdate(LinkedRoomRef);
                                TargetItem.RequestUpdate(3);
                            }

                            TargetItem.TemporaryInteractionReferenceIds.Add(2, TeleActor.Id);
                        }

                        Item.TemporaryInteractionReferenceIds.Remove(1);
                        Item.RequestUpdate(2);
                    }
                    else if (TargetItem == null)
                    {
                        EffectToApply = "1";
                        OutgoingUser.UnblockWalking();

                        if (Instance.IsValidStep(OutgoingUser.Position.GetVector2(), Item.SquareInFront, true))
                        {
                            OutgoingUser.MoveTo(Item.SquareInFront);
                        }

                        Item.TemporaryInteractionReferenceIds.Remove(1);
                        Item.RequestUpdate(2);
                    }
                }

                if (IncomingUser != null)
                {
                    if (IncomingUser.Position.X != Item.RoomPosition.X || IncomingUser.Position.Y != IncomingUser.Position.Y)
                    {
                        IncomingUser.UnblockWalking();
                        Item.TemporaryInteractionReferenceIds.Remove(2);
                    }
                    else
                    {
                        EffectToApply = "1";

                        IncomingUser.UnblockWalking();
                        Item.TemporaryInteractionReferenceIds.Remove(2);

                        if (Instance.CanInitiateMoveToPosition(Item.SquareInFront))
                        {
                            IncomingUser.MoveTo(Item.SquareInFront);
                        }

                        Item.RequestUpdate(3);
                    }
                }

                if (Item.DisplayFlags != EffectToApply)
                {
                    Item.DisplayFlags = EffectToApply;
                    Item.BroadcastStateUpdate(Instance);
                }

                break;
            }

            return(true);
        }
Exemplo n.º 53
0
        private static bool HandleGenericSwitch(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode)
        {
            switch (Event)
            {
            case ItemEventType.Interact:

                if (!Instance.CheckUserRights(Session))
                {
                    return(true);
                }

                int CurrentState = 0;
                int.TryParse(Item.Flags, out CurrentState);

                int NewState = CurrentState + 1;

                if (CurrentState < 0 || CurrentState >= (Item.Definition.BehaviorData - 1))
                {
                    NewState = 0;
                }

                if (CurrentState != NewState)
                {
                    Item.Flags        = NewState.ToString();
                    Item.DisplayFlags = Item.Flags;

                    RoomManager.MarkWriteback(Item, true);

                    Item.BroadcastStateUpdate(Instance);
                }

                break;
            }

            return(true);
        }
Exemplo n.º 54
0
        private static bool HandleStepSwitch(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode)
        {
            switch (Event)
            {
            case ItemEventType.InstanceLoaded:
            case ItemEventType.Moved:
            case ItemEventType.Placed:

                Item.RequestUpdate(1);
                break;

            case ItemEventType.UpdateTick:

                string Flags = "0";

                if (Instance.GetActorsOnPosition(Item.RoomPosition.GetVector2()).Count > 0)
                {
                    Flags = "1";
                }

                if (Item.DisplayFlags != Flags)
                {
                    Item.DisplayFlags = Flags;
                    Item.BroadcastStateUpdate(Instance);
                }

                Item.RequestUpdate(1);
                break;
            }

            return(true);
        }
Exemplo n.º 55
0
        private static bool HandleOneWayGate(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode)
        {
            switch (Event)
            {
                case ItemEventType.InstanceLoaded:
                case ItemEventType.Moved:
                case ItemEventType.Placed:

                    if (Item.DisplayFlags != "0")
                    {
                        Item.DisplayFlags = "0";
                        Item.BroadcastStateUpdate(Instance);
                    }

                    foreach (uint ActorId in Item.TemporaryInteractionReferenceIds.Values)
                    {
                        RoomActor ActorToUnlock = Instance.GetActor(ActorId);

                        if (ActorToUnlock != null)
                        {
                            ActorToUnlock.UnblockWalking();
                        }
                    }

                    Item.TemporaryInteractionReferenceIds.Clear();
                    break;

                case ItemEventType.Interact:
                    using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                    {
                        DataRow Row1 = MySqlClient.ExecuteQueryRow("SELECT * FROM groups_details WHERE id = '" + Session.CharacterInfo.GroupID + "'");
                        DataRow Row2 = MySqlClient.ExecuteQueryRow("SELECT * FROM characters WHERE id = '" + Session.CharacterInfo.Id + "'");
                        DataRow Row3 = MySqlClient.ExecuteQueryRow("SELECT * FROM jobranks WHERE jobid = '" + Session.CharacterInfo.GroupID + "' AND rankid = '" + Row2["jobrank"] + "'");
                        int room_id = (int)Row1["roomid"];
                        bool isPolice = false;
                        if ((string)Row3["type"] == "police" && Session.CharacterInfo.Working == 1)
                        {
                            isPolice = true;
                        }
                        RoomActor Actor = Instance.GetActorByReferenceId(Session.CharacterId);

                    if (Actor == null)
                    {
                        break;
                    }

                    if (Actor.Position.X != Item.SquareInFront.X || Actor.Position.Y != Item.SquareInFront.Y)
                    {
                        Actor.MoveToItemAndInteract(Item, RequestData, Opcode);
                        break;
                    }
                        if (Item.Definition.SpriteId == 2597 && Session.CharacterInfo.Dead == 1 || Session.CharacterInfo.Jailed == 1)
                        {
                            Session.SendData(RoomChatComposer.Compose(Actor.Id, "You are either dead or jailed, You cannot escape!", 0, ChatType.Whisper));
                            return false;
                        }
                        if (!isPolice)
                        {
                            if (Item.Definition.SpriteId == 2600 && Session.CharacterInfo.Working == 0 || Item.Definition.SpriteId == 2600 && room_id == 0 || Item.Definition.SpriteId == 2600 && room_id != Session.CurrentRoomId)
                            {
                                Session.SendData(RoomChatComposer.Compose(Actor.Id, "You either dont work here or you're not working!", 0, ChatType.Whisper));
                                return false;
                            }
                        }

                        if (Item.TemporaryInteractionReferenceIds.Count == 0 && Instance.IsValidStep(Item.RoomPosition.GetVector2(),
                            Item.SquareBehind, true) && Item.DisplayFlags == "0")
                        {
                            Actor.BlockWalking();
                            Actor.MoveTo(Item.RoomPosition.GetVector2(), true, true, true);
                            Item.TemporaryInteractionReferenceIds.Add(1, Actor.Id);
                            Item.RequestUpdate(1);
                        }
                    }

                    break;

                case ItemEventType.UpdateTick:

                    RoomActor UpdateActor = null;

                    if (Item.TemporaryInteractionReferenceIds.ContainsKey(1))
                    {
                        UpdateActor = Instance.GetActor(Item.TemporaryInteractionReferenceIds[1]);
                    }

                    if (UpdateActor == null || !Instance.IsValidStep(Item.RoomPosition.GetVector2(), Item.SquareBehind, true)
                        || ((UpdateActor.Position.X != Item.RoomPosition.X || UpdateActor.Position.Y !=
                        Item.RoomPosition.Y) && (UpdateActor.Position.X != Item.SquareInFront.X ||
                        UpdateActor.Position.Y != Item.SquareInFront.Y)))
                    {
                        if (Item.DisplayFlags != "0")
                        {
                            Item.DisplayFlags = "0";
                            Item.BroadcastStateUpdate(Instance);
                        }

                        if (Item.TemporaryInteractionReferenceIds.Count > 0)
                        {
                            Item.TemporaryInteractionReferenceIds.Clear();
                        }

                        if (UpdateActor != null)
                        {
                            UpdateActor.UnblockWalking();
                        }

                        break;
                    }

                    Item.DisplayFlags = "1";
                    Item.BroadcastStateUpdate(Instance);

                    UpdateActor.MoveTo(Item.SquareBehind, true, true, true);

                    Item.RequestUpdate(2);
                    break;
            }

            return true;
        }