コード例 #1
0
        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);
        }
コード例 #2
0
        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>());
            }
        }
コード例 #3
0
        /// <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;
            }
        }
コード例 #4
0
        /// <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;
            }
        }