Пример #1
0
        private IDictionary <string, object> EndCalibrationProgramForge(ProductionInProgress productionInProgress)
        {
            Logger.Info("Calibration program forge finished: " + productionInProgress);

            var sourceCPRGEid = productionInProgress.ReservedEids[0];
            var targetCPRGEid = productionInProgress.ReservedEids[1];

            var sourceCPRG = (CalibrationProgram)Repository.LoadOrThrow(sourceCPRGEid);
            var targetCPRG = (CalibrationProgram)Repository.LoadOrThrow(targetCPRGEid);

            //delete the used items
            var b = TransactionLogEvent.Builder().SetTransactionType(TransactionType.CPRGForgeDeleted).SetCharacter(productionInProgress.character);

            foreach (var item in productionInProgress.GetReservedItems())
            {
                b.SetItem(item);
                productionInProgress.character.LogTransaction(b.Build());
                Repository.Delete(item);
            }

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

            var outputDefinition = productionInProgress.resultDefinition;

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

            container.ReloadItems(productionInProgress.character);

            var resultItem = (CalibrationProgram)Factory.CreateWithRandomEID(outputDefinition);

            resultItem.Owner = productionInProgress.character.Eid;
            resultItem.Save();

            int materialEfficiencyPoints;
            int timeEfficiencyPoints;

            CalculateResultingPoints(sourceCPRG, targetCPRG, productionInProgress.character, out materialEfficiencyPoints, out timeEfficiencyPoints);

            resultItem.MaterialEfficiencyPoints = materialEfficiencyPoints;
            resultItem.TimeEfficiencyPoints     = timeEfficiencyPoints;

            //add to public container
            container.AddItem(resultItem, false);
            container.Save();

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

            //get list in order to return

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

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

            return(replyDict);
        }