示例#1
0
        public bool Execute(params object[] stuff)
        {
            RoomUser roomUser = (RoomUser)stuff[0];
            RoomItem roomItem = (RoomItem)stuff[1];

            if (roomUser == null || roomItem == null)
            {
                return(false);
            }

            if (!Items.Contains(roomItem))
            {
                return(false);
            }

            _mUsers.Add(roomUser);

            if (Delay == 0)
            {
                WiredHandler.OnEvent(this);
                OnCycle();
            }
            else
            {
                if (_mNext == 0L || _mNext < Yupi.Now())
                {
                    _mNext = Yupi.Now() + Delay;
                }

                Room.GetWiredHandler().EnqueueCycle(this);
            }

            return(true);
        }
示例#2
0
        public bool Execute(params object[] stuff)
        {
            RoomUser roomUser = (RoomUser)stuff[0];
            RoomItem roomItem = (RoomItem)stuff[1];

            if (!Items.Contains(roomItem) || roomUser.LastItem != roomItem.Id)
            {
                return(false);
            }

            if (
                roomItem.AffectedTiles.Values.Any(
                    current =>
                    (current.X == roomUser.X && current.Y == roomUser.Y) ||
                    (roomUser.X == roomItem.X && roomUser.Y == roomItem.Y)))
            {
                return(false);
            }

            ToWork.Enqueue(roomUser);

            if (Delay == 0)
            {
                OnCycle();
            }
            else
            {
                _mNext = Yupi.Now() + Delay;

                Room.GetWiredHandler().EnqueueCycle(this);
            }

            return(true);
        }
示例#3
0
        public bool OnCycle()
        {
            if (!Items.Any())
            {
                return(true);
            }

            long num = Yupi.Now();

            if (_mNext < num)
            {
                foreach (RoomItem current in Items.Where(current => current != null && Room.GetRoomItemHandler().FloorItems.ContainsKey(current.Id)))
                {
                    current.Interactor.OnWiredTrigger(current);
                }
            }

            if (_mNext >= num)
            {
                return(false);
            }

            _mNext = 0L;
            return(true);
        }
示例#4
0
        public bool Execute(params object[] stuff)
        {
            RoomUser roomUser = (RoomUser)stuff[0];
            RoomItem roomItem = (RoomItem)stuff[1];

            int userPosition     = roomUser.X;
            int lastUserPosition = roomUser.CopyX;

            if (!Items.Contains(roomItem) || (roomUser.LastItem != 0 && roomUser.LastItem == roomItem.Id && userPosition == lastUserPosition))
            {
                return(false);
            }

            if (roomItem.GetRoom() == null || roomItem.GetRoom().GetRoomItemHandler() == null || roomItem.GetRoom().GetRoomItemHandler().FloorItems.Values.Any(i => i.X == roomItem.X && i.Y == roomItem.Y && i.Z > roomItem.Z))
            {
                return(false);
            }

            ToWork.Enqueue(roomUser);

            if (Delay == 0)
            {
                OnCycle();
            }
            else
            {
                _mNext = Yupi.Now() + Delay;

                Room.GetWiredHandler().EnqueueCycle(this);
            }

            return(true);
        }
示例#5
0
        public bool OnCycle()
        {
            long num = Yupi.Now();

            if (_mNext >= num)
            {
                return(false);
            }

            List <IWiredItem> conditions = Room.GetWiredHandler().GetConditions(this);
            List <IWiredItem> effects    = Room.GetWiredHandler().GetEffects(this);

            if (conditions.Any())
            {
                foreach (IWiredItem current in conditions.Where(current => current.Execute()))
                {
                    WiredHandler.OnEvent(current);
                }
            }

            if (effects.Any())
            {
                foreach (IWiredItem current2 in effects.Where(current2 => current2.Execute(null, Type)))
                {
                    WiredHandler.OnEvent(current2);
                }
            }

            _mNext = Yupi.Now() + Delay;

            return(false);
        }
示例#6
0
        public bool OnCycle()
        {
            if (!ToWorkConcurrentQueue.Any())
            {
                return(true);
            }

            if (Room?.GetRoomItemHandler() == null || Room?.GetRoomItemHandler()?.FloorItems == null)
            {
                return(false);
            }

            long num = Yupi.Now();

            List <RoomUser> toAdd = new List <RoomUser>();

            RoomUser roomUser;

            while (ToWorkConcurrentQueue.TryDequeue(out roomUser))
            {
                if (roomUser?.GetClient() == null)
                {
                    continue;
                }

                if (_mNext <= num)
                {
                    if (Teleport(roomUser))
                    {
                        continue;
                    }

                    return(false);
                }

                if (_mNext - num < 500L && roomUser.GetClient()?.GetHabbo()?.GetAvatarEffectsInventoryComponent() != null)
                {
                    roomUser.GetClient()?.GetHabbo()?.GetAvatarEffectsInventoryComponent()?.ActivateCustomEffect(4);
                }

                toAdd?.Add(roomUser);
            }

            foreach (RoomUser roomUserToAdd in toAdd.Where(roomUserToAdd => roomUserToAdd != null && !ToWorkConcurrentQueue.Contains(roomUserToAdd)))
            {
                ToWorkConcurrentQueue.Enqueue(roomUserToAdd);
            }

            toAdd.Clear();

            if (_mNext >= num)
            {
                return(false);
            }

            _mNext = 0L;
            return(true);
        }
示例#7
0
        public LongRepeater(RoomItem item, Room room)
        {
            Item  = item;
            Room  = room;
            Delay = 10000;
            Room.GetWiredHandler().EnqueueCycle(this);

            if (_mNext == 0L || _mNext < Yupi.Now())
            {
                _mNext = Yupi.Now() + Delay;
            }
        }
示例#8
0
        public bool OnCycle()
        {
            long num = Yupi.Now();

            if (_mNext >= num)
            {
                return(false);
            }

            List <IWiredItem> conditions = Room.GetWiredHandler().GetConditions(this);
            List <IWiredItem> effects    = Room.GetWiredHandler().GetEffects(this);

            foreach (RoomUser current in _mUsers)
            {
                if (conditions.Any())
                {
                    RoomUser current3 = current;

                    if (current3 == null)
                    {
                        continue;
                    }

                    foreach (IWiredItem current2 in conditions.Where(current2 => current2.Execute(current3)))
                    {
                        WiredHandler.OnEvent(current2);
                    }
                }

                if (!effects.Any())
                {
                    continue;
                }

                RoomUser current1 = current;

                if (current1 == null)
                {
                    continue;
                }

                foreach (IWiredItem current3 in effects.Where(current3 => current3.Execute(current1, Type)))
                {
                    WiredHandler.OnEvent(current3);
                }
            }

            WiredHandler.OnEvent(this);
            _mNext = 0L;

            return(true);
        }
示例#9
0
        public bool Execute(params object[] stuff)
        {
            if (_mNext == 0L || _mNext < Yupi.Now())
            {
                _mNext = Yupi.Now() + Delay;
            }

            if (!Room.GetWiredHandler().IsCycleQueued(this))
            {
                Room.GetWiredHandler().EnqueueCycle(this);
            }

            return(true);
        }
示例#10
0
        public bool Execute(params object[] stuff)
        {
            if (!Items.Any())
            {
                return(false);
            }

            if (_mNext == 0L || _mNext < Yupi.Now())
            {
                _mNext = Yupi.Now() + Delay;
            }

            Room.GetWiredHandler().EnqueueCycle(this);

            return(true);
        }
示例#11
0
        public bool OnCycle()
        {
            long num = Yupi.Now();

            if (num <= _mNext)
            {
                return(false);
            }

            lock (ToWork.SyncRoot)
            {
                while (ToWork.Count > 0)
                {
                    RoomUser roomUser = (RoomUser)ToWork.Dequeue();

                    List <IWiredItem> conditions = Room.GetWiredHandler().GetConditions(this);
                    List <IWiredItem> effects    = Room.GetWiredHandler().GetEffects(this);

                    if (conditions.Any())
                    {
                        foreach (IWiredItem current in conditions)
                        {
                            if (!current.Execute(roomUser))
                            {
                                return(false);
                            }

                            WiredHandler.OnEvent(current);
                        }
                    }

                    if (!effects.Any())
                    {
                        continue;
                    }

                    foreach (IWiredItem current2 in effects.Where(current2 => current2.Execute(roomUser, Type)))
                    {
                        WiredHandler.OnEvent(current2);
                    }
                }
            }

            _mNext = 0L;
            WiredHandler.OnEvent(this);
            return(true);
        }
示例#12
0
        public bool Execute(params object[] stuff)
        {
            if (stuff[0] == null)
            {
                return(false);
            }

            RoomUser    roomUser = (RoomUser)stuff[0];
            Interaction item     = (Interaction)stuff[1];

            if (_mBanned.Contains(item))
            {
                return(false);
            }

            if (!Items.Any())
            {
                return(false);
            }

            if (!ToWorkConcurrentQueue.Contains(roomUser))
            {
                ToWorkConcurrentQueue.Enqueue(roomUser);
            }

            if (Delay < 500)
            {
                Delay = 500;
            }

            if (Room.GetWiredHandler().IsCycleQueued(this))
            {
                return(false);
            }

            if (_mNext == 0L || _mNext < Yupi.Now())
            {
                _mNext = Yupi.Now() + Delay;
            }

            Room.GetWiredHandler().EnqueueCycle(this);

            return(true);
        }