示例#1
0
        public void Parse(GameClient Session, ClientPacket Packet)
        {
            int     userID = Packet.PopInt();
            Boolean IsMe   = Packet.PopBoolean();

            Habbo targetData = ButterflyEnvironment.GetHabboById(userID);

            if (targetData == null)
            {
                return;
            }

            List <Group> Groups = ButterflyEnvironment.GetGame().GetGroupManager().GetGroupsForUser(targetData.MyGroups);

            int friendCount = 0;

            if (targetData.GetMessenger() != null)
            {
                friendCount = targetData.GetMessenger().Count;
            }
            else
            {
                using (IQueryAdapter dbClient = ButterflyEnvironment.GetDatabaseManager().GetQueryReactor())
                {
                    dbClient.SetQuery("SELECT COUNT(0) FROM `messenger_friendships` WHERE (`user_one_id` = @userid);");
                    dbClient.AddParameter("userid", userID);
                    friendCount = dbClient.GetInteger();
                }
            }

            Session.SendPacket(new ProfileInformationComposer(targetData, Session, Groups, friendCount));
        }
示例#2
0
 public void UpdateValues(Habbo habbo)
 {
     this.Username         = habbo.Username;
     this.Look             = habbo.Look;
     this.Motto            = habbo.Motto;
     this.AccountCreated   = habbo.AccountCreated;
     this.AchievementScore = habbo.GetUserStats()?.AchievementPoints ?? 0;
     this.FriendsCount     = habbo.GetMessenger()?.GetFriends()?.Count ?? 0;
     this.LastOnline       = habbo.LastOnline;
     this.Lovers           = habbo.GetMessenger()?.GetFriends()?.Where(f => f.Relation == MessengerFriendRelation.Love).Select(f => f.ID).ToList() ?? UserProfile.Empty;
     this.Friends          = habbo.GetMessenger()?.GetFriends()?.Where(f => f.Relation == MessengerFriendRelation.Smile).Select(f => f.ID).ToList() ?? UserProfile.Empty;
     this.Haters           = habbo.GetMessenger()?.GetFriends()?.Where(f => f.Relation == MessengerFriendRelation.Angry).Select(f => f.ID).ToList() ?? UserProfile.Empty;
     this.Badges           = habbo.GetBadgeManager()?.GetActiveBadges().Select(b => b.BadgeID).ToList() ?? UserProfile.EmptyBadges;
 }
示例#3
0
        /// <summary>
        ///     Called when [status changed].
        /// </summary>
        /// <param name="notification">if set to <c>true</c> [notification].</param>
        internal void OnStatusChanged(bool notification)
        {
            if (Friends == null)
            {
                return;
            }

            IEnumerable <GameClient> clientsById = Yupi.GetGame().GetClientManager().GetClientsById(Friends.Keys);

            if (clientsById == null)
            {
                return;
            }

            foreach (
                GameClient current in
                clientsById.Where(
                    current => current?.GetHabbo() != null && current.GetHabbo().GetMessenger() != null))
            {
                Habbo user = current.GetHabbo();

                HabboMessenger messenger = user?.GetMessenger();

                if (messenger != null)
                {
                    messenger.UpdateFriend(_userId, current, true);

                    UpdateFriend(user.Id, current, notification);
                }
            }
        }
示例#4
0
        /// <summary>
        ///     Destroys the friendship.
        /// </summary>
        /// <param name="friendId">The friend identifier.</param>
        internal void DestroyFriendship(uint friendId)
        {
            Habbo habbo = GetClient().GetHabbo();

            Habbo habboFriend = Yupi.GetHabboById(friendId);

            if (habbo != null && habboFriend != null)
            {
                using (IQueryAdapter queryReactor = Yupi.GetDatabaseManager().GetQueryReactor())
                {
                    queryReactor.RunFastQuery(string.Concat("DELETE FROM messenger_friendships WHERE (user_one_id = ", habbo.Id, " AND user_two_id = ", habboFriend.Id, ")"));

                    queryReactor.RunFastQuery(string.Concat("SELECT id FROM users_relationships WHERE user_id = ", habbo.Id, " AND target = ", habboFriend.Id, " LIMIT 1"));

                    object integerResultUser = queryReactor.GetInteger();

                    int idUser;

                    int.TryParse(integerResultUser.ToString(), out idUser);

                    if (idUser > 0 && habbo.Relationships.ContainsKey(idUser))
                    {
                        queryReactor.RunFastQuery(string.Concat("DELETE FROM users_relationships WHERE (user_id = ", habbo.Id, " AND target = ", habboFriend.Id, ")"));

                        if (habbo.Relationships.ContainsKey(idUser))
                        {
                            habbo.Relationships.Remove(idUser);
                        }
                    }

                    queryReactor.RunFastQuery(string.Concat("DELETE FROM messenger_friendships WHERE (user_one_id = ", habboFriend.Id, " AND user_two_id = ", habbo.Id, ")"));

                    queryReactor.RunFastQuery(string.Concat("SELECT id FROM users_relationships WHERE user_id = ", habboFriend.Id, " AND target = ", habbo.Id, " LIMIT 1"));

                    object integerResultFriend = queryReactor.GetInteger();

                    int idFriend;

                    int.TryParse(integerResultFriend.ToString(), out idFriend);

                    if (idFriend > 0 && habboFriend.Relationships.ContainsKey(idFriend))
                    {
                        queryReactor.RunFastQuery(string.Concat("DELETE FROM users_relationships WHERE (user_id = ", habboFriend.Id, " AND target = ", habbo.Id, ")"));

                        if (habboFriend.Relationships.ContainsKey(idFriend))
                        {
                            habboFriend.Relationships.Remove(idFriend);
                        }
                    }
                }

                OnDestroyFriendship(habboFriend.Id);

                habboFriend.GetMessenger().OnDestroyFriendship(habbo.Id);
            }
        }
        private static void ProcessSendFriendRequest(Habbo sender, IncomingMessage message)
        {
            string username = message.PopPrefixedString();

            sender.GetMessenger()
            .SendFriendRequest(
                CoreManager.
                ServerCore.
                GetHabboDistributor().
                GetHabbo(username));
        }
        private static void ProcessRemoveFriends(Habbo sender, IncomingMessage message)
        {
            // How many friends have been deleted?
            int             amount    = message.PopWiredInt32();
            MessengerObject messenger = sender.GetMessenger();

            // Handle each one.
            for (int i = 0; i < amount; i++)
            {
                // Get the ID of the friend about to be removed.
                int friendID = message.PopWiredInt32();

                // Remove the friend from all categories.
                messenger.RemoveFriend(friendID);
            }
            messenger.SendWaitingUpdateMessage();
        }
        private static void ProcessMessengerSearch(Habbo sender, IncomingMessage message)
        {
            string searchString = message.PopPrefixedString();

            List <IHI.Database.Habbo> matching;

            // Using IHIDB.Habbo rather than IHIDB.Friend because this will be passed to the HabboDistributor
            using (ISession db = CoreManager.ServerCore.GetDatabaseSession())
            {
                matching = db.CreateCriteria <IHI.Database.Habbo>().
                           Add(new LikeExpression("username", searchString + "%")).
                           SetMaxResults(20).     // TODO: External config
                           List <IHI.Database.Habbo>() as List <IHI.Database.Habbo>;
            }

            List <IBefriendable> friends   = new List <IBefriendable>();
            List <IBefriendable> strangers = new List <IBefriendable>();

            MessengerObject  messenger        = sender.GetMessenger();
            HabboDistributor habboDistributor = CoreManager.ServerCore.GetHabboDistributor();

            foreach (IHI.Database.Habbo match in matching)
            {
                IBefriendable habbo = habboDistributor.GetHabbo(match);
                if (messenger.IsFriend(habbo))
                {
                    friends.Add(habbo);
                }
                else
                {
                    strangers.Add(habbo);
                }
            }

            new MMessengerSearchResults(friends, strangers).Send(sender);
        }
示例#8
0
        public static void Search(ServerPacket packet, SearchResultList result, string query, Habbo habbo, int limit)
        {
            if (habbo == null)
            {
                return;
            }

            switch (result.CategoryType)
            {
            default:
            case NavigatorCategoryType.MyFavourites:
            case NavigatorCategoryType.MyHistory:
            case NavigatorCategoryType.Featured:
                packet.WriteInteger(0);
                break;

            case NavigatorCategoryType.Query:
            {
                #region Query
                if (query.ToLower().StartsWith("owner:"))
                {
                    if (query.Length > 0)
                    {
                        int       UserId   = 0;
                        DataTable GetRooms = null;
                        using (IQueryAdapter dbClient = PlusEnvironment.GetDatabaseManager().GetQueryReactor())
                        {
                            if (query.ToLower().StartsWith("owner:"))
                            {
                                dbClient.SetQuery("SELECT `id` FROM `users` WHERE `username` = @username LIMIT 1");
                                dbClient.AddParameter("username", query.Remove(0, 6));
                                UserId = dbClient.GetInteger();

                                dbClient.SetQuery("SELECT * FROM `rooms` WHERE `owner` = '" + UserId + "' and `state` != 'invisible' ORDER BY `users_now` DESC LIMIT 50");
                                GetRooms = dbClient.GetTable();
                            }
                        }

                        List <RoomData> Results = new List <RoomData>();
                        if (GetRooms != null)
                        {
                            foreach (DataRow Row in GetRooms.Rows)
                            {
                                RoomData Data = null;
                                if (!RoomFactory.TryGetData(Convert.ToInt32(Row["id"]), out Data))
                                {
                                    continue;
                                }

                                if (!Results.Contains(Data))
                                {
                                    Results.Add(Data);
                                }
                            }

                            GetRooms = null;
                        }

                        packet.WriteInteger(Results.Count);
                        foreach (RoomData Data in Results.ToList())
                        {
                            RoomAppender.WriteRoom(packet, Data, Data.Promotion);
                        }

                        Results = null;
                    }
                }
                else if (query.ToLower().StartsWith("tag:"))
                {
                    query = query.Remove(0, 4);
                    ICollection <Room> TagMatches = PlusEnvironment.GetGame().GetRoomManager().SearchTaggedRooms(query);

                    packet.WriteInteger(TagMatches.Count);
                    foreach (RoomData Data in TagMatches.ToList())
                    {
                        RoomAppender.WriteRoom(packet, Data, Data.Promotion);
                    }

                    TagMatches = null;
                }
                else if (query.ToLower().StartsWith("group:"))
                {
                    query = query.Remove(0, 6);
                    ICollection <Room> GroupRooms = PlusEnvironment.GetGame().GetRoomManager().SearchGroupRooms(query);

                    packet.WriteInteger(GroupRooms.Count);
                    foreach (RoomData Data in GroupRooms.ToList())
                    {
                        RoomAppender.WriteRoom(packet, Data, Data.Promotion);
                    }

                    GroupRooms = null;
                }
                else
                {
                    if (query.Length > 0)
                    {
                        DataTable Table = null;
                        using (IQueryAdapter dbClient = PlusEnvironment.GetDatabaseManager().GetQueryReactor())
                        {
                            dbClient.SetQuery("SELECT `id`,`caption`,`description`,`roomtype`,`owner`,`state`,`category`,`users_now`,`users_max`,`model_name`,`score`,`allow_pets`,`allow_pets_eat`,`room_blocking_disabled`,`allow_hidewall`,`password`,`wallpaper`,`floor`,`landscape`,`floorthick`,`wallthick`,`mute_settings`,`kick_settings`,`ban_settings`,`chat_mode`,`chat_speed`,`chat_size`,`trade_settings`,`group_id`,`tags`,`push_enabled`,`pull_enabled`,`enables_enabled`,`respect_notifications_enabled`,`pet_morphs_allowed`,`spush_enabled`,`spull_enabled`,`sale_price` FROM rooms WHERE `caption` LIKE @query ORDER BY `users_now` DESC LIMIT 50");
                            dbClient.AddParameter("query", query + "%");
                            Table = dbClient.GetTable();
                        }

                        List <RoomData> Results = new List <RoomData>();
                        if (Table != null)
                        {
                            foreach (DataRow Row in Table.Rows)
                            {
                                if (Convert.ToString(Row["state"]) == "invisible")
                                {
                                    continue;
                                }

                                RoomData Data = null;
                                if (!RoomFactory.TryGetData(Convert.ToInt32(Row["id"]), out Data))
                                {
                                    continue;
                                }

                                if (!Results.Contains(Data))
                                {
                                    Results.Add(Data);
                                }
                            }

                            Table = null;
                        }

                        packet.WriteInteger(Results.Count);
                        foreach (RoomData Data in Results.ToList())
                        {
                            RoomAppender.WriteRoom(packet, Data, Data.Promotion);
                        }

                        Results = null;
                    }
                }
                #endregion

                break;
            }

            case NavigatorCategoryType.Popular:
            {
                List <Room> PopularRooms = PlusEnvironment.GetGame().GetRoomManager().GetPopularRooms(-1, limit);

                packet.WriteInteger(PopularRooms.Count);
                foreach (RoomData Data in PopularRooms.ToList())
                {
                    RoomAppender.WriteRoom(packet, Data, Data.Promotion);
                }

                PopularRooms = null;
                break;
            }

            case NavigatorCategoryType.Recommended:
            {
                List <Room> RecommendedRooms = PlusEnvironment.GetGame().GetRoomManager().GetRecommendedRooms(limit);

                packet.WriteInteger(RecommendedRooms.Count);
                foreach (RoomData Data in RecommendedRooms.ToList())
                {
                    RoomAppender.WriteRoom(packet, Data, Data.Promotion);
                }

                RecommendedRooms = null;
                break;
            }

            case NavigatorCategoryType.Category:
            {
                List <Room> GetRoomsByCategory = PlusEnvironment.GetGame().GetRoomManager().GetRoomsByCategory(result.Id, limit);

                packet.WriteInteger(GetRoomsByCategory.Count);
                foreach (RoomData Data in GetRoomsByCategory.ToList())
                {
                    RoomAppender.WriteRoom(packet, Data, Data.Promotion);
                }

                GetRoomsByCategory = null;
                break;
            }

            case NavigatorCategoryType.MyRooms:
            {
                ICollection <RoomData> rooms = RoomFactory.GetRoomsDataByOwnerSortByName(habbo.Id).OrderByDescending(x => x.UsersNow).ToList();

                packet.WriteInteger(rooms.Count);
                foreach (RoomData Data in rooms.ToList())
                {
                    RoomAppender.WriteRoom(packet, Data, Data.Promotion);
                }

                break;
            }

            case NavigatorCategoryType.MyGroups:
            {
                List <RoomData> MyGroups = new List <RoomData>();

                foreach (Group Group in PlusEnvironment.GetGame().GetGroupManager().GetGroupsForUser(habbo.Id).ToList())
                {
                    if (Group == null)
                    {
                        continue;
                    }

                    RoomData Data = null;
                    if (!RoomFactory.TryGetData(Group.RoomId, out Data))
                    {
                        continue;
                    }

                    if (!MyGroups.Contains(Data))
                    {
                        MyGroups.Add(Data);
                    }
                }

                MyGroups = MyGroups.Take(limit).ToList();

                packet.WriteInteger(MyGroups.Count);
                foreach (RoomData Data in MyGroups.ToList())
                {
                    RoomAppender.WriteRoom(packet, Data, Data.Promotion);
                }

                MyGroups = null;

                break;
            }

            case NavigatorCategoryType.MyFriendsRooms:
            {
                List <int> RoomIds = new List <int>();

                if (habbo == null || habbo.GetMessenger() == null || habbo.GetMessenger().GetFriends() == null)
                {
                    return;
                }

                foreach (MessengerBuddy buddy in habbo.GetMessenger().GetFriends().Where(p => p.InRoom))
                {
                    if (buddy == null || !buddy.InRoom || buddy.UserId == habbo.Id)
                    {
                        continue;
                    }

                    if (!RoomIds.Contains(buddy.CurrentRoom.Id))
                    {
                        RoomIds.Add(buddy.CurrentRoom.Id);
                    }
                }

                List <Room> MyFriendsRooms = PlusEnvironment.GetGame().GetRoomManager().GetRoomsByIds(RoomIds.ToList());

                packet.WriteInteger(MyFriendsRooms.Count);
                foreach (RoomData Data in MyFriendsRooms.ToList())
                {
                    RoomAppender.WriteRoom(packet, Data, Data.Promotion);
                }

                MyFriendsRooms = null;
                break;
            }

            case NavigatorCategoryType.MyRights:
            {
                List <RoomData> MyRights = new List <RoomData>();

                if (habbo != null)
                {
                    DataTable GetRights = null;
                    using (IQueryAdapter dbClient = PlusEnvironment.GetDatabaseManager().GetQueryReactor())
                    {
                        dbClient.SetQuery("SELECT `room_id` FROM `room_rights` WHERE `user_id` = @UserId LIMIT @FetchLimit");
                        dbClient.AddParameter("UserId", habbo.Id);
                        dbClient.AddParameter("FetchLimit", limit);
                        GetRights = dbClient.GetTable();

                        foreach (DataRow Row in GetRights.Rows)
                        {
                            RoomData Data = null;
                            if (!RoomFactory.TryGetData(Convert.ToInt32(Row["room_id"]), out Data))
                            {
                                continue;
                            }

                            if (!MyRights.Contains(Data))
                            {
                                MyRights.Add(Data);
                            }
                        }
                    }
                }

                packet.WriteInteger(MyRights.Count);
                foreach (RoomData Data in MyRights.ToList())
                {
                    RoomAppender.WriteRoom(packet, Data, Data.Promotion);
                }

                MyRights = null;
                break;
            }

            case NavigatorCategoryType.TopPromotions:
            {
                List <Room> GetPopularPromotions = PlusEnvironment.GetGame().GetRoomManager().GetOnGoingRoomPromotions(16, limit);

                packet.WriteInteger(GetPopularPromotions.Count);
                foreach (RoomData Data in GetPopularPromotions.ToList())
                {
                    RoomAppender.WriteRoom(packet, Data, Data.Promotion);
                }

                GetPopularPromotions = null;

                break;
            }


            case NavigatorCategoryType.PromotionCategory:
            {
                List <Room> GetPromotedRooms = PlusEnvironment.GetGame().GetRoomManager().GetPromotedRooms(result.OrderId, limit);

                packet.WriteInteger(GetPromotedRooms.Count);
                foreach (RoomData Data in GetPromotedRooms.ToList())
                {
                    RoomAppender.WriteRoom(packet, Data, Data.Promotion);
                }

                GetPromotedRooms = null;

                break;
            }
            }
        }
示例#9
0
        public void Parse(GameClient Session, ClientPacket Packet)
        {
            int Id = Packet.PopInt();

            GameClient Client = ButterflyEnvironment.GetGame().GetClientManager().GetClientByUserID(Id);

            if (Client == null || Client.GetHabbo() == null)
            {
                ServerPacket ResponseOff = new ServerPacket(ServerPacketHeader.GetRelationshipsMessageComposer);
                ResponseOff.WriteInteger(Id);
                ResponseOff.WriteInteger(0);
                Session.SendPacket(ResponseOff);
                return;
            }

            Habbo habbo = Client.GetHabbo();

            if (habbo == null || habbo.GetMessenger() == null)
            {
                ServerPacket ResponseOff = new ServerPacket(ServerPacketHeader.GetRelationshipsMessageComposer);
                ResponseOff.WriteInteger(Id);
                ResponseOff.WriteInteger(0);
                Session.SendPacket(ResponseOff);
                return;
            }

            Dictionary <int, Relationship> Loves = habbo.GetMessenger().relation.Where(x => x.Value.Type == 1).ToDictionary(item => item.Key, item => item.Value);
            Dictionary <int, Relationship> Likes = habbo.GetMessenger().relation.Where(x => x.Value.Type == 2).ToDictionary(item => item.Key, item => item.Value);
            Dictionary <int, Relationship> Hates = habbo.GetMessenger().relation.Where(x => x.Value.Type == 3).ToDictionary(item => item.Key, item => item.Value);
            int Nbrela = 0;

            if (Loves.Count > 0)
            {
                Nbrela++;
            }
            if (Likes.Count > 0)
            {
                Nbrela++;
            }
            if (Hates.Count > 0)
            {
                Nbrela++;
            }

            ServerPacket Response = new ServerPacket(ServerPacketHeader.GetRelationshipsMessageComposer);

            Response.WriteInteger(habbo.Id);
            Response.WriteInteger(Nbrela); // Count //Habbo.Relationships.Count

            if (Loves.Count > 0)
            {
                //Loves
                Response.WriteInteger(1);           //type
                Response.WriteInteger(Loves.Count); //Total personne love

                Random randlove   = new Random();
                int    useridlove = Loves.ElementAt(randlove.Next(0, Loves.Count)).Value.UserId; //Loves[randlove.Next(Loves.Count)].UserId;
                Habbo  HHablove   = ButterflyEnvironment.GetHabboById(Convert.ToInt32(useridlove));
                Response.WriteInteger(useridlove);                                               // UserId
                Response.WriteString((HHablove == null) ? "" : HHablove.Username);
                Response.WriteString((HHablove == null) ? "" : HHablove.Look);                   // look
            }
            if (Likes.Count > 0)
            {
                //Likes
                Response.WriteInteger(2);           //type
                Response.WriteInteger(Likes.Count); //Total personne Like

                Random randLikes   = new Random();
                int    useridLikes = Likes.ElementAt(randLikes.Next(0, Likes.Count)).Value.UserId; //Likes[randLikes.Next(Likes.Count)].UserId;
                Habbo  HHabLikes   = ButterflyEnvironment.GetHabboById(Convert.ToInt32(useridLikes));
                Response.WriteInteger(useridLikes);                                                // UserId
                Response.WriteString((HHabLikes == null) ? "" : HHabLikes.Username);
                Response.WriteString((HHabLikes == null) ? "" : HHabLikes.Look);                   // look
            }
            if (Hates.Count > 0)
            {
                //Hates
                Response.WriteInteger(3);           //type
                Response.WriteInteger(Hates.Count); //Total personne hates

                Random randHates   = new Random();
                int    useridHates = Hates.ElementAt(randHates.Next(0, Hates.Count)).Value.UserId; //Hates[randHates.Next(Hates.Count)].UserId;
                Habbo  HHabHates   = ButterflyEnvironment.GetHabboById(Convert.ToInt32(useridHates));
                Response.WriteInteger(useridHates);                                                // UserId
                Response.WriteString((HHabHates == null) ? "" : HHabHates.Username);
                Response.WriteString((HHabHates == null) ? "" : HHabHates.Look);                   // look
            }
            Session.SendPacket(Response);
        }