ConfigData.cs 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Drawing;
  4. using System.IO;
  5. using NTERA.EmuEra.Game.EraEmu.GameData;
  6. using NTERA.EmuEra.Game.EraEmu.GameData.Expression;
  7. using NTERA.EmuEra.Game.EraEmu.Sub;
  8. namespace NTERA.EmuEra.Game.EraEmu.Config
  9. {
  10. /// <summary>
  11. /// プログラム全体で使用される値でWindow作成前に設定して以後変更されないもの
  12. /// (という予定だったが今は違う)
  13. /// 1756 Config → ConfigDataへ改名
  14. /// </summary>
  15. internal sealed class ConfigData
  16. {
  17. static readonly string configPath = Program.ExeDir + "emuera.config";
  18. static readonly string configdebugPath = Program.DebugDir + "debug.config";
  19. static ConfigData() { }
  20. private static ConfigData instance = new ConfigData();
  21. public static ConfigData Instance => instance;
  22. private ConfigData() { setDefault(); }
  23. //適当に大き目の配列を作っておく。
  24. private AConfigItem[] configArray = new AConfigItem[85];
  25. private AConfigItem[] replaceArray = new AConfigItem[50];
  26. private AConfigItem[] debugArray = new AConfigItem[20];
  27. private void setDefault()
  28. {
  29. int i = 0;
  30. configArray[i++] = new ConfigItem<bool>(ConfigCode.IgnoreCase, "大文字小文字の違いを無視する", true);
  31. configArray[i++] = new ConfigItem<bool>(ConfigCode.UseRenameFile, "_Rename.csvを利用する", false);
  32. configArray[i++] = new ConfigItem<bool>(ConfigCode.UseReplaceFile, "_Replace.csvを利用する", true);
  33. configArray[i++] = new ConfigItem<bool>(ConfigCode.UseMouse, "マウスを使用する", true);
  34. configArray[i++] = new ConfigItem<bool>(ConfigCode.UseMenu, "メニューを使用する", true);
  35. configArray[i++] = new ConfigItem<bool>(ConfigCode.UseDebugCommand, "デバッグコマンドを使用する", false);
  36. configArray[i++] = new ConfigItem<bool>(ConfigCode.AllowMultipleInstances, "多重起動を許可する", true);
  37. configArray[i++] = new ConfigItem<bool>(ConfigCode.AutoSave, "オートセーブを行なう", true);
  38. configArray[i++] = new ConfigItem<bool>(ConfigCode.UseKeyMacro, "キーボードマクロを使用する", true);
  39. configArray[i++] = new ConfigItem<bool>(ConfigCode.SizableWindow, "ウィンドウの高さを可変にする", true);
  40. configArray[i++] = new ConfigItem<TextDrawingMode>(ConfigCode.TextDrawingMode, "描画インターフェース", TextDrawingMode.GRAPHICS);
  41. //configArray[i++] = new ConfigItem<bool>(ConfigCode.UseImageBuffer, "イメージバッファを使用する", true);
  42. configArray[i++] = new ConfigItem<int>(ConfigCode.WindowX, "ウィンドウ幅", 760);
  43. configArray[i++] = new ConfigItem<int>(ConfigCode.WindowY, "ウィンドウ高さ", 480);
  44. configArray[i++] = new ConfigItem<int>(ConfigCode.WindowPosX, "ウィンドウ位置X", 0);
  45. configArray[i++] = new ConfigItem<int>(ConfigCode.WindowPosY, "ウィンドウ位置Y", 0);
  46. configArray[i++] = new ConfigItem<bool>(ConfigCode.SetWindowPos, "起動時のウィンドウ位置を指定する", false);
  47. configArray[i++] = new ConfigItem<bool>(ConfigCode.WindowMaximixed, "起動時にウィンドウを最大化する", false);
  48. configArray[i++] = new ConfigItem<int>(ConfigCode.MaxLog, "履歴ログの行数", 5000);
  49. configArray[i++] = new ConfigItem<int>(ConfigCode.PrintCPerLine, "PRINTCを並べる数", 3);
  50. configArray[i++] = new ConfigItem<int>(ConfigCode.PrintCLength, "PRINTCの文字数", 25);
  51. configArray[i++] = new ConfigItem<string>(ConfigCode.FontName, "フォント名", "MS ゴシック");
  52. configArray[i++] = new ConfigItem<int>(ConfigCode.FontSize, "フォントサイズ", 18);
  53. configArray[i++] = new ConfigItem<int>(ConfigCode.LineHeight, "一行の高さ", 19);
  54. configArray[i++] = new ConfigItem<Color>(ConfigCode.ForeColor, "文字色", Color.FromArgb(192, 192, 192));//LIGHTGRAY
  55. configArray[i++] = new ConfigItem<Color>(ConfigCode.BackColor, "背景色", Color.FromArgb(0, 0, 0));//BLACK
  56. configArray[i++] = new ConfigItem<Color>(ConfigCode.FocusColor, "選択中文字色", Color.FromArgb(255, 255, 0));//YELLOW
  57. configArray[i++] = new ConfigItem<Color>(ConfigCode.LogColor, "履歴文字色", Color.FromArgb(192, 192, 192));//LIGHTGRAY//Color.FromArgb(128, 128, 128);//GRAY
  58. configArray[i++] = new ConfigItem<int>(ConfigCode.FPS, "フレーム毎秒", 5);
  59. configArray[i++] = new ConfigItem<int>(ConfigCode.SkipFrame, "最大スキップフレーム数", 3);
  60. configArray[i++] = new ConfigItem<int>(ConfigCode.ScrollHeight, "スクロール行数", 1);
  61. configArray[i++] = new ConfigItem<int>(ConfigCode.InfiniteLoopAlertTime, "無限ループ警告までのミリ秒数", 5000);
  62. configArray[i++] = new ConfigItem<int>(ConfigCode.DisplayWarningLevel, "表示する最低警告レベル", 1);
  63. configArray[i++] = new ConfigItem<bool>(ConfigCode.DisplayReport, "ロード時にレポートを表示する", false);
  64. configArray[i++] = new ConfigItem<ReduceArgumentOnLoadFlag>(ConfigCode.ReduceArgumentOnLoad, "ロード時に引数を解析する", ReduceArgumentOnLoadFlag.NO);
  65. //configArray[i++] = new ConfigItem<bool>(ConfigCode.ReduceFormattedStringOnLoad, "ロード時にFORM文字列を解析する", true);
  66. configArray[i++] = new ConfigItem<bool>(ConfigCode.IgnoreUncalledFunction, "呼び出されなかった関数を無視する", true);
  67. configArray[i++] = new ConfigItem<DisplayWarningFlag>(ConfigCode.FunctionNotFoundWarning, "関数が見つからない警告の扱い", DisplayWarningFlag.IGNORE);
  68. configArray[i++] = new ConfigItem<DisplayWarningFlag>(ConfigCode.FunctionNotCalledWarning, "関数が呼び出されなかった警告の扱い", DisplayWarningFlag.IGNORE);
  69. //configArray[i++] = new ConfigItem<List<string>>(ConfigCode.IgnoreWarningFiles, "指定したファイル中の警告を無視する", new List<string>());
  70. configArray[i++] = new ConfigItem<bool>(ConfigCode.ChangeMasterNameIfDebug, "デバッグコマンドを使用した時にMASTERの名前を変更する", true);
  71. configArray[i++] = new ConfigItem<bool>(ConfigCode.ButtonWrap, "ボタンの途中で行を折りかえさない", false);
  72. configArray[i++] = new ConfigItem<bool>(ConfigCode.SearchSubdirectory, "サブディレクトリを検索する", false);
  73. configArray[i++] = new ConfigItem<bool>(ConfigCode.SortWithFilename, "読み込み順をファイル名順にソートする", false);
  74. configArray[i++] = new ConfigItem<long>(ConfigCode.LastKey, "最終更新コード", 0);
  75. configArray[i++] = new ConfigItem<int>(ConfigCode.SaveDataNos, "表示するセーブデータ数", 20);
  76. configArray[i++] = new ConfigItem<bool>(ConfigCode.WarnBackCompatibility, "eramaker互換性に関する警告を表示する", true);
  77. configArray[i++] = new ConfigItem<bool>(ConfigCode.AllowFunctionOverloading, "システム関数の上書きを許可する", true);
  78. configArray[i++] = new ConfigItem<bool>(ConfigCode.WarnFunctionOverloading, "システム関数が上書きされたとき警告を表示する", true);
  79. configArray[i++] = new ConfigItem<string>(ConfigCode.TextEditor, "関連づけるテキストエディタ", "notepad");
  80. configArray[i++] = new ConfigItem<TextEditorType>(ConfigCode.EditorType, "テキストエディタコマンドライン指定", TextEditorType.USER_SETTING);
  81. configArray[i++] = new ConfigItem<string>(ConfigCode.EditorArgument, "エディタに渡す行指定引数", "");
  82. configArray[i++] = new ConfigItem<bool>(ConfigCode.WarnNormalFunctionOverloading, "同名の非イベント関数が複数定義されたとき警告する", false);
  83. configArray[i++] = new ConfigItem<bool>(ConfigCode.CompatiErrorLine, "解釈不可能な行があっても実行する", false);
  84. configArray[i++] = new ConfigItem<bool>(ConfigCode.CompatiCALLNAME, "CALLNAMEが空文字列の時にNAMEを代入する", false);
  85. configArray[i++] = new ConfigItem<bool>(ConfigCode.UseSaveFolder, "セーブデータをsavフォルダ内に作成する", false);
  86. configArray[i++] = new ConfigItem<bool>(ConfigCode.CompatiRAND, "擬似変数RANDの仕様をeramakerに合わせる", false);
  87. configArray[i++] = new ConfigItem<bool>(ConfigCode.CompatiDRAWLINE, "DRAWLINEを常に新しい行で行う", false);
  88. configArray[i++] = new ConfigItem<bool>(ConfigCode.CompatiFunctionNoignoreCase, "関数・属性については大文字小文字を無視しない", false); ;
  89. configArray[i++] = new ConfigItem<bool>(ConfigCode.SystemAllowFullSpace, "全角スペースをホワイトスペースに含める", true);
  90. configArray[i++] = new ConfigItem<bool>(ConfigCode.SystemSaveInUTF8, "セーブデータをUTF-8で保存する", false);
  91. configArray[i++] = new ConfigItem<bool>(ConfigCode.CompatiLinefeedAs1739, "ver1739以前の非ボタン折り返しを再現する", false);
  92. configArray[i++] = new ConfigItem<UseLanguage>(ConfigCode.useLanguage, "内部で使用する東アジア言語", UseLanguage.JAPANESE);
  93. configArray[i++] = new ConfigItem<bool>(ConfigCode.AllowLongInputByMouse, "ONEINPUT系命令でマウスによる2文字以上の入力を許可する", false);
  94. configArray[i++] = new ConfigItem<bool>(ConfigCode.CompatiCallEvent, "イベント関数のCALLを許可する", false);
  95. configArray[i++] = new ConfigItem<bool>(ConfigCode.CompatiSPChara, "SPキャラを使用する", false);
  96. configArray[i++] = new ConfigItem<bool>(ConfigCode.SystemSaveInBinary, "セーブデータをバイナリ形式で保存する", true);
  97. configArray[i++] = new ConfigItem<bool>(ConfigCode.CompatiFuncArgOptional, "ユーザー関数の全ての引数の省略を許可する", false);
  98. configArray[i++] = new ConfigItem<bool>(ConfigCode.CompatiFuncArgAutoConvert, "ユーザー関数の引数に自動的にTOSTRを補完する", false);
  99. configArray[i++] = new ConfigItem<bool>(ConfigCode.SystemIgnoreTripleSymbol, "FORM中の三連記号を展開しない", false);
  100. configArray[i++] = new ConfigItem<bool>(ConfigCode.TimesNotRigorousCalculation, "TIMESの計算をeramakerにあわせる", false);
  101. //一文字変数の禁止オプションを考えた名残
  102. //configArray[i++] = new ConfigItem<bool>(ConfigCode.ForbidOneCodeVariable, "一文字変数の使用を禁止する", false);
  103. configArray[i++] = new ConfigItem<bool>(ConfigCode.SystemNoTarget, "キャラクタ変数の引数を補完しない", false);
  104. configArray[i++] = new ConfigItem<bool>(ConfigCode.CBUseClipboard, "Clipboard- Copy text to Clipboard during Game", true);
  105. configArray[i++] = new ConfigItem<bool>(ConfigCode.CBIgnoreTags, "Clipboard- ignore <> tags in text", false);
  106. configArray[i++] = new ConfigItem<string>(ConfigCode.CBReplaceTags, "Clipboard- Replace <> with this", ".");
  107. configArray[i++] = new ConfigItem<bool>(ConfigCode.CBNewLinesOnly, "Clipboard- Show new lines only", true);
  108. configArray[i++] = new ConfigItem<bool>(ConfigCode.CBClearBuffer, "Clipboard- Clear Buffer when game clears screen", false);
  109. configArray[i++] = new ConfigItem<bool>(ConfigCode.CBTriggerLeftClick, "Clipboard- LeftClick Trigger", true);
  110. configArray[i++] = new ConfigItem<bool>(ConfigCode.CBTriggerMiddleClick, "Clipboard- MiddleClick Trigger", false);
  111. configArray[i++] = new ConfigItem<bool>(ConfigCode.CBTriggerDoubleLeftClick, "Clipboard- Double Left Click Trigger", false);
  112. configArray[i++] = new ConfigItem<bool>(ConfigCode.CBTriggerAnyKeyWait, "Clipboard- AnyKey Wait Trigger ", false);
  113. configArray[i++] = new ConfigItem<bool>(ConfigCode.CBTriggerInputWait, "Clipboard- Wait for Input Trigger", true);
  114. configArray[i++] = new ConfigItem<int>(ConfigCode.CBMaxCB, "Clipboard- Length of Clipboard", 25);
  115. configArray[i++] = new ConfigItem<int>(ConfigCode.CBBufferSize, "Clipboard- Buffer Size", 300);
  116. configArray[i++] = new ConfigItem<int>(ConfigCode.CBScrollCount, "Clipboard- Scrolled Lines per Key", 5);
  117. configArray[i++] = new ConfigItem<int>(ConfigCode.CBMinTimer, "Clipboard- min time between pastes", 800);
  118. configArray[i++] = new ConfigItem<string>(ConfigCode.AnchorCustomIcon, "Anchor- Path to a custom window icon (PNG)", "");
  119. i = 0;
  120. debugArray[i++] = new ConfigItem<bool>(ConfigCode.DebugShowWindow, "起動時にデバッグウインドウを表示する", true);
  121. debugArray[i++] = new ConfigItem<bool>(ConfigCode.DebugWindowTopMost, "デバッグウインドウを最前面に表示する", true);
  122. debugArray[i++] = new ConfigItem<int>(ConfigCode.DebugWindowWidth, "デバッグウィンドウ幅", 400);
  123. debugArray[i++] = new ConfigItem<int>(ConfigCode.DebugWindowHeight, "デバッグウィンドウ高さ", 300);
  124. debugArray[i++] = new ConfigItem<bool>(ConfigCode.DebugSetWindowPos, "デバッグウィンドウ位置を指定する", false);
  125. debugArray[i++] = new ConfigItem<int>(ConfigCode.DebugWindowPosX, "デバッグウィンドウ位置X", 0);
  126. debugArray[i++] = new ConfigItem<int>(ConfigCode.DebugWindowPosY, "デバッグウィンドウ位置Y", 0);
  127. i = 0;
  128. replaceArray[i++] = new ConfigItem<string>(ConfigCode.MoneyLabel, "お金の単位", "$");
  129. replaceArray[i++] = new ConfigItem<bool>(ConfigCode.MoneyFirst, "単位の位置", true);
  130. replaceArray[i++] = new ConfigItem<string>(ConfigCode.LoadLabel, "起動時簡略表示", "Now Loading...");
  131. replaceArray[i++] = new ConfigItem<int>(ConfigCode.MaxShopItem, "販売アイテム数", 100);
  132. replaceArray[i++] = new ConfigItem<string>(ConfigCode.DrawLineString, "DRAWLINE文字", "-");
  133. replaceArray[i++] = new ConfigItem<char>(ConfigCode.BarChar1, "BAR文字1", '*');
  134. replaceArray[i++] = new ConfigItem<char>(ConfigCode.BarChar2, "BAR文字2", '.');
  135. replaceArray[i++] = new ConfigItem<string>(ConfigCode.TitleMenuString0, "システムメニュー0", "Start a game");
  136. replaceArray[i++] = new ConfigItem<string>(ConfigCode.TitleMenuString1, "システムメニュー1", "Load a save");
  137. replaceArray[i++] = new ConfigItem<int>(ConfigCode.ComAbleDefault, "COM_ABLE初期値", 1);
  138. replaceArray[i++] = new ConfigItem<List<Int64>>(ConfigCode.StainDefault, "汚れの初期値", new List<Int64>(new Int64[] { 0, 0, 2, 1, 8 }));
  139. replaceArray[i++] = new ConfigItem<string>(ConfigCode.TimeupLabel, "時間切れ表示", "時間切れ");
  140. replaceArray[i++] = new ConfigItem<List<Int64>>(ConfigCode.ExpLvDef, "EXPLVの初期値", new List<long>(new Int64[] { 0, 1, 4, 20, 50, 200 }));
  141. replaceArray[i++] = new ConfigItem<List<Int64>>(ConfigCode.PalamLvDef, "PALAMLVの初期値", new List<long>(new Int64[] { 0, 100, 500, 3000, 10000, 30000, 60000, 100000, 150000, 250000 }));
  142. replaceArray[i++] = new ConfigItem<Int64>(ConfigCode.pbandDef, "PBANDの初期値", 4);
  143. replaceArray[i++] = new ConfigItem<Int64>(ConfigCode.RelationDef, "RELATIONの初期値", 0);
  144. }
  145. public ConfigData Copy()
  146. {
  147. ConfigData config = new ConfigData();
  148. for (int i = 0; i < configArray.Length; i++)
  149. if ((configArray[i] != null) && (config.configArray[i] != null))
  150. configArray[i].CopyTo(config.configArray[i]);
  151. for (int i = 0; i < configArray.Length; i++)
  152. if ((configArray[i] != null) && (config.configArray[i] != null))
  153. configArray[i].CopyTo(config.configArray[i]);
  154. for (int i = 0; i < replaceArray.Length; i++)
  155. if ((replaceArray[i] != null) && (config.replaceArray[i] != null))
  156. replaceArray[i].CopyTo(config.replaceArray[i]);
  157. return config;
  158. }
  159. public Dictionary<ConfigCode,string> GetConfigNameDic()
  160. {
  161. Dictionary<ConfigCode, string> ret = new Dictionary<ConfigCode, string>();
  162. foreach (AConfigItem item in configArray)
  163. {
  164. if (item != null)
  165. ret.Add(item.Code, item.Text);
  166. }
  167. return ret;
  168. }
  169. public T GetConfigValue<T>(ConfigCode code)
  170. {
  171. AConfigItem item = GetItem(code);
  172. //if ((item != null) && (item is ConfigItem<T>))
  173. return ((ConfigItem<T>)item).Value;
  174. //throw new ExeEE("GetConfigValueのCodeまたは型が不適切");
  175. }
  176. #region getitem
  177. public AConfigItem GetItem(ConfigCode code)
  178. {
  179. AConfigItem item = GetConfigItem(code);
  180. if (item == null)
  181. {
  182. item = GetReplaceItem(code);
  183. if (item == null)
  184. {
  185. item = GetDebugItem(code);
  186. }
  187. }
  188. return item;
  189. }
  190. public AConfigItem GetItem(string key)
  191. {
  192. AConfigItem item = GetConfigItem(key);
  193. if (item == null)
  194. {
  195. item = GetReplaceItem(key);
  196. if (item == null)
  197. {
  198. item = GetDebugItem(key);
  199. }
  200. }
  201. return item;
  202. }
  203. public AConfigItem GetConfigItem(ConfigCode code)
  204. {
  205. foreach (AConfigItem item in configArray)
  206. {
  207. if (item == null)
  208. continue;
  209. if (item.Code == code)
  210. return item;
  211. }
  212. return null;
  213. }
  214. public AConfigItem GetConfigItem(string key)
  215. {
  216. foreach (AConfigItem item in configArray)
  217. {
  218. if (item == null)
  219. continue;
  220. if (item.Name == key)
  221. return item;
  222. if (item.Text == key)
  223. return item;
  224. }
  225. return null;
  226. }
  227. public AConfigItem GetReplaceItem(ConfigCode code)
  228. {
  229. foreach (AConfigItem item in replaceArray)
  230. {
  231. if (item == null)
  232. continue;
  233. if (item.Code == code)
  234. return item;
  235. }
  236. return null;
  237. }
  238. public AConfigItem GetReplaceItem(string key)
  239. {
  240. foreach (AConfigItem item in replaceArray)
  241. {
  242. if (item == null)
  243. continue;
  244. if (item.Name == key)
  245. return item;
  246. if (item.Text == key)
  247. return item;
  248. }
  249. return null;
  250. }
  251. public AConfigItem GetDebugItem(ConfigCode code)
  252. {
  253. foreach (AConfigItem item in debugArray)
  254. {
  255. if (item == null)
  256. continue;
  257. if (item.Code == code)
  258. return item;
  259. }
  260. return null;
  261. }
  262. public AConfigItem GetDebugItem(string key)
  263. {
  264. foreach (AConfigItem item in debugArray)
  265. {
  266. if (item == null)
  267. continue;
  268. if (item.Name == key)
  269. return item;
  270. if (item.Text == key)
  271. return item;
  272. }
  273. return null;
  274. }
  275. public SingleTerm GetConfigValueInERB(string text, ref string errMes)
  276. {
  277. AConfigItem item = Instance.GetItem(text);
  278. if(item == null)
  279. {
  280. errMes = "文字列\"" + text + "\"は適切なコンフィグ名ではありません";
  281. return null;
  282. }
  283. SingleTerm term;
  284. switch(item.Code)
  285. {
  286. //<bool>
  287. case ConfigCode.AutoSave://"オートセーブを行なう"
  288. case ConfigCode.MoneyFirst://"単位の位置"
  289. if(item.GetValue<bool>())
  290. term = new SingleTerm(1);
  291. else
  292. term = new SingleTerm(0);
  293. break;
  294. //<int>
  295. case ConfigCode.WindowX:// "ウィンドウ幅"
  296. case ConfigCode.PrintCPerLine:// "PRINTCを並べる数"
  297. case ConfigCode.PrintCLength:// "PRINTCの文字数"
  298. case ConfigCode.FontSize:// "フォントサイズ"
  299. case ConfigCode.LineHeight:// "一行の高さ"
  300. case ConfigCode.SaveDataNos:// "表示するセーブデータ数"
  301. case ConfigCode.MaxShopItem:// "販売アイテム数"
  302. case ConfigCode.ComAbleDefault:// "COM_ABLE初期値"
  303. term = new SingleTerm(item.GetValue<int>());
  304. break;
  305. //<Color>
  306. case ConfigCode.ForeColor://"文字色"
  307. case ConfigCode.BackColor://"背景色"
  308. case ConfigCode.FocusColor://"選択中文字色"
  309. case ConfigCode.LogColor://"履歴文字色"
  310. {
  311. Color color = item.GetValue<Color>();
  312. term = new SingleTerm( ((color.R * 256) + color.G) * 256 + color.B);
  313. }
  314. break;
  315. //<Int64>
  316. case ConfigCode.pbandDef:// "PBANDの初期値"
  317. case ConfigCode.RelationDef:// "RELATIONの初期値"
  318. term = new SingleTerm(item.GetValue<Int64>());
  319. break;
  320. //<string>
  321. case ConfigCode.FontName:// "フォント名"
  322. case ConfigCode.MoneyLabel:// "お金の単位"
  323. case ConfigCode.LoadLabel:// "起動時簡略表示"
  324. case ConfigCode.DrawLineString:// "DRAWLINE文字"
  325. case ConfigCode.TitleMenuString0:// "システムメニュー0"
  326. case ConfigCode.TitleMenuString1:// "システムメニュー1"
  327. case ConfigCode.TimeupLabel:// "時間切れ表示"
  328. term = new SingleTerm(item.GetValue<string>());
  329. break;
  330. //<char>
  331. case ConfigCode.BarChar1:// "BAR文字1"
  332. case ConfigCode.BarChar2:// "BAR文字2"
  333. term = new SingleTerm(item.GetValue<char>().ToString());
  334. break;
  335. //<TextDrawingMode>
  336. case ConfigCode.TextDrawingMode:// "描画インターフェース"
  337. term = new SingleTerm(item.GetValue<TextDrawingMode>().ToString());
  338. break;
  339. default:
  340. {
  341. errMes = "コンフィグ文字列\"" + text + "\"の値の取得は許可されていません";
  342. return null;
  343. }
  344. }
  345. return term;
  346. }
  347. #endregion
  348. public bool SaveConfig()
  349. {
  350. StreamWriter writer = null;
  351. try
  352. {
  353. writer = new StreamWriter(configPath, false, Config.Encode);
  354. for (int i = 0; i < configArray.Length; i++)
  355. {
  356. AConfigItem item = configArray[i];
  357. if (item == null)
  358. continue;
  359. //1806beta001 CompatiDRAWLINEの廃止、CompatiLinefeedAs1739へ移行
  360. if (item.Code == ConfigCode.CompatiDRAWLINE)
  361. continue;
  362. if ((item.Code == ConfigCode.ChangeMasterNameIfDebug) && (item.GetValue<bool>()))
  363. continue;
  364. if ((item.Code == ConfigCode.LastKey) && (item.GetValue<long>() == 0))
  365. continue;
  366. //if (item.Code == ConfigCode.IgnoreWarningFiles)
  367. //{
  368. // List<string> files = item.GetValue<List<string>>();
  369. // foreach (string filename in files)
  370. // writer.WriteLine(item.Text + ":" + filename.ToString());
  371. // continue;
  372. //}
  373. writer.WriteLine(item.ToString());
  374. }
  375. }
  376. catch (Exception)
  377. {
  378. return false;
  379. }
  380. finally
  381. {
  382. if (writer != null)
  383. writer.Close();
  384. }
  385. return true;
  386. }
  387. public bool ReLoadConfig()
  388. {
  389. //_fixed.configの中身が変わった場合、非固定になったものが保持されてしまうので、ここで一旦すべて解除
  390. foreach (AConfigItem item in configArray)
  391. {
  392. if (item == null)
  393. continue;
  394. if (item.Fixed)
  395. item.Fixed = false;
  396. }
  397. LoadConfig();
  398. return true;
  399. }
  400. public bool LoadConfig()
  401. {
  402. Config.ClearFont();
  403. string defaultConfigPath = Program.CsvDir + "_default.config";
  404. string fixedConfigPath = Program.CsvDir + "_fixed.config";
  405. if(!File.Exists(defaultConfigPath))
  406. defaultConfigPath = Program.CsvDir + "default.config";
  407. if (!File.Exists(fixedConfigPath))
  408. fixedConfigPath = Program.CsvDir + "fixed.config";
  409. loadConfig(defaultConfigPath, false);
  410. loadConfig(configPath, false);
  411. loadConfig(fixedConfigPath, true);
  412. Config.SetConfig(this);
  413. bool needSave = false;
  414. if (!File.Exists(configPath))
  415. needSave = true;
  416. if (Config.CheckUpdate())
  417. {
  418. GetItem(ConfigCode.LastKey).SetValue(Config.LastKey);
  419. needSave = true;
  420. }
  421. if (needSave)
  422. SaveConfig();
  423. return true;
  424. }
  425. private bool loadConfig(string confPath, bool fix)
  426. {
  427. if (!File.Exists(confPath))
  428. return false;
  429. EraStreamReader eReader = new EraStreamReader(false);
  430. if (!eReader.Open(confPath))
  431. return false;
  432. ScriptPosition pos = null;
  433. try
  434. {
  435. string line = null;
  436. //bool defineIgnoreWarningFiles = false;
  437. while ((line = eReader.ReadLine()) != null)
  438. {
  439. if ((line.Length == 0) || (line[0] == ';'))
  440. continue;
  441. pos = new ScriptPosition(eReader.Filename, eReader.LineNo, line);
  442. string[] tokens = line.Split(':');
  443. if (tokens.Length < 2)
  444. continue;
  445. AConfigItem item = GetConfigItem(tokens[0].Trim());
  446. if (item != null)
  447. {
  448. //1806beta001 CompatiDRAWLINEの廃止、CompatiLinefeedAs1739へ移行
  449. if(item.Code == ConfigCode.CompatiDRAWLINE)
  450. {
  451. item = GetConfigItem(ConfigCode.CompatiLinefeedAs1739);
  452. }
  453. //if ((item.Code == ConfigCode.IgnoreWarningFiles))
  454. //{
  455. // if (!defineIgnoreWarningFiles)
  456. // (item.GetValue<List<string>>()).Clear();
  457. // defineIgnoreWarningFiles = true;
  458. // if ((item.Fixed) && (fix))
  459. // item.Fixed = false;
  460. //}
  461. if (item.Code == ConfigCode.TextEditor)
  462. {
  463. //パスの関係上tokens[2]は使わないといけない
  464. if (tokens.Length > 2)
  465. {
  466. if (tokens[2].StartsWith("\\"))
  467. tokens[1] += ":" + tokens[2];
  468. if (tokens.Length > 3)
  469. {
  470. for (int i = 3; i < tokens.Length; i++)
  471. {
  472. tokens[1] += ":" + tokens[i];
  473. }
  474. }
  475. }
  476. }
  477. if (item.Code == ConfigCode.EditorArgument)
  478. {
  479. //半角スペースを要求する引数が必要なエディタがあるので別処理で
  480. ((ConfigItem<string>)item).Value = tokens[1];
  481. continue;
  482. }
  483. if (item.Code == ConfigCode.MaxLog)
  484. {
  485. //解析モード時はここを上書きして十分な長さを確保する
  486. tokens[1] = "10000";
  487. }
  488. if ((item.TryParse(tokens[1])) && (fix))
  489. item.Fixed = true;
  490. }
  491. #if DEBUG
  492. //else
  493. // throw new Exception("コンフィグファイルが変");
  494. #endif
  495. }
  496. }
  497. catch (EmueraException ee)
  498. {
  499. ParserMediator.ConfigWarn(ee.Message, pos, 1, null);
  500. }
  501. catch (Exception exc)
  502. {
  503. ParserMediator.ConfigWarn(exc.GetType() + ":" + exc.Message, pos, 1, exc.StackTrace);
  504. }
  505. finally { eReader.Dispose(); }
  506. return true;
  507. }
  508. #region replace
  509. // 1.52a改変部分 (単位の差し替えおよび前置、後置のためのコンフィグ処理)
  510. public void LoadReplaceFile(string filename)
  511. {
  512. EraStreamReader eReader = new EraStreamReader(false);
  513. if (!eReader.Open(filename))
  514. return;
  515. ScriptPosition pos = null;
  516. try
  517. {
  518. string line = null;
  519. while ((line = eReader.ReadLine()) != null)
  520. {
  521. if ((line.Length == 0) || (line[0] == ';'))
  522. continue;
  523. pos = new ScriptPosition(eReader.Filename, eReader.LineNo, line);
  524. string[] tokens = line.Split(',', ':');
  525. if (tokens.Length < 2)
  526. continue;
  527. string itemName = tokens[0].Trim();
  528. tokens[1] = line.Substring(tokens[0].Length + 1);
  529. if (string.IsNullOrEmpty(tokens[1].Trim()))
  530. continue;
  531. AConfigItem item = GetReplaceItem(itemName);
  532. if (item != null)
  533. item.TryParse(tokens[1]);
  534. }
  535. }
  536. catch (EmueraException ee)
  537. {
  538. ParserMediator.Warn(ee.Message, pos, 1);
  539. }
  540. catch (Exception exc)
  541. {
  542. ParserMediator.Warn(exc.GetType() + ":" + exc.Message, pos, 1, exc.StackTrace);
  543. }
  544. finally { eReader.Dispose(); }
  545. }
  546. #endregion
  547. #region debug
  548. public bool SaveDebugConfig()
  549. {
  550. StreamWriter writer = null;
  551. try
  552. {
  553. writer = new StreamWriter(configdebugPath, false, Config.Encode);
  554. for (int i = 0; i < debugArray.Length; i++)
  555. {
  556. AConfigItem item = debugArray[i];
  557. if (item == null)
  558. continue;
  559. writer.WriteLine(item.ToString());
  560. }
  561. }
  562. catch (Exception)
  563. {
  564. return false;
  565. }
  566. finally
  567. {
  568. if (writer != null)
  569. writer.Close();
  570. }
  571. return true;
  572. }
  573. public bool LoadDebugConfig()
  574. {
  575. if (!File.Exists(configdebugPath))
  576. goto err;
  577. EraStreamReader eReader = new EraStreamReader(false);
  578. if (!eReader.Open(configdebugPath))
  579. goto err;
  580. ScriptPosition pos = null;
  581. try
  582. {
  583. string line = null;
  584. while ((line = eReader.ReadLine()) != null)
  585. {
  586. if ((line.Length == 0) || (line[0] == ';'))
  587. continue;
  588. pos = new ScriptPosition(eReader.Filename, eReader.LineNo, line);
  589. string[] tokens = line.Split(':');
  590. if (tokens.Length < 2)
  591. continue;
  592. AConfigItem item = GetDebugItem(tokens[0].Trim());
  593. if (item != null)
  594. {
  595. item.TryParse(tokens[1]);
  596. }
  597. #if DEBUG
  598. //else
  599. // throw new Exception("コンフィグファイルが変");
  600. #endif
  601. }
  602. }
  603. catch (EmueraException ee)
  604. {
  605. ParserMediator.ConfigWarn(ee.Message, pos, 1, null);
  606. goto err;
  607. }
  608. catch (Exception exc)
  609. {
  610. ParserMediator.ConfigWarn(exc.GetType() + ":" + exc.Message, pos, 1, exc.StackTrace);
  611. goto err;
  612. }
  613. finally { eReader.Dispose(); }
  614. Config.SetDebugConfig(this);
  615. return true;
  616. err:
  617. Config.SetDebugConfig(this);
  618. return false;
  619. }
  620. #endregion
  621. }
  622. }