Exemplo n.º 1
0
        public void InitConnected()
        {
            _facility.SetConnected(false); //init pbs facility

            var baseEid = _facility.Parent;

            var records = Db.Query().CommandText("select e.definition from pbsconnections c join entities e on c.sourceeid=e.eid  where c.targeteid=@baseEid")
                          .SetParameter("@baseEid", baseEid)
                          .Execute();

            foreach (var record in records)
            {
                var definition = record.GetValue <int>(0);

                if (!EntityDefault.TryGet(definition, out EntityDefault ed))
                {
                    continue;
                }

                if (!ed.CategoryFlags.IsCategory(CategoryFlags.cf_pbs_production_nodes))
                {
                    continue;
                }

                if (!ProductionHelper.PBSNodeCFTofacilityType.TryGetValue(ed.CategoryFlags, out ProductionFacilityType productionFacilityType))
                {
                    continue;
                }

                if (_facility.FacilityType == productionFacilityType)
                {
                    _facility.SetConnected(true);
                }
            }
        }
        public Dictionary <string, object> ToDictionary()
        {
            var           resultQuantity = amountOfCycles;
            EntityDefault resultEd;

            if (EntityDefault.TryGet(resultDefinition, out resultEd))
            {
                resultQuantity *= resultEd.Quantity;
            }

            var tmpDict = new Dictionary <string, object>
            {
                { k.definition, resultDefinition },
                { k.startTime, startTime },
                { k.finishTime, finishTime },
                { k.ID, ID },
                { k.facility, facilityEID },
                { k.productionTime, totalProductionTimeSeconds },
                { k.timeLeft, (int)finishTime.Subtract(DateTime.Now).TotalSeconds },
                { k.type, (int)type },
                { k.baseEID, baseEID },
                { k.cycle, resultQuantity },
                { k.price, Price },
                { k.characterID, character.Id },
                { k.useCorporationWallet, useCorporationWallet },
                { k.paused, paused },
                { k.pauseTime, pauseTime },
            };

            return(tmpDict);
        }
Exemplo n.º 3
0
        //Compute price modifier based on category of entity
        public static double GetProductionPriceModifier(this IProductionDataAccess dataAccess, int targetDefinition)
        {
            if (!EntityDefault.TryGet(targetDefinition, out EntityDefault ed))
            {
                Logger.Error("definition was not found: " + targetDefinition);
                return(1.0);
            }

            var modifier = 1.0;

            if (CategoryFlagsExtensions.IsAny(ed.CategoryFlags, lights))
            {
                modifier = BotClassMods[0];
            }
            else if (CategoryFlagsExtensions.IsAny(ed.CategoryFlags, assaults))
            {
                modifier = BotClassMods[1];
            }
            else if (CategoryFlagsExtensions.IsAny(ed.CategoryFlags, mechs))
            {
                modifier = BotClassMods[2];
            }
            else if (CategoryFlagsExtensions.IsAny(ed.CategoryFlags, heavies))
            {
                modifier = BotClassMods[3];
            }
            else
            {
                var techLevel = Math.Min(Math.Max(1, ed.Tier.level) - 1, TechLevelMods.Length - 1);
                modifier = TechLevelMods[techLevel];
            }

            return(modifier);
        }
        private int GetResultingAmount()
        {
            EntityDefault ed;

            if (!EntityDefault.TryGet(resultDefinition, out ed))
            {
                Logger.Error("consistency error! definition was not found for productioninprogress withdrawcredit. definition: " + resultDefinition);
            }

            var resultingAmount = amountOfCycles * ed.Quantity;

            return(resultingAmount);
        }
Exemplo n.º 5
0
        public static double GetProductionDuration(this IProductionDataAccess dataAccess, int targetDefinition)
        {
            if (!EntityDefault.TryGet(targetDefinition, out EntityDefault ed))
            {
                Logger.Error("definition was not found: " + targetDefinition);
                return(1.0);
            }

            foreach (var cf in ed.CategoryFlags.GetCategoryFlagsTree())
            {
                if (dataAccess.ProductionDurations.TryGetValue(cf, out double durationModifier))
                {
                    return(durationModifier);
                }
            }

            Logger.Error("consistency error. production duration modifier was not found for definition: " + targetDefinition + " " + ed.CategoryFlags);
            return(1.0);
        }
Exemplo n.º 6
0
        public void HandleRequest(IRequest request)
        {
            var rootEID = request.Data.GetOrDefault <long>(k.eid);

            var character = request.Session.Character;
            var owner     = character.Eid;

            var records = Enumerable.Select(Db.Query().CommandText("getitemsummary")
                                            .SetParameter("@ownerEID", owner)
                                            .SetParameter("@rootEID", rootEID)
                                            .Execute(), r =>
            {
                return(new
                {
                    definition = r.GetValue <int>(0),
                    parent = r.GetValue <long>(1),
                    qty = r.GetValue <long>(2)
                });
            }).ToList();

            var itemsDict = new Dictionary <string, object>();
            var count     = 0;
            var parents   = new List <long>(records.Count);

            foreach (var record in records)
            {
                var l = record.qty;
                if (l >= int.MaxValue)
                {
                    l = int.MaxValue;
                }

                var quantitySum = (int)l;

                if (!EntityDefault.TryGet(record.definition, out EntityDefault ed))
                {
                    continue;
                }

                if (!(ed.CategoryFlags.IsCategory(CategoryFlags.cf_robot_equipment) ||
                      ed.CategoryFlags.IsCategory(CategoryFlags.cf_robots) ||
                      ed.CategoryFlags.IsCategory(CategoryFlags.cf_ammo) ||
                      ed.CategoryFlags.IsCategory(CategoryFlags.cf_material) ||
                      ed.CategoryFlags.IsCategory(CategoryFlags.cf_documents) ||
                      ed.CategoryFlags.IsCategory(CategoryFlags.cf_dogtags) ||
                      ed.CategoryFlags.IsCategory(CategoryFlags.cf_production_items) ||
                      ed.CategoryFlags.IsCategory(CategoryFlags.cf_mission_items) ||
                      ed.CategoryFlags.IsCategory(CategoryFlags.cf_field_accessories) ||
                      ed.CategoryFlags.IsCategory(CategoryFlags.cf_container) ||
                      ed.CategoryFlags.IsCategory(CategoryFlags.cf_dynamic_cprg) ||
                      ed.CategoryFlags.IsCategory(CategoryFlags.cf_scan_result) ||
                      ed.CategoryFlags.IsCategory(CategoryFlags.cf_redeemables) ||
                      ed.CategoryFlags.IsCategory(CategoryFlags.cf_pbs_capsules)))
                {
                    continue;
                }

                var oneEntry = new Dictionary <string, object>
                {
                    { k.definition, record.definition },
                    { k.parent, record.parent },
                    { k.quantity, quantitySum }
                };

                parents.Add(record.parent);

                itemsDict.Add("c" + count++, oneEntry);
                Logger.DebugInfo($"{record.parent} {EntityDefault.Get(record.definition).Name} {quantitySum}");
            }

            var result = new Dictionary <string, object>
            {
                { k.items, itemsDict },
                { k.rootEID, rootEID }
            };

            if (parents.Count > 0)
            {
                var parentStr     = parents.ArrayToString();
                var counter       = 0;
                var parentsDict   = new Dictionary <string, object>();
                var secondParents = new List <long>();

                var dataRecords = Db.Query().CommandText($"select eid,ename,parent,definition from entities where eid in ({parentStr})").Execute();

                foreach (var r in dataRecords)
                {
                    var secondDefinition = r.GetValue <int>(3);
                    var secondParent     = r.GetValue <long?>(2);

                    EntityDefault ed;
                    if (!EntityDefault.TryGet(secondDefinition, out ed))
                    {
                        continue;
                    }

                    if (ed.CategoryFlags.IsCategory(CategoryFlags.cf_volume_wrapper_container))
                    {
                        continue;
                    }


                    if (secondParent != null && secondParent > 0)
                    {
                        secondParents.Add((long)secondParent);
                    }

                    var oneEntry =
                        new Dictionary <string, object>
                    {
                        { k.eid, r.GetValue <long>(0) },
                        { k.eName, r.GetValue <string>(1) },
                        { k.parent, secondParent },
                        { k.definition, secondDefinition }
                    };


                    parentsDict.Add("p" + counter++, oneEntry);
                }


                if (secondParents.Count > 0)
                {
                    var secondParentStr = secondParents.Except(parents).ArrayToString();


                    foreach (var r in Db.Query().CommandText("select eid,ename,parent,definition from entities where eid in (" + secondParentStr + ")").Execute())
                    {
                        var oneEntry =
                            new Dictionary <string, object>
                        {
                            { k.eid, r.GetValue <long>(0) },
                            { k.eName, r.GetValue <string>(1) },
                            { k.parent, r.GetValue <long>(2) },
                            { k.definition, r.GetValue <int>(3) }
                        };

                        parentsDict.Add("p" + counter++, oneEntry);
                    }
                }


                result.Add(k.data, parentsDict);


                foreach (var pair in parentsDict)
                {
                    var v = (Dictionary <string, object>)pair.Value;
                    Logger.DebugInfo($"{v[k.eid]} {v[k.parent]} {v[k.eName]} {EntityDefault.Get((int)v[k.definition]).Name}");
                }
            }

            Message.Builder.FromRequest(request).WithData(result).Send();
        }
Exemplo n.º 7
0
        public ErrorCodes PrepareResearchKitMerge(
            PublicContainer publicContainer,
            Character character, long target, int quantity,
            out int nextDefinition,
            out int nextLevel,
            out double fullPrice,
            out int availableQuantity,
            out int searchDefinition)
        {
            ErrorCodes ec;

            nextDefinition    = 0;
            nextLevel         = 0;
            fullPrice         = 0;
            availableQuantity = 0;
            searchDefinition  = 0;

            var researchKit = (ResearchKit)publicContainer.GetItem(target, true);

            if (researchKit == null)
            {
                return(ErrorCodes.ItemNotFound);
            }

            var definition = researchKit.Definition;

            searchDefinition = definition;

            EntityDefault ed;

            if (!EntityDefault.TryGet(definition, out ed))
            {
                return(ErrorCodes.DefinitionNotSupported);
            }

            int level = ed.Options.Level;

            if (level == 0)
            {
                Logger.Error("no level was defined for research kit: " + ed.Name + " " + ed.Definition);
                return(ErrorCodes.ConsistencyError);
            }

            if (level == 10)
            {
                return(ErrorCodes.MaximumResearchLevelReached);
            }

            nextLevel = level + 1;

            var sameDefinitions = publicContainer.GetItems().Where(i => i.Definition == definition).Sum(i => i.Quantity);

            if (sameDefinitions % 2 == 1)
            {
                sameDefinitions--;
            }

            var pairs = sameDefinitions / 2;

            if ((ec = ProductionHelper.FindResearchKitDefinitionByLevel(nextLevel, out nextDefinition)) != ErrorCodes.NoError)
            {
                return(ec);
            }

            availableQuantity = Math.Min(pairs, quantity);

            fullPrice = GetReserchKitMergePrice(nextLevel, character) * availableQuantity;

            return(ec);
        }