public override bool Execute(GameClient session, string[] pms) { session.GetMessageHandler().Sit(); return true; }
public override void OnTrigger(GameClient session, RoomItem item, int request, bool hasRights) { if (!item.ExtraData.Contains(Convert.ToChar(5).ToString())) return; var array = item.ExtraData.Split(Convert.ToChar(5)); session.GetHabbo().Gender = (array[0].ToUpper() == "F" ? "F" : "M"); var dictionary = new Dictionary<string, string>(); dictionary.Clear(); var array2 = array[1].Split('.'); foreach (var text in array2) { var array3 = session.GetHabbo().Look.Split('.'); foreach (var text2 in array3) { if (text2.Split('-')[0] == text.Split('-')[0]) { if (dictionary.ContainsKey(text2.Split('-')[0]) && !dictionary.ContainsValue(text)) { dictionary.Remove(text2.Split('-')[0]); dictionary.Add(text2.Split('-')[0], text); } else { if (!dictionary.ContainsKey(text2.Split('-')[0]) && !dictionary.ContainsValue(text)) dictionary.Add(text2.Split('-')[0], text); } } else { if (!dictionary.ContainsKey(text2.Split('-')[0])) dictionary.Add(text2.Split('-')[0], text2); } } } var text3 = dictionary.Values.Aggregate("", (current1, current) => $"{current1}{current}."); session.GetHabbo().Look = text3.TrimEnd('.'); using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor()) { queryReactor.SetQuery( $"UPDATE users SET look = @look, gender = @gender WHERE id = {session.GetHabbo().Id}"); queryReactor.AddParameter("look", session.GetHabbo().Look); queryReactor.AddParameter("gender", session.GetHabbo().Gender); queryReactor.RunQuery(); } session.GetMessageHandler() .GetResponse() .Init(LibraryParser.OutgoingRequest("UpdateUserDataMessageComposer")); session.GetMessageHandler().GetResponse().AppendInteger(-1); session.GetMessageHandler().GetResponse().AppendString(session.GetHabbo().Look); session.GetMessageHandler().GetResponse().AppendString(session.GetHabbo().Gender.ToLower()); session.GetMessageHandler().GetResponse().AppendString(session.GetHabbo().Motto); session.GetMessageHandler().GetResponse().AppendInteger(session.GetHabbo().AchievementPoints); session.GetMessageHandler().SendResponse(); var roomUserByHabbo = item.GetRoom().GetRoomUserManager().GetRoomUserByHabbo(session.GetHabbo().Id); var serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("UpdateUserDataMessageComposer")); serverMessage.AppendInteger(roomUserByHabbo.VirtualId); serverMessage.AppendString(session.GetHabbo().Look); serverMessage.AppendString(session.GetHabbo().Gender.ToLower()); serverMessage.AppendString(session.GetHabbo().Motto); serverMessage.AppendInteger(session.GetHabbo().AchievementPoints); session.GetHabbo().CurrentRoom.SendMessage(serverMessage); }
/// <summary> /// Delivers the items. /// </summary> /// <param name="session">The session.</param> /// <param name="item">The item.</param> /// <param name="amount">The amount.</param> /// <param name="extraData">The extra data.</param> /// <param name="limno">The limno.</param> /// <param name="limtot">The limtot.</param> /// <param name="songCode">The song code.</param> /// <returns>List<UserItem>.</returns> internal List<UserItem> DeliverItems(GameClient session, Item item, int amount, string extraData, int limno, int limtot, string songCode) { var list = new List<UserItem>(); if (item.InteractionType == Interaction.PostIt) amount = amount * 20; var a = item.Type; if (a == 'i' || a == 's') { var i = 0; while (i < amount) { var interactionType = item.InteractionType; switch (interactionType) { case Interaction.Dimmer: var userItem33 = session.GetHabbo().GetInventoryComponent().AddNewItem(0u, item.ItemId, extraData, 0u, true, false, 0, 0); var id33 = userItem33.Id; list.Add(userItem33); using (var queryreactor2 = Azure.GetDatabaseManager().GetQueryReactor()) queryreactor2.RunFastQuery( $"INSERT INTO items_moodlight (item_id,enabled,current_preset,preset_one,preset_two,preset_three) VALUES ({id33},'0',1,'#000000,255,0','#000000,255,0','#000000,255,0')"); break; case Interaction.Trophy: case Interaction.Bed: case Interaction.PressurePadBed: case Interaction.Guillotine: 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.Rentals: case Interaction.Pet: case Interaction.Pool: case Interaction.Roller: case Interaction.FootballGate: list.Add(session.GetHabbo().GetInventoryComponent().AddNewItem(0u, item.ItemId, extraData, 0u, true, false, limno, limtot)); break; case Interaction.Teleport: case Interaction.QuickTeleport: var userItem = session.GetHabbo().GetInventoryComponent().AddNewItem(0u, item.ItemId, "0", 0u, true, false, 0, 0); var id = userItem.Id; var userItem2 = session.GetHabbo().GetInventoryComponent().AddNewItem(0u, item.ItemId, "0", 0u, true, false, 0, 0); var id2 = userItem2.Id; list.Add(userItem); list.Add(userItem2); using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor()) queryReactor.RunFastQuery($"INSERT INTO items_teleports (tele_one_id,tele_two_id) VALUES ('{id}','{id2}');" + $"INSERT INTO items_teleports (tele_one_id,tele_two_id) VALUES ('{id2}','{id}')"); 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.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: var petData = extraData.Split('\n'); var petId = int.Parse(item.Name.Replace("a0 pet", string.Empty)); var generatedPet = CreatePet(session.GetHabbo().Id, petData[0], petId, petData[1], petData[2]); session.GetHabbo().GetInventoryComponent().AddPet(generatedPet); list.Add(session.GetHabbo().GetInventoryComponent().AddNewItem(0, 1534, "0", 0u, true, false, 0, 0, string.Empty)); break; case Interaction.MusicDisc: list.Add(session.GetHabbo().GetInventoryComponent().AddNewItem(0u, item.ItemId, extraData, 0u, true, false, 0, 0, songCode)); break; case Interaction.PuzzleBox: list.Add(session.GetHabbo().GetInventoryComponent().AddNewItem(0u, item.ItemId, extraData, 0u, true, false, limno, limtot)); break; case Interaction.RoomBg: var userItem44 = session.GetHabbo().GetInventoryComponent().AddNewItem(0u, item.ItemId, extraData, 0u, true, false, 0, 0, string.Empty); var id44 = userItem44.Id; list.Add(userItem44); using (var queryreactor3 = Azure.GetDatabaseManager().GetQueryReactor()) queryreactor3.RunFastQuery($"INSERT INTO items_toners VALUES ({id44},'0',0,0,0)"); break; case Interaction.GuildItem: case Interaction.GuildGate: case Interaction.GroupForumTerminal: list.Add(session.GetHabbo().GetInventoryComponent().AddNewItem(0u, item.ItemId, "0", Convert.ToUInt32(extraData), true, false, 0, 0, string.Empty)); break; case Interaction.GuildForum: uint groupId; uint.TryParse(extraData, out groupId); var group = Azure.GetGame().GetGroupManager().GetGroup(groupId); if (group != null) { if (group.CreatorId == session.GetHabbo().Id) { session.GetMessageHandler().GetResponse().Init(LibraryParser.OutgoingRequest("SuperNotificationMessageComposer")); session.GetMessageHandler().GetResponse().AppendString("forums.delivered"); session.GetMessageHandler().GetResponse().AppendInteger(2); session.GetMessageHandler().GetResponse().AppendString("groupId"); session.GetMessageHandler().GetResponse().AppendString(extraData); session.GetMessageHandler().GetResponse().AppendString("groupName"); session.GetMessageHandler().GetResponse().AppendString(group.Name); session.GetMessageHandler().SendResponse(); if (!group.HasForum) { group.HasForum = true; group.UpdateForum(); } } else session.SendNotif(Azure.GetLanguage().GetVar("user_group_owner_error")); } list.Add(session.GetHabbo().GetInventoryComponent().AddNewItem(0u, item.ItemId, "0", Convert.ToUInt32(extraData), true, false, 0, 0, string.Empty)); break; default: list.Add(session.GetHabbo().GetInventoryComponent().AddNewItem(0u, item.ItemId, extraData, 0u, true, false, limno, limtot)); break; } i++; } return list; } if (a == 'e') { for (var j = 0; j < amount; j++) session.GetHabbo().GetAvatarEffectsInventoryComponent().AddNewEffect(item.SpriteId, 7200, 0); } else if (a == 'r') { if (item.Name == "bot_bartender") { var bot = CreateBot(session.GetHabbo().Id, "Mahw", "hr-9534-39.hd-600-1.ch-819-92.lg-3058-64.sh-3064-110.wa-2005", "Sacia a sede e você pode dançar!", "f", true); session.GetHabbo().GetInventoryComponent().AddBot(bot); session.SendMessage(session.GetHabbo().GetInventoryComponent().SerializeBotInventory()); } else { var bot2 = CreateBot(session.GetHabbo().Id, "Claudio", "hr-3020-34.hd-3091-2.ch-225-92.lg-3058-100.sh-3089-1338.ca-3084-78-108.wa-2005", "Fala, caminhadas, danças e vestidos", "m", false); session.GetHabbo().GetInventoryComponent().AddBot(bot2); session.SendMessage(session.GetHabbo().GetInventoryComponent().SerializeBotInventory()); } } return list; }
/// <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, int pageId, uint itemId, string extraData, int priceAmount, bool isGift, string giftUser, string giftMessage, int giftSpriteId, int giftLazo, int giftColor, bool undef, uint theGroup) { priceAmount = (priceAmount < 1 || priceAmount > 100) ? 1 : priceAmount; var totalPrice = priceAmount; var limitedId = 0; var limtot = 0; if (priceAmount >= 6) totalPrice -= Convert.ToInt32(Math.Ceiling(Convert.ToDouble(priceAmount) / 6)) * 2 - 1; if (!Categories.Contains(pageId)) return; var catalogPage = (CatalogPage)Categories[pageId]; if (catalogPage == null || !catalogPage.Enabled || !catalogPage.Visible || session?.GetHabbo() == null) return; if (catalogPage.MinRank > session.GetHabbo().Rank || catalogPage.Layout == "sold_ltd_items") return; var item = catalogPage.GetItem(itemId); if (item == null) return; if (catalogPage.Layout == "vip_buy" || catalogPage.Layout == "club_buy" || HabboClubItems.Contains(item)) { if (session.GetHabbo().Credits < item.CreditsCost) return; if (session.GetHabbo().ActivityPoints < item.DucketsCost) return; if (session.GetHabbo().Diamonds < item.DiamondsCost) return; var 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 -= (int)item.CreditsCost * totalPrice; session.GetHabbo().UpdateCreditsBalance(); } if (item.DucketsCost > 0) { session.GetHabbo().ActivityPoints -= (int)item.DucketsCost * totalPrice; session.GetHabbo().UpdateActivityPointsBalance(); } if (item.DiamondsCost > 0) { session.GetHabbo().Diamonds -= (int)item.DiamondsCost * totalPrice; session.GetHabbo().UpdateSeasonalCurrencyBalance(); } return; } if (item.Name == "room_ad_plus_badge") return; if (item.ClubOnly && !session.GetHabbo().GetSubscriptionManager().HasSubscription) { var serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("CatalogPurchaseNotAllowedMessageComposer")); serverMessage.AppendInteger(1); session.SendMessage(serverMessage); return; } var flag = item.Items.Keys.Any(current => InteractionTypes.AreFamiliar(GlobalInteractions.Pet, current.InteractionType)); if (!flag && (item.CreditsCost * totalPrice < 0 || item.DucketsCost * totalPrice < 0 || item.DiamondsCost * totalPrice < 0)) return; if (item.IsLimited) { totalPrice = 1; priceAmount = 1; if (item.LimitedSelled >= item.LimitedStack) { session.SendMessage(new ServerMessage(LibraryParser.OutgoingRequest("CatalogLimitedItemSoldOutMessageComposer"))); return; } item.LimitedSelled++; using (var queryReactor = Azure.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; } var 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 (item.CreditsCost > 0 && !isGift) { session.GetHabbo().Credits -= (int)item.CreditsCost * totalPrice; session.GetHabbo().UpdateCreditsBalance(); } if (item.DucketsCost > 0 && !isGift) { session.GetHabbo().ActivityPoints -= (int)item.DucketsCost * totalPrice; session.GetHabbo().UpdateActivityPointsBalance(); } if (item.DiamondsCost > 0 && !isGift) { session.GetHabbo().Diamonds -= (int)item.DiamondsCost * totalPrice; session.GetHabbo().UpdateSeasonalCurrencyBalance(); } foreach (var baseItem in item.Items.Keys) { if (isGift) { if ((DateTime.Now - session.GetHabbo().LastGiftPurchaseTime).TotalSeconds <= 15.0) { session.SendNotif(Azure.GetLanguage().GetVar("user_send_gift")); return; } if (!baseItem.AllowGift) return; DataRow row; using (var queryreactor3 = Azure.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 = Convert.ToUInt32(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 -= (int)item.CreditsCost * totalPrice; session.GetHabbo().UpdateCreditsBalance(); } if (item.DucketsCost > 0 && isGift) { session.GetHabbo().ActivityPoints -= (int)item.DucketsCost * totalPrice; session.GetHabbo().UpdateActivityPointsBalance(); } if (item.DiamondsCost > 0 && isGift) { session.GetHabbo().Diamonds -= (int)item.DiamondsCost * totalPrice; session.GetHabbo().UpdateSeasonalCurrencyBalance(); } } if (isGift && baseItem.Type == 'e') { session.SendNotif(Azure.GetLanguage().GetVar("user_send_gift_effect")); return; } if (item.Name.StartsWith("builders_club_addon_")) { var furniAmount = Convert.ToInt32(item.Name.Replace("builders_club_addon_", "").Replace("furnis", "")); session.GetHabbo().BuildersItemsMax += furniAmount; var update = new ServerMessage(LibraryParser.OutgoingRequest("BuildersClubMembershipMessageComposer")); update.AppendInteger(session.GetHabbo().BuildersExpire); update.AppendInteger(session.GetHabbo().BuildersItemsMax); update.AppendInteger(2); session.SendMessage(update); using (var queryReactor = Azure.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_")) { var timeAmount = Convert.ToInt32(item.Name.Replace("builders_club_time_", "").Replace("seconds", "")); session.GetHabbo().BuildersExpire += timeAmount; var update = new ServerMessage(LibraryParser.OutgoingRequest("BuildersClubMembershipMessageComposer")); update.AppendInteger(session.GetHabbo().BuildersExpire); update.AppendInteger(session.GetHabbo().BuildersItemsMax); update.AppendInteger(2); session.SendMessage(update); using (var queryReactor = Azure.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; } var text = string.Empty; var 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: var number = string.IsNullOrEmpty(extraData) ? 0.0 : double.Parse(extraData, Azure.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: var data = extraData.Split('\n'); var petName = data[0]; var race = data[1]; var color = data[2]; if (!CheckPetName(petName)) return; if (race.Length != 1 && race.Length != 2) return; if (color.Length != 6) return; Azure.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: var 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) { var itemBySprite = Azure.GetGame().GetItemManager().GetItemBySpriteId(giftSpriteId); if (itemBySprite == null) return; uint insertId; using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor()) { queryReactor.SetQuery("INSERT INTO items_rooms (base_item,user_id) VALUES (" + itemBySprite.ItemId + ", " + 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) { Azure.GetGame().GetAchievementManager().ProgressUserAchievement(session, "ACH_GiftGiver", 1, true); Azure.GetGame().GetQuestManager().ProgressUserQuest(session, QuestType.GiftOthers); 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); } } var clientByUserId = Azure.GetGame().GetClientManager().GetClientByUserId(toUserId); if (clientByUserId != null) { clientByUserId.GetHabbo() .GetInventoryComponent().AddNewItem(insertId, itemBySprite.ItemId, 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) Azure.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); var i = 1; if (baseItem.Type == 's') i = InteractionTypes.AreFamiliar(GlobalInteractions.Pet, baseItem.InteractionType) ? 3 : 1; session.GetMessageHandler().GetResponse().AppendInteger(i); var list = DeliverItems(session, baseItem, priceAmount * (int)item.Items[baseItem], extraData, limitedId, limtot, text); session.GetMessageHandler().GetResponse().AppendInteger(list.Count); foreach (var 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); }
/// <summary> /// Removes the user from room. /// </summary> /// <param name="session">The session.</param> /// <param name="notifyClient">if set to <c>true</c> [notify client].</param> /// <param name="notifyKick">if set to <c>true</c> [notify kick].</param> internal void RemoveUserFromRoom(GameClient session, bool notifyClient, bool notifyKick) { try { if (session == null || session.GetHabbo() == null || _userRoom == null) return; var userId = session.GetHabbo().Id; session.GetHabbo().GetAvatarEffectsInventoryComponent().OnRoomExit(); //using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor()) // queryReactor.RunFastQuery("UPDATE users_rooms_visits SET exit_timestamp = '" + Azure.GetUnixTimeStamp() + "' WHERE room_id = '" + _room.RoomId + "' AND user_id = '" + session.GetHabbo().Id + "' ORDER BY entry_timestamp DESC LIMIT 1"); var roomUserByHabbo = GetRoomUserByHabbo(userId); if (roomUserByHabbo == null) return; if (notifyKick) { var room = Azure.GetGame().GetRoomManager().GetRoom(roomUserByHabbo.RoomId); var model = room.GetGameMap().Model; roomUserByHabbo.MoveTo(model.DoorX, model.DoorY); roomUserByHabbo.CanWalk = false; session.GetMessageHandler() .GetResponse() .Init(LibraryParser.OutgoingRequest("RoomErrorMessageComposer")); session.GetMessageHandler().GetResponse().AppendInteger(4008); session.GetMessageHandler().SendResponse(); session.GetMessageHandler() .GetResponse() .Init(LibraryParser.OutgoingRequest("OutOfRoomMessageComposer")); session.GetMessageHandler().GetResponse().AppendShort(2); session.GetMessageHandler().SendResponse(); } else if (notifyClient) { var serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("UserIsPlayingFreezeMessageComposer")); serverMessage.AppendBool(roomUserByHabbo.Team != Team.None); roomUserByHabbo.GetClient().SendMessage(serverMessage); session.GetMessageHandler() .GetResponse() .Init(LibraryParser.OutgoingRequest("OutOfRoomMessageComposer")); session.GetMessageHandler().GetResponse().AppendShort(2); session.GetMessageHandler().SendResponse(); } if (roomUserByHabbo.Team != Team.None) { _userRoom.GetTeamManagerForBanzai().OnUserLeave(roomUserByHabbo); _userRoom.GetTeamManagerForFreeze().OnUserLeave(roomUserByHabbo); } if (roomUserByHabbo.RidingHorse) { roomUserByHabbo.RidingHorse = false; var horse = GetRoomUserByVirtualId((int) roomUserByHabbo.HorseId); if (horse != null) { horse.RidingHorse = false; horse.HorseId = 0u; } } if (roomUserByHabbo.IsLyingDown || roomUserByHabbo.IsSitting) { roomUserByHabbo.IsSitting = false; roomUserByHabbo.IsLyingDown = false; } RemoveRoomUser(roomUserByHabbo); if (session.GetHabbo() != null && !roomUserByHabbo.IsSpectator) { if (roomUserByHabbo.CurrentItemEffect != ItemEffectType.None) roomUserByHabbo.GetClient().GetHabbo().GetAvatarEffectsInventoryComponent().CurrentEffect = -1; if (session.GetHabbo() != null) { if (_userRoom.HasActiveTrade(session.GetHabbo().Id)) _userRoom.TryStopTrade(session.GetHabbo().Id); session.GetHabbo().CurrentRoomId = 0; if (session.GetHabbo().GetMessenger() != null) session.GetHabbo().GetMessenger().OnStatusChanged(true); } using (var queryreactor2 = Azure.GetDatabaseManager().GetQueryReactor()) if (session.GetHabbo() != null) queryreactor2.RunFastQuery(string.Concat( "UPDATE users_rooms_visits SET exit_timestamp = '", Azure.GetUnixTimeStamp(), "' WHERE room_id = '", _userRoom.RoomId, "' AND user_id = '", userId, "' ORDER BY exit_timestamp DESC LIMIT 1")); } UsersByUserId.Remove(roomUserByHabbo.UserId); if (session.GetHabbo() != null) UsersByUserName.Remove(session.GetHabbo().UserName.ToLower()); roomUserByHabbo.Dispose(); } catch (Exception ex) { Logging.LogCriticalException($"Error during removing user from room:{ex}"); } }
/// <summary> /// Progresses the user achievement. /// </summary> /// <param name="session">The session.</param> /// <param name="achievementGroup">The achievement group.</param> /// <param name="progressAmount">The progress amount.</param> /// <param name="fromZero">if set to <c>true</c> [from zero].</param> /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns> internal bool ProgressUserAchievement(GameClient session, string achievementGroup, int progressAmount, bool fromZero = false) { if (Achievements.ContainsKey(achievementGroup) && session?.GetHabbo() != null) { var achievement = Achievements[achievementGroup]; var user = session.GetHabbo(); var userAchievement = user.GetAchievementData(achievementGroup); if (userAchievement == null) { userAchievement = new UserAchievement(achievementGroup, 0, 0); user.Achievements.Add(achievementGroup, userAchievement.Value); } var count = achievement.Levels.Count; if (userAchievement.Value.Level == count) return false; var acount = (userAchievement.Value.Level + 1); if (acount > count) acount = count; var targetLevelData = achievement.Levels[acount]; var achievementColoc = session.GetHabbo().GetAchievementData(achievementGroup); if ((achievementColoc != null) && (fromZero)) fromZero = false; var progress = (fromZero) ? progressAmount : ((userAchievement.Value.Progress + progressAmount)); var achievementLevel = userAchievement.Value.Level; var levelEndCheck = achievementLevel + 1; if (levelEndCheck > count) levelEndCheck = count; if (progress >= targetLevelData.Requirement) { achievementLevel++; levelEndCheck++; progress = 0; var userBadgeComponent = user.GetBadgeComponent(); if (acount != 1) userBadgeComponent.RemoveBadge(Convert.ToString($"{achievementGroup}{acount - 1}"), session); userBadgeComponent.GiveBadge($"{achievementGroup}{acount}", true, session); if (levelEndCheck > count) levelEndCheck = count; user.ActivityPoints += targetLevelData.RewardPixels; user.NotifyNewPixels(targetLevelData.RewardPixels); user.UpdateActivityPointsBalance(); session.SendMessage(AchievementUnlockedComposer.Compose(achievement, acount, targetLevelData.RewardPoints, targetLevelData.RewardPixels)); using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor()) { queryReactor.SetQuery(string.Concat("REPLACE INTO users_achievements VALUES (", user.Id, ", @group, ", achievementLevel, ", ", progress, ")")); queryReactor.AddParameter("group", achievementGroup); queryReactor.RunQuery(); } userAchievement.Value.SetLevel(achievementLevel); userAchievement.Value.SetProgress(progress); user.AchievementPoints += targetLevelData.RewardPoints; user.NotifyNewPixels(targetLevelData.RewardPixels); user.ActivityPoints += targetLevelData.RewardPixels; user.UpdateActivityPointsBalance(); session.SendMessage(AchievementScoreUpdateComposer.Compose(user.AchievementPoints)); UserAchievement? achievementData = user.GetAchievementData(achievementGroup); if (achievementData != null) session.SendMessage(AchievementProgressComposer.Compose(achievement, levelEndCheck, achievement.Levels[levelEndCheck], count, achievementData.Value)); Talent talent; if (Azure.GetGame().GetTalentManager().TryGetTalent(achievementGroup, out talent)) Azure.GetGame().GetTalentManager().CompleteUserTalent(session, talent); return true; } userAchievement.Value.SetLevel(achievementLevel); userAchievement.Value.SetProgress(progress); using (var queryreactor2 = Azure.GetDatabaseManager().GetQueryReactor()) { queryreactor2.SetQuery(string.Concat("REPLACE INTO users_achievements VALUES (", session.GetHabbo().Id, ", @group, ", achievementLevel, ", ", progress, ")")); queryreactor2.AddParameter("group", achievementGroup); queryreactor2.RunQuery(); } var messageHandler = session.GetMessageHandler(); if (messageHandler != null) { UserAchievement? achievementData = user.GetAchievementData(achievementGroup); if (achievementData != null) session.SendMessage(AchievementProgressComposer.Compose(achievement, acount, targetLevelData, count, achievementData.Value)); messageHandler.GetResponse().Init(LibraryParser.OutgoingRequest("UpdateUserDataMessageComposer")); messageHandler.GetResponse().AppendInteger(-1); messageHandler.GetResponse().AppendString(user.Look); messageHandler.GetResponse().AppendString(user.Gender.ToLower()); messageHandler.GetResponse().AppendString(user.Motto); messageHandler.GetResponse().AppendInteger(user.AchievementPoints); messageHandler.SendResponse(); return true; } } return false; }