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)); }
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; }
/// <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); } } }
/// <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); }
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; } } }
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); }