コード例 #1
0
ファイル: BeautyHandler.cs プロジェクト: lynsone/MapleServer2
        private static void HandleChangeToSavedHair(GameSession session, PacketReader packet)
        {
            long hairUid = packet.ReadLong();

            Item hair = session.Player.HairInventory.SavedHair.FirstOrDefault(x => x.Uid == hairUid);

            if (hair == null)
            {
                return;
            }

            BeautyMetadata beautyShop = BeautyMetadataStorage.GetShopById(510);

            if (!PayWithShopTokenCost(session, beautyShop))
            {
                return;
            }

            Dictionary <ItemSlot, Item> cosmetics = session.Player.Inventory.Cosmetics;

            if (cosmetics.Remove(hair.ItemSlot, out Item removeItem))
            {
                removeItem.Slot = -1;
                session.FieldManager.BroadcastPacket(EquipmentPacket.UnequipItem(session.FieldPlayer, removeItem));
            }

            cosmetics[removeItem.ItemSlot] = hair;

            session.FieldManager.BroadcastPacket(EquipmentPacket.EquipItem(session.FieldPlayer, hair, hair.ItemSlot));
            session.Send(BeautyPacket.ChangetoSavedHair());
        }
コード例 #2
0
ファイル: BeautyHandler.cs プロジェクト: lynsone/MapleServer2
        private static void HandleSaveHair(GameSession session, PacketReader packet)
        {
            long hairUid = packet.ReadLong();

            Item hair = session.Player.Inventory.Cosmetics.FirstOrDefault(x => x.Value.Uid == hairUid).Value;

            if (hair == null || hair.ItemSlot != ItemSlot.HR)
            {
                return;
            }

            if (session.Player.HairInventory.SavedHair.Count > 30) // 30 is the max slots
            {
                return;
            }

            Item hairCopy = new Item(hair.Id)
            {
                HairData     = hair.HairData,
                Color        = hair.Color,
                CreationTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds() + Environment.TickCount
            };

            session.Player.HairInventory.SavedHair.Add(hairCopy);

            session.Send(BeautyPacket.SaveHair(hair, hairCopy));
        }
コード例 #3
0
    private static void HandleBeautyVoucher(GameSession session, PacketReader packet)
    {
        long itemUid = packet.ReadLong();

        Player player  = session.Player;
        Item   voucher = player.Inventory.GetByUid(itemUid);

        if (voucher == null || voucher.Function.Name != "ItemChangeBeauty")
        {
            return;
        }

        BeautyShop beautyShop = DatabaseManager.BeautyShops.FindById(voucher.Function.Id);

        if (beautyShop == null)
        {
            return;
        }

        List <BeautyShopItem> beautyItems = DatabaseManager.BeautyShopItems.FindAllByShopIdAndGender(beautyShop.Id, player.Gender);

        player.ShopId = beautyShop.Id;
        session.Send(BeautyPacket.LoadBeautyShop(beautyShop, beautyItems));
        player.Inventory.ConsumeItem(session, voucher.Uid, 1);
    }
コード例 #4
0
ファイル: BeautyHandler.cs プロジェクト: lynsone/MapleServer2
        private static void HandleChooseRandomHair(GameSession session, PacketReader packet)
        {
            byte selection = packet.ReadByte();

            if (selection == 0) // player chose previous hair
            {
                Dictionary <ItemSlot, Item> cosmetics = session.Player.Inventory.Cosmetics;
                //Remove current hair
                if (cosmetics.Remove(ItemSlot.HR, out Item newHair))
                {
                    newHair.Slot = -1;
                    DatabaseManager.Items.Delete(newHair.Uid);
                    session.FieldManager.BroadcastPacket(EquipmentPacket.UnequipItem(session.FieldPlayer, newHair));
                }

                cosmetics[ItemSlot.HR] = session.Player.HairInventory.RandomHair; // apply the previous hair

                session.FieldManager.BroadcastPacket(EquipmentPacket.EquipItem(session.FieldPlayer, session.Player.HairInventory.RandomHair, ItemSlot.HR));

                Item voucher = new Item(20300246)
                {
                };                                     // Chic Salon Voucher
                InventoryController.Add(session, voucher, true);

                session.Send(BeautyPacket.ChooseRandomHair(voucher.Id));
            }
            else // player chose new hair
            {
                session.Send(BeautyPacket.ChooseRandomHair());
            }

            session.Player.HairInventory.RandomHair = null; // remove random hair option from hair inventory
        }
コード例 #5
0
    private static void HandleBeautyVoucher(GameSession session, PacketReader packet)
    {
        long itemUid = packet.ReadLong();

        Player player  = session.Player;
        Item   voucher = player.Inventory.Items[itemUid];

        if (voucher == null || voucher.Function.Name != "ItemChangeBeauty")
        {
            return;
        }

        BeautyMetadata beautyShop = BeautyMetadataStorage.GetShopById(voucher.Function.Id);

        if (beautyShop == null)
        {
            return;
        }

        List <BeautyItem> beautyItems = BeautyMetadataStorage.GetGenderItems(beautyShop.ShopId, player.Gender);

        player.ShopId = beautyShop.ShopId;
        session.Send(BeautyPacket.LoadBeautyShop(beautyShop, beautyItems));
        player.Inventory.ConsumeItem(session, voucher.Uid, 1);
    }
コード例 #6
0
        private static void HandleRandomHair(GameSession session, PacketReader packet)
        {
            int  shopId     = packet.ReadInt();
            bool useVoucher = packet.ReadBool();

            BeautyMetadata    beautyShop  = BeautyMetadataStorage.GetShopById(shopId);
            List <BeautyItem> beautyItems = BeautyMetadataStorage.GetGenderItems(beautyShop.ShopId, session.Player.Gender);

            if (!HandleShopPay(session, beautyShop, useVoucher))
            {
                return;
            }

            // Grab random hair
            Random     random     = new Random();
            int        indexHair  = random.Next(beautyItems.Count);
            BeautyItem chosenHair = beautyItems[indexHair];

            //Grab a preset hair and length of hair
            ItemMetadata beautyItemData = ItemMetadataStorage.GetMetadata(chosenHair.ItemId);
            int          indexPreset    = random.Next(beautyItemData.HairPresets.Count);
            HairPresets  chosenPreset   = beautyItemData.HairPresets[indexPreset];

            //Grab random front hair length
            double chosenFrontLength = random.NextDouble() *
                                       (beautyItemData.HairPresets[indexPreset].MaxScale - beautyItemData.HairPresets[indexPreset].MinScale) + beautyItemData.HairPresets[indexPreset].MinScale;

            //Grab random back hair length
            double chosenBackLength = random.NextDouble() *
                                      (beautyItemData.HairPresets[indexPreset].MaxScale - beautyItemData.HairPresets[indexPreset].MinScale) + beautyItemData.HairPresets[indexPreset].MinScale;

            // Grab random preset color
            ColorPaletteMetadata palette = ColorPaletteMetadataStorage.GetMetadata(2); // pick from palette 2. Seems like it's the correct palette for basic hair colors

            int        indexColor = random.Next(palette.DefaultColors.Count);
            MixedColor color      = palette.DefaultColors[indexColor];

            Dictionary <ItemSlot, Item> equippedInventory = session.Player.GetEquippedInventory(InventoryTab.Gear);

            Item newHair = new Item(chosenHair.ItemId)
            {
                Color      = EquipColor.Argb(color, indexColor, palette.PaletteId),
                HairD      = new HairData((float)chosenBackLength, (float)chosenFrontLength, chosenPreset.BackPositionCoord, chosenPreset.BackPositionRotation, chosenPreset.FrontPositionCoord, chosenPreset.FrontPositionRotation),
                IsTemplate = false
            };

            //Remove old hair
            if (session.Player.Equips.Remove(ItemSlot.HR, out Item previousHair))
            {
                previousHair.Slot = -1;
                session.Player.HairInventory.RandomHair = previousHair; // store the previous hair
                session.FieldManager.BroadcastPacket(EquipmentPacket.UnequipItem(session.FieldPlayer, previousHair));
            }

            equippedInventory[ItemSlot.HR] = newHair;

            session.FieldManager.BroadcastPacket(EquipmentPacket.EquipItem(session.FieldPlayer, newHair, ItemSlot.HR));
            session.Send(BeautyPacket.RandomHairOption(previousHair, newHair));
        }
コード例 #7
0
    private static void HandleLoadShop(GameSession session, PacketReader packet)
    {
        int            npcId    = packet.ReadInt();
        BeautyCategory category = (BeautyCategory)packet.ReadByte();

        NpcMetadata beautyNpc = NpcMetadataStorage.GetNpcMetadata(npcId);

        if (beautyNpc == null)
        {
            return;
        }

        BeautyShop beautyShop = DatabaseManager.BeautyShops.FindById(beautyNpc.ShopId);

        if (beautyShop == null)
        {
            return;
        }

        session.Player.ShopId = beautyNpc.ShopId;

        if (beautyShop.BeautyCategory == BeautyCategory.Dye)
        {
            if (beautyShop.BeautyType == BeautyShopType.Dye)
            {
                session.Send(BeautyPacket.LoadDyeShop(beautyShop));
                return;
            }

            session.Send(BeautyPacket.LoadBeautyShop(beautyShop));
            return;
        }

        if (beautyShop.BeautyCategory == BeautyCategory.Save)
        {
            session.Send(BeautyPacket.LoadSaveShop(beautyShop));
            session.Send(BeautyPacket.InitializeSaves());
            session.Send(BeautyPacket.LoadSaveWindow());
            session.Send(BeautyPacket.LoadSavedHairCount((short)session.Player.HairInventory.SavedHair.Count));
            if (session.Player.HairInventory.SavedHair.Count != 0)
            {
                session.Player.HairInventory.SavedHair = session.Player.HairInventory.SavedHair.OrderBy(o => o.CreationTime).ToList();
                session.Send(BeautyPacket.LoadSavedHairs(session.Player.HairInventory.SavedHair));
            }

            return;
        }

        List <BeautyShopItem> beautyItems = DatabaseManager.BeautyShopItems.FindAllByShopIdAndGender(beautyShop.Id, session.Player.Gender);

        session.Send(BeautyPacket.LoadBeautyShop(beautyShop, beautyItems));
    }
コード例 #8
0
ファイル: BeautyHandler.cs プロジェクト: lynsone/MapleServer2
        private static void HandleDeleteSavedHair(GameSession session, PacketReader packet)
        {
            long hairUid = packet.ReadLong();

            Item hair = session.Player.HairInventory.SavedHair.FirstOrDefault(x => x.Uid == hairUid);

            if (hair == null)
            {
                return;
            }

            session.Send(BeautyPacket.DeleteSavedHair(hair.Uid));
            session.Player.HairInventory.SavedHair.Remove(hair);
        }
コード例 #9
0
    private static bool PayWithVoucher(GameSession session, BeautyShop shop)
    {
        string voucherTag = ""; // using an Item's tag to search for any applicable voucher

        switch (shop.BeautyType)
        {
        case BeautyShopType.Hair:
            if (shop.BeautyCategory == BeautyCategory.Special)
            {
                voucherTag = "beauty_hair_special";
                break;
            }

            voucherTag = "beauty_hair";
            break;

        case BeautyShopType.Face:
            voucherTag = "beauty_face";
            break;

        case BeautyShopType.Makeup:
            voucherTag = "beauty_makeup";
            break;

        case BeautyShopType.Skin:
            voucherTag = "beauty_skin";
            break;

        case BeautyShopType.Dye:
            voucherTag = "beauty_itemcolor";
            break;

        default:
            Logger.Warning($"Unknown Beauty Shop: {shop.BeautyType}");
            session.Send(NoticePacket.Notice("Unknown Beauty Shop", NoticeType.FastText));
            return(false);
        }

        Item voucher = session.Player.Inventory.GetAllByTag(voucherTag).FirstOrDefault();

        if (voucher == null)
        {
            session.Send(NoticePacket.Notice(SystemNotice.ErrorItemNotFound, NoticeType.FastText));
            return(false);
        }

        session.Send(BeautyPacket.UseVoucher(voucher.Id, 1));
        session.Player.Inventory.ConsumeItem(session, voucher.Uid, 1);
        return(true);
    }
コード例 #10
0
ファイル: BeautyHandler.cs プロジェクト: lynsone/MapleServer2
        private static bool PayWithVoucher(GameSession session, BeautyMetadata shop)
        {
            string voucherTag = ""; // using an Item's tag to search for any applicable voucher

            switch (shop.BeautyType)
            {
            case BeautyShopType.Hair:
                if (shop.BeautyCategory == BeautyCategory.Special)
                {
                    voucherTag = "beauty_hair_special";
                    break;
                }
                voucherTag = "beauty_hair";
                break;

            case BeautyShopType.Face:
                voucherTag = "beauty_face";
                break;

            case BeautyShopType.Makeup:
                voucherTag = "beauty_makeup";
                break;

            case BeautyShopType.Skin:
                voucherTag = "beauty_skin";
                break;

            case BeautyShopType.Dye:
                voucherTag = "beauty_itemcolor";
                break;

            default:
                session.Send(NoticePacket.Notice("Unknown Beauty Shop", NoticeType.FastText));
                return(false);
            }

            Item voucher = session.Player.Inventory.Items.FirstOrDefault(x => x.Value.Tag == voucherTag).Value;

            if (voucher == null)
            {
                session.Send(NoticePacket.Notice(SystemNotice.ItemNotFound, NoticeType.FastText));
                return(false);
            }

            session.Send(BeautyPacket.UseVoucher(voucher.Id, 1));
            InventoryController.Consume(session, voucher.Uid, 1);
            return(true);
        }
コード例 #11
0
    private static void HandleRandomHair(GameSession session, PacketReader packet)
    {
        int  shopId     = packet.ReadInt();
        bool useVoucher = packet.ReadBool();

        BeautyShop            beautyShop  = DatabaseManager.BeautyShops.FindById(shopId);
        List <BeautyShopItem> beautyItems = DatabaseManager.BeautyShopItems.FindAllByShopIdAndGender(beautyShop.Id, session.Player.Gender);

        if (!HandleShopPay(session, beautyShop, useVoucher))
        {
            return;
        }

        // Grab random hair
        Random         random     = Random.Shared;
        int            indexHair  = random.Next(beautyItems.Count);
        BeautyShopItem chosenHair = beautyItems[indexHair];

        BeautyHelper.ChangeHair(session, chosenHair.ItemId, out Item previousHair, out Item newHair);

        session.FieldManager.BroadcastPacket(EquipmentPacket.EquipItem(session.Player.FieldPlayer, newHair, ItemSlot.HR));
        session.Send(BeautyPacket.RandomHairOption(previousHair, newHair));
    }