Exemple #1
0
        /// <summary>
        /// Writes a new Character to file in the form of a serialized XML.
        /// </summary>
        /// <param name="user">The Discord user object of the new player.</param>
        /// <param name="charName">Name of the new character</param>
        /// <param name="special">S.P.E.C.I.A.L. stat of the new character</param>
        /// <param name="skills">The initial Skills of the new player WITH 3 Tag'd Skills</param>
        /// <param name="traits">The new character's starting traits.</param>
        public void SaveNewCharacter(SocketUser user, string charName, CharacterStats.SPECIAL special,
                                     string skillTag1, string skillTag2, string skillTag3, List <CharacterStats.Trait> traits)
        {
            var skills = CalculateInitialSkills(special);

            if (!(Enum.TryParse(skillTag1.ToLower(), out Character.SkillEnum skillTag1Enum)))
            {
                throw new ArgumentException("Couldn't parse given skillTag string.", "skillTag1");
            }
            if (!(Enum.TryParse(skillTag2.ToLower(), out Character.SkillEnum skillTag2Enum)))
            {
                throw new ArgumentException("Couldn't parse given skillTag string.", "skillTag2");
            }
            if (!(Enum.TryParse(skillTag3.ToLower(), out Character.SkillEnum skillTag3Enum)))
            {
                throw new ArgumentException("Couldn't parse given skillTag string.", "skillTag3");
            }

            var newChar = new Character(user, charName, special, skills, skillTag1Enum, skillTag2Enum, skillTag3Enum, traits);

            string filePath = Character.saveLoc + user.Id + fileExtension;

            try
            {
                BinarySerialization.WriteToBinaryFile <Character>(filePath, newChar, append: false);
            }
            catch (Exception e)
            {
                Console.WriteLine("[ERROR] Failed to save new character to disk.");
                Console.WriteLine(e);
                return;
            }
        }
Exemple #2
0
        /// <summary>
        /// Takes a Character's SPECIAL stat and calculates the starting value for the Character's Skills.
        /// </summary>
        /// <param name="special">A new Character's SPECIAL stat</param>
        /// <returns>The initial value of a new Character's Skills</returns>
        public CharacterStats.Skills CalculateInitialSkills(CharacterStats.SPECIAL special)
        {
            byte barter        = CalculateSkill(special.Charisma, special.Luck),
                 energyWeapons = CalculateSkill(special.Perception, special.Luck),
                 explosives    = CalculateSkill(special.Perception, special.Luck),
                 guns          = CalculateSkill(special.Agility, special.Luck),
                 lockpick      = CalculateSkill(special.Perception, special.Luck),
                 medicine      = CalculateSkill(special.Intelligence, special.Luck),
                 meleeWeapons  = CalculateSkill(special.Strength, special.Luck),
                 repair        = CalculateSkill(special.Intelligence, special.Luck),
                 science       = CalculateSkill(special.Intelligence, special.Luck),
                 sneak         = CalculateSkill(special.Agility, special.Luck),
                 speech        = CalculateSkill(special.Charisma, special.Luck),
                 survival      = CalculateSkill(special.Endurance, special.Luck),
                 unarmed       = CalculateSkill(special.Endurance, special.Luck);

            return(new CharacterStats.Skills(barter, energyWeapons, explosives, guns, lockpick, medicine, meleeWeapons, repair, science, sneak, speech, survival, unarmed));
        }