public async Task AddUnitDataAsync(UnitDetailsViewModel unit)
        {
            List <UnitDetailsViewModel> units = await GetUnitDataAsync();

            units.Add(unit);
            await SetUnitDataAsync(units);
        }
Exemplo n.º 2
0
        public ActionResult ShowUnitContent(int unitId)
        {
            if (unitId < 1)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            UnitDetailsViewModel viewModel = this.service.GetUnitPreview(unitId);

            return(this.PartialView("_ShowUnitContent", viewModel));
        }
        public ActionResult UnitPreview(int id)
        {
            if (id < 1)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            UnitDetailsViewModel viewModel = this.service.GetUnitDetailsViewModel(id);

            return(this.View(viewModel));
        }
        public UnitDetailsViewModel GetUnitPreview(int unitId)
        {
            Unit unit = this.Context.Units.Find(unitId);

            if (unit == null)
            {
                throw new ArgumentNullException(nameof(unitId), "There is no Unit with such Id.");
            }
            UnitDetailsViewModel viewModel = Mapper.Instance
                                             .Map <Unit, UnitDetailsViewModel>(unit);

            return(viewModel);
        }
Exemplo n.º 5
0
        // GET: UniversityUsers/Details/5
        public async Task <IActionResult> Details(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            var universityUser = await _context.UniversityUsers
                                 .FirstOrDefaultAsync(m => m.UniversityId == id);

            if (universityUser == null)
            {
                return(NotFound());
            }

            var registrations = await _context.Registrations.Where(r => r.StudentId == id).ToListAsync();

            var studentDashboardVM = new StudentDashboardViewModel();

            studentDashboardVM.UniversityUser = universityUser;
            studentDashboardVM.BusyTimes      = StudentAvailability.GetStudentsBusyTimes(id ?? 1, _context);
            studentDashboardVM.WorkDays       = _context.WorkDays.ToList();


            foreach (var registration in registrations)
            {
                var groupMembership = await _context.GroupMemberships.Where(gm => gm.StudentId == id && gm.UnitId == registration.UnitId).ToListAsync();

                int?groupId = groupMembership.Count > 0 ? groupMembership.FirstOrDefault().GroupId: null;
                var group   = groupId != null ? await _context.Groups.FindAsync(groupId):null;

                var allGroupMembers = groupId != null ? await _context.GroupMemberships.Where(gm => gm.GroupId == groupId).ToListAsync() : null;

                var unit = await _context.Units.FindAsync(registration.UnitId);

                //create the unit details VM
                var unitDetailsVM = new UnitDetailsViewModel();
                unitDetailsVM.UnitId           = registration.UnitId;
                unitDetailsVM.UnitName         = unit.Name;
                unitDetailsVM.GroupId          = group != null ? group.GroupId : 0;
                unitDetailsVM.GroupName        = group != null ? group.Name: String.Empty;
                unitDetailsVM.OwnerId          = group != null ? group.OwnerId: 0;
                unitDetailsVM.GroupMemberships = allGroupMembers;

                //add to students
                studentDashboardVM.UnitDetails.Add(unitDetailsVM);
            }

            return(View(studentDashboardVM));
        }
Exemplo n.º 6
0
        [HttpPost] //post method
        public async Task <IActionResult> AddUnit([Bind("Id, UnitCode, UnitName, CourseId, UniversityId ")] UnitDetailsViewModel unit)
        {
            if (ModelState.IsValid)
            {
                var newUnit = new UnitDetailsModel()
                {
                    Id         = unit.Id,
                    UnitName   = unit.UnitName,
                    UnitCode   = unit.UnitCode,
                    Course     = _db.Course.Find(unit.UniversityId),
                    University = _db.University.Find(unit.UniversityId)
                };

                _db.Add(newUnit);                                 //add data to University table
                await _db.SaveChangesAsync();                     //wait for database response

                return(RedirectToAction(nameof(UnitManagement))); // redirect to index
            }

            return(View(unit));
        }
Exemplo n.º 7
0
        public UnitDetailsViewModel GetUnitDetailsViewModel(int id)
        {
            Unit unit = this.Context.Units.Find(id);

            if (unit == null)
            {
                throw new ArgumentNullException(nameof(id), "There is no Unit with such Id.");
            }
            UnitDetailsViewModel viewModel = Mapper.Instance.Map <Unit, UnitDetailsViewModel>(unit);

            if (unit.CourseId != null)
            {
                viewModel.CourseName = unit.Course.Title;
            }
            else
            {
                viewModel.CourseName = "Unassigned";
            }

            return(viewModel);
        }
Exemplo n.º 8
0
        public static UnitDetailsViewModel CalculateResistancesAndImmunities(List <Item> characterItems, UnitDetailsViewModel unit)
        {
            Dictionary <string, int> resistLevels = elementSVGLocations.ToDictionary(m => m.Key, m => 0);

            unit.Resistances = new UnitResistAndImmunityViewModel();

            foreach (Item item in characterItems)
            {
                resistLevels["Fire"] += (int)(item?.ElementAbsorbed?.Contains("Fire") == true ? ResistLevel.Absorbed : item?.ElementNegated?.Contains("Fire") == true ? ResistLevel.Negated :
                                              item?.ElementHalved?.Contains("Fire") == true ? ResistLevel.Halved : item?.ElementWeakness?.Contains("Fire") == true ? ResistLevel.Weak : ResistLevel.Normal);

                resistLevels["Ice"] += (int)(item?.ElementAbsorbed?.Contains("Ice") == true ? ResistLevel.Absorbed : item?.ElementNegated?.Contains("Ice") == true ? ResistLevel.Negated :
                                             item?.ElementHalved?.Contains("Ice") == true ? ResistLevel.Halved : item?.ElementWeakness?.Contains("Ice") == true ? ResistLevel.Weak : ResistLevel.Normal);

                resistLevels["Lightning"] += (int)(item?.ElementAbsorbed?.Contains("Lightning") == true ? ResistLevel.Absorbed : item?.ElementNegated?.Contains("Lightning") == true ? ResistLevel.Negated :
                                                   item?.ElementHalved?.Contains("Lightning") == true ? ResistLevel.Halved : item?.ElementWeakness?.Contains("Lightning") == true ? ResistLevel.Weak : ResistLevel.Normal);

                resistLevels["Water"] += (int)(item?.ElementAbsorbed?.Contains("Water") == true ? ResistLevel.Absorbed : item?.ElementNegated?.Contains("Water") == true ? ResistLevel.Negated :
                                               item?.ElementHalved?.Contains("Water") == true ? ResistLevel.Halved : item?.ElementWeakness?.Contains("Water") == true ? ResistLevel.Weak : ResistLevel.Normal);

                resistLevels["Wind"] += (int)(item?.ElementAbsorbed?.Contains("Wind") == true ? ResistLevel.Absorbed : item?.ElementNegated?.Contains("Wind") == true ? ResistLevel.Negated :
                                              item?.ElementHalved?.Contains("Wind") == true ? ResistLevel.Halved : item?.ElementWeakness?.Contains("Wind") == true ? ResistLevel.Weak : ResistLevel.Normal);

                resistLevels["Earth"] += (int)(item?.ElementAbsorbed?.Contains("Earth") == true ? ResistLevel.Absorbed : item?.ElementNegated?.Contains("Earth") == true ? ResistLevel.Negated :
                                               item?.ElementHalved?.Contains("Earth") == true ? ResistLevel.Halved : item?.ElementWeakness?.Contains("Earth") == true ? ResistLevel.Weak : ResistLevel.Normal);

                resistLevels["Holy"] += (int)(item?.ElementAbsorbed?.Contains("Holy") == true ? ResistLevel.Absorbed : item?.ElementNegated?.Contains("Holy") == true ? ResistLevel.Negated :
                                              item?.ElementHalved?.Contains("Holy") == true ? ResistLevel.Halved : item?.ElementWeakness?.Contains("Holy") == true ? ResistLevel.Weak : ResistLevel.Normal);

                resistLevels["Dark"] += (int)(item?.ElementAbsorbed?.Contains("Dark") == true ? ResistLevel.Absorbed : item?.ElementNegated?.Contains("Dark") == true ? ResistLevel.Negated :
                                              item?.ElementHalved?.Contains("Dark") == true ? ResistLevel.Halved : item?.ElementWeakness?.Contains("Dark") == true ? ResistLevel.Weak : ResistLevel.Normal);

                unit.Resistances.PhysicalResist = "Normal";
                unit.Resistances.MagicalResist  = "Normal";

                unit.Resistances.IsBerserkImmune  = !unit.Resistances.IsBerserkImmune ? item?.ImmuneStatusEffect?.Contains("Berserk") == true ? true : false : true;
                unit.Resistances.IsBlindImmune    = !unit.Resistances.IsBlindImmune ? item?.ImmuneStatusEffect?.Contains("Blind") == true ? true : false : true;
                unit.Resistances.IsCharmImmune    = !unit.Resistances.IsCharmImmune ? item?.ImmuneStatusEffect?.Contains("Charm") == true ? true : false : true;
                unit.Resistances.IsConfusedImmune = !unit.Resistances.IsConfusedImmune ? item?.ImmuneStatusEffect?.Contains("Confused") == true ? true : false : true;
                unit.Resistances.IsDontActImmune  = !unit.Resistances.IsDontActImmune ? item?.ImmuneStatusEffect?.Contains("Disable") == true ? true : false : true;
                unit.Resistances.IsDontMoveImmune = !unit.Resistances.IsDontMoveImmune ? item?.ImmuneStatusEffect?.Contains("Immobilize") == true ? true : false : true;
                unit.Resistances.IsDoomImmune     = !unit.Resistances.IsDoomImmune ? item?.ImmuneStatusEffect?.Contains("Doom") == true ? true : false : true;
                unit.Resistances.IsKOImmune       = !unit.Resistances.IsKOImmune ? item?.ImmuneStatusEffect?.Contains("KO") == true ? true : false : true;
                unit.Resistances.IsPoisonImmune   = !unit.Resistances.IsPoisonImmune ? item?.ImmuneStatusEffect?.Contains("Poison") == true ? true : false : true;
                unit.Resistances.IsSilenceImmune  = !unit.Resistances.IsSilenceImmune ? item?.ImmuneStatusEffect?.Contains("Silence") == true ? true : false : true;
                unit.Resistances.IsSleepImmune    = !unit.Resistances.IsSleepImmune ? item?.ImmuneStatusEffect?.Contains("Sleep") == true ? true : false : true;
                unit.Resistances.IsSlowImmune     = !unit.Resistances.IsSlowImmune ? item?.ImmuneStatusEffect?.Contains("Slow") == true ? true : false : true;
                unit.Resistances.IsStoneImmune    = !unit.Resistances.IsStoneImmune ? item?.ImmuneStatusEffect?.Contains("Stone") == true ? true : false : true;
                unit.Resistances.IsStopImmune     = !unit.Resistances.IsStopImmune ? item?.ImmuneStatusEffect?.Contains("Stop") == true ? true : false : true;
                unit.Resistances.IsToadImmune     = !unit.Resistances.IsToadImmune ? item?.ImmuneStatusEffect?.Contains("Toad") == true ? true : false : true;
                unit.Resistances.IsTraitorImmune  = !unit.Resistances.IsTraitorImmune ? item?.ImmuneStatusEffect?.Contains("Traitor") == true ? true : false : true;
                unit.Resistances.IsUndeadImmune   = !unit.Resistances.IsUndeadImmune ? item?.ImmuneStatusEffect?.Contains("Undead") == true ? true : false : true;
                unit.Resistances.IsVampireImmune  = !unit.Resistances.IsVampireImmune ? item?.ImmuneStatusEffect?.Contains("Vampire") == true ? true : false : true;
            }

            unit.Resistances.FireResist      = UnitResistAndImmunityViewModel.resistLevelDescriptions[(ResistLevel)resistLevels["Fire"]];
            unit.Resistances.IceResist       = UnitResistAndImmunityViewModel.resistLevelDescriptions[(ResistLevel)resistLevels["Ice"]];
            unit.Resistances.LightningResist = UnitResistAndImmunityViewModel.resistLevelDescriptions[(ResistLevel)resistLevels["Lightning"]];
            unit.Resistances.WaterResist     = UnitResistAndImmunityViewModel.resistLevelDescriptions[(ResistLevel)resistLevels["Water"]];
            unit.Resistances.WindResist      = UnitResistAndImmunityViewModel.resistLevelDescriptions[(ResistLevel)resistLevels["Wind"]];
            unit.Resistances.EarthResist     = UnitResistAndImmunityViewModel.resistLevelDescriptions[(ResistLevel)resistLevels["Earth"]];
            unit.Resistances.HolyResist      = UnitResistAndImmunityViewModel.resistLevelDescriptions[(ResistLevel)resistLevels["Holy"]];
            unit.Resistances.DarkResist      = UnitResistAndImmunityViewModel.resistLevelDescriptions[(ResistLevel)resistLevels["Dark"]];

            return(unit);
        }
Exemplo n.º 9
0
 public static UnitDetailsViewModel CalculateEvasionStats(Item shieldItem, Item accessoryItem, Job unitJob, UnitDetailsViewModel unit)
 {
     unit.PhysicalCharacterEvade = unitJob.BaseCombatEvasion.ToString("00");
     unit.MagicalCharacterEvade  = unitJob.BaseCombatEvasion.ToString("00");
     unit.PhysicalShieldEvade    = (shieldItem != null ? shieldItem.PhysicalEvade ?? 0 : 0).ToString("00");
     unit.MagicalShieldEvade     = (shieldItem != null ? shieldItem.MagicalEvade ?? 0 : 0).ToString("00");
     unit.PhysicalAccessoryEvade = (accessoryItem != null ? accessoryItem.PhysicalEvade ?? 0 : 0).ToString("00");
     unit.MagicalAccessoryEvade  = (accessoryItem != null ? accessoryItem.MagicalEvade ?? 0 : 0).ToString("00");
     return(unit);
 }
Exemplo n.º 10
0
 public static UnitDetailsViewModel CalculateBasicStats(Item weaponItem1, Item weaponItem2, Item headItem, Item bodyItem, Item accessoryItem, UnitDetailsViewModel unit, Job job)
 {
     unit.Move  = (job.BaseMoveLength + (unit.Accessory != null ? unit.Accessory.MoveBonus : 0)).ToString();
     unit.Jump  = (job.BaseJumpHeight + (unit.Accessory != null ? unit.Accessory.JumpBonus : 0)).ToString();
     unit.Speed = ((job.SpeedMulitplier * unit.RawSpeed) / UNIT_STAT_NORMALIZER).ToString();
     unit.PhysicalAttackPower = (((job.PhysicalAttackMultiplier * unit.RawPhysicalAttack) / UNIT_STAT_NORMALIZER) + (weaponItem1 != null ? weaponItem1.PhysicalAttackBoost ?? 0 : 0) + (weaponItem2 != null ? weaponItem2.PhysicalAttackBoost ?? 0 : 0) +
                                 (headItem != null ? headItem.PhysicalAttackBoost ?? 0 : 0) + (bodyItem != null ? bodyItem.PhysicalAttackBoost ?? 0 : 0) + (accessoryItem != null ? accessoryItem.PhysicalAttackBoost ?? 0 : 0)).ToString("00");
     unit.MagicalAttackPower = (((job.MagicalAttackMultiplier * unit.RawMagicalAttack) / UNIT_STAT_NORMALIZER) + (weaponItem1 != null ? weaponItem1.MagicAttackBoost ?? 0 : 0) + (weaponItem2 != null ? weaponItem2.MagicAttackBoost ?? 0 : 0) +
                                (headItem != null ? headItem.MagicAttackBoost ?? 0 : 0) + (bodyItem != null ? bodyItem.MagicAttackBoost ?? 0 : 0) +
                                (accessoryItem != null ? accessoryItem.MagicAttackBoost ?? 0 : 0)).ToString("00");
     return(unit);
 }
Exemplo n.º 11
0
 public static UnitDetailsViewModel CalculateHPAndMP(Item headItem, Item bodyItem, UnitDetailsViewModel unit, Job job)
 {
     unit.Unit.MaxHP = ((job.HPMultiplier * unit.RawHP) / 1638400) + (headItem != null ? headItem.HPBonus ?? 0 : 0) + (bodyItem != null ?
                                                                                                                       bodyItem.HPBonus ?? 0 : 0);
     unit.Unit.MaxMP = ((job.MPMultiplier * unit.RawMP) / 1638400) + (headItem != null ? headItem.MPBonus ?? 0 : 0) + (bodyItem != null ?
                                                                                                                       bodyItem.MPBonus ?? 0 : 0);
     return(unit);
 }
        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 <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);
        }