public void Read(Savegame savegame, SavegameInputFiles files, IFileContainer partyTextsContainer, IFileContainer fallbackPartyMemberContainer = null) { var partyMemberReader = new Characters.PartyMemberReader(); var chestReader = new ChestReader(); var merchantReader = new MerchantReader(); var automapReader = new AutomapReader(); savegame.PartyMembers.Clear(); savegame.Chests.Clear(); savegame.Merchants.Clear(); savegame.Automaps.Clear(); foreach (var partyMemberDataReader in files.PartyMemberDataReaders.Files) { var partyTextFile = partyTextsContainer.Files.ContainsKey(partyMemberDataReader.Key) ? partyTextsContainer.Files[partyMemberDataReader.Key] : null; partyMemberDataReader.Value.Position = 0; savegame.PartyMembers.Add((uint)partyMemberDataReader.Key, PartyMember.Load((uint)partyMemberDataReader.Key, partyMemberReader, partyMemberDataReader.Value, partyTextFile, fallbackPartyMemberContainer?.Files[partyMemberDataReader.Key])); } foreach (var chestDataReader in files.ChestDataReaders.Files) { chestDataReader.Value.Position = 0; savegame.Chests.Add((uint)chestDataReader.Key, Chest.Load(chestReader, chestDataReader.Value)); } foreach (var merchantDataReader in files.MerchantDataReaders.Files) { merchantDataReader.Value.Position = 0; savegame.Merchants.Add((uint)merchantDataReader.Key, Merchant.Load(merchantReader, merchantDataReader.Value)); } foreach (var automapDataReader in files.AutomapDataReaders.Files) { automapDataReader.Value.Position = 0; savegame.Automaps.Add((uint)automapDataReader.Key, Automap.Load(automapReader, automapDataReader.Value)); } files.SaveDataReader.Position = 0; ReadSaveData(savegame, files.SaveDataReader); }