private async Task <bool> BehaviorRoutine() { //Refresh Active Quests and Check that we are still in the reward step.. FunkyGame.Bounty.RefreshActiveQuests(); if (!FunkyGame.Bounty.ActiveQuests.ContainsKey(337492) || FunkyGame.Bounty.ActiveQuests[337492].Step != 34) { Logger.DBLog.Info("Active Quest no longer valid for reward!"); m_IsDone = true; return(true); } //Check if the rift key upgrade continue button is visible if (UI.ValidateUIElement(UI.Game.RiftReward_UpgradeKey_ContinueButton)) { UI.Game.RiftReward_UpgradeKey_ContinueButton.Click(); await Coroutine.Sleep(250); await Coroutine.Yield(); } if (!delayer.Test(5)) { await Coroutine.Sleep(250); await Coroutine.Yield(); } //Check if the NPC dialog is still valid if (!UI.ValidateUIElement(UI.Game.SalvageMainPage)) { Logger.DBLog.Info("Rift Reward Dialog not valid."); m_IsDone = true; return(true); } //Upgrading Gems? if (UI.Game.RiftReward_gemUpgradePane_UpgradeButton.IsVisible) { if (!delayer.Test(10)) { await Coroutine.Sleep(250); await Coroutine.Yield(); } Logger.DBLog.Info("Upgrading Gems.."); //Update our variables (UIElements of gems, number of gems, and the gem ACDItems) if (SelectableGems.Count == 0) { GRiftLevel = GetTieredLootLevel(); SelectableUIGemElements = GetGemUIElements(); int totalGemUIElements = SelectableUIGemElements.Count; SelectableUIGemElementIndexs = GetGemACDGuids(totalGemUIElements); SelectableGems = GetGemCacheACDItems(SelectableUIGemElementIndexs).OrderByDescending(i => i.LegendaryGemRank).ToList(); Logger.DBLog.DebugFormat("Total number of possible gems to upgrade {0}", SelectableGems.Count); double minSucessChance = FunkyBaseExtension.Settings.AdventureMode.GemUpgradingMinimumSuccessRate; if (FunkyBaseExtension.Settings.AdventureMode.GemUpgradeType == SettingAdventureMode.GemUpgradingType.HighestRank) { if (SelectableGems.Any(i => ItemFunc.GetLegendaryGemUpgradeChance(GRiftLevel, i.LegendaryGemRank) >= minSucessChance)) { SelectableGems = SelectableGems.Where(i => ItemFunc.GetLegendaryGemUpgradeChance(GRiftLevel, i.LegendaryGemRank) >= minSucessChance).OrderByDescending(i => i.LegendaryGemRank).ToList(); } else { SelectableGems = SelectableGems.OrderByDescending(i => i.LegendaryGemRank).ToList(); } } else if (FunkyBaseExtension.Settings.AdventureMode.GemUpgradeType == SettingAdventureMode.GemUpgradingType.LowestRank) { if (SelectableGems.Any(i => ItemFunc.GetLegendaryGemUpgradeChance(GRiftLevel, i.LegendaryGemRank) >= minSucessChance)) { SelectableGems = SelectableGems.Where(i => ItemFunc.GetLegendaryGemUpgradeChance(GRiftLevel, i.LegendaryGemRank) >= minSucessChance).OrderBy(i => i.LegendaryGemRank).ToList(); } else { SelectableGems = SelectableGems.OrderBy(i => i.LegendaryGemRank).ToList(); } } else if (FunkyBaseExtension.Settings.AdventureMode.GemUpgradeType == SettingAdventureMode.GemUpgradingType.Priority && FunkyBaseExtension.Settings.AdventureMode.GemUpgradePriorityList.Count > 0) { if (SelectableGems.Any(i => FunkyBaseExtension.Settings.AdventureMode.GemUpgradePriorityList.Contains(i.LegendaryGemType) && ItemFunc.GetLegendaryGemUpgradeChance(GRiftLevel, i.LegendaryGemRank) >= minSucessChance)) { //Select only Prioritized Gems SelectableGems = SelectableGems.Where(i => FunkyBaseExtension.Settings.AdventureMode.GemUpgradePriorityList.Contains(i.LegendaryGemType) && ItemFunc.GetLegendaryGemUpgradeChance(GRiftLevel, i.LegendaryGemRank) >= minSucessChance).ToList(); //Create new list with priority order List <CacheACDItem> PrioritizedList = new List <CacheACDItem>(); for (int i = 0; i < FunkyBaseExtension.Settings.AdventureMode.GemUpgradePriorityList.Count - 1; i++) { var LegenadryEnumValue = FunkyBaseExtension.Settings.AdventureMode.GemUpgradePriorityList[i]; if (SelectableGems.Any(item => item.LegendaryGemType == LegenadryEnumValue && ItemFunc.GetLegendaryGemUpgradeChance(GRiftLevel, item.LegendaryGemRank) >= minSucessChance)) { var acditem = SelectableGems.First(item => item.LegendaryGemType == LegenadryEnumValue && ItemFunc.GetLegendaryGemUpgradeChance(GRiftLevel, item.LegendaryGemRank) >= minSucessChance); PrioritizedList.Add(acditem); } } if (PrioritizedList.Count > 0) { SelectableGems = PrioritizedList; } } } else { if (SelectableGems.Any(i => ItemFunc.GetLegendaryGemUpgradeChance(GRiftLevel, i.LegendaryGemRank) >= minSucessChance)) { SelectableGems = SelectableGems.Where(i => ItemFunc.GetLegendaryGemUpgradeChance(GRiftLevel, i.LegendaryGemRank) >= minSucessChance).ToList(); } } Logger.DBLog.InfoFormat("Number of Gems capable of upgrading {0}", SelectableGems.Count); foreach (var gem in SelectableGems) { double successChance = ItemFunc.GetLegendaryGemUpgradeChance(GRiftLevel, gem.LegendaryGemRank); Logger.DBLog.DebugFormat("Upgrade Capable Gem {0} with Chance {1}%", gem.LegendaryGemType, (successChance * 100).ToString()); } } //Check if the upgrade button is enabled.. if not we select our gem! if (!UI.Game.RiftReward_gemUpgradePane_UpgradeButton.IsEnabled) { //Set our default upgrade to our highest ranked (thats not 0%) var upgradingGem = SelectableGems.FirstOrDefault(); int selectIndex = SelectableUIGemElementIndexs.IndexOf(upgradingGem.ACDGUID); string GemName = upgradingGem.ThisRealName + " Rank " + upgradingGem.LegendaryGemRank + " Chance " + ItemFunc.GetLegendaryGemUpgradeChance(GRiftLevel, upgradingGem.LegendaryGemRank); Logger.DBLog.InfoFormat("Upgrading Gem {0}", GemName); //Select the Gem UIElement UI.Game.RiftReward_gemUpgradePane_List.ItemsListSetSelectedItemByIndex(selectIndex); await Coroutine.Sleep(250); await Coroutine.Yield(); } else { UI.Game.RiftReward_gemUpgradePane_UpgradeButton.Click(); await Coroutine.Sleep(250); await Coroutine.Yield(); } } else { Logger.DBLog.Info("Reward Selection.."); //Click continue after selecting a reward (not used currently) if (UI.ValidateUIElement(UI.Game.RiftReward_UpgradeContinue)) { UI.Game.RiftReward_UpgradeContinue.Click(); await Coroutine.Sleep(250); await Coroutine.Yield(); } //Validate that upgrade key is enabled.. then attempt to upgrade! if (Reward == RewardType.Key && UI.Game.RiftReward_Choice_UpgradeKey.IsEnabled && ZetaDia.Me.AttemptUpgradeKeystone()) { Logger.DBLog.Info("Keystone Upgraded"); UIManager.CloseAllOpenFrames(); await Coroutine.Sleep(250); await Coroutine.Yield(); } else { //Doing Gem Upgrade.. GRiftLevel = GetTieredLootLevel(); var Gems = GetGemCacheACDItems().OrderByDescending(i => i.LegendaryGemRank).ToList(); if (Gems.Count > 0) { //Logger.DBLog.InfoFormat("Upgrading Gem {0}", Gems[0].ThisRealName); await CommonCoroutines.AttemptUpgradeGem(Gems[0].ACDItem); await Coroutine.Sleep(250); await Coroutine.Yield(); } else { Reward = RewardType.Key; await Coroutine.Sleep(250); await Coroutine.Yield(); } } } return(true); }
private bool MoveItems() { if (MovingItemList.Count > 0) { //Logger.DBLog.DebugFormat("Moving Items!"); if (!Delay.Test()) { return(true); } CacheACDItem thisitem = MovingItemList.FirstOrDefault(); if (Itemsource == ItemSource.Backpack) { if (LastStashPoint[0] < 0 && LastStashPoint[1] < 0 && LastStashPage < 0) { bool bDidStashSucceed = StashAttempt(thisitem, out LastStashPoint, out LastStashPage); if (!bDidStashSucceed) { Logger.DBLog.DebugFormat("There was an unknown error stashing an item."); //if (OutOfGame.MuleBehavior) return RunStatus.Success; } else { return(true); } } else { //We have a valid place to stash.. so lets check if stash page is currently open if (ZetaDia.Me.Inventory.CurrentStashPage == LastStashPage) { //FunkyTownRunPlugin.TownRunStats.StashedItemLog(thisitem); ZetaDia.Me.Inventory.MoveItem(thisitem.ThisDynamicID, ZetaDia.Me.CommonData.DynamicId, InventorySlot.SharedStash, LastStashPoint[0], LastStashPoint[1]); LastStashPoint = new[] { -1, -1 }; LastStashPage = -1; MovingItemList.Remove(thisitem); if (MovingItemList.Count > 0) { return(true); } } else { //Lets switch the current page.. ZetaDia.Me.Inventory.SwitchStashPage(LastStashPage); return(true); } } } else { if (LastStashPoint[0] < 0 && LastStashPoint[1] < 0) { bool bDidStashSucceed = BackpackStashAttempt(thisitem, out LastStashPoint); if (!bDidStashSucceed) { Logger.DBLog.DebugFormat("There was an unknown error stashing an item."); } else { return(true); } } else { ZetaDia.Me.Inventory.MoveItem(thisitem.ThisDynamicID, ZetaDia.Me.CommonData.DynamicId, InventorySlot.BackpackItems, LastStashPoint[0], LastStashPoint[1]); LastStashPoint = new[] { -1, -1 }; MovingItemList.Remove(thisitem); if (MovingItemList.Count > 0) { return(true); } } } } m_IsDone = true; return(false); }
internal static RunStatus Behavior() { if (ZetaDia.IsLoadingWorld) { return(RunStatus.Running); } if (FunkyGame.GameIsInvalid) { return(RunStatus.Success); } FunkyGame.Hero.Update(false, true); //Are we inside goblin world? if (FunkyGame.Hero.CurrentWorldID != 409093 && FunkyGame.Hero.CurrentWorldID != 379962 && FunkyGame.Hero.CurrentWorldID != 380774) { //Already Loaded Profile? if (LoadedGoblinProfile) { ProfileManager.Load(LastUsedProfile); ProfileManager.UpdateCurrentProfileBehavior(); LoadedGoblinProfile = false; LastUsedProfile = String.Empty; BehaviorEngaged = false; BlacklistedRAGUIDs.Add(Portal.RAGUID); Portal = null; Logger.DBLog.Info("Finished Running Goblin World!"); return(RunStatus.Success); } if (Portal == null) { Logger.DBLog.Info("Portal is null!"); BehaviorEngaged = false; return(RunStatus.Success); } if (Portal.WorldID != FunkyGame.Hero.CurrentWorldID) { Logger.DBLog.InfoFormat("Portal World ID Mismatched! Portal {0} Hero {1}", Portal.WorldID, FunkyGame.Hero.CurrentWorldID); //Not in the same world as portal object! Portal = null; BehaviorEngaged = false; return(RunStatus.Success); } else { //Move to portal.. //Handle Targeting.. if (FunkyGame.Targeting.CheckHandleTarget() == RunStatus.Running) { return(RunStatus.Running); } if (Portal.CentreDistance > 10f) { Logger.DBLog.Info("Moving To Portal!"); Navigation.Navigation.NP.MoveTo(Portal.Position, "", true); return(RunStatus.Running); } else { if (Portal.IsStillValid()) { if (!delayer.Test()) { return(RunStatus.Running); } Logger.DBLog.Info("At Portal!"); Portal.ref_DiaObject.Interact(); return(RunStatus.Running); } else { Logger.DBLog.Info("Portal No Longer Valid!"); return(RunStatus.Running); } } } } else { Logger.DBLog.Info("Inside Goblin World!"); if (!ProfileManager.CurrentProfile.Path.Contains(FolderPaths.PluginPath + @"\Behaviors\Profiles\")) { Logger.DBLog.Info("Loading Profile.."); LastUsedProfile = ProfileManager.CurrentProfile.Path; if (FunkyGame.Hero.CurrentWorldID == 409093) { ProfileManager.Load(FolderPaths.PluginPath + @"\Behaviors\Profiles\Goblin_Whimsydale.xml"); ProfileManager.UpdateCurrentProfileBehavior(); LoadedGoblinProfile = true; } if (FunkyGame.Hero.CurrentWorldID == 379962) { Logger.DBLog.Info("Profile for world 379962 not supported!"); } if (FunkyGame.Hero.CurrentWorldID == 380774) { Logger.DBLog.Info("Profile for world 380774 not supported!"); } } return(RunStatus.Success); } return(RunStatus.Running); }