private async Task <bool> Interaction() { if (!_commandtableCompletemissionsWaittimer.IsFinished) { return(true); } _commandtableCompletemissionsWaittimer.Reset(); if (GarrisonManager.AvailableMissionIds.Count == 0) { await Coroutine.Yield(); return(false); } if (LuaUI.MissionFrame.IsMissionCompleteDialogVisible) { //Complete Dialog is visible.. //We need to add complete missions to coroutines //Add it again.. //Finish this behavior GarrisonBase.Log("Garrison Mission Complete Is Visible!"); BehaviorManager.Behaviors.Insert(1, new BehaviorMissionComplete()); BehaviorManager.Behaviors.Insert(2, new BehaviorMissionStartup()); LuaUI.MissionFrame.Close.Click(); await CommonCoroutines.SleepForRandomUiInteractionTime(); await Coroutine.Yield(); return(false); } //Find our next mission.. if any. double _successChance = 0; if (_currentMission == null) { int[] followerIds; var removalList = new List <int>(); for (int i = 0; i < GarrisonManager.AvailableMissions.Count; i++) { var mission = GarrisonManager.AvailableMissions[i]; if (mission.Level >= mission.MinimumLevel && mission.Priority > 0 && mission.Cost <= Character.Player.AvailableGarrisonResource) { _successChance = LuaCommands.GetMissionBestSuccessAttempt(mission.Id, out followerIds); if (_successChance < mission.SuccessRate) { removalList.Add(i); continue; } _currentMission = mission; break; } removalList.Add(i); } if (removalList.Count > 0) { foreach (var mission in removalList.OrderByDescending(k => k).Select(k => GarrisonManager.AvailableMissions[k])) { GarrisonManager.AvailableMissionIds.Remove(mission.Id); GarrisonManager.AvailableMissions.Remove(mission); } } } if (_currentMission != null) { GarrisonBase.Log("Starting Mission {0} Rewards {1} Priority {2} Success {3}", _currentMission.Name, _currentMission.RewardTypes, _currentMission.Priority, _successChance); //GARRISON_FOLLOWER_LIST_UPDATE await CommonCoroutines.WaitForLuaEvent("GARRISON_FOLLOWER_LIST_UPDATE", 7500, null, Action); await Coroutine.Sleep(2218); await CommonCoroutines.WaitForLuaEvent("GARRISON_MISSION_STARTED", 7500, null, LuaUI.MissionFrame.StartMissionButton.Click); await Coroutine.Sleep(2500); //LuaCommands.CloseMission(); //await Coroutine.Sleep(1500); GarrisonManager.AvailableMissionIds.Remove(_currentMission.Id); GarrisonManager.AvailableMissions.Remove(_currentMission); _currentMission = null; await Coroutine.Yield(); return(true); } _currentMission = null; GarrisonManager.AvailableMissions.Clear(); GarrisonManager.AvailableMissionIds.Clear(); return(false); }