public async Task <List <JobTreantNodeViewModel> > GetJobTreeDataAsync(string gender) { List <JobTreantNodeViewModel> viewModels = new List <JobTreantNodeViewModel>(); using (FFTContext context = new FFTContext()) { List <Job> jobs = await context.Jobs.Where(m => !m.PspName.Contains("1")).ToListAsync(); foreach (Job job in jobs) { viewModels.Add(new JobTreantNodeViewModel { RequiredGender = job.IsMaleOnly ? "Male" : job.IsFemaleOnly ? "Female" : "", ImagePath = $"/img/Jobs/{(Enum.GetName(typeof(Enums.Jobs), job.JobId).Contains("Onion") ? "OnionKnight" : Enum.GetName(typeof(Enums.Jobs), job.JobId))}_" + $"{(job.PspName.Contains("Dancer") ? "Female" : job.PspName.Contains("Bard") ? "Male" : gender)}_Standing.png", JobName = job.PspName.Contains("Onion") ? "Onion Knight" : job.PspName, IdentifierName = job.PspName.Contains("Onion") ? "onionknight" : job.PspName.Replace(" ", "").ToLower(), JobPrerequisiteNames = job.Jobprerequisites.Select(m => (m.JobLevelRequiredPsp > -1 ? $"Level {m.JobLevelRequiredPsp} " : "Mastered ") + $"{jobs.Single(c => c.JobId == m.JobRequiredId).PspName}").ToList() }); } ; viewModels.Single(m => m.JobName.Contains("Dark")).JobPrerequisiteNames.Add("Crystallize 20 Units"); } return(viewModels); }
public async Task <List <ItemOverviewViewModel> > GetItemSelectionDataAsync(int ItemCategoryId) { List <ItemOverviewViewModel> items = new List <ItemOverviewViewModel>(); using (FFTContext context = new FFTContext()) { items.AddRange(await context.Items.Where(m => m.ItemCategoryId == ItemCategoryId).Select(c => new ItemOverviewViewModel { ItemID = c.ItemId, EquipmentCategoryID = c.ItemCategory.EquipmentCategoryId, EquipmentCategoryName = c.ItemCategory.EquipmentCategoryName.ToLower(), ItemCategoryID = ItemCategoryId, AccessoryMagicalEvade = (c.ItemCategoryId == (int)Enums.ItemCategoriesList.Cloak ? c.MagicalEvade ?? 0 : 0).ToString(), AccessoryPhysicalEvade = (c.ItemCategoryId == (int)Enums.ItemCategoriesList.Cloak ? c.PhysicalEvade ?? 0 : 0).ToString(), HPBonus = (c.HPBonus ?? 0), MPBonus = (c.MPBonus ?? 0), MoveBonus = (c.MoveBoost ?? 0), JumpBonus = (c.JumpBoost ?? 0), SpeedBonus = (c.SpeedBoost ?? 0), ShieldPhysicalEvade = (c.ItemCategoryId == (int)Enums.ItemCategoriesList.Shield ? c.PhysicalEvade ?? 0 : 0).ToString(), ShieldMagicalEvade = (c.ItemCategoryId == (int)Enums.ItemCategoriesList.Shield ? c.MagicalEvade ?? 0 : 0).ToString(), PhysicalAttackPower = (c.PhysicalAttackBoost ?? 0).ToString(), MagicalAttackPower = (c.MagicAttackBoost ?? 0).ToString(), Name = c.PspName, WeaponPower = (c.AttackPower ?? 0).ToString(), WeaponHit = (c.HitPercentage ?? 0).ToString(), ImagePath = (c.ItemCategory.EquipmentCategoryId == (int)Enums.EquipmentCategoriesList.Weapon ? @"/img/Item_Icons/Weapons/" : c.ItemCategory.EquipmentCategoryId > (int)Enums.EquipmentCategoriesList.Weapon && c.ItemCategory.EquipmentCategoryId < (int)Enums.EquipmentCategoriesList.Accessory ? @"/img/Item_Icons/Armour/" : @"/img/Item_Icons/Accessories/") + c.IconFileName }).ToListAsync()); } return(items); }
public ActionResult GetUnitItemLookupPartial(int jobID, int equipmentCategoryID, bool isFemale) { List <UnitItemLookupViewModel> items = new List <UnitItemLookupViewModel>(); using (FFTContext context = new FFTContext()) { if (equipmentCategoryID != (int)EquipmentCategoriesList.Accessory) { Job unitJob = context.Jobs.Single(m => m.JobID == jobID); items.AddRange(unitJob.JobItems.Where(m => m.ItemCategory.EquipmentCategoryID == equipmentCategoryID).Select(m => new UnitItemLookupViewModel { ItemCategoryID = m.ItemCategoryID, ItemCategoryName = m.ItemCategory.ItemCategoryName, StartingItemImagePath = m.ItemCategory.StartingItemImagePath })); } else { items.AddRange(context.ItemCategories.Where(m => m.EquipmentCategoryID == equipmentCategoryID && (!isFemale ? m.IsFemaleOnly == false : true)).Select(m => new UnitItemLookupViewModel { ItemCategoryID = m.ItemCategoryID, ItemCategoryName = m.ItemCategoryName, StartingItemImagePath = m.StartingItemImagePath })); } } return(PartialView("~/Views/Home/_UnitItemLookupPartial.cshtml", items)); }
public async Task <List <UnitItemLookupViewModel> > GetUnitItemLookupDataAsync(int JobId, int EquipmentCategoryId, bool isFemale) { List <UnitItemLookupViewModel> items = new List <UnitItemLookupViewModel>(); using (FFTContext context = new FFTContext()) { if (EquipmentCategoryId != (int)Enums.EquipmentCategoriesList.Accessory) { Job unitJob = await context.Jobs.SingleAsync(m => m.JobId == JobId); items.AddRange(unitJob.Jobitems.Where(m => m.ItemCategory.EquipmentCategoryId == EquipmentCategoryId).Select(m => new UnitItemLookupViewModel { ItemCategoryID = m.ItemCategoryId, ItemCategoryName = m.ItemCategory.ItemCategoryName, StartingItemImagePath = m.ItemCategory.StartingItemImagePath })); } else { items.AddRange(await context.ItemCategories.Where(m => m.EquipmentCategoryId == EquipmentCategoryId && (!isFemale ? m.IsFemaleOnly : true)).Select(m => new UnitItemLookupViewModel { ItemCategoryID = m.ItemCategoryId, ItemCategoryName = m.ItemCategoryName, StartingItemImagePath = m.StartingItemImagePath }).ToListAsync()); } } return(items); }
public ActionResult GetUnitDismissPartial(UnitDismissViewModel unit) { using (FFTContext context = new FFTContext()) { unit.Quote = context.Quotes.OrderBy(m => Guid.NewGuid()).FirstOrDefault(m => m.Gender == unit.Gender).Text; } unit.JobName = Enum.GetName(typeof(Jobs), unit.JobID); unit.JobName = unit.JobName.Contains("Onion") ? "Onion Knight" : unit.JobName; return(PartialView("~/Views/Home/_UnitDismissPartial.cshtml", unit)); }
public async Task <ItemDetailsViewModel> GetItemDetailsDataAsync(int ItemId) { ItemDetailsViewModel itemDetails; using (FFTContext context = new FFTContext()) { Item item = await context.Items.SingleAsync(m => m.ItemId == ItemId); itemDetails = new ItemDetailsViewModel { ItemID = item.ItemId, AcquiredViaCatch = item.AcquiredViaCatch, AcquiredViaInitialEquip = item.AcquiredViaInitialEquip, AcquiredViaLocation = item.AcquiredViaLocation, AcquiredViaMode = item.AcquiredViaMode, AcquiredViaPoach = item.AcquiredViaPoach, AcquiredViaSteal = item.AcquiredViaSteal, AcquiredViaTreasureHunt = item.AcquiredViaTreasureHunt, AttackPower = item.AttackPower?.ToString("D3") ?? "0", Cost = item.Cost, Description = item.Description, Element = AttributeCalculatorService.GetElementSVGLocations(item.Element), ElementAbsorbed = AttributeCalculatorService.GetElementSVGLocations(item.ElementAbsorbed), ElementBoosted = AttributeCalculatorService.GetElementSVGLocations(item.ElementBoosted), ElementHalved = AttributeCalculatorService.GetElementSVGLocations(item.ElementHalved), ElementNegated = AttributeCalculatorService.GetElementSVGLocations(item.ElementNegated), ElementWeakness = AttributeCalculatorService.GetElementSVGLocations(item.ElementWeakness), EquipStatusEffect = AttributeCalculatorService.GetEffectSVGLocations(item.EquipStatusEffect), HitPercentage = item.HitPercentage?.ToString("D2") ?? "0", HitStatusEffect = AttributeCalculatorService.GetEffectSVGLocations(item.HitStatusEffect), HPBonus = item.HPBonus?.ToString() ?? "0", ImagePath = (item.ItemCategory.EquipmentCategoryId == (int)Enums.EquipmentCategoriesList.Weapon ? @"/img/Item_Icons/Weapons/" : item.ItemCategory.EquipmentCategoryId > (int)Enums.EquipmentCategoriesList.Weapon && item.ItemCategory.EquipmentCategoryId < (int)Enums.EquipmentCategoriesList.Accessory ? @"/img/Item_Icons/Armour/" : @"/img/Item_Icons/Accessories/") + item.IconFileName, ImmuneStatusEffect = AttributeCalculatorService.GetEffectSVGLocations(item.ImmuneStatusEffect), JumpBoost = item.JumpBoost?.ToString() ?? "0", MagicalEvade = item.MagicalEvade?.ToString() ?? "0", MagicAttackBoost = item.MagicAttackBoost?.ToString() ?? "0", MoveBoost = item.MoveBoost?.ToString() ?? "0", MPBonus = item.MPBonus?.ToString() ?? "0", Name = item.PspName, PhysicalAttackBoost = item.PhysicalAttackBoost?.ToString() ?? "0", PhysicalEvade = item.PhysicalEvade?.ToString() ?? "0", RemoveStatusEffect = AttributeCalculatorService.GetEffectSVGLocations(item.RemoveStatusEffect), SpeedBoost = item.SpeedBoost?.ToString() ?? "0", SpellEffect = AttributeCalculatorService.GetEffectSVGLocations(item.SpellEffect), ItemCategoryName = item.ItemCategory.ItemCategoryName }; } return(itemDetails); }
public async Task <UnitDismissViewModel> GetUnitDismissDataAsync(UnitDismissViewModel unit) { using (FFTContext context = new FFTContext()) { Random random = new Random(); int quoteCount = context.Quotes.Count(m => m.Gender == unit.Gender); unit.Quote = await context.Quotes.Skip(random.Next(quoteCount)).Select(m => m.Text).FirstAsync(); } unit.JobName = Enum.GetName(typeof(Enums.Jobs), unit.JobID); unit.JobName = unit.JobName.Contains("Onion") ? "Onion Knight" : unit.JobName; unit.JobPortraitPath = String.Format("/img/Jobs/{0}_{1}_Portrait.png", unit.JobName.Contains("Onion") ? "OnionKnight" : unit.JobName, unit.GenderName); return(unit); }
public ActionResult GetItemDetailsPartial(int itemID) { using (FFTContext context = new FFTContext()) { Item item = context.Items.Single(m => m.ItemID == itemID); ItemDetailsViewModel itemDetails = new ItemDetailsViewModel { ItemID = item.ItemID, AcquiredViaCatch = item.AcquiredViaCatch, AcquiredViaInitialEquip = item.AcquiredViaInitialEquip, AcquiredViaLocation = item.AcquiredViaLocation, AcquiredViaMode = item.AcquiredViaMode, AcquiredViaPoach = item.AcquiredViaPoach, AcquiredViaSteal = item.AcquiredViaSteal, AcquiredViaTreasureHunt = item.AcquiredViaTreasureHunt, AttackPower = item.AttackPower?.ToString("D3") ?? "0", Cost = item.Cost, Description = item.Description, Element = AttributeCalculator.GetElementSVGLocations(item.Element), ElementAbsorbed = AttributeCalculator.GetElementSVGLocations(item.ElementAbsorbed), ElementBoosted = AttributeCalculator.GetElementSVGLocations(item.ElementBoosted), ElementHalved = AttributeCalculator.GetElementSVGLocations(item.ElementHalved), ElementNegated = AttributeCalculator.GetElementSVGLocations(item.ElementNegated), ElementWeakness = AttributeCalculator.GetElementSVGLocations(item.ElementWeakness), EquipStatusEffect = AttributeCalculator.GetEffectSVGLocations(item.EquipStatusEffect), HitPercentage = item.HitPercentage?.ToString("D2") ?? "0", HitStatusEffect = AttributeCalculator.GetEffectSVGLocations(item.HitStatusEffect), HPBonus = item.HPBonus?.ToString() ?? "0", ImagePath = (item.ItemCategory.EquipmentCategoryID == (int)EquipmentCategoriesList.Weapon ? @"/Content/Images/Item_Icons/Weapons/" : item.ItemCategory.EquipmentCategoryID > (int)EquipmentCategoriesList.Weapon && item.ItemCategory.EquipmentCategoryID < (int)EquipmentCategoriesList.Accessory ? @"/Content/Images/Item_Icons/Armour/" : @"/Content/Images/Item_Icons/Accessories/") + item.IconFileName, ImmuneStatusEffect = AttributeCalculator.GetEffectSVGLocations(item.ImmuneStatusEffect), JumpBoost = item.JumpBoost?.ToString() ?? "0", MagicalEvade = item.MagicalEvade?.ToString() ?? "0", MagicAttackBoost = item.MagicAttackBoost?.ToString() ?? "0", MoveBoost = item.MoveBoost?.ToString() ?? "0", MPBonus = item.MPBonus?.ToString() ?? "0", Name = item.PspName, PhysicalAttackBoost = item.PhysicalAttackBoost?.ToString() ?? "0", PhysicalEvade = item.PhysicalEvade?.ToString() ?? "0", RemoveStatusEffect = AttributeCalculator.GetEffectSVGLocations(item.RemoveStatusEffect), SpeedBoost = item.SpeedBoost?.ToString() ?? "0", SpellEffect = AttributeCalculator.GetEffectSVGLocations(item.SpellEffect), ItemCategoryName = item.ItemCategory.ItemCategoryName }; return(PartialView("~/Views/Home/_UnitItemDetailsPartial.cshtml", itemDetails)); } }
public ActionResult GetJobTreePartial(string gender) { Dictionary <string, List <JobTreantNodeViewModel> > viewModels = new Dictionary <string, List <JobTreantNodeViewModel> >(); using (FFTContext context = new FFTContext()) { List <Job> jobs = context.Jobs.ToList(); foreach (Job job in jobs) { viewModels.Add(job.PspName, new List <JobTreantNodeViewModel> { new JobTreantNodeViewModel { RequiredGender = job.IsMaleOnly ? "Male" : job.IsFemaleOnly ? "Female" : "", ImagePath = $"/Content/Images/Jobs/{(Enum.GetName(typeof(Jobs), job.JobID).Contains("Onion") ? "OnionKnight" : Enum.GetName(typeof(Jobs), job.JobID))}_" + $"{(job.PspName.Contains("Dancer") ? "Female" : job.PspName.Contains("Bard") ? "Male" : gender)}_Standing.png", JobName = job.PspName, JobPrerequisiteNames = job.JobPrerequisites.Select(m => (m.JobLevelRequiredPsp > -1 ? $"Level {m.JobLevelRequiredPsp} " : "Mastered ") + $"{jobs.Single(c => c.JobID == m.JobRequiredID).PspName}").ToList() } }); if (job.JobPrerequisites.Count > 0) { viewModels.Add(job.PspName + "Pre", job.JobPrerequisites.Select(m => new JobTreantNodeViewModel { ImagePath = $"/Content/Images/Jobs/{(Enum.GetName(typeof(Jobs), m.JobRequiredID).Contains("Onion") ? "OnionKnight" : Enum.GetName(typeof(Jobs), m.JobRequiredID))}_{gender}_Standing.png", JobName = jobs.Single(c => c.JobID == m.JobRequiredID).PspName, RequiredJobLevelPath = m.JobLevelRequiredPsp > 0 ? $"/Content/Images/number_{m.JobLevelRequiredPsp}.png" : $"/Content/Images/star.png", JobPrerequisiteNames = jobs.Single(c => m.JobRequiredID == c.JobID).JobPrerequisites.Select(x => $"Level {x.JobLevelRequiredPsp} {jobs.Single(v => v.JobID == x.JobRequiredID).PspName}").ToList() }).ToList()); } } } return(PartialView("~/Views/Home/_JobTreePartial.cshtml", viewModels)); }
public async Task <UnitDetailsViewModel> PopulateNewUnitDataAsync(int JobId, int gender, int position) { UnitDetailsViewModel unit; Item weaponItem1 = null, weaponItem2 = null, headItem = null, bodyItem = null; Random r = new Random(); using (FFTContext context = new FFTContext()) { Job unitJob = await context.Jobs.SingleAsync(m => m.JobId == JobId); int nameCount = context.UnitNames.Count(m => m.Gender == gender); unit = new UnitDetailsViewModel { Unit = new UnitOverviewViewModel { UnitName = await context.UnitNames.Where(m => m.Gender == gender).Skip(r.Next(nameCount)).Select(m => m.Name).FirstAsync() } }; unit.Unit.JobID = JobId; unit.Unit.JobName = Enum.GetName(typeof(Enums.Jobs), JobId); unit.Unit.Gender = gender; unit.Unit.GenderName = Enum.GetName(typeof(Enums.Gender), gender); unit.Unit.Position = position; unit.Unit.Level = 1; unit.Unit.Experience = r.Next(0, 99); unit.Unit.Brave = r.Next(40, 70); unit.Unit.Faith = r.Next(40, 70); unit.RawHP = gender == 0 ? r.Next(491520, 524287) : gender == 1 ? r.Next(458752, 491519) : r.Next(573440, 622591); unit.RawMP = gender == 0 ? r.Next(229376, 245759) : gender == 1 ? r.Next(245760, 262143) : r.Next(98304, 147455); unit.RawPhysicalAttack = gender == 0 ? 81920 : gender == 1 ? 65536 : r.Next(81920, 98303); unit.RawMagicalAttack = gender == 0 ? 65536 : gender == 1 ? 81920 : r.Next(81920, 98303); unit.RawSpeed = gender == 0 ? 98304 : gender == 1 ? 98304 : 81920; List <ItemCategoryViewModel> jobItems = await context.JobItems.Where(m => m.JobId == unit.Unit.JobID).Select(m => new ItemCategoryViewModel { EquipmentCategoryID = m.ItemCategory.EquipmentCategoryId, ItemCategoryID = m.ItemCategoryId }).ToListAsync(); if (jobItems.Any(m => m.EquipmentCategoryID == (int)Enums.EquipmentCategoriesList.Weapon)) { int randomWeaponID = jobItems.FirstOrDefault(m => m.EquipmentCategoryID == (int)Enums.EquipmentCategoriesList.Weapon).ItemCategoryID; weaponItem1 = jobItems.Any(m => m.EquipmentCategoryID == (int)Enums.EquipmentCategoriesList.Weapon) ? context.Items.FirstOrDefault(m => m.ItemCategoryId == randomWeaponID && m.IsStartingItem) : null; unit.WeaponID = weaponItem1 != null ? weaponItem1.ItemId : 0; unit.ShieldID = JobId == (int)Enums.Jobs.Ninja ? unit.WeaponID : 0; } if (jobItems.Any(m => m.EquipmentCategoryID == (int)Enums.EquipmentCategoriesList.Shield)) { int randomShieldID = jobItems.FirstOrDefault(m => m.EquipmentCategoryID == (int)Enums.EquipmentCategoriesList.Shield).ItemCategoryID; weaponItem2 = jobItems.Any(m => m.EquipmentCategoryID == (int)Enums.EquipmentCategoriesList.Shield) ? context.Items.FirstOrDefault(m => m.ItemCategoryId == randomShieldID && m.IsStartingItem) : null; unit.ShieldID = weaponItem2 != null ? weaponItem2.ItemId : 0; } if (jobItems.Any(m => m.EquipmentCategoryID == (int)Enums.EquipmentCategoriesList.Helmet)) { int randomHeadID = jobItems.FirstOrDefault(m => m.EquipmentCategoryID == (int)Enums.EquipmentCategoriesList.Helmet).ItemCategoryID; headItem = jobItems.Any(m => m.EquipmentCategoryID == (int)Enums.EquipmentCategoriesList.Helmet) ? context.Items.Where(c => c.ItemCategoryId == randomHeadID) .FirstOrDefault(m => m.IsStartingItem) : null; unit.HeadID = headItem != null ? headItem.ItemId : 0; } if (jobItems.Any(m => m.EquipmentCategoryID == (int)Enums.EquipmentCategoriesList.Armor)) { int randomBodyID = jobItems.FirstOrDefault(m => m.EquipmentCategoryID == (int)Enums.EquipmentCategoriesList.Armor).ItemCategoryID; bodyItem = jobItems.Any(m => m.EquipmentCategoryID == (int)Enums.EquipmentCategoriesList.Armor) ? context.Items.FirstOrDefault(m => m.ItemCategoryId == randomBodyID && m.IsStartingItem) : null; unit.BodyID = bodyItem != null ? bodyItem.ItemId : 0; } unit.Resistances = new UnitResistAndImmunityViewModel(); unit = AttributeCalculatorService.CalculateHPAndMP(headItem, bodyItem, unit, unitJob); unit = AttributeCalculatorService.CalculateBasicStats(weaponItem1, weaponItem2, headItem, bodyItem, null, unit, unitJob); unit = AttributeCalculatorService.CalculateEvasionStats(weaponItem2, null, unitJob, unit); unit = AttributeCalculatorService.CalculateResistancesAndImmunities(new List <Item> { weaponItem1, weaponItem2, headItem, bodyItem }, unit); unit.PrimaryAbilityJobID = unit.Unit.JobID; unit.PrimaryAbilityName = unitJob.AbilitySetPspName; } return(unit); }
public async Task <List <JobOverviewViewModel> > GetJobSelectionDataAsync(int genderID) { List <JobOverviewViewModel> viewModels; JobOverviewRangeViewModel rangeViewModel; string genderName = Enum.GetName(typeof(Enums.Gender), genderID); using (FFTContext context = new FFTContext()) { viewModels = await context.Jobs.Where(m => genderID == 0? !m.IsFemaleOnly : !m.IsMaleOnly).Select(m => new JobOverviewViewModel { JobID = m.JobId, FileName = (m.PspName.Contains("(") ? m.PspName.Remove(m.PspName.IndexOf("(")) : m.PspName).Replace(" ", ""), DisplayName = m.PspName, GenderID = genderID, Gender = genderName, HPMultiplier = m.HPMultiplier, HPGrowthConstant = m.HPGrowthConstant, HPGrowthConstantLabel = m.HPGrowthConstant, MPMultiplier = m.MPMultiplier, MPGrowthConstant = m.MPGrowthConstant, MPGrowthConstantLabel = m.MPGrowthConstant, SpeedMulitplier = m.SpeedMulitplier, SpeedGrowthConstant = m.SpeedGrowthConstant, SpeedGrowthConstantLabel = m.SpeedGrowthConstant, PhysicalAttackMultiplier = m.PhysicalAttackMultiplier, PhysicalAttackGrowthConstant = m.PhysicalAttackGrowthConstant, PhysicalAttackGrowthConstantLabel = m.PhysicalAttackGrowthConstant, MagicalAttackMultiplier = m.MagicalAttackMultiplier, MagicalAttackGrowthConstant = m.MagicalAttackGrowthConstant, MagicalAttackGrowthConstantLabel = m.MagicalAttackGrowthConstant, BaseMoveLength = m.BaseMoveLength, BaseJumpHeight = m.BaseJumpHeight, BaseCombatEvasion = m.BaseCombatEvasion }).ToListAsync(); rangeViewModel = new JobOverviewRangeViewModel { HPGrowthConstantMax = context.Jobs.Max(c => c.HPGrowthConstant), HPGrowthConstantMin = context.Jobs.Min(c => c.HPGrowthConstant), MPGrowthConstantMax = context.Jobs.Max(c => c.MPGrowthConstant), MPGrowthConstantMin = context.Jobs.Min(c => c.MPGrowthConstant), SpeedGrowthConstantMax = context.Jobs.Max(c => c.SpeedGrowthConstant), SpeedGrowthConstantMin = context.Jobs.Min(c => c.SpeedGrowthConstant), PhysicalAttackGrowthConstantMax = context.Jobs.Max(c => c.PhysicalAttackGrowthConstant), PhysicalAttackGrowthConstantMin = context.Jobs.Min(c => c.PhysicalAttackGrowthConstant), MagicalAttackGrowthConstantMax = context.Jobs.Max(c => c.MagicalAttackGrowthConstant), MagicalAttackGrowthConstantMin = context.Jobs.Min(c => c.MagicalAttackGrowthConstant) }; int commonDenominator = (new int[] { rangeViewModel.HPGrowthConstantMax, rangeViewModel.MPGrowthConstantMax, rangeViewModel.SpeedGrowthConstantMax, rangeViewModel.PhysicalAttackGrowthConstantMax, rangeViewModel.MagicalAttackGrowthConstantMax }).Max(); rangeViewModel.HPGrowthConstantMultiplier = (float)commonDenominator / (float)rangeViewModel.HPGrowthConstantMax; rangeViewModel.MPGrowthConstantMultiplier = (float)commonDenominator / (float)rangeViewModel.MPGrowthConstantMax; rangeViewModel.SpeedGrowthConstantMultiplier = (float)commonDenominator / (float)rangeViewModel.SpeedGrowthConstantMax; rangeViewModel.PhysicalAttackGrowthConstantMultiplier = (float)commonDenominator / (float)rangeViewModel.PhysicalAttackGrowthConstantMax; rangeViewModel.MagicalAttackGrowthConstantMultiplier = (float)commonDenominator / (float)rangeViewModel.MagicalAttackGrowthConstantMax; foreach (JobOverviewViewModel viewModel in viewModels) { viewModel.HPGrowthConstant = (int)((rangeViewModel.HPGrowthConstantMax + rangeViewModel.HPGrowthConstantMin - viewModel.HPGrowthConstant) * rangeViewModel.HPGrowthConstantMultiplier); viewModel.MPGrowthConstant = (int)((rangeViewModel.MPGrowthConstantMax + rangeViewModel.MPGrowthConstantMin - viewModel.MPGrowthConstant) * rangeViewModel.MPGrowthConstantMultiplier); viewModel.SpeedGrowthConstant = (int)((rangeViewModel.SpeedGrowthConstantMax + rangeViewModel.SpeedGrowthConstantMin - viewModel.SpeedGrowthConstant) * rangeViewModel.SpeedGrowthConstantMultiplier); viewModel.PhysicalAttackGrowthConstant = (int)((rangeViewModel.PhysicalAttackGrowthConstantMax + rangeViewModel.PhysicalAttackGrowthConstantMin - viewModel.PhysicalAttackGrowthConstant) * rangeViewModel.PhysicalAttackGrowthConstantMultiplier); viewModel.MagicalAttackGrowthConstant = (int)((rangeViewModel.MagicalAttackGrowthConstantMax + rangeViewModel.MagicalAttackGrowthConstantMin - viewModel.MagicalAttackGrowthConstant) * rangeViewModel.MagicalAttackGrowthConstantMultiplier); } } return(viewModels); }
public async Task <UnitDetailsViewModel> GetUnitStatsDetailDataAsync(UnitDetailsViewModel unit, int?ItemId = null) { Item weaponItem1 = null, weaponItem2 = null, headItem = null, bodyItem = null, accessoryItem = null; List <Item> items = new List <Item>(); unit.Unit.JobName = Enum.GetName(typeof(Enums.Jobs), unit.Unit.JobID); unit.Unit.JobName = unit.Unit.JobName.Contains("Onion") ? "Onion Knight" : unit.Unit.JobName; unit.Unit.JobPortraitPath = String.Format("/img/Jobs/{0}_{1}_Portrait.png", unit.Unit.JobName.Contains("Onion") ? "OnionKnight" : unit.Unit.JobName, unit.Unit.GenderName); unit.Unit.JobName = string.Concat(unit.Unit.JobName.Select(m => Char.IsUpper(m) ? " " + m : m.ToString())).Trim(); unit.Unit.GenderName = Enum.GetName(typeof(Enums.Gender), unit.Unit.Gender); using (FFTContext context = new FFTContext()) { if (ItemId != null) { int categoryListLength = Enum.GetNames(typeof(Enums.EquipmentCategoriesList)).Length; Item selectedItem = await context.Items.SingleAsync(m => m.ItemId == ItemId); switch ((Enums.EquipmentCategoriesList)selectedItem.ItemCategory.EquipmentCategoryId) { case Enums.EquipmentCategoriesList.Weapon: unit.WeaponID = selectedItem.ItemId; break; case Enums.EquipmentCategoriesList.Shield: unit.ShieldID = selectedItem.ItemId; break; case Enums.EquipmentCategoriesList.Helmet: unit.HeadID = selectedItem.ItemId; break; case Enums.EquipmentCategoriesList.Armor: unit.BodyID = selectedItem.ItemId; break; case Enums.EquipmentCategoriesList.Accessory: unit.AccessoryID = selectedItem.ItemId; break; } } if (unit.WeaponID != default(int)) { weaponItem1 = await context.Items.SingleAsync(m => m.ItemId == unit.WeaponID); unit.WeaponRight = new ItemOverviewViewModel { WeaponPower = weaponItem1.ItemCategory.EquipmentCategoryId == (int)Enums.EquipmentCategoriesList.Weapon ? weaponItem1.AttackPower.Value.ToString("D3") : "000", WeaponHit = weaponItem1.ItemCategory.EquipmentCategoryId == (int)Enums.EquipmentCategoriesList.Weapon ? weaponItem1.HitPercentage.Value.ToString("D3") : "000", ShieldPhysicalEvade = weaponItem1.ItemCategory.EquipmentCategoryId == (int)Enums.EquipmentCategoriesList.Shield ? weaponItem1.PhysicalEvade.Value.ToString("D2") : "00", ShieldMagicalEvade = weaponItem1.ItemCategory.EquipmentCategoryId == (int)Enums.EquipmentCategoriesList.Shield ? weaponItem1.MagicalEvade.Value.ToString("D2") : "00", PhysicalAttackPower = weaponItem1.PhysicalAttackBoost.HasValue ? weaponItem1.PhysicalAttackBoost.Value.ToString("D2") : "00", MagicalAttackPower = weaponItem1.MagicAttackBoost.HasValue ? weaponItem1.MagicAttackBoost.Value.ToString("D2") : "00", ImagePath = weaponItem1.ItemCategory.EquipmentCategoryId == (int)Enums.EquipmentCategoriesList.Weapon ? @"/img/Item_Icons/Weapons/" + weaponItem1.IconFileName : @"/img/Item_Icons/Armour/" + weaponItem1.IconFileName, Name = weaponItem1.PspName, }; items.Add(weaponItem1); } else { unit.WeaponRight = new ItemOverviewViewModel(); } if (unit.ShieldID != default && weaponItem1.ItemCategory.IsTwoHandOnly) { weaponItem2 = await context.Items.SingleAsync(m => m.ItemId == unit.ShieldID); unit.WeaponLeft = new ItemOverviewViewModel { WeaponPower = weaponItem2 != null ? weaponItem2.ItemCategory.EquipmentCategoryId == (int)Enums.EquipmentCategoriesList.Weapon ? weaponItem2.AttackPower.HasValue ? weaponItem2.AttackPower.Value.ToString("D3") : "000" : "000" : "000", WeaponHit = weaponItem2 != null ? weaponItem2.ItemCategory.EquipmentCategoryId == (int)Enums.EquipmentCategoriesList.Weapon ? weaponItem2.HitPercentage.HasValue ? weaponItem2.HitPercentage.Value.ToString("D3") : "000" : "000" : "000", ShieldPhysicalEvade = weaponItem2 != null ? weaponItem2.ItemCategory.EquipmentCategoryId == (int)Enums.EquipmentCategoriesList.Shield ? weaponItem2.PhysicalEvade.HasValue ? weaponItem2.PhysicalEvade.Value.ToString("D3") : "00" : "00" : "00", ShieldMagicalEvade = weaponItem2 != null ? weaponItem2.ItemCategory.EquipmentCategoryId == (int)Enums.EquipmentCategoriesList.Shield ? weaponItem2.MagicalEvade.HasValue ? weaponItem2.MagicalEvade.Value.ToString("D3") : "00" : "00" : "00", PhysicalAttackPower = weaponItem2 != null?weaponItem2.PhysicalAttackBoost.HasValue?weaponItem2.PhysicalAttackBoost.Value.ToString("D2") : "00" : "00", MagicalAttackPower = weaponItem2 != null?weaponItem2.MagicAttackBoost.HasValue?weaponItem2.MagicAttackBoost.Value.ToString("D2") : "00" : "00", ImagePath = weaponItem2 != null ? weaponItem2.ItemCategory.EquipmentCategoryId == (int)Enums.EquipmentCategoriesList.Weapon ? @"/img/Item_Icons/Weapons/" + weaponItem2.IconFileName : @"/img/Item_Icons/Armour/" + weaponItem2.IconFileName : "", Name = weaponItem2 != null ? weaponItem2.PspName : "", }; items.Add(weaponItem2); } else { unit.WeaponLeft = new ItemOverviewViewModel(); } if (unit.HeadID != default(int)) { headItem = await context.Items.SingleAsync(m => m.ItemId == unit.HeadID); unit.Head = new ItemOverviewViewModel { HPBonus = headItem.HPBonus ?? 0, MPBonus = headItem.MPBonus ?? 0, PhysicalAttackPower = headItem.PhysicalAttackBoost.HasValue ? headItem.PhysicalAttackBoost.Value.ToString("D2") : "00", MagicalAttackPower = headItem.MagicAttackBoost.HasValue ? headItem.MagicAttackBoost.Value.ToString("D2") : "00", SpeedBonus = headItem.SpeedBoost ?? 0, ImagePath = @"/img/Item_Icons/Armour/" + headItem.IconFileName, Name = headItem.PspName, }; items.Add(headItem); } else { unit.Head = new ItemOverviewViewModel(); } if (unit.BodyID != default(int)) { bodyItem = await context.Items.SingleAsync(m => m.ItemId == unit.BodyID); unit.Body = new ItemOverviewViewModel { HPBonus = bodyItem.HPBonus ?? 0, MPBonus = bodyItem.MPBonus ?? 0, PhysicalAttackPower = bodyItem.PhysicalAttackBoost.HasValue ? bodyItem.PhysicalAttackBoost.Value.ToString("D2") : "00", MagicalAttackPower = bodyItem.MagicAttackBoost.HasValue ? bodyItem.MagicAttackBoost.Value.ToString("D2") : "00", SpeedBonus = bodyItem.SpeedBoost ?? 0, ImagePath = @"/img/Item_Icons/Armour/" + context.Items.Single(m => m.ItemId == unit.BodyID).IconFileName, Name = context.Items.Single(m => m.ItemId == unit.BodyID).PspName, }; items.Add(bodyItem); } else { unit.Body = new ItemOverviewViewModel(); } if (unit.AccessoryID != default(int)) { accessoryItem = await context.Items.SingleAsync(m => m.ItemId == unit.AccessoryID); unit.Accessory = new ItemOverviewViewModel { ItemCategoryID = accessoryItem.ItemCategoryId, MoveBonus = accessoryItem.MoveBoost ?? 0, JumpBonus = accessoryItem.JumpBoost ?? 0, SpeedBonus = accessoryItem.SpeedBoost ?? 0, PhysicalAttackPower = accessoryItem.PhysicalAttackBoost.HasValue ? accessoryItem.PhysicalAttackBoost.Value.ToString() : "00", MagicalAttackPower = accessoryItem.MagicAttackBoost.HasValue ? accessoryItem.MagicAttackBoost.Value.ToString() : "00", AccessoryPhysicalEvade = accessoryItem.ItemCategory.EquipmentCategoryId == (int)Enums.EquipmentCategoriesList.Accessory ? accessoryItem.PhysicalEvade.HasValue ? accessoryItem.PhysicalEvade.Value.ToString("D3") : "00" : "00", AccessoryMagicalEvade = accessoryItem.ItemCategory.EquipmentCategoryId == (int)Enums.EquipmentCategoriesList.Accessory ? accessoryItem.MagicalEvade.HasValue ? accessoryItem.MagicalEvade.Value.ToString("D3") : "00" : "00", ImagePath = @"/img/Item_Icons/Accessories/" + context.Items.Single(m => m.ItemId == unit.AccessoryID).IconFileName, Name = context.Items.Single(m => m.ItemId == unit.AccessoryID).PspName, }; items.Add(accessoryItem); } else { unit.Accessory = new ItemOverviewViewModel(); } Job unitJob = await context.Jobs.SingleAsync(m => m.JobId == unit.Unit.JobID); unit = AttributeCalculatorService.CalculateHPAndMP(headItem, bodyItem, unit, unitJob); unit = AttributeCalculatorService.CalculateBasicStats(weaponItem1, weaponItem2, headItem, bodyItem, accessoryItem, unit, unitJob); unit = AttributeCalculatorService.CalculateEvasionStats(weaponItem2, accessoryItem, unitJob, unit); unit.PrimaryAbilityJobID = unitJob.JobId; unit.PrimaryAbilityName = unitJob.AbilitySetPspName; } unit.Unit.AttributeDigits = new UnitOverviewHpMpViewModel { HpDigits = unit.Unit.MaxHP.ToString().ToCharArray(), MpDigits = unit.Unit.MaxMP.ToString().ToCharArray(), ExperienceDigits = unit.Unit.Experience < 10 ? ("0" + unit.Unit.Experience.ToString()).ToCharArray() : unit.Unit.Experience.ToString().ToCharArray(), LevelDigits = unit.Unit.Level < 10 ? ("0" + unit.Unit.Level.ToString()).ToCharArray() : unit.Unit.Level.ToString().ToCharArray(), PositionDigits = unit.Unit.Position < 10 ? ("0" + unit.Unit.Position.ToString()).ToCharArray() : unit.Unit.Position.ToString().ToCharArray() }; unit = AttributeCalculatorService.CalculateResistancesAndImmunities(items, unit); return(unit); }
public ActionResult GetJobSelectionPartial(string gender) { List <JobOverviewViewModel> viewModels; JobOverviewRangeViewModel rangeViewModel; using (FFTContext context = new FFTContext()) { viewModels = context.Jobs.Where(m => gender == "Male" ? !m.IsFemaleOnly : !m.IsMaleOnly).Select(m => new JobOverviewViewModel { JobID = m.JobID, FileName = (m.PspName.Contains("(") ? m.PspName.Remove(m.PspName.IndexOf("(")) : m.PspName).Replace(" ", ""), DisplayName = m.PspName, GenderID = gender == "Male" ? 0 : 1, Gender = gender, HPMultiplier = m.HPMultiplier, HPGrowthConstant = m.HPGrowthConstant, HPGrowthConstantLabel = m.HPGrowthConstant, MPMultiplier = m.MPMultiplier, MPGrowthConstant = m.MPGrowthConstant, MPGrowthConstantLabel = m.MPGrowthConstant, SpeedMulitplier = m.SpeedMulitplier, SpeedGrowthConstant = m.SpeedGrowthConstant, SpeedGrowthConstantLabel = m.SpeedGrowthConstant, PhysicalAttackMultiplier = m.PhysicalAttackMultiplier, PhysicalAttackGrowthConstant = m.PhysicalAttackGrowthConstant, PhysicalAttackGrowthConstantLabel = m.PhysicalAttackGrowthConstant, MagicalAttackMultiplier = m.MagicalAttackMultiplier, MagicalAttackGrowthConstant = m.MagicalAttackGrowthConstant, MagicalAttackGrowthConstantLabel = m.MagicalAttackGrowthConstant, BaseMoveLength = m.BaseMoveLength, BaseJumpHeight = m.BaseJumpHeight, BaseCombatEvasion = m.BaseCombatEvasion }).ToList(); rangeViewModel = new JobOverviewRangeViewModel { HPGrowthConstantMax = context.Jobs.Max(c => c.HPGrowthConstant), HPGrowthConstantMin = context.Jobs.Min(c => c.HPGrowthConstant), MPGrowthConstantMax = context.Jobs.Max(c => c.MPGrowthConstant), MPGrowthConstantMin = context.Jobs.Min(c => c.MPGrowthConstant), SpeedGrowthConstantMax = context.Jobs.Max(c => c.SpeedGrowthConstant), SpeedGrowthConstantMin = context.Jobs.Min(c => c.SpeedGrowthConstant), PhysicalAttackGrowthConstantMax = context.Jobs.Max(c => c.PhysicalAttackGrowthConstant), PhysicalAttackGrowthConstantMin = context.Jobs.Min(c => c.PhysicalAttackGrowthConstant), MagicalAttackGrowthConstantMax = context.Jobs.Max(c => c.MagicalAttackGrowthConstant), MagicalAttackGrowthConstantMin = context.Jobs.Min(c => c.MagicalAttackGrowthConstant) }; int commonDenominator = (new int[] { rangeViewModel.HPGrowthConstantMax, rangeViewModel.MPGrowthConstantMax, rangeViewModel.SpeedGrowthConstantMax, rangeViewModel.PhysicalAttackGrowthConstantMax, rangeViewModel.MagicalAttackGrowthConstantMax }).Max(); rangeViewModel.HPGrowthConstantMultiplier = (float)commonDenominator / (float)rangeViewModel.HPGrowthConstantMax; rangeViewModel.MPGrowthConstantMultiplier = (float)commonDenominator / (float)rangeViewModel.MPGrowthConstantMax; rangeViewModel.SpeedGrowthConstantMultiplier = (float)commonDenominator / (float)rangeViewModel.SpeedGrowthConstantMax; rangeViewModel.PhysicalAttackGrowthConstantMultiplier = (float)commonDenominator / (float)rangeViewModel.PhysicalAttackGrowthConstantMax; rangeViewModel.MagicalAttackGrowthConstantMultiplier = (float)commonDenominator / (float)rangeViewModel.MagicalAttackGrowthConstantMax; foreach (JobOverviewViewModel viewModel in viewModels) { viewModel.HPGrowthConstant = (int)((rangeViewModel.HPGrowthConstantMax + rangeViewModel.HPGrowthConstantMin - viewModel.HPGrowthConstant) * rangeViewModel.HPGrowthConstantMultiplier); viewModel.MPGrowthConstant = (int)((rangeViewModel.MPGrowthConstantMax + rangeViewModel.MPGrowthConstantMin - viewModel.MPGrowthConstant) * rangeViewModel.MPGrowthConstantMultiplier); viewModel.SpeedGrowthConstant = (int)((rangeViewModel.SpeedGrowthConstantMax + rangeViewModel.SpeedGrowthConstantMin - viewModel.SpeedGrowthConstant) * rangeViewModel.SpeedGrowthConstantMultiplier); viewModel.PhysicalAttackGrowthConstant = (int)((rangeViewModel.PhysicalAttackGrowthConstantMax + rangeViewModel.PhysicalAttackGrowthConstantMin - viewModel.PhysicalAttackGrowthConstant) * rangeViewModel.PhysicalAttackGrowthConstantMultiplier); viewModel.MagicalAttackGrowthConstant = (int)((rangeViewModel.MagicalAttackGrowthConstantMax + rangeViewModel.MagicalAttackGrowthConstantMin - viewModel.MagicalAttackGrowthConstant) * rangeViewModel.MagicalAttackGrowthConstantMultiplier); } } return(PartialView("~/Views/Home/_JobSelectionPartial.cshtml", viewModels)); }
public ActionResult GetItemSelectionPartial(int itemCategoryID) { List <ItemOverviewViewModel> items = new List <ItemOverviewViewModel>(); using (FFTContext context = new FFTContext()) { items.AddRange(context.Items.Where(m => m.ItemCategoryID == itemCategoryID).Select(c => new ItemOverviewViewModel { ItemID = c.ItemID, EquipmentCategoryID = c.ItemCategory.EquipmentCategoryID, EquipmentCategoryName = c.ItemCategory.EquipmentCategoryName.ToLower(), ItemCategoryID = itemCategoryID, AccessoryMagicalEvade = (c.ItemCategoryID == (int)ItemCategoriesList.Cloak ? c.MagicalEvade ?? 0 : 0).ToString(), AccessoryPhysicalEvade = (c.ItemCategoryID == (int)ItemCategoriesList.Cloak ? c.PhysicalEvade ?? 0 : 0).ToString(), HPBonus = (c.HPBonus ?? 0), MPBonus = (c.MPBonus ?? 0), MoveBonus = (c.MoveBoost ?? 0), JumpBonus = (c.JumpBoost ?? 0), SpeedBonus = (c.SpeedBoost ?? 0), ShieldPhysicalEvade = (c.ItemCategoryID == (int)ItemCategoriesList.Shield ? c.PhysicalEvade ?? 0 : 0).ToString(), ShieldMagicalEvade = (c.ItemCategoryID == (int)ItemCategoriesList.Shield ? c.MagicalEvade ?? 0 : 0).ToString(), PhysicalAttackPower = (c.PhysicalAttackBoost ?? 0).ToString(), MagicalAttackPower = (c.MagicAttackBoost ?? 0).ToString(), Name = c.PspName, WeaponPower = (c.AttackPower ?? 0).ToString(), WeaponHit = (c.HitPercentage ?? 0).ToString(), ImagePath = (c.ItemCategory.EquipmentCategoryID == (int)EquipmentCategoriesList.Weapon ? @"/Content/Images/Item_Icons/Weapons/" : c.ItemCategory.EquipmentCategoryID > (int)EquipmentCategoriesList.Weapon && c.ItemCategory.EquipmentCategoryID < (int)EquipmentCategoriesList.Accessory ? @"/Content/Images/Item_Icons/Armour/" : @"/Content/Images/Item_Icons/Accessories/") + c.IconFileName })); } if (items.Count > 0) { switch (items[0].EquipmentCategoryID) { case (int)EquipmentCategoriesList.Weapon: return(PartialView("~/Views/Home/UnitItemSelectionPartials/_WeaponSelectionPartial.cshtml", items)); case (int)EquipmentCategoriesList.Shield: return(PartialView("~/Views/Home/UnitItemSelectionPartials/_ShieldSelectionPartial.cshtml", items)); case (int)EquipmentCategoriesList.Accessory: switch (items[0].ItemCategoryID) { case (int)ItemCategoriesList.Shoe: return(PartialView("~/Views/Home/UnitItemSelectionPartials/_ShoeAccessorySelectionPartial.cshtml", items)); case (int)ItemCategoriesList.Cloak: return(PartialView("~/Views/Home/UnitItemSelectionPartials/_CloakAccessorySelectionPartial.cshtml", items)); case (int)ItemCategoriesList.Armguard: return(PartialView("~/Views/Home/UnitItemSelectionPartials/_ArmguardAccessorySelectionPartial.cshtml", items)); case (int)ItemCategoriesList.Ring: return(PartialView("~/Views/Home/UnitItemSelectionPartials/_RingAccessorySelectionPartial.cshtml", items)); case (int)ItemCategoriesList.Armlet: return(PartialView("~/Views/Home/UnitItemSelectionPartials/_RingAccessorySelectionPartial.cshtml", items)); default: return(PartialView("~/Views/Home/UnitItemSelectionPartials/_DefaultAccessorySelectionPartial.cshtml", items)); } default: return(PartialView("~/Views/Home/UnitItemSelectionPartials/_HelmetBodySelectionPartial.cshtml", items)); } } return(null); }
static void ScrapeItems() { ChromeOptions options = new ChromeOptions(); options.AddExtension(@"..\..\Chrome Extensions\3.18.0_0.crx"); //options.AddExtension(@"C:\Users\hasenb\AppData\Local\Google\Chrome\User Data\Default\Extensions\gighmmpiobklfepjocnamgkkbiglidom\3.18.0_0.crx"); ChromeDriver driver = new ChromeDriver(options); Thread.Sleep(TimeSpan.FromSeconds(2)); driver.Manage().Window.Maximize(); driver.Navigate().GoToUrl("http://finalfantasy.wikia.com/wiki/List_of_Final_Fantasy_Tactics_Items"); if (new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(m => m.FindElements(By.CssSelector("table.full-width.FFT")).Count == 21)) { // All item tables for Items List <IWebElement> ItemTables = driver.FindElements(By.CssSelector("table.full-width.FFT")).OrderBy(m => m.Location.Y).ToList(); // All the table row elements for a single item List <IWebElement> itemRows = new List <IWebElement>(); List <Item> Items = new List <Item>(); // Index of rows for the entire table int rowIndex = 0; // Flag to initialize new Item object bool Itemsentinel = false; foreach (IWebElement table in ItemTables) { // All of the rows for the table List <IWebElement> rows = table.FindElements(By.CssSelector("tr:not(.a)")).ToList(); Item Item = new Item(); while (rows.Count != rowIndex) { if (Itemsentinel) { itemRows.Clear(); Item = new Item(); } // Add the row for the particular item itemRows.Add(rows[rowIndex]); if (rows[rowIndex].FindElements(By.CssSelector("th")).Count > 0) { int magickAttackBoost = 0; List <IWebElement> itemRowElements = itemRows[rowIndex].FindElements(By.CssSelector("td")).ToList(); Item.PspName = itemRows[rowIndex].FindElement(By.CssSelector("th > a > span")).Text.Trim(); Item.AttackPower = Convert.ToInt16(itemRowElements[0].Text.Trim()); Item.HitPercentage = Convert.ToInt16(itemRowElements[1].Text.Trim().Replace("%", "")); Item.MagicAttackBoost = int.TryParse(itemRowElements[2].Text.Trim(), out magickAttackBoost) ? magickAttackBoost : 0; string[] acquiredData = itemRowElements[3].Text.Trim().Split(new string[] { ":", "\r\n" }, StringSplitOptions.RemoveEmptyEntries); string scrapedText = ""; int counter = 1; for (int i = 0; i < acquiredData.Length; i++) { string[] identifiers = new string[] { "Outfitters", "Treasure", "Mode", "Poach", "Steal", "Initial", "Catch" }; if (!identifiers.Contains(acquiredData[i])) { scrapedText += (" " + acquiredData[i]).Trim(); counter++; } if ((!String.IsNullOrEmpty(scrapedText) && identifiers.Contains(acquiredData[i])) || i == acquiredData.Length - 1) { if (i == acquiredData.Length - 1) { counter = 1; } switch (acquiredData[i - counter]) { case "Outfitters": Item.AcquiredViaLocation = scrapedText; break; case "Treasure": Item.AcquiredViaTreasureHunt = scrapedText; break; case "Mode": Item.AcquiredViaMode = scrapedText; break; case "Poach": Item.AcquiredViaPoach = scrapedText; break; case "Steal": Item.AcquiredViaSteal = scrapedText; break; case "Initial": Item.AcquiredViaInitialEquip = scrapedText; break; case "Catch": Item.AcquiredViaCatch = scrapedText; break; } scrapedText = ""; counter = 1; } } Item.Cost = Convert.ToInt16(itemRowElements[4].Text.Trim()); rowIndex++; } else if (rows[rowIndex].FindElements(By.CssSelector("b")).Count > 0) { string rowData = rows[rowIndex].FindElements(By.CssSelector("td"))[0].Text.Trim(); string[] itemEffectData = rowData.Split(new string[] { ":", "\r\n" }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < itemEffectData.Length; i++) { string[] identifiers = new string[] { "Element", "Spell Effect", "Effect", "Equip", "Absorbs", "Boosts", "Removes" }; if (identifiers.Contains(itemEffectData[i])) { switch (itemEffectData[i]) { case "Element": Item.AcquiredViaLocation = itemEffectData[i + 1].Trim(); break; case "Spell Effect": Item.AcquiredViaTreasureHunt = itemEffectData[i + 1].Trim(); break; case "Effect": Item.AcquiredViaMode = itemEffectData[i + 1].Trim(); break; case "Equip": Item.AcquiredViaPoach = itemEffectData[i + 1].Trim(); break; case "Absorbs": Item.AcquiredViaSteal = itemEffectData[i + 1].Trim(); break; case "Boosts": Item.AcquiredViaInitialEquip = itemEffectData[i + 1].Trim(); break; case "Removes": Item.AcquiredViaCatch = itemEffectData[i + 1].Trim(); break; } } } rowIndex++; } else { Item.Description = rows[rowIndex].FindElements(By.CssSelector("i"))[0].Text.Trim(); Itemsentinel = true; rowIndex++; Items.Add(Item); } } } using (FFTContext context = new FFTContext()) { context.Items.AddRange(Items); } } }