public void RegisterQuest(CustomQuest quest) { if (!this.allowedChars.IsMatch(quest.Name)) { throw new InvalidQuestException("Quest name contains unallowed characters."); } quest.OwnedByModUid = this.ModUid; this.QuestManager.RegisterQuest(quest); }
/// <summary> /// Get connected vanilla quest with this managed quest in quest log /// </summary> /// <param name="customQuest"></param> /// <returns>null if this quest is not in quest log, otherwise the connected vanilla quest</returns> public static Quest GetInQuestLog(this CustomQuest customQuest) { if (!Context.IsWorldReady) { return(null); } return(Game1.player.questLog .Where(q => q.id.Value == customQuest.id) .FirstOrDefault()); }
public static bool IsNeverCompleted(this CustomQuest customQuest) { if (!Context.IsWorldReady) { return(false); } var stats = QuestFrameworkMod.Instance. StatsManager .GetStats(Game1.player.UniqueMultiplayerID); return(stats.GetQuestStatSummary(customQuest.GetFullName()).LastCompleted == null); }
internal CustomQuest CreateQuestOfType(string type) { if (!this.Factories.ContainsKey(type)) { throw new InvalidQuestException($"Quest type factory {type} doesn't exist!"); } CustomQuest quest = this.Factories[type](); if (quest.Name != null) { throw new InvalidQuestException("Quest name is unexpectedly assigned by factory!"); } return(quest); }
private void OnQuestAccepted(object sender, QuestEventArgs e) { if (!e.IsManaged || this._npcQuestOffers.Value.Count == 0) { return; } CustomQuest quest = e.GetManagedQuest(); QuestOffer <NpcOfferAttributes> offer = this.QuestOffers.FirstOrDefault(o => o.QuestName == quest.GetFullName()); if (offer != null) { this.QuestOffers.Remove(offer); this.RefreshActiveIndicators(); } }
private void SetQuestDetails(CustomQuest quest, string[] definition) { quest.BaseType = definition[0] == "Location" ? QuestType.Location : QuestType.Custom; quest.Title = definition[1]; quest.Description = definition[2]; quest.Objective = definition[3]; quest.Trigger = definition[4]; quest.Reward = int.Parse(definition[5]); quest.Cancelable = definition[6].Equals("true"); if (definition.Length > 7) { quest.NextQuests.AddRange( definition[7].Split(' ').Select(n => "adventure" + n)); } }
public bool CheckConditions(Dictionary<string, string> conditions, CustomQuest context, IEnumerable<string> ignore = null, bool ignoreUnknown = false) { bool flag = true; if (conditions == null) return true; foreach (var cond in conditions) { if (ignore != null && ignore.Any(ig => ig == cond.Key)) continue; flag &= this.CheckCondition(cond.Key, cond.Value, context, ignoreUnknown); } this.monitor.VerboseLog($"All checked conditions result is {flag}"); return flag; }
public bool CheckCondition(string condition, string value, CustomQuest context) { bool isNot = false; string realConditionName = condition; if (condition == null || value == null) { return(true); } if (condition.StartsWith("not:")) { condition = condition.Substring(4); isNot = true; } if (this.Conditions.TryGetValue(condition, out var conditionFunc)) { bool result = false; foreach (string valuePart in value.Split('|')) { result |= conditionFunc(valuePart.Trim(), context); } if (this.monitor.IsVerbose) { this.monitor.Log( $"Checked condition `{realConditionName}` for `{value}` " + $"in quest context `{context.GetFullName()}` " + $"returns {(isNot ? !result : result)}"); } return(isNot ? !result : result); } this.monitor.Log( $"Checked unknown condition `{condition}` in quest context `{context.GetFullName()}`. Result for unknown conditions is always false.", LogLevel.Warn); return(false); }
private void Apply(Content content) { // Register quests foreach (var questData in content.Quests) { CustomQuest managedQuest = this.MapQuest(content, questData); if (questData.Hooks != null) { managedQuest.Hooks.AddRange(questData.Hooks); } this.ApplyHandlers(managedQuest, questData); this.Manager.RegisterQuest(managedQuest); } // Add quest schedules foreach (var offer in content.Offers) { this.ScheduleManager.AddOffer(offer); } }
private void Apply(Content content) { // Register quests foreach (var questData in content.Quests) { try { CustomQuest managedQuest = this.MapQuest(content, questData); if (questData.Hooks != null) { managedQuest.Hooks.AddRange(questData.Hooks); } if (!this.allowedChars.IsMatch(managedQuest.Name)) { this.Monitor.Log($"Quest name `{managedQuest.Name}` contains unallowed characters in pack `{content.Owner.Manifest.UniqueID}`", LogLevel.Error); return; } this.ApplyHandlers(managedQuest, questData); this.Manager.RegisterQuest(managedQuest); } catch (InvalidQuestException ex) { this.Monitor.Log($"Error while creating quest `{questData.Name}` from pack `{content.Owner.Manifest.UniqueID}`: {ex.Message}", LogLevel.Error); } } this.RegisterBoards(content.Owner, content.CustomBoards); this.RegisterDropBoxes(content.Owner, content.CustomDropBoxes); // Add quest schedules foreach (var offer in content.Offers) { this.ScheduleManager.AddOffer(offer); } }
public void LoadQuests(IGameMaster master) { foreach (var questRaw in this.GetQuestsSource()) { var definition = questRaw.Value.Split('/'); CustomQuest quest; if (definition[0] == "Recruitment") { quest = new RecruitmentQuest(master, this.contentLoader) { CustomTypeId = RecruitmentQuest.TYPE_ID, }; } else { quest = new CustomQuest(); } quest.Name = $"adventure{questRaw.Key}"; this.SetQuestDetails(quest, definition); this.questApi.RegisterQuest(quest); } }
private string ToQuestString(CustomQuest quest) { var type = quest.BaseType == QuestType.Custom ? "Basic" : quest.BaseType.ToString(); return($"{type}/{quest.Title}/{quest.Description}/{quest.Objective}./{quest.Trigger}/-1/{quest.Reward}/-1/true/{quest.ReactionText}"); }
/// <summary> /// Check if this quest is included in player's quest log. /// </summary> /// <param name="customQuest"></param> /// <returns></returns> public static bool IsInQuestLog(this CustomQuest customQuest) { return(Context.IsWorldReady && Game1.player.hasQuest(customQuest.id)); }
public void RegisterQuest(CustomQuest quest) { quest.OwnedByModUid = this.ModUid; this.QuestManager.RegisterQuest(quest); }
public void Initialize(CustomQuest customQuest) { this.WatchFields(ActiveStateHelper.GatherActiveStateProperties(customQuest).ToArray()); this.WatchFields(ActiveStateHelper.GatherActiveStateFields(customQuest).ToArray()); }
private void ApplyHandlers(CustomQuest managedQuest, QuestData questData) { managedQuest.Accepted += (_sender, _info) => { if (_info.VanillaQuest.completed.Value) { return; } // Add/Remove conversation topic(s) when quest was ACCEPTED if (!string.IsNullOrEmpty(questData.ConversationTopic?.AddWhenQuestAccepted)) { ConversationTopicHelper.AddConversationTopic(questData.ConversationTopic.AddWhenQuestAccepted); } if (!string.IsNullOrEmpty(questData.ConversationTopic?.RemoveWhenQuestAccepted)) { ConversationTopicHelper.RemoveConversationTopic(questData.ConversationTopic.RemoveWhenQuestAccepted); } }; managedQuest.Completed += (_sender, _info) => { if (!_info.VanillaQuest.completed.Value) { return; } // Add/Remove conversation topic(s) when quest was COMPLETED if (!string.IsNullOrEmpty(questData.ConversationTopic?.AddWhenQuestCompleted)) { ConversationTopicHelper.AddConversationTopic(questData.ConversationTopic.AddWhenQuestCompleted); } if (!string.IsNullOrEmpty(questData.ConversationTopic?.RemoveWhenQuestCompleted)) { ConversationTopicHelper.RemoveConversationTopic(questData.ConversationTopic.RemoveWhenQuestCompleted); } if (!string.IsNullOrEmpty(questData.AddMailOnComplete)) { MailHelper.AddMail(questData.AddMailOnComplete); } if (!string.IsNullOrEmpty(questData.RemoveMailOnComplete)) { MailHelper.RemoveMail(questData.RemoveMailOnComplete); } }; managedQuest.Removed += (_sender, _info) => { if (_info.VanillaQuest.completed.Value) { return; } // Add/Remove conversation topic(s) when quest was REMOVED if (!string.IsNullOrEmpty(questData.ConversationTopic?.AddWhenQuestRemoved)) { ConversationTopicHelper.AddConversationTopic(questData.ConversationTopic.AddWhenQuestRemoved); } if (!string.IsNullOrEmpty(questData.ConversationTopic?.RemoveWhenQuestRemoved)) { ConversationTopicHelper.RemoveConversationTopic(questData.ConversationTopic.RemoveWhenQuestRemoved); } }; }
public static bool CheckGlobalConditions(this CustomQuest customQuest, Dictionary <string, string> conditions, IEnumerable <string> ignore = null, bool ignoreUnknown = false) { return(QuestFrameworkMod.Instance.ConditionManager.CheckConditions(conditions, customQuest, ignore, ignoreUnknown)); }
private static bool IsQuestCompletedDate(SDate dateToCheck, CustomQuest managedQuest) { return(GetQuestStats(managedQuest).LastCompleted == dateToCheck); }
private static bool IsQuestAcceptedInPeriod(string valueToCheck, CustomQuest managedQuest) { if (!Context.IsWorldReady) { return(false); } var parts = valueToCheck.Split(' '); var acceptDate = GetQuestStats(managedQuest).LastAccepted; SDate now = SDate.Now(); Monitor.VerboseLog( $"Checking quest accept date `{acceptDate}` matches current `{now}` by `{valueToCheck}`"); if (parts.Length < 1 || acceptDate == null || (parts.Contains("today") && acceptDate != now)) { return(false); } bool flag = true; foreach (string part in parts) { string[] period = part.Split('='); string type = period.ElementAtOrDefault(0); string value = period.ElementAtOrDefault(1); switch (type) { case "y": case "year": flag &= acceptDate.Year == ( int.TryParse(value, out var year) ? year : now.Year ); break; case "s": case "season": flag &= acceptDate.Season == (value ?? now.Season); break; case "wd": case "weekday": flag &= acceptDate.DayOfWeek == ( Enum.TryParse <DayOfWeek>(value, out var dayOfWeek) ? dayOfWeek : now.DayOfWeek ); break; case "d": case "day": flag &= acceptDate.Day == ( int.TryParse(value, out var day) ? day : now.Day ); break; default: flag &= false; break; } } return(flag); }
public static bool CheckGlobalCondition(this CustomQuest customQuest, string condition, string value, bool ignoreUnknown = false) { return(QuestFrameworkMod.Instance.ConditionManager.CheckCondition(condition, value, customQuest, ignoreUnknown)); }