private async Task <bool> Moving() { if (AdvDia.CurrentWorldScene.Name.ToLower().Contains(SceneName.ToLower())) { State = States.Completed; return(false); } if (_zergEnabled) { SafeZerg.Instance.EnableZerg(); } if (await NavigationCoroutine.MoveTo(_objectiveLocation, 10)) { if (AdvDia.MyPosition.Distance(_objectiveLocation) > 30 && NavigationCoroutine.LastResult == CoroutineResult.Failure && _failureCount < 10) { _failureCount++; _previouslyFoundLocation = _objectiveLocation; _returnTimeForPreviousLocation = PluginTime.CurrentMillisecond; _objectiveLocation = Vector3.Zero; _objectiveScanRange = Math.Max(ActorFinder.LowerSearchRadius(_objectiveScanRange), 250); Core.Logger.Log($"Search Radius changed to {_objectiveScanRange}"); State = States.Searching; return(false); } State = States.Completed; return(false); } return(false); }
private List <Scene> GetPScenesByName(IEnumerable <Scene> allScenes) { if (string.IsNullOrWhiteSpace(SceneName)) { return(new List <Scene>()); } try { var matchingScenes = allScenes.Where(s => s.Name.ToLower().Contains(SceneName.ToLower())); return(matchingScenes.ToList()); } catch (Exception ex) { Logger.Log(ex.ToString()); return(new List <Scene>()); } }
/// <summary> /// Finds a navigable point in a priority scene /// </summary> private void FindPrioritySceneTarget() { if (SceneId == 0 && String.IsNullOrEmpty(SceneName)) { return; } //gp.Update(); if (PrioritySceneTarget != Vector3.Zero) { return; } var foundPriorityScene = false; // find any matching priority scenes in scene manager - match by name or SNOId var PScenes = ZetaDia.Scenes.GetScenes() .Where(s => s.SceneInfo.SNOId == SceneId).ToList(); PScenes.AddRange(ZetaDia.Scenes.GetScenes() .Where(s => !String.IsNullOrEmpty(SceneName.Trim()) && s.Name.ToLower().Contains(SceneName.ToLower())).ToList()); var foundPriorityScenes = new List <Scene>(); var foundPrioritySceneIndex = new Dictionary <int, Vector3>(); foreach (var scene in PScenes) { if (PriorityScenesInvestigated.Contains(scene.SceneInfo.SNOId)) { continue; } foundPriorityScene = true; var navZone = scene.Mesh.Zone; var zoneDef = navZone.NavZoneDef; var zoneCenter = GetNavZoneCenter(navZone); var NavCells = zoneDef.NavCells.Where(c => c.Flags.HasFlag(NavCellFlags.AllowWalk)).ToList(); if (!NavCells.Any()) { continue; } var bestCell = NavCells.OrderBy(c => GetNavCellCenter(c.Min, c.Max, navZone).Distance2D(zoneCenter)).FirstOrDefault(); if (bestCell != null) { foundPrioritySceneIndex.Add(scene.SceneInfo.SNOId, GetNavCellCenter(bestCell, navZone)); foundPriorityScenes.Add(scene); } else { Logger.DBLog.DebugFormat("Found Priority Scene but could not find a navigable point!"); } } if (foundPrioritySceneIndex.Any()) { var nearestPriorityScene = foundPrioritySceneIndex.OrderBy(s => s.Value.Distance2D(myPos)).FirstOrDefault(); PrioritySceneSNOId = nearestPriorityScene.Key; PrioritySceneTarget = nearestPriorityScene.Value; CurrentPriorityScene = foundPriorityScenes.FirstOrDefault(s => s.SceneInfo.SNOId == PrioritySceneSNOId); Logger.DBLog.DebugFormat("Found Priority Scene {0} - {1} Center {2} Distance {3:0}", CurrentPriorityScene.Name, CurrentPriorityScene.SceneInfo.SNOId, PrioritySceneTarget, PrioritySceneTarget.Distance2D(myPos)); } if (!foundPriorityScene) { PrioritySceneTarget = Vector3.Zero; } }
/// <summary> /// Finds a navigable point in a priority scene /// </summary> private void FindPrioritySceneTarget() { if (SceneId == 0 && SceneName == String.Empty) { return; } gp.Update(); if (PrioritySceneTarget != Vector3.Zero) { return; } bool foundPriorityScene = false; // find any matching priority scenes in scene manager - match by name or SNOId List <Scene> PScenes = ZetaDia.Scenes.GetScenes() .Where(s => s.SceneInfo.SNOId == SceneId).ToList(); PScenes.AddRange(ZetaDia.Scenes.GetScenes() .Where(s => SceneName.Trim() != String.Empty && s.Name.ToLower().Contains(SceneName.ToLower())).ToList()); List <Scene> foundPriorityScenes = new List <Scene>(); Dictionary <int, Vector3> foundPrioritySceneIndex = new Dictionary <int, Vector3>(); foreach (Scene scene in PScenes) { if (PriorityScenesInvestigated.Contains(scene.SceneInfo.SNOId)) { continue; } foundPriorityScene = true; NavZone navZone = scene.Mesh.Zone; NavZoneDef zoneDef = navZone.NavZoneDef; Vector2 zoneMin = navZone.ZoneMin; Vector2 zoneMax = navZone.ZoneMax; Vector3 zoneCenter = GetNavZoneCenter(navZone); List <NavCell> NavCells = zoneDef.NavCells.Where(c => c.Flags.HasFlag(NavCellFlags.AllowWalk)).ToList(); if (!NavCells.Any()) { continue; } NavCell bestCell = NavCells.OrderBy(c => GetNavCellCenter(c.Min, c.Max, navZone).Distance2D(zoneCenter)).FirstOrDefault(); if (bestCell != null) { foundPrioritySceneIndex.Add(scene.SceneInfo.SNOId, GetNavCellCenter(bestCell, navZone)); foundPriorityScenes.Add(scene); } else { DbHelper.Log(TrinityLogLevel.Normal, LogCategory.ProfileTag, "Found Priority Scene but could not find a navigable point!", true); } } if (foundPrioritySceneIndex.Any()) { KeyValuePair <int, Vector3> nearestPriorityScene = foundPrioritySceneIndex.OrderBy(s => s.Value.Distance2D(myPos)).FirstOrDefault(); PrioritySceneSNOId = nearestPriorityScene.Key; PrioritySceneTarget = nearestPriorityScene.Value; CurrentPriorityScene = foundPriorityScenes.FirstOrDefault(s => s.SceneInfo.SNOId == PrioritySceneSNOId); DbHelper.Log(TrinityLogLevel.Normal, LogCategory.ProfileTag, "Found Priority Scene {0} - {1} Center {2} Distance {3:0}", CurrentPriorityScene.Name, CurrentPriorityScene.SceneInfo.SNOId, PrioritySceneTarget, PrioritySceneTarget.Distance2D(myPos)); } if (!foundPriorityScene) { PrioritySceneTarget = Vector3.Zero; } }