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 }