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;
}