/// <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; }