namespace Barotrauma { class ModifyLocationAction : EventAction { [Serialize("", IsPropertySaveable.Yes)] public Identifier Faction { get; set; } [Serialize("", IsPropertySaveable.Yes)] public Identifier SecondaryFaction { get; set; } [Serialize("", IsPropertySaveable.Yes)] public Identifier Type { get; set; } [Serialize("", IsPropertySaveable.Yes)] public Identifier Name { get; set; } private bool isFinished; public ModifyLocationAction(ScriptedEvent parentEvent, ContentXElement element) : base(parentEvent, element) { } public override bool IsFinished(ref string goTo) { return isFinished; } public override void Reset() { isFinished = false; } public override void Update(float deltaTime) { if (isFinished) { return; } if (GameMain.GameSession.GameMode is CampaignMode campaign) { var location = campaign.Map.CurrentLocation; if (location != null) { if (!Faction.IsEmpty) { var faction = campaign.Factions.Find(f => f.Prefab.Identifier == Faction); if (faction == null) { DebugConsole.ThrowError($"Error in ModifyLocationAction ({ParentEvent.Prefab.Identifier}): could not find a faction with the identifier \"{Faction}\".", contentPackage: ParentEvent?.Prefab?.ContentPackage); } else { location.Faction = faction; } } if (!SecondaryFaction.IsEmpty) { var secondaryFaction = campaign.Factions.Find(f => f.Prefab.Identifier == SecondaryFaction); if (secondaryFaction == null) { DebugConsole.ThrowError($"Error in ModifyLocationAction ({ParentEvent.Prefab.Identifier}): could not find a faction with the identifier \"{SecondaryFaction}\".", contentPackage: ParentEvent.Prefab.ContentPackage); } else { location.SecondaryFaction = secondaryFaction; } } if (!Type.IsEmpty) { var locationType = LocationType.Prefabs.Find(lt => lt.Identifier == Type); if (locationType == null) { DebugConsole.ThrowError($"Error in ModifyLocationAction ({ParentEvent.Prefab.Identifier}): could not find a location type with the identifier \"{Type}\".", contentPackage: ParentEvent.Prefab.ContentPackage); } else if (!location.LocationTypeChangesBlocked) { location.ChangeType(campaign, locationType); } } if (!Name.IsEmpty) { location.ForceName(Name); } } } isFinished = true; } public override string ToDebugString() { return $"{ToolBox.GetDebugSymbol(isFinished)} {nameof(ModifyLocationAction)}"; } } }