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