public EraDataResult CheckData(int saveIndex, EraSaveFileType type) { string filename = null; switch (type) { case EraSaveFileType.Normal: filename = getSaveDataPath(saveIndex); break; case EraSaveFileType.Global: filename = getSaveDataPathG(); break; case EraSaveFileType.Var: filename = getSaveDataPathV(saveIndex); break; case EraSaveFileType.CharVar: filename = getSaveDataPathC(saveIndex); break; } EraDataResult result = new EraDataResult(); if (!File.Exists(filename)) { result.State = EraDataState.FILENOTFOUND; result.DataMes = "----"; return result; } FileStream fs = null; EraBinaryDataReader bReader = null; EraDataReader reader = null; Int64 version = 0; try { fs = new FileStream(filename, FileMode.Open, FileAccess.Read); bReader = EraBinaryDataReader.CreateReader(fs); if (bReader == null)//eramaker形式 { reader = new EraDataReader(fs); if (!gamebase.UniqueCodeEqualTo(reader.ReadInt64())) { result.State = EraDataState.GAME_ERROR; result.DataMes = "異なるゲームのセーブデータです"; return result; } version = reader.ReadInt64(); if (!gamebase.CheckVersion(version)) { result.State = EraDataState.VIRSION_ERROR; result.DataMes = "セーブデータのバーションが異なります"; return result; } result.State = EraDataState.OK; result.DataMes = reader.ReadString(); return result; //result.State = EraDataState.ETC_ERROR; //result.DataMes = "セーブデータが壊れています"; //return result; } EraSaveFileType fileType = bReader.ReadFileType(); if (type != fileType) { result.State = EraDataState.ETC_ERROR; result.DataMes = "セーブデータが壊れています"; return result; } if (!gamebase.UniqueCodeEqualTo(bReader.ReadInt64())) { result.State = EraDataState.GAME_ERROR; result.DataMes = "異なるゲームのセーブデータです"; return result; } version = bReader.ReadInt64(); if (!gamebase.CheckVersion(version)) { result.State = EraDataState.VIRSION_ERROR; result.DataMes = "セーブデータのバーションが異なります"; return result; } result.State = EraDataState.OK; result.DataMes = bReader.ReadString(); return result; } catch (FileEE fee) { result.State = EraDataState.ETC_ERROR; result.DataMes = fee.Message; } catch (Exception) { result.State = EraDataState.ETC_ERROR; result.DataMes = "読み込み中にエラーが発生しました"; } finally { if (reader != null) reader.Close(); else if (bReader != null) bReader.Close(); else if (fs != null) fs.Close(); } return result; }
public void LoadFromStream(EraDataReader reader) { if (!gamebase.UniqueCodeEqualTo(reader.ReadInt64())) throw new FileEE("異なるゲームのセーブデータです"); Int64 version = reader.ReadInt64(); if (!gamebase.CheckVersion(version)) throw new FileEE("セーブデータのバーションが異なります"); string text = reader.ReadString();//PUTFORM varData.SetDefaultValue(constant); varData.SetDefaultLocalValue(); varData.LastLoadVersion = version; //varData.LastLoadNo = dataIndex; varData.LastLoadText = text; int charaCount = (int)reader.ReadInt64(); varData.CharacterList.Clear(); for (int i = 0; i < charaCount; i++) { CharacterData chara = new CharacterData(constant); varData.CharacterList.Add(chara); chara.LoadFromStream(reader); } varData.LoadFromStream(reader); if (reader.SeekEmuStart()) { if (reader.DataVersion < 1803)//キャラ2次元配列追加以前 for (int i = 0; i < charaCount; i++) varData.CharacterList[i].LoadFromStreamExtended_Old1802(reader); else for (int i = 0; i < charaCount; i++) varData.CharacterList[i].LoadFromStreamExtended(reader); varData.LoadFromStreamExtended(reader, reader.DataVersion); } }