public async Task <IActionResult> Create(BasicInfoViewModel viewModel)
        {
            if (ModelState.IsValid)
            {
                var user = await GetCurrentUserAsync();

                var character = new Character
                {
                    User      = user,
                    Name      = viewModel.Name,
                    Callsign  = viewModel.Callsign,
                    AgeYears  = viewModel.AgeYears,
                    Homeworld = viewModel.Homeworld,
                    Rank      = viewModel.Rank,
                    Species   = viewModel.Species == "Other" ? viewModel.CustomSpecies : viewModel.Species,
                    Attribute = new Attribute
                    {
                        Intelligence = 1,
                        Willpower    = 1,
                        Dexterity    = 1,
                        Charisma     = 1,
                        Wits         = 1,
                        Strength     = 1,
                        Stamina      = 1
                    },
                    Skill          = new Skill(),
                    ForceSensitive = viewModel.ForceSensitive,
                };

                if (viewModel.Species != "Other")
                {
                    character.CharacterMerits = new List <CharacterMerit>();

                    character.CharacterMerits.Add(new CharacterMerit
                    {
                        MeritKey = MeritFactory.GetRacialMeritForSpecies(character.Species)
                    });

                    var freeMerits = MeritFactory.GetFreeMeritsForSpecies(character.Species);
                    foreach (var merit in freeMerits)
                    {
                        character.CharacterMerits.Add(new CharacterMerit
                        {
                            MeritKey = merit
                        });
                    }
                }

                _repository.AddOrUpdateCharacter(character);

                return(RedirectToAction("Sheet", new { characterId = character.Id }));
            }

            return(View(viewModel));
        }
        public IActionResult MeritInfo(Guid characterId)
        {
            var character = _repository.GetCharacter(characterId);

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

            // deal with prereqs and free merits

            var viewModel = _viewModelFactory.CreateNew <MeritInfoViewModel>(MeritFactory.GetAllMeritInfo(character));

            return(Ok(viewModel));
        }
Exemplo n.º 3
0
        public MeritInfo(MeritKey key, string name, string effect, string description, int cost, Dictionary <string, Prerequisite> prerequisites, Character character, MeritCategory category, bool requiresParameter, bool isFree, string parameterName, string editorDisplayName)
        {
            Key               = key;
            Name              = name;
            Effect            = effect;
            Description       = description;
            Cost              = cost;
            Category          = category;
            RequiresParameter = requiresParameter;
            IsFree            = isFree; // if this merit is free for a character
            ParameterName     = parameterName;
            EditorDisplayName = editorDisplayName;
            CategoryName      = MeritFactory.GetCategoryName(category);
            IsRacial          = category == MeritCategory.Racial;

            Prerequisites = prerequisites
                            .ToDictionary(d => d.Key, d => new PrerequisiteInfo(d.Value.Name, d.Value.Func, character));
        }
Exemplo n.º 4
0
        public IEnumerable <string> Validate()
        {
            if (RemainingXp < 0)
            {
                yield return("Remaining XP less than zero.");
            }

            foreach (var merit in NonFreeMerits)
            {
                var prereqs = MeritFactory.GetPrerequisites(merit.MeritKey);

                foreach (var prereq in prereqs.Values)
                {
                    if (!prereq.Func(new Character
                    {
                        Skill = _skill,
                        Attribute = _attribute
                    }))
                    {
                        yield return($"You do not meet the prerequisite {prereq.Name} for {MeritFactory.GetName(merit.MeritKey)}.");
                    }
                }

                if (MeritFactory.RequiresParameter(merit.MeritKey) && string.IsNullOrEmpty(merit.Parameter))
                {
                    yield return($"{MeritFactory.GetName(merit.MeritKey)} requires additional data.");
                }
            }

            // multi-rank merits require the previous rank
            foreach (var meritPrereq in MeritFactory.RankedMeritPrerequisites)
            {
                if (!MultiRankMeritMeetsRankPrerequisite(meritPrereq.Key, meritPrereq.Value))
                {
                    yield return(RankPrerequisiteError(meritPrereq.Key, meritPrereq.Value));
                }
            }
        }
Exemplo n.º 5
0
        public MeritEditorTableViewModel(MeritCategory category)
        {
            Category = category;
            Merits   = MeritFactory.GetMeritsForCategory(category);
            Title    = MeritFactory.GetCategoryName(category);

            switch (category)
            {
            case MeritCategory.Undefined:
                break;

            case MeritCategory.AnimalKen:
            {
                Kebab = "animal-ken";
                break;
            }

            case MeritCategory.Athletics:
            {
                Kebab = "athletics";
                break;
            }

            case MeritCategory.Brawling:
            {
                Kebab = "brawling";
                break;
            }

            case MeritCategory.Firearms:
            {
                Kebab = "firearms";
                break;
            }

            case MeritCategory.Interrogation:
            {
                Kebab = "interrogation";
                break;
            }

            case MeritCategory.Intimidate:
            {
                Kebab = "intimidate";
                break;
            }

            case MeritCategory.Larceny:
            {
                Kebab = "larceny";
                break;
            }

            case MeritCategory.Mechanics:
            {
                Kebab = "mechanics";
                break;
            }

            case MeritCategory.Medicine:
            {
                Kebab = "medicine";
                break;
            }

            case MeritCategory.Mental:
            {
                Kebab = "mental";
                break;
            }

            case MeritCategory.Ordnance:
            {
                Kebab = "ordnance";
                break;
            }

            case MeritCategory.Persuasion:
            {
                Kebab = "persuasion";
                break;
            }

            case MeritCategory.Piloting:
            {
                Kebab = "piloting";
                break;
            }

            case MeritCategory.Physical:
            {
                Kebab = "physical";
                break;
            }

            case MeritCategory.Slicing:
            {
                Kebab = "slicing";
                break;
            }

            case MeritCategory.Social:
            {
                Kebab = "social";
                break;
            }

            case MeritCategory.Stealth:
            {
                Kebab = "stealth";
                break;
            }

            case MeritCategory.Survival:
            {
                Kebab = "survival";
                break;
            }

            case MeritCategory.Weaponry:
            {
                Kebab = "weaponry";
                break;
            }

            case MeritCategory.Item:
            {
                Kebab = "item";
                break;
            }

            case MeritCategory.Racial:
            {
                Kebab = "racial";
                break;
            }

            case MeritCategory.Force:
            {
                Kebab = "force";
                break;
            }

            case MeritCategory.ForceLightsaber:
            {
                Kebab = "force-lightsaber";
                break;
            }

            case MeritCategory.ForceLightsaberForm:
            {
                Kebab = "force-lightsaber-form";
                break;
            }

            case MeritCategory.ForceOffence:
            {
                Kebab = "force-offence";
                break;
            }

            case MeritCategory.ForceAwareness:
            {
                Kebab = "force-awareness";
                break;
            }

            case MeritCategory.ForceEnhancement:
            {
                Kebab = "force-enhancement";
                break;
            }
            }
        }
Exemplo n.º 6
0
 private string RankPrerequisiteError(MeritKey chosenMerit, MeritKey prerequisiteMerit)
 {
     return($"{MeritFactory.GetName(chosenMerit)} requires {MeritFactory.GetName(prerequisiteMerit)}.");
 }