Exemplo n.º 1
0
 public override bool Execute(GameClient session, string[] pms)
 {
     session.GetMessageHandler().Sit();
     return true;
 }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        /// <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&lt;UserItem&gt;.</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;
        }
Exemplo n.º 4
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, 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);
        }
Exemplo n.º 5
0
        /// <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}");
            }
        }
Exemplo n.º 6
0
        /// <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;
        }