Пример #1
0
 public EquipmentProfile()
 {
     CreateMap <Equipment, EquipmentDto>()
     .ForMember(o => o.IsWeapon, opt => opt.MapFrom(o => EquipmentConstants.IsWeaponConstant(o.Type)))
     .ForMember(o => o.IsFavorite, opt => opt.MapFrom(o => o.Option == null ? false : o.Option.IsFavorite));
     CreateMap <EquipmentDto, Equipment>();
 }
        public void Equip(Fighter fighter, Equipment equipment, bool unequipExisting)
        {
            if (fighter.Equipment == null)
            {
                throw new ArgumentNullException(nameof(Fighter.Equipment));
            }

            bool isWeapon = EquipmentConstants.IsWeaponConstant(equipment.Type);

            var existing = fighter.Equipment.FirstOrDefault(o => o.Type == equipment.Type || (isWeapon && EquipmentConstants.IsWeaponConstant(o.Type)));

            if (existing != null && !unequipExisting)
            {
                throw new InvalidEquipmentOperationException();
            }

            if (fighter.Level < equipment.Level)
            {
                throw new InvalidEquipmentOperationException();
            }

            if (existing != null)
            {
                existing.FighterId = null;
            }

            equipment.FighterId = fighter.Id;
            equipment.Fighter   = fighter;
        }
        public bool IsValidOutfit(Fighter fighter)
        {
            if (fighter.Equipment == null)
            {
                throw new ArgumentNullException(nameof(Fighter.Equipment));
            }

            var headCount      = fighter.Equipment.Count(o => o.Type == EquipmentConstants.ArmorHead);
            var shouldersCount = fighter.Equipment.Count(o => o.Type == EquipmentConstants.ArmorShoulders);
            var chestCount     = fighter.Equipment.Count(o => o.Type == EquipmentConstants.ArmorChest);
            var handsCount     = fighter.Equipment.Count(o => o.Type == EquipmentConstants.ArmorHands);
            var legsCount      = fighter.Equipment.Count(o => o.Type == EquipmentConstants.ArmorLegs);
            var shoesCount     = fighter.Equipment.Count(o => o.Type == EquipmentConstants.ArmorShoes);
            var weaponCount    = fighter.Equipment.Count(o => EquipmentConstants.IsWeaponConstant(o.Type));

            var counts = new int[]
            {
                headCount,
                shouldersCount,
                chestCount,
                handsCount,
                legsCount,
                shoesCount,
                weaponCount,
            };

            return(!counts.Any(o => o > 1));
        }
        public IEnumerable <ISkill> GetSkills(Fighter fighter)
        {
            if (fighter.Equipment == null)
            {
                throw new ArgumentNullException(nameof(Fighter.Equipment));
            }

            var skills = new List <ISkill>();

            var usedWeapon = fighter.Equipment.FirstOrDefault(o => EquipmentConstants.IsWeaponConstant(o.Type));

            if (usedWeapon != null)
            {
                skills.AddRange(WeaponSkills.Where(o => o.WeaponType == usedWeapon.Type));
            }

            skills.AddRange(HealSkills);

            return(skills);
        }
Пример #5
0
        protected override async Task <bool> ExecuteCommand(IDiscordBot bot, SocketMessage message, ApplicationUser user, ApplicationDbContext context, GearOption option)
        {
            List <EquipmentItem> equipmentItems = user.Equipment.Where(t => t.EquipmentType.Equals(option.EquipmentType, StringComparison.InvariantCultureIgnoreCase))
                                                  .ToList();

            if (!EquipmentConstants.IsValidEquipmentType(option.EquipmentType))
            {
                await message.Channel.SendMessageAsync($"Invalid command equipment type {option.EquipmentType} from {message.Author}");

                return(false);
            }

            using (var equipmentWidget =
                       await _equipmentWidget.GetWidgetAsync(
                           new EquipmentWidgetOptions {
                Options = option, Items = equipmentItems
            }))
            {
                await message.Channel.SendFileAsync(equipmentWidget, "image.png", string.Empty);
            }
            return(true);
        }
Пример #6
0
        public async Task <ActionResult <RewardContentDto> > Buy([FromBody] ShopItemDto dto, [FromServices] IEquipmentGenerator equipmentGenerator)
        {
            var userId = User.Claims.GetUserId();

            if (userId == null)
            {
                return(Forbid());
            }

            var item = ShopInventory.Items.FirstOrDefault(o => o.ItemId == dto.ItemId && o.Rarity == dto.Rarity);

            if (item == null)
            {
                return(BadRequest());
            }

            foreach (var price in item.Prices)
            {
                var currencies = await Context.Items
                                 .Where(o => o.UserId == userId)
                                 .Where(o => o.ItemId == price.CurrencyItemId)
                                 .Take(price.Quantity)
                                 .ToListAsync();

                if (currencies.Count != price.Quantity)
                {
                    return(BadRequest());
                }

                Context.RemoveRange(currencies);
            }

            var content = new RewardContentDto();

            if (EquipmentConstants.IsEquipmentConstant(item.ItemId))
            {
                var fighterLevel = await Context.Fighters
                                   .Where(o => o.UserId == userId)
                                   .MaxAsync(o => o.Level);

                var itemLevel = fighterLevel.NearestBase(8);
                if (itemLevel < 1)
                {
                    itemLevel = 1;
                }

                var equipment = equipmentGenerator.GenerateEquipment(item.ItemId, itemLevel, item.Rarity, userId.Value);
                Context.Add(equipment);
                content.Equipment.Add(Mapper.Map <EquipmentDto>(equipment));
            }
            else
            {
                var boughtItem = new Item()
                {
                    ItemId = item.ItemId,
                    UserId = userId.Value,
                };

                Context.Items.Add(boughtItem);
                content.Items.Add(Mapper.Map <ItemDto>(boughtItem));
            }

            await Context.SaveChangesAsync();

            return(Ok(content));
        }