/// <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); }
/// <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(); }
/// <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; }
/// <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); } }
/// <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(); }
/// <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(); }
/// <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); } }
public override bool Execute(GameClient session, string[] pms) { SoundMachineSongManager.Load(); session.SendNotif(Yupi.GetLanguage().GetVar("command_refresh_songs")); return(true); }