using Core.Models.Eft.Common; using Core.Models.Eft.Common.Tables; using Core.Models.Spt.Config; using Core.Models.Spt.Repeatable; namespace Core.Generators; public class RepeatableQuestGenerator { public RepeatableQuestGenerator() { } /// /// This method is called by /GetClientRepeatableQuests/ and creates one element of quest type format (see assets/database/templates/repeatableQuests.json). /// It randomly draws a quest type (currently Elimination, Completion or Exploration) as well as a trader who is providing the quest /// /// Session id /// Player's level for requested items and reward generation /// Players traper standing/rep levels /// Possible quest types pool /// Repeatable quest config /// RepeatableQuest public RepeatableQuest GenerateRepeatableQuest( string sessionId, int pmcLevel, Dictionary pmcTraderInfo, QuestTypePool questTypePool, RepeatableQuestConfig repeatableConfig ) { throw new NotImplementedException(); } /// /// Generate a randomised Elimination quest /// /// Player's level for requested items and reward generation /// Trader from which the quest will be provided /// Pools for quests (used to avoid redundant quests) /// The configuration for the repeatably kind (daily, weekly) as configured in QuestConfig for the requestd quest /// Object of quest type format for "Elimination" (see assets/database/templates/repeatableQuests.json) protected RepeatableQuest GenerateEliminationQuest( string sessionid, int pmcLevel, string traderId, QuestTypePool questTypePool, RepeatableQuestConfig repeatableConfig ) { throw new NotImplementedException(); } /// /// Get a number of kills neded to complete elimination quest /// /// Target type desired e.g. anyPmc/bossBully/Savage /// Config /// Config /// Number of AI to kill protected int GetEliminationKillCount( string targetKey, object targetsConfig, // TODO: typing was ProbabilityObjectArray EliminationConfig eliminationConfig ) { throw new NotImplementedException(); } /// /// A repeatable quest, besides some more or less static components, exists of reward and condition (see assets/database/templates/repeatableQuests.json) /// This is a helper method for GenerateEliminationQuest to create a location condition. /// /// the location on which to fulfill the elimination quest /// Elimination-location-subcondition object protected QuestConditionCounterCondition GenerateEliminationLocation(List location) { throw new NotImplementedException(); } /// /// Create kill condition for an elimination quest /// /// Bot type target of elimination quest e.g. "AnyPmc", "Savage" /// Body parts player must hit /// Distance from which to kill (currently only >= supported) /// What weapon must be used - undefined = any /// What category of weapon must be used - undefined = any /// EliminationCondition object protected QuestConditionCounterCondition GenerateEliminationCondition( string target, List targetedBodyParts, double distance, string allowedWeapon, string allowedWeaponCategory ) { throw new NotImplementedException(); } /// /// Generates a valid Completion quest /// /// player's level for requested items and reward generation /// trader from which the quest will be provided /// The configuration for the repeatably kind (daily, weekly) as configured in QuestConfig for the requested quest /// quest type format for "Completion" (see assets/database/templates/repeatableQuests.json) protected RepeatableQuest GenerateCompletionQuest( string sessionId, int pmcLevel, string traderId, RepeatableQuestConfig repeatableConfig ) { throw new NotImplementedException(); } /// /// A repeatable quest, besides some more or less static components, exists of reward and condition (see assets/database/templates/repeatableQuests.json) /// This is a helper method for GenerateCompletionQuest to create a completion condition (of which a completion quest theoretically can have many) /// /// id of the item to request /// amount of items of this specific type to request /// object of "Completion"-condition protected RepeatableQuest GenerateCompletionAvailableForFinish(string itemTpl, int value) { throw new NotImplementedException(); } /// /// Generates a valid Exploration quest /// /// session id for the quest /// player's level for reward generation /// trader from which the quest will be provided /// Pools for quests (used to avoid redundant quests) /// The configuration for the repeatably kind (daily, weekly) as configured in QuestConfig for the requested quest /// object of quest type format for "Exploration" (see assets/database/templates/repeatableQuests.json) protected RepeatableQuest GenerateExplorationQuest( string sessionId, int pmcLevel, string traderId, QuestTypePool questTypePool, RepeatableQuestConfig repeatableConfig) { throw new NotImplementedException(); } /// /// Filter a maps exits to just those for the desired side /// /// Map id (e.g. factory4_day) /// Scav/Pmc /// List of Exit objects protected List GetLocationExitsForSide(string locationKey, string playerSide) { throw new NotImplementedException(); } protected object GeneratePickupQuest( string sessionId, int pmcLevel, string traderId, QuestTypePool questTypePool, RepeatableQuestConfig repeatableConfig) { throw new NotImplementedException(); } /// /// Convert a location into an quest code can read (e.g. factory4_day into 55f2d3fd4bdc2d5f408b4567) /// /// e.g factory4_day /// guid protected string GetQuestLocationByMapId(string locationKey) { throw new NotImplementedException(); } /// /// Exploration repeatable quests can specify a required extraction point. /// This method creates the according object which will be appended to the conditions list /// /// The exit name to generate the condition for /// Exit condition protected QuestConditionCounterCondition GenerateExplorationExitCondition(Exit exit) { throw new NotImplementedException(); } /// /// Generates the base object of quest type format given as templates in assets/database/templates/repeatableQuests.json /// The templates include Elimination, Completion and Extraction quest types /// /// Quest type: "Elimination", "Completion" or "Extraction" /// Trader from which the quest will be provided /// Scav daily or pmc daily/weekly quest /// Object which contains the base elements for repeatable quests of the requests type /// (needs to be filled with reward and conditions by called to make a valid quest) protected RepeatableQuest GenerateRepeatableTemplate( string type, string traderId, string side, string sessionId) { throw new NotImplementedException(); } }