Esempio n. 1
0
 public void Reload()
 {
     this.EconomyData         = EconomyRequestFacade.GetInstance();
     this.ItemInfoData        = ItemInformationFacade.GetInstance();
     this.TierListData        = TierListFacade.GetInstance();
     this.ItemInformationData = new ObservableCollection <ItemTieringData>();
 }
        public ConcreteEconomyRules()
        {
            this.EconomyInformation = EconomyRequestFacade.GetInstance();
            this.ItemInformation    = ItemInformationFacade.GetInstance();
            this.TierListFacade     = TierListFacade.GetInstance();

            // The list of the suggestion-generating rulesets
            this.uniqueRules     = UniqueRulesFactory.Generate(this);
            this.divinationRules = DivinationRuleFactory.Generate(this);
            this.prophecyRules   = ProphecyRulesFactory.Generate(this);

            this.scarabRules     = this.GenerateScarabRuleSet();
            this.uniquemapsRules = this.GenerateUniqueMapRules();
            this.fossilrules     = this.GenerateFossilTieringRules();
            this.incubatorrules  = this.GenerateIncubatorTieringRules();

            this.shaperRules = ShaperElderRulesFactory.Generate(this, "rare->shaper");
            this.elderRules  = ShaperElderRulesFactory.Generate(this, "rare->elder");
            this.normalRules = ShaperElderRulesFactory.Generate(this, "rare->normal");

            this.Rules.Clear();

            this.Rules.Add(this.uniqueRules);
            this.Rules.Add(this.divinationRules);
            this.Rules.Add(this.uniquemapsRules);
            this.Rules.Add(this.fossilrules);
            this.Rules.Add(this.elderRules);
            this.Rules.Add(this.shaperRules);
            this.Rules.Add(this.incubatorrules);
            this.Rules.Add(this.prophecyRules);
            this.Rules.Add(this.scarabRules);
            // this.Rules.Add(this.normalRules);
        }
        public ConcreteEconomyRules()
        {
            this.EconomyInformation = EconomyRequestFacade.GetInstance();
            this.ItemInformation    = ItemInformationFacade.GetInstance();
            this.TierListFacade     = TierListFacade.GetInstance();

            this.Rules.Clear();

            // The list of the suggestion-generating rulesets
            this.Rules.Add(UniqueRulesFactory.Generate(this));
            this.Rules.Add(DivinationRuleFactory.Generate(this));
            this.Rules.Add(ProphecyRulesFactory.Generate(this));
            this.Rules.Add(FragmentsRuleFactory.Generate(this));
            this.Rules.Add(CurrencyRuleFactory.Generate(this));

            this.Rules.Add(this.GenerateScarabRuleSet());
            this.Rules.Add(this.GenerateUniqueMapRules());
            this.Rules.Add(this.GenerateFossilTieringRules());
            this.Rules.Add(this.GenerateIncubatorTieringRules());
            this.Rules.Add(this.GenerateBlightOilRuleSet());
            this.Rules.Add(this.GenerateVialRuleSet());
            this.Rules.Add(this.GenerateDeliriumorbsRuleSet());

            this.Rules.Add(ShaperElderRulesFactory.Generate(this, "rare->shaper"));
            this.Rules.Add(ShaperElderRulesFactory.Generate(this, "rare->elder"));
            this.Rules.Add(ShaperElderRulesFactory.Generate(this, "rare->hunter"));
            this.Rules.Add(ShaperElderRulesFactory.Generate(this, "rare->warlord"));
            this.Rules.Add(ShaperElderRulesFactory.Generate(this, "rare->crusader"));
            this.Rules.Add(ShaperElderRulesFactory.Generate(this, "rare->redeemer"));

            this.Rules.Add(NormalCraftingBasesRuleFactory.Generate(this, "generalcrafting"));
        }
Esempio n. 4
0
        public RuleSetBuilder SkipInEarlyLeague()
        {
            if (EconomyRequestFacade.GetInstance().IsEarlyLeague() == true)
            {
                this.RuleSet.Enabled = false;
            }

            return(this);
        }
Esempio n. 5
0
 public override bool IsActive()
 {
     if (EconomyRequestFacade.GetInstance().ActiveMetaTags.ContainsKey("MetaBiasAspect"))
     {
         if (EconomyRequestFacade.GetInstance().ActiveMetaTags["MetaBiasAspect"] > DateTime.Now)
         {
             return(true);
         }
     }
     return(false);
 }
Esempio n. 6
0
 public override bool IsActive()
 {
     if (EconomyRequestFacade.GetInstance().ActiveMetaTags.ContainsKey("EarlyLeagueInterestAspect"))
     {
         if (EconomyRequestFacade.GetInstance().ActiveMetaTags["EarlyLeagueInterestAspect"].Item1 <DateTime.Now && EconomyRequestFacade.GetInstance().ActiveMetaTags["EarlyLeagueInterestAspect"].Item2> DateTime.Now)
         {
             return(true);
         }
     }
     return(false);
 }
Esempio n. 7
0
        private void InitializeItems()
        {
            if (string.IsNullOrEmpty(Key))
            {
                return;
            }

            EconomyRequestFacade.GetInstance().EconomyTierlistOverview[this.BranchKey][Key].ForEach(x =>
            {
                ItemVariationInformation.Add(x);
            });

            ItemVariationInformationStatic = ItemVariationInformation;
            AvailableAspects.OrderBy(x => x.Name);
            this.RefreshAspectColoration();
        }
Esempio n. 8
0
        private EconomyRequestFacade LoadEconomyOverviewData()
        {
            var result     = EconomyRequestFacade.GetInstance();
            var seedFolder = Configuration.AppSettings["SeedFile Folder"];
            var ninjaUrl   = Configuration.AppSettings["Ninja Request URL"];
            var variation  = Configuration.AppSettings["Ninja League"];
            var league     = Configuration.AppSettings["betrayal"];

            foreach (var tuple in FilterPolishConstants.FileRequestData)
            {
                PerformEcoRequest(tuple.Item1, tuple.Item2, tuple.Item3, tuple.Item4);
            }

            void PerformEcoRequest(string dictionaryKey, string requestKey, string url, string prefix) =>
            result.AddToDictionary(dictionaryKey,
                                   result.PerformRequest(league, variation, requestKey, url, prefix, this.RequestMode, seedFolder, ninjaUrl));

            return(result);
        }
        // TODO: Refactor
        public void Enrich(string baseType, ItemList <NinjaItem> data)
        {
            if (baseType == "Exalted Orb")
            {
                var cPrice = data.Where(x => x.Name == "Exalted Orb")?.FirstOrDefault()?.CVal;

                if (EconomyRequestFacade.GetInstance().IsEarlyLeague() && cPrice > 60)
                {
                    cPrice = 60;
                }

                if (cPrice != null && cPrice > 30)
                {
                    FilterPolishUtil.FilterPolishConfig.ExaltedOrbPrice = cPrice.Value;
                    LoggingFacade.LogInfo($"Exalted Price: {cPrice.Value}");
                }
            }

            return;
        }
        public FileRequestResult GetAllFiles(string league, string leagueType)
        {
            LoggingFacade.LogInfo($"Starting file request");
            this.LeagueType = leagueType;

            // Lade Filter Datei -> NS main github -> selective file(s?)
            // Lade Style Dateien -> NS main github -> selective files
            // Lade Aspect Dateien -> https://github.com/NeverSinkDev/Filter-ItemEconomyAspects -> ALL

            LoggingFacade.LogInfo($"GitHub file download... starting");
            this.LoadGitHubFiles();
            LoggingFacade.LogInfo($"GitHub file download... done");

            // Lade BaseType Datei -> FB
            LoggingFacade.LogInfo($"BaseType Data Request: done");
            this.BaseTypeData = FilterCore.Constants.BaseTypeDataProvider.BaseTypeData;

            // Lade Economy Dateien -> ninja API
            var ecoRes = this.LoadEcoData(league, leagueType);

            LoggingFacade.LogInfo($"Ninja Eco Request Done: done");

            if (ecoRes == FileRequestResult.Fail)
            {
                LoggingFacade.LogInfo($"Ninja Eco Request Done: failed");
                return(ecoRes);
            }

            var itemData    = ItemInformationFacade.GetInstance();
            var economyData = EconomyRequestFacade.GetInstance();

            foreach (var branchKey in economyData.EconomyTierlistOverview.Keys)
            {
                itemData.Deserialize(branchKey, String.Join(Environment.NewLine, this.ItemAspects[branchKey.Replace("->", "")]));
                itemData.MigrateAspectDataToEcoData(economyData, branchKey);
            }

            return(ecoRes);
        }
Esempio n. 11
0
        private EconomyRequestFacade LoadEconomyOverviewData()
        {
            LoggingFacade.LogDebug("Loading Economy Data...");

            var result     = EconomyRequestFacade.GetInstance();
            var seedFolder = Configuration.AppSettings["EcoFile Folder"];
            var variation  = Configuration.AppSettings["leagueType"];
            var league     = Configuration.AppSettings["currentLeague"];

            foreach (var tuple in FilterPolishConfig.FileRequestData)
            {
                PerformEcoRequest(tuple.Item1, tuple.Item2, tuple.Item3);
                LoggingFacade.LogDebug($"Loading Economy: {tuple.Item1} + {tuple.Item2} + {tuple.Item3}");
            }

            void PerformEcoRequest(string dictionaryKey, string requestKey, string url) =>
            result.AddToDictionary(dictionaryKey,
                                   result.PerformRequest(league, variation, requestKey, url, seedFolder));

            LoggingFacade.LogInfo("Economy Data Loaded...");

            return(result);
        }
        private void InitializeItems()
        {
            if (string.IsNullOrEmpty(Key))
            {
                return;
            }

            var requestFacade = EconomyRequestFacade.GetInstance();

            // TODO!
            //if (this.BranchKey.ToLower().Contains("rare"))
            //{
            //    this.branchKey = "basetypes";
            //}

            requestFacade.EconomyTierlistOverview[this.BranchKey][Key].ForEach(x =>
            {
                ItemVariationInformation.Add(x);
            });

            ItemVariationInformationStatic = ItemVariationInformation;
            AvailableAspects.OrderBy(x => x.Name);
            this.RefreshAspectColoration();
        }
        public void GetAllFiles(string ninjaLeague)
        {
            FilterPolishUtil.Model.LoggingFacade.GetInstance().CustomLoggingAction = x => Console.WriteLine("err: " + x);

            // Lade Filter Datei -> NS main github -> selective file(s?)
            // Lade Style Dateien -> NS main github -> selective files
            // Lade Aspect Dateien -> https://github.com/NeverSinkDev/Filter-ItemEconomyAspects -> ALL
            this.LoadGitHubFiles();

            // Lade BaseType Datei -> FB
            this.BaseTypeData = FilterCore.Constants.BaseTypeDataProvider.BaseTypeData;

            // Lade Economy Dateien -> ninja API
            this.LoadEcoData(ninjaLeague);

            var itemData    = ItemInformationFacade.GetInstance();
            var economyData = EconomyRequestFacade.GetInstance();

            foreach (var branchKey in economyData.EconomyTierlistOverview.Keys)
            {
                itemData.Deserialize(branchKey, String.Join(Environment.NewLine, this.ItemAspects[branchKey.Replace("->", "")]));
                itemData.MigrateAspectDataToEcoData(economyData, branchKey);
            }
        }
Esempio n. 14
0
        public static void PerformMainRoutine(string req)
        {
            // 0) Cleanup
            EconomyData?.Clean();
            ItemInfoData?.Clean();
            TierListFacade?.Clean();
            FilterAccessFacade?.Clean();

            BaseTypeDataProvider.Initialize();
            EconomyData        = EconomyRequestFacade.GetInstance();
            TierListFacade     = TierListFacade.GetInstance();
            FilterAccessFacade = FilterAccessFacade.GetInstance();
            ItemInfoData       = ItemInformationFacade.GetInstance();

            // 0) Get Current League information etc

            EconomyData.RequestPoeLeagueInfo();

            if (!EconomyData.IsLeagueActive())
            {
                LoggingFacade.LogWarning("No Active League detected!");
            }

            var requestedLeagueName = EconomyData.GetActiveLeagueName();

            // 1) Acquire Data

            var localMode = Environment.GetEnvironmentVariable("localMode", EnvironmentVariableTarget.Process) ?? "true";

            // string body = new StreamReader(req.Body).ReadToEnd();
            // var repoName = GetReqParams(req, data, "repoName", "NeverSink-EconomyUpdated-Filter");
            // var leagueType = GetReqParams(req, data.leagueType, "leagueType", "tmpstandard");

            dynamic data = JsonConvert.DeserializeObject(req);

            string leagueType = data.leagueType ?? "tmpstandard";
            string repoName   = data.repoName ?? "NeverSink-EconomyUpdated-Filter";

            string league = requestedLeagueName; //GetReqParams(req, data, "currentLeague", "Metamorph");

            LoggingFacade.LogInfo($"[CONFIG] leagueType: {leagueType}");
            LoggingFacade.LogInfo($"[CONFIG] league: {league}");
            LoggingFacade.LogInfo($"[CONFIG] repoName: {repoName}");
            LoggingFacade.LogInfo($"[CONFIG] localMode: {localMode}");

            FilterPolishConfig.ApplicationExecutionMode = ExecutionMode.Function;

            if (localMode == "true")
            {
                FilterPolishConfig.ActiveRequestMode = RequestType.Dynamic;
            }
            else
            {
                FilterPolishConfig.ActiveRequestMode = RequestType.ForceOnline;
            }

            DataFiles = new DataFileRequestFacade();
            LoggingFacade.LogInfo($"[CONFIG] FileRequestFacade Created!");

            FileRequestResult dataRes = DataFiles.GetAllFiles(league, leagueType);

            // 3) Parse filter
            FilterAccessFacade.PrimaryFilter = new Filter(DataFiles.SeedFilter);
            var newVersion = FilterAccessFacade.PrimaryFilter.GetHeaderMetaData("VERSION") + "." + DateTime.Now.Year + "." + DateTime.Now.DayOfYear + "." + DateTime.Now.Hour;

            FilterAccessFacade.PrimaryFilter.SetHeaderMetaData("VERSION", newVersion);

            LoggingFacade.LogInfo($"[CONFIG] version: {newVersion}");
            LoggingFacade.LogInfo($"[DEBUG] FileRequestResult: {dataRes.ToString()}");
            LoggingFacade.LogInfo($"[DEBUG] League Active: {EconomyData.IsLeagueActive().ToString()}");

            // null check the ecoData in case of disabled/early leagues
            if (dataRes == FileRequestResult.Success)
            {
                // 4) Load tier list information and enrichment procedures
                var tiers = FilterAccessFacade.PrimaryFilter.ExtractTiers(FilterPolishConfig.FilterTierLists);
                TierListFacade.TierListData = tiers;
                EconomyData.CreateSubEconomyTiers();

                ConcreteEnrichmentProcedures.Initialize();
                EconomyData.EnrichAll(EnrichmentProcedureConfiguration.PriorityEnrichmentProcedures);
                FilterPolishUtil.FilterPolishConfig.AdjustPricingInformation();
                EconomyData.EnrichAll(EnrichmentProcedureConfiguration.EnrichmentProcedures);

                // EconomyData.PerformClassAbstractionProcedures();

                TierListFacade.TierListData.Values.ToList().ForEach(x => x.ReEvaluate());

                // 5) Generate Suggestions
                var economyTieringSystem = new ConcreteEconomyRules();
                economyTieringSystem.GenerateSuggestions();

                // 6) Apply suggestions
                TierListFacade.ApplyAllSuggestions();
            }

            // 7) Generate changelogs
            // todo

            LoggingFacade.LogInfo($"[DEBUG] Seedfiler regeneration done. Starting publishing...");

            // 8) Generate and Upload Filters
            new FilterPublisher(FilterAccessFacade.PrimaryFilter, repoName, leagueType).Run(dataRes);
        }
Esempio n. 15
0
        public static void PerformMainRoutine()
        {
            // 0) Cleanup
            EconomyData?.Clean();
            ItemInfoData?.Clean();
            TierListFacade?.Clean();
            FilterAccessFacade?.Clean();

            EconomyData        = EconomyRequestFacade.GetInstance();
            TierListFacade     = TierListFacade.GetInstance();
            FilterAccessFacade = FilterAccessFacade.GetInstance();
            ItemInfoData       = ItemInformationFacade.GetInstance();

            // 0) Get Current League information etc
            // 1) Acquire Data
            var league    = Environment.GetEnvironmentVariable("ninjaLeague", EnvironmentVariableTarget.Process) ?? "tmpstandard";
            var localMode = Environment.GetEnvironmentVariable("localMode", EnvironmentVariableTarget.Process) ?? "true";

            if (localMode == "true")
            {
                FilterPolishConfig.ActiveRequestMode = RequestType.Dynamic;
            }
            else
            {
                FilterPolishConfig.ActiveRequestMode = RequestType.ForceOnline;
            }

            DataFiles = new DataFileRequestFacade();
            DataFiles.GetAllFiles(league);

            // 2) Test Data
            // todo

            // 3) Parse filter
            FilterAccessFacade.PrimaryFilter = new Filter(DataFiles.SeedFilter);

            // 4) Load ier list information and enrichment procedures
            var tiers = FilterAccessFacade.PrimaryFilter.ExtractTiers(FilterPolishConfig.FilterTierLists);

            TierListFacade.TierListData = tiers;
            CreateSubEconomyTiers();

            ConcreteEnrichmentProcedures.Initialize();
            EconomyData.EnrichAll(EnrichmentProcedureConfiguration.PriorityEnrichmentProcedures);
            FilterPolishUtil.FilterPolishConfig.AdjustPricingInformation();
            EconomyData.EnrichAll(EnrichmentProcedureConfiguration.EnrichmentProcedures);

            TierListFacade.TierListData.Values.ToList().ForEach(x => x.ReEvaluate());

            // 5) Generate Suggestions
            var economyTieringSystem = new ConcreteEconomyRules();

            economyTieringSystem.GenerateSuggestions();

            // 6) Apply suggestions
            TierListFacade.ApplyAllSuggestions();

            // 7) Generate changelogs
            // todo

            // 8) Generate and Upload Filters
            new FilterPublisher(FilterAccessFacade.PrimaryFilter).Run();
        }
        public void Execute()
        {
            InfluencedItemInformation = null;
            LoggingFacade.LogInfo($"Performing Influenced Class Abstractions");

            List <KeyValuePair <float, string> > sortedConfList      = new List <KeyValuePair <float, string> >();
            List <KeyValuePair <float, string> > sortedPriceList     = new List <KeyValuePair <float, string> >();
            List <KeyValuePair <float, string> > sortedFullPriceList = new List <KeyValuePair <float, string> >();

            var abstractionList = new InfluenceBTA();

            foreach (var section in EconomyRequestFacade.GetInstance().EconomyTierlistOverview)
            {
                if (!section.Key.Contains("rare"))
                {
                    continue;
                }

                var currentSection = abstractionList.AddNewSection(section.Key);

                foreach (var item in section.Value)
                {
                    if (BaseTypeDataProvider.BaseTypeData.ContainsKey(item.Key))
                    {
                        var currentBaseType = new BaseBTA();
                        currentBaseType.Name = item.Key;

                        for (int ilvl = 80; ilvl <= 86; ilvl++)
                        {
                            BaseBTA.ItemLevelContext = ilvl;
                            // Atlas bases falsify the results, so we're skipping them.
                            if (FilterPolishConfig.SpecialBases.Contains(item.Key))
                            {
                                currentBaseType.SpecialBase = true;
                            }

                            // We need to access the facade to augment eco information with basetypedata
                            var itemInfo = BaseTypeDataProvider.BaseTypeData[item.Key];

                            var dropLevel = int.Parse(itemInfo["DropLevel"]);
                            var itemClass = itemInfo["Class"].ToLower();

                            // New section treatment
                            if (!currentSection.Classes.ContainsKey(itemClass))
                            {
                                currentSection.AddNewClass(itemClass);
                            }

                            currentSection[itemClass][item.Key] = currentBaseType;
                            currentBaseType.EnterPrice(ilvl, item.Value, itemClass);
                        }
                    }
                }


                // Sort each list and omit the outliers
                var filteredValueList     = new Dictionary <string, List <float> >();
                var filteredFullValueList = new Dictionary <string, List <float> >();

                for (int ilvl = 80; ilvl <= 86; ilvl++)
                {
                    BaseBTA.ItemLevelContext = ilvl;
                    foreach (var item in currentSection.Classes)
                    {
                        item.Value.CreateList();
                        var confPrice = item.Value.BaseTypesList
                                        .Where(x => !x.SpecialBase).Average(x => x.ConfValueList.Count == 0 ? 0 : x.ConfValueList[ilvl]);

                        var fullPrice = item.Value.BaseTypesList
                                        .Where(x => !x.SpecialBase).Average(x => x.FullValueList[ilvl]);

                        var validPrices = item.Value.BaseTypesList.Count(x => x.ConfValueList[ilvl] > 0.5f);

                        item.Value.AvgConfidence = item.Value.BaseTypes.Average(x => x.Value.Confidence);
                        item.Value.ConfPrices.Add(ilvl, confPrice);
                        item.Value.FullPrices.Add(ilvl, fullPrice);
                        item.Value.ValidItems.Add(ilvl, validPrices);

                        if (ilvl == 86)
                        {
                            sortedPriceList.Add(new KeyValuePair <float, string>(confPrice, $"[{ilvl}]{section.Key} >> {item.Key} >> { confPrice } { fullPrice } VALID: { validPrices }/{ item.Value.BaseTypes.Count }"));
                        }
                    }
                }
            }

            var sortedValueList1 = sortedPriceList.OrderBy(x => x.Key).ToList();

            foreach (var item in sortedValueList1)
            {
                LoggingFacade.LogDebug(item.Value);
            }

            InfluencedItemInformation = abstractionList;
        }