/// <summary> /// 註冊詩人、信使與文件管理員 /// </summary> /// <param name="bard">新詩人</param> /// <param name="courier">新信使</param> /// <param name="archivist">新文件管理員</param> public static void RegisterMembers(Bard bard, Courier courier, Archivist archivist) { RegisterMember(bard); RegisterMember(courier); RegisterMember(archivist); UpdateRegisteredState(); }
/// <summary> /// 註冊文件管理員 /// </summary> /// <param name="newcomer">新文件管理員</param> public static void RegisterMember(Archivist newcomer) { if (newcomer != null) { Archivist = newcomer; } UpdateRegisteredState(); }
public Int32 ScriptMain([In] object[] ScriptParameters, [In] Int32 DefaultReturnCode) { int Value = (int)ScriptParameters[0]; // ScriptParameterTypes[0] is typeof(int) switch ((Commands)Value) { case Commands.INITIALIZE_ARCHIVES: Archivist worker = new Archivist(); if (ArchivesInstance != null) { break; } ArchivesInstance = new Archives(worker); ALFA.Shared.Modules.InfoStore = ArchivesInstance; worker.DoWork += worker.InitializeArchives; worker.RunWorkerAsync(); Monks.LoadAreas(this); ShowLoadingProgressDebugString(); break; case Commands.PRINT_DEBUG: SendMessageToAllDMs("Running ACR_Candlekeep"); SendMessageToAllDMs(Archivist.debug); break; case Commands.LIST_AREAS: foreach (ALFA.Shared.ActiveArea area in ALFA.Shared.Modules.InfoStore.ActiveAreas.Values) { SendMessageToAllDMs(area.Name); foreach (ALFA.Shared.ActiveArea areaTarget in area.ExitTransitions.Values) { SendMessageToAllDMs(String.Format(" - {0}", areaTarget.Name)); } } break; case Commands.LIST_SPELLS: foreach (ALFA.Shared.SpellCastItemProperties ip in ALFA.Shared.Modules.InfoStore.IPCastSpells) { SendMessageToAllDMs(ip.ToString()); } break; case Commands.LIST_BASE_ITEMS: foreach (ALFA.Shared.BaseItem item in ALFA.Shared.Modules.InfoStore.BaseItems) { SendMessageToAllDMs(item.ToString()); } break; } return(0); }
/// <summary> /// 從文件管理員上傾倒逐行訊息(全部流程) /// </summary> /// <param name="writeLineObject">可以WriteLine的任意Object</param> public static void PrintMessageFromArchivist(object writeLineObject) { foreach (string record in Archivist.Records) { writeLineObject.GetType().InvokeMember("WriteLine", BindingFlags.InvokeMethod, null, writeLineObject, new object[] { record }); } Archivist.ClearRecords(); }
/// <summary> /// 顯示訊息視窗或設置結果(測試時),從信使身上讀取輸入資料 /// </summary> /// <param name="message">訊息</param> /// <param name="owner">父表單</param> /// <returns>結果</returns> public static DialogResult ShowNewMessageOrSetResult(ArMessage message, IWin32Window owner) { if (!Registered) { if (owner == null) { return(MessageBox.Show(message.Content, message.Title, (MessageBoxButtons)(byte)message.ChoiceOption, (MessageBoxIcon)(byte)message.LevelOfEergency, (MessageBoxDefaultButton)((message.DefaultResponse - 1) * 256))); } else { return(MessageBox.Show(owner, message.Content, message.Title, (MessageBoxButtons)(byte)message.ChoiceOption, (MessageBoxIcon)(byte)message.LevelOfEergency, (MessageBoxDefaultButton)((message.DefaultResponse - 1) * 256))); } } DialogResult dr = (DialogResult)Enum.Parse(typeof(DialogResult), message.GetDefaultResponse()); string record; Courier.Package = message; record = message.ToString(); Courier.MessageReceived.Add(record); Archivist.WriteRecord(record); string response = Courier.GetResponse(message.ID); if (!string.IsNullOrEmpty(response)) { dr = (DialogResult)Enum.Parse(typeof(DialogResult), response); } if (!message.ChoiceOption.ToString().Contains(dr.ToString())) { throw new InvalidCastException("DialogResult"); } record = $"DialogResult = [{dr}]"; Courier.MessageReceived.Add(record); Archivist.WriteRecord(record); return(dr); }
//Implement private static DialogResult ShowOrCallEvent(Form form, IWin32Window owner, bool asDialog) { if (!Registered) { if (asDialog) { if (owner == null) { return(form.ShowDialog()); } else { return(form.ShowDialog(owner)); } } else { if (owner == null) { form.Show(); } else { form.Show(owner); } return(DialogResult.None); } } DialogResult dr = form.DialogResult; PropertyInfo[] formProps = form.GetType().GetProperties(); string record; record = $"Show Form: \"{form.Name}\""; Bard.MessageReceived.Add(record); Archivist.WriteRecord(record); foreach (PropertyInfo pi in formProps) { object value = Bard.InputInformation[$"{form.Name}.{pi.Name}"] ?? Bard.InputInformation[pi.Name]; if (value != null) { pi.SetValue(form, value); record = $"{form.Name}.{pi.Name} = {value}"; Bard.MessageReceived.Add(record); Archivist.WriteRecord(record); } } if (Bard.InputInformation["DialogResult"] != null) { dr = (DialogResult)Bard.InputInformation["DialogResult"]; } else if (Bard.InputInformation[$"{form.Name}.DialogResult"] != null) { dr = (DialogResult)Bard.InputInformation[$"{form.Name}.DialogResult"]; } if (Form_Start != null) { dr = Form_Start(form); } record = $"DialogResult = [{dr}]"; Bard.MessageReceived.Add(record); Archivist.WriteRecord(record); return(dr); }
/// <summary> /// 顯示一般對話視窗或是設置結果(測試時),從詩人身上讀取輸入資料 /// </summary> /// <param name="cd">對話視窗實體</param> /// <param name="owner">父表單</param> /// <returns>結果</returns> public static DialogResult ShowDialogOrSetResult(this CommonDialog cd, IWin32Window owner) { if (!Registered) { if (owner == null) { return(cd.ShowDialog()); } else { return(cd.ShowDialog(owner)); } } if (Bard.InputInformation == null) { throw new ArgumentNullException("Text Context Connected Failed"); } string dialogTypeName = cd.GetType().Name; string record; DialogResult dr = DialogResult.OK; PropertyInfo[] cdProps = cd.GetType().GetProperties(); record = $"Open Dialog: \"{cd.GetType().Name}\""; Bard.MessageReceived.Add(record); Archivist.WriteRecord(record); foreach (PropertyInfo pi in cdProps) { object value = Bard.InputInformation[$"{cd.GetType().Name}.{pi.Name}"] ?? Bard.InputInformation[pi.Name]; if (value != null) { pi.SetValue(cd, value); record = $"{dialogTypeName}.{pi.Name} = {value}"; Bard.MessageReceived.Add(record); Archivist.WriteRecord(record); } } if (Bard.InputInformation["DialogResult"] != null) { dr = (DialogResult)Bard.InputInformation["DialogResult"]; } else if (Bard.InputInformation[$"{dialogTypeName}.DialogResult"] != null) { dr = (DialogResult)Bard.InputInformation[$"{dialogTypeName}.DialogResult"]; } if (dr != DialogResult.OK && dr != DialogResult.Cancel) { throw new InvalidCastException("DialogResult"); } record = $"DialogResult = [{dr}]"; Bard.MessageReceived.Add(record); Archivist.WriteRecord(record); return(dr); }
public string GetTalkString(uint Index) { return(Archivist.GetTlkEntry(Index)); }
/// <summary> /// Instantiate a new Archives object. /// </summary> /// <param name="ArchiveWorker">Supplies the Archivist worker instance /// that is used to satisfy resource requests.</param> public Archives(Archivist ArchiveWorker) { this.ArchiveWorker = ArchiveWorker; }