/// <summary>
        /// This packet is used for character items equiped in "P" panel (wear items)
        /// </summary>
        /// <param name="player"></param>
        /// <returns></returns>
        public static EquipPacket GenerateEquipPacket(this IPlayerEntity player)
        {
            List <EquipPacket.EquipSubPacket> tmp = new List <EquipPacket.EquipSubPacket>();

            ItemInstanceDto[] subInventory = player.Inventory.Wear;

            for (int i = 0; i < subInventory.Length; i++)
            {
                ItemInstanceDto item = subInventory[i];
                if (item == null)
                {
                    continue;
                }

                tmp.Add(new EquipPacket.EquipSubPacket
                {
                    WearIndex       = i,
                    ItemId          = item.ItemId,
                    ItemRarity      = (byte)item.Rarity,
                    UpgradeOrDesign = item.Item.IsColored ? item.Design : item.Upgrade,
                    Unknown         = 0
                });
            }

            return(new EquipPacket
            {
                EqRare = player.Inventory.GenerateEqRareInfoPacket(),
                EqList = tmp
            });
        }
Exemple #2
0
        public async Task SetupAsync()
        {
            await TestHelpers.ResetAsync().ConfigureAwait(false);

            Broadcaster.Reset();
            _session = await TestHelpers.Instance.GenerateSessionAsync().ConfigureAwait(false);

            _bazaarHttpClient  = new Mock <IBazaarHttpClient>();
            _itemInstanceDao   = new Mock <IDao <IItemInstanceDto?, Guid> >();
            _itemProvider      = new Mock <IItemProvider>();
            _cbuyPacketHandler = new CBuyPacketHandler(_bazaarHttpClient.Object, _itemProvider.Object, Logger,
                                                       _itemInstanceDao.Object);

            _bazaarHttpClient.Setup(b => b.GetBazaarLinkAsync(0)).ReturnsAsync(
                new BazaarLink
            {
                SellerName = "test",
                BazaarItem = new BazaarItemDto {
                    Price = 50, Amount = 1
                },
                ItemInstance = new ItemInstanceDto {
                    ItemVNum = 1012, Amount = 1
                }
            });
            _bazaarHttpClient.Setup(b => b.GetBazaarLinkAsync(2)).ReturnsAsync(
                new BazaarLink
            {
                SellerName = _session !.Character.Name,
                BazaarItem = new BazaarItemDto {
                    Price = 60, Amount = 1
                },
                ItemInstance = new ItemInstanceDto {
                    ItemVNum = 1012
                }
            });
        public static void UpgradeNpc(IPlayerEntity player, ItemUpgradeEvent e)
        {
            if (e.Item.Upgrade >= Configuration.UpgradeItem.MaximumUpgrade)
            {
                return;
            }

            if (e.Item.Item.EquipmentSlot != EquipmentType.Armor && e.Item.Item.EquipmentSlot != EquipmentType.MainWeapon &&
                e.Item.Item.EquipmentSlot != EquipmentType.SecondaryWeapon)
            {
                return;
            }

            var             hasAmulet = FixedUpMode.None;
            ItemInstanceDto amulet    = player.Inventory.GetWeared(EquipmentType.Amulet);

            if (amulet?.Item.Effect == 793)
            {
                hasAmulet = FixedUpMode.HasAmulet;
            }

            player.EmitEvent(new UpgradeEquipmentEvent
            {
                Item       = e.Item,
                Mode       = e.Type == UpgradePacketType.UpgradeItemGoldScroll ? UpgradeMode.Reduced : UpgradeMode.Normal,
                Protection = e.Type == UpgradePacketType.UpgradeItem ? UpgradeProtection.None : UpgradeProtection.Protected,
                HasAmulet  = hasAmulet,
                IsCommand  = false
            });
        }
Exemple #4
0
        public void ItemInstanceDtoToItemInstanceEntity()
        {
            var itemInstanceDto    = new ItemInstanceDto();
            var itemInstanceEntity = _adapter.Adapt <ItemInstance>(itemInstanceDto);

            Assert.IsNotNull(itemInstanceEntity);
        }
Exemple #5
0
        public static short GetFirstFreeSlot(this InventoryComponent inv, IReadOnlyCollection <ItemInstanceDto> subInventory, ItemDto source, short amount)
        {
            ItemInstanceDto item = subInventory.FirstOrDefault(x => x != null &&
                                                               x.Amount + amount < GameConf.Inventory.MaxItemPerSlot && x.ItemId == source.Id && x.Item.Type != InventoryType.Equipment);

            return(item?.Slot ?? GetFirstFreeSlot(inv, subInventory));
        }
Exemple #6
0
        public static EInfoPacket GenerateEInfoPacket(this ItemInstanceDto itemInstance)
        {
            EquipmentType equipmentSlot = itemInstance.Item.EquipmentSlot;

            switch (itemInstance.Item.ItemType)
            {
            case ItemType.Weapon:
                switch (equipmentSlot)
                {
                case EquipmentType.MainWeapon:
                    return(GenerateEInfoPrimaryWeapon(itemInstance));

                case EquipmentType.SecondaryWeapon:
                    return(GenerateSecondaryWeapon(itemInstance));

                default:
                    return(null);
                }

            case ItemType.Armor:
                return(GenerateEInfoArmor(itemInstance));

            case ItemType.Jewelery:
                return(GenerateEInfoJewelery(itemInstance));

            case ItemType.Specialist:
                return(GenerateEInfoSpecialist(itemInstance));

            default:
                return(null);
            }
        }
Exemple #7
0
        public static PairyPacket GeneratePairyPacket(this IPlayerEntity player)
        {
            ItemInstanceDto fairy = player.Inventory.GetWeared(EquipmentType.Fairy);

            if (fairy == null)
            {
                return(new PairyPacket
                {
                    VisualType = VisualType.Character,
                    CharacterId = player.Character.Id,
                    FairyMoveType = 0,
                    ElementType = 0,
                    FairyLevel = 0
                });
            }

            // todo buffs

            return(new PairyPacket
            {
                VisualType = VisualType.Character,
                CharacterId = player.Character.Id,
                ElementType = fairy.ElementType,
                FairyLevel = fairy.Upgrade,
                FairyMoveType = 4 // todo enum
            });
        }
Exemple #8
0
        public void ItemInstanceDtoToItemInstanceEntity()
        {
            var itemInstanceDto    = new ItemInstanceDto();
            var itemInstanceEntity = _mapper.Map <ItemInstance>(itemInstanceDto);

            Assert.IsNotNull(itemInstanceEntity);
        }
Exemple #9
0
        public static IvnPacket GenerateIvnPacket(this ItemInstanceDto itemInstance)
        {
            switch (itemInstance.Type)
            {
            case InventoryType.Specialist:
                return(new IvnPacket
                {
                    InventoryType = itemInstance.Type,
                    ItemId = itemInstance.Item.Id,
                    Slot = itemInstance.Slot,
                    Upgrade = itemInstance.Upgrade,
                    Rare = itemInstance.Rarity,
                    SpStoneUpgrade = itemInstance.SpecialistUpgrade
                });

            case InventoryType.Equipment:
                return(new IvnPacket
                {
                    InventoryType = itemInstance.Type,
                    ItemId = itemInstance.ItemId,
                    Slot = itemInstance.Slot,
                    Rare = itemInstance.Rarity,
                    Upgrade = itemInstance.Upgrade
                });

            case InventoryType.Main:
            case InventoryType.Etc:
                return(itemInstance.GenerateMainIvnPacket());

            default:
                //Log.Info($"{itemInstance.Type} not implemented");
                return(null);
            }
        }
Exemple #10
0
        public ItemInstance Convert(ItemInstanceDto k)
        {
            ItemInstance item = k.Adapt <ItemInstance>();

            item.Item = _items.Find(s => s.VNum == k.ItemVNum);
            return(item);
        }
        protected override async Task Handle(InventoryMoveEvent args, CancellationToken cancellation)
        {
            if (!(args.Sender is IPlayerEntity player))
            {
                return;
            }
            InventoryComponent inv = player.Inventory;

            ItemInstanceDto source = inv.GetSubInvFromInventoryType(args.InventoryType)[args.SourceSlot];
            ItemInstanceDto dest   = inv.GetSubInvFromInventoryType(args.InventoryType)[args.DestinationSlot];

            if (source == null)
            {
                return;
            }

            if (dest != null && (args.InventoryType == InventoryType.Main || args.InventoryType == InventoryType.Etc) && dest.ItemId == source.ItemId &&
                dest.Amount + source.Amount > _gameConfiguration.Inventory.MaxItemPerSlot)
            {
                // if both source & dest are stackable && slots combined are > max slots
                // should provide a "fill" possibility
                return;
            }

            if (dest == null)
            {
                await inv.MoveItem(source, args);
            }
            else
            {
                await inv.MoveItems(source, dest);
            }
        }
Exemple #12
0
 public InventoryComponent(IEntity entity)
 {
     Wear      = new ItemInstanceDto[WEAR_SIZE];
     Equipment = new ItemInstanceDto[EQUIPMENT_SIZE];
     Main      = new ItemInstanceDto[MAIN_SIZE];
     Etc       = new ItemInstanceDto[ETC_SIZE];
     Entity    = entity;
 }
Exemple #13
0
 private static IvnPacket GenerateMainIvnPacket(this ItemInstanceDto itemInstance) => new IvnPacket
 {
     InventoryType = itemInstance.Type,
     Slot          = itemInstance.Slot,
     ItemId        = itemInstance.ItemId,
     Rare          = itemInstance.Amount,
     Upgrade       = 0
 };
Exemple #14
0
        /// <summary>
        ///     Binds builded Equipment Option to the given item
        /// </summary>
        /// <param name="itemInstance"></param>
        public void ForWeapon(ItemInstanceDto itemInstance)
        {
            if (itemInstance.Item.EquipmentSlot != EquipmentType.MainWeapon && itemInstance.Item.EquipmentSlot != EquipmentType.SecondaryWeapon)
            {
                throw new ArgumentException("Given item should only be a weapon");
            }

            _weaponId = itemInstance.Id;
        }
Exemple #15
0
 public static void UseItem(this InventoryComponent inventory, ItemInstanceDto itemInstance)
 {
     switch (itemInstance.Item.Type)
     {
     case InventoryType.Wear:
         inventory.UseWear(itemInstance);
         break;
     }
 }
Exemple #16
0
        public static void UseWear(this InventoryComponent inventory, ItemInstanceDto itemInstance)
        {
            switch (itemInstance.Item.EquipmentSlot)
            {
            case EquipmentType.MainWeapon:
                break;

            case EquipmentType.Armor:
                break;

            case EquipmentType.Hat:
                break;

            case EquipmentType.Gloves:
                break;

            case EquipmentType.Boots:
                break;

            case EquipmentType.SecondaryWeapon:
                break;

            case EquipmentType.Necklace:
                break;

            case EquipmentType.Ring:
                break;

            case EquipmentType.Bracelet:
                break;

            case EquipmentType.Mask:
                break;

            case EquipmentType.Fairy:
                break;

            case EquipmentType.Amulet:
                break;

            case EquipmentType.Sp:
                break;

            case EquipmentType.CostumeSuit:
                break;

            case EquipmentType.CostumeHat:
                break;

            case EquipmentType.WeaponSkin:
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Exemple #17
0
        private static EInfoPacket GenerateSecondaryWeapon(ItemInstanceDto itemInstance)
        {
            byte classe = itemInstance.Item.Class;

            switch (classe)
            {
            case (byte)ItemClassType.Unknown1:
            case (byte)ItemClassType.Unknown2:
                return(new EInfoPacket
                {
                    EInfoType = EInfoPacketType.MainWeaponArcher,
                    ItemVNum = itemInstance.ItemId,
                    Rare = itemInstance.Rarity,
                    Upgrade = itemInstance.Upgrade,
                    Fixed = itemInstance.IsFixed,
                    LevelMinimum = itemInstance.Item.LevelMinimum,
                    CloseDefense = itemInstance.Item.DamageMinimum,
                    RangeDefense = itemInstance.Item.DamageMaximum,
                    MagicDefense = itemInstance.Item.HitRate,
                    DefenseDodge = itemInstance.Item.CriticalLuckRate,
                    CriticalRate = itemInstance.Item.CriticalRate,
                    Ammo = itemInstance.Ammo,
                    MaximumAmmo = itemInstance.Item.MaximumAmmo,
                    Price = itemInstance.Item.Price,
                    Unknown2 = -1,
                    Rare2 = 0,
                    BoundCharacterId = 0,
                    ShellEffectCount = 0,
                    ShellEffect = null
                });

            default:
                return(new EInfoPacket
                {
                    EInfoType = EInfoPacketType.WeaponDefault,
                    ItemVNum = itemInstance.ItemId,
                    Rare = itemInstance.Rarity,
                    Upgrade = itemInstance.Upgrade,
                    Fixed = itemInstance.IsFixed,
                    LevelMinimum = itemInstance.Item.LevelMinimum,
                    CloseDefense = itemInstance.Item.DamageMinimum,
                    RangeDefense = itemInstance.Item.DamageMaximum,
                    MagicDefense = itemInstance.Item.HitRate,
                    DefenseDodge = itemInstance.Item.CriticalLuckRate,
                    CriticalRate = itemInstance.Item.CriticalRate,
                    Ammo = itemInstance.Ammo,
                    MaximumAmmo = itemInstance.Item.MaximumAmmo,
                    Price = itemInstance.Item.Price,
                    Unknown2 = -1,
                    Rare2 = 0,
                    BoundCharacterId = 0,
                    ShellEffectCount = 0,
                    ShellEffect = null
                });
            }
        }
 public InventoryComponent(IEntity entity)
 {
     Wear      = new ItemInstanceDto[WEAR_SIZE];
     Equipment = new ItemInstanceDto[EQUIPMENT_SIZE];
     Main      = new ItemInstanceDto[MAIN_SIZE];
     Etc       = new ItemInstanceDto[ETC_SIZE];
     // temporary
     Specialists = new ItemInstanceDto[1];
     Costumes    = new ItemInstanceDto[1];
     Entity      = entity;
 }
        protected override async Task Handle(UpgradePacket packet, IPlayerEntity player)
        {
            ItemInstanceDto item = player.Inventory.GetItemFromSlotAndType(packet.Slot, packet.InventoryType);

            if (item == null)
            {
                return;
            }

            if (!packet.InventoryType2.HasValue || !packet.Slot2.HasValue)
            {
                await player.EmitEventAsync(new ItemUpgradeEvent
                {
                    Type = packet.UpgradeType,
                    Item = item
                });

                return;
            }

            ItemInstanceDto seconditem = player.Inventory.GetItemFromSlotAndType(packet.Slot2.Value, packet.InventoryType2.Value);

            if (seconditem == null)
            {
                return;
            }

            if (!packet.CellonInventoryType.HasValue || !packet.CellonSlot.HasValue)
            {
                await player.EmitEventAsync(new ItemUpgradeEvent
                {
                    Type       = packet.UpgradeType,
                    Item       = item,
                    SecondItem = seconditem
                });

                return;
            }

            ItemInstanceDto cellonitem = player.Inventory.GetItemFromSlotAndType(packet.CellonSlot.Value, packet.CellonInventoryType.Value);

            if (cellonitem == null)
            {
                return;
            }

            await player.EmitEventAsync(new ItemUpgradeEvent
            {
                Type       = packet.UpgradeType,
                SecondItem = seconditem,
                CellonItem = cellonitem
            });
        }
Exemple #20
0
        public Task <SaltyCommandResult> ItemCreateAsync(ItemDto item, short quantity = 1)
        {
            var             itemFactory  = ChickenContainer.Instance.Resolve <IItemInstanceDtoFactory>();
            ItemInstanceDto itemInstance = itemFactory.CreateItem(item, quantity);

            Context.Player.EmitEvent(new InventoryAddItemEvent
            {
                ItemInstance = itemInstance
            });

            return(Task.FromResult(new SaltyCommandResult(true, "Your item(s) have been created.")));
        }
Exemple #21
0
        public ItemInstance Convert(ItemInstanceDto k)
        {
            ItemInstance item =
                k.Adapt <BoxInstance>() ??
                k.Adapt <SpecialistInstance>() ??
                k.Adapt <WearableInstance>() ??
                k.Adapt <UsableInstance>() ??
                k.Adapt <ItemInstance>();

            item.Item = _items.Find(s => s.VNum == k.ItemVNum);
            return(item);
        }
Exemple #22
0
        public static short GetFirstFreeSlot(this InventoryComponent inv, IReadOnlyCollection <ItemInstanceDto> subinventory)
        {
            for (int i = 0; i < subinventory.Count; i++)
            {
                ItemInstanceDto item = subinventory.FirstOrDefault(x => x == null || x.Slot == i);

                if (item == null)
                {
                    return((short)i);
                }
            }

            return(-1);
        }
        protected override async Task Handle(InventoryWearEvent e, CancellationToken cancellation)
        {
            if (!(e.Sender is IPlayerEntity player))
            {
                return;
            }

            var inventory = player.Inventory;

            ItemInstanceDto item = inventory.GetItemFromSlotAndType(e.InventorySlot, InventoryType.Equipment);

            if (item == null)
            {
                return;
            }

            if (e.ItemWearType == ItemWearType.Partner)
            {
                // do the work
                return;
            }

            // check shop opened
            // check exchange

            await EquipItem(inventory, player, item);

            await player.SendPacketAsync(player.GenerateEffectPacket(123));

            await player.BroadcastAsync(player.GenerateEqPacket());

            await player.ActualizeUiWearPanel();

            await player.ActualizeUiStatChar();

            switch (item.Item.EquipmentSlot)
            {
            case EquipmentType.Fairy:
                await player.BroadcastAsync(player.GeneratePairyPacket());

                break;

            case EquipmentType.Sp:
                await player.ActualiseUiSpPoints();

                break;
            }
        }
        public static async Task MoveItem(this InventoryComponent inv, ItemInstanceDto source, InventoryMoveEvent args)
        {
            ItemInstanceDto[] subInv = inv.GetSubInvFromItemInstance(source);
            subInv[args.DestinationSlot] = source;
            subInv[args.SourceSlot]      = null;

            source.Slot = args.DestinationSlot;
            if (!(inv.Entity is IPlayerEntity player))
            {
                return;
            }

            await player.SendPacketAsync(player.GenerateEmptyIvnPacket(args.InventoryType, args.SourceSlot));

            await player.SendPacketAsync(source.GenerateIvnPacket());
        }
Exemple #25
0
        private static EInfoPacket GenerateEInfoJewelery(ItemInstanceDto itemInstance)
        {
            EquipmentType equipmentSlot = itemInstance.Item.EquipmentSlot;

            switch (equipmentSlot)
            {
            case EquipmentType.Amulet:
                return(new EInfoPacket
                {
                    EInfoType = EInfoPacketType.Jewelery,
                    ItemVNum = itemInstance.ItemId,
                    LevelMinimum = itemInstance.Item.LevelMinimum,
                    DurabilityPoint = 0,     // TODO: Change this 0
                    Unknown = 100,
                    Unknown1 = 0,
                    Price = itemInstance.Item.Price
                });

            case EquipmentType.Fairy:
                return(new EInfoPacket
                {
                    EInfoType = EInfoPacketType.Jewelery,
                    ItemVNum = itemInstance.ItemId,
                    Element = itemInstance.Item.Element,
                    ElementRate = itemInstance.ElementRate,
                    Unknown = 0,  // idk
                    Unknown1 = 0, // idk
                    Unknown2 = 0, // idk
                    Price = 0,    // idk
                    Rare2 = 0     // idk
                });

            default:
                return(new EInfoPacket
                {
                    EInfoType = EInfoPacketType.Jewelery,
                    ItemVNum = itemInstance.ItemId,
                    LevelMinimum = itemInstance.Item.LevelMinimum,
                    ElementRate = itemInstance.Item.MaxCellonLvl, // review this
                    Unknown = itemInstance.Item.MaxCellon,        // review this
                    Unknown1 = null,                              // Cellon Options
                    Unknown2 = 0,                                 // idk
                    Price = itemInstance.Item.Price,
                    Rare2 = 0                                     // Cellon Info
                });
            }
        }
        protected override async Task Handle(UiPacket packet, IPlayerEntity player)
        {
            ItemInstanceDto item = player.Inventory.GetItemFromSlotAndType(packet.InventorySlot, packet.InventoryType);

            if (item == null)
            {
                return;
            }

            string[] packetsplit = packet.OriginalContent.Split(' ', '^');

            await player.EmitEventAsync(new InventoryUseItemEvent
            {
                Item   = item,
                Option = packetsplit[1].ElementAt(0) == '#' ? (byte)50 : (byte)0
            });
        }
        public static async Task FailAsync(this RarifyEvent e, IPlayerEntity player)
        {
            if (e.Mode != RarifyMode.Drop)
            {
                switch (e.Protection)
                {
                case RarifyProtection.BlueAmulet:
                case RarifyProtection.RedAmulet:
                case RarifyProtection.HeroicAmulet:
                case RarifyProtection.RandomHeroicAmulet:
                    ItemInstanceDto amulets = player.Inventory.GetItemFromSlotAndType((short)EquipmentType.Amulet, InventoryType.Wear);
                    if (amulets == null)
                    {
                        return;
                    }

                    /* amulet.DurabilityPoint -= 1;
                     * if (amulet.DurabilityPoint <= 0)
                     * {
                     *   session.Character.DeleteItemByItemInstanceId(amulet.Id);
                     *   await session.SendPacketAsync($"info {Language.Instance.GetMessageFromKey("AMULET_DESTROYED")}");
                     *   await session.SendPacketAsync(session.Character.GenerateEquipment());
                     * }*/
                    await player.SendTopscreenMessage("AMULET_FAIL_SAVED", MsgPacketType.Whisper);

                    await player.SendChatMessageAsync("AMULET_FAIL_SAVED", SayColorType.Purple);

                    return;

                case RarifyProtection.None:
                    /* session.Character.DeleteItemByItemInstanceId(Id);*/
                    //player.EmitEvent(new InventoryDestroyItemEvent { ItemInstance = e.Item });
                    await player.SendTopscreenMessage("RARIFY_FAILED", MsgPacketType.Whisper);

                    await player.SendChatMessageAsync("RARIFY_FAILED", SayColorType.Purple);

                    return;
                }

                await player.SendTopscreenMessage("RARIFY_FAILED_ITEM_SAVED", MsgPacketType.Whisper);

                await player.SendChatMessageAsync("RARIFY_FAILED_ITEM_SAVED", SayColorType.Purple);

                await player.BroadcastAsync(player.GenerateEffectPacket(3004));
            }
        }
        public static async Task MoveItems(this InventoryComponent inv, ItemInstanceDto source, ItemInstanceDto dest)
        {
            ItemInstanceDto[] subInv = inv.GetSubInvFromItemInstance(source);
            subInv[dest.Slot]   = source;
            subInv[source.Slot] = dest;

            short tmp = dest.Slot;

            dest.Slot   = source.Slot;
            source.Slot = tmp;

            if (!(inv.Entity is IPlayerEntity player))
            {
                return;
            }

            await player.SendPacketAsync(source.GenerateIvnPacket());

            await player.SendPacketAsync(dest.GenerateIvnPacket());
        }
Exemple #29
0
 private static EInfoPacket GenerateEInfoArmor(ItemInstanceDto itemInstance) =>
 new EInfoPacket
 {
     EInfoType        = EInfoPacketType.Armor,
     ItemVNum         = itemInstance.ItemId,
     Rare             = itemInstance.Rarity,
     Upgrade          = itemInstance.Upgrade,
     Fixed            = itemInstance.IsFixed,
     LevelMinimum     = itemInstance.Item.LevelMinimum,
     CloseDefense     = itemInstance.Item.CloseDefence,
     RangeDefense     = itemInstance.Item.DistanceDefence,
     MagicDefense     = itemInstance.Item.MagicDefence,
     DefenseDodge     = itemInstance.Item.DefenceDodge,
     Price            = itemInstance.Item.Price,
     Unknown2         = -1,
     Rare2            = 0,
     BoundCharacterId = 0,
     ShellEffectCount = 0,
     ShellEffect      = 0
 };
Exemple #30
0
        public static void GenerateHeroicShell(this ItemInstanceDto item, RarifyProtection protection)
        {
            byte shellType;

            if (protection != RarifyProtection.RandomHeroicAmulet)
            {
                return;
            }

            if (!item.Item.IsHeroic || item.Rarity <= 0)
            {
                return;
            }

            if (item.Rarity < 8)
            {
                shellType = (byte)(item.Item.ItemType == ItemType.Armor ? 11 : 10);
                if (shellType != 11 && shellType != 10)
                {
                }
            }
            else
            {
                List <byte> possibleTypes = new List <byte> {
                    4, 5, 6, 7
                };
                int probability = (int)Random.Next();
                shellType = (byte)(item.Item.ItemType == ItemType.Armor
                    ? probability > 50 ? 5 : 7
                    : probability > 50
                        ? 4
                        : 6);
                if (!possibleTypes.Contains(shellType))
                {
                }
            }

            // item.EquipmentOptions.Clear();
            // int shellLevel = item.Item.LevelMinimum == 25 ? 101 : 106;
            // item.EquipmentOptions.AddRange(ShellGeneratorHelper.Instance.GenerateShell(shellType, item.Rarity == 8 ? 7 : item.Rarity, shellLevel));
        }