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();
}
}