Exemple #1
0
        /// <summary>
        ///     Serializes the song inventory.
        /// </summary>
        /// <param name="songs">The songs.</param>
        /// <returns>ServerMessage.</returns>
        internal static ServerMessage SerializeSongInventory(HybridDictionary songs)
        {
            ServerMessage serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("SongsLibraryMessageComposer"));

            if (songs == null)
            {
                serverMessage.AppendInteger(0);

                return(serverMessage);
            }

            serverMessage.StartArray();

            foreach (UserItem userItem in songs.Values)
            {
                if (userItem == null)
                {
                    serverMessage.Clear();
                    continue;
                }

                serverMessage.AppendInteger(userItem.Id);

                SongData song = SoundMachineSongManager.GetSong(userItem.SongCode);
                serverMessage.AppendInteger(song?.Id ?? 0);

                serverMessage.SaveArray();
            }

            serverMessage.EndArray();
            return(serverMessage);
        }
Exemple #2
0
Fichier : Game.cs Projet : sgf/Yupi
        /// <summary>
        ///     Continues the loading.
        /// </summary>
        internal void ContinueLoading()
        {
            using (IQueryAdapter queryReactor = Yupi.GetDatabaseManager().GetQueryReactor())
            {
                int catalogPageLoaded;

                PetRace.Init(queryReactor);

                _catalog.Initialize(queryReactor, out catalogPageLoaded);

                UserChatInputFilter.Load();
                ServerSecurityChatFilter.InitSwearWord();
                BlackWordsManager.Load();
                SoundMachineSongManager.Initialize();

                ServerCpuLowPriorityWorker.Init(queryReactor);

                _roomManager.InitVotedRooms(queryReactor);

                _roomManager.LoadCompetitionManager();
            }

            StartGameLoop();

            _pixelManager.StartTimer();
        }
Exemple #3
0
 /// <summary>
 ///     Initializes a new instance of the <see cref="SongItem" /> class.
 /// </summary>
 /// <param name="item">The item.</param>
 public SongItem(UserItem item)
 {
     ItemId    = item.Id;
     SongId    = SoundMachineSongManager.GetSongId(item.SongCode);
     BaseItem  = item.BaseItem;
     ExtraData = item.ExtraData;
     SongCode  = item.SongCode;
 }
Exemple #4
0
        /// <summary>
        ///     Retrieves the song identifier.
        /// </summary>
        internal void RetrieveSongId()
        {
            string text = Request.GetString();

            uint songId = SoundMachineSongManager.GetSongId(text);

            if (songId != 0u)
            {
                ServerMessage serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("RetrieveSongIDMessageComposer"));
                serverMessage.AppendString(text);
                serverMessage.AppendInteger(songId);
                Session.SendMessage(serverMessage);
            }
        }
Exemple #5
0
        /// <summary>
        ///     Gets the music data.
        /// </summary>
        internal void GetMusicData()
        {
            int num = Request.GetInteger();

            List <SongData> list = new List <SongData>();

            for (int i = 0; i < num; i++)
            {
                SongData song = SoundMachineSongManager.GetSong(Request.GetUInteger());

                if (song != null)
                {
                    list.Add(song);
                }
            }

            Session.SendMessage(SoundMachineComposer.Compose(list));

            list.Clear();
        }
Exemple #6
0
        /// <summary>
        ///     Continues the loading.
        /// </summary>
        internal void ContinueLoading()
        {
            int catalogPageLoaded;

            GetNavigator().LoadNewPublicRooms();

            PetTypeManager.Load();

            GetCatalogManager().Init(out catalogPageLoaded);

            UserChatInputFilter.Load();
            ServerSecurityChatFilter.Load();
            BlackWordsManager.Load();
            SoundMachineSongManager.Load();
            ServerCpuLowPriorityWorker.Load();

            GetRoomManager().InitVotedRooms();

            GetRoomManager().LoadCompetitionManager();

            StartGameLoop();

            GetPixelManager().StartTimer();
        }
Exemple #7
0
        /// <summary>
        ///     Handles the purchase.
        /// </summary>
        /// <param name="session">The session.</param>
        /// <param name="pageId">The page identifier.</param>
        /// <param name="itemId">The item identifier.</param>
        /// <param name="extraData">The extra data.</param>
        /// <param name="priceAmount">The price amount.</param>
        /// <param name="isGift">if set to <c>true</c> [is gift].</param>
        /// <param name="giftUser">The gift user.</param>
        /// <param name="giftMessage">The gift message.</param>
        /// <param name="giftSpriteId">The gift sprite identifier.</param>
        /// <param name="giftLazo">The gift lazo.</param>
        /// <param name="giftColor">Color of the gift.</param>
        /// <param name="undef">if set to <c>true</c> [undef].</param>
        /// <param name="theGroup">The theGroup.</param>
        internal void HandlePurchase(GameClient session, uint pageId, uint itemId, string extraData, uint priceAmount, bool isGift, string giftUser, string giftMessage, int giftSpriteId, int giftLazo, int giftColor, bool undef, uint theGroup)
        {
            priceAmount = priceAmount < 1 || priceAmount > 100 ? 1 : priceAmount;

            uint totalPrice = priceAmount, limitedId = 0, limtot = 0;

            if (priceAmount >= 6)
            {
                totalPrice -= Convert.ToUInt32(Math.Ceiling(Convert.ToDouble(priceAmount) / 6)) * 2 - 1;
            }

            if (!Categories.Contains(pageId))
            {
                return;
            }

            CatalogPage catalogPage = GetPage(pageId);

            if (catalogPage == null || !catalogPage.Enabled || !catalogPage.Visible || session?.GetHabbo() == null)
            {
                return;
            }

            if (catalogPage.MinRank > session.GetHabbo().Rank || catalogPage.Layout == "sold_ltd_items")
            {
                return;
            }

            CatalogItem item = catalogPage.GetItem(itemId);

            if (item == null)
            {
                return;
            }

            if (session.GetHabbo().Credits < item.CreditsCost)
            {
                return;
            }

            if (session.GetHabbo().ActivityPoints < item.DucketsCost)
            {
                return;
            }

            if (session.GetHabbo().Diamonds < item.DiamondsCost)
            {
                return;
            }

            if (item.Name == "room_ad_plus_badge")
            {
                return;
            }

            #region Habbo Club Purchase
            if (catalogPage.Layout == "vip_buy" || catalogPage.Layout == "club_buy" || HabboClubItems.Contains(item))
            {
                string[] array = item.Name.Split('_');

                double dayLength;

                if (item.Name.Contains("DAY"))
                {
                    dayLength = double.Parse(array[3]);
                }
                else if (item.Name.Contains("MONTH"))
                {
                    dayLength = Math.Ceiling(double.Parse(array[3]) * 31 - 0.205);
                }
                else if (item.Name.Contains("YEAR"))
                {
                    dayLength = double.Parse(array[3]) * 31 * 12;
                }
                else
                {
                    dayLength = 31;
                }

                session.GetHabbo().GetSubscriptionManager().AddSubscription(dayLength);

                if (item.CreditsCost > 0)
                {
                    session.GetHabbo().Credits -= item.CreditsCost * totalPrice;
                    session.GetHabbo().UpdateCreditsBalance();
                }

                if (item.DucketsCost > 0)
                {
                    session.GetHabbo().ActivityPoints -= item.DucketsCost * totalPrice;
                    session.GetHabbo().UpdateActivityPointsBalance();
                }

                if (item.DiamondsCost > 0)
                {
                    session.GetHabbo().Diamonds -= item.DiamondsCost * totalPrice;
                    session.GetHabbo().UpdateSeasonalCurrencyBalance();
                }

                return;
            }
            #endregion

            #region Is Only for Habbo Club users Check
            if (item.ClubOnly && !session.GetHabbo().GetSubscriptionManager().HasSubscription)
            {
                ServerMessage serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("CatalogPurchaseNotAllowedMessageComposer"));
                serverMessage.AppendInteger(1);
                session.SendMessage(serverMessage);
                return;
            }
            #endregion

            #region Check if is a Pet. If is we have problem.

            if (item.Items.Keys.Any(current => InteractionTypes.AreFamiliar(GlobalInteractions.Pet, current.InteractionType)))
            {
                return;
            }

            #endregion

            #region Limited Items Purchase
            if (item.IsLimited)
            {
                totalPrice  = 1;
                priceAmount = 1;

                if (item.LimitedSelled >= item.LimitedStack)
                {
                    session.SendMessage(new ServerMessage(LibraryParser.OutgoingRequest("CatalogLimitedItemSoldOutMessageComposer")));
                    return;
                }

                item.LimitedSelled++;

                using (IQueryAdapter queryReactor = Yupi.GetDatabaseManager().GetQueryReactor())
                {
                    queryReactor.RunFastQuery(string.Concat("UPDATE catalog_items SET limited_sells = ", item.LimitedSelled, " WHERE id = ", item.Id));

                    limitedId = item.LimitedSelled;
                    limtot    = item.LimitedStack;
                }
            }
            else if (isGift && priceAmount > 1)
            {
                totalPrice  = 1;
                priceAmount = 1;
            }
            #endregion

            uint toUserId = 0u;

            if (session.GetHabbo().Credits < item.CreditsCost * totalPrice)
            {
                return;
            }

            if (session.GetHabbo().ActivityPoints < item.DucketsCost * totalPrice)
            {
                return;
            }

            if (session.GetHabbo().Diamonds < item.DiamondsCost * totalPrice)
            {
                return;
            }

            if (!isGift)
            {
                if (item.CreditsCost > 0)
                {
                    session.GetHabbo().Credits -= item.CreditsCost * totalPrice;
                    session.GetHabbo().UpdateCreditsBalance();
                }

                if (item.DucketsCost > 0)
                {
                    session.GetHabbo().ActivityPoints -= item.DucketsCost * totalPrice;
                    session.GetHabbo().UpdateActivityPointsBalance();
                }

                if (item.DiamondsCost > 0)
                {
                    session.GetHabbo().Diamonds -= item.DiamondsCost * totalPrice;
                    session.GetHabbo().UpdateSeasonalCurrencyBalance();
                }
            }

            foreach (Item baseItem in item.Items.Keys)
            {
                if (isGift)
                {
                    if ((DateTime.Now - session.GetHabbo().LastGiftPurchaseTime).TotalSeconds <= 15.0)
                    {
                        session.SendNotif(Yupi.GetLanguage().GetVar("user_send_gift"));
                        return;
                    }

                    if (!baseItem.AllowGift)
                    {
                        return;
                    }

                    DataRow row;

                    using (IQueryAdapter queryreactor3 = Yupi.GetDatabaseManager().GetQueryReactor())
                    {
                        queryreactor3.SetQuery("SELECT id FROM users WHERE username = @gift_user");
                        queryreactor3.AddParameter("gift_user", giftUser);
                        row = queryreactor3.GetRow();
                    }

                    if (row == null)
                    {
                        session.GetMessageHandler().GetResponse().Init(LibraryParser.OutgoingRequest("GiftErrorMessageComposer"));
                        session.GetMessageHandler().GetResponse().AppendString(giftUser);
                        session.GetMessageHandler().SendResponse();
                        return;
                    }

                    toUserId = (uint)row["id"];

                    if (toUserId == 0u)
                    {
                        session.GetMessageHandler().GetResponse().Init(LibraryParser.OutgoingRequest("GiftErrorMessageComposer"));
                        session.GetMessageHandler().GetResponse().AppendString(giftUser);
                        session.GetMessageHandler().SendResponse();
                        return;
                    }

                    if (item.CreditsCost > 0 && isGift)
                    {
                        session.GetHabbo().Credits -= item.CreditsCost * totalPrice;
                        session.GetHabbo().UpdateCreditsBalance();
                    }

                    if (item.DucketsCost > 0 && isGift)
                    {
                        session.GetHabbo().ActivityPoints -= item.DucketsCost * totalPrice;
                        session.GetHabbo().UpdateActivityPointsBalance();
                    }

                    if (item.DiamondsCost > 0 && isGift)
                    {
                        session.GetHabbo().Diamonds -= item.DiamondsCost * totalPrice;
                        session.GetHabbo().UpdateSeasonalCurrencyBalance();
                    }
                }

                if (isGift && baseItem.Type == 'e')
                {
                    session.SendNotif(Yupi.GetLanguage().GetVar("user_send_gift_effect"));
                    return;
                }

                if (item.Name.StartsWith("builders_club_addon_"))
                {
                    int furniAmount = Convert.ToInt32(item.Name.Replace("builders_club_addon_", "").Replace("furnis", ""));

                    session.GetHabbo().BuildersItemsMax += furniAmount;

                    ServerMessage update = new ServerMessage(LibraryParser.OutgoingRequest("BuildersClubMembershipMessageComposer"));

                    update.AppendInteger(session.GetHabbo().BuildersExpire);
                    update.AppendInteger(session.GetHabbo().BuildersItemsMax);
                    update.AppendInteger(2);
                    session.SendMessage(update);

                    using (IQueryAdapter queryReactor = Yupi.GetDatabaseManager().GetQueryReactor())
                    {
                        queryReactor.SetQuery("UPDATE users SET builders_items_max = @max WHERE id = @userId");
                        queryReactor.AddParameter("max", session.GetHabbo().BuildersItemsMax);
                        queryReactor.AddParameter("userId", session.GetHabbo().Id);
                        queryReactor.RunQuery();
                    }

                    session.SendMessage(CatalogPageComposer.PurchaseOk(item, item.Items));
                    session.SendNotif("${notification.builders_club.membership_extended.message}", "${notification.builders_club.membership_extended.title}", "builders_club_membership_extended");
                    return;
                }

                if (item.Name.StartsWith("builders_club_time_"))
                {
                    int timeAmount = Convert.ToInt32(item.Name.Replace("builders_club_time_", "").Replace("seconds", ""));

                    session.GetHabbo().BuildersExpire += timeAmount;

                    ServerMessage update =
                        new ServerMessage(LibraryParser.OutgoingRequest("BuildersClubMembershipMessageComposer"));

                    update.AppendInteger(session.GetHabbo().BuildersExpire);
                    update.AppendInteger(session.GetHabbo().BuildersItemsMax);
                    update.AppendInteger(2);
                    session.SendMessage(update);

                    using (IQueryAdapter queryReactor = Yupi.GetDatabaseManager().GetQueryReactor())
                    {
                        queryReactor.SetQuery("UPDATE users SET builders_expire = @max WHERE id = @userId");
                        queryReactor.AddParameter("max", session.GetHabbo().BuildersExpire);
                        queryReactor.AddParameter("userId", session.GetHabbo().Id);
                        queryReactor.RunQuery();
                    }

                    session.SendMessage(CatalogPageComposer.PurchaseOk(item, item.Items));
                    session.SendNotif("${notification.builders_club.membership_extended.message}", "${notification.builders_club.membership_extended.title}", "builders_club_membership_extended");
                    return;
                }

                string text = string.Empty;

                Interaction interactionType = baseItem.InteractionType;

                switch (interactionType)
                {
                case Interaction.None:
                case Interaction.Gate:
                case Interaction.Bed:
                case Interaction.PressurePadBed:
                case Interaction.Guillotine:
                case Interaction.HcGate:
                case Interaction.ScoreBoard:
                case Interaction.VendingMachine:
                case Interaction.Alert:
                case Interaction.OneWayGate:
                case Interaction.LoveShuffler:
                case Interaction.HabboWheel:
                case Interaction.Dice:
                case Interaction.Bottle:
                case Interaction.Hopper:
                case Interaction.Teleport:
                case Interaction.QuickTeleport:
                case Interaction.Pet:
                case Interaction.Pool:
                case Interaction.Roller:
                    break;

                case Interaction.PostIt:
                    extraData = "FFFF33";
                    break;

                case Interaction.RoomEffect:
                    double number = string.IsNullOrEmpty(extraData) ? 0.0 : double.Parse(extraData, Yupi.CultureInfo);
                    extraData = number.ToString(CultureInfo.InvariantCulture).Replace(',', '.');
                    break;

                case Interaction.Dimmer:
                    extraData = "1,1,1,#000000,255";
                    break;

                case Interaction.Trophy:
                    extraData = string.Concat(session.GetHabbo().UserName, Convert.ToChar(9),
                                              DateTime.Now.Day.ToString("00"), "-", DateTime.Now.Month.ToString("00"), "-",
                                              DateTime.Now.Year, Convert.ToChar(9), extraData);
                    break;

                case Interaction.Rentals:
                    extraData = item.ExtraData;
                    break;

                case Interaction.PetDog:
                case Interaction.PetCat:
                case Interaction.PetCrocodile:
                case Interaction.PetTerrier:
                case Interaction.PetBear:
                case Interaction.PetPig:
                case Interaction.PetLion:
                case Interaction.PetRhino:
                case Interaction.PetSpider:
                case Interaction.PetTurtle:
                case Interaction.PetChick:
                case Interaction.PetFrog:
                case Interaction.PetDragon:
                case Interaction.PetHorse:
                case Interaction.PetMonkey:
                case Interaction.PetGnomo:
                case Interaction.PetMonsterPlant:
                case Interaction.PetWhiteRabbit:
                case Interaction.PetEvilRabbit:
                case Interaction.PetLoveRabbit:
                case Interaction.PetCafeRabbit:
                case Interaction.PetPigeon:
                case Interaction.PetEvilPigeon:
                case Interaction.PetDemonMonkey:
                case Interaction.Pet24:
                case Interaction.Pet25:
                case Interaction.Pet26:
                case Interaction.Pet27:
                case Interaction.Pet28:
                case Interaction.Pet29:
                case Interaction.Pet30:
                case Interaction.Pet31:
                case Interaction.Pet32:
                case Interaction.Pet33:
                case Interaction.Pet34:
                    string[] data    = extraData.Split('\n');
                    string   petName = data[0];
                    string   race    = data[1];
                    string   color   = data[2];

                    if (!CheckPetName(petName))
                    {
                        return;
                    }
                    if (race.Length != 1 && race.Length != 2)
                    {
                        return;
                    }
                    if (color.Length != 6)
                    {
                        return;
                    }

                    Yupi.GetGame().GetAchievementManager().ProgressUserAchievement(session, "ACH_PetLover", 1);
                    break;

                case Interaction.Mannequin:
                    extraData = string.Concat("m", Convert.ToChar(5), "ch-215-92.lg-3202-1322-73", Convert.ToChar(5), "Mannequin");
                    break;

                case Interaction.VipGate:
                case Interaction.MysteryBox:
                case Interaction.YoutubeTv:
                case Interaction.TileStackMagic:
                case Interaction.Tent:
                case Interaction.BedTent:
                    break;

                case Interaction.BadgeDisplay:
                    if (!session.GetHabbo().GetBadgeComponent().HasBadge(extraData))
                    {
                        extraData = "UMAD";
                    }

                    extraData = $"{extraData}|{session.GetHabbo().UserName}|{DateTime.Now.Day.ToString("00")}-{DateTime.Now.Month.ToString("00")}-{DateTime.Now.Year}";
                    break;

                case Interaction.FootballGate:
                    extraData = "hd-99999-99999.lg-270-62;hd-99999-99999.ch-630-62.lg-695-62";
                    break;

                case Interaction.LoveLock:
                    extraData = "0";
                    break;

                case Interaction.Pinata:
                case Interaction.RunWaySage:
                case Interaction.Shower:
                    extraData = "0";
                    break;

                case Interaction.GroupForumTerminal:
                case Interaction.GuildItem:
                case Interaction.GuildGate:
                case Interaction.GuildForum:
                case Interaction.Poster:
                    break;

                case Interaction.Moplaseed:
                    extraData = new Random().Next(0, 12).ToString();
                    break;

                case Interaction.RareMoplaSeed:
                    extraData = new Random().Next(10, 12).ToString();
                    break;

                case Interaction.MusicDisc:

                    SongData song = SoundMachineSongManager.GetSongById(item.SongId);

                    extraData = string.Empty;

                    if (song == null)
                    {
                        break;
                    }

                    extraData = string.Concat(session.GetHabbo().UserName, '\n', DateTime.Now.Year, '\n', DateTime.Now.Month, '\n', DateTime.Now.Day, '\n', song.LengthSeconds, '\n', song.Name);

                    text = song.CodeName;

                    break;

                default:
                    extraData = item.ExtraData;
                    break;
                }

                session.GetMessageHandler().GetResponse().Init(LibraryParser.OutgoingRequest("UpdateInventoryMessageComposer"));

                session.GetMessageHandler().SendResponse();

                session.SendMessage(CatalogPageComposer.PurchaseOk(item, item.Items));

                if (isGift)
                {
                    Item itemBySprite = Yupi.GetGame().GetItemManager().GetItemBySpriteId(giftSpriteId);

                    if (itemBySprite == null)
                    {
                        return;
                    }

                    uint insertId;

                    using (IQueryAdapter queryReactor = Yupi.GetDatabaseManager().GetQueryReactor())
                    {
                        queryReactor.SetQuery("INSERT INTO items_rooms (item_name,user_id) VALUES (" + itemBySprite.Name + ", " + toUserId + ")");

                        insertId = (uint)queryReactor.InsertQuery();
                        queryReactor.SetQuery(string.Concat("INSERT INTO users_gifts (gift_id,item_id,extradata,giver_name,Message,ribbon,color,gift_sprite,show_sender,rare_id) VALUES (", insertId, ", ", baseItem.ItemId, ",@extradata, @name, @Message,", giftLazo, ",", giftColor, ",", giftSpriteId, ",", undef ? 1 : 0, ",", limitedId, ")"));
                        queryReactor.AddParameter("extradata", extraData);
                        queryReactor.AddParameter("name", giftUser);
                        queryReactor.AddParameter("message", giftMessage);
                        queryReactor.RunQuery();

                        if (session.GetHabbo().Id != toUserId)
                        {
                            Yupi.GetGame().GetAchievementManager().ProgressUserAchievement(session, "ACH_GiftGiver", 1, true);

                            queryReactor.RunFastQuery("UPDATE users_stats SET gifts_given = gifts_given + 1 WHERE id = " + session.GetHabbo().Id + ";UPDATE users_stats SET gifts_received = gifts_received + 1 WHERE id = " + toUserId);
                        }
                    }

                    GameClient clientByUserId = Yupi.GetGame().GetClientManager().GetClientByUserId(toUserId);

                    if (clientByUserId != null)
                    {
                        clientByUserId.GetHabbo().GetInventoryComponent().AddNewItem(insertId, itemBySprite.Name, string.Concat(session.GetHabbo().Id, (char)9, giftMessage, (char)9, giftLazo, (char)9, giftColor, (char)9, undef ? "1" : "0", (char)9, session.GetHabbo().UserName, (char)9, session.GetHabbo().Look, (char)9, item.Name), 0u, false, false, 0, 0);

                        if (clientByUserId.GetHabbo().Id != session.GetHabbo().Id)
                        {
                            Yupi.GetGame().GetAchievementManager().ProgressUserAchievement(clientByUserId, "ACH_GiftReceiver", 1, true);
                        }
                    }

                    session.GetHabbo().LastGiftPurchaseTime = DateTime.Now;

                    continue;
                }

                session.GetMessageHandler().GetResponse().Init(LibraryParser.OutgoingRequest("NewInventoryObjectMessageComposer"));

                session.GetMessageHandler().GetResponse().AppendInteger(1);

                int i = 1;

                if (baseItem.Type == 's')
                {
                    i = InteractionTypes.AreFamiliar(GlobalInteractions.Pet, baseItem.InteractionType) ? 3 : 1;
                }

                session.GetMessageHandler().GetResponse().AppendInteger(i);

                List <UserItem> list = DeliverItems(session, baseItem, priceAmount * item.Items[baseItem], extraData, limitedId, limtot, text);

                session.GetMessageHandler().GetResponse().AppendInteger(list.Count);

                foreach (UserItem current3 in list)
                {
                    session.GetMessageHandler().GetResponse().AppendInteger(current3.Id);
                }

                session.GetMessageHandler().SendResponse();
                session.GetHabbo().GetInventoryComponent().UpdateItems(false);

                if (InteractionTypes.AreFamiliar(GlobalInteractions.Pet, baseItem.InteractionType))
                {
                    session.SendMessage(session.GetHabbo().GetInventoryComponent().SerializePetInventory());
                }
            }

            if (item.Badge.Length >= 1)
            {
                session.GetHabbo().GetBadgeComponent().GiveBadge(item.Badge, true, session);
            }
        }
Exemple #8
0
 public override bool Execute(GameClient session, string[] pms)
 {
     SoundMachineSongManager.Load();
     session.SendNotif(Yupi.GetLanguage().GetVar("command_refresh_songs"));
     return(true);
 }