/// <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 } } }