Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }