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); }
//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); }
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); }
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(); }
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); }