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();
            }
        }
Esempio n. 8
0
        /// <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;
                }
            }
        }
Esempio n. 9
0
 public MieConversationApp(MieLanguageInfo languageInfo, MieConversationNodeInfo design, MieCharacterAttributeFile characterAttributeFile)
 {
     this.LanguageInfo           = languageInfo;
     this.Design                 = design;
     this.CharacterAttributeFile = characterAttributeFile;
 }