public CommonItem(BaseResorcedRequirement[] craftingRequirements, ItemMarket itemMarket, CraftBuilding craftingBuilding, int qualityLevel, ITownManager buyTownManager, ITownManager sellTownManager ) { QualityLevel = qualityLevel; CraftingRequirements = craftingRequirements; IsArtefacted = CraftingRequirements.SelectMany(x => x.Resources) .Any(r => r.Item.ShopCategory == ShopCategory.Artefacts || r.Item.ShopCategory == ShopCategory.Token); CraftingBuilding = craftingBuilding; ItemMarket = itemMarket; _longBuyRequirement = new LongBuyRequirement(buyTownManager); _fastBuyRequirement = new FastBuyRequirement(buyTownManager); LongSellProfit = new LongSellProfit(this, sellTownManager); FastSellProfit = new FastSellProfit(this, sellTownManager); BmFastSellProfit = new BmFastSellProfit(this); BmLongSellProfit = new BmLongSellProfit(this); CostCalcOptions.Instance.Changed += RequirementsOnUpdated; CostCalcOptions.Instance.ProfitsChanged += ProfitsOnUpdated; }
public ArtefactStat(CraftBuilding craftingBuilding, CommonItem material, CommonItem[] artefacts) { CraftingBuilding = craftingBuilding; Material = material; Artefacts = artefacts; Material.CostUpdate += MaterialOnCostUpdate; // foreach (var item in Artefacts.Select(x => x.CraftingRequirements[0]).Distinct()) // item.UpdateCost += MaterialOnUpdateCost; foreach (var item in Artefacts) { item.FastSellProfit.Updated += FastSellProfitOnCostUpdate; item.LongSellProfit.Updated += LongSellProfitOnCostUpdate; } FastSellProfitOnCostUpdate(); LongSellProfitOnCostUpdate(); MaterialOnCostUpdate(); }
public int LoadModel() { Localization = LoadLocalizationXml(); NoneBuilding = new CraftBuilding(new ItemBuilding(), _craftTownManager); var resourcesDb = LoadResourcesXml(); var buildingsDb = LoadBuildingsXml(); var itemsDb = LoadItemsXml(); var xmlCraftBuildings = buildingsDb.Items.OfType <craftBuilding>().Where(x => x.tier == 8 && x.favoritedish != null && x.craftingitemlist != null && x.craftingitemlist[0].craftitem != null); ResourceItemValues = resourcesDb .SelectMany(x => x.ResourceTier.Select(z => new { name = $"T{z.value}_{x.name}", val = z })).ToDictionary(k => k.name, v => v.val); ItemIdToCraftBuildingId = xmlCraftBuildings .SelectMany(x => x.craftingitemlist[0].craftitem .Select(ci => new { itemId = ci.uniquename, buildingId = x.uniquename })) .ToDictionary(k => k.itemId, v => v.buildingId); CraftBuildings = xmlCraftBuildings.Select(CreateCraftBuilding).ToDictionary(k => k.Id); // buildingsDb.Items.OfType<CraftBuilding>() XmlItems = itemsDb.Items.Cast <IItem>().ToDictionary(GetId, v => v); Items = new Dictionary <string, CommonItem>(); Journals = new Dictionary <string, Journal>(); JournalsItems = new Dictionary <string, Journal>(); //Journalitems _EMPTY foreach (var journalitem in XmlItems.Values.OfType <ItemsJournalitem>().Select(CreateOrGetItem)) { } //Journalitems _FULL foreach (var journalitem in XmlItems.Values.OfType <ItemsJournalitem>().Select(CreateOrGetItem)) { } var enItems = XmlItems.Values.OfType <IItemEnchantments>().SelectMany(CreateEnchantedItems); var items = XmlItems.Values.Where(x => !(x is ItemsJournalitem)).Select(CreateOrGetItem).Concat(enItems); var cnt = items.Count(); /* var rocks = Items.Values.Where(x => x.ShopSubCategory == ShopSubCategory.Rock); * foreach (var item in rocks) * { * item.CraftingRequirements = EmptyCraftingRequirements; * }*/ Artefacts = Items.Values.SelectMany(x => x.CraftingRequirements).SelectMany(x => x.Resources .Where(a => a.Item.CraftingRequirements.Length > 0 && a.Item.ShopCategory == ShopCategory.Artefacts).Select( a => new { x.Item.CraftingBuilding, art = a.Item })) .Distinct() // .GroupBy(x=>new {x.CraftingBuilding, x.art.CraftingRequirements[0].Resources[0].Item}) .GroupBy(x => x.art.CraftingRequirements[0].Resources[0].Item) .Select(v => new ArtefactStat(null, v.Key, v.Select(a => a.art).ToArray())) .ToArray(); return(cnt); }