Example #1
0
        private IDictionary <string, object> EndPrototype(ProductionInProgress productionInProgress)
        {
            Logger.Info("Prototype finished: " + productionInProgress);

            //delete the used items
            foreach (var item in productionInProgress.GetReservedItems())
            {
                var b = TransactionLogEvent.Builder().SetTransactionType(TransactionType.PrototypeDeleted).SetCharacter(productionInProgress.character).SetItem(item);
                productionInProgress.character.LogTransaction(b);

                Repository.Delete(item);
            }

            //pick the output defintion---------------------------------------------------

            var outputDefinition = productionInProgress.resultDefinition;

            //load container
            var container = (PublicContainer)Container.GetOrThrow(PublicContainerEid);

            container.ReloadItems(productionInProgress.character);

            var outputDefault = EntityDefault.Get(outputDefinition).ThrowIfEqual(EntityDefault.None, ErrorCodes.DefinitionNotSupported);

            //create item
            var resultItem = container.CreateAndAddItem(outputDefinition, false, item =>
            {
                item.Owner    = productionInProgress.character.Eid;
                item.Quantity = outputDefault.Quantity * productionInProgress.amountOfCycles;
            });

            container.Save();

            productionInProgress.character.WriteItemTransactionLog(TransactionType.PrototypeCreated, resultItem);

            //get list in order to return

            Logger.Info("EndPrototype created an item: " + resultItem + " production:" + productionInProgress);

            var replyDict = new Dictionary <string, object>
            {
                { k.result, resultItem.BaseInfoToDictionary() },
            };


            ProductionProcessor.EnqueueProductionMissionTarget(MissionTargetType.prototype, productionInProgress.character, MyMissionLocationId(), productionInProgress.resultDefinition);
            return(replyDict);
        }
Example #2
0
        public IDictionary <string, object> ReturnReservedItems(ProductionInProgress productionInProgress)
        {
            StorageEid.ThrowIfEqual(0, ErrorCodes.WTFErrorMedicalAttentionSuggested);

            var replyDict = new Dictionary <string, object>(1);

            var itemsDict = new Dictionary <string, object>();

            var counter = 0;

            //put the reserved items into the public container
            foreach (var item in productionInProgress.GetReservedItems())
            {
                item.Parent = PublicContainerEid;
                item.Save();

                itemsDict.Add("r" + counter++, item.ToDictionary());
            }

            replyDict.Add(k.items, itemsDict);
            return(replyDict);
        }
Example #3
0
        private IDictionary <string, object> EndMassProduction(ProductionInProgress productionInProgress, bool forced)
        {
            Logger.Info("mass production finished: " + productionInProgress);

            //delete the used items
            foreach (var item in productionInProgress.GetReservedItems())
            {
                productionInProgress.character.LogTransaction(TransactionLogEvent.Builder()
                                                              .SetTransactionType(TransactionType.MassProductionDeleted)
                                                              .SetCharacter(productionInProgress.character)
                                                              .SetItem(item));
                Repository.Delete(item);
            }

            //pick the output defintion---------------------------------------------------

            var outputDefinition = productionInProgress.resultDefinition;

            //load container
            var container = (PublicContainer)Container.GetOrThrow(PublicContainerEid);

            container.ReloadItems(productionInProgress.character);

            var outputDefault = EntityDefault.Get(outputDefinition).ThrowIfEqual(EntityDefault.None, ErrorCodes.DefinitionNotSupported);

            //create item
            var resultItem = container.CreateAndAddItem(outputDefinition, false, item =>
            {
                item.Owner    = productionInProgress.character.Eid;
                item.Quantity = outputDefault.Quantity * productionInProgress.amountOfCycles;
            });

            productionInProgress.character.WriteItemTransactionLog(TransactionType.MassProductionCreated, resultItem);

            CalibrationProgram calibrationProgram;
            var wasLineDead            = false;
            var affectedProductionLine = DecalibrateLine(productionInProgress, ref wasLineDead, out calibrationProgram);

            if (affectedProductionLine == null)
            {
                Logger.Error("EndMassProduction: a production line was not found for an ending productionInProgress " + productionInProgress);
            }
            else
            {
                if (!forced && !wasLineDead)
                {
                    if (affectedProductionLine.Rounds >= 1)
                    {
                        //do production rounds
                        //ThreadPoolHelper.ScheduledTask(3000, () => TryNextRound(productionInProgress.character, affectedProductionLine.ID, productionInProgress.amountOfCycles, productionInProgress.useCorporationWallet));

                        var nrp = new NextRoundProduction(ProductionProcessor, productionInProgress.character, affectedProductionLine.Id, productionInProgress.amountOfCycles, productionInProgress.useCorporationWallet, Eid);

                        ProductionProcessor.EnqueueNextRoundProduction(nrp);
                    }
                }
            }


            //mission stuff
            if (outputDefault.CategoryFlags.IsCategory(CategoryFlags.cf_generic_random_items))
            {
                var randomCalibrationProgram = calibrationProgram as RandomCalibrationProgram;
                if (randomCalibrationProgram != null)
                {
                    //set it from the ct
                    resultItem.Quantity = randomCalibrationProgram.TargetQuantity;
                    Logger.Info("mission quantity is forced from CPRG:" + randomCalibrationProgram.Eid + " qty:" + randomCalibrationProgram.TargetQuantity);
                }
            }

            container.Save();

            //get list in order to return
            var linesList = GetLinesList(productionInProgress.character);

            Logger.Info("Mass Production created an item: " + resultItem + " production:" + productionInProgress);

            var replyDict = new Dictionary <string, object>
            {
                { k.result, resultItem.BaseInfoToDictionary() },
                { k.lines, linesList },
                { k.lineCount, linesList.Count }
            };

            ProductionProcessor.EnqueueProductionMissionTarget(MissionTargetType.massproduce, productionInProgress.character, MyMissionLocationId(), resultItem.Definition, resultItem.Quantity);
            return(replyDict);
        }