/// <summary> /// Goes the name of to room by. /// </summary> internal void GoToRoomByName() { string name = Request.GetString(); uint roomId = 0; switch (name) { case "predefined_noob_lobby": roomId = Convert.ToUInt32(Yupi.GetDbConfig().DbData["noob.lobby.roomid"]); break; case "random_friending_room": List <RoomData> rooms = Yupi.GetGame().GetRoomManager().GetActiveRooms().Select(room => room.Key).Where(room => room != null && room.UsersNow > 0).ToList(); if (!rooms.Any()) { return; } if (rooms.Count() == 1) { roomId = rooms.First().Id; break; } roomId = rooms[Yupi.GetRandomNumber(0, rooms.Count())].Id; break; } if (roomId == 0) { return; } ServerMessage roomFwd = new ServerMessage(LibraryParser.OutgoingRequest("RoomForwardMessageComposer")); roomFwd.AppendInteger(roomId); Session.SendMessage(roomFwd); }
/// <summary> /// Serializes the club. /// </summary> internal void SerializeClub() { GameClient client = GetClient(); ServerMessage serverMessage = new ServerMessage(); serverMessage.Init(LibraryParser.OutgoingRequest("SubscriptionStatusMessageComposer")); serverMessage.AppendString("club_habbo"); if (client.GetHabbo().GetSubscriptionManager().HasSubscription) { double num = client.GetHabbo().GetSubscriptionManager().GetSubscription().ExpireTime; double num2 = num - Yupi.GetUnixTimeStamp(); int num3 = (int)Math.Ceiling(num2 / 86400.0); int i = (int) Math.Ceiling((Yupi.GetUnixTimeStamp() - (double)client.GetHabbo().GetSubscriptionManager().GetSubscription().ActivateTime) / 86400.0); int num4 = num3 / 31; if (num4 >= 1) { num4--; } serverMessage.AppendInteger(num3 - num4 * 31); serverMessage.AppendInteger(1); serverMessage.AppendInteger(num4); serverMessage.AppendInteger(1); serverMessage.AppendBool(true); serverMessage.AppendBool(true); serverMessage.AppendInteger(i); serverMessage.AppendInteger(i); serverMessage.AppendInteger(10); } else { serverMessage.AppendInteger(0); serverMessage.AppendInteger(0); serverMessage.AppendInteger(0); serverMessage.AppendInteger(0); serverMessage.AppendBool(false); serverMessage.AppendBool(false); serverMessage.AppendInteger(0); serverMessage.AppendInteger(0); serverMessage.AppendInteger(0); } client.SendMessage(serverMessage); ServerMessage serverMessage2 = new ServerMessage(LibraryParser.OutgoingRequest("UserClubRightsMessageComposer")); serverMessage2.AppendInteger(GetSubscriptionManager().HasSubscription ? 2 : 0); serverMessage2.AppendInteger(Rank); serverMessage2.AppendBool(Rank >= Convert.ToUInt32(Yupi.GetDbConfig().DbData["ambassador.minrank"])); client.SendMessage(serverMessage2); }
/// <summary> /// Ambassadors the alert. /// </summary> internal void AmbassadorAlert() { if (Session.GetHabbo().Rank < Convert.ToUInt32(Yupi.GetDbConfig().DbData["ambassador.minrank"])) { return; } uint userId = Request.GetUInteger(); GameClient user = Yupi.GetGame().GetClientManager().GetClientByUserId(userId); user?.SendNotif("${notification.ambassador.alert.warning.message}", "${notification.ambassador.alert.warning.title}"); }
/// <summary> /// Ambassador the alert. /// </summary> /// <param name="message">The message.</param> /// <param name="exclude">The exclude.</param> internal void AmbassadorAlert(ServerMessage message, uint exclude = 0u) { IEnumerable <GameClient> gameClients = Clients.Values.Where( x => x.GetHabbo() != null && x.GetHabbo().Rank >= Convert.ToUInt32(Yupi.GetDbConfig().DbData["ambassador.minrank"]) && x.GetHabbo().Id != exclude); foreach (GameClient current in gameClients) { current.SendMessage(message); } }
/// <summary> /// Gets the user data. /// </summary> /// <param name="sessionTicket">The session ticket.</param> /// <param name="errorCode">The error code.</param> /// <returns>UserData.</returns> internal static UserData GetUserData(string sessionTicket, out uint errorCode) { errorCode = 1; DataTable groupsTable; DataRow dataRow; DataTable achievementsTable; DataTable talentsTable; DataRow statsTable; DataTable favoritesTable; DataTable ignoresTable; DataTable tagsTable; DataRow subscriptionsRow; DataTable badgesTable; DataTable itemsTable; DataTable effectsTable; DataTable pollsTable; DataTable friendsTable; DataTable friendsRequestsTable; DataTable relationShipsTable; DataTable botsTable; DataTable questsTable; DataTable petsTable; DataTable myRoomsTable; uint userId; string userName, userLook; using (IQueryAdapter queryReactor = Yupi.GetDatabaseManager().GetQueryReactor()) { // Get User Data queryReactor.SetQuery("SELECT * FROM users WHERE auth_ticket = @ticket"); // Execute User Data Query queryReactor.AddParameter("ticket", sessionTicket); dataRow = queryReactor.GetRow(); if (dataRow == null) { return(null); } userId = (uint)dataRow["id"]; userName = dataRow["username"].ToString(); userLook = dataRow["look"].ToString(); int regDate = (int)dataRow["account_created"] == 0 ? Yupi.GetUnixTimeStamp() : (int)dataRow["account_created"]; // Check Register Date if ((int)dataRow["account_created"] == 0) { queryReactor.RunFastQuery($"UPDATE users SET account_created = {regDate} WHERE id = {userId}"); } // Disconnect if user Already Logged-in, Doesn't need check. If user isn't logged, nothing will happen. if (Yupi.GetGame().GetClientManager().GetClientByUserId(userId) != null) { Yupi.GetGame().GetClientManager().GetClientByUserId(userId)?.Disconnect("User connected in other place"); } // Update User statusses queryReactor.RunFastQuery($"UPDATE users SET online = 1 WHERE id = {userId};" + $"REPLACE INTO users_info(user_id, login_timestamp) VALUES('{userId}', '{Yupi.GetUnixTimeStamp()}');" + $"REPLACE INTO users_stats (id) VALUES ('{userId}');"); // Get User Achievements Data queryReactor.SetQuery($"SELECT * FROM users_achievements WHERE user_id = {userId}"); achievementsTable = queryReactor.GetTable(); // Get User Talent Data queryReactor.SetQuery($"SELECT * FROM users_talents WHERE userid = {userId}"); talentsTable = queryReactor.GetTable(); // Get User Favorite Room queryReactor.SetQuery($"SELECT room_id FROM users_favorites WHERE user_id = {userId}"); favoritesTable = queryReactor.GetTable(); // Get User Ignored Users queryReactor.SetQuery($"SELECT ignore_id FROM users_ignores WHERE user_id = {userId}"); ignoresTable = queryReactor.GetTable(); // Get User Tags queryReactor.SetQuery($"SELECT tag FROM users_tags WHERE user_id = {userId}"); tagsTable = queryReactor.GetTable(); // Get User Subscriptions queryReactor.SetQuery($"SELECT * FROM users_subscriptions WHERE user_id = {userId} AND timestamp_expire > UNIX_TIMESTAMP() ORDER BY subscription_id DESC LIMIT 1"); subscriptionsRow = queryReactor.GetRow(); // Get User Badges queryReactor.SetQuery($"SELECT * FROM users_badges WHERE user_id = {userId}"); badgesTable = queryReactor.GetTable(); // Get User Inventory Items queryReactor.SetQuery($"SELECT items_rooms.*, COALESCE(items_groups.group_id, 0) AS group_id FROM items_rooms LEFT OUTER JOIN items_groups ON items_rooms.id = items_groups.id WHERE room_id = 0 AND user_id={userId} LIMIT 8000"); itemsTable = queryReactor.GetTable(); // Get user Effects queryReactor.SetQuery($"SELECT * FROM users_effects WHERE user_id = {userId}"); effectsTable = queryReactor.GetTable(); // Get User Polls queryReactor.SetQuery($"SELECT poll_id FROM users_polls WHERE user_id = {userId} GROUP BY poll_id;"); pollsTable = queryReactor.GetTable(); // Get User Friends queryReactor.SetQuery($"SELECT users.* FROM users JOIN messenger_friendships ON users.id = messenger_friendships.user_one_id WHERE messenger_friendships.user_two_id = {userId} UNION ALL SELECT users.* FROM users JOIN messenger_friendships ON users.id = messenger_friendships.user_two_id WHERE messenger_friendships.user_one_id = {userId}"); friendsTable = queryReactor.GetTable(); // Get User Stats queryReactor.SetQuery($"SELECT * FROM users_stats WHERE id = {userId}"); statsTable = queryReactor.GetRow(); // Get User Friends Requests queryReactor.SetQuery($"SELECT messenger_requests.*,users.* FROM users JOIN messenger_requests ON users.id = messenger_requests.from_id WHERE messenger_requests.to_id = {userId}"); friendsRequestsTable = queryReactor.GetTable(); // Get User Rooms Data queryReactor.SetQuery($"SELECT * FROM rooms_data WHERE owner = '{userId}' LIMIT 150"); myRoomsTable = queryReactor.GetTable(); // Get User Pets Data queryReactor.SetQuery($"SELECT * FROM bots_data WHERE user_id = {userId} AND room_id = 0 AND ai_type='pet'"); petsTable = queryReactor.GetTable(); // Get User Quests Data queryReactor.SetQuery($"SELECT * FROM users_quests_data WHERE user_id = {userId}"); questsTable = queryReactor.GetTable(); // Get User Bots Data queryReactor.SetQuery($"SELECT * FROM bots_data WHERE user_id = {userId} AND room_id=0 AND ai_type='generic'"); botsTable = queryReactor.GetTable(); // Get User Groups Data queryReactor.SetQuery($"SELECT * FROM groups_members WHERE user_id = {userId}"); groupsTable = queryReactor.GetTable(); // Get User Relationships Data queryReactor.SetQuery($"SELECT * FROM users_relationships WHERE user_id = {userId}"); relationShipsTable = queryReactor.GetTable(); } Dictionary <string, UserAchievement> achievements = new Dictionary <string, UserAchievement>(); foreach (DataRow row in achievementsTable.Rows) { string text = (string)row["achievement_group"]; uint level = (uint)row["achievement_level"], progress = (uint)row["user_progress"]; achievements.Add(text, new UserAchievement(text, level, progress)); } Dictionary <int, UserTalent> talents = new Dictionary <int, UserTalent>(); foreach (DataRow row in talentsTable.Rows) { int num2 = (int)row["talent_id"]; int state = (int)row["talent_state"]; talents.Add(num2, new UserTalent(num2, state)); } List <uint> favorites = favoritesTable.Rows.Cast <DataRow>().Select(row => (uint)row["room_id"]).ToList(); List <uint> ignoreUsers = ignoresTable.Rows.Cast <DataRow>().Select(row => (uint)row["ignore_id"]).ToList(); List <string> tags = tagsTable.Rows.Cast <DataRow>().Select(row => row["tag"].ToString().Replace(" ", "")).ToList(); Dictionary <uint, RoomBot> inventoryBots = botsTable.Rows.Cast <DataRow>().Select(BotManager.GenerateBotFromRow).ToDictionary(roomBot => roomBot.BotId); List <Badge> badges = badgesTable.Rows.Cast <DataRow>().Select(dataRow8 => new Badge((string)dataRow8["badge_id"], (int)dataRow8["badge_slot"])).ToList(); Subscription subscriptions = null; if (subscriptionsRow != null) { subscriptions = new Subscription((int)subscriptionsRow["subscription_id"], (int)subscriptionsRow["timestamp_activated"], (int)subscriptionsRow["timestamp_expire"], (int)subscriptionsRow["timestamp_lastgift"]); } List <UserItem> items = (from DataRow row in itemsTable.Rows let id = Convert.ToUInt32(row["id"]) let itemName = row["item_name"].ToString() where Yupi.GetGame().GetItemManager().ContainsItemByName(itemName) let extraData = !DBNull.Value.Equals(row[4]) ? (string)row[4] : string.Empty let theGroup = Convert.ToUInt32(row["group_id"]) let songCode = (string)row["songcode"] select new UserItem(id, itemName, extraData, theGroup, songCode)).ToList(); List <AvatarEffect> effects = (from DataRow row in effectsTable.Rows let effectId = (int)row["effect_id"] let totalDuration = (int)row["total_duration"] let activated = Yupi.EnumToBool((string)row["is_activated"]) let activateTimestamp = (double)row["activated_stamp"] let type = Convert.ToInt16(row["type"]) select new AvatarEffect(effectId, totalDuration, activated, activateTimestamp, type)).ToList(); HashSet <uint> pollSuggested = new HashSet <uint>(); foreach (uint pId in pollsTable.Rows.Cast <DataRow>().Select(row => (uint)row["poll_id"])) { pollSuggested.Add(pId); } Dictionary <uint, MessengerBuddy> friends = new Dictionary <uint, MessengerBuddy>(); foreach (DataRow row in friendsTable.Rows) { uint num4 = (uint)row["id"]; string pUsername = (string)row["username"]; string pLook = (string)row["look"]; string pMotto = (string)row["motto"]; bool pAppearOffline = Yupi.EnumToBool(row["hide_online"].ToString()); bool pHideInroom = Yupi.EnumToBool(row["hide_inroom"].ToString()); if (!Equals(num4, userId) && !friends.ContainsKey(num4)) { friends.Add(num4, new MessengerBuddy(num4, pUsername, pLook, pMotto, pAppearOffline, pHideInroom)); } } Dictionary <uint, MessengerRequest> friendsRequests = new Dictionary <uint, MessengerRequest>(); foreach (DataRow row in friendsRequestsTable.Rows) { uint num5 = Convert.ToUInt32(row["from_id"]); uint num6 = Convert.ToUInt32(row["to_id"]); string pUsername2 = row["username"].ToString(); string pLook = row["look"].ToString(); if (num5 != userId) { if (!friendsRequests.ContainsKey(num5)) { friendsRequests.Add(num5, new MessengerRequest(userId, num5, pUsername2, pLook)); } else if (!friendsRequests.ContainsKey(num6)) { friendsRequests.Add(num6, new MessengerRequest(userId, num6, pUsername2, pLook)); } } } HashSet <RoomData> myRooms = new HashSet <RoomData>(); foreach (DataRow row in myRoomsTable.Rows) { myRooms.Add(Yupi.GetGame().GetRoomManager().FetchRoomData((uint)row["id"], row)); } Dictionary <uint, Pet> pets = new Dictionary <uint, Pet>(); foreach (DataRow row in petsTable.Rows) { using (IQueryAdapter queryreactor3 = Yupi.GetDatabaseManager().GetQueryReactor()) { queryreactor3.SetQuery($"SELECT * FROM pets_data WHERE id = {row["id"]} LIMIT 1"); DataRow row3 = queryreactor3.GetRow(); if (row3 == null) { continue; } pets.Add((uint)row["id"], CatalogManager.GeneratePetFromRow(row, row3)); } } Dictionary <int, int> quests = new Dictionary <int, int>(); foreach (DataRow row in questsTable.Rows) { int key = (int)row["quest_id"]; int value3 = (int)row["progress"]; if (quests.ContainsKey(key)) { quests.Remove(key); } quests.Add(key, value3); } HashSet <GroupMember> groups = new HashSet <GroupMember>(); foreach (DataRow row in groupsTable.Rows) { groups.Add(new GroupMember(userId, userName, userLook, (uint)row["group_id"], Convert.ToInt16(row["rank"]), (int)row["date_join"])); } Dictionary <int, Relationship> relationShips = relationShipsTable.Rows.Cast <DataRow>().ToDictionary(row => (int)row[0], row => new Relationship((int)row[0], (int)row[2], Convert.ToInt32(row[3].ToString()))); Habbo user = HabboFactory.GenerateHabbo(dataRow, statsTable, groups); errorCode = 0; if (user.Rank >= Yupi.StaffAlertMinRank) { friends.Add(0, new MessengerBuddy(0, "Staff Chat", "hr-831-45.fa-1206-91.sh-290-1331.ha-3129-100.hd-180-2.cc-3039-73.ch-3215-92.lg-270-73", string.Empty, false, true)); } else if (user.Rank >= Convert.ToUInt32(Yupi.GetDbConfig().DbData["ambassador.minrank"])) { friends.Add(0, new MessengerBuddy(0, "Ambassador Chat", "hr-831-45.fa-1206-91.sh-290-1331.ha-3129-100.hd-180-2.cc-3039-73.ch-3215-92.lg-270-73", string.Empty, false, true)); } return(new UserData(userId, achievements, talents, favorites, ignoreUsers, tags, subscriptions, badges, items, effects, friends, friendsRequests, myRooms, pets, quests, user, inventoryBots, relationShips, pollSuggested, 0)); }
/// <summary> /// Sends the instant message. /// </summary> /// <param name="toId">To identifier.</param> /// <param name="message">The message.</param> internal void SendInstantMessage(uint toId, string message) { if (string.IsNullOrEmpty(message)) { return; } if (toId != 0) { BlackWord word; if (BlackWordsManager.Check(message, BlackWordType.Hotel, out word)) { BlackWordTypeSettings settings = word.TypeSettings; GameClient thisClient = GetClient(); if (thisClient != null) { thisClient.HandlePublicist(word.Word, message, "MESSENGER", settings); if (settings.ShowMessage) { thisClient.SendModeratorMessage("A mensagem contém a palavra: " + word.Word + " que não é permitida, você poderá ser banido!"); return; } } } } if (!FriendshipExists(toId)) { DeliverInstantMessageError(6, toId); return; } if (toId == 0) // Staff Chat { ServerMessage serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("ConsoleChatMessageComposer")); serverMessage.AppendInteger(0); //userid serverMessage.AppendString(GetClient().GetHabbo().UserName + " : " + message); serverMessage.AppendInteger(0); if (GetClient().GetHabbo().Rank >= Yupi.StaffAlertMinRank) { Yupi.GetGame().GetClientManager().StaffAlert(serverMessage, GetClient().GetHabbo().Id); } else if (GetClient().GetHabbo().Rank >= Convert.ToUInt32(Yupi.GetDbConfig().DbData["ambassador.minrank"])) { Yupi.GetGame().GetClientManager().AmbassadorAlert(serverMessage, GetClient().GetHabbo().Id); } } else { GameClient clientByUserId = Yupi.GetGame().GetClientManager().GetClientByUserId(toId); if (clientByUserId?.GetHabbo().GetMessenger() == null) { if (!Yupi.OfflineMessages.ContainsKey(toId)) { Yupi.OfflineMessages.Add(toId, new List <OfflineMessage>()); } Yupi.OfflineMessages[toId].Add(new OfflineMessage(GetClient().GetHabbo().Id, message, Yupi.GetUnixTimeStamp())); OfflineMessage.SaveMessage(Yupi.GetDatabaseManager().GetQueryReactor(), toId, GetClient().GetHabbo().Id, message); return; } if (GetClient().GetHabbo().Muted) { DeliverInstantMessageError(4, toId); return; } if (clientByUserId.GetHabbo().Muted) { DeliverInstantMessageError(3, toId); } if (message == string.Empty) { return; } clientByUserId.GetHabbo().GetMessenger().DeliverInstantMessage(message, _userId); } }