using SPTarkov.Server.Core.Helpers; using SPTarkov.Server.Core.Models.Eft.Common.Tables; using SPTarkov.Server.Core.Models.Enums.Hideout; namespace SPTarkov.Server.Core.Extensions; public static class ProductionExtensions { /// /// Has the craft completed /// Ignores bitcoin farm/cultist circle as they're continuous crafts /// /// Craft to check /// True when craft is complete public static bool IsCraftComplete(this Production craft) { return craft.Progress >= craft.ProductionTime && !craft.IsCraftOfType(HideoutAreas.BitcoinFarm) && !craft.IsCraftOfType(HideoutAreas.CircleOfCultists); } /// /// Is a craft from a particular hideout area /// /// Craft to check /// Type to check craft against /// True if it is from that area public static bool IsCraftOfType(this Production craft, HideoutAreas hideoutType) { switch (hideoutType) { case HideoutAreas.WaterCollector: return craft.RecipeId == HideoutHelper.WaterCollectorId; case HideoutAreas.BitcoinFarm: return craft.RecipeId == HideoutHelper.BitcoinProductionId; case HideoutAreas.ScavCase: return craft.SptIsScavCase ?? false; case HideoutAreas.CircleOfCultists: return craft.SptIsCultistCircle ?? false; default: return false; } } /// /// Craft has completed, update its properties to reflect its new state /// /// Craft to update public static void FlagCultistCircleCraftAsComplete(this Production production) { production.AvailableForFinish = true; // The client expects `Progress` to be 0, and `inProgress` to be false when a circle is complete production.Progress = 0; production.InProgress = false; } }