Example #1
0
        /// <summary>
        /// Unloads the room.
        /// </summary>
        /// <param name="room">The room.</param>
        /// <param name="reason">The reason.</param>
        internal void UnloadRoom(Room room, string reason)
        {
            if (room?.RoomData == null || room.Disposed)
                return;

            room.Disposed = true;

            if (AzureEmulator.GetGame().GetNavigator().PrivateCategories.Contains(room.RoomData.Category))((FlatCat)
                AzureEmulator.GetGame().GetNavigator().PrivateCategories[room.RoomData.Category]).UsersNow -= room.UserCount;

            room.RoomData.UsersNow = 0;
            string state = "open";

            if (room.RoomData.State == 1)
                state = "locked";
            else if (room.RoomData.State > 1)
                state = "password";

            uint roomId = room.RoomId;

            try
            {
                using (IQueryAdapter queryReactor = AzureEmulator.GetDatabaseManager().GetQueryReactor())
                {
                    queryReactor.SetQuery("UPDATE rooms_data SET caption = @caption, description = @description, password = @password, category = " + room.RoomData.Category + ", state = '" + state + "', tags = @tags, users_now = '0', users_max = " + room.RoomData.UsersMax + ", allow_pets = '" + AzureEmulator.BoolToEnum(room.RoomData.AllowPets) + "', allow_pets_eat = '" + AzureEmulator.BoolToEnum(room.RoomData.AllowPetsEating) + "', allow_walkthrough = '" + AzureEmulator.BoolToEnum(room.RoomData.AllowWalkThrough) + "', hidewall = '" + AzureEmulator.BoolToEnum(room.RoomData.HideWall) + "', floorthick = " + room.RoomData.FloorThickness + ", wallthick = " + room.RoomData.WallThickness + ", mute_settings='" + room.RoomData.WhoCanMute + "', kick_settings='" + room.RoomData.WhoCanKick + "',ban_settings='" + room.RoomData.WhoCanBan + "', walls_height = '" + room.RoomData.WallHeight + "', chat_type = @chat_t,chat_balloon = @chat_b,chat_speed = @chat_s,chat_max_distance = @chat_m,chat_flood_protection = @chat_f, trade_state = '" + room.RoomData.TradeState + "' WHERE id = " + roomId);
                    queryReactor.AddParameter("caption", room.RoomData.Name);
                    queryReactor.AddParameter("description", room.RoomData.Description);
                    queryReactor.AddParameter("password", room.RoomData.PassWord);
                    queryReactor.AddParameter("tags", string.Join(",", room.RoomData.Tags));
                    queryReactor.AddParameter("chat_t", room.RoomData.ChatType);
                    queryReactor.AddParameter("chat_b", room.RoomData.ChatBalloon);
                    queryReactor.AddParameter("chat_s", room.RoomData.ChatSpeed);
                    queryReactor.AddParameter("chat_m", room.RoomData.ChatMaxDistance);
                    queryReactor.AddParameter("chat_f", room.RoomData.ChatFloodProtection);
                    queryReactor.RunQuery();

                    if (room.GetRoomUserManager() != null && room.GetRoomUserManager().UserList != null)
                    {
                        foreach (RoomUser current in room.GetRoomUserManager().UserList.Values)
                        {
                            if (current == null)
                                continue;

                            if (current.IsPet)
                            {
                                if (current.PetData == null)
                                    continue;

                                queryReactor.SetQuery("UPDATE bots SET x=@x, y=@y, z=@z WHERE id=@id LIMIT 1");
                                queryReactor.AddParameter("x", current.X);
                                queryReactor.AddParameter("y", current.Y);
                                queryReactor.AddParameter("z", current.Z);
                                queryReactor.AddParameter("id", current.PetData.PetId);
                                queryReactor.RunQuery();

                                current.BotAI?.Dispose();
                            }
                            else if (current.IsBot)
                            {
                                if (current.BotData == null)
                                    continue;

                                queryReactor.SetQuery("UPDATE bots SET x=@x, y=@y, z=@z, name=@name, motto=@motto, look=@look, rotation=@rotation, dance=@dance WHERE id=@id LIMIT 1");
                                queryReactor.AddParameter("name", current.BotData.Name);
                                queryReactor.AddParameter("motto", current.BotData.Motto);
                                queryReactor.AddParameter("look", current.BotData.Look);
                                queryReactor.AddParameter("rotation", current.BotData.Rot);
                                queryReactor.AddParameter("dance", current.BotData.DanceId);
                                queryReactor.AddParameter("x", current.X);
                                queryReactor.AddParameter("y", current.Y);
                                queryReactor.AddParameter("z", current.Z);
                                queryReactor.AddParameter("id", current.BotData.BotId);
                                queryReactor.RunQuery();

                                current.BotAI?.Dispose();
                            }
                            else
                            {
                                if (current.GetClient() == null)
                                    continue;

                                room.GetRoomUserManager().RemoveUserFromRoom(current.GetClient(), true, false);
                                current.GetClient().CurrentRoomUserId = -1;
                            }
                        }
                    }

                    Room junkRoom;
                    LoadedRooms.TryRemove(room.RoomId, out junkRoom);
                    junkRoom = null;

                    Out.WriteLine(string.Format("Room #{0} was unloaded, reason: " + reason, room.RoomId), "Azure.Room.Manager", ConsoleColor.DarkGray);

                    room.Destroy();
                }
            }
            catch (Exception e)
            {
                Writer.Writer.LogException(e.ToString());
            }
        }
Example #2
0
        internal void PlantMonsterplant(RoomItem mopla, Room room)
        {
            int rarity = 0, internalRarity = 0;
            if (room == null || mopla == null)
                return;

            if ((mopla.GetBaseItem().InteractionType != Interaction.Moplaseed) && (mopla.GetBaseItem().InteractionType != Interaction.RareMoplaSeed))
                return;
            if (string.IsNullOrEmpty(mopla.ExtraData) || mopla.ExtraData == "0")
                rarity = 1;
            if (!string.IsNullOrEmpty(mopla.ExtraData) && mopla.ExtraData != "0")
                rarity = int.TryParse(mopla.ExtraData, out internalRarity) ? internalRarity : 1;

            var getX = mopla.X;
            var getY = mopla.Y;
            room.GetRoomItemHandler().RemoveFurniture(Session, mopla.Id, false);
            var pet = CatalogManager.CreatePet(Session.GetHabbo().Id, "Monsterplant", 16, "0", "0", rarity);
            Response.Init(LibraryParser.OutgoingRequest("SendMonsterplantIdMessageComposer"));
            Response.AppendInteger(pet.PetId);
            SendResponse();
            using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor())
                queryReactor.RunFastQuery(string.Concat("UPDATE bots SET room_id = '", room.RoomId, "', x = '", getX, "', y = '", getY, "' WHERE id = '", pet.PetId, "'"));
            pet.PlacedInRoom = true;
            pet.RoomId = room.RoomId;
            var bot = new RoomBot(pet.PetId, pet.OwnerId, pet.RoomId, AiType.Pet, "freeroam", pet.Name, "", pet.Look,
                getX, getY, 0.0, 4, 0, 0, 0, 0, null, null, "", 0, false);
            room.GetRoomUserManager().DeployBot(bot, pet);

            if (pet.DbState != DatabaseUpdateState.NeedsInsert)
                pet.DbState = DatabaseUpdateState.NeedsUpdate;

            using (var queryreactor2 = Azure.GetDatabaseManager().GetQueryReactor())
            {
                queryreactor2.RunFastQuery(string.Format("DELETE FROM items_rooms WHERE id = {0}", mopla.Id));
                room.GetRoomUserManager().SavePets(queryreactor2);
            }
        }