/// <summary> /// Adds the subscription. /// </summary> /// <param name="dayLength">Length of the day.</param> internal void AddSubscription(double dayLength) { int num = (int) Math.Round(dayLength); GameClient clientByUserId = Yupi.GetGame().GetClientManager().GetClientByUserId(_userId); DateTime target; int num2; int num3; if (_subscription != null) { target = Yupi.UnixToDateTime(_subscription.ExpireTime).AddDays(num); num2 = _subscription.ActivateTime; num3 = _subscription.LastGiftTime; } else { target = DateTime.Now.AddDays(num); num2 = Yupi.GetUnixTimeStamp(); num3 = Yupi.GetUnixTimeStamp(); } int num4 = Yupi.DateTimeToUnix(target); _subscription = new Subscription(2, num2, num4, num3); using (IQueryAdapter commitableQueryReactor = Yupi.GetDatabaseManager().GetQueryReactor()) commitableQueryReactor.RunFastQuery(string.Concat("REPLACE INTO users_subscriptions VALUES (", _userId, ", 2, ", num2, ", ", num4, ", ", num3, ");")); clientByUserId.GetHabbo().SerializeClub(); Yupi.GetGame().GetAchievementManager().TryProgressHabboClubAchievements(clientByUserId); }
/// <summary> /// Reloads the subscription. /// </summary> internal void ReloadSubscription() { using (IQueryAdapter commitableQueryReactor = Yupi.GetDatabaseManager().GetQueryReactor()) { commitableQueryReactor.SetQuery( "SELECT * FROM users_subscriptions WHERE user_id=@id AND timestamp_expire > UNIX_TIMESTAMP() ORDER BY subscription_id DESC LIMIT 1"); commitableQueryReactor.AddParameter("id", _userId); DataRow row = commitableQueryReactor.GetRow(); _subscription = row == null ? null : new Subscription((int) row[1], (int) row[2], (int) row[3], (int) row[4]); } }
/// <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()) { queryReactor.SetQuery("SELECT COUNT(auth_ticket) FROM users WHERE auth_ticket = @ticket"); queryReactor.AddParameter("ticket", sessionTicket); if (queryReactor.GetInteger() == 0) { Writer.WriteLine("The SSO key " + sessionTicket + " isn't attached", "Yupi.SSO", ConsoleColor.DarkRed); return null; } // 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()}');"); queryReactor.RunFastQuery($"SELECT COUNT(id) FROM users_stats WHERE id = {userId}"); if (queryReactor.GetInteger() == 0) queryReactor.RunFastQuery($"INSERT 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 pets_data WHERE user_id = {userId} AND room_id = 0"); 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 = petsTable.Rows.Cast<DataRow>() .ToDictionary(row => (uint) row["id"], CatalogManager.GeneratePetFromRow); 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> /// Initializes a new instance of the <see cref="SubscriptionManager" /> class. /// </summary> /// <param name="userId">The user identifier.</param> /// <param name="userData">The user data.</param> internal SubscriptionManager(uint userId, UserData userData) { _userId = userId; _subscription = userData.Subscriptions; }
/// <summary> /// Initializes a new instance of the <see cref="UserData" /> class. /// </summary> /// <param name="userId">The user identifier.</param> /// <param name="achievements">The achievements.</param> /// <param name="talents">The talents.</param> /// <param name="favouritedRooms">The favourited rooms.</param> /// <param name="ignores">The ignores.</param> /// <param name="tags">The tags.</param> /// <param name="sub">The sub.</param> /// <param name="badges">The badges.</param> /// <param name="inventory">The inventory.</param> /// <param name="effects">The effects.</param> /// <param name="friends">The friends.</param> /// <param name="requests">The requests.</param> /// <param name="rooms">The rooms.</param> /// <param name="pets">The pets.</param> /// <param name="quests">The quests.</param> /// <param name="user">The user.</param> /// <param name="bots">The bots.</param> /// <param name="relations">The relations.</param> /// <param name="suggestedPolls">The suggested polls.</param> /// <param name="miniMailCount">The mini mail count.</param> public UserData(uint userId, Dictionary<string, UserAchievement> achievements, Dictionary<int, UserTalent> talents, List<uint> favouritedRooms, List<uint> ignores, List<string> tags, Subscription sub, List<Badge> badges, List<UserItem> inventory, List<AvatarEffect> effects, Dictionary<uint, MessengerBuddy> friends, Dictionary<uint, MessengerRequest> requests, HashSet<RoomData> rooms, Dictionary<uint, Pet> pets, Dictionary<int, int> quests, Habbo user, Dictionary<uint, RoomBot> bots, Dictionary<int, Relationship> relations, HashSet<uint> suggestedPolls, uint miniMailCount) { UserId = userId; Achievements = achievements; Talents = talents; FavouritedRooms = favouritedRooms; Ignores = ignores; Tags = tags; Subscriptions = sub; Badges = badges; Inventory = inventory; Effects = effects; Friends = friends; Requests = requests; Rooms = rooms; Pets = pets; Quests = quests; User = user; Bots = bots; Relations = relations; SuggestedPolls = suggestedPolls; MiniMailCount = miniMailCount; }