Пример #1
0
 public void OnTrigger(int TriggerId, Item Item, VirtualRoomUser User)
 {
     if (User.Point.Compare(Item.FontPoint))
     {
         User.GetClient().Notif("Teleporters are disabled.", false);
     }
 }
Пример #2
0
        public void OnTrigger(int TriggerId, Item Item, VirtualRoomUser User)
        {
            int CurrentState = 0;

            int.TryParse(Item.ExtraData, out CurrentState);

            CurrentState++;

            if (CurrentState > Item.GetBaseItem().InteractorAmount)
            {
                CurrentState = 0;
            }

            Item.ExtraData = BrickEngine.GetConvertor().ObjectToString(CurrentState);

            User.GetRoom().GetRoomEngine().BroadcastResponse(Item.GetTriggerResponse());

            // Update Info & MySQL
            using (QueryReactor Reactor = BrickEngine.GetQueryReactor())
            {
                Reactor.SetQuery("UPDATE items SET extra_data = @extra WHERE id = @itemid LIMIT 1");
                Reactor.AddParam("itemid", Item.Id);
                Reactor.AddParam("extra", CurrentState);
                Reactor.ExcuteQuery();
            }
        }
Пример #3
0
 public void OnPointInteract(Item Item, VirtualRoomUser User)
 {
     if (!User.IsPet)
     {
         if (BrickEngine.GetEffectsHandler().UserHasRunningEffect(User.HabboId))
         {
             BrickEngine.GetEffectsHandler().RunFreeEffect(User.GetClient(), -1);
         }
     }
 }
Пример #4
0
 public void OnPointInteract(Item Item, VirtualRoomUser User)
 {
     if (User.IsPet)
     {
         User.AddStatus("swm", string.Empty);
     }
     else
     {
         if (Item.GetBaseItem().InternalName.EndsWith("_1"))
         {
             BrickEngine.GetEffectsHandler().RunFreeEffect(User.GetClient(), 30);
         }
         else if (Item.GetBaseItem().InternalName.EndsWith("_2"))
         {
             BrickEngine.GetEffectsHandler().RunFreeEffect(User.GetClient(), 29);
         }
     }
 }
Пример #5
0
 public void OnRemove(Item Item, VirtualRoomUser User)
 {
 }
Пример #6
0
 public void OnPlace(Item Item, VirtualRoomUser User)
 {
 }
Пример #7
0
 public void OnTrigger(int TriggerId, Item Item, VirtualRoomUser User)
 {
 }
Пример #8
0
        public VirtualRoomUser GenerateRoomUser(Client Client)
        {
            if (!Client.IsValidUser)
            {
                return null;
            }

            VirtualRoomUser User = new VirtualRoomUser(VirtualIdCounter.Next, Client.GetUser().HabboId, RoomId, GetRoom().GetRoomModel().DoorRot);
            User.UpdatePoint(GetRoom().GetRoomModel().Door);

            Response EnterMessage = new Response(28);
            EnterMessage.AppendInt32(1); // Amount, just 1
            User.GetResponse(EnterMessage);
            BroadcastResponse(EnterMessage);

            User.GetClient().GetUser().AtEnterRoom(RoomId);

            lock (RoomUsers)
            {
                RoomUsers.Add(User.VirtualId, User);
            }

            return User;
        }
Пример #9
0
 public void OnPointInteract(Item Item, VirtualRoomUser User)
 {
 }
Пример #10
0
 public void HandleIncomingTrigger(VirtualRoomUser User, Item Item, int TriggerId)
 {
     Item.GetTrigger().OnTrigger(TriggerId, Item, User);
 }
Пример #11
0
        // Already Updated @cache
        public void HandleIncomingItemUpdate(Item Item, string WallPos, VirtualRoomUser User)
        {
            // Handling Messages (FIRST, to avoid laggys)
            Response Response = new Response(85);
            Item.GetRoomResponse(Response);
            BroadcastResponse(Response);

            Item.GetTrigger().OnUpdate(Item, User);

            // Update Info & MySQL
            using (QueryReactor Reactor = BrickEngine.GetQueryReactor())
            {
                Reactor.SetQuery("UPDATE items SET point_wall = @point_wall WHERE id = @itemid LIMIT 1");
                Reactor.AddParam("itemid", Item.Id);
                Reactor.AddParam("point_wall", WallPos);
                Reactor.ExcuteQuery();
            }
        }
Пример #12
0
        // Already Updated @cache
        public void HandleIncomingItemUpdate(Item Item, iPoint OldPlace, iPoint NewPlace, int OldRotation, int Rotation, VirtualRoomUser User)
        {
            // Handling Messages (FIRST, to avoid laggys)
            Response Response = new Response(95);
            Item.GetRoomResponse(Response);
            BroadcastResponse(Response);

            GenerateMatrix();

            UpdateUsersOnPoint(OldPlace);

            foreach (iPoint Point in BrickEngine.GetItemReactor().GetAffectedPoints(OldPlace, Item.GetBaseItem().LengthY, Item.GetBaseItem().LengthX, OldRotation))
            {
                UpdateUsersOnPoint(Point);
            }

            UpdateUsersOnPoint(NewPlace);

            foreach (iPoint Point in BrickEngine.GetItemReactor().GetAffectedPoints(NewPlace, Item.GetBaseItem().LengthY, Item.GetBaseItem().LengthX, Rotation))
            {
                UpdateUsersOnPoint(Point);
            }

            Item.GetTrigger().OnUpdate(Item, User);

            // Update Info & MySQL
            using (QueryReactor Reactor = BrickEngine.GetQueryReactor())
            {
                Reactor.SetQuery("UPDATE items SET point_x = @x, point_y = @y, point_z = @z, rotation = @rot WHERE id = @itemid LIMIT 1");
                Reactor.AddParam("itemid", Item.Id);
                Reactor.AddParam("x", NewPlace.X);
                Reactor.AddParam("y", NewPlace.Y);
                Reactor.AddParam("z", NewPlace.Z.ToString().Replace(',', '.'));
                Reactor.AddParam("rot", Rotation);
                Reactor.ExcuteQuery();
            }
        }
Пример #13
0
        public void HandleIncomingItemPickUp(Item Item, VirtualRoomUser User)
        {
            // Handling Messages (FIRST, to avoid laggys)
            Response Response = new Response();

            if (Item.GetBaseItem().InternalType.ToLower().Equals("s"))
            {
                Response.Initialize(94);
            }
            else
            {
                Response.Initialize(84);
            }

            Response.AppendRawInt32(Item.Id);
            Response.AppendChar(2);
            Response.AppendBoolean(false);

            BroadcastResponse(Response);

            Item.GetTrigger().OnRemove(Item, User);

            if (Item.GetBaseItem().ExternalType.ToLower().Equals("default"))
            {
                Item.ExtraData = "0";

                // Update Info & MySQL
                using (QueryReactor Reactor = BrickEngine.GetQueryReactor())
                {
                    Reactor.SetQuery("UPDATE items SET room_id = '0', extra_data = '0',point_wall = '' WHERE id = @itemid LIMIT 1");
                    Reactor.AddParam("itemid", Item.Id);
                    Reactor.ExcuteQuery();
                }
            }
            else
            {
                // Update Info & MySQL
                using (QueryReactor Reactor = BrickEngine.GetQueryReactor())
                {
                    Reactor.SetQuery("UPDATE items SET room_id = '0', point_wall = '' WHERE id = @itemid LIMIT 1");
                    Reactor.AddParam("itemid", Item.Id);
                    Reactor.ExcuteQuery();
                }
            }
        }
Пример #14
0
        public void HandleIncomingItemPickUp(Item Item, iPoint OldPlace, iPoint NewPlace, int OldRotation, int Rotation, VirtualRoomUser User)
        {
            // Handling Messages (FIRST, to avoid laggys)
            Response Response = new Response();

            if (Item.GetBaseItem().InternalType.ToLower().Equals("s"))
            {
                Response.Initialize(94);
            }
            else
            {
                Response.Initialize(84);
            }

            Response.AppendRawInt32(Item.Id);
            Response.AppendChar(2);
            Response.AppendBoolean(false);

            BroadcastResponse(Response);

            GenerateMatrix();

            UpdateUsersOnPoint(OldPlace);

            foreach (iPoint Point in BrickEngine.GetItemReactor().GetAffectedPoints(OldPlace, Item.GetBaseItem().LengthY, Item.GetBaseItem().LengthX, OldRotation))
            {
                UpdateUsersOnPoint(Point);
            }

            Item.GetTrigger().OnRemove(Item, User);

            if (Item.GetBaseItem().ExternalType.ToLower().Equals("default"))
            {
                Item.ExtraData = "0";

                // Update Info & MySQL
                using (QueryReactor Reactor = BrickEngine.GetQueryReactor())
                {
                    Reactor.SetQuery("UPDATE items SET room_id = '0', extra_data = '0', point_x = @x, point_y = @y, point_z = @z, rotation = @rot WHERE id = @itemid LIMIT 1");
                    Reactor.AddParam("itemid", Item.Id);
                    Reactor.AddParam("x", NewPlace.X);
                    Reactor.AddParam("y", NewPlace.Y);
                    Reactor.AddParam("z", NewPlace.Z.ToString().Replace(',', '.'));
                    Reactor.AddParam("rot", Rotation);
                    Reactor.ExcuteQuery();
                }
            }
            else
            {
                // Update Info & MySQL
                using (QueryReactor Reactor = BrickEngine.GetQueryReactor())
                {
                    Reactor.SetQuery("UPDATE items SET room_id = '0', point_x = @x, point_y = @y, point_z = @z, rotation = @rot WHERE id = @itemid LIMIT 1");
                    Reactor.AddParam("itemid", Item.Id);
                    Reactor.AddParam("x", NewPlace.X);
                    Reactor.AddParam("y", NewPlace.Y);
                    Reactor.AddParam("z", NewPlace.Z.ToString().Replace(',', '.'));
                    Reactor.AddParam("rot", Rotation);
                    Reactor.ExcuteQuery();
                }
            }
        }
Пример #15
0
 public void OnUpdate(Item Item, VirtualRoomUser User)
 {
 }
Пример #16
0
        public void DoActions(PetInterAction Action, VirtualRoomUser Pet)
        {
            if (Pet.ContainsStatus("lay"))
            {
                Pet.RemoveStatus("lay");
            }

            if (Action.Equals(PetInterAction.Progressing))
            {
                this.Action = PetInterAction.Progressing;
            }

            if (Energy <= 15 && !this.Action.Equals(PetInterAction.Sleeping))
            {
                if (Happiness > 0)
                {
                    Happiness--;
                    UpdateHappiness();
                }

                Pet.AddStatus("lay", string.Empty);
                Pet.UpdateStatus(true);

                this.Action = PetInterAction.Sleeping;
            }
            else
            {
                if (this.Action.Equals(PetInterAction.Sleeping))
                {
                    if (Energy < PetReactor.MAX_ENERGY(Level) && Energy + 2 <= PetReactor.MAX_ENERGY(Level))
                    {
                        Energy += 2;
                        UpdateEnergy();
                    }
                    else
                    {
                        Energy = PetReactor.MAX_ENERGY(Level);
                    }

                    if (Energy >= PetReactor.MAX_ENERGY(Level))
                    {
                        Pet.Talk("Welcome back!", SpeechType.Talk, 0, string.Empty);
                        Pet.RemoveStatus("lay");

                        if (Happiness < PetReactor.MAX_HAPPINESS)
                        {
                            Happiness++;
                            UpdateHappiness();
                        }

                        this.Action = PetInterAction.Interactive;
                    }
                    else
                    {
                        Pet.AddStatus("lay", string.Empty);
                    }

                    Pet.UpdateStatus(true);

                    if (Action.Equals(PetInterAction.Chatting))
                    {
                        Pet.Talk("*Sleeping Zzz..*", SpeechType.Talk, 0, string.Empty);
                    }
                }
                else
                {
                    if (this.Action.Equals(PetInterAction.Progressing))
                    {
                        if (GetRoom().GetRoomEngine().GetPetToys().Count > 0)
                        {
                            foreach (Item Toy in GetRoom().GetRoomEngine().GetPetToys())
                            {
                                if (GetRoomUser().Point.Compare(Toy.Point))
                                {
                                    if (Toy.ExtraData == "0")
                                    {
                                        Pet.RotBody = 2;
                                        Pet.RotHead = 2;

                                        Pet.AddStatus("pla", string.Empty);
                                        Pet.UpdateStatus(true);

                                        Toy.ExtraData = "1";

                                        if (Happiness < PetReactor.MAX_HAPPINESS && Happiness + 3 <= PetReactor.MAX_HAPPINESS)
                                        {
                                            Happiness += 3;
                                            UpdateHappiness();
                                        }

                                        GetRoom().GetRoomEngine().BroadcastResponse(Toy.GetTriggerResponse());
                                    }
                                    else
                                    {
                                        if (!EndPlaying)
                                        {
                                            EndPlaying = true;
                                        }
                                        else
                                        {
                                            Toy.ExtraData = "0";
                                            GetRoom().GetRoomEngine().BroadcastResponse(Toy.GetTriggerResponse());
                                            EndPlaying = false;

                                            Pet.RemoveStatus("pla");
                                            Pet.UpdateStatus(true);

                                            this.Action = PetInterAction.Interactive;
                                        }
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        if (Action.Equals(PetInterAction.Walking))
                        {
                            if (Energy > 0)
                            {
                                if (Pet.IsWalking)
                                {
                                    Pet.PathPoints = new List<Rooms.Pathfinding.iPoint>();
                                    Pet.UpdateStatus(true);
                                }

                                Pet.UnhandledGoalPoint = GetRoom().GetRoomEngine().GetRandom();

                                Energy--;
                                UpdateEnergy();

                                if (Happiness < PetReactor.MAX_HAPPINESS && Happiness + 3 <= PetReactor.MAX_HAPPINESS)
                                {
                                    Happiness += 3;
                                    UpdateHappiness();
                                }

                                this.Action = Action;
                            }
                        }
                        else if (Action.Equals(PetInterAction.Chatting) && !Muted)
                        {
                            var Speeches = BrickEngine.GetPetReactor().GetSpeechesForType(Type);

                            PetSpeech Speech = null;

                            if (Speeches.Count > 0)
                            {
                                Speech = Speeches[Random.Next(0, Speeches.Count - 1)];
                            }

                            if (Speech != null)
                            {
                                Pet.Talk(Speech.Speech, Speech.Shout ? SpeechType.Shout : SpeechType.Talk, 0, string.Empty);
                            }

                            if (Happiness < PetReactor.MAX_HAPPINESS && Happiness + 5 <= PetReactor.MAX_HAPPINESS)
                            {
                                Happiness += 5;
                                UpdateHappiness();
                            }

                            this.Action = Action;
                        }
                        else if (Action.Equals(PetInterAction.Action) && !GetRoomUser().IsWalking)
                        {
                            if (Pet.GetRoom().GetRoomEngine().GetPetToys().Count > 0 && Random.Next(0, 5) == 2)
                            {
                                Pet.AddStatus("gst", "plf");
                                Pet.UpdateStatus(true);

                                Pet.UnhandledGoalPoint = Pet.GetRoom().GetRoomEngine().GetPetToys()[Random.Next(0, Pet.GetRoom().GetRoomEngine().GetPetToys().Count - 1)].Point;
                                DoActions(PetInterAction.Progressing, Pet);
                            }
                            else
                            {
                                var Actions = BrickEngine.GetPetReactor().GetActionsForType(Type);

                                PetAction doAction = null;

                                if (Actions.Count > 0)
                                {
                                    doAction = Actions[Random.Next(0, Actions.Count - 1)];
                                }

                                if (doAction != null)
                                {
                                    Pet.AddStatus(doAction.Key, doAction.Value);
                                    Pet.UpdateStatus(true);
                                }

                                if (Energy > 0)
                                {
                                    Energy--;
                                    UpdateEnergy();
                                }

                                if (Happiness < PetReactor.MAX_HAPPINESS && Happiness + 5 <= PetReactor.MAX_HAPPINESS)
                                {
                                    Happiness += 5;
                                    UpdateHappiness();
                                }

                                this.Action = Action;
                            }
                        }
                        else
                        {
                            this.Action = PetInterAction.Interactive;
                        }
                    }
                }
            }
        }
Пример #17
0
        public VirtualRoomUser GenerateRoomPet(int PetId, iPoint Place, int Rot)
        {
            VirtualRoomUser User = new VirtualRoomUser(VirtualIdCounter.Next, PetId, RoomId, Rot);
            User.UpdatePoint(Place);

            User.Point.Z = GetTileHeight(Place);

            Response EnterMessage = new Response(28);
            EnterMessage.AppendInt32(1); // Amount, just 1
            User.GetResponse(EnterMessage);
            BroadcastResponse(EnterMessage);

            lock (RoomPets)
            {
                RoomPets.Add(User.VirtualId, User);
            }

            BrickEngine.GetPetReactor().GetPetInfo(PetId).X = Place.X;
            BrickEngine.GetPetReactor().GetPetInfo(PetId).Y = Place.Y;
            BrickEngine.GetPetReactor().GetPetInfo(PetId).Rot = Rot;

            return User;
        }