示例#1
0
        /// <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}");
        }
示例#2
0
        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);
        }
示例#3
0
        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();
        }