using Core.Models.Eft.Common;
using Core.Models.Eft.Common.Tables;
using Core.Models.Eft.Hideout;
using Core.Models.Eft.ItemEvent;
using Core.Models.Enums;
namespace Core.Helpers;
public class HideoutHelper
{
///
/// Add production to profiles' Hideout.Production array
///
/// Profile to add production to
/// Production request
/// Session id
/// client response
public void RegisterProduction(
PmcData profileData,
HideoutSingleProductionStartRequestData productionRequest,
string sessionId)
{
throw new NotImplementedException();
}
///
/// This convenience function initializes new Production Object
/// with all the constants.
///
public void InitProduction(
string recipeId,
int productionTime,
bool needFuelForAllProductionTime)
{
throw new NotImplementedException();
}
///
/// Is the provided object a Production type
///
///
///
public bool IsProductionType(Productive productive)
{
throw new NotImplementedException();
}
///
/// Apply bonus to player profile given after completing hideout upgrades
///
/// Profile to add bonus to
/// Bonus to add to profile
public void ApplyPlayerUpgradesBonuses(PmcData profileData, StageBonus bonus)
{
throw new NotImplementedException();
}
///
/// Process a players hideout, update areas that use resources + increment production timers
///
/// Session id
public void UpdatePlayerHideout(string sessionId)
{
throw new NotImplementedException();
}
///
/// Get various properties that will be passed to hideout update-related functions
///
/// Player profile
/// Properties
protected (int btcFarmCGs, bool isGeneratorOn, bool waterCollectorHasFilter) GetHideoutProperties(PmcData profileData)
{
throw new NotImplementedException();
}
protected bool DoesWaterCollectorHaveFilter(BotHideoutArea waterCollector)
{
throw new NotImplementedException();
}
///
/// Iterate over productions and update their progress timers
///
/// Profile to check for productions and update
/// Hideout properties
protected void UpdateProductionTimers(
PmcData profileData,
(int btcFarmCGs, bool isGeneratorOn, bool waterCollectorHasFilter) hideoutProperties)
{
throw new NotImplementedException();
}
///
/// Is a craft from a particular hideout area
///
/// Craft to check
/// Type to check craft against
/// True if it is from that area
protected bool IsCraftOfType(Production craft, HideoutAreas hideoutType)
{
throw new NotImplementedException();
}
///
/// Has the craft completed
/// Ignores bitcoin farm/cultist circle as they're continuous crafts
///
/// Craft to check
/// True when craft is complete
protected bool IsCraftComplete(Production craft)
{
throw new NotImplementedException();
}
///
/// Update progress timer for water collector
///
/// profile to update
/// id of water collection production to update
/// Hideout properties
protected void UpdateWaterCollectorProductionTimer(
PmcData pmcData,
string productionId,
Dictionary hideoutProperties)
{
throw new NotImplementedException();
}
///
/// Update a productions progress value based on the amount of time that has passed
///
/// Player profile
/// Production id being crafted
/// Recipe data being crafted
///
protected void UpdateProductionProgress(
PmcData pmcData,
string prodId,
HideoutProduction recipe,
Dictionary hideoutProperties)
{
throw new NotImplementedException();
}
protected void UpdateCultistCircleCraftProgress(PmcData pmcData, string prodId)
{
throw new NotImplementedException();
}
protected void FlagCultistCircleCraftAsComplete(Productive production)
{
throw new NotImplementedException();
}
///
/// Check if a productions progress value matches its corresponding recipes production time value
///
/// Player profile
/// Production id
/// Recipe being crafted
/// progress matches productionTime from recipe
protected bool DoesProgressMatchProductionTime(PmcData pmcData, string prodId)
{
throw new NotImplementedException();
}
///
/// Update progress timer for scav case
///
/// Profile to update
/// Id of scav case production to update
protected void UpdateScavCaseProductionTimer(PmcData pmcData, string productionId)
{
throw new NotImplementedException();
}
///
/// Iterate over hideout areas that use resources (fuel/filters etc) and update associated values
///
/// Session id
/// Profile to update areas of
/// hideout properties
protected void UpdateAreasWithResources(
string sessionID,
PmcData pmcData,
Dictionary hideoutProperties)
{
throw new NotImplementedException();
}
///
/// Decrease fuel from generator slots based on amount of time since last time this occurred
///
/// Hideout area
/// Player profile
/// Is the generator turned on since last update
protected void UpdateFuel(BotHideoutArea generatorArea, PmcData pmcData, bool isGeneratorOn)
{
throw new NotImplementedException();
}
protected void UpdateWaterCollector(
string sessionId,
PmcData pmcData,
BotHideoutArea area,
Dictionary hideoutProperties)
{
throw new NotImplementedException();
}
///
/// Get craft time and make adjustments to account for dev profile + crafting skill level
///
/// Player profile making craft
/// Recipe being crafted
/// Should the hideout management bonus be applied to the calculation
/// Items craft time with bonuses subtracted
public double GetAdjustedCraftTimeWithSkills(
PmcData playerProfile,
string recipeId,
bool applyHideoutManagementBonus = false)
{
throw new NotImplementedException();
}
///
/// Adjust water filter objects resourceValue or delete when they reach 0 resource
///
/// Water filter area to update
/// Production object
/// Is generator enabled
/// Player profile
protected void UpdateWaterFilters(
BotHideoutArea waterFilterArea,
Production production,
bool isGeneratorOn,
PmcData playerProfile)
{
throw new NotImplementedException();
}
///
/// Get an adjusted water filter drain rate based on time elapsed since last run,
/// handle edge case when craft time has gone on longer than total production time
///
/// Time passed
/// Total time collecting water
/// How far water collector has progressed
/// Base drain rate
/// Drain rate (adjusted)
protected double GetTimeAdjustedWaterFilterDrainRate(
double secondsSinceServerTick,
double totalProductionTime,
double productionProgress,
double baseFilterDrainRate)
{
throw new NotImplementedException();
}
///
/// Get the water filter drain rate based on hideout bonuses player has
///
/// Player profile
/// Drain rate
protected double GetWaterFilterDrainRate(PmcData playerProfile)
{
throw new NotImplementedException();
}
///
/// Get the production time in seconds for the desired production
///
/// Id, e.g. Water collector id
/// Seconds to produce item
protected double GetTotalProductionTimeSeconds(string prodId)
{
throw new NotImplementedException();
}
///
/// Create a upd object using passed in parameters
///
///
///
///
/// Upd
protected Upd GetAreaUpdObject(
int stackCount,
double resourceValue,
int resourceUnitsConsumed,
bool isFoundInRaid)
{
throw new NotImplementedException();
}
protected void UpdateAirFilters(BotHideoutArea airFilterArea, PmcData playerProfile, bool isGeneratorOn)
{
throw new NotImplementedException();
}
protected void UpdateBitcoinFarm(
PmcData playerProfile,
Productive btcProduction,
int btcFarmCGs,
bool isGeneratorOn)
{
throw new NotImplementedException();
}
///
/// Add bitcoin object to btc production products array and set progress time
///
/// Bitcoin production object
/// Time to craft a bitcoin
protected void AddBtcToProduction(Production btcProd, double coinCraftTimeSeconds)
{
throw new NotImplementedException();
}
///
/// Get number of ticks that have passed since hideout areas were last processed, reduced when generator is off
///
/// Player profile
/// Is the generator on for the duration of elapsed time
/// Hideout production recipe being crafted we need the ticks for
/// Amount of time elapsed in seconds
protected double GetTimeElapsedSinceLastServerTick(
PmcData playerProfile,
bool isGeneratorOn,
HideoutProduction recipe = null)
{
throw new NotImplementedException();
}
///
/// Get a count of how many possible BTC can be gathered by the profile
///
/// Profile to look up
/// Coin slot count
protected int GetBTCSlots(PmcData profileData)
{
throw new NotImplementedException();
}
///
/// Get a count of how many additional bitcoins player hideout can hold with elite skill
///
protected int GetEliteSkillAdditionalBitcoinSlotCount()
{
throw new NotImplementedException();
}
///
/// HideoutManagement skill gives a consumption bonus the higher the level
/// 0.5% per level per 1-51, (25.5% at max)
///
/// Profile to get hideout consumption level from
/// Consumption bonus
protected double GetHideoutManagementConsumptionBonus(PmcData profileData)
{
throw new NotImplementedException();
}
///
/// Get a multiplier based on player's skill level and value per level
///
/// Player profile
/// Player skill from profile
/// Value from globals.config.SkillsSettings - `PerLevel`
/// Multiplier from 0 to 1
protected double GetSkillBonusMultipliedBySkillLevel(PmcData profileData, SkillTypes skill, double valuePerLevel)
{
throw new NotImplementedException();
}
///
///
/// Player profile
/// Time to complete hideout craft in seconds
/// Skill bonus to get reduction from
/// Skill bonus amount to apply
/// Seconds to reduce craft time by
public double GetSkillProductionTimeReduction(
PmcData profileData,
double productionTime,
SkillTypes skill,
double amountPerLevel)
{
throw new NotImplementedException();
}
public bool IsProduction(Productive productive)
{
throw new NotImplementedException();
}
///
/// Gather crafted BTC from hideout area and add to inventory
/// Reset production start timestamp if hideout area at full coin capacity
///
/// Player profile
/// Take production request
/// Session id
/// Output object to update
public void GetBTC(
PmcData profileData,
HideoutTakeProductionRequestData request,
string sessionId,
ItemEventRouterResponse output)
{
throw new NotImplementedException();
}
///
/// Upgrade hideout wall from starting level to interactable level if necessary stations have been upgraded
///
/// Profile to upgrade wall in
public void UnlockHideoutWallInProfile(PmcData profileData)
{
throw new NotImplementedException();
}
///
/// Hideout improvement is flagged as complete
///
/// hideout improvement object
/// true if complete
protected bool HideoutImprovementIsComplete(HideoutImprovement improvement)
{
throw new NotImplementedException();
}
///
/// Iterate over hideout improvements not completed and check if they need to be adjusted
///
/// Profile to adjust
public void SetHideoutImprovementsToCompleted(PmcData profileData)
{
throw new NotImplementedException();
}
///
/// Add/remove bonus combat skill based on number of dogtags in place of fame hideout area
///
/// Player profile
public void ApplyPlaceOfFameDogtagBonus(PmcData profileData)
{
throw new NotImplementedException();
}
///
/// Calculate the raw dogtag combat skill bonus for place of fame based on number of dogtags
/// Reverse engineered from client code
///
/// Player profile
/// Active dogtags in place of fame dogtag slots
/// Combat bonus
protected double GetDogtagCombatSkillBonusPercent(PmcData profileData, List- activeDogtags)
{
throw new NotImplementedException();
}
///
/// The wall pollutes a profile with various temp buffs/debuffs,
/// Remove them all
///
/// Hideout area data
/// Player profile
public void RemoveHideoutWallBuffsAndDebuffs(HideoutArea wallAreaData, PmcData profileData)
{
throw new NotImplementedException();
}
}