public void UseExistingSettings(BossEncounter newData) { this.SpawnGroupName = newData.SpawnGroupName; this.SpawnGroup = SpawnGroupManager.GetSpawnGroupByName(this.SpawnGroupName); this.Type = newData.Type; this.Position = newData.Position; this.PlayersInEncounter = newData.PlayersInEncounter; this.Timer = newData.Timer; this.SpawnAttempts = newData.SpawnAttempts; this.PlayerGPSHashes = newData.PlayerGPSHashes; }
public bool CreateGpsForPlayers() { this.SpawnGroup = SpawnGroupManager.GetSpawnGroupByName(this.SpawnGroupName); if (this.SpawnGroup == null) { return(false); } var playerList = new List <IMyPlayer>(); MyAPIGateway.Players.GetPlayers(playerList); var bossGps = MyAPIGateway.Session.GPS.Create(this.SpawnGroup.BossCustomGPSLabel, "", this.Position, true); foreach (var player in playerList) { if (player.IsBot == true) { continue; } if (this.PlayersInEncounter.Contains(player.IdentityId) == false) { continue; } MyAPIGateway.Session.GPS.AddGps(player.IdentityId, bossGps); MyVisualScriptLogicProvider.SetGPSColor(this.SpawnGroup.BossCustomGPSLabel, new Color(255, 0, 255), player.IdentityId); if (PlayerGPSHashes.ContainsKey(player.IdentityId) == true) { PlayerGPSHashes[player.IdentityId] = bossGps.Hash; } else { PlayerGPSHashes.Add(player.IdentityId, bossGps.Hash); } } return(true); }
public void SetupScript() { Logger.AddMsg("Loading Settings From Spawner Version: " + ModVersion.ToString()); //Save File Validation SaveName = MyAPIGateway.Session.Name; //Some Faction BS - Temporary if (1 == 0) { var factions = MyDefinitionManager.Static.GetDefaultFactions(); var sb = new StringBuilder(); sb.Append("Faction Data: ").AppendLine().AppendLine(); foreach (var faction in factions) { sb.Append(faction.Tag).AppendLine(); sb.Append(faction.DefaultRelation).AppendLine(); sb.Append(faction.DefaultRelationToPlayers).AppendLine().AppendLine(); } Logger.AddMsg(sb.ToString()); } //Rival AI Stuff Logger.AddMsg("Initializing RivalAI Helper"); RivalAIHelper.SetupRivalAIHelper(); //Setup Watchers and Handlers MyAPIGateway.Multiplayer.RegisterMessageHandler(8877, ChatCommand.MESMessageHandler); MyAPIGateway.Utilities.MessageEntered += ChatCommand.MESChatCommand; var thisPlayer = MyAPIGateway.Session.LocalHumanPlayer; //Disable Vanilla Spawners Logger.AddMsg("Checking World Settings."); if (MyAPIGateway.Session.SessionSettings.CargoShipsEnabled == true) { Logger.AddMsg("Disabling Cargo Ships World Setting. Spawner Handles This Functionality."); MyAPIGateway.Session.SessionSettings.CargoShipsEnabled = false; } if (MyAPIGateway.Session.SessionSettings.EnableEncounters == true) { Logger.AddMsg("Disabling Random Encounters World Setting. Spawner Handles This Functionality."); MyAPIGateway.Session.SessionSettings.EnableEncounters = false; } /* * if(MyAPIGateway.Multiplayer.IsServer == false){ * * if(thisPlayer == null){ * * Logger.AddMsg("Player Doesn't Exist. Cannot Search For Existing Boss GPS."); * return; * * } * * Logger.AddMsg("Searching For Existing Boss Encounter GPS."); * var chatMsg = "MESClientGetBossGPS\n" + thisPlayer.IdentityId.ToString() + "\n" + thisPlayer.SteamUserId.ToString() + "\n" + "Msg"; * var sendData = MyAPIGateway.Utilities.SerializeToBinary<string>(chatMsg); * var sendMsg = MyAPIGateway.Multiplayer.SendMessageToServer(8877, sendData); * * return; * * } */ //All Block SubtypeIds try{ var allDefs = MyDefinitionManager.Static.GetAllDefinitions(); foreach (MyDefinitionBase definition in allDefs.Where(x => x is MyCubeBlockDefinition)) { var blockDef = definition as MyCubeBlockDefinition; SpawnResources.BlockDefinitionIdList.Add(definition.Id.SubtypeName); if (ChatCommand.BlockDefinitionList.Contains(blockDef) == false) { ChatCommand.BlockDefinitionList.Add(blockDef); } } }catch (Exception exc) { Logger.AddMsg("Something Failed While Building List Of CubeBlock SubtypeIds."); } //Drop Containers Names var dropContainerErrorLog = new StringBuilder(); try{ dropContainerErrorLog.Append("Getting List of DropContainer Definitions").AppendLine(); var dropContainerDefs = MyDefinitionManager.Static.GetDropContainerDefinitions(); dropContainerErrorLog.Append("Beginning Loop Of Definition List").AppendLine(); foreach (var dropContainer in dropContainerDefs.Keys) { dropContainerErrorLog.Append("Checking Drop Container Prefab: ").Append(dropContainerDefs[dropContainer].Id.SubtypeName).AppendLine(); foreach (var grid in dropContainerDefs[dropContainer].Prefab.CubeGrids) { dropContainerErrorLog.Append("Checking Drop Container Prefab Name...").AppendLine(); if (string.IsNullOrEmpty(grid.DisplayName) == true) { dropContainerErrorLog.Append("Prefab Grid Name Null Or Empty - Skipping").AppendLine(); continue; } dropContainerErrorLog.Append("Added Prefab Grid Name To DropContainerNames: ").Append(grid.DisplayName).AppendLine(); NPCWatcher.DropContainerNames.Add(grid.DisplayName); } } }catch (Exception exc) { Logger.AddMsg("Something Failed While Building List Of Drop Container (Unknown Signal) Prefab Names. See Below:"); Logger.AddMsg(dropContainerErrorLog.ToString()); } //Economy Stations Logger.AddMsg("The Following Economy Stations Will Not Be Monitored By Spawner Mod:", true); try { NPCWatcher.EconomyStationNames.Add("Economy_MiningStation_1"); NPCWatcher.EconomyStationNames.Add("Economy_MiningStation_2"); NPCWatcher.EconomyStationNames.Add("Economy_MiningStation_3"); NPCWatcher.EconomyStationNames.Add("Economy_OrbitalStation_1"); NPCWatcher.EconomyStationNames.Add("Economy_OrbitalStation_2"); NPCWatcher.EconomyStationNames.Add("Economy_OrbitalStation_3"); NPCWatcher.EconomyStationNames.Add("Economy_OrbitalStation_4"); NPCWatcher.EconomyStationNames.Add("Economy_Outpost_1"); NPCWatcher.EconomyStationNames.Add("Economy_Outpost_2"); NPCWatcher.EconomyStationNames.Add("Economy_Outpost_3"); NPCWatcher.EconomyStationNames.Add("Economy_Outpost_4"); NPCWatcher.EconomyStationNames.Add("Economy_Outpost_5"); NPCWatcher.EconomyStationNames.Add("Economy_Outpost_6"); NPCWatcher.EconomyStationNames.Add("Economy_Outpost_7"); NPCWatcher.EconomyStationNames.Add("Economy_SpaceStation_1"); NPCWatcher.EconomyStationNames.Add("Economy_SpaceStation_2"); NPCWatcher.EconomyStationNames.Add("Economy_SpaceStation_3"); NPCWatcher.EconomyStationNames.Add("Economy_SpaceStation_4"); NPCWatcher.EconomyStationNames.Add("Economy_SpaceStation_5"); /* * var ecoStationsDefs = new List<MyStationsListDefinition>(MyDefinitionManager.Static.GetDefinitionsOfType<MyStationsListDefinition>().ToList()); * * foreach(var station in ecoStationsDefs) { * * foreach(var stationPrefabName in station.StationNames) { * * var stationNameString = stationPrefabName.ToString(); * * if(string.IsNullOrWhiteSpace(stationNameString) == true) { * * continue; * * } * * if(NPCWatcher.EconomyStationNames.Contains(stationNameString) == false) { * * NPCWatcher.EconomyStationNames.Add(stationNameString); * Logger.AddMsg("Economy Station: " + stationNameString); * * } * * } * * } */ } catch (Exception exc) { Logger.AddMsg("Something Failed While Building List Of Economy Station Prefab Names. See Below:"); Logger.AddMsg(dropContainerErrorLog.ToString()); } Logger.AddMsg("Registering Mod Message Handlers."); Logger.AddMsg("Mod Channel: " + MyAPIGateway.Utilities.GamePaths.ModScopeName); MyAPIGateway.Utilities.RegisterMessageHandler(1521905890, ModMessages.ModMessageHandler); MyAPIGateway.Utilities.RegisterMessageHandler(1521905890001, ModMessages.ModMessageReceiverBlockReplace); MyAPIGateway.Utilities.RegisterMessageHandler(1521905890002, ModMessages.ModMessageReceiverSpawnRequest); MyAPIGateway.Utilities.RegisterMessageHandler(1521905890003, ModMessages.ModMessageReceiverRivalAISpawnRequest); Logger.AddMsg("Initiating Main Settings."); Settings.InitSettings(); NPCWatcher.InitFactionData(); SpawnResources.PopulateNpcFactionLists(); TerritoryManager.TerritoryRefresh(); SpawnGroupManager.CreateSpawnLists(); string[] uniqueSpawnedArray = new string[0]; if (MyAPIGateway.Utilities.GetVariable <string[]>("MES-UniqueGroupsSpawned", out uniqueSpawnedArray) == true) { SpawnGroupManager.UniqueGroupsSpawned = new List <string>(uniqueSpawnedArray.ToList()); } else { Logger.AddMsg("Failed To Retrieve Previously Spawned Unique Encounters List or No Unique Encounters Have Spawned Yet."); } //Setup Existing Boss Encounters string storedBossData = ""; if (MyAPIGateway.Utilities.GetVariable <string>("MES-ActiveBossEncounters", out storedBossData) == true) { if (storedBossData != "") { try{ var byteArray = Convert.FromBase64String(storedBossData); var storedData = MyAPIGateway.Utilities.SerializeFromBinary <BossEncounter[]>(byteArray); NPCWatcher.BossEncounters = new List <BossEncounter>(storedData.ToList()); bool listChange = false; if (NPCWatcher.BossEncounters.Count > 0) { for (int i = NPCWatcher.BossEncounters.Count - 1; i >= 0; i--) { var bossEncounter = NPCWatcher.BossEncounters[i]; bossEncounter.SpawnGroup = SpawnGroupManager.GetSpawnGroupByName(bossEncounter.SpawnGroupName); if (bossEncounter.SpawnGroup == null) { bossEncounter.RemoveGpsForPlayers(); listChange = true; NPCWatcher.BossEncounters.RemoveAt(i); } } } if (listChange == true) { if (NPCWatcher.BossEncounters.Count > 0) { BossEncounter[] encounterArray = NPCWatcher.BossEncounters.ToArray(); byteArray = MyAPIGateway.Utilities.SerializeToBinary <BossEncounter[]>(encounterArray); storedBossData = Convert.ToBase64String(byteArray); MyAPIGateway.Utilities.SetVariable <string>("MES-ActiveBossEncounters", storedBossData); } else { MyAPIGateway.Utilities.SetVariable <string>("MES-ActiveBossEncounters", ""); } } }catch (Exception e) { Logger.AddMsg("Something went wrong while getting Boss Encounter Data from Storage."); Logger.AddMsg(e.ToString(), true); } } } //Get Active Mods Logger.AddMsg("Getting Active Mods."); foreach (var mod in MyAPIGateway.Session.Mods) { if (mod.PublishedFileId != 0) { ActiveMods.Add(mod.PublishedFileId); } /*if(mod.PublishedFileId == 1135484377 || mod.PublishedFileId == 973528334){ * * string msgA = "Conflicting Mod Detected: " + mod.FriendlyName; * MyVisualScriptLogicProvider.ShowNotificationToAll(msgA, 15000, "Red"); * Logger.AddMsg(msgA); * conflictingSettings = true; * * }*/ } if (ActiveMods.Contains(1555044803) == true) { Logger.AddMsg("NPC Weapon Upgrades Mod Detected. Enabling Weapon Randomization."); NPCWeaponUpgradesModDetected = true; } if (ActiveMods.Contains(1773965697) == true) { Logger.AddMsg("Wave Spawner (Space) Mod Detected. Enabling Wave Spawning for SpaceCargoShips."); SpaceWaveSpawnerModDetected = true; } bool suppressCargo = false; bool suppressEncounter = false; if (ActiveMods.Contains(888457124) == true) { suppressCargo = true; } if (ActiveMods.Contains(888457381) == true) { suppressEncounter = true; } SuppressGroups.ApplySuppression(suppressCargo, suppressEncounter); //Init Timers PlayerWatcherTimer = Settings.General.PlayerWatcherTimerTrigger; NPCWatcher.NpcDistanceCheckTimer = Settings.General.NpcDistanceCheckTimerTrigger; NPCWatcher.NpcOwnershipCheckTimer = Settings.General.NpcOwnershipCheckTimerTrigger; NPCWatcher.NpcCleanupCheckTimer = Settings.General.NpcCleanupCheckTimerTrigger; NPCWatcher.SpawnedVoxelCheckTimer = Settings.General.SpawnedVoxelCheckTimerTrigger; SpawnResources.RefreshEntityLists(); //Setup Watchers and Handlers MyAPIGateway.Entities.OnEntityAdd += NPCWatcher.NewEntityDetected; //Get Initial Players PlayerList.Clear(); MyAPIGateway.Players.GetPlayers(PlayerList); //Get Existing NPCs Logger.AddMsg("Check For Existing NPC Grids"); NPCWatcher.StartupScan(); //Setup Wave Spawners SpaceCargoShipWaveSpawner = new WaveSpawner("SpaceCargoShip"); //Init Economy Stuff Logger.AddMsg("Initializing Economy Resources"); EconomyHelper.Setup(); //Get Spawned Voxels From Save try{ string[] tempSpawnedVoxels = new string[0]; if (MyAPIGateway.Utilities.GetVariable <string[]>("MES-SpawnedVoxels", out tempSpawnedVoxels) == true) { foreach (var voxelId in tempSpawnedVoxels) { long tempId = 0; if (long.TryParse(voxelId, out tempId) == false) { continue; } IMyEntity voxelEntity = null; if (MyAPIGateway.Entities.TryGetEntityById(tempId, out voxelEntity) == false) { continue; } if (NPCWatcher.SpawnedVoxels.ContainsKey(voxelId) == false) { NPCWatcher.SpawnedVoxels.Add(voxelId, voxelEntity); } } } }catch (Exception exc) { Logger.AddMsg("Something went wrong while trying to retrieve previously spawned voxels."); } }