using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System.Text; using System.Windows.Forms; using NTERA.EmuEra.Game.EraEmu._Library; namespace NTERA.EmuEra.Game.EraEmu.Config { internal static class Config { #region config public static Encoding Encode = Encoding.GetEncoding("SHIFT-JIS"); public static Encoding SaveEncode = Encoding.GetEncoding("SHIFT-JIS"); private static Dictionary _nameDic; public static string GetConfigName(ConfigCode code) { return _nameDic[code]; } public static void SetConfig(ConfigData instance) { _nameDic = instance.GetConfigNameDic(); IgnoreCase = instance.GetConfigValue(ConfigCode.IgnoreCase); CompatiFunctionNoignoreCase = instance.GetConfigValue(ConfigCode.CompatiFunctionNoignoreCase); ICFunction = IgnoreCase && !CompatiFunctionNoignoreCase; ICVariable = IgnoreCase; if (IgnoreCase) { if (CompatiFunctionNoignoreCase) SCFunction = StringComparison.Ordinal; else SCFunction = StringComparison.OrdinalIgnoreCase; SCVariable = StringComparison.OrdinalIgnoreCase; } else { SCFunction = StringComparison.Ordinal; SCVariable = StringComparison.Ordinal; } UseRenameFile = instance.GetConfigValue(ConfigCode.UseRenameFile); UseReplaceFile = instance.GetConfigValue(ConfigCode.UseReplaceFile); UseMouse = instance.GetConfigValue(ConfigCode.UseMouse); UseMenu = instance.GetConfigValue(ConfigCode.UseMenu); UseDebugCommand = instance.GetConfigValue(ConfigCode.UseDebugCommand); AllowMultipleInstances = instance.GetConfigValue(ConfigCode.AllowMultipleInstances); AutoSave = instance.GetConfigValue(ConfigCode.AutoSave); UseKeyMacro = instance.GetConfigValue(ConfigCode.UseKeyMacro); SizableWindow = instance.GetConfigValue(ConfigCode.SizableWindow); //UseImageBuffer = instance.GetConfigValue(ConfigCode.UseImageBuffer); TextDrawingMode = instance.GetConfigValue(ConfigCode.TextDrawingMode); WindowX = instance.GetConfigValue(ConfigCode.WindowX); WindowY = instance.GetConfigValue(ConfigCode.WindowY); WindowPosX = instance.GetConfigValue(ConfigCode.WindowPosX); WindowPosY = instance.GetConfigValue(ConfigCode.WindowPosY); SetWindowPos = instance.GetConfigValue(ConfigCode.SetWindowPos); MaxLog = instance.GetConfigValue(ConfigCode.MaxLog); PrintCPerLine = instance.GetConfigValue(ConfigCode.PrintCPerLine); PrintCLength = instance.GetConfigValue(ConfigCode.PrintCLength); ForeColor = instance.GetConfigValue(ConfigCode.ForeColor); BackColor = instance.GetConfigValue(ConfigCode.BackColor); FocusColor = instance.GetConfigValue(ConfigCode.FocusColor); LogColor = instance.GetConfigValue(ConfigCode.LogColor); FontSize = instance.GetConfigValue(ConfigCode.FontSize); FontName = instance.GetConfigValue(ConfigCode.FontName); LineHeight = instance.GetConfigValue(ConfigCode.LineHeight); FPS = instance.GetConfigValue(ConfigCode.FPS); //SkipFrame = instance.GetConfigValue(ConfigCode.SkipFrame); ScrollHeight = instance.GetConfigValue(ConfigCode.ScrollHeight); InfiniteLoopAlertTime = instance.GetConfigValue(ConfigCode.InfiniteLoopAlertTime); SaveDataNos = instance.GetConfigValue(ConfigCode.SaveDataNos); WarnBackCompatibility = instance.GetConfigValue(ConfigCode.WarnBackCompatibility); WindowMaximixed = instance.GetConfigValue(ConfigCode.WindowMaximixed); WarnNormalFunctionOverloading = instance.GetConfigValue(ConfigCode.WarnNormalFunctionOverloading); SearchSubdirectory = instance.GetConfigValue(ConfigCode.SearchSubdirectory); SortWithFilename = instance.GetConfigValue(ConfigCode.SortWithFilename); AllowFunctionOverloading = instance.GetConfigValue(ConfigCode.AllowFunctionOverloading); if (!AllowFunctionOverloading) WarnFunctionOverloading = true; else WarnFunctionOverloading = instance.GetConfigValue(ConfigCode.WarnFunctionOverloading); DisplayWarningLevel = instance.GetConfigValue(ConfigCode.DisplayWarningLevel); DisplayReport = instance.GetConfigValue(ConfigCode.DisplayReport); ReduceArgumentOnLoad = instance.GetConfigValue(ConfigCode.ReduceArgumentOnLoad); IgnoreUncalledFunction = instance.GetConfigValue(ConfigCode.IgnoreUncalledFunction); FunctionNotFoundWarning = instance.GetConfigValue(ConfigCode.FunctionNotFoundWarning); FunctionNotCalledWarning = instance.GetConfigValue(ConfigCode.FunctionNotCalledWarning); ChangeMasterNameIfDebug = instance.GetConfigValue(ConfigCode.ChangeMasterNameIfDebug); LastKey = instance.GetConfigValue(ConfigCode.LastKey); ButtonWrap = instance.GetConfigValue(ConfigCode.ButtonWrap); TextEditor = instance.GetConfigValue(ConfigCode.TextEditor); EditorType = instance.GetConfigValue(ConfigCode.EditorType); EditorArg = instance.GetConfigValue(ConfigCode.EditorArgument); CompatiErrorLine = instance.GetConfigValue(ConfigCode.CompatiErrorLine); CompatiCALLNAME = instance.GetConfigValue(ConfigCode.CompatiCALLNAME); UseSaveFolder = instance.GetConfigValue(ConfigCode.UseSaveFolder); CompatiRAND = instance.GetConfigValue(ConfigCode.CompatiRAND); //CompatiDRAWLINE = instance.GetConfigValue(ConfigCode.CompatiDRAWLINE); CompatiLinefeedAs1739 = instance.GetConfigValue(ConfigCode.CompatiLinefeedAs1739); SystemAllowFullSpace = instance.GetConfigValue(ConfigCode.SystemAllowFullSpace); SystemSaveInUTF8 = instance.GetConfigValue(ConfigCode.SystemSaveInUTF8); if (SystemSaveInUTF8) SaveEncode = Encoding.GetEncoding("UTF-8"); SystemSaveInBinary = instance.GetConfigValue(ConfigCode.SystemSaveInBinary); SystemIgnoreTripleSymbol = instance.GetConfigValue(ConfigCode.SystemIgnoreTripleSymbol); CompatiFuncArgAutoConvert = instance.GetConfigValue(ConfigCode.CompatiFuncArgAutoConvert); CompatiFuncArgOptional = instance.GetConfigValue(ConfigCode.CompatiFuncArgOptional); CompatiCallEvent = instance.GetConfigValue(ConfigCode.CompatiCallEvent); CompatiSPChara = instance.GetConfigValue(ConfigCode.CompatiSPChara); AllowLongInputByMouse = instance.GetConfigValue(ConfigCode.AllowLongInputByMouse); TimesNotRigorousCalculation = instance.GetConfigValue(ConfigCode.TimesNotRigorousCalculation); //一文字変数の禁止オプションを考えた名残 //ForbidOneCodeVariable = instance.GetConfigValue(ConfigCode.ForbidOneCodeVariable); SystemNoTarget = instance.GetConfigValue(ConfigCode.SystemNoTarget); CBUseClipboard = instance.GetConfigValue(ConfigCode.CBUseClipboard); CBIgnoreTags = instance.GetConfigValue(ConfigCode.CBIgnoreTags); CBReplaceTags = instance.GetConfigValue(ConfigCode.CBReplaceTags); CBNewLinesOnly = instance.GetConfigValue(ConfigCode.CBNewLinesOnly); CBClearBuffer = instance.GetConfigValue(ConfigCode.CBClearBuffer); CBTriggerLeftClick = instance.GetConfigValue(ConfigCode.CBTriggerLeftClick); CBTriggerMiddleClick = instance.GetConfigValue(ConfigCode.CBTriggerMiddleClick); CBTriggerDoubleLeftClick = instance.GetConfigValue(ConfigCode.CBTriggerDoubleLeftClick); CBTriggerAnyKeyWait = instance.GetConfigValue(ConfigCode.CBTriggerAnyKeyWait); CBTriggerInputWait = instance.GetConfigValue(ConfigCode.CBTriggerInputWait); CBMaxCB = instance.GetConfigValue(ConfigCode.CBMaxCB); CBBufferSize = instance.GetConfigValue(ConfigCode.CBBufferSize); CBScrollCount = instance.GetConfigValue(ConfigCode.CBScrollCount); CBMinTimer = instance.GetConfigValue(ConfigCode.CBMinTimer); UseLanguage lang = instance.GetConfigValue(ConfigCode.useLanguage); switch (lang) { case UseLanguage.JAPANESE: Language = 0x0411; LangManager.setEncode(932); break; case UseLanguage.KOREAN: Language = 0x0412; LangManager.setEncode(949); break; case UseLanguage.CHINESE_HANS: Language = 0x0804; LangManager.setEncode(936); break; case UseLanguage.CHINESE_HANT: Language = 0x0404; LangManager.setEncode(950); break; } if (FontSize < 8) { MessageBox.Show("フォントサイズが小さすぎます(8が下限)", "設定のエラー"); FontSize = 8; } if (LineHeight < FontSize) { MessageBox.Show("行の高さがフォントサイズより小さいため、フォントサイズと同じ高さと解釈されます", "設定のエラー"); LineHeight = FontSize; } if (SaveDataNos < 20) { MessageBox.Show("表示するセーブデータ数が少なすぎます(20が下限)", "設定のエラー"); SaveDataNos = 20; } if (SaveDataNos > 80) { MessageBox.Show("表示するセーブデータ数が多すぎます(80が上限)", "設定のエラー"); SaveDataNos = 80; } if (MaxLog < 500) { MessageBox.Show("ログ表示行数が少なすぎます(500が下限)", "設定のエラー"); MaxLog = 500; } DrawingParam_ShapePositionShift = 0; if (TextDrawingMode != TextDrawingMode.WINAPI) DrawingParam_ShapePositionShift = Math.Max(2, FontSize / 6); DrawableWidth = WindowX - DrawingParam_ShapePositionShift; if (UseSaveFolder) SavDir = Program.ExeDir + "sav\\"; else SavDir = Program.ExeDir; if (UseSaveFolder && !Directory.Exists(SavDir)) CreateSaveDirAndMoveFiles(); } private static readonly Dictionary> FontDic = new Dictionary>(); public static Font Font => GetFont(null, FontStyle.Regular); public static Font GetFont(string theFontname, FontStyle style) { string fn = theFontname; if (string.IsNullOrEmpty(theFontname)) fn = FontName; if (!FontDic.ContainsKey(fn)) FontDic.Add(fn, new Dictionary()); var fontStyleDic = FontDic[fn]; if (fontStyleDic.ContainsKey(style)) return fontStyleDic[style]; var fontsize = FontSize; Font styledFont = null; try { styledFont = new Font(fn, fontsize, style, GraphicsUnit.Pixel); } catch { return null; } fontStyleDic.Add(style, styledFont); return fontStyleDic[style]; } public static void ClearFont() { foreach (var fontStyleDicPair in FontDic) { foreach (var pair in fontStyleDicPair.Value) { pair.Value.Dispose(); } fontStyleDicPair.Value.Clear(); } FontDic.Clear(); } /// /// ディレクトリ作成失敗のExceptionは呼び出し元で処理すること /// public static void CreateSavDir() { if (UseSaveFolder && !Directory.Exists(SavDir)) { Directory.CreateDirectory(SavDir); } } private static void CreateSaveDirAndMoveFiles() { try { Directory.CreateDirectory(SavDir); } catch { MessageBox.Show("savフォルダの作成に失敗しました", "フォルダ作成失敗"); return; } bool existGlobal = File.Exists(Program.ExeDir + "global.sav"); string[] savFiles = Directory.GetFiles(Program.ExeDir, "save*.sav", SearchOption.TopDirectoryOnly); if (!existGlobal && savFiles.Length == 0) return; DialogResult result = MessageBox.Show("savフォルダを作成しました\n現在のデータをsavフォルダ内に移動しますか?", "データ移動", MessageBoxButtons.YesNo); if (result != DialogResult.Yes) return; //ダイアログが開いている間にフォルダを消してしまうような邪悪なユーザーがいるかもしれない if (!Directory.Exists(SavDir)) { MessageBox.Show("savフォルダの作成が見当たりません", "フォルダ作成失敗"); return; } //ダイアログが開いている間にファイルを変更するような邪悪なユーザーがいるかもしれない try { if (File.Exists(Program.ExeDir + "global.sav")) File.Move(Program.ExeDir + "global.sav", SavDir + "global.sav"); savFiles = Directory.GetFiles(Program.ExeDir, "save*.sav", SearchOption.TopDirectoryOnly); foreach (string oldpath in savFiles) File.Move(oldpath, SavDir + Path.GetFileName(oldpath)); } catch { MessageBox.Show("savファイルの移動に失敗しました", "移動失敗"); } } //先にSetConfigを呼ぶこと //戻り値はセーブが必要かどうか public static bool CheckUpdate() { if (ReduceArgumentOnLoad != ReduceArgumentOnLoadFlag.ONCE) { switch (ReduceArgumentOnLoad) { case ReduceArgumentOnLoadFlag.YES: NeedReduceArgumentOnLoad = true; break; case ReduceArgumentOnLoadFlag.NO: NeedReduceArgumentOnLoad = false; break; case ReduceArgumentOnLoadFlag.ONCE: return false; default: throw new ArgumentOutOfRangeException(); } return false; } var key = GetUpdateKey(); var updated = LastKey != key; LastKey = key; return updated; } private static long GetUpdateKey() { var option = SearchOption.TopDirectoryOnly; if (SearchSubdirectory) option = SearchOption.AllDirectories; string[] erbFiles = Directory.GetFiles(Program.ErbDir, "*.ERB", option); string[] csvFiles = Directory.GetFiles(Program.CsvDir, "*.CSV", option); var writetimes = new long[erbFiles.Length + csvFiles.Length]; for (int i = 0; i < erbFiles.Length; i++) if (Path.GetExtension(erbFiles[i]).Equals(".ERB", StringComparison.OrdinalIgnoreCase)) writetimes[i] = File.GetLastWriteTime(erbFiles[i]).ToBinary(); for (int i = 0; i < csvFiles.Length; i++) if (Path.GetExtension(csvFiles[i]).Equals(".CSV", StringComparison.OrdinalIgnoreCase)) writetimes[i + erbFiles.Length] = File.GetLastWriteTime(csvFiles[i]).ToBinary(); long key = 0; for (int i = 0; i < writetimes.Length; i++) { unchecked { key ^= writetimes[i] * 1103515245 + 12345; } } return key; } public static List> GetFiles(string rootdir, string pattern) { return getFiles(rootdir, rootdir, pattern, !SearchSubdirectory, SortWithFilename); } private sealed class StrIgnoreCaseComparer : IComparer { public int Compare(string x, string y) { return string.Compare(x, y, StringComparison.OrdinalIgnoreCase); } } private static readonly StrIgnoreCaseComparer IgnoreCaseComparer = new StrIgnoreCaseComparer(); //KeyValuePair<相対パス, 完全パス>のリストを返す。 private static List> getFiles(string dir, string rootdir, string pattern, bool toponly, bool sort) { const StringComparison strComp = StringComparison.OrdinalIgnoreCase; List> retList = new List>(); if (!toponly) {//サブフォルダ内の検索 string[] dirList = Directory.GetDirectories(dir, "*", SearchOption.TopDirectoryOnly); if (dirList.Length > 0) { if (sort) Array.Sort(dirList, IgnoreCaseComparer); for (int i = 0; i < dirList.Length; i++) retList.AddRange(getFiles(dirList[i], rootdir, pattern, toponly, sort)); } } string RelativePath;//相対ディレクトリ名 if (string.Equals(dir, rootdir, strComp))//現在のパスが検索ルートパスに等しい RelativePath = ""; else { if (!dir.StartsWith(rootdir, strComp)) RelativePath = dir; else RelativePath = dir.Substring(rootdir.Length);//前方が検索ルートパスと一致するならその部分を切り取る if (!RelativePath.EndsWith("\\") && !RelativePath.EndsWith("/")) RelativePath += "\\";//末尾が\又は/で終わるように。後でFile名を直接加算できるようにしておく } //filepathsは完全パスである string[] filepaths = Directory.GetFiles(dir, pattern, SearchOption.TopDirectoryOnly); if (sort) { Array.Sort(filepaths, IgnoreCaseComparer); } for (int i = 0; i < filepaths.Length; i++) { if (Path.GetExtension(filepaths[i]).Length <= 4)//".erb"や".csv"であること。放置すると".erb*"等を拾う。 { retList.Add(new KeyValuePair(RelativePath + Path.GetFileName(filepaths[i]), filepaths[i])); } } return retList; } /// /// IgnoreCaseはprivateに。代わりにICFunctionかICVariableを使う。 /// private static bool IgnoreCase { get; set; } private static bool CompatiFunctionNoignoreCase { get; set; } /// /// 関数名・属性名的な名前のIgnoreCaseフラグ /// 関数・属性・BEGINのキーワード /// どうせeramaker用の互換処理なのでEmuera専用構文については適当に。 /// public static bool ICFunction { get; private set; } /// /// 変数名、命令名的な名前のIgnoreCaseフラグ /// 変数・命令・$ラベル名、GOTOの引数 /// public static bool ICVariable { get; private set; } /// /// 関数名・属性名的な名前の比較フラグ /// public static StringComparison SCFunction { get; private set; } /// /// 変数名、命令名的な名前の比較フラグ /// public static StringComparison SCVariable { get; private set; } /// /// ファイル名的な名前の比較フラグ /// public const StringComparison SCIgnoreCase = StringComparison.OrdinalIgnoreCase; /// /// 式中での文字列比較フラグ /// public const StringComparison SCExpression = StringComparison.Ordinal; /// /// GDI+利用時に発生する文字列と図形・画像間の位置ずれ補正 /// public static int DrawingParam_ShapePositionShift { get; private set; } public static bool UseRenameFile { get; private set; } public static bool UseReplaceFile { get; private set; } public static bool UseMouse { get; private set; } public static bool UseMenu { get; private set; } public static bool UseDebugCommand { get; private set; } public static bool AllowMultipleInstances { get; private set; } public static bool AutoSave { get; private set; } public static bool UseKeyMacro { get; private set; } public static bool SizableWindow { get; private set; } //public static bool UseImageBuffer { get; private set; } public static TextDrawingMode TextDrawingMode { get; private set; } public static int WindowX { get; private set; } /// /// 実際に描画可能な横幅 /// public static int DrawableWidth { get; private set; } public static int WindowY { get; private set; } public static int WindowPosX { get; private set; } public static int WindowPosY { get; private set; } public static bool SetWindowPos { get; private set; } public static int MaxLog { get; private set; } public static int PrintCPerLine { get; private set; } public static int PrintCLength { get; private set; } public static Color ForeColor { get; private set; } public static Color BackColor { get; private set; } public static Color FocusColor { get; private set; } public static Color LogColor { get; private set; } public static int FontSize { get; private set; } public static string FontName { get; private set; } public static int LineHeight { get; private set; } public static int FPS { get; private set; } //public static int SkipFrame { get; private set; } public static int ScrollHeight { get; private set; } public static int InfiniteLoopAlertTime { get; private set; } public static int SaveDataNos { get; private set; } public static bool WarnBackCompatibility { get; private set; } public static bool WindowMaximixed { get; private set; } public static bool WarnNormalFunctionOverloading { get; private set; } public static bool SearchSubdirectory { get; private set; } public static bool SortWithFilename { get; private set; } public static bool AllowFunctionOverloading { get; private set; } public static bool WarnFunctionOverloading { get; private set; } public static int DisplayWarningLevel { get; private set; } public static bool DisplayReport { get; private set; } public static ReduceArgumentOnLoadFlag ReduceArgumentOnLoad { get; private set; } public static bool IgnoreUncalledFunction { get; private set; } public static DisplayWarningFlag FunctionNotFoundWarning { get; private set; } public static DisplayWarningFlag FunctionNotCalledWarning { get; private set; } public static bool ChangeMasterNameIfDebug { get; private set; } public static long LastKey { get; private set; } public static bool ButtonWrap { get; private set; } public static string TextEditor { get; private set; } public static TextEditorType EditorType { get; private set; } public static string EditorArg { get; private set; } public static bool CompatiErrorLine { get; private set; } public static bool CompatiCALLNAME { get; private set; } public static bool UseSaveFolder { get; private set; } public static bool CompatiRAND { get; private set; } //public static bool CompatiDRAWLINE { get; private set; } public static bool CompatiLinefeedAs1739 { get; private set; } public static bool SystemAllowFullSpace { get; private set; } public static bool SystemSaveInUTF8 { get; private set; } public static bool SystemSaveInBinary { get; private set; } public static bool CompatiFuncArgAutoConvert { get; private set; } public static bool CompatiFuncArgOptional { get; private set; } public static bool CompatiCallEvent { get; private set; } public static bool CompatiSPChara { get; private set; } public static bool SystemIgnoreTripleSymbol { get; private set; } public static bool SystemNoTarget { get; private set; } public static bool CBUseClipboard { get; private set; } public static bool CBIgnoreTags { get; private set; } public static string CBReplaceTags { get; private set; } public static bool CBNewLinesOnly { get; private set; } public static bool CBClearBuffer { get; private set; } public static bool CBTriggerLeftClick { get; private set; } public static bool CBTriggerMiddleClick { get; private set; } public static bool CBTriggerDoubleLeftClick { get; private set; } public static bool CBTriggerAnyKeyWait { get; private set; } public static bool CBTriggerInputWait { get; private set; } public static int CBMaxCB { get; private set; } public static int CBBufferSize { get; private set; } public static int CBScrollCount { get; private set; } public static int CBMinTimer { get; private set; } public static int Language { get; private set; } public static string SavDir { get; private set; } public static bool NeedReduceArgumentOnLoad { get; private set; } public static bool AllowLongInputByMouse { get; private set; } public static bool TimesNotRigorousCalculation { get; private set; } //一文字変数の禁止オプションを考えた名残 //public static bool ForbidOneCodeVariable { get; private set; } #endregion #region debug public static void SetDebugConfig(ConfigData instance) { DebugShowWindow = instance.GetConfigValue(ConfigCode.DebugShowWindow); DebugWindowTopMost = instance.GetConfigValue(ConfigCode.DebugWindowTopMost); DebugWindowWidth = instance.GetConfigValue(ConfigCode.DebugWindowWidth); DebugWindowHeight = instance.GetConfigValue(ConfigCode.DebugWindowHeight); DebugSetWindowPos = instance.GetConfigValue(ConfigCode.DebugSetWindowPos); DebugWindowPosX = instance.GetConfigValue(ConfigCode.DebugWindowPosX); DebugWindowPosY = instance.GetConfigValue(ConfigCode.DebugWindowPosY); } public static bool DebugShowWindow { get; private set; } public static bool DebugWindowTopMost { get; private set; } public static int DebugWindowWidth { get; private set; } public static int DebugWindowHeight { get; private set; } public static bool DebugSetWindowPos { get; private set; } public static int DebugWindowPosX { get; private set; } public static int DebugWindowPosY { get; private set; } #endregion #region replace public static void SetReplace(ConfigData instance) { MoneyLabel = instance.GetConfigValue(ConfigCode.MoneyLabel); MoneyFirst = instance.GetConfigValue(ConfigCode.MoneyFirst); LoadLabel = instance.GetConfigValue(ConfigCode.LoadLabel); MaxShopItem = instance.GetConfigValue(ConfigCode.MaxShopItem); DrawLineString = instance.GetConfigValue(ConfigCode.DrawLineString); if (string.IsNullOrEmpty(DrawLineString)) DrawLineString = "-"; BarChar1 = instance.GetConfigValue(ConfigCode.BarChar1); BarChar2 = instance.GetConfigValue(ConfigCode.BarChar2); TitleMenuString0 = instance.GetConfigValue(ConfigCode.TitleMenuString0); TitleMenuString1 = instance.GetConfigValue(ConfigCode.TitleMenuString1); ComAbleDefault = instance.GetConfigValue(ConfigCode.ComAbleDefault); StainDefault = instance.GetConfigValue>(ConfigCode.StainDefault); TimeupLabel = instance.GetConfigValue(ConfigCode.TimeupLabel); ExpLvDef = instance.GetConfigValue>(ConfigCode.ExpLvDef); PalamLvDef = instance.GetConfigValue>(ConfigCode.PalamLvDef); PbandDef = instance.GetConfigValue(ConfigCode.pbandDef); RelationDef = instance.GetConfigValue(ConfigCode.RelationDef); } public static string MoneyLabel { get; private set; } public static bool MoneyFirst { get; private set; } public static string LoadLabel { get; private set; } public static int MaxShopItem { get; private set; } public static string DrawLineString { get; private set; } public static char BarChar1 { get; private set; } public static char BarChar2 { get; private set; } public static string TitleMenuString0 { get; private set; } public static string TitleMenuString1 { get; private set; } public static int ComAbleDefault { get; private set; } public static List StainDefault { get; private set; } public static string TimeupLabel { get; private set; } public static List ExpLvDef { get; private set; } public static List PalamLvDef { get; private set; } public static Int64 PbandDef { get; private set; } public static Int64 RelationDef { get; private set; } #endregion } }