using SptCommon.Annotations; using Core.Models.Eft.Common; using Core.Models.Eft.Common.Tables; using Core.Models.Eft.Hideout; using Core.Models.Eft.ItemEvent; using Core.Models.Spt.Config; using Core.Models.Spt.Hideout; using Hideout = Core.Models.Eft.Common.Tables.Hideout; namespace Core.Services; [Injectable(InjectionType.Singleton)] public class CircleOfCultistService { /// /// Start a sacrifice event /// Generate rewards /// Delete sacrificed items /// /// Session id /// Player profile doing sacrifice /// Client request /// ItemEventRouterResponse public ItemEventRouterResponse StartSacrifice( string sessionId, PmcData pmcData, HideoutCircleOfCultistProductionStartRequestData request ) { throw new NotImplementedException(); } /// /// Attempt to add all rewards to cultist circle, if they don't fit remove one and try again until they fit /// /// Session id /// Player profile /// Rewards to send to player /// Cultist grid to add rewards to /// Stash id /// Client output protected void AddRewardsToCircleContainer( string sessionId, PmcData pmcData, List> rewards, List> containerGrid, string cultistCircleStashId, ItemEventRouterResponse output ) { throw new NotImplementedException(); } /// /// Create a map of the possible direct rewards, keyed by the items needed to be sacrificed /// /// Direct rewards array from hideout config /// Dictionary protected Dictionary GenerateSacrificedItemsCache(List directRewards) { throw new NotImplementedException(); } /// /// Get the reward amount multiple value based on players hideout management skill + configs rewardPriceMultiplerMinMax values /// /// Player profile /// Circle config settings /// Reward Amount Multiplier protected double GetRewardAmountMultiplier(PmcData pmcData, CultistCircleSettings cultistCircleSettings) { throw new NotImplementedException(); } /// /// Register production inside player profile /// /// Session id /// Player profile /// Recipe id /// Items player sacrificed /// How long the ritual should take protected void RegisterCircleOfCultistProduction( string sessionId, PmcData pmcData, string recipeId, List sacrificedItems, double craftingTime ) { throw new NotImplementedException(); } /// /// Get the circle craft time as seconds, value is based on reward item value /// And get the bonus status to determine what tier of reward is given /// /// Value of rewards in roubles /// Circle config values /// OPTIONAL - Values related to direct reward being given /// craft time + type of reward + reward details protected CircleCraftDetails GetCircleCraftingInfo( double rewardAmountRoubles, CultistCircleSettings circleConfig, DirectRewardSettings directRewardSettings = null ) { throw new NotImplementedException(); } protected CraftTimeThreshold GetMatchingThreshold( List thresholds, double rewardAmountRoubles ) { throw new NotImplementedException(); } /// /// Get the items player sacrificed in circle /// /// Player profile /// Array of items from player inventory protected List GetSacrificedItems(PmcData pmcData) { throw new NotImplementedException(); } /// /// Given a pool of items + rouble budget, pick items until the budget is reached /// /// Items that can be picked /// Rouble budget to reach /// Id of stash item /// Array of item arrays protected List> GetRewardsWithinBudget( List rewardItemTplPool, double rewardBudget, string cultistCircleStashId, CultistCircleSettings circleConfig ) { throw new NotImplementedException(); } /// /// Get direct rewards /// /// sessionId /// Items sacrificed /// Id of stash item /// The reward object protected List> GetDirectRewards( string sessionId, DirectRewardSettings directReward, string cultistCircleStashId ) { throw new NotImplementedException(); } /// /// Check for direct rewards from what player sacrificed /// /// sessionId /// Items sacrificed /// Direct reward items to send to player protected DirectRewardSettings CheckForDirectReward( string sessionId, List sacrificedItems, Dictionary directRewardsCache ) { throw new NotImplementedException(); } /// /// Create an md5 key of the sacrificed + reward items /// /// Direct reward to create key for /// Key protected string GetDirectRewardHashKey(DirectRewardSettings directReward) { throw new NotImplementedException(); } /// /// Explicit rewards have their own stack sizes as they don't use a reward rouble pool /// /// Item being rewarded to get stack size of /// stack size of item protected int GetDirectRewardBaseTypeStackSize(string rewardTpl) { throw new NotImplementedException(); } /// /// Add a record to the player's profile to signal they have accepted a non-repeatable direct reward /// /// Session id /// Reward sent to player protected void FlagDirectRewardAsAcceptedInProfile(string sessionId, DirectRewardSettings directReward) { throw new NotImplementedException(); } /// /// Get the size of a reward item's stack /// 1 for everything except ammo, ammo can be between min stack and max stack /// /// Item chosen /// Rouble amount of pool remaining to fill /// Size of stack protected int GetRewardStackSize(string itemTpl, int rewardPoolRemaining) { throw new NotImplementedException(); } /// /// Get a pool of tpl IDs of items the player needs to complete hideout crafts/upgrade areas /// /// Session id /// Profile of player who will be getting the rewards /// Do we return bonus items (hideout/task items) /// Circle config /// Array of tpls protected string[] GetCultistCircleRewardPool( string sessionId, PmcData pmcData, CircleCraftDetails craftingInfo, CultistCircleSettings cultistCircleConfig) { throw new NotImplementedException(); } /// /// Check player's profile for quests with hand-in requirements and add those required items to the pool /// /// Player profile /// Items not to add to pool /// Pool to add items to protected void AddTaskItemRequirementsToRewardPool( PmcData pmcData, HashSet itemRewardBlacklist, HashSet rewardPool) { throw new NotImplementedException(); } /// /// Adds items the player needs to complete hideout crafts/upgrades to the reward pool /// /// Hideout area data /// Player profile /// Items not to add to pool /// Pool to add items to protected void AddHideoutUpgradeRequirementsToRewardPool( Hideout hideoutDbData, PmcData pmcData, HashSet itemRewardBlacklist, HashSet rewardPool) { throw new NotImplementedException(); } /// /// Get all active hideout areas /// /// Hideout areas to iterate over /// Active area array protected BotHideoutArea[] GetPlayerAccessibleHideoutAreas(BotHideoutArea[] areas) { throw new NotImplementedException(); } /// /// Get array of random reward items /// /// Reward pool to add to /// Item tpls to ignore /// Should these items meet the valuable threshold /// Set of item tpls protected HashSet GenerateRandomisedItemsAndAddToRewardPool( HashSet rewardPool, HashSet itemRewardBlacklist, bool itemsShouldBeHighValue) { throw new NotImplementedException(); } /// /// Iterate over passed in hideout requirements and return the Item /// /// Requirements to iterate over /// Array of item requirements protected (StageRequirement[] StageRequirement, Requirement[] Requirement) GetItemRequirements(RequirementBase[] requirements) { throw new NotImplementedException(); } }