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); }
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); }
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)); }