Пример #1
0
Файл: Others.cs Проект: sgf/Yupi
        /// <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);
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
Файл: Guides.cs Проект: sgf/Yupi
        /// <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}");
        }
Пример #4
0
        /// <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);
            }
        }
Пример #5
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())
            {
                // 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));
        }
Пример #6
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);
            }
        }