Exemple #1
0
        public static List <BeautyItem> GetGenderItems(int shopId, byte gender)
        {
            BeautyMetadata targetShop = shops.GetValueOrDefault(shopId);

            return(targetShop.Items.Where(x => (x.Gender == gender) || (x.Gender == 2)).OrderByDescending(x => x.Flag).ToList());
        }
 private static bool HandleShopPay(GameSession session, BeautyMetadata shop, bool useVoucher)
 {
     return(useVoucher ? PayWithVoucher(session, shop) : PayWithShopTokenCost(session, shop));
 }
        private static bool PayWithShopItemTokenCost(GameSession session, int beautyItemId, BeautyMetadata beautyShop)
        {
            BeautyItem item = beautyShop.Items.FirstOrDefault(x => x.ItemId == beautyItemId);

            return(Pay(session, item.TokenType, item.TokenCost, item.RequiredItemId));
        }
        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     = RandomProvider.Get();
            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];

            Item newHair = new Item(chosenHair.ItemId)
            {
                Color              = EquipColor.Argb(color, indexColor, palette.PaletteId),
                HairData           = new HairData((float)chosenBackLength, (float)chosenFrontLength, chosenPreset.BackPositionCoord, chosenPreset.BackPositionRotation, chosenPreset.FrontPositionCoord, chosenPreset.FrontPositionRotation),
                IsTemplate         = false,
                IsEquipped         = true,
                OwnerCharacterId   = session.Player.CharacterId,
                OwnerCharacterName = session.Player.Name
            };
            Dictionary <ItemSlot, Item> cosmetics = session.Player.Inventory.Cosmetics;

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

            cosmetics[ItemSlot.HR] = newHair;

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