/// <summary>
        /// Get a random quest for a guild from appropriate subset.
        /// </summary>
        public Quest GetGuildQuest(FactionFile.GuildGroups guildGroup, MembershipStatus status, int factionId, int rep)
        {
#if UNITY_EDITOR    // Reload every time when in editor
            LoadQuestLists();
#endif
            List <QuestData> guildQuests;
            if (guilds.TryGetValue(guildGroup, out guildQuests))
            {
                MembershipStatus tplMemb = (guildGroup == FactionFile.GuildGroups.HolyOrder && status != MembershipStatus.Nonmember) ? MembershipStatus.Member : status;
                List <QuestData> pool    = new List <QuestData>();
                foreach (QuestData quest in guildQuests)
                {
                    if ((status == (MembershipStatus)quest.membership || tplMemb == (MembershipStatus)quest.membership) &&
                        (rep >= quest.minRep || status == MembershipStatus.Nonmember) &&
                        (!quest.unitWildC || rep < quest.minRep + 10))
                    {
                        pool.Add(quest);
                    }
                }
                Debug.Log("Quest pool has " + pool.Count);
                // Choose random quest from pool and try to parse it
                if (pool.Count > 0)
                {
                    QuestData questData = pool[UnityEngine.Random.Range(0, pool.Count)];
                    try
                    {
                        return(LoadQuest(questData, factionId));
                    }
                    catch (Exception ex)
                    {   // Log exception
                        DaggerfallUnity.LogMessage("Exception during quest compile: " + ex.Message, true);
                    }
                }
            }
            return(null);
        }
        private void ParseQuestList(Table questsTable, string questsPath = "")
        {
            for (int i = 0; i < questsTable.RowCount; i++)
            {
                QuestData questData = new QuestData();
                questData.path = questsPath;
                string minRep = questsTable.GetValue("minRep", i);
                if (minRep.EndsWith("X"))
                {
                    questData.unitWildC = true;
                    minRep = minRep.Replace("X", "0");
                }
                int d = 0;
                if (int.TryParse(minRep, out d))
                {
                    questData.name       = questsTable.GetValue("name", i);
                    questData.group      = questsTable.GetValue("group", i);
                    questData.membership = questsTable.GetValue("membership", i)[0];
                    questData.minRep     = d;

                    // Is the group a guild group?
                    if (Enum.IsDefined(typeof(FactionFile.GuildGroups), questData.group))
                    {
                        FactionFile.GuildGroups guildGroup = (FactionFile.GuildGroups)Enum.Parse(typeof(FactionFile.GuildGroups), questData.group);
                        List <QuestData>        guildQuests;
                        if (!guilds.TryGetValue(guildGroup, out guildQuests))
                        {
                            guildQuests = new List <QuestData>();
                            guilds.Add(guildGroup, guildQuests);
                        }
                        guildQuests.Add(questData);
                    }
                    // else TODO other groups
                }
            }
        }