Exemple #1
0
        public void CalculateResultingPoints(CalibrationProgram sourceCalibration, CalibrationProgram targetCalibration, Character character, out int materialEfficiencyPoints, out int timeEfficiencyPoints)
        {
            //betterCT.ME+weakCT.ME/3 + (1-(100/(100+STANDING+PLAYER_EXTENSION_PONT+Facility_PONT)))*25

            var materialBase = 0;
            var timeBase     = 0;
            var weakMaterial = 0;
            var weakTime     = 0;


            if (sourceCalibration.IsBetterThanOther(targetCalibration))
            {
                materialBase = sourceCalibration.MaterialEfficiencyPoints;
                timeBase     = sourceCalibration.TimeEfficiencyPoints;
                weakMaterial = targetCalibration.MaterialEfficiencyPoints / 3;
                weakTime     = targetCalibration.TimeEfficiencyPoints / 3;
            }
            else
            {
                materialBase = targetCalibration.MaterialEfficiencyPoints;
                timeBase     = targetCalibration.TimeEfficiencyPoints;
                weakMaterial = sourceCalibration.MaterialEfficiencyPoints / 3;
                weakTime     = sourceCalibration.TimeEfficiencyPoints / 3;
            }

            var magic = (1 - (100.0 / (100.0 + GetAdditiveComponentForPoints(character)))) * 50;

            materialEfficiencyPoints = (int)(materialBase + weakMaterial + magic);
            timeEfficiencyPoints     = (int)(timeBase + weakTime + magic);
        }
Exemple #2
0
        public Dictionary <string, object> QueryMaterialAndTime(CalibrationProgram calibrationProgram, Character character, int targetDefintion, int lineOrCPRGMaterialPoints, int lineOrCPRGTimePoints, bool forNextRound = false)
        {
            var result = new Dictionary <string, object>();

            if (forNextRound)
            {
                var decalibration = ProductionDataAccess.GetDecalibration(targetDefintion);

                double newMaterialEfficiency = 0;
                double newTimeEfficiency     = 0;

                ProductionLine.GetDecalibratedEfficiencies(lineOrCPRGMaterialPoints, lineOrCPRGTimePoints, decalibration.decrease, ref newMaterialEfficiency, ref newTimeEfficiency);

                lineOrCPRGMaterialPoints = (int)newMaterialEfficiency;
                lineOrCPRGTimePoints     = (int)newTimeEfficiency;
            }

            bool hasBonus;
            var  materialMultiplier = CalculateFinalMaterialMultiplier(character, lineOrCPRGMaterialPoints, targetDefintion, out hasBonus);

            if (calibrationProgram.IsMissionRelated)
            {
                materialMultiplier = materialMultiplier.Clamp(); //never ask more than what we have in the mission
            }

            var materials = ProductionDescription.GetRequiredComponentsInfo(ProductionInProgressType.massProduction, 1, materialMultiplier, calibrationProgram.Components);

            materials.Count.ThrowIfEqual(0, ErrorCodes.WTFErrorMedicalAttentionSuggested);

            var productionTimeSeconds = CalculateFinalProductionTimeSeconds(character, targetDefintion, lineOrCPRGTimePoints);

            var price = CalculateProductionPrice(productionTimeSeconds);

            if (calibrationProgram.IsMissionRelated)
            {
                //mission stuff is fixed
                price = 0;
                productionTimeSeconds = 10;
            }


            result.Add(k.materials, materials);
            result.Add(k.productionTime, productionTimeSeconds);
            result.Add(k.price, price);
            result.Add(k.definition, targetDefintion);
            result.Add(k.materialMultiplier, materialMultiplier);
            result.Add(k.hasBonus, hasBonus);
            result.Add(k.targetQuantity, calibrationProgram.TargetQuantity);
            return(result);
        }
Exemple #3
0
        private ProductionLine DecalibrateLine(ProductionInProgress productionInProgress, ref bool wasLineDead, out CalibrationProgram cprg)
        {
            cprg = null;

            var productionLine = ProductionLine.LoadByProductionId(productionInProgress.character, productionInProgress.ID);

            if (productionLine == null)
            {
                Logger.Error("DecalibrateLine: productionline was not found. a production in progress exists without related productionline. " + productionInProgress);
                return(null);
            }

            //this CPRG drives the production
            cprg = productionLine.GetOrCreateCalibrationProgram(this);


            // mission mechanism
            if (cprg.IsMissionRelated)
            {
                //kill the line, delete cprg

                wasLineDead = true;

                ProductionLine.DeleteById(productionLine.Id);

                Logger.Info("production line was deleted " + productionLine);

                Repository.Delete(cprg);

                Logger.Info("CPRG deleted from db " + cprg.Eid);
                return(productionLine);
            }



            //decalibrate

            var newMaterialEfficiency = productionLine.MaterialEfficiency;
            var newTimeEfficiency     = productionLine.TimeEfficiency;

            Logger.Info("pre decalibration mateff:" + newMaterialEfficiency + " timeeff:" + newTimeEfficiency + " " + productionInProgress);

            productionLine.GetDecalibratedEfficiencies(ref newMaterialEfficiency, ref newTimeEfficiency);

            Logger.Info("post decalibration mateff:" + newMaterialEfficiency + " timeeff:" + newTimeEfficiency + " " + productionInProgress);

            productionLine.MaterialEfficiency = newMaterialEfficiency;
            productionLine.TimeEfficiency     = newTimeEfficiency;

            if (productionLine.IsAtZero())
            {
                wasLineDead = true;
                Logger.Info("line is dead. " + productionInProgress);

                var info = new Dictionary <string, object>
                {
                    { k.facility, GetFacilityInfo(productionInProgress.character) },
                    { k.line, productionLine.ToDictionary() }
                };

                Message.Builder.SetCommand(Commands.ProductionLineDead)
                .WithData(info)
                .ToCharacter(productionInProgress.character)
                .Send();
            }

            ProductionLine.PostMassProduction(productionInProgress.character, productionLine.Id, newTimeEfficiency, newMaterialEfficiency);

            return(productionLine);
        }
        public static void CreateCalibratedLine(Character character, long facilityEid, CalibrationProgram program)
        {
            const string insertSqlCommand = @"INSERT dbo.productionlines (characterid,facilityeid,targetdefinition,materialefficiency,timeefficiency,cprgeid) 
                                              VALUES (@characterID, @facility ,@definition,@materialEfficiency,@timeEfficiency,@cprgEid)";

            Db.Query().CommandText(insertSqlCommand)
            .SetParameter("@characterID", character.Id)
            .SetParameter("@facility", facilityEid)
            .SetParameter("@definition", program.TargetDefinition)
            .SetParameter("@materialEfficiency", program.MaterialEfficiencyPoints)
            .SetParameter("@timeEfficiency", program.TimeEfficiencyPoints)
            .SetParameter("@cprgEid", program.Eid)
            .ExecuteNonQuery().ThrowIfEqual(0, ErrorCodes.SQLInsertError);
        }
Exemple #5
0
 public static ItemResearchLevel GetItemReserchLevelByCalibrationProgram(this IProductionDataAccess dataAccess, CalibrationProgram calibrationProgram)
 {
     return(dataAccess.ResearchLevels.Values.FirstOrDefault(i => i.calibrationProgramDefinition == calibrationProgram.Definition));
 }
Exemple #6
0
 public void Visit(CalibrationProgram calibrationProgram)
 {
     AddItemTradeInfo(calibrationProgram);
     _tradeInfo[k.materialEfficiency] = calibrationProgram.MaterialEfficiencyPoints;
     _tradeInfo[k.timeEfficiency]     = calibrationProgram.TimeEfficiencyPoints;
 }