Exemplo n.º 1
0
        internal void UpdateFurniture()
        {
            List <ServerMessage> list = new List <ServerMessage>();

            RoomItem[] array  = this.GetRoomItemHandler().mFloorItems.Values.ToArray <RoomItem>();
            RoomItem[] array2 = array;
            for (int i = 0; i < array2.Length; i++)
            {
                RoomItem      roomItem      = array2[i];
                ServerMessage serverMessage = new ServerMessage(Outgoing.UpdateRoomItemMessageComposer);
                roomItem.Serialize(serverMessage);
                list.Add(serverMessage);
            }
            Array.Clear(array, 0, array.Length);
            RoomItem[] array3 = this.GetRoomItemHandler().mWallItems.Values.ToArray <RoomItem>();
            RoomItem[] array4 = array3;
            for (int j = 0; j < array4.Length; j++)
            {
                RoomItem      roomItem2      = array4[j];
                ServerMessage serverMessage2 = new ServerMessage(Outgoing.UpdateRoomWallItemMessageComposer);
                roomItem2.Serialize(serverMessage2);
                list.Add(serverMessage2);
            }
            Array.Clear(array3, 0, array3.Length);
            this.SendMessage(list);
        }
Exemplo n.º 2
0
        internal bool SetWallItem(GameClient Session, RoomItem Item)
        {
            if (!Item.IsWallItem || mWallItems.ContainsKey(Item.Id))
            {
                return(false);
            }
            if (mFloorItems.ContainsKey(Item.Id))
            {
                Session.SendNotif(LanguageLocale.GetValue("room.itemplaced"));
                return(true);
            }
            Item.Interactor.OnPlace(Session, Item);

            if (Item.GetBaseItem().InteractionType == InteractionType.dimmer)
            {
                if (room.MoodlightData == null)
                {
                    room.MoodlightData           = new MoodlightData(Item.Id);
                    ((StringData)Item.data).Data = room.MoodlightData.GenerateExtraData();
                }
            }

            mWallItems.Add(Item.Id, Item);
            AddItem(Item);

            ServerMessage Message = new ServerMessage(Outgoing.AddWallItemToRoom);

            Item.Serialize(Message, room.OwnerId);
            Message.AppendString(room.Owner); // TODO
            room.SendMessage(Message);

            return(true);
        }
Exemplo n.º 3
0
        internal bool PlayVideoInRoom(Rooms.Room Room, string Video)
        {
            Video = Video.Replace("http://www.youtube.", "");
            Video = Video.Replace("www.youtube.", "");
            try
            {
                Video = Video.Split('=')[1];
            }
            catch { return(false); }

            if (Video == "")
            {
                return(false);
            }

            foreach (PlayerTV Tv in LoadedTVs.Values)
            {
                if (Tv.RoomId == Room.RoomId)
                {
                    Tv.CustomVideo = Video;

                    RoomItem Item = Room.GetRoomItemHandler().GetItem(Tv.Item);
                    if (Item != null)
                    {
                        Item.ExtraData = Video;
                        var ServerMessage = new ServerMessage(Outgoing.UpdateRoomItemMessageComposer);
                        Item.Serialize(ServerMessage);
                        Room.SendMessage(ServerMessage);
                    }
                }
            }

            return(true);
        }
Exemplo n.º 4
0
        public ServerMessage Handle(ValueHolder valueHolder = null)
        {
            RoomItem item = valueHolder.GetValue<RoomItem>("Item");

            ServerMessage updateRoomWallItem = BasicUtilies.GetRevisionServerMessage(Revision.RELEASE63_35255_34886_201108111108);
            updateRoomWallItem.Init(r63aOutgoing.UpdateRoomWallItem);
            item.Serialize(updateRoomWallItem);
            return updateRoomWallItem;
        }
        public ServerMessage Handle(ValueHolder valueHolder = null)
        {
            RoomItem item = valueHolder.GetValue <RoomItem>("Item");

            ServerMessage updateRoomWallItem = BasicUtilies.GetRevisionServerMessage(Revision.PRODUCTION_201601012205_226667486);

            updateRoomWallItem.Init(r63cOutgoing.UpdateWallItem);
            item.Serialize(updateRoomWallItem);
            return(updateRoomWallItem);
        }
Exemplo n.º 6
0
        public ServerMessage Handle(ValueHolder valueHolder = null)
        {
            RoomItem item = valueHolder.GetValue <RoomItem>("Item");

            ServerMessage Message = BasicUtilies.GetRevisionServerMessage(Revision.RELEASE63_35255_34886_201108111108);

            Message.Init(r63aOutgoing.RoomFloorItemMoved);
            item.Serialize(Message);
            return(Message);
        }
        public ServerMessage Handle(ValueHolder valueHolder = null)
        {
            RoomItem item = valueHolder.GetValue <RoomItem>("Item");

            ServerMessage message = BasicUtilies.GetRevisionServerMessage(Revision.RELEASE63_201211141113_913728051);

            message.Init(r63bOutgoing.AddFloorItemToRoom);
            item.Serialize(message);
            message.AppendString(Skylight.GetGame().GetGameClientManager().GetUsernameByID(item.UserID));
            return(message);
        }
Exemplo n.º 8
0
        public ServerMessage Handle(ValueHolder valueHolder = null)
        {
            RoomItem item = valueHolder.GetValue <RoomItem>("Item");

            ServerMessage AddWallItemToRoom = BasicUtilies.GetRevisionServerMessage(Revision.PRODUCTION_201601012205_226667486);

            AddWallItemToRoom.Init(r63cOutgoing.AddWallItemToRoom);
            item.Serialize(AddWallItemToRoom);
            AddWallItemToRoom.AppendString(Skylight.GetGame().GetGameClientManager().GetUsernameByID(item.UserID));
            return(AddWallItemToRoom);
        }
Exemplo n.º 9
0
        void IFurniTrigger.OnTrigger(GameClient Session, RoomItem Item, int Request, bool UserHasRights)
        {
            if (UserHasRights && Item.GetRoom() != null)
            {
                string[] ExtradataSplat = Item.ExtraData.Split(Convert.ToChar(5));
                if (ExtradataSplat.Length == 4)
                {
                    if (ExtradataSplat[0] == "0")
                        Item.ExtraData = "1" + ExtradataSplat[1] + ExtradataSplat[2] + ExtradataSplat[3];
                    else
                        Item.ExtraData = "0" + ExtradataSplat[1] + ExtradataSplat[2] + ExtradataSplat[3];

                    ServerMessage Message = PacketHandelingManager.GetRecycledItem(OutputCode.ObjectUpdateMessageEvent); 
                    Item.Serialize(Message);
                    Item.GetRoom().SendMessage(Message);
                    Item.UpdateState(true, false);
                }
            }
        }
Exemplo n.º 10
0
        internal void DeliverRandomPinataItem(RoomUser User, Room Room, RoomItem Item)
        {
            if (Room == null || Item == null || Item.GetBaseItem().InteractionType != InteractionType.pinata || !this.Pinatas.ContainsKey(Item.GetBaseItem().ItemId))
            {
                return;
            }
            PinataItem pinataItem;

            this.Pinatas.TryGetValue(Item.GetBaseItem().ItemId, out pinataItem);
            if (pinataItem == null || pinataItem.Rewards.Count < 1)
            {
                return;
            }
            int    getX = Item.GetX;
            int    getY = Item.GetY;
            double getZ = Item.GetZ;

            Thread.Sleep(900);
            Item.refreshItem();
            Item.BaseItem  = pinataItem.Rewards[new Random().Next(checked (pinataItem.Rewards.Count - 1))];
            Item.ExtraData = "";
            Room.GetRoomItemHandler().RemoveFurniture(User.GetClient(), Item.Id, false);
            using (IQueryAdapter queryreactor = CyberEnvironment.GetDatabaseManager().getQueryReactor())
            {
                queryreactor.runFastQuery(string.Concat(new object[]
                {
                    "UPDATE items SET base_item = '",
                    Item.BaseItem,
                    "', extra_data = '' WHERE id = ",
                    Item.Id
                }));
                queryreactor.runQuery();
            }
            Room.GetRoomItemHandler().SetFloorItem(Item, getX, getY, getZ, 0, false);
            ServerMessage serverMessage = new ServerMessage(Outgoing.AddFloorItemMessageComposer);

            Item.Serialize(serverMessage);
            serverMessage.AppendString(Room.Owner);
            Room.SendMessage(serverMessage);
            Room.GetRoomItemHandler().SetFloorItem(User.GetClient(), Item, Item.GetX, Item.GetY, 0, true, false, true);
        }
Exemplo n.º 11
0
		internal void DeliverRandomPinataItem(RoomUser User, Room Room, RoomItem Item)
		{
			if (Room == null || Item == null || Item.GetBaseItem().InteractionType != InteractionType.pinata || !this.Pinatas.ContainsKey(Item.GetBaseItem().ItemId))
			{
				return;
			}
			PinataItem pinataItem;
			this.Pinatas.TryGetValue(Item.GetBaseItem().ItemId, out pinataItem);
			if (pinataItem == null || pinataItem.Rewards.Count < 1)
			{
				return;
			}
			int getX = Item.GetX;
			int getY = Item.GetY;
			double getZ = Item.GetZ;
			Thread.Sleep(900);
			Item.refreshItem();
			Item.BaseItem = pinataItem.Rewards[new Random().Next(checked(pinataItem.Rewards.Count - 1))];
			Item.ExtraData = "";
			Room.GetRoomItemHandler().RemoveFurniture(User.GetClient(), Item.Id, false);
			using (IQueryAdapter queryreactor = CyberEnvironment.GetDatabaseManager().getQueryReactor())
			{
				queryreactor.runFastQuery(string.Concat(new object[]
				{
					"UPDATE items SET base_item = '",
					Item.BaseItem,
					"', extra_data = '' WHERE id = ",
					Item.Id
				}));
				queryreactor.runQuery();
			}
			Room.GetRoomItemHandler().SetFloorItem(Item, getX, getY, getZ, 0, false);
			ServerMessage serverMessage = new ServerMessage(Outgoing.AddFloorItemMessageComposer);
			Item.Serialize(serverMessage);
			serverMessage.AppendString(Room.Owner);
			Room.SendMessage(serverMessage);
			Room.GetRoomItemHandler().SetFloorItem(User.GetClient(), Item, Item.GetX, Item.GetY, 0, true, false, true);
		}
Exemplo n.º 12
0
        /// <summary>
        ///     Sets the floor item.
        /// </summary>
        /// <param name="session">The session.</param>
        /// <param name="item">The item.</param>
        /// <param name="newX">The new x.</param>
        /// <param name="newY">The new y.</param>
        /// <param name="newRot">The new rot.</param>
        /// <param name="newItem">if set to <c>true</c> [new item].</param>
        /// <param name="onRoller">if set to <c>true</c> [on roller].</param>
        /// <param name="sendMessage">if set to <c>true</c> [send message].</param>
        /// <param name="updateRoomUserStatuses">if set to <c>true</c> [update room user statuses].</param>
        /// <param name="specialMove"></param>
        /// <param name="customHeight"></param>
        /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
        internal bool SetFloorItem(GameClient session, RoomItem item, int newX, int newY, int newRot, bool newItem,
            bool onRoller, bool sendMessage, bool updateRoomUserStatuses, bool specialMove, double? customHeight = null)
        {
            var flag = false;
            if (!newItem) flag = _room.GetGameMap().RemoveFromMap(item);

            var affectedTiles = Gamemap.GetAffectedTiles(item.GetBaseItem().Length,
                item.GetBaseItem().Width, newX, newY, newRot);

            var oldCoord = item.Coordinate;

            if (!_room.GetGameMap().ValidTile(newX, newY) ||
                (_room.GetGameMap().SquareHasUsers(newX, newY) && !item.GetBaseItem().IsSeat))
            {
                if (!flag) return false;

                AddOrUpdateItem(item.Id);
                _room.GetGameMap().AddToMap(item);
                return false;
            }

            if (
                affectedTiles.Values.Any(
                    current =>
                        !_room.GetGameMap().ValidTile(current.X, current.Y) ||
                        (_room.GetGameMap().SquareHasUsers(current.X, current.Y) && !item.GetBaseItem().IsSeat)))
            {
                if (!flag) return false;
                AddOrUpdateItem(item.Id);
                _room.GetGameMap().AddToMap(item);
                return false;
            }

            var height = customHeight == null ? _room.GetGameMap().Model.SqFloorHeight[newX][newY] : customHeight.Value;
            if (!onRoller)
            {
                if (_room.GetGameMap().Model.SqState[newX][newY] != SquareState.Open && !item.GetBaseItem().IsSeat)
                {
                    if (!flag) return false;
                    AddOrUpdateItem(item.Id);
                    return false;
                }
                if (
                    affectedTiles.Values.Any(
                        current2 =>
                            !item.GetBaseItem().IsSeat &&
                            _room.GetGameMap().Model.SqState[current2.X][current2.Y] != SquareState.Open))
                {
                    if (!flag) return false;

                    AddOrUpdateItem(item.Id);
                    _room.GetGameMap().AddToMap(item);
                    return false;
                }
                if (!item.GetBaseItem().IsSeat && !item.IsRoller)
                    if (
                        affectedTiles.Values.Any(
                            current3 => _room.GetGameMap().GetRoomUsers(new Point(current3.X, current3.Y)).Any()))
                    {
                        if (!flag) return false;
                        AddOrUpdateItem(item.Id);
                        _room.GetGameMap().AddToMap(item);
                        return false;
                    }
            }

            var furniObjects = GetFurniObjects(newX, newY);
            var list = new List<RoomItem>();
            var list2 = new List<RoomItem>();
            foreach (
                var furniObjects2 in
                    affectedTiles.Values
                        .Select(current4 => GetFurniObjects(current4.X, current4.Y))
                        .Where(furniObjects2 => furniObjects2 != null))
                list.AddRange(furniObjects2);
            list2.AddRange(furniObjects);
            list2.AddRange(list);

            var stackMagic = list2.FirstOrDefault(
                roomItem =>
                    roomItem != null && roomItem.GetBaseItem() != null &&
                    roomItem.GetBaseItem().InteractionType == Interaction.TileStackMagic);

            if (stackMagic != null)
            {
                height = stackMagic.Z;
            }
            else if (!onRoller && item.GetBaseItem().InteractionType != Interaction.TileStackMagic)
            {
                if (list2.Any(
                    current5 =>
                        current5 != null && current5.Id != item.Id && current5.GetBaseItem() != null &&
                        !current5.GetBaseItem().Stackable))
                {
                    if (!flag) return false;
                    AddOrUpdateItem(item.Id);
                    _room.GetGameMap().AddToMap(item);
                    return false;
                }

                if (item.Rot != newRot && item.X == newX && item.Y == newY) height = item.Z;
                foreach (var current6 in list2)
                    if (current6.Id != item.Id && current6.TotalHeight > height) height = current6.TotalHeight;
            }

            if (item.GetBaseItem().Name == "boutique_mannequin1" || item.GetBaseItem().Name == "gld_wall_tall")
            {
                if (newRot < 0 || newRot > 12)
                {
                    newRot = 0;
                }
            }
            else if (item.GetBaseItem().Name == "pirate_stage2" || item.GetBaseItem().Name == "pirate_stage2_g")
            {
                if (newRot < 0 || newRot > 7)
                {
                    newRot = 0;
                }
            }
            else if (item.GetBaseItem().Name == "gh_div_cor" || item.GetBaseItem().Name == "hblooza14_duckcrn" ||
                     item.GetBaseItem().Name == "hween13_dwarfcrn")
            {
                if (newRot != 1 && newRot != 3 && newRot != 5 && newRot != 7)
                {
                    newRot = 0;
                }
            }
            else if (item.GetBaseItem().Name == "val14_b_roof" || item.GetBaseItem().Name == "val14_g_roof" ||
                     item.GetBaseItem().Name == "val14_y_roof")
            {
                if (newRot != 2 && newRot != 3 && newRot != 4 && newRot != 7)
                {
                    newRot = 0;
                }
            }
            else if (item.GetBaseItem().Name == "val13_div_1")
            {
                if (newRot < 0 || newRot > 6)
                {
                    newRot = 0;
                }
            }
            else if (item.GetBaseItem().Name == "room_info15_shrub1")
            {
                if (newRot != 0 && newRot != 2 && newRot != 3 && newRot != 4 && newRot != 6)
                {
                    newRot = 0;
                }
            }
            else if (item.GetBaseItem().Name == "room_info15_div")
            {
                if (newRot < 0 || newRot > 5)
                {
                    newRot = 0;
                }
            }
            else
            {
                if (newRot != 0 && newRot != 2 && newRot != 4 && newRot != 6 && newRot != 8)
                {
                    newRot = 0;
                }
            }
            item.Rot = newRot;

            item.SetState(newX, newY, height, affectedTiles);
            if (!onRoller && session != null) item.Interactor.OnPlace(session, item);
            if (newItem)
            {
                if (FloorItems.ContainsKey(item.Id)) return true;
                if (item.IsFloorItem) FloorItems.TryAdd(item.Id, item);
                else if (item.IsWallItem) WallItems.TryAdd(item.Id, item);

                AddOrUpdateItem(item.Id);
                if (sendMessage)
                {
                    var serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("AddFloorItemMessageComposer"));
                    item.Serialize(serverMessage);
                    serverMessage.AppendString(_room.RoomData.Group != null
                        ? session.GetHabbo().UserName
                        : _room.RoomData.Owner);
                    _room.SendMessage(serverMessage);
                }
            }
            else
            {
                AddOrUpdateItem(item.Id);
                if (!onRoller && sendMessage)
                {
                    if (specialMove)
                    {
                        var message = new ServerMessage(LibraryParser.OutgoingRequest("ItemAnimationMessageComposer"));
                        message.AppendInteger(oldCoord.X);
                        message.AppendInteger(oldCoord.Y);
                        message.AppendInteger(newX);
                        message.AppendInteger(newY);
                        message.AppendInteger(1);
                        message.AppendInteger(item.Id);
                        message.AppendString(TextHandling.GetString(item.Z));
                        message.AppendString(TextHandling.GetString(item.Z));
                        message.AppendInteger(-1);
                        _room.SendMessage(message);
                    }
                    else
                    {
                        var message = new ServerMessage(LibraryParser.OutgoingRequest("UpdateRoomItemMessageComposer"));
                        item.Serialize(message);
                        _room.SendMessage(message);
                    }
                }
                if (item.IsWired) _room.GetWiredHandler().MoveWired(item);
            }
            _room.GetGameMap().AddToMap(item);
            if (item.GetBaseItem().IsSeat) updateRoomUserStatuses = true;
            if (updateRoomUserStatuses)
            {
                _room.GetRoomUserManager().OnUserUpdateStatus(oldCoord.X, oldCoord.Y);
                _room.GetRoomUserManager().OnUserUpdateStatus(item.X, item.Y);
            }
            if (newItem) OnHeightMapUpdate(affectedTiles);

            return true;
        }
Exemplo n.º 13
0
        /// <summary>
        ///     Sets the wall item.
        /// </summary>
        /// <param name="session">The session.</param>
        /// <param name="item">The item.</param>
        /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
        internal bool SetWallItem(GameClient session, RoomItem item)
        {
            if (!item.IsWallItem || WallItems.ContainsKey(item.Id))
                return false;
            if (FloorItems.ContainsKey(item.Id))
                return true;
            item.Interactor.OnPlace(session, item);
            if (item.GetBaseItem().InteractionType == Interaction.Dimmer && _room.MoodlightData == null)
            {
                _room.MoodlightData = new MoodlightData(item.Id);
                item.ExtraData = _room.MoodlightData.GenerateExtraData();
            }

            WallItems.TryAdd(item.Id, item);
            AddOrUpdateItem(item.Id);

            var serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("AddWallItemMessageComposer"));
            item.Serialize(serverMessage);
            serverMessage.AppendString(_room.RoomData.Owner);
            _room.SendMessage(serverMessage);
            return true;
        }
Exemplo n.º 14
0
 /// <summary>
 ///     Sets the floor item.
 /// </summary>
 /// <param name="item">The item.</param>
 /// <param name="newX">The new x.</param>
 /// <param name="newY">The new y.</param>
 /// <param name="newZ">The new z.</param>
 /// <param name="rot">The rot.</param>
 /// <param name="sendUpdate">if set to <c>true</c> [sendupdate].</param>
 /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
 internal bool SetFloorItem(RoomItem item, int newX, int newY, double newZ, int rot, bool sendUpdate)
 {
     _room.GetGameMap().RemoveFromMap(item);
     item.SetState(newX, newY, newZ,
         Gamemap.GetAffectedTiles(item.GetBaseItem().Length,
             item.GetBaseItem().Width, newX, newY, rot));
     if (item.GetBaseItem().InteractionType == Interaction.RoomBg && _room.TonerData == null)
         _room.TonerData = new TonerData(item.Id);
     AddOrUpdateItem(item.Id);
     _room.GetGameMap().AddItemToMap(item);
     if (!sendUpdate)
         return true;
     var message = new ServerMessage(LibraryParser.OutgoingRequest("UpdateRoomItemMessageComposer"));
     item.Serialize(message);
     _room.SendMessage(message);
     return true;
 }
Exemplo n.º 15
0
        public WebSocketServerManager(string SocketURL)
        {
            FleckLog.Level     = LogLevel.Error;
            FleckLog.LogAction = LogWebsocketException;
            allSockets         = new List <IWebSocketConnection>();
            socketbyName       = new Dictionary <string, IWebSocketConnection>();
            namebySocket       = new Dictionary <IWebSocketConnection, string>();
            server             = new WebSocketServer(SocketURL);
            if (SocketURL.StartsWith("wss://"))
            {
                server.Certificate = new System.Security.Cryptography.X509Certificates.X509Certificate2("client.habbo.tl.cert.cer");
            }
            server.Start(socket =>
            {
                socket.OnOpen = () =>
                {
                    if (allSockets.Contains(socket))
                    {
                        allSockets.Remove(socket);
                    }
                    allSockets.Add(socket);
                };
                socket.OnClose = () =>
                {
                    string name = "";
                    if (namebySocket.ContainsKey(socket))
                    {
                        name = namebySocket[socket].ToString();
                        namebySocket.Remove(socket);
                    }
                    if (socketbyName.ContainsKey(name) && name != "")
                    {
                        socketbyName.Remove(name);
                    }
                    if (allSockets.Contains(socket))
                    {
                        allSockets.Remove(socket);
                    }
                    if (name != "")
                    {
                        using (DatabaseClient dbClient = Essential.GetDatabase().GetClient())
                        {
                            dbClient.AddParamWithValue("name", name);
                            dbClient.ExecuteQuery("UPDATE users SET websocket='0' WHERE username=@name");
                        }
                    }
                };
                socket.OnMessage = message =>
                {
                    var msg = message;
                    int pId = 0;
                    if (!int.TryParse(msg.Split('|')[0], out pId))
                    {
                        return;
                    }
                    if (msg.Length > 1024)
                    {
                        return;
                    }
                    if (msg.StartsWith("1|"))
                    {
                        using (DatabaseClient dbClient = Essential.GetDatabase().GetClient())
                        {
                            dbClient.AddParamWithValue("auth", msg.Substring(2));
                            DataRow drow = null;
                            drow         = dbClient.ReadDataRow("SELECT username FROM users WHERE auth_ticket= @auth LIMIT 1");
                            if (drow == null)
                            {
                                socket.Close();
                            }
                            else
                            {
                                if (socketbyName.ContainsKey((string)drow["username"]))
                                {
                                    socketbyName.Remove((string)drow["username"]);
                                }
                                socketbyName.Add(drow["username"].ToString(), socket);
                                if (namebySocket.ContainsKey(socket))
                                {
                                    namebySocket.Remove(socket);
                                }
                                namebySocket.Add(socket, drow["username"].ToString());
                                dbClient.AddParamWithValue("name", drow["username"].ToString());
                                dbClient.ExecuteQuery("UPDATE users SET websocket='1' WHERE username=@name");
                            }
                        }
                    }
                    else
                    {
                        GameClient Session = Essential.GetGame().GetClientManager().GetClientByHabbo(GetNameByWebSocket(socket));
                        Room room          = null;
                        string[] args      = msg.Split('|');
                        switch (int.Parse(args[0]))
                        {
                        case 6:
                            {
                                try
                                {
                                    room = Essential.GetGame().GetRoomManager().GetRoom(uint.Parse(args[1]));
                                    if (Session != null && room != null)
                                    {
                                        ServerMessage Message = new ServerMessage(Outgoing.RoomForward);
                                        Message.AppendBoolean(false);
                                        Message.AppendUInt(room.Id);
                                        Session.SendMessage(Message);
                                    }
                                }
                                catch { }
                                break;
                            }

                        case 7:
                            {
                                try
                                {
                                    if (Session.GetHabbo().CurrentRoom.CheckRights(Session, false))
                                    {
                                        int ItemId  = int.Parse(args[1]);
                                        double newZ = double.Parse(args[2]);
                                        RoomItem ri = Session.GetHabbo().CurrentRoom.method_28((uint)ItemId);
                                        if (ri != null && ri.GetBaseItem().InteractionType == "stackfield")
                                        {
                                            ri.setHeight(newZ);
                                            ServerMessage smg = new ServerMessage(Outgoing.ObjectUpdate);
                                            ri.Serialize(smg);
                                            Session.GetHabbo().CurrentRoom.SendMessage(smg, null);
                                        }
                                    }
                                }
                                catch { }
                                break;
                            }

                        case 10:
                            {
                                try
                                {
                                    if (Session.GetHabbo().CurrentRoom.CheckRights(Session, false))
                                    {
                                        uint itemid    = uint.Parse(args[1]);
                                        int handitemId = int.Parse(args[2]);
                                        RoomItem ri    = Session.GetHabbo().CurrentRoom.method_28(itemid);
                                        if (ri != null && ri.GetBaseItem().InteractionType == "wf_cnd_has_handitem")
                                        {
                                            ri.string_2 = handitemId.ToString();
                                            ri.UpdateState(true, false);
                                        }
                                    }
                                } catch { }
                                break;
                            }

                        case 12:
                            {
                                try
                                {
                                    if (Session.GetHabbo().CurrentRoom.CheckRights(Session, false))
                                    {
                                        uint itemid = uint.Parse(args[1]);
                                        string team = args[2];
                                        RoomItem ri = Session.GetHabbo().CurrentRoom.method_28(itemid);
                                        if (ri != null && (ri.GetBaseItem().InteractionType == "wf_cnd_actor_in_team" || ri.GetBaseItem().InteractionType == "wf_cnd_not_in_team") && Session.GetHabbo().CurrentRoom.IsValidTeam(team))
                                        {
                                            ri.string_2 = team;
                                            ri.UpdateState(true, false);
                                        }
                                    }
                                } catch { }
                                break;
                            }

                        case 14:
                            {
                                try
                                {
                                    Session.GetHabbo().CurrentRoom.method_56(Session.GetHabbo().Username).CarryItem(int.Parse(args[1]));
                                }
                                catch { }
                                break;
                            }

                        case 18:
                            {
                                if (Session.GetHabbo().CurrentRoom.CheckRights(Session, true))
                                {
                                    try
                                    {
                                        RoomItem ri      = Session.GetHabbo().CurrentRoom.method_28(uint.Parse(args[1]));
                                        string BrandData = "state" + Convert.ToChar(9) + "0";
                                        if (ri == null || ri.GetBaseItem().InteractionType != "background")
                                        {
                                            break;
                                        }
                                        BrandData = BrandData + Convert.ToChar(9) + "imageUrl" + Convert.ToChar(9) + args[2];
                                        BrandData = BrandData + Convert.ToChar(9) + "offsetX" + Convert.ToChar(9) + int.Parse(args[3]);
                                        BrandData = BrandData + Convert.ToChar(9) + "offsetY" + Convert.ToChar(9) + int.Parse(args[4]);
                                        BrandData = BrandData + Convert.ToChar(9) + "offsetZ" + Convert.ToChar(9) + int.Parse(args[5]);
                                        using (DatabaseClient class2 = Essential.GetDatabase().GetClient())
                                        {
                                            class2.AddParamWithValue("extradata", BrandData);
                                            class2.ExecuteQuery("UPDATE items_extra_data SET extra_data = @extradata WHERE item_id = '" + uint.Parse(args[1]) + "' LIMIT 1");
                                        }
                                        ri.ExtraData = BrandData;
                                        Session.GetHabbo().CurrentRoom.method_79(Session, ri, ri.GetX, ri.Int32_1, ri.int_3, false, false, true);
                                        ri.UpdateState(true, false, true);
                                    }
                                    catch (Exception ex) { Core.Logging.LogException(ex.ToString()); }
                                }
                                break;
                            }

                        case 19:
                            {
                                if (Session.GetHabbo().CurrentRoom.CheckRights(Session, true))
                                {
                                    try
                                    {
                                        RoomItem ri = Session.GetHabbo().CurrentRoom.method_28(uint.Parse(args[1]));
                                        if (ri != null && ri.GetBaseItem().InteractionType == "badge_display")
                                        {
                                            string Badge = Session.GetHabbo().GetBadgeComponent().HasBadge(args[2]) ? args[2] : "null";
                                            ri.ExtraData = Badge;
                                            using (DatabaseClient class2 = Essential.GetDatabase().GetClient())
                                            {
                                                class2.AddParamWithValue("extradata", Badge);
                                                class2.ExecuteQuery("UPDATE items_extra_data SET extra_data = @extradata WHERE item_id = '" + uint.Parse(args[1]) + "' LIMIT 1");
                                            }
                                            Session.GetHabbo().CurrentRoom.method_79(Session, ri, ri.GetX, ri.Int32_1, ri.int_3, false, false, true);
                                            ri.UpdateState(true, false, true);
                                        }
                                    }
                                    catch { }
                                }
                                break;
                            }

                        case 21:
                            {
                                if (Session.GetHabbo().CurrentRoom.CheckRights(Session, true))
                                {
                                    try
                                    {
                                        RoomItem ri = Session.GetHabbo().CurrentRoom.method_28(uint.Parse(args[1]));
                                        if (ri != null && ri.GetBaseItem().InteractionType == "wf_act_bot_follow_avatar")
                                        {
                                            string username   = args[2];
                                            int timeinseconds = 30;
                                            if (int.TryParse(args[3], out timeinseconds))
                                            {
                                                RoomUser bot = null;
                                                foreach (RoomUser ru in Session.GetHabbo().CurrentRoom.RoomUsers)
                                                {
                                                    if (ru != null && ru.IsBot && !ru.IsPet && ru.RoomBot.Name == username)
                                                    {
                                                        bot = ru;
                                                    }
                                                }
                                                if (bot != null)
                                                {
                                                    ri.string_2 = username + ";" + timeinseconds;
                                                }
                                                ri.UpdateState(true, false);
                                            }
                                        }
                                    }
                                    catch { }
                                }
                                break;
                            }

                        case 23:
                            {
                                if (Session.GetHabbo().CurrentRoom.CheckRights(Session, true))
                                {
                                    try
                                    {
                                        RoomItem ri = Session.GetHabbo().CurrentRoom.method_28(uint.Parse(args[1]));
                                        if (ri != null && ri.GetBaseItem().InteractionType == "wf_act_bot_give_handitem")
                                        {
                                            int itemId = 0;
                                            if (int.TryParse(args[2], out itemId))
                                            {
                                                string username = args[3];
                                                RoomUser bot    = null;
                                                foreach (RoomUser ru in Session.GetHabbo().CurrentRoom.RoomUsers)
                                                {
                                                    if (ru != null && ru.IsBot && !ru.IsPet && ru.RoomBot.Name == username)
                                                    {
                                                        bot = ru;
                                                    }
                                                }
                                                if (bot != null)
                                                {
                                                    ri.string_2 = itemId + ";" + username;
                                                }
                                                ri.UpdateState(true, false);
                                            }
                                        }
                                    }
                                    catch { }
                                }
                                break;
                            }

                        case 25:
                            {
                                if (Session.GetHabbo().CurrentRoom.CheckRights(Session, true))
                                {
                                    try
                                    {
                                        RoomItem ri = Session.GetHabbo().CurrentRoom.method_28(uint.Parse(args[1]));
                                        if (ri != null && ri.GetBaseItem().InteractionType == "wf_act_bot_talk" && args[4].Length < 200)
                                        {
                                            string username = args[2];
                                            string type     = (args[3] == "shout" || args[3] == "say") ? args[3] : "say";
                                            string text     = args[4];
                                            RoomUser bot    = null;
                                            foreach (RoomUser ru in Session.GetHabbo().CurrentRoom.RoomUsers)
                                            {
                                                if (ru != null && ru.IsBot && !ru.IsPet && ru.RoomBot.Name == username)
                                                {
                                                    bot = ru;
                                                }
                                            }
                                            if (bot != null)
                                            {
                                                ri.string_2 = username + ";" + type + ";" + text;
                                            }
                                            ri.UpdateState(true, false);
                                        }
                                    }
                                    catch (Exception ex) { Logging.LogException(ex.ToString()); }
                                }
                                break;
                            }

                        case 26:
                            {
                                if (Session.GetHabbo().CurrentRoom.CheckRights(Session, true))
                                {
                                    try
                                    {
                                        RoomItem ri = Session.GetHabbo().CurrentRoom.method_28(uint.Parse(args[1]));
                                        if (ri != null && ri.GetBaseItem().InteractionType == "wf_act_bot_talk_to_avatar" && args[4].Length < 200)
                                        {
                                            string username = args[2];
                                            string type     = (args[3] == "whisper" || args[3] == "say") ? args[3] : "say";
                                            string text     = args[4];
                                            RoomUser bot    = null;
                                            foreach (RoomUser ru in Session.GetHabbo().CurrentRoom.RoomUsers)
                                            {
                                                if (ru != null && ru.IsBot && !ru.IsPet && ru.RoomBot.Name == username)
                                                {
                                                    bot = ru;
                                                }
                                            }
                                            if (bot != null)
                                            {
                                                ri.string_2 = username + ";" + type + ";" + text;
                                            }
                                            ri.UpdateState(true, false);
                                        }
                                    }
                                    catch (Exception ex) { Logging.LogException(ex.ToString()); }
                                }
                                break;
                            }

                        case 28:
                            {
                                if (Session.GetHabbo().CurrentRoom.CheckRights(Session, true))
                                {
                                    try
                                    {
                                        RoomItem ri = Session.GetHabbo().CurrentRoom.method_28(uint.Parse(args[1]));
                                        if (ri != null && ri.GetBaseItem().InteractionType == "wf_act_bot_clothes")
                                        {
                                            string username = args[2];
                                            string newlook  = args[3];
                                            string gender   = args[4];
                                            RoomUser bot    = null;
                                            foreach (RoomUser ru in Session.GetHabbo().CurrentRoom.RoomUsers)
                                            {
                                                if (ru != null && ru.IsBot && !ru.IsPet && ru.RoomBot.Name == username)
                                                {
                                                    bot = ru;
                                                }
                                            }
                                            if (bot != null && AntiMutant.ValidateLook(newlook, gender))
                                            {
                                                ri.string_2 = username + ";" + newlook + ";" + gender;
                                            }
                                            ri.UpdateState(true, false);
                                        }
                                    }
                                    catch { }
                                }
                                break;
                            }

                        case 32:
                            {
                                if (Session.GetHabbo().CurrentRoom.CheckRights(Session, true))
                                {
                                    try
                                    {
                                        RoomItem ri = Session.GetHabbo().CurrentRoom.method_28(uint.Parse(args[1]));
                                        if (ri != null && ri.GetBaseItem().InteractionType == "wf_act_yt")
                                        {
                                            string ytlink = args[2].Split('=')[1];
                                            ri.string_2   = ytlink;
                                            ri.UpdateState(true, false);
                                        }
                                    }
                                    catch { }
                                }
                                break;
                            }

                        case 35:
                            {
                                if (Session.GetHabbo().CurrentRoom.CheckRights(Session, true))
                                {
                                    try
                                    {
                                        RoomItem ri = Session.GetHabbo().CurrentRoom.method_28(uint.Parse(args[1]));
                                        if (ri != null && (ri.GetBaseItem().InteractionType == "wf_cnd_has_purse" || ri.GetBaseItem().InteractionType == "wf_cnd_hasnot_purse"))
                                        {
                                            string currency = Session.GetHabbo().CurrentRoom.IsValidCurrency(args[2]) ? args[2] : "credits";
                                            int number      = 1337;
                                            int.TryParse(args[3], out number);
                                            ri.string_2 = currency + ";" + number;
                                            ri.UpdateState(true, false);
                                        }
                                    }
                                    catch { }
                                }
                                break;
                            }

                        case 36:
                            {
                                if (Session.GetHabbo().CurrentRoom.CheckRights(Session, true))
                                {
                                    try
                                    {
                                        RoomItem ri = Session.GetHabbo().CurrentRoom.method_28(uint.Parse(args[1]));
                                        if (ri != null && ri.GetBaseItem().InteractionType == "wf_act_img" && IsValidFile(args[2]))
                                        {
                                            ri.string_2 = args[2];
                                            ri.UpdateState(true, false);
                                        }
                                    }
                                    catch { }
                                }
                                break;
                            }
                        }
                    }
                };
            });
        }
Exemplo n.º 16
0
		internal bool SetFloorItem(RoomItem Item, int newX, int newY, double newZ, int rot, bool sendupdate)
		{
			this.room.GetGameMap().RemoveFromMap(Item);
			Item.SetState(newX, newY, newZ, Gamemap.GetAffectedTiles(Item.GetBaseItem().InteractionType, Item.GetBaseItem().Length, Item.GetBaseItem().Width, newX, newY, rot));
			if (Item.GetBaseItem().InteractionType == InteractionType.roombg && this.room.TonerData == null)
			{
				this.room.TonerData = new TonerData(Item.Id);
			}
			this.UpdateItem(Item);
			this.room.GetGameMap().AddItemToMap(Item, true);
			if (sendupdate)
			{
				ServerMessage message = new ServerMessage(Outgoing.UpdateRoomItemMessageComposer);
				Item.Serialize(message);
				this.room.SendMessage(message);
			}
			return true;
		}
Exemplo n.º 17
0
        internal bool SetFloorItem(GameClient Session, RoomItem Item, int newX, int newY, int newRot, bool newItem, bool OnRoller, bool sendMessage, bool updateRoomUserStatuses)
        {
            bool NeedsReAdd = false;

            if (!newItem)
            {
                NeedsReAdd = room.GetGameMap().RemoveFromMap(Item);
            }
            Dictionary <int, ThreeDCoord> AffectedTiles = GameMap.GetAffectedTiles(Item.GetBaseItem().Length, Item.GetBaseItem().Width, newX, newY, newRot);

            if (!room.GetGameMap().ValidTile(newX, newY) || room.GetGameMap().SquareHasUsers(newX, newY) && !Item.GetBaseItem().IsSeat)
            {
                if (NeedsReAdd)
                {
                    AddItem(Item);
                    room.GetGameMap().AddToMap(Item);
                }
                return(false);
            }

            foreach (ThreeDCoord Tile in AffectedTiles.Values)
            {
                if (!room.GetGameMap().ValidTile(Tile.X, Tile.Y) || (room.GetGameMap().SquareHasUsers(Tile.X, Tile.Y) && !Item.GetBaseItem().IsSeat))
                {
                    if (NeedsReAdd)
                    {
                        AddItem(Item);
                        room.GetGameMap().AddToMap(Item);
                    }
                    return(false);
                }
            }

            // Start calculating new Z coordinate
            Double newZ = room.GetGameMap().Model.SqFloorHeight[newX, newY];

            if (!OnRoller)
            {
                // Is the item trying to stack on itself!?
                //if (Item.Rot == newRot && Item.GetX == newX && Item.GetY == newY && Item.GetZ != newZ)
                //{
                //    if (NeedsReAdd)
                //        AddItem(Item);
                //    return false;
                //}

                // Make sure this tile is open and there are no users here
                if (room.GetGameMap().Model.SqState[newX, newY] != SquareState.OPEN && !Item.GetBaseItem().IsSeat)
                {
                    if (NeedsReAdd)
                    {
                        AddItem(Item);
                        room.GetGameMap().AddToMap(Item);
                    }
                    return(false);
                }

                foreach (ThreeDCoord Tile in AffectedTiles.Values)
                {
                    if (room.GetGameMap().Model.SqState[Tile.X, Tile.Y] != SquareState.OPEN && !Item.GetBaseItem().IsSeat)
                    {
                        if (NeedsReAdd)
                        {
                            AddItem(Item);
                            room.GetGameMap().AddToMap(Item);
                        }
                        return(false);
                    }
                }

                // And that we have no users
                if (!Item.GetBaseItem().IsSeat&& !Item.IsRoller)
                {
                    foreach (ThreeDCoord Tile in AffectedTiles.Values)
                    {
                        if (room.GetGameMap().GetRoomUnits(new Point(Tile.X, Tile.Y)).Count > 0)
                        {
                            if (NeedsReAdd)
                            {
                                AddItem(Item);
                                room.GetGameMap().AddToMap(Item);
                            }
                            return(false);
                        }
                    }
                }
            }

            // Find affected objects
            List <RoomItem> ItemsOnTile   = GetFurniObjects(newX, newY);
            List <RoomItem> ItemsAffected = new List <RoomItem>();
            List <RoomItem> ItemsComplete = new List <RoomItem>();

            foreach (ThreeDCoord Tile in AffectedTiles.Values)
            {
                List <RoomItem> Temp = GetFurniObjects(Tile.X, Tile.Y);

                if (Temp != null)
                {
                    ItemsAffected.AddRange(Temp);
                }
            }


            ItemsComplete.AddRange(ItemsOnTile);
            ItemsComplete.AddRange(ItemsAffected);

            if (!OnRoller)
            {
                // Check for items in the stack that do not allow stacking on top of them
                foreach (RoomItem I in ItemsComplete)
                {
                    if (I == null)
                    {
                        continue;
                    }

                    if (I.Id == Item.Id)
                    {
                        continue;
                    }

                    if (I.GetBaseItem() == null)
                    {
                        continue;
                    }

                    if (!I.GetBaseItem().Stackable)
                    {
                        if (NeedsReAdd)
                        {
                            AddItem(Item);
                            room.GetGameMap().AddToMap(Item);
                        }
                        return(false);
                    }
                }
            }

            //if (!Item.IsRoller)
            {
                // If this is a rotating action, maintain item at current height
                if (Item.Rot != newRot && Item.GetX == newX && Item.GetY == newY)
                {
                    newZ = Item.GetZ;
                }

                // Are there any higher objects in the stack!?
                foreach (RoomItem I in ItemsComplete)
                {
                    if (I.Id == Item.Id)
                    {
                        continue; // cannot stack on self
                    }

                    if (I.TotalHeight > newZ)
                    {
                        newZ = I.TotalHeight;
                    }
                }
            }

            // Verify the rotation is correct
            //if (newRot != 0 && newRot != 2 && newRot != 4 && newRot != 6 && newRot != 8)
            //{
            //    newRot = 0;
            //}

            //Item.GetX = newX;
            //Item.GetY = newY;
            //Item.GetZ = newZ;


            Item.Rot = newRot;
            int oldX = Item.GetX;
            int oldY = Item.GetY;

            Item.SetState(newX, newY, newZ, AffectedTiles);

            if (!OnRoller && Session != null)
            {
                Item.Interactor.OnPlace(Session, Item);
            }


            if (newItem)
            {
                if (mFloorItems.ContainsKey(Item.Id))
                {
                    if (Session != null)
                    {
                        Session.SendNotif(LanguageLocale.GetValue("room.itemplaced"));
                    }

                    //Remove from map!!!
                    return(true);
                }

                /*else if (mFloorItems.ContainsKey(Item.Id) && Item.MagicRemove)
                 * {
                 *  RemoveFurniture(Session, Item.Id);
                 *  if (mFloorItems.ContainsKey(Item.Id))
                 *  {
                 *      Logging.WriteLine("lul?");
                 *      mFloorItems.Remove(Item.Id);
                 *  }
                 * }*/

                //using (DatabaseClient dbClient = FirewindEnvironment.GetDatabase().GetClient())
                //{
                //    dbClient.addParameter("extra_data", ((StringData)Item.data).Data);
                //    dbClient.runFastQuery("INSERT INTO room_items (id,room_id,base_item,extra_data,x,y,z,rot,wall_pos) VALUES ('" + Item.Id + "','" + RoomId + "','" + Item.BaseItem + "',@extra_data,'" + Item.GetX + "','" + Item.GetY + "','" + Item.GetZ + "','" + Item.Rot + "','')");
                //}
                //if (mRemovedItems.ContainsKey(Item.Id))
                //    mRemovedItems.Remove(Item.Id);
                //if (mAddedItems.ContainsKey(Item.Id))
                //    return false;

                //mAddedItems.Add(Item.Id, Item);

                if (Item.IsFloorItem && !mFloorItems.ContainsKey(Item.Id))
                {
                    mFloorItems.Add(Item.Id, Item);
                }
                else if (Item.IsWallItem && !mWallItems.ContainsKey(Item.Id))
                {
                    mWallItems.Add(Item.Id, Item);
                }

                AddItem(Item);

                if (sendMessage)
                {
                    ServerMessage Message = new ServerMessage(Outgoing.ObjectAdd);
                    Item.Serialize(Message, room.OwnerId);
                    Message.AppendString(room.Owner);
                    room.SendMessage(Message);
                }
            }
            else
            {
                //using (DatabaseClient dbClient = FirewindEnvironment.GetDatabase().GetClient())
                //{
                //    dbClient.runFastQuery("UPDATE room_items SET x = '" + Item.GetX + "', y = '" + Item.GetY + "', z = '" + Item.GetZ + "', rot = '" + Item.Rot + "', wall_pos = '' WHERE id = '" + Item.Id + "' LIMIT 1");
                //}
                UpdateItem(Item);

                if (!OnRoller && sendMessage)
                {
                    ServerMessage Message = new ServerMessage(Outgoing.ObjectUpdate);
                    Item.Serialize(Message, room.OwnerId);
                    //Message.AppendString(room.Owner);
                    room.SendMessage(Message);
                }
            }

            if (!newItem)
            {
                room.GetWiredHandler().RemoveWiredItem(new System.Drawing.Point(oldX, oldY));

                if (WiredHandler.TypeIsWire(Item.GetBaseItem().InteractionType))
                {
                    room.GetWiredHandler().AddWire(Item, new System.Drawing.Point(newX, newY), newRot, Item.GetBaseItem().InteractionType);
                }
            }
            else
            {
                if (WiredHandler.TypeIsWire(Item.GetBaseItem().InteractionType))
                {
                    room.GetWiredHandler().AddWire(Item, Item.Coordinate, newRot, Item.GetBaseItem().InteractionType);
                }
            }

            //GenerateMaps(false);
            room.GetGameMap().AddToMap(Item);

            if (Item.GetBaseItem().IsSeat)
            {
                updateRoomUserStatuses = true;
            }

            if (updateRoomUserStatuses)
            {
                room.GetRoomUserManager().UpdateUserStatuses();
            }

            return(true);
        }
Exemplo n.º 18
0
        internal bool SetFloorItem(GameClient Session, RoomItem Item, int newX, int newY, int newRot, bool newItem, bool OnRoller, bool sendMessage, bool updateRoomUserStatuses)
        {
            bool NeedsReAdd = false;
            if (!newItem)
                NeedsReAdd = room.GetGameMap().RemoveFromMap(Item);
            Dictionary<int, ThreeDCoord> AffectedTiles = Gamemap.GetAffectedTiles(Item.GetBaseItem().Length, Item.GetBaseItem().Width, newX, newY, newRot);

            if (!room.GetGameMap().ValidTile(newX, newY) || (room.GetGameMap().SquareHasUsers(newX, newY) && !(Item.GetBaseItem().IsSeat || Item.GetBaseItem().Walkable)))
            {
                if (NeedsReAdd)
                {
                    AddItem(Item);
                    room.GetGameMap().AddToMap(Item);
                }
                return false;
            }

            foreach (ThreeDCoord Tile in AffectedTiles.Values)
            {
                if (!room.GetGameMap().ValidTile(Tile.X, Tile.Y) || (room.GetGameMap().SquareHasUsers(newX, newY) && !(Item.GetBaseItem().IsSeat || Item.GetBaseItem().Walkable))) //|| room.GetGameMap().SquareHasUsers(Tile.X, Tile.Y)
                {
                    if (NeedsReAdd)
                    {
                        AddItem(Item);
                        room.GetGameMap().AddToMap(Item);
                    }
                    return false;
                }
            }

            // Start calculating new Z coordinate
            Double newZ = room.GetGameMap().Model.SqFloorHeight[newX, newY];

            if (!OnRoller)
            {
                // Is the item trying to stack on itself!?
                //if (Item.Rot == newRot && Item.GetX == newX && Item.GetY == newY && Item.GetZ != newZ)
                //{
                //    if (NeedsReAdd)
                //        AddItem(Item);
                //    return false;
                //}

                // Make sure this tile is open and there are no users here
                if (room.GetGameMap().Model.SqState[newX, newY] != SquareState.OPEN)
                {
                    if (NeedsReAdd)
                    {
                        AddItem(Item);
                        room.GetGameMap().AddToMap(Item);
                    }
                    return false;
                }

                foreach (ThreeDCoord Tile in AffectedTiles.Values)
                {
                    if (room.GetGameMap().Model.SqState[Tile.X, Tile.Y] != SquareState.OPEN)
                    {
                        if (NeedsReAdd)
                        {
                            AddItem(Item);
                            room.GetGameMap().AddToMap(Item);
                        }
                        return false;
                    }
                }

                // And that we have no users
                if (!Item.GetBaseItem().IsSeat && !Item.IsRoller)
                {
					int coord;
                    foreach (ThreeDCoord Tile in AffectedTiles.Values)
                    {
						coord = TextHandling.CombineXYCoord(Tile.X, Tile.Y);
						if (room.GetGameMap().GetRoomUsers(ref coord).Count > 0)
                        {
                            if (NeedsReAdd)
                            {
                                AddItem(Item);
                                room.GetGameMap().AddToMap(Item);
                            }
                            return false;
                        }
                    }
                }
            }

            // Find affected objects
            List<RoomItem> ItemsOnTile = GetFurniObjects(newX, newY);
            List<RoomItem> ItemsAffected = new List<RoomItem>();
            List<RoomItem> ItemsComplete = new List<RoomItem>();

            foreach (ThreeDCoord Tile in AffectedTiles.Values)
            {
                List<RoomItem> Temp = GetFurniObjects(Tile.X, Tile.Y);

                if (Temp != null)
                {
                    ItemsAffected.AddRange(Temp);
                }
            }


            ItemsComplete.AddRange(ItemsOnTile);
            ItemsComplete.AddRange(ItemsAffected);

            bool containsstacktitle = false;
            bool isnotstackble = false;
            if (!OnRoller)
            {
                // Check for items in the stack that do not allow stacking on top of them
                foreach (RoomItem I in ItemsComplete)
                {
                    if (I == null)
                        continue;

                    if (I.Id == Item.Id)
                    {
                        continue;
                    }

                    if (I.GetBaseItem() == null)
                        continue;

                    if (I.GetBaseItem().InteractionType == InteractionType.magictile)
                        containsstacktitle = true;

                    if (!I.GetBaseItem().Stackable)
                    {
                        isnotstackble = true;
                    }
                }
            }

            if (isnotstackble && !containsstacktitle && Item.GetBaseItem().InteractionType != InteractionType.magictile)
            {
                if (NeedsReAdd)
                {
                    AddItem(Item);
                    room.GetGameMap().AddToMap(Item);
                }

                return false;
            }

            //if (!Item.IsRoller)
            {
                // If this is a rotating action, maintain item at current height
                if (Item.Rot != newRot && Item.GetX == newX && Item.GetY == newY)
                {
                    newZ = Item.GetZ;
                }

                double StacktitleZ = 99998;
                // Are there any higher objects in the stack!?
                foreach (RoomItem I in ItemsComplete)
                {
                    if (I.Id == Item.Id)
                    {
                        continue; // cannot stack on self
                    }

                    if (I.TotalHeight > newZ)
                    {
                        newZ = I.TotalHeight;
                    }

                    if (I.GetBaseItem().InteractionType == InteractionType.magictile)
                    {
                        StacktitleZ = I.TotalHeight;
                    }
                }

                if (StacktitleZ != 99998)
                    newZ = StacktitleZ;
            }

            // Verify the rotation is valid
            if (Item.GetBaseItem().InteractionType == InteractionType.mannequin)
            {
                if (newRot < 0 || newRot > 12) 
                    newRot = 0;
            }
            else
            {
                if (newRot < 0 || newRot > 12 || newRot % 2 != 0)
                    newRot = 0;
            }

            //Item.GetX = newX;
            //Item.GetY = newY;
            //Item.GetZ = newZ;


            Item.Rot = newRot;
            int oldX = Item.GetX;
            int oldY = Item.GetY;
            Item.SetState(newX, newY, newZ, AffectedTiles);

            if (!OnRoller && Session != null)
                Item.Interactor.OnPlace(Session, Item);


            if (newItem)
            {
                if (mFloorItems.ContainsKey(Item.Id))
                {
                    if (Session != null)
                        Session.SendNotif("Oeps! Er is iets mis gegaan, probeer het opnieuw!\r\r<b>Beschrijving:</b>\rJe hebt dit Meubi al eerder in je kamer geplaatst.");

                    return true;
                }

                if (Item.IsFloorItem && !mFloorItems.ContainsKey(Item.Id))
                    mFloorItems.Add(Item.Id, Item);
                else if (Item.IsWallItem && !mWallItems.ContainsKey(Item.Id))
                    mWallItems.Add(Item.Id, Item);

                AddItem(Item);

                if (sendMessage)
                {
                    ServerMessage Message = PacketHandelingManager.GetRecycledItem(OutputCode.ObjectAddMessageEvent);
                    Item.Serialize(Message);
                    Message.AddString(room.Owner);
                    room.SendMessage(Message);
                }
            }
            else
            {
                UpdateItem(Item);

                if (!OnRoller && sendMessage)
                {
                    ServerMessage Message = PacketHandelingManager.GetRecycledItem(OutputCode.ObjectUpdateMessageEvent);
                    Item.Serialize(Message);
                    room.SendMessage(Message);
                }
            }
            if (Item.wiredCondition != null)
            {
                room.GetWiredHandler().conditionHandler.AddOrIgnoreRefferance(Item);
            }
            if (!newItem)
            {
                room.GetWiredHandler().RemoveWiredItem(new Point(oldX, oldY));

                if (WiredHandler.TypeIsWire(Item.GetBaseItem().InteractionType))
                {
                    room.GetWiredHandler().AddWire(Item, new Point(newX, newY), newRot, Item.GetBaseItem().InteractionType);
                }
            }
            else
            {
                if (WiredHandler.TypeIsWire(Item.GetBaseItem().InteractionType))
                {
                    room.GetWiredHandler().AddWire(Item, Item.Coordinate, newRot, Item.GetBaseItem().InteractionType);
                }
            }

            //GenerateMaps(false);
            room.GetGameMap().AddToMap(Item);

            if (updateRoomUserStatuses)
                room.GetRoomUserManager().UpdateUserStatusses();

            return true;
        }
Exemplo n.º 19
0
        internal void PlaceBuildersFurniture()
        {
            Request.GetInteger();
            var itemId = Convert.ToUInt32(Request.GetInteger());
            var extradata = Request.GetString();
            var x = Request.GetInteger();
            var y = Request.GetInteger();
            var dir = Request.GetInteger();
            var actualRoom = Session.GetHabbo().CurrentRoom;
            var item = AzureEmulator.GetGame().GetCatalog().GetItem(itemId);
            if (actualRoom == null || item == null)
                return;
            Session.GetHabbo().BuildersItemsUsed++;
            BuildersClubUpdateFurniCount();
            var z = actualRoom.GetGameMap().SqAbsoluteHeight(x, y);
            using (var adapter = AzureEmulator.GetDatabaseManager().GetQueryReactor())
            {
                adapter.SetQuery(
                    "INSERT INTO items_rooms (user_id,room_id,base_item,x,y,z,rot,builders) VALUES (@userId,@roomId,@baseItem,@x,@y,@z,@rot,'1')");
                adapter.AddParameter("userId", Session.GetHabbo().Id);
                adapter.AddParameter("roomId", actualRoom.RoomId);
                adapter.AddParameter("baseItem", item.BaseId);
                adapter.AddParameter("x", x);
                adapter.AddParameter("y", y);
                adapter.AddParameter("z", z);
                adapter.AddParameter("rot", dir);
                var insertId = (uint)adapter.InsertQuery();
                var newItem = new RoomItem(insertId, actualRoom.RoomId, item.BaseId, extradata, x, y, z, dir, actualRoom,
                    Session.GetHabbo().Id, 0, item.GetFirstBaseItem().FlatId, "", true);
                Session.GetHabbo().BuildersItemsUsed++;

                actualRoom.GetRoomItemHandler().FloorItems.TryAdd(newItem.Id, newItem);

                var message = new ServerMessage(LibraryParser.OutgoingRequest("AddFloorItemMessageComposer"));
                newItem.Serialize(message);
                message.AppendString(Session.GetHabbo().UserName);
                actualRoom.SendMessage(message);
                actualRoom.GetGameMap().AddItemToMap(newItem);
            }
        }
Exemplo n.º 20
0
        internal bool SetFloorItem(GameClient Session, RoomItem Item, int newX, int newY, int newRot, bool newItem, bool OnRoller, bool sendMessage, bool updateRoomUserStatuses)
        {
            bool NeedsReAdd = false;
            if (!newItem)
                NeedsReAdd = room.GetGameMap().RemoveFromMap(Item);
            Dictionary<int, ThreeDCoord> AffectedTiles = Gamemap.GetAffectedTiles(Item.GetBaseItem().Length, Item.GetBaseItem().Width, newX, newY, newRot);

            if (!room.GetGameMap().ValidTile(newX, newY) || room.GetGameMap().SquareHasUsers(newX, newY))
            {
                if (NeedsReAdd)
                {
                    AddItem(Item);
                    room.GetGameMap().AddToMap(Item);
                }
                return false;
            }

            foreach (ThreeDCoord Tile in AffectedTiles.Values)
            {
                if (!room.GetGameMap().ValidTile(Tile.X, Tile.Y) || room.GetGameMap().SquareHasUsers(Tile.X, Tile.Y))
                {
                    if (NeedsReAdd)
                    {
                        AddItem(Item);
                        room.GetGameMap().AddToMap(Item);
                    }
                    return false;
                }
            }

            // Start calculating new Z coordinate
            Double newZ = room.GetGameMap().Model.SqFloorHeight[newX, newY];

            if (!OnRoller)
            {
                // Is the item trying to stack on itself!?
                //if (Item.Rot == newRot && Item.GetX == newX && Item.GetY == newY && Item.GetZ != newZ)
                //{
                //    if (NeedsReAdd)
                //        AddItem(Item);
                //    return false;
                //}

                // Make sure this tile is open and there are no users here
                if (room.GetGameMap().Model.SqState[newX, newY] != SquareState.OPEN)
                {
                    if (NeedsReAdd)
                    {
                        AddItem(Item);
                        room.GetGameMap().AddToMap(Item);
                    }
                    return false;
                }

                foreach (ThreeDCoord Tile in AffectedTiles.Values)
                {
                    if (room.GetGameMap().Model.SqState[Tile.X, Tile.Y] != SquareState.OPEN)
                    {
                        if (NeedsReAdd)
                        {
                            AddItem(Item);
                            room.GetGameMap().AddToMap(Item);
                        }
                        return false;
                    }
                }

                // And that we have no users
                if (!Item.GetBaseItem().IsSeat && !Item.IsRoller)
                {
                    foreach (ThreeDCoord Tile in AffectedTiles.Values)
                    {
                        if (room.GetGameMap().GetRoomUsers(new Point(Tile.X, Tile.Y)).Count > 0)
                        {
                            if (NeedsReAdd)
                            {
                                AddItem(Item);
                                room.GetGameMap().AddToMap(Item);
                            }
                            return false;
                        }
                    }
                }
            }

            // Find affected objects
            List<RoomItem> ItemsOnTile = GetFurniObjects(newX, newY);
            List<RoomItem> ItemsAffected = new List<RoomItem>();
            List<RoomItem> ItemsComplete = new List<RoomItem>();

            foreach (ThreeDCoord Tile in AffectedTiles.Values)
            {
                List<RoomItem> Temp = GetFurniObjects(Tile.X, Tile.Y);

                if (Temp != null)
                {
                    ItemsAffected.AddRange(Temp);
                }
            }

            ItemsComplete.AddRange(ItemsOnTile);
            ItemsComplete.AddRange(ItemsAffected);

            if (!OnRoller)
            {
                // Check for items in the stack that do not allow stacking on top of them
                foreach (RoomItem I in ItemsComplete)
                {
                    if (I == null)
                        continue;

                    if (I.Id == Item.Id)
                    {
                        continue;
                    }

                    if (I.GetBaseItem() == null)
                        continue;

                    if (!I.GetBaseItem().Stackable)
                    {
                        if (NeedsReAdd)
                        {
                            AddItem(Item);
                            room.GetGameMap().AddToMap(Item);
                        }
                        return false;
                    }
                }
            }

            //if (!Item.IsRoller)
            {
                // If this is a rotating action, maintain item at current height
                if (Item.Rot != newRot && Item.GetX == newX && Item.GetY == newY)
                {
                    newZ = Item.GetZ;
                }

                // Are there any higher objects in the stack!?
                foreach (RoomItem I in ItemsComplete)
                {
                    if (I.Id == Item.Id)
                    {
                        continue; // cannot stack on self
                    }

                    if (I.TotalHeight > newZ)
                    {
                        newZ = I.TotalHeight;
                    }
                }
            }

            // Verify the rotation is correct
            if (newRot != 0 && newRot != 2 && newRot != 4 && newRot != 6 && newRot != 8)
            {
                newRot = 0;
            }

            //Item.GetX = newX;
            //Item.GetY = newY;
            //Item.GetZ = newZ;

            Item.Rot = newRot;
            int oldX = Item.GetX;
            int oldY = Item.GetY;
            Item.SetState(newX, newY, newZ, AffectedTiles);

            if (!OnRoller && Session != null)
                Item.Interactor.OnPlace(Session, Item);

            if (newItem)
            {
                if (mFloorItems.ContainsKey(Item.Id))
                {
                    if (Session != null)
                        Session.SendNotif(LanguageLocale.GetValue("room.itemplaced"));

                    //Remove from map!!!
                    return true;
                }

                //using (DatabaseClient dbClient = PiciEnvironment.GetDatabase().GetClient())
                //{
                //    dbClient.addParameter("extra_data", Item.ExtraData);
                //    dbClient.runFastQuery("INSERT INTO room_items (id,room_id,base_item,extra_data,x,y,z,rot,wall_pos) VALUES ('" + Item.Id + "','" + RoomId + "','" + Item.BaseItem + "',@extra_data,'" + Item.GetX + "','" + Item.GetY + "','" + Item.GetZ + "','" + Item.Rot + "','')");
                //}
                //if (mRemovedItems.ContainsKey(Item.Id))
                //    mRemovedItems.Remove(Item.Id);
                //if (mAddedItems.ContainsKey(Item.Id))
                //    return false;

                //mAddedItems.Add(Item.Id, Item);

                if (Item.IsFloorItem && !mFloorItems.ContainsKey(Item.Id))
                    mFloorItems.Add(Item.Id, Item);
                else if (Item.IsWallItem && !mWallItems.ContainsKey(Item.Id))
                    mWallItems.Add(Item.Id, Item);

                AddItem(Item);

                if (sendMessage)
                {
                    ServerMessage Message = new ServerMessage(93);
                    Item.Serialize(Message);
                    room.SendMessage(Message);
                }
            }
            else
            {
                //using (DatabaseClient dbClient = PiciEnvironment.GetDatabase().GetClient())
                //{
                //    dbClient.runFastQuery("UPDATE room_items SET x = '" + Item.GetX + "', y = '" + Item.GetY + "', z = '" + Item.GetZ + "', rot = '" + Item.Rot + "', wall_pos = '' WHERE id = '" + Item.Id + "' LIMIT 1");
                //}
                UpdateItem(Item);

                if (!OnRoller && sendMessage)
                {
                    ServerMessage Message = new ServerMessage(95);
                    Item.Serialize(Message);
                    room.SendMessage(Message);
                }
            }

            if (!newItem)
            {
                room.GetWiredHandler().RemoveWiredItem(new System.Drawing.Point(oldX, oldY));

                if (WiredHandler.TypeIsWire(Item.GetBaseItem().InteractionType))
                {
                    room.GetWiredHandler().AddWire(Item, new System.Drawing.Point(newX, newY), newRot, Item.GetBaseItem().InteractionType);
                }
            }
            else
            {
                if (WiredHandler.TypeIsWire(Item.GetBaseItem().InteractionType))
                {
                    room.GetWiredHandler().AddWire(Item, Item.Coordinate, newRot, Item.GetBaseItem().InteractionType);
                }
            }

            //GenerateMaps(false);
            room.GetGameMap().AddToMap(Item);

            if (updateRoomUserStatuses)
                room.GetRoomUserManager().UpdateUserStatusses();

            return true;
        }
Exemplo n.º 21
0
        internal void PlaceBuildersFurniture()
        {
            Request.GetInteger();
            uint itemId = Convert.ToUInt32(Request.GetInteger());
            string extradata = Request.GetString();
            int x = Request.GetInteger();
            int y = Request.GetInteger();
            int dir = Request.GetInteger();
            Room actualRoom = Session.GetHabbo().CurrentRoom;
            CatalogItem item = Yupi.GetGame().GetCatalog().GetItem(itemId);

            if (actualRoom == null || item == null)
                return;

            Session.GetHabbo().BuildersItemsUsed++;
            BuildersClubUpdateFurniCount();

            double z = actualRoom.GetGameMap().SqAbsoluteHeight(x, y);
            using (IQueryAdapter adapter = Yupi.GetDatabaseManager().GetQueryReactor())
            {
                adapter.SetQuery(
                    "INSERT INTO items_rooms (user_id,room_id,item_name,x,y,z,rot,builders) VALUES (@userId,@roomId,@itemName,@x,@y,@z,@rot,'1')");
                adapter.AddParameter("userId", Session.GetHabbo().Id);
                adapter.AddParameter("roomId", actualRoom.RoomId);
                adapter.AddParameter("itemName", item.BaseName);
                adapter.AddParameter("x", x);
                adapter.AddParameter("y", y);
                adapter.AddParameter("z", z);
                adapter.AddParameter("rot", dir);

                uint insertId = (uint) adapter.InsertQuery();

                RoomItem newItem = new RoomItem(insertId, actualRoom.RoomId, item.BaseName, extradata, x, y, z, dir,
                    actualRoom, Session.GetHabbo().Id, 0, string.Empty, true);

                Session.GetHabbo().BuildersItemsUsed++;

                actualRoom.GetRoomItemHandler().FloorItems.TryAdd(newItem.Id, newItem);

                ServerMessage message = new ServerMessage(LibraryParser.OutgoingRequest("AddFloorItemMessageComposer"));
                newItem.Serialize(message);
                message.AppendString(Session.GetHabbo().UserName);
                actualRoom.SendMessage(message);
                actualRoom.GetGameMap().AddItemToMap(newItem);
            }
        }
Exemplo n.º 22
0
        internal void PlaceItem()
        {
            // AZ@J16 10 10 0

            Room Room = FirewindEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);

            if (Room == null || !Room.CheckRights(Session))
            {
                return;
            }

            string PlacementData = Request.ReadString();
            string[] DataBits = PlacementData.Split(' ');
            uint ItemId = uint.Parse(DataBits[0].Replace("-",""));

            UserItem Item = Session.GetHabbo().GetInventoryComponent().GetItem(ItemId);

            if (Item == null)
            {
                return;
            }
            //bool UpdateNeeded = false;

            switch (Item.GetBaseItem().InteractionType)
            {
                case Firewind.HabboHotel.Items.InteractionType.dimmer:
                    {
                        MoodlightData moodData = Room.MoodlightData;
                        if (moodData != null && Room.GetRoomItemHandler().GetItem(moodData.ItemId) != null)
                            Session.SendNotif(LanguageLocale.GetValue("user.maxmoodlightsreached"));
                        break;
                    }
            }

            // Wall Item
            if (DataBits[1].StartsWith(":"))
            {
                try
                {
                    WallCoordinate coordinate = new WallCoordinate(":" + PlacementData.Split(':')[1]);
                    RoomItem RoomItem = new RoomItem(Item.Id, Room.RoomId, Item.BaseItem, Item.Data, Item.Extra, coordinate, Room);

                    if (Room.GetRoomItemHandler().SetWallItem(Session, RoomItem))
                    {
                        Session.GetHabbo().GetInventoryComponent().RemoveItem(ItemId, true);
                    }
                }
                catch
                {
                    // Invalid wallitem
                    /*
                    Response.Init(516);
                    Response.AppendInt32(11);
                    SendResponse();*/
                    return;
                }
            }
            // Floor Item
            else
            {
                int X = int.Parse(DataBits[1]);
                int Y = int.Parse(DataBits[2]);
                int Rot = int.Parse(DataBits[3]);

                if (Session.GetHabbo().forceRot > -1)
                    Rot = Session.GetHabbo().forceRot;

                RoomItem RoomItem = new RoomItem(Item.Id, Room.RoomId, Item.BaseItem, Item.Data, Item.Extra, X, Y, 0, Rot, Room);

                if (Room.GetRoomItemHandler().SetFloorItem(Session, RoomItem, X, Y, Rot, true, false, true))
                {
                    Session.GetHabbo().GetInventoryComponent().RemoveItem(ItemId, true);
                }
                else // Placing failed, tell client to put item back
                {
                    Response.Init(Outgoing.ObjectUpdate);
                    RoomItem.Serialize(Response, Room.OwnerId);
                    SendResponse();
                    return;
                }

                if (WiredUtillity.TypeIsWired(Item.GetBaseItem().InteractionType))
                {
                    WiredSaver.HandleDefaultSave(Item.Id, Room);
                }

                FirewindEnvironment.GetGame().GetQuestManager().ProgressUserQuest(Session, HabboHotel.Quests.QuestType.FURNI_PLACE);
            }
            //if (UpdateNeeded)
            //    Room.SaveFurniture();
        }
Exemplo n.º 23
0
        internal bool SetWallItem(GameClient Session, RoomItem Item)
        {
            if (!Item.IsWallItem || mWallItems.ContainsKey(Item.Id))
                return false;
            if (mFloorItems.ContainsKey(Item.Id))
            {
                Session.SendNotif("Oeps! Er is iets mis gegaan, probeer het opnieuw!\r\r<b>Beschrijving:</b>\rJe hebt dit Meubi al eerder in je kamer geplaatst.");
                return true;
            }
            Item.Interactor.OnPlace(Session, Item);

            if (Item.GetBaseItem().InteractionType == InteractionType.dimmer)
            {
                if (room.MoodlightData == null)
                {
                    room.MoodlightData = new MoodlightData(Item.Id);
                    Item.ExtraData = room.MoodlightData.GenerateExtraData();
                }
            }

            mWallItems.Add(Item.Id, Item);
            AddItem(Item);

            ServerMessage Message = PacketHandelingManager.GetRecycledItem(OutputCode.ItemWallAddMessageEvent);
            Item.Serialize(Message);
            Message.AddString(room.Owner);
            room.SendMessage(Message);

            return true;
        }
Exemplo n.º 24
0
		internal bool SetWallItem(GameClient Session, RoomItem Item)
		{
			if (!Item.IsWallItem || this.mWallItems.ContainsKey(Item.Id))
			{
				return false;
			}
			if (this.mFloorItems.ContainsKey(Item.Id))
			{
				return true;
			}
			Item.Interactor.OnPlace(Session, Item);
			if (Item.GetBaseItem().InteractionType == InteractionType.dimmer && this.room.MoodlightData == null)
			{
				this.room.MoodlightData = new MoodlightData(Item.Id);
				Item.ExtraData = this.room.MoodlightData.GenerateExtraData();
			}
			this.mWallItems.Add(Item.Id, Item);
			this.AddItem(Item);
			ServerMessage serverMessage = new ServerMessage(Outgoing.AddWallItemMessageComposer);
			Item.Serialize(serverMessage);
			serverMessage.AppendString(this.room.Owner);
			this.room.SendMessage(serverMessage);
			return true;
		}
Exemplo n.º 25
0
        internal void DeveloperSetFloorItem(GameClient session, RoomItem item)
        {
            if (FloorItems.ContainsKey(item.Id)) return;
            FloorItems.TryAdd(item.Id, item);

            AddOrUpdateItem(item.Id);

            var affectedTiles = Gamemap.GetAffectedTiles(item.GetBaseItem().Length, item.GetBaseItem().Width, item.X,
                item.Y, item.Rot);
            item.SetState(item.X, item.Y, item.Z, affectedTiles);

            var serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("AddFloorItemMessageComposer"));
            item.Serialize(serverMessage);
            serverMessage.AppendString(_room.RoomData.Group != null ? session.GetHabbo().UserName : _room.RoomData.Owner);
            _room.SendMessage(serverMessage);

            _room.GetGameMap().AddToMap(item);
        }
Exemplo n.º 26
0
        internal void PlaceBuildersWallItem()
        {
            /*var pageId = */
            Request.GetInteger();
            var itemId = Request.GetUInteger();
            var extradata = Request.GetString();
            var wallcoords = Request.GetString();
            var actualRoom = Session.GetHabbo().CurrentRoom;
            var item = AzureEmulator.GetGame().GetCatalog().GetItem(itemId);
            if (actualRoom == null || item == null) return;

            Session.GetHabbo().BuildersItemsUsed++;
            BuildersClubUpdateFurniCount();
            using (var adapter = AzureEmulator.GetDatabaseManager().GetQueryReactor())
            {
                adapter.SetQuery(
                    "INSERT INTO items_rooms (user_id,room_id,base_item,wall_pos,builders) VALUES (@userId,@roomId,@baseItem,@wallpos,'1')");
                adapter.AddParameter("userId", Session.GetHabbo().Id);
                adapter.AddParameter("roomId", actualRoom.RoomId);
                adapter.AddParameter("baseItem", item.BaseId);
                adapter.AddParameter("wallpos", wallcoords);

                var insertId = (uint)adapter.InsertQuery();
                var newItem = new RoomItem(insertId, actualRoom.RoomId, item.BaseId, extradata,
                    new WallCoordinate(wallcoords), actualRoom, Session.GetHabbo().Id, 0, item.GetFirstBaseItem().FlatId,
                    true);
                actualRoom.GetRoomItemHandler().WallItems.TryAdd(newItem.Id, newItem);
                var message = new ServerMessage(LibraryParser.OutgoingRequest("AddWallItemMessageComposer"));
                newItem.Serialize(message);
                message.AppendString(Session.GetHabbo().UserName);
                Session.SendMessage(message);
                actualRoom.GetGameMap().AddItemToMap(newItem);
            }
        }
Exemplo n.º 27
0
        internal bool SetWallItem(GameClient Session, RoomItem Item)
        {
            if (!Item.IsWallItem || mWallItems.ContainsKey(Item.Id))
                return false;
            if (mFloorItems.ContainsKey(Item.Id))
            {
                Session.SendNotif(LanguageLocale.GetValue("room.itemplaced"));
                return true;
            }
            Item.Interactor.OnPlace(Session, Item);

            if (Item.GetBaseItem().InteractionType == InteractionType.dimmer)
            {
                if (room.MoodlightData == null)
                {
                    room.MoodlightData = new MoodlightData(Item.Id);
                    Item.ExtraData = room.MoodlightData.GenerateExtraData();
                }
            }

            mWallItems.Add(Item.Id, Item);
            AddItem(Item);

            ServerMessage Message = new ServerMessage(83);
            Item.Serialize(Message);
            room.SendMessage(Message);

            return true;
        }
Exemplo n.º 28
0
		internal bool SetFloorItem(GameClient Session, RoomItem Item, int newX, int newY, int newRot, bool newItem, bool OnRoller, bool sendMessage, bool updateRoomUserStatuses)
		{
			bool flag = false;
			if (!newItem)
			{
				flag = this.room.GetGameMap().RemoveFromMap(Item);
			}
			Dictionary<int, ThreeDCoord> affectedTiles = Gamemap.GetAffectedTiles(Item.GetBaseItem().InteractionType, Item.GetBaseItem().Length, Item.GetBaseItem().Width, newX, newY, newRot);
			if (!this.room.GetGameMap().ValidTile(newX, newY) || (this.room.GetGameMap().SquareHasUsers(newX, newY) && !Item.GetBaseItem().IsSeat))
			{
				if (flag)
				{
					this.AddItem(Item);
					this.room.GetGameMap().AddToMap(Item);
				}
				return false;
			}
            
			foreach (ThreeDCoord current in affectedTiles.Values)
			{
				if (!this.room.GetGameMap().ValidTile(current.X, current.Y) || (this.room.GetGameMap().SquareHasUsers(current.X, current.Y) && !Item.GetBaseItem().IsSeat))
				{
					if (flag)
					{
						this.AddItem(Item);
						this.room.GetGameMap().AddToMap(Item);
					}
					bool result = false;
					return result;
				}
			}
			double num = (double)this.room.GetGameMap().Model.SqFloorHeight[newX, newY];
			if (!OnRoller)
			{
				if (this.room.GetGameMap().Model.SqState[newX, newY] != SquareState.OPEN && !Item.GetBaseItem().IsSeat)
				{
					if (flag)
					{
						this.AddItem(Item);
						if (newItem)
						{
							this.room.GetGameMap().AddToMap(Item);
						}
					}
					return false;
				}
				foreach (ThreeDCoord current2 in affectedTiles.Values)
				{
					if (this.room.GetGameMap().Model.SqState[current2.X, current2.Y] != SquareState.OPEN && !Item.GetBaseItem().IsSeat)
					{
						if (flag)
						{
							this.AddItem(Item);
							this.room.GetGameMap().AddToMap(Item);
						}
						bool result = false;
						return result;
					}
				}
				if (!Item.GetBaseItem().IsSeat && !Item.IsRoller)
				{
					foreach (ThreeDCoord current3 in affectedTiles.Values)
					{
						if (this.room.GetGameMap().GetRoomUsers(new Point(current3.X, current3.Y)).Count > 0)
						{
							if (flag)
							{
								this.AddItem(Item);
								this.room.GetGameMap().AddToMap(Item);
							}
							bool result = false;
							return result;
						}
					}
				}
			}
			List<RoomItem> furniObjects = this.GetFurniObjects(newX, newY);
			List<RoomItem> list = new List<RoomItem>();
			List<RoomItem> list2 = new List<RoomItem>();
			foreach (ThreeDCoord current4 in affectedTiles.Values)
			{
				List<RoomItem> furniObjects2 = this.GetFurniObjects(current4.X, current4.Y);
				if (furniObjects2 != null)
				{
					list.AddRange(furniObjects2);
				}
			}
			list2.AddRange(furniObjects);
			list2.AddRange(list);
			if (!OnRoller)
			{
				foreach (RoomItem current5 in list2)
				{
					if (current5 != null && current5.Id != Item.Id && current5.GetBaseItem() != null && !current5.GetBaseItem().Stackable)
					{
						if (flag)
						{
							this.AddItem(Item);
							this.room.GetGameMap().AddToMap(Item);
						}
						bool result = false;
						return result;
					}
				}
			}
			if (Item.Rot != newRot && Item.GetX == newX && Item.GetY == newY)
			{
				num = Item.GetZ;
			}
			foreach (RoomItem current6 in list2)
			{
				if (current6.Id != Item.Id && current6.TotalHeight > num)
				{
					num = current6.TotalHeight;
				}
			}
			if (newRot != 0 && newRot != 2 && newRot != 4 && newRot != 6 && newRot != 8 && Item.GetBaseItem().InteractionType != InteractionType.mannequin)
			{
				newRot = 0;
			}
			Item.Rot = newRot;
			int arg_47A_0 = Item.GetX;
			int arg_481_0 = Item.GetY;
			Item.SetState(newX, newY, num, affectedTiles);
			if (!OnRoller && Session != null)
			{
				Item.Interactor.OnPlace(Session, Item);
			}
			if (newItem)
			{
				if (this.mFloorItems.ContainsKey(Item.Id))
				{
					return true;
				}
				if (Item.IsFloorItem && !this.mFloorItems.ContainsKey(Item.Id))
				{
					this.mFloorItems.Add(Item.Id, Item);
				}
				else
				{
					if (Item.IsWallItem && !this.mWallItems.ContainsKey(Item.Id))
					{
						this.mWallItems.Add(Item.Id, Item);
					}
				}
				this.AddItem(Item);
				if (sendMessage)
				{
					ServerMessage serverMessage = new ServerMessage(Outgoing.AddFloorItemMessageComposer);
					Item.Serialize(serverMessage);
					if (this.room.Group != null)
					{
						serverMessage.AppendString(Session.GetHabbo().Username);
					}
					else
					{
						serverMessage.AppendString(this.room.Owner);
					}
					this.room.SendMessage(serverMessage);
                     
				}
			}
			else
			{
				this.UpdateItem(Item);
				if (!OnRoller && sendMessage)
				{
					ServerMessage message = new ServerMessage(Outgoing.UpdateRoomItemMessageComposer);
					Item.Serialize(message);
					this.room.SendMessage(message);
				}
				if (Item.IsWired)
				{
					this.room.GetWiredHandler().MoveWired(Item);
				}
			}
			this.room.GetGameMap().AddToMap(Item);
			if (Item.GetBaseItem().IsSeat)
			{
				updateRoomUserStatuses = true;
			}
			if (updateRoomUserStatuses)
			{
				this.room.GetRoomUserManager().UpdateUserStatusses();
			}
            if (newItem)
            {
                this.OnHeightmapUpdate(affectedTiles);
            }

			return true;
		}