/// <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]);
            }
        }
Exemple #3
0
        /// <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;
 }
Exemple #5
0
 /// <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;
 }