/// <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();
 }
Example #3
0
        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;
 }