Example #1
0
        /// <summary>
        /// Assigns player entity settings from a character sheet.
        /// </summary>
        public void AssignCharacter(CharacterSheet character, int level = 1, int maxHealth = 0)
        {
            if (character == null)
            {
                SetEntityDefaults();
                return;
            }

            this.level = level;
            this.gender = character.gender;
            this.race = character.race;
            this.career = character.career;
            this.name = character.name;
            this.faceIndex = character.faceIndex;
            this.stats = character.workingStats;
            this.skills = character.workingSkills;
            this.reflexes = character.reflexes;

            if (maxHealth <= 0)
                this.maxHealth = FormulaHelper.RollMaxHealth(level, stats.Endurance, career.HitPointsPerLevelOrMonsterLevel);
            else
                this.maxHealth = maxHealth;

            FillVitalSigns();

            DaggerfallUnity.LogMessage("Assigned character " + this.name, true);
        }
        /// <summary>
        /// Converts a CharacterRecord to a prototypical CharacterSheet for character import.
        /// </summary>
        /// <returns>CharacterSheet derived from CharacterRecord data.</returns>
        public CharacterSheet ToCharacterSheet()
        {
            CharacterSheet sheet = new CharacterSheet();
            Dictionary<int, RaceTemplate> raceDict = RaceTemplate.GetRaceDictionary();

            sheet.race = raceDict[(int)parsedData.race + 1];
            sheet.gender = parsedData.gender;
            sheet.career = parsedData.career;
            sheet.name = parsedData.characterName;
            sheet.faceIndex = parsedData.faceIndex;
            sheet.workingStats = parsedData.currentStats;
            sheet.workingSkills = parsedData.skills;
            sheet.reflexes = parsedData.reflexes;

            return sheet;
        }
        void StartFromClassicSave()
        {
            // Save index must be in range
            if (classicSaveIndex < 0 || classicSaveIndex >= 6)
                throw new IndexOutOfRangeException("classicSaveIndex out of range.");

            // Open saves in parent path of Arena2 folder
            string path = SaveLoadManager.Instance.DaggerfallSavePath;
            SaveGames saveGames = new SaveGames(path);
            if (!saveGames.IsPathOpen)
                throw new Exception(string.Format("Could not open Daggerfall saves path {0}", path));

            // Open save index
            if (!saveGames.TryOpenSave(classicSaveIndex))
            {
                string error = string.Format("Could not open classic save index {0}.", classicSaveIndex);
                DaggerfallUI.MessageBox(error);
                DaggerfallUnity.LogMessage(string.Format(error), true);
                return;
            }

            // Get required save data
            SaveTree saveTree = saveGames.SaveTree;
            SaveVars saveVars = saveGames.SaveVars;

            // Set player to world position
            playerEnterExit.EnableExteriorParent();
            StreamingWorld streamingWorld = FindStreamingWorld();
            int worldX = saveTree.Header.CharacterPosition.Position.WorldX;
            int worldZ = saveTree.Header.CharacterPosition.Position.WorldZ;
            streamingWorld.TeleportToWorldCoordinates(worldX, worldZ);
            streamingWorld.suppressWorld = false;

            // Set game time
            DaggerfallUnity.Instance.WorldTime.Now.FromClassicDaggerfallTime(saveVars.GameTime);

            // Get character record
            List<SaveTreeBaseRecord> records = saveTree.FindRecords(RecordTypes.Character);
            if (records.Count != 1)
                throw new Exception("SaveTree CharacterRecord not found.");

            // Get prototypical character sheet data
            CharacterRecord characterRecord = (CharacterRecord)records[0];
            characterSheet = characterRecord.ToCharacterSheet();

            // Assign data to player entity
            PlayerEntity playerEntity = FindPlayerEntity();
            playerEntity.AssignCharacter(characterSheet, characterRecord.ParsedData.level, characterRecord.ParsedData.startingHealth);

            // Start game
            DaggerfallUI.Instance.PopToHUD();
            GameManager.Instance.PauseGame(false);
            DaggerfallUI.Instance.FadeHUDFromBlack();
        }
 void SetCharacterSheet(CharacterSheet characterSheet)
 {
     this.characterSheet = characterSheet;
     this.textBox.Text = characterSheet.name;
     this.statsRollout.StartingStats = characterSheet.startingStats;
     this.statsRollout.WorkingStats = characterSheet.workingStats;
     this.statsRollout.BonusPool = 0;
     this.skillsRollout.SetClassSkills(characterSheet.career);
     this.skillsRollout.StartingSkills = characterSheet.startingSkills;
     this.skillsRollout.WorkingSkills = characterSheet.workingSkills;
     this.skillsRollout.PrimarySkillBonusPoints = 0;
     this.skillsRollout.MajorSkillBonusPoints = 0;
     this.skillsRollout.MinorSkillBonusPoints = 0;
     this.facePicker.FaceIndex = characterSheet.faceIndex;
     this.facePicker.SetFaceTextures(characterSheet.race, characterSheet.gender);
     this.reflexPicker.PlayerReflexes = characterSheet.reflexes;
 }