public void ProcessPlayerWatchList()
        {
            PlayerList.Clear();
            MyAPIGateway.Players.GetPlayers(PlayerList);

            foreach (var player in PlayerList)
            {
                if (player.IsBot == true || player.Character == null)
                {
                    continue;
                }

                if (playerWatchList.ContainsKey(player) == true)
                {
                    //Regular Timers

                    if (Settings.General.EnableSpaceCargoShips == true)
                    {
                        playerWatchList[player].SpaceCargoShipTimer -= Settings.General.PlayerWatcherTimerTrigger;
                    }

                    if (Settings.General.EnablePlanetaryCargoShips == true)
                    {
                        playerWatchList[player].AtmoCargoShipTimer -= Settings.General.PlayerWatcherTimerTrigger;
                    }

                    if (Settings.General.EnableRandomEncounters == true)
                    {
                        //CoolDown Timers
                        if (playerWatchList[player].RandomEncounterCoolDownTimer > 0)
                        {
                            playerWatchList[player].RandomEncounterCoolDownTimer -= Settings.General.PlayerWatcherTimerTrigger;
                        }
                        else
                        {
                            playerWatchList[player].RandomEncounterCheckTimer -= Settings.General.PlayerWatcherTimerTrigger;
                        }

                        if (playerWatchList[player].RandomEncounterDistanceCoordCheck == Vector3D.Zero)
                        {
                            playerWatchList[player].RandomEncounterDistanceCoordCheck = player.GetPosition();
                        }
                    }

                    if (Settings.General.EnablePlanetaryInstallations == true)
                    {
                        if (playerWatchList[player].PlanetaryInstallationCooldownTimer > 0)
                        {
                            playerWatchList[player].PlanetaryInstallationCooldownTimer -= Settings.General.PlayerWatcherTimerTrigger;
                        }
                        else
                        {
                            playerWatchList[player].PlanetaryInstallationCheckTimer -= Settings.General.PlayerWatcherTimerTrigger;
                        }
                    }

                    if (Settings.General.EnableBossEncounters == true)
                    {
                        if (BossEncounterSpawner.IsPlayerInBossEncounter(player.IdentityId) == false)
                        {
                            if (playerWatchList[player].BossEncounterCooldownTimer > 0)
                            {
                                playerWatchList[player].BossEncounterCooldownTimer -= Settings.General.PlayerWatcherTimerTrigger;
                            }
                            else
                            {
                                playerWatchList[player].BossEncounterCheckTimer -= Settings.General.PlayerWatcherTimerTrigger;
                            }
                        }
                    }

                    //Apply Increment to Timers and Engage Spawners When Appropriate
                    if (playerWatchList[player].SpaceCargoShipTimer <= 0 && NPCWatcher.PendingNPCs.Count == 0)
                    {
                        playerWatchList[player].SpaceCargoShipTimer = rnd.Next(Settings.SpaceCargoShips.MinSpawnTime, Settings.SpaceCargoShips.MaxSpawnTime);
                        Logger.SkipNextMessage = true;
                        Logger.AddMsg("Attempting Space/Lunar Cargo Ship Spawn Near Player: " + player.DisplayName);
                        Logger.SkipNextMessage = true;
                        var spawnResult = SpaceCargoShipSpawner.AttemptSpawn(player.GetPosition());
                        Logger.AddMsg(spawnResult);
                    }

                    if (playerWatchList[player].AtmoCargoShipTimer <= 0 && NPCWatcher.PendingNPCs.Count == 0)
                    {
                        playerWatchList[player].AtmoCargoShipTimer = rnd.Next(Settings.PlanetaryCargoShips.MinSpawnTime, Settings.PlanetaryCargoShips.MaxSpawnTime);
                        Logger.SkipNextMessage = true;
                        Logger.AddMsg("Attempting Planetary Cargo Ship Spawn Near Player: " + player.DisplayName);
                        Logger.SkipNextMessage = true;
                        var spawnResult = PlanetaryCargoShipSpawner.AttemptSpawn(player.GetPosition());
                        Logger.AddMsg(spawnResult);
                    }

                    if (playerWatchList[player].RandomEncounterCheckTimer <= 0 && playerWatchList[player].RandomEncounterCoolDownTimer <= 0 && NPCWatcher.PendingNPCs.Count == 0)
                    {
                        playerWatchList[player].RandomEncounterCheckTimer = Settings.RandomEncounters.SpawnTimerTrigger;

                        if (Vector3D.Distance(player.GetPosition(), playerWatchList[player].RandomEncounterDistanceCoordCheck) >= Settings.RandomEncounters.PlayerTravelDistance)
                        {
                            playerWatchList[player].RandomEncounterDistanceCoordCheck = player.GetPosition();
                            Logger.SkipNextMessage = true;
                            Logger.AddMsg("Attempting Random Encounter Spawn Near Player: " + player.DisplayName);
                            Logger.SkipNextMessage = true;
                            var spawnResult = RandomEncounterSpawner.AttemptSpawn(player.GetPosition());
                            Logger.AddMsg(spawnResult);

                            if (spawnResult.StartsWith("Spawning Group - ") == true)
                            {
                                playerWatchList[player].RandomEncounterCoolDownTimer = Settings.RandomEncounters.PlayerSpawnCooldown;
                            }
                        }
                    }

                    if (playerWatchList[player].PlanetaryInstallationCheckTimer <= 0 && playerWatchList[player].PlanetaryInstallationCooldownTimer <= 0 && NPCWatcher.PendingNPCs.Count == 0)
                    {
                        playerWatchList[player].PlanetaryInstallationCheckTimer = Settings.PlanetaryInstallations.SpawnTimerTrigger;
                        Logger.SkipNextMessage = true;
                        Logger.AddMsg("Attempting Planetary Installation Spawn Near Player: " + player.DisplayName);
                        Logger.SkipNextMessage = true;
                        var spawnResult = PlanetaryInstallationSpawner.AttemptSpawn(player.GetPosition(), player);
                        Logger.AddMsg(spawnResult);

                        if (spawnResult.StartsWith("Spawning Group - ") == true)
                        {
                            playerWatchList[player].PlanetaryInstallationCooldownTimer = Settings.PlanetaryInstallations.PlayerSpawnCooldown;
                        }
                    }

                    if (playerWatchList[player].BossEncounterCheckTimer <= 0 && NPCWatcher.PendingNPCs.Count == 0)
                    {
                        playerWatchList[player].BossEncounterCheckTimer = Settings.BossEncounters.SpawnTimerTrigger;
                        Logger.SkipNextMessage = true;
                        Logger.AddMsg("Attempting Boss Encounter Spawn Near Player: " + player.DisplayName);
                        Logger.SkipNextMessage = true;
                        var spawnResult = BossEncounterSpawner.AttemptSpawn(player.GetPosition());
                        Logger.AddMsg(spawnResult);

                        if (spawnResult.StartsWith("Boss Encounter GPS Created") == true)
                        {
                            playerWatchList[player].BossEncounterCooldownTimer = Settings.BossEncounters.PlayerSpawnCooldown;
                        }
                    }
                }
                else
                {
                    var newPlayerWatcher = new PlayerWatcher();
                    playerWatchList.Add(player, newPlayerWatcher);
                }
            }
        }
Example #2
0
        //SpawnBossEncounter
        public static bool SpawnBossEncounter(Vector3D coords, List <string> spawnGroups)
        {
            var result = BossEncounterSpawner.AttemptSpawn(coords, spawnGroups);

            return(result.StartsWith("Boss Encounter GPS Created with Spawngroup"));
        }
        public static string EligibleSpawnGroupsAtPosition(Vector3D coords)
        {
            var sb            = new StringBuilder();
            var validFactions = new Dictionary <string, List <string> >();

            //Spawn Data Near Player
            var selectedSpawnGroup = new ImprovedSpawnGroup();

            SpawnResources.RefreshEntityLists();
            SpawnResources.LastThreatRefresh = SpawnResources.GameStartTime;
            var threatLevel = SpawnResources.GetThreatLevel(selectedSpawnGroup, coords);
            var pcuLevel    = SpawnResources.GetPCULevel(selectedSpawnGroup, coords);

            sb.Append("::: Spawn Data Near Player :::").AppendLine();
            sb.Append(" - Threat Score: ").Append(threatLevel.ToString()).AppendLine();
            sb.Append(" - PCU Score:    ").Append(pcuLevel.ToString()).AppendLine();

            sb.AppendLine();

            //Environment Data Near Player
            var environment = new EnvironmentEvaluation(coords);

            sb.Append("::: Environment Data Near Player :::").AppendLine();
            sb.Append(" - Distance From World Center:  ").Append(environment.DistanceFromWorldCenter.ToString()).AppendLine();
            sb.Append(" - Direction From World Center: ").Append(environment.DirectionFromWorldCenter.ToString()).AppendLine();
            sb.Append(" - Is On Planet:                ").Append(environment.IsOnPlanet.ToString()).AppendLine();
            sb.Append(" - Planet Name:                 ").Append(environment.IsOnPlanet ? environment.NearestPlanetName : "N/A").AppendLine();
            sb.Append(" - Planet Diameter:             ").Append(environment.IsOnPlanet ? environment.PlanetDiameter.ToString() : "N/A").AppendLine();
            sb.Append(" - Oxygen At Position:          ").Append(environment.IsOnPlanet ? environment.OxygenAtPosition.ToString() : "N/A").AppendLine();
            sb.Append(" - Atmosphere At Position:      ").Append(environment.IsOnPlanet ? environment.AtmosphereAtPosition.ToString() : "N/A").AppendLine();
            sb.Append(" - Gravity At Position:         ").Append(environment.IsOnPlanet ? environment.GravityAtPosition.ToString() : "N/A").AppendLine();
            sb.Append(" - Altitude At Position:        ").Append(environment.IsOnPlanet ? environment.AltitudeAtPosition.ToString() : "N/A").AppendLine();
            sb.Append(" - Is Night At Position:        ").Append(environment.IsOnPlanet ? environment.IsNight.ToString() : "N/A").AppendLine();
            sb.Append(" - Weather At Position:         ").Append(environment.IsOnPlanet && !string.IsNullOrWhiteSpace(environment.WeatherAtPosition) ? environment.WeatherAtPosition.ToString() : "N/A").AppendLine();
            sb.Append(" - Common Terrain At Position:  ").Append(environment.IsOnPlanet ? environment.CommonTerrainAtPosition.ToString() : "N/A").AppendLine();

            sb.AppendLine();

            //Space Cargo Ship
            sb.Append("::: Space / Lunar Cargo Ship Eligible Spawns :::").AppendLine();
            var spaceCargoList = SpaceCargoShipSpawner.GetSpaceCargoShips(coords, null, out validFactions);

            foreach (var sgroup in spaceCargoList.Distinct().ToList())
            {
                sb.Append(" - ").Append(sgroup.SpawnGroupName).AppendLine();
            }

            sb.AppendLine();

            //Random Encounter
            sb.Append("::: Random Encounter Eligible Spawns :::").AppendLine().AppendLine();
            var randEncounterList = RandomEncounterSpawner.GetRandomEncounters(coords, null, out validFactions);

            foreach (var sgroup in randEncounterList.Distinct().ToList())
            {
                sb.Append(" - ").Append(sgroup.SpawnGroupName).AppendLine();
            }

            sb.AppendLine();

            //Planetary Cargo Ship
            sb.Append("::: Planetary Cargo Ship Eligible Spawns :::").AppendLine().AppendLine();
            var planetCargoList = PlanetaryCargoShipSpawner.GetPlanetaryCargoShips(coords, null, out validFactions);

            foreach (var sgroup in planetCargoList.Distinct().ToList())
            {
                sb.Append(" - ").Append(sgroup.SpawnGroupName).AppendLine();
            }

            sb.AppendLine();

            //Planetary Installation
            sb.Append("::: Planetary Installation Eligible Spawns :::").AppendLine().AppendLine();
            var smallList         = new List <ImprovedSpawnGroup>();
            var mediumList        = new List <ImprovedSpawnGroup>();
            var largeList         = new List <ImprovedSpawnGroup>();
            var planetStationList = PlanetaryInstallationSpawner.GetPlanetaryInstallations(coords, null, out smallList, out mediumList, out largeList, out validFactions);

            foreach (var sgroup in planetStationList.Distinct().ToList())
            {
                sb.Append(" - ").Append(sgroup.SpawnGroupName).AppendLine();
            }

            sb.AppendLine();

            //Boss Encounter
            sb.Append("::: Boss Encounter Eligible Spawns :::").AppendLine().AppendLine();

            var spawnCoords = Vector3D.Zero;

            if (BossEncounterSpawner.GetInitialSpawnCoords(coords, out spawnCoords) == true)
            {
                var bossList = BossEncounterSpawner.GetBossEncounters(coords, spawnCoords, null);

                foreach (var sgroup in bossList.Distinct().ToList())
                {
                    sb.Append(" - ").Append(sgroup.SpawnGroupName).AppendLine();
                }
            }

            return(sb.ToString());
        }
        public static string EligibleSpawnGroupsAtPosition(Vector3D coords)
        {
            var sb            = new StringBuilder();
            var validFactions = new Dictionary <string, List <string> >();



            //Space Cargo Ship
            sb.Append("::: Space / Lunar Cargo Ship Eligible Spawns :::").AppendLine();
            var spaceCargoList = SpaceCargoShipSpawner.GetSpaceCargoShips(coords, out validFactions);

            foreach (var sgroup in spaceCargoList.Distinct().ToList())
            {
                sb.Append(" - ").Append(sgroup.SpawnGroupName).AppendLine();
            }

            sb.AppendLine();

            //Random Encounter
            sb.Append("::: Random Encounter Eligible Spawns :::").AppendLine().AppendLine();
            var randEncounterList = RandomEncounterSpawner.GetRandomEncounters(coords, out validFactions);

            foreach (var sgroup in randEncounterList.Distinct().ToList())
            {
                sb.Append(" - ").Append(sgroup.SpawnGroupName).AppendLine();
            }

            sb.AppendLine();

            //Planetary Cargo Ship
            sb.Append("::: Planetary Cargo Ship Eligible Spawns :::").AppendLine().AppendLine();
            var planetCargoList = PlanetaryCargoShipSpawner.GetPlanetaryCargoShips(coords, out validFactions);

            foreach (var sgroup in planetCargoList.Distinct().ToList())
            {
                sb.Append(" - ").Append(sgroup.SpawnGroupName).AppendLine();
            }

            sb.AppendLine();

            //Planetary Installation
            sb.Append("::: Planetary Installation Eligible Spawns :::").AppendLine().AppendLine();
            var smallList         = new List <ImprovedSpawnGroup>();
            var mediumList        = new List <ImprovedSpawnGroup>();
            var largeList         = new List <ImprovedSpawnGroup>();
            var planetStationList = PlanetaryInstallationSpawner.GetPlanetaryInstallations(coords, out smallList, out mediumList, out largeList, out validFactions);

            foreach (var sgroup in planetStationList.Distinct().ToList())
            {
                sb.Append(" - ").Append(sgroup.SpawnGroupName).AppendLine();
            }

            sb.AppendLine();

            //Boss Encounter
            sb.Append("::: Boss Encounter Eligible Spawns :::").AppendLine().AppendLine();

            var spawnCoords = Vector3D.Zero;

            if (BossEncounterSpawner.GetInitialSpawnCoords(coords, out spawnCoords) == true)
            {
                var bossList = BossEncounterSpawner.GetBossEncounters(coords, spawnCoords);

                foreach (var sgroup in bossList.Distinct().ToList())
                {
                    sb.Append(" - ").Append(sgroup.SpawnGroupName).AppendLine();
                }
            }

            return(sb.ToString());
        }
Example #5
0
        public static void ServerChatProcessing(SyncData receivedData)
        {
            if (receivedData.ChatMessage.StartsWith("/MES.SSCS") == true)
            {
                receivedData.ChatMessage = receivedData.ChatMessage.Replace("/MES.SSCS", "/MES.Spawn.SpaceCargoShip");
            }

            if (receivedData.ChatMessage.StartsWith("/MES.SRE") == true)
            {
                receivedData.ChatMessage = receivedData.ChatMessage.Replace("/MES.SRE", "/MES.Spawn.RandomEncounter");
            }

            if (receivedData.ChatMessage.StartsWith("/MES.SPCS") == true)
            {
                receivedData.ChatMessage = receivedData.ChatMessage.Replace("/MES.SPCS", "/MES.Spawn.PlanetaryCargoShip");
            }

            if (receivedData.ChatMessage.StartsWith("/MES.SPI") == true)
            {
                receivedData.ChatMessage = receivedData.ChatMessage.Replace("/MES.SPI", "/MES.Spawn.PlanetaryInstallation");
            }

            if (receivedData.ChatMessage.StartsWith("/MES.SBE") == true)
            {
                receivedData.ChatMessage = receivedData.ChatMessage.Replace("/MES.SBE", "/MES.Spawn.BossEncounter");
            }

            //Debug Commands
            if (receivedData.ChatMessage.StartsWith("/MES.") == true)
            {
                //Enable Debug Mode
                if (receivedData.ChatMessage.StartsWith("/MES.EnableDebugMode.") == true)
                {
                    var msgSplit = receivedData.ChatMessage.Split('.');

                    if (msgSplit.Length != 3)
                    {
                        MyVisualScriptLogicProvider.ShowNotification("Invalid Command Received", 5000, "White", receivedData.PlayerId);
                        return;
                    }

                    bool mode = false;

                    if (bool.TryParse(msgSplit[2], out mode) == false)
                    {
                        MyVisualScriptLogicProvider.ShowNotification("Invalid Command Received", 5000, "White", receivedData.PlayerId);
                        return;
                    }

                    Logger.LoggerDebugMode = mode;
                    MyVisualScriptLogicProvider.ShowNotification("Debug Mode Enabled: " + mode.ToString(), 5000, "White", receivedData.PlayerId);
                    return;
                }

                //Debug: InitStoreBlocks
                if (receivedData.ChatMessage.StartsWith("/MES.Debug.InitStoreBlocks") == true)
                {
                    Debug.InitStoreBlocks();
                }

                if (receivedData.ChatMessage.StartsWith("/MES.Debug.Reputation.") == true)
                {
                    Debug.ReputationCheck(receivedData);
                }

                if (receivedData.ChatMessage.StartsWith("/MES.Debug.MoreEcMad") == true)
                {
                    var player = SpawnResources.GetPlayerById(receivedData.PlayerId);

                    if (player != null)
                    {
                        foreach (var faction in MyAPIGateway.Session.Factions.Factions.Keys)
                        {
                            var npcFaction = MyAPIGateway.Session.Factions.Factions[faction];
                            MyAPIGateway.Session.Factions.SetReputationBetweenPlayerAndFaction(player.IdentityId, npcFaction.FactionId, -501);
                        }
                    }
                }

                if (receivedData.ChatMessage.StartsWith("/MES.Debug.MoreEcHostile") == true)
                {
                    var player = SpawnResources.GetPlayerById(receivedData.PlayerId);

                    if (player != null)
                    {
                        foreach (var faction in MyAPIGateway.Session.Factions.Factions.Keys)
                        {
                            var npcFaction = MyAPIGateway.Session.Factions.Factions[faction];
                            MyAPIGateway.Session.Factions.SetReputationBetweenPlayerAndFaction(player.IdentityId, npcFaction.FactionId, -1500);
                        }
                    }
                }

                if (receivedData.ChatMessage.StartsWith("/MES.Debug.MoreEcNeutral") == true)
                {
                    var player = SpawnResources.GetPlayerById(receivedData.PlayerId);

                    if (player != null)
                    {
                        foreach (var faction in MyAPIGateway.Session.Factions.Factions.Keys)
                        {
                            var npcFaction = MyAPIGateway.Session.Factions.Factions[faction];
                            MyAPIGateway.Session.Factions.SetReputationBetweenPlayerAndFaction(player.IdentityId, npcFaction.FactionId, 0);
                        }
                    }
                }

                //Debug.CheckNight
                if (receivedData.ChatMessage.StartsWith("/MES.Debug.CheckNight") == true)
                {
                    MyVisualScriptLogicProvider.ShowNotification("Is Night: " + SpawnResources.IsNight(MyAPIGateway.Session.LocalHumanPlayer.GetPosition()).ToString(), 5000, "White", receivedData.PlayerId);
                    MyVisualScriptLogicProvider.ShowNotification("Time: " + MyAPIGateway.Session.GameDateTime.ToString(), 5000, "White", receivedData.PlayerId);
                    var gameTime = MyAPIGateway.Session.GameDateTime - new DateTime(2081, 1, 1, 0, 0, 0, DateTimeKind.Utc);
                    MyVisualScriptLogicProvider.ShowNotification("Seconds: " + gameTime.TotalSeconds.ToString(), 5000, "White", receivedData.PlayerId);
                }

                //Debug.CheckRemovalStatus
                if (receivedData.ChatMessage.StartsWith("/MES.Debug.CheckRemovalStatus") == true)
                {
                    MyVisualScriptLogicProvider.ShowNotification("Number Of Pending Deletions: " + NPCWatcher.DeleteGridList.Count.ToString(), 5000, "White", receivedData.PlayerId);
                    MyVisualScriptLogicProvider.ShowNotification("Deletion Process Status: " + NPCWatcher.DeleteGrids.ToString(), 5000, "White", receivedData.PlayerId);
                }

                //Debug.Debug.CreateKPL
                if (receivedData.ChatMessage.StartsWith("/MES.Debug.CreateKPL") == true)
                {
                    KnownPlayerLocationManager.AddKnownPlayerLocation(MyAPIGateway.Session.LocalHumanPlayer.GetPosition(), "SPRT", 200, 1, -1);
                }

                //Joke: ComeAtMeBro
                if (receivedData.ChatMessage.StartsWith("/MES.ComeAtMeBro") == true)
                {
                    var playerList = new List <IMyPlayer>();
                    MyAPIGateway.Players.GetPlayers(playerList);
                    IMyPlayer thisPlayer = null;

                    foreach (var player in playerList)
                    {
                        if (player.IdentityId == receivedData.PlayerId)
                        {
                            thisPlayer = player;
                            break;
                        }
                    }

                    if (thisPlayer == null)
                    {
                        return;
                    }

                    int bros = 0;

                    foreach (var cubeGrid in NPCWatcher.ActiveNPCs.Keys.ToList())
                    {
                        if (cubeGrid == null || MyAPIGateway.Entities.Exist(cubeGrid) == false)
                        {
                            continue;
                        }

                        if (cubeGrid.Physics == null)
                        {
                            continue;
                        }

                        if (NPCWatcher.ActiveNPCs[cubeGrid].SpawnType == "SpaceCargoShip")
                        {
                            cubeGrid.Physics.LinearVelocity = Vector3D.Normalize(thisPlayer.GetPosition() - cubeGrid.GetPosition()) * 100;
                            bros++;
                        }
                    }

                    MyVisualScriptLogicProvider.ShowNotification(bros.ToString() + " Bros Coming At You!", 5000, "Red", thisPlayer.IdentityId);
                }

                //RemoveAllNPCs
                if (receivedData.ChatMessage.StartsWith("/MES.RemoveAllNPCs") == true)
                {
                    foreach (var cubeGrid in NPCWatcher.ActiveNPCs.Keys.ToList())
                    {
                        if (cubeGrid == null || MyAPIGateway.Entities.Exist(cubeGrid) == false)
                        {
                            continue;
                        }

                        if (cubeGrid.Physics == null)
                        {
                            continue;
                        }

                        if (NPCWatcher.ActiveNPCs[cubeGrid].CleanupIgnore == false)
                        {
                            NPCWatcher.ActiveNPCs[cubeGrid].FlagForDespawn = true;
                        }
                    }

                    MyVisualScriptLogicProvider.ShowNotification("All Eligible NPC Grids Processed For Removal", 5000, "White", receivedData.PlayerId);
                }

                //Settings
                if (receivedData.ChatMessage.StartsWith("/MES.Settings.") == true)
                {
                    var result = SettingsEditor.EditSettings(receivedData.ChatMessage);
                    MyVisualScriptLogicProvider.ShowNotification(result, 5000, "White", receivedData.PlayerId);
                    return;
                }

                //TryRandomSpawn
                if (receivedData.ChatMessage.StartsWith("/MES.Spawn.") == true)
                {
                    var playerList = new List <IMyPlayer>();
                    MyAPIGateway.Players.GetPlayers(playerList);
                    IMyPlayer thisPlayer = null;

                    foreach (var player in playerList)
                    {
                        if (player.IdentityId == receivedData.PlayerId)
                        {
                            thisPlayer = player;
                            break;
                        }
                    }

                    if (thisPlayer == null)
                    {
                        MyVisualScriptLogicProvider.ShowNotification("Could Not Spawn Encounter: Player Not In Watch List", 5000, "White", receivedData.PlayerId);
                        return;
                    }

                    bool success = false;

                    if (receivedData.ChatMessage.Contains("SpaceCargoShip") == true || receivedData.ChatMessage.Contains("AllSpawns") == true)
                    {
                        if (MES_SessionCore.playerWatchList.ContainsKey(thisPlayer) == true)
                        {
                            SpawnGroupManager.AdminSpawnGroup  = SpecificSpawnGroupRequest(receivedData.ChatMessage, "SpaceCargoShip");
                            MES_SessionCore.PlayerWatcherTimer = 0;
                            MES_SessionCore.playerWatchList[thisPlayer].SpaceCargoShipTimer = 0;
                            MyVisualScriptLogicProvider.ShowNotification("Attempting Random Spawn: Space Cargo Ship", 5000, "White", receivedData.PlayerId);
                            success = true;
                        }
                    }

                    if (receivedData.ChatMessage.Contains("PlanetaryCargoShip") == true)
                    {
                        if (MES_SessionCore.playerWatchList.ContainsKey(thisPlayer) == true)
                        {
                            SpawnGroupManager.AdminSpawnGroup = SpecificSpawnGroupRequest(receivedData.ChatMessage, "PlanetaryCargoShip");
                            MES_SessionCore.playerWatchList[thisPlayer].AtmoCargoShipTimer = 0;
                            MES_SessionCore.PlayerWatcherTimer = 0;
                            MyVisualScriptLogicProvider.ShowNotification("Attempting Random Spawn: Planetary Cargo Ship", 5000, "White", receivedData.PlayerId);
                            success = true;
                        }
                    }

                    if (receivedData.ChatMessage.Contains("RandomEncounter") == true)
                    {
                        if (MES_SessionCore.playerWatchList.ContainsKey(thisPlayer) == true)
                        {
                            SpawnGroupManager.AdminSpawnGroup = SpecificSpawnGroupRequest(receivedData.ChatMessage, "RandomEncounter");

                            MES_SessionCore.PlayerWatcherTimer = 0;
                            MES_SessionCore.playerWatchList[thisPlayer].RandomEncounterCheckTimer    = 0;
                            MES_SessionCore.playerWatchList[thisPlayer].RandomEncounterCoolDownTimer = 0;
                            var fakeDistance = Settings.RandomEncounters.PlayerTravelDistance + 1000;
                            MES_SessionCore.playerWatchList[thisPlayer].RandomEncounterDistanceCoordCheck = fakeDistance * Vector3D.Up + thisPlayer.GetPosition();
                            MyVisualScriptLogicProvider.ShowNotification("Attempting Random Spawn: Random Encounter", 5000, "White", receivedData.PlayerId);
                            success = true;
                        }
                    }

                    if (receivedData.ChatMessage.Contains("PlanetaryInstallation") == true)
                    {
                        if (MES_SessionCore.playerWatchList.ContainsKey(thisPlayer) == true)
                        {
                            SpawnGroupManager.AdminSpawnGroup = SpecificSpawnGroupRequest(receivedData.ChatMessage, "PlanetaryInstallation");

                            MES_SessionCore.PlayerWatcherTimer = 0;
                            MES_SessionCore.playerWatchList[thisPlayer].PlanetaryInstallationCheckTimer    = 0;
                            MES_SessionCore.playerWatchList[thisPlayer].PlanetaryInstallationCooldownTimer = 0;

                            var fakeDistance = Settings.PlanetaryInstallations.PlayerDistanceSpawnTrigger + 1000;
                            var randomDir    = SpawnResources.GetRandomCompassDirection(thisPlayer.GetPosition(), SpawnResources.GetNearestPlanet(thisPlayer.GetPosition()));

                            MES_SessionCore.playerWatchList[thisPlayer].InstallationDistanceCoordCheck = fakeDistance * randomDir + thisPlayer.GetPosition();
                            MyVisualScriptLogicProvider.ShowNotification("Attempting Random Spawn: Planetary Installation", 5000, "White", receivedData.PlayerId);
                            success = true;
                        }
                    }

                    if (receivedData.ChatMessage.Contains("BossEncounter") == true)
                    {
                        if (BossEncounterSpawner.IsPlayerInBossEncounter(thisPlayer.IdentityId) == true)
                        {
                            MyVisualScriptLogicProvider.ShowNotification("Boss Encounter Already Active", 5000, "White", receivedData.PlayerId);
                        }

                        if (MES_SessionCore.playerWatchList.ContainsKey(thisPlayer) == true)
                        {
                            SpawnGroupManager.AdminSpawnGroup = SpecificSpawnGroupRequest(receivedData.ChatMessage, "BossEncounter");

                            MES_SessionCore.PlayerWatcherTimer = 0;
                            MES_SessionCore.playerWatchList[thisPlayer].BossEncounterCooldownTimer = 0;
                            MES_SessionCore.playerWatchList[thisPlayer].BossEncounterCheckTimer    = 0;
                            MyVisualScriptLogicProvider.ShowNotification("Attempting Random Spawn: Boss Encounter", 5000, "White", receivedData.PlayerId);
                            success = true;
                        }
                    }

                    if (success == false)
                    {
                        MyVisualScriptLogicProvider.ShowNotification("Could Not Spawn Encounter: Player Not In Watch List", 5000, "White", receivedData.PlayerId);
                    }

                    return;
                }

                //WaveSpawner
                if (receivedData.ChatMessage.StartsWith("/MES.WaveSpawner.") == true)
                {
                    bool success = false;

                    if (receivedData.ChatMessage.Contains("SpaceCargoShip") == true && Settings.SpaceCargoShips.EnableWaveSpawner == true)
                    {
                        MyVisualScriptLogicProvider.ShowNotification("Wave Spawner (Space Cargo Ship) Activated.", 5000, "White", receivedData.PlayerId);
                        MES_SessionCore.SpaceCargoShipWaveSpawner.CurrentWaveTimer = Settings.SpaceCargoShips.MaxWaveSpawnTime;
                        success = true;
                    }

                    if (success == false)
                    {
                        MyVisualScriptLogicProvider.ShowNotification("Wave Spawner Could Not Be Triggered. Please Enable In Configuration.", 5000, "White", receivedData.PlayerId);
                    }
                }

                //Enable Territory
                if (receivedData.ChatMessage.StartsWith("/MES.EnableTerritory.") == true)
                {
                    var messageReplace = receivedData.ChatMessage.Replace("/MES.EnableTerritory.", "");

                    if (messageReplace == "")
                    {
                        MyVisualScriptLogicProvider.ShowNotification("Invalid Command Received: No Territory Name Provided", 5000, "White", receivedData.PlayerId);
                        return;
                    }

                    MyAPIGateway.Utilities.SetVariable <bool>("MES-Territory-" + messageReplace, true);
                    TerritoryManager.TerritoryRefresh();
                    MyVisualScriptLogicProvider.ShowNotification("Territory Enabled: " + messageReplace, 5000, "White", receivedData.PlayerId);
                    return;
                }

                //Disable Territory
                if (receivedData.ChatMessage.StartsWith("/MES.DisableTerritory.") == true)
                {
                    var messageReplace = receivedData.ChatMessage.Replace("/MES.DisableTerritory.", "");

                    if (messageReplace == "")
                    {
                        MyVisualScriptLogicProvider.ShowNotification("Invalid Command Received: No Territory Name Provided", 5000, "White", receivedData.PlayerId);
                        return;
                    }

                    MyAPIGateway.Utilities.SetVariable <bool>("MES-Territory-" + messageReplace, false);
                    TerritoryManager.TerritoryRefresh();
                    MyVisualScriptLogicProvider.ShowNotification("Territory Disabled: " + messageReplace, 5000, "White", receivedData.PlayerId);
                    return;
                }

                //Get SpawnGroups
                if (receivedData.ChatMessage.StartsWith("/MES.GetSpawnGroups") == true)
                {
                    var syncData = receivedData;
                    syncData.Instruction       = "MESClipboard";
                    syncData.ClipboardContents = Logger.SpawnGroupResults();
                    var  sendData   = MyAPIGateway.Utilities.SerializeToBinary <SyncData>(syncData);
                    bool sendStatus = MyAPIGateway.Multiplayer.SendMessageTo(8877, sendData, receivedData.SteamUserId);
                    MyVisualScriptLogicProvider.ShowNotification("Spawn Group Data To Clipboard. Success: " + sendStatus.ToString(), 5000, "White", receivedData.PlayerId);
                    return;
                }

                //Get Active NPCs
                if (receivedData.ChatMessage.StartsWith("/MES.GetActiveNPCs") == true)
                {
                    var syncData = receivedData;
                    syncData.Instruction       = "MESClipboard";
                    syncData.ClipboardContents = Logger.GetActiveNPCs();
                    var  sendData   = MyAPIGateway.Utilities.SerializeToBinary <SyncData>(syncData);
                    bool sendStatus = MyAPIGateway.Multiplayer.SendMessageTo(8877, sendData, receivedData.SteamUserId);
                    MyVisualScriptLogicProvider.ShowNotification("Active NPC Data To Clipboard. Success: " + sendStatus.ToString(), 5000, "White", receivedData.PlayerId);
                    return;
                }

                //Get Block Definition Info
                if (receivedData.ChatMessage.StartsWith("/MES.GetBlockDefinitions") == true)
                {
                    var syncData = receivedData;
                    syncData.Instruction       = "MESClipboard";
                    syncData.ClipboardContents = Logger.GetBlockDefinitionInfo();
                    var  sendData   = MyAPIGateway.Utilities.SerializeToBinary <SyncData>(syncData);
                    bool sendStatus = MyAPIGateway.Multiplayer.SendMessageTo(8877, sendData, receivedData.SteamUserId);
                    MyVisualScriptLogicProvider.ShowNotification("Block Data To Clipboard. Success: " + sendStatus.ToString(), 5000, "White", receivedData.PlayerId);
                    return;
                }

                //Get Block Definition Info
                if (receivedData.ChatMessage.StartsWith("/MES.GetColorsFromGrid") == true)
                {
                    var syncData = receivedData;
                    syncData.Instruction       = "MESClipboard";
                    syncData.ClipboardContents = Logger.GetColorListFromGrid(SpawnResources.GetPlayerById(syncData.PlayerId));
                    var  sendData   = MyAPIGateway.Utilities.SerializeToBinary <SyncData>(syncData);
                    bool sendStatus = MyAPIGateway.Multiplayer.SendMessageTo(8877, sendData, receivedData.SteamUserId);
                    return;
                }

                //Get Player Watch Lists
                if (receivedData.ChatMessage.StartsWith("/MES.GetPlayerWatchList") == true)
                {
                    var syncData = receivedData;
                    syncData.Instruction       = "MESClipboard";
                    syncData.ClipboardContents = Logger.GetPlayerWatcherData();
                    var  sendData   = MyAPIGateway.Utilities.SerializeToBinary <SyncData>(syncData);
                    bool sendStatus = MyAPIGateway.Multiplayer.SendMessageTo(8877, sendData, receivedData.SteamUserId);
                    MyVisualScriptLogicProvider.ShowNotification("Player Watch Data To Clipboard. Success: " + sendStatus.ToString(), 5000, "White", receivedData.PlayerId);
                    return;
                }

                //Get Local Threat Score
                if (receivedData.ChatMessage.StartsWith("/MES.GetThreatScore") == true || receivedData.ChatMessage.StartsWith("/MES.GTS") == true)
                {
                    var messageReplace = receivedData.ChatMessage.Replace("/MES.GetThreatScore.", "");
                    ImprovedSpawnGroup selectedSpawnGroup = null;

                    if (messageReplace == "")
                    {
                        MyVisualScriptLogicProvider.ShowNotification("Default Threat Check Range Of 5000 Used. Spawngroup Not Provided or Detected.", 5000, "White", receivedData.PlayerId);
                        //return;
                        selectedSpawnGroup = new ImprovedSpawnGroup();
                    }

                    var playerList = new List <IMyPlayer>();
                    MyAPIGateway.Players.GetPlayers(playerList);
                    IMyPlayer thisPlayer = null;

                    foreach (var player in playerList)
                    {
                        if (player.IdentityId == receivedData.PlayerId)
                        {
                            thisPlayer = player;
                            break;
                        }
                    }

                    if (thisPlayer == null)
                    {
                        MyVisualScriptLogicProvider.ShowNotification("Command Failed: Apparently you don't exist?", 5000, "White", receivedData.PlayerId);
                        return;
                    }

                    if (selectedSpawnGroup == null)
                    {
                        foreach (var spawnGroup in SpawnGroupManager.SpawnGroups)
                        {
                            if (spawnGroup.SpawnGroup.Id.SubtypeName == messageReplace)
                            {
                                selectedSpawnGroup = spawnGroup;
                                break;
                            }
                        }
                    }

                    if (selectedSpawnGroup == null)
                    {
                        MyVisualScriptLogicProvider.ShowNotification("Default Threat Check Range Of 5000 Used. Spawngroup Not Provided or Detected.", 5000, "White", receivedData.PlayerId);
                        //return;
                        selectedSpawnGroup = new ImprovedSpawnGroup();
                    }

                    SpawnResources.RefreshEntityLists();
                    SpawnResources.LastThreatRefresh = SpawnResources.GameStartTime;
                    var threatLevel = SpawnResources.GetThreatLevel(selectedSpawnGroup, thisPlayer.GetPosition());

                    MyVisualScriptLogicProvider.ShowNotification("Threat Level Score Near You: " + threatLevel.ToString(), 5000, "White", receivedData.PlayerId);
                    return;
                }

                //Reset Active Territories
                if (receivedData.ChatMessage.StartsWith("/MES.ResetActiveTerritories") == true)
                {
                    TerritoryManager.TerritoryRefresh(true);

                    var syncData = receivedData;
                    syncData.Instruction = "MESResetActiveTerritories";
                    var  sendData   = MyAPIGateway.Utilities.SerializeToBinary <SyncData>(syncData);
                    bool sendStatus = MyAPIGateway.Multiplayer.SendMessageTo(8877, sendData, receivedData.SteamUserId);
                    MyVisualScriptLogicProvider.ShowNotification("Active Territories Reset To Default Values.", 5000, "White", receivedData.PlayerId);
                    return;
                }

                //Get Spawned Unique Encounters
                if (receivedData.ChatMessage.StartsWith("/MES.GetSpawnedUniqueEncounters") == true)
                {
                    var syncData = receivedData;
                    syncData.Instruction       = "MESClipboard";
                    syncData.ClipboardContents = Logger.GetSpawnedUniqueEncounters();
                    var  sendData   = MyAPIGateway.Utilities.SerializeToBinary <SyncData>(syncData);
                    bool sendStatus = MyAPIGateway.Multiplayer.SendMessageTo(8877, sendData, receivedData.SteamUserId);
                    MyVisualScriptLogicProvider.ShowNotification("Spawned Unique Encounters List Sent To Clipboard. Success: " + sendStatus.ToString(), 5000, "White", receivedData.PlayerId);
                    return;
                }

                //Get Spawn Group Eligibility At Position
                if (receivedData.ChatMessage.StartsWith("/MES.GetEligibleSpawnsAtPosition") == true || receivedData.ChatMessage.StartsWith("/MES.GESAP") == true)
                {
                    var syncData = receivedData;
                    syncData.Instruction       = "MESClipboard";
                    syncData.ClipboardContents = Logger.EligibleSpawnGroupsAtPosition(receivedData.PlayerPosition);
                    var  sendData   = MyAPIGateway.Utilities.SerializeToBinary <SyncData>(syncData);
                    bool sendStatus = MyAPIGateway.Multiplayer.SendMessageTo(8877, sendData, receivedData.SteamUserId);
                    MyVisualScriptLogicProvider.ShowNotification("List of Eligible Spawn Groups At Position Sent To Clipboard. Success: " + sendStatus.ToString(), 5000, "White", receivedData.PlayerId);
                    return;
                }

                //Get Planet Direction At Position
                if (receivedData.ChatMessage.StartsWith("/MES.GetDirectionFromPlanetCore") == true)
                {
                    var syncData = receivedData;
                    syncData.Instruction = "MESClipboard";

                    var planet = SpawnResources.GetNearestPlanet(receivedData.PlayerPosition);

                    if (planet != null)
                    {
                        var planetEntity = planet as IMyEntity;
                        var dir          = Vector3D.Normalize(receivedData.PlayerPosition - planetEntity.GetPosition());
                        var sb           = new StringBuilder();
                        sb.Append("Direction Vector For ").Append(planet.Generator.Id.SubtypeName).Append(" At Position ").Append(planetEntity.GetPosition().ToString()).AppendLine();
                        sb.Append("X: ").Append(dir.X.ToString()).AppendLine();
                        sb.Append("Y: ").Append(dir.Y.ToString()).AppendLine();
                        sb.Append("Z: ").Append(dir.Z.ToString()).AppendLine();
                        syncData.ClipboardContents = sb.ToString();
                    }
                    else
                    {
                        syncData.ClipboardContents = "No Planets In Game World.";
                    }


                    var  sendData   = MyAPIGateway.Utilities.SerializeToBinary <SyncData>(syncData);
                    bool sendStatus = MyAPIGateway.Multiplayer.SendMessageTo(8877, sendData, receivedData.SteamUserId);
                    MyVisualScriptLogicProvider.ShowNotification("Direction From Planet Core Values Sent To Clipboard. Success: " + sendStatus.ToString(), 5000, "White", receivedData.PlayerId);
                    return;
                }
            }

            //Settings Commands
        }