/// <summary> /// Degrades the production stack, occures when a site loses stability points /// </summary> private void DegradeIntrusionProductionStack(int pointsToDegrade, long?owner) { Logger.Info($"degrading intrusion production stack with {pointsToDegrade} on site: {Eid}"); var queryStr = $"select top {pointsToDegrade} id from intrusionproductionstack where siteeid=@siteEID order by eventtime desc"; var indices = Db.Query().CommandText(queryStr).SetParameter("@siteEID", Eid) .Execute() .Select(r => r.GetValue <int>(0)).ToArray(); foreach (var index in indices) { var facilityEid = Db.Query().CommandText("select facilityeid from intrusionproductionstack where id=@ID") .SetParameter("@ID", index) .ExecuteScalar <long>(); var facilityEntityDefault = EntityDefault.GetByEid(facilityEid); var facilityLevel = GetFacilityLevelFromStack(facilityEid); InsertProductionLog(IntrusionEvents.productionFacilityDegradedByServer, facilityEntityDefault.Definition, facilityLevel, facilityLevel + 1, null, null, null, owner); Db.Query().CommandText("delete intrusionproductionstack where id=@ID") .SetParameter("@ID", index) .ExecuteNonQuery(); } Logger.Info($"{indices.Length} amount of entries were removed from intrusion production stack for site: {Eid}"); }
private static ErrorCodes LoadItemAndResearchKit(ProductionInProgress productionInProgress, out ResearchKit researchKit, out Item item) { researchKit = null; item = null; if (productionInProgress.ReservedEids.Length != 2) { Logger.Error("illegal amount of reserved items " + productionInProgress); return(ErrorCodes.ServerError); } var ed = EntityDefault.GetByEid(productionInProgress.ReservedEids[0]); long researchKitEid, itemEid; if (ed.CategoryFlags.IsCategory(CategoryFlags.cf_research_kits) || ed.CategoryFlags.IsCategory(CategoryFlags.cf_random_research_kits)) { researchKitEid = productionInProgress.ReservedEids[0]; itemEid = productionInProgress.ReservedEids[1]; } else { itemEid = productionInProgress.ReservedEids[0]; researchKitEid = productionInProgress.ReservedEids[1]; } item = Item.GetOrThrow(itemEid); researchKit = (ResearchKit)Item.GetOrThrow(researchKitEid); return(ErrorCodes.NoError); }
public const int MAXIMUM_PRODUCTION_POINT_INDICES = 3; //maximum level of production facility /// <summary> /// Clears the production point stack if the site loses its owner /// </summary> private void CleanUpIntrusionProductionStack(long?owner) { Logger.Info($"cleaning up intrusion production stack for site: {Eid}"); //do the log var facilityEids = Db.Query().CommandText("select facilityeid from intrusionproductionstack where siteeid=@siteEID") .SetParameter("@siteEID", Eid) .Execute() .Select(r => r.GetValue <long>(0)) .ToArray(); foreach (var facilityEid in facilityEids) { var facilityEntityDefault = EntityDefault.GetByEid(facilityEid); var facilityLevel = GetFacilityLevelFromStack(facilityEid); InsertProductionLog(IntrusionEvents.productionFacilityDegradedByServer, facilityEntityDefault.Definition, 1, facilityLevel + 1, null, null, null, owner); } //delete all Db.Query().CommandText("delete intrusionproductionstack where siteeid=@siteEID") .SetParameter("@siteEID", Eid) .ExecuteNonQuery(); }