public static void LoadFromSystemDB(MieSystemDB systemDB, MieCharacterAttributeFile charAttr) { SQLiteCommand command = systemDB.Connection.CreateCommand(); command.CommandText = @"SELECT * FROM CharacterAttributes;"; using (SQLiteDataReader sdr = command.ExecuteReader()) { while (sdr.Read() == true) { var byteID = (byte[])sdr["ID"]; var name = (string)sdr["Name"]; var intGender = (long)sdr["Gender"]; var byteSpeakerID = (byte[])sdr["SpeakerID"]; var byteRaceID = (byte[])sdr["RaceID"]; Guid id = new Guid(byteID); Guid speakerID = new Guid(byteSpeakerID); Guid raceID = new Guid(byteRaceID); MieCharacterAttributeFile.NGender gender = (MieCharacterAttributeFile.NGender)Enum.ToObject(typeof(MieCharacterAttributeFile.NGender), intGender); MieCharacterAttributeEntry charEntry = new MieCharacterAttributeEntry(id, name, gender, speakerID, raceID); charAttr.AddCharacterAttributeEntry(charEntry); } } }
/// <summary> /// 話者情報をDBに格納する。 /// </summary> /// <param name="systemDb">Connection of SystemDB</param> /// <param name="charFile">CharacterAttributeFile</param> public static void SaveToSysyemDB(MieSystemDB systemDb, MieCharacterAttributeFile charFile) { using (SQLiteTransaction trans = systemDb.Connection.BeginTransaction()) { SQLiteCommand cmd = systemDb.Connection.CreateCommand(); cmd.CommandText = "INSERT INTO CharacterAttributes VALUES(@ID,@Name,@Gender,@SpeakerID,@RaceID);"; //// パラメータのセット cmd.Parameters.Add("ID", System.Data.DbType.Guid); cmd.Parameters.Add("Name", System.Data.DbType.String); cmd.Parameters.Add("Gender", System.Data.DbType.Int32); cmd.Parameters.Add("SpeakerID", System.Data.DbType.Guid); cmd.Parameters.Add("RaceID", System.Data.DbType.Guid); foreach (var charEntry in charFile.CharacterItems.Values) { cmd.Parameters["ID"].Value = charEntry.ID; cmd.Parameters["Name"].Value = charEntry.Name; cmd.Parameters["Gender"].Value = charEntry.Gender; cmd.Parameters["SpeakerID"].Value = charEntry.SpeakerID; cmd.Parameters["RaceID"].Value = charEntry.RaceID; try { cmd.ExecuteNonQuery(); } catch (Exception ex) { logger.Error($"{ex.Message}\r\nCharacterAttributes: ID({charEntry.ID.ToString()}) Name({charEntry.Name}) Gender({charEntry.Gender.ToString()}) SpeakerID({charEntry.SpeakerID.ToString()}) RaceID({charEntry.RaceID.ToString()})"); } } trans.Commit(); } }
/// <summary> /// JSONテキストからキャラクター属性を作成する。 /// </summary> /// <param name="jtext">JSONテキスト</param> /// <param name="charAttributeFile">キャラクター属性ファイル</param> private static void CreateAttributeEntry(string jtext, MieCharacterAttributeFile charAttributeFile) { //// デシリアライズ var oeCharacters = JsonConvert.DeserializeObject <MieOECharacters>(jtext); foreach (var gameDataObject in oeCharacters.GameDataObjects) { var tag = GetGameDataTypeTag(gameDataObject.MieGameDataTypeTag); switch (tag) { case "CharacterStatsGameData": var component = gameDataObject.Components[0]; //// キャラクター属性 MieCharacterAttributeEntry characterAttrEntry = new MieCharacterAttributeEntry( new Guid(gameDataObject.ID), gameDataObject.DebugName, GetGenderType(component.Gender), new Guid(component.SpeakerID), new Guid(component.RaceID)); charAttributeFile.AddCharacterAttributeEntry(characterAttrEntry); break; case "RaceGameData": //// 種族属性 MieRaceAttributeEntry entry = new MieRaceAttributeEntry( new Guid(gameDataObject.ID), gameDataObject.DebugName); charAttributeFile.AddRaceEntry(entry); break; default: continue; } } }
/// <summary> /// キャラクター情報、種族情報の初期化とDB化。 /// </summary> /// <param name="systemDb">データベース接続情報</param> /// <param name="charAttrPath">キャラクター情報ファイルのパス</param> public void ConvertCharcterAttributes(MieSystemDB systemDb, string charAttrPath) { //// JSONファイルからキャラクター情報を読み込み、CharAttrとRaceAttrを作成する。 this.CharacterAttributeFile = MieConversationsDesignDao.LoadCharacterAttribute(charAttrPath); //// キャラクター情報(CharAttr)をDBに保存する。 MieTableCharacterAttributesDao.SaveToSysyemDB(systemDb, this.CharacterAttributeFile); //// 種族情報(RaceAttr)をDBに保存する。 MieTableRaceAttributesDao.SaveToSysyemDB(systemDb, this.CharacterAttributeFile); }
/// <summary> /// JSON形式のキャラクター属性ファイルを読み込みキャラクター属性ファイルを返す。 /// [非OE DLL] /// </summary> /// <param name="path">キャラクター属性ファイルのパス</param> /// <returns>キャラクター属性ファイル</returns> public static MieCharacterAttributeFile LoadCharacterAttribute(string path) { MieCharacterAttributeFile charAttributeFile = new MieCharacterAttributeFile(); string ctext = LoadJson(path); ctext = ctext.Replace("$type", "MieGameDataTypeTag"); CreateAttributeEntry(ctext, charAttributeFile); return(charAttributeFile); }
public static void LoadFromSystemDB(MieSystemDB systemDB, MieCharacterAttributeFile raceAttr) { SQLiteCommand command = systemDB.Connection.CreateCommand(); command.CommandText = @"SELECT * FROM RaceAttributes"; using (SQLiteDataReader sdr = command.ExecuteReader()) { while (sdr.Read() == true) { var byteRaceID = (byte[])sdr["RaceID"]; var name = (string)sdr["Name"]; Guid raceID = new Guid(byteRaceID); MieRaceAttributeEntry raceEntry = new MieRaceAttributeEntry(raceID, name); raceAttr.AddRaceEntry(raceEntry); } } }
public static void SaveToSysyemDB(MieSystemDB systemDb, MieCharacterAttributeFile raceAttrBefore) { using (SQLiteTransaction trans = systemDb.Connection.BeginTransaction()) { SQLiteCommand cmd = systemDb.Connection.CreateCommand(); cmd.CommandText = "INSERT INTO RaceAttributes VALUES(@RaceID,@Name)"; //// パラメータのセット cmd.Parameters.Add("RaceID", System.Data.DbType.Guid); cmd.Parameters.Add("Name", System.Data.DbType.String); foreach (var raceEntry in raceAttrBefore.RaceItems.Values) { cmd.Parameters["RaceID"].Value = raceEntry.RaceID; cmd.Parameters["Name"].Value = raceEntry.Name; cmd.ExecuteNonQuery(); } trans.Commit(); } }
/// <summary> /// スピーカー属性ファイルを読み込みキャラクター属性に追加する。 /// </summary> /// <param name="charAttributeFile">キャラクター属性</param> /// <param name="path">スピーカー属性ファイル</param> public static void AppendSpeakerAttribute(MieCharacterAttributeFile charAttributeFile, string path) { if (!File.Exists(path)) { var msg = $"File not found."; throw new FileNotFoundException("File not found. path", path); } string jtext = File.ReadAllText(path, Encoding.UTF8); //// JSON中の"$type"はデシリアライズできないため、"MieGameDataTypeTag"にリネームして処理する。詳細はwiki参照。 jtext = jtext.Replace("$type", "MieGameDataTypeTag"); //// デシリアライズ var oeSpeakers = JsonConvert.DeserializeObject <MieOESpeakers>(jtext); foreach (var gameDataObject in oeSpeakers.GameDataObjects) { var tag = GetGameDataTypeTag(gameDataObject.MieGameDataTypeTag); switch (tag) { case "SpeakerGameData": var component = gameDataObject.Components[0]; //// スピーカー属性 var gender = GetGender(component.Gender); MieSpeakerAttributeEntry attrEntry = new MieSpeakerAttributeEntry(new Guid(gameDataObject.ID), gameDataObject.DebugName, gender); charAttributeFile.AddSpeakerEntry(attrEntry); break; default: continue; } } }
public MieConversationApp(MieLanguageInfo languageInfo, MieConversationNodeInfo design, MieCharacterAttributeFile characterAttributeFile) { this.LanguageInfo = languageInfo; this.Design = design; this.CharacterAttributeFile = characterAttributeFile; }