From 4b8b0591d63be14f28ad7bbcd9568df4f28ccab3 Mon Sep 17 00:00:00 2001 From: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Date: Sun, 12 Jan 2025 01:56:00 +0300 Subject: [PATCH] v239.0.0 + .NET 9 (#1475) yeag --------- Co-authored-by: Pieter-Jan Briers Co-authored-by: Leon Friedrich <60421075+ElectroJr@users.noreply.github.com> (cherry picked from commit 64a389a1158d22fbe7cdbe0a71d223b66dcfd5b6) --- .github/workflows/build-docfx.yml | 2 +- .github/workflows/build-map-renderer.yml | 2 +- .github/workflows/build-test-debug.yml | 2 +- .github/workflows/publish.yml | 2 +- .github/workflows/test-packaging.yml | 2 +- .github/workflows/yaml-linter.yml | 2 +- .../Components/Mobs/AlertsComponentTests.cs | 2 +- Content.IntegrationTests/Tests/PostMapInitTest.cs | 5 ++--- Content.PatreonParser/Content.PatreonParser.csproj | 2 +- Content.Server/Animals/Components/UdderComponent.cs | 2 +- Content.Server/Animals/Components/WoolyComponent.cs | 2 +- .../Components/ReagentProducerAnomalyComponent.cs | 2 +- .../Piping/Unary/Components/GasCondenserComponent.cs | 2 +- .../Body/Components/BloodstreamComponent.cs | 12 ++++++------ Content.Server/Body/Components/LungComponent.cs | 2 +- Content.Server/Body/Components/StomachComponent.cs | 4 ++-- .../Botany/Components/PlantHolderComponent.cs | 2 +- Content.Server/Botany/Systems/MutationSystem.cs | 1 - Content.Server/Cargo/Systems/PricingSystem.cs | 2 +- .../Components/SolutionRegenerationComponent.cs | 4 ++-- .../EntitySystems/SolutionRegenerationSystem.cs | 4 ++-- .../ChemicalFuelGeneratorAdapterComponent.cs | 2 +- .../Actions/Events/AnomalyPowerActionEvent.cs | 2 +- .../Announcements/Systems/SharedAnnouncerSystem.cs | 8 +++++++- .../Chemistry/Components/SmokeComponent.cs | 2 +- .../Components/SolutionContainerMixerComponent.cs | 2 +- Content.Shared/Execution/DoafterEvent.cs | 9 --------- .../{DoAfterEvent.cs => ExecutionDoAfterEvent.cs} | 0 Content.Shared/Fluids/Components/DrainComponent.cs | 2 +- Content.Shared/Fluids/Components/PuddleComponent.cs | 2 +- Content.Shared/Footprint/FootPrintComponent.cs | 2 +- Content.Shared/Mind/MindComponent.cs | 6 +++--- Content.Shared/Prototypes/LocalizedPrototype.cs | 10 ++++++++-- .../Silicons/StationAi/StationAiVisionSystem.cs | 10 +++++----- global.json | 4 ++-- 35 files changed, 61 insertions(+), 60 deletions(-) delete mode 100644 Content.Shared/Execution/DoafterEvent.cs rename Content.Shared/Execution/{DoAfterEvent.cs => ExecutionDoAfterEvent.cs} (100%) diff --git a/.github/workflows/build-docfx.yml b/.github/workflows/build-docfx.yml index d37e37026d..3201cbb05e 100644 --- a/.github/workflows/build-docfx.yml +++ b/.github/workflows/build-docfx.yml @@ -21,7 +21,7 @@ jobs: - name: Setup .NET Core uses: actions/setup-dotnet@v3.2.0 with: - dotnet-version: 8.0.100 + dotnet-version: 9.0.100 - name: Install dependencies run: dotnet restore diff --git a/.github/workflows/build-map-renderer.yml b/.github/workflows/build-map-renderer.yml index c1790feadb..7c644baef8 100644 --- a/.github/workflows/build-map-renderer.yml +++ b/.github/workflows/build-map-renderer.yml @@ -36,7 +36,7 @@ jobs: - name: Setup .NET Core uses: actions/setup-dotnet@v3.2.0 with: - dotnet-version: 8.0.100 + dotnet-version: 9.0.100 - name: Install dependencies run: dotnet restore diff --git a/.github/workflows/build-test-debug.yml b/.github/workflows/build-test-debug.yml index bb0624e3ba..42931c3c5b 100644 --- a/.github/workflows/build-test-debug.yml +++ b/.github/workflows/build-test-debug.yml @@ -36,7 +36,7 @@ jobs: - name: Setup .NET Core uses: actions/setup-dotnet@v3.2.0 with: - dotnet-version: 8.0.100 + dotnet-version: 9.0.100 - name: Install dependencies run: dotnet restore diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index d9cfd3b25b..f38f94ae84 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -22,7 +22,7 @@ jobs: - name: Setup .NET Core uses: actions/setup-dotnet@v3.2.0 with: - dotnet-version: 8.0.100 + dotnet-version: 9.0.100 - name: Get Engine Tag run: | diff --git a/.github/workflows/test-packaging.yml b/.github/workflows/test-packaging.yml index 27cf5d2d7b..de0ed746c3 100644 --- a/.github/workflows/test-packaging.yml +++ b/.github/workflows/test-packaging.yml @@ -51,7 +51,7 @@ jobs: - name: Setup .NET Core uses: actions/setup-dotnet@v3.2.0 with: - dotnet-version: 8.0.100 + dotnet-version: 9.0.100 - name: Install dependencies run: dotnet restore diff --git a/.github/workflows/yaml-linter.yml b/.github/workflows/yaml-linter.yml index 8660ccc040..000ae7b492 100644 --- a/.github/workflows/yaml-linter.yml +++ b/.github/workflows/yaml-linter.yml @@ -26,7 +26,7 @@ jobs: - name: Setup .NET Core uses: actions/setup-dotnet@v3.2.0 with: - dotnet-version: 8.0.100 + dotnet-version: 9.0.100 - name: Install dependencies run: dotnet restore - name: Build diff --git a/Content.IntegrationTests/Tests/GameObjects/Components/Mobs/AlertsComponentTests.cs b/Content.IntegrationTests/Tests/GameObjects/Components/Mobs/AlertsComponentTests.cs index ee2ddb2790..2f02d930f2 100644 --- a/Content.IntegrationTests/Tests/GameObjects/Components/Mobs/AlertsComponentTests.cs +++ b/Content.IntegrationTests/Tests/GameObjects/Components/Mobs/AlertsComponentTests.cs @@ -35,7 +35,7 @@ namespace Content.IntegrationTests.Tests.GameObjects.Components.Mobs { playerUid = serverPlayerManager.Sessions.Single().AttachedEntity.GetValueOrDefault(); #pragma warning disable NUnit2045 // Interdependent assertions. - Assert.That(playerUid, Is.Not.EqualTo(default)); + Assert.That(playerUid, Is.Not.EqualTo(default(EntityUid))); // Making sure it exists Assert.That(entManager.HasComponent(playerUid)); #pragma warning restore NUnit2045 diff --git a/Content.IntegrationTests/Tests/PostMapInitTest.cs b/Content.IntegrationTests/Tests/PostMapInitTest.cs index 2bd2714271..75c769a512 100644 --- a/Content.IntegrationTests/Tests/PostMapInitTest.cs +++ b/Content.IntegrationTests/Tests/PostMapInitTest.cs @@ -8,7 +8,6 @@ using Content.Server.Shuttles.Systems; using Content.Server.Spawners.Components; using Content.Server.Station.Components; using Content.Shared.CCVar; -using Content.Shared.Roles; using Robust.Server.GameObjects; using Robust.Shared.Configuration; using Robust.Shared.ContentPack; @@ -16,7 +15,6 @@ using Robust.Shared.GameObjects; using Robust.Shared.Map; using Robust.Shared.Map.Components; using Robust.Shared.Prototypes; -using FastAccessors; using Robust.Shared.Utility; using YamlDotNet.RepresentationModel; @@ -68,7 +66,8 @@ namespace Content.IntegrationTests.Tests "Moose", //WWDP "WhiteBox", //WWDP "Rad", - "Europa" + "Europa", + "Meta" }; /// diff --git a/Content.PatreonParser/Content.PatreonParser.csproj b/Content.PatreonParser/Content.PatreonParser.csproj index 3206ad42e9..1724ec0cea 100644 --- a/Content.PatreonParser/Content.PatreonParser.csproj +++ b/Content.PatreonParser/Content.PatreonParser.csproj @@ -2,7 +2,7 @@ Exe - net7.0 + net9.0 enable enable true diff --git a/Content.Server/Animals/Components/UdderComponent.cs b/Content.Server/Animals/Components/UdderComponent.cs index 620f4572a7..f01c11c5dd 100644 --- a/Content.Server/Animals/Components/UdderComponent.cs +++ b/Content.Server/Animals/Components/UdderComponent.cs @@ -29,7 +29,7 @@ namespace Content.Server.Animals.Components /// /// The solution to add reagent to. /// - [DataField] + [ViewVariables] public Entity? Solution = null; /// diff --git a/Content.Server/Animals/Components/WoolyComponent.cs b/Content.Server/Animals/Components/WoolyComponent.cs index c09c6f5e08..77dbd90332 100644 --- a/Content.Server/Animals/Components/WoolyComponent.cs +++ b/Content.Server/Animals/Components/WoolyComponent.cs @@ -29,7 +29,7 @@ public sealed partial class WoolyComponent : Component /// /// The solution to add reagent to. /// - [DataField] + [ViewVariables(VVAccess.ReadOnly)] public Entity? Solution; /// diff --git a/Content.Server/Anomaly/Components/ReagentProducerAnomalyComponent.cs b/Content.Server/Anomaly/Components/ReagentProducerAnomalyComponent.cs index 49c62aec81..3f63a0518c 100644 --- a/Content.Server/Anomaly/Components/ReagentProducerAnomalyComponent.cs +++ b/Content.Server/Anomaly/Components/ReagentProducerAnomalyComponent.cs @@ -97,6 +97,6 @@ public sealed partial class ReagentProducerAnomalyComponent : Component /// /// Solution where the substance is generated /// - [DataField("solutionRef")] + [ViewVariables] public Entity? Solution = null; } diff --git a/Content.Server/Atmos/Piping/Unary/Components/GasCondenserComponent.cs b/Content.Server/Atmos/Piping/Unary/Components/GasCondenserComponent.cs index c25c010708..e89bba1fd7 100644 --- a/Content.Server/Atmos/Piping/Unary/Components/GasCondenserComponent.cs +++ b/Content.Server/Atmos/Piping/Unary/Components/GasCondenserComponent.cs @@ -25,7 +25,7 @@ public sealed partial class GasCondenserComponent : Component /// /// The solution that gases are condensed into. /// - [DataField] + [ViewVariables] public Entity? Solution = null; /// diff --git a/Content.Server/Body/Components/BloodstreamComponent.cs b/Content.Server/Body/Components/BloodstreamComponent.cs index ee0de4aa4d..0dacd1753a 100644 --- a/Content.Server/Body/Components/BloodstreamComponent.cs +++ b/Content.Server/Body/Components/BloodstreamComponent.cs @@ -160,22 +160,22 @@ namespace Content.Server.Body.Components /// /// Internal solution for blood storage /// - [DataField] - public Entity? BloodSolution = null; + [ViewVariables] + public Entity? BloodSolution; /// /// Internal solution for reagent storage /// - [DataField] - public Entity? ChemicalSolution = null; + [ViewVariables] + public Entity? ChemicalSolution; /// /// Temporary blood solution. /// When blood is lost, it goes to this solution, and when this /// solution hits a certain cap, the blood is actually spilled as a puddle. /// - [DataField] - public Entity? TemporarySolution = null; + [ViewVariables] + public Entity? TemporarySolution; /// /// Variable that stores the amount of status time added by having a low blood level. diff --git a/Content.Server/Body/Components/LungComponent.cs b/Content.Server/Body/Components/LungComponent.cs index 72af4d9e63..4fb769d670 100644 --- a/Content.Server/Body/Components/LungComponent.cs +++ b/Content.Server/Body/Components/LungComponent.cs @@ -26,7 +26,7 @@ public sealed partial class LungComponent : Component /// /// The solution on this entity that these lungs act on. /// - [DataField] + [ViewVariables] public Entity? Solution = null; /// diff --git a/Content.Server/Body/Components/StomachComponent.cs b/Content.Server/Body/Components/StomachComponent.cs index d541ca4d7c..06f03482e7 100644 --- a/Content.Server/Body/Components/StomachComponent.cs +++ b/Content.Server/Body/Components/StomachComponent.cs @@ -25,8 +25,8 @@ namespace Content.Server.Body.Components /// /// The solution inside of this stomach this transfers reagents to the body. /// - [DataField] - public Entity? Solution = null; + [ViewVariables] + public Entity? Solution; /// /// What solution should this stomach push reagents into, on the body? diff --git a/Content.Server/Botany/Components/PlantHolderComponent.cs b/Content.Server/Botany/Components/PlantHolderComponent.cs index 809af737ac..84dcab2e04 100644 --- a/Content.Server/Botany/Components/PlantHolderComponent.cs +++ b/Content.Server/Botany/Components/PlantHolderComponent.cs @@ -92,6 +92,6 @@ public sealed partial class PlantHolderComponent : Component [ViewVariables(VVAccess.ReadWrite), DataField("solution")] public string SoilSolutionName = "soil"; - [DataField] + [ViewVariables] public Entity? SoilSolution = null; } diff --git a/Content.Server/Botany/Systems/MutationSystem.cs b/Content.Server/Botany/Systems/MutationSystem.cs index 4780f8b331..c4c826a03c 100644 --- a/Content.Server/Botany/Systems/MutationSystem.cs +++ b/Content.Server/Botany/Systems/MutationSystem.cs @@ -5,7 +5,6 @@ using Content.Shared.Random.Helpers; using Content.Shared.Chemistry.Reagent; using System.Linq; using Content.Shared.Atmos; -using FastAccessors; namespace Content.Server.Botany; diff --git a/Content.Server/Cargo/Systems/PricingSystem.cs b/Content.Server/Cargo/Systems/PricingSystem.cs index d936451d52..119b7a5aab 100644 --- a/Content.Server/Cargo/Systems/PricingSystem.cs +++ b/Content.Server/Cargo/Systems/PricingSystem.cs @@ -424,7 +424,7 @@ public record struct PriceCalculationEvent() [ByRefEvent] public record struct EstimatedPriceCalculationEvent() { - public EntityPrototype Prototype; + public required EntityPrototype Prototype; /// /// The total price of the entity. diff --git a/Content.Server/Chemistry/Components/SolutionRegenerationComponent.cs b/Content.Server/Chemistry/Components/SolutionRegenerationComponent.cs index 23bf6b2157..2daad5eb19 100644 --- a/Content.Server/Chemistry/Components/SolutionRegenerationComponent.cs +++ b/Content.Server/Chemistry/Components/SolutionRegenerationComponent.cs @@ -20,8 +20,8 @@ public sealed partial class SolutionRegenerationComponent : Component /// /// The solution to add reagents to. /// - [DataField("solutionRef")] - public Entity? Solution = null; + [ViewVariables] + public Entity? SolutionRef = null; /// /// The reagent(s) to be regenerated in the solution. diff --git a/Content.Server/Chemistry/EntitySystems/SolutionRegenerationSystem.cs b/Content.Server/Chemistry/EntitySystems/SolutionRegenerationSystem.cs index 5af181e4af..fdfacde347 100644 --- a/Content.Server/Chemistry/EntitySystems/SolutionRegenerationSystem.cs +++ b/Content.Server/Chemistry/EntitySystems/SolutionRegenerationSystem.cs @@ -24,7 +24,7 @@ public sealed class SolutionRegenerationSystem : EntitySystem // timer ignores if its full, it's just a fixed cycle regen.NextRegenTime = _timing.CurTime + regen.Duration; - if (_solutionContainer.ResolveSolution((uid, manager), regen.SolutionName, ref regen.Solution, out var solution)) + if (_solutionContainer.ResolveSolution((uid, manager), regen.SolutionName, ref regen.SolutionRef, out var solution)) { var amount = FixedPoint2.Min(solution.AvailableVolume, regen.Generated.Volume); if (amount <= FixedPoint2.Zero) @@ -41,7 +41,7 @@ public sealed class SolutionRegenerationSystem : EntitySystem generated = regen.Generated.Clone().SplitSolution(amount); } - _solutionContainer.TryAddSolution(regen.Solution.Value, generated); + _solutionContainer.TryAddSolution(regen.SolutionRef.Value, generated); } } } diff --git a/Content.Server/Power/Generator/ChemicalFuelGeneratorAdapterComponent.cs b/Content.Server/Power/Generator/ChemicalFuelGeneratorAdapterComponent.cs index 58e0e8b012..d36828eb83 100644 --- a/Content.Server/Power/Generator/ChemicalFuelGeneratorAdapterComponent.cs +++ b/Content.Server/Power/Generator/ChemicalFuelGeneratorAdapterComponent.cs @@ -29,7 +29,7 @@ public sealed partial class ChemicalFuelGeneratorAdapterComponent : Component /// /// The solution on the to use. /// - [DataField("solutionRef")] + [ViewVariables] public Entity? Solution = null; /// diff --git a/Content.Shared/Actions/Events/AnomalyPowerActionEvent.cs b/Content.Shared/Actions/Events/AnomalyPowerActionEvent.cs index 9184460153..a234521ecb 100644 --- a/Content.Shared/Actions/Events/AnomalyPowerActionEvent.cs +++ b/Content.Shared/Actions/Events/AnomalyPowerActionEvent.cs @@ -74,7 +74,7 @@ public sealed partial class AnomalyPowerActionEvent : InstantActionEvent [DataRecord] public partial record struct AnomalyPowerSettings() { - public string PowerName; + public string PowerName = string.Empty; public float ManaCost; diff --git a/Content.Shared/Announcements/Systems/SharedAnnouncerSystem.cs b/Content.Shared/Announcements/Systems/SharedAnnouncerSystem.cs index 5e02b602d0..1aad348a5a 100644 --- a/Content.Shared/Announcements/Systems/SharedAnnouncerSystem.cs +++ b/Content.Shared/Announcements/Systems/SharedAnnouncerSystem.cs @@ -66,7 +66,7 @@ public abstract class SharedAnnouncerSystem : EntitySystem public string GetAnnouncementId(string announcementId, bool ended = false) { // Replace the first letter with lowercase - var id = char.ToLowerInvariant(announcementId[0]) + announcementId[1..]; + var id = OopsConcat(char.ToLowerInvariant(announcementId[0]).ToString(), announcementId[1..]); // If the event has ended, add "Complete" to the end if (ended) @@ -75,6 +75,12 @@ public abstract class SharedAnnouncerSystem : EntitySystem return id; } + private string OopsConcat(string a, string b) + { + // This exists to prevent Roslyn being clever and compiling something that fails sandbox checks. + return a + b; + } + /// /// Gets audio params from the announcer diff --git a/Content.Shared/Chemistry/Components/SmokeComponent.cs b/Content.Shared/Chemistry/Components/SmokeComponent.cs index f07a77c1ac..db4ad37c7a 100644 --- a/Content.Shared/Chemistry/Components/SmokeComponent.cs +++ b/Content.Shared/Chemistry/Components/SmokeComponent.cs @@ -16,7 +16,7 @@ public sealed partial class SmokeComponent : Component /// /// The solution on the entity with touch and ingestion reactions. /// - [DataField] + [ViewVariables] public Entity? Solution = null; /// diff --git a/Content.Shared/Chemistry/Components/SolutionContainerMixerComponent.cs b/Content.Shared/Chemistry/Components/SolutionContainerMixerComponent.cs index 8e4b6f52d8..58aba43627 100644 --- a/Content.Shared/Chemistry/Components/SolutionContainerMixerComponent.cs +++ b/Content.Shared/Chemistry/Components/SolutionContainerMixerComponent.cs @@ -33,7 +33,7 @@ public sealed partial class SolutionContainerMixerComponent : Component [DataField, AutoNetworkedField] public SoundSpecifier? MixingSound; - [DataField] + [ViewVariables] public Entity? MixingSoundEntity; } diff --git a/Content.Shared/Execution/DoafterEvent.cs b/Content.Shared/Execution/DoafterEvent.cs deleted file mode 100644 index 7854974527..0000000000 --- a/Content.Shared/Execution/DoafterEvent.cs +++ /dev/null @@ -1,9 +0,0 @@ -using Content.Shared.DoAfter; -using Robust.Shared.Serialization; - -namespace Content.Shared.Execution; - -[Serializable, NetSerializable] -public sealed partial class ExecutionDoAfterEvent : SimpleDoAfterEvent -{ -} diff --git a/Content.Shared/Execution/DoAfterEvent.cs b/Content.Shared/Execution/ExecutionDoAfterEvent.cs similarity index 100% rename from Content.Shared/Execution/DoAfterEvent.cs rename to Content.Shared/Execution/ExecutionDoAfterEvent.cs diff --git a/Content.Shared/Fluids/Components/DrainComponent.cs b/Content.Shared/Fluids/Components/DrainComponent.cs index 4fb4fe9438..3a7bb9c1d6 100644 --- a/Content.Shared/Fluids/Components/DrainComponent.cs +++ b/Content.Shared/Fluids/Components/DrainComponent.cs @@ -20,7 +20,7 @@ public sealed partial class DrainComponent : Component [ValidatePrototypeId] public const string PlungerTag = "Plunger"; - [DataField] + [ViewVariables] public Entity? Solution = null; [DataField("accumulator")] diff --git a/Content.Shared/Fluids/Components/PuddleComponent.cs b/Content.Shared/Fluids/Components/PuddleComponent.cs index b8a6fe0cb8..5434479fb7 100644 --- a/Content.Shared/Fluids/Components/PuddleComponent.cs +++ b/Content.Shared/Fluids/Components/PuddleComponent.cs @@ -19,7 +19,7 @@ namespace Content.Shared.Fluids.Components [DataField("solution")] public string SolutionName = "puddle"; - [DataField("solutionRef")] + [ViewVariables] public Entity? Solution; } } diff --git a/Content.Shared/Footprint/FootPrintComponent.cs b/Content.Shared/Footprint/FootPrintComponent.cs index e1f9716057..ec9fbec021 100644 --- a/Content.Shared/Footprint/FootPrintComponent.cs +++ b/Content.Shared/Footprint/FootPrintComponent.cs @@ -18,6 +18,6 @@ public sealed partial class FootPrintComponent : Component [DataField] public string SolutionName = "step"; - [DataField] + [ViewVariables] public Entity? Solution; } diff --git a/Content.Shared/Mind/MindComponent.cs b/Content.Shared/Mind/MindComponent.cs index 51a174c846..e2ace2198b 100644 --- a/Content.Shared/Mind/MindComponent.cs +++ b/Content.Shared/Mind/MindComponent.cs @@ -46,9 +46,9 @@ namespace Content.Shared.Mind /// The first entity that this mind controlled. Used for round end information. /// Might be relevant if the player has ghosted since. /// - [DataField, AutoNetworkedField] - public NetEntity? OriginalOwnedEntity; - // This is a net entity, because this field currently ddoes not get set to null when this entity is deleted. + [AutoNetworkedField] + public NetEntity? OriginalOwnedEntity; // TODO WeakEntityReference make this a Datafield again + // This is a net entity, because this field currently does not get set to null when this entity is deleted. // This is a lazy way to ensure that people check that the entity still exists. // TODO MIND Fix this properly by adding an OriginalMindContainerComponent or something like that. diff --git a/Content.Shared/Prototypes/LocalizedPrototype.cs b/Content.Shared/Prototypes/LocalizedPrototype.cs index acdd5fc180..b2f79864d1 100644 --- a/Content.Shared/Prototypes/LocalizedPrototype.cs +++ b/Content.Shared/Prototypes/LocalizedPrototype.cs @@ -26,10 +26,16 @@ public abstract class LocalizedPrototype : IPrototype ((PrototypeAttribute?) Attribute.GetCustomAttribute(GetType(), typeof(PrototypeAttribute)))?.Type ?? GetType().Name.Remove(GetType().Name.Length - 9); // Lowercase the first letter - type = char.ToLowerInvariant(type[0]) + type[1..]; + type = OopsConcat(char.ToLowerInvariant(type[0]).ToString(), type[1..]); // Replace every uppercase letter with a dash and the lowercase letter - type = type.Aggregate("", (current, c) => current + (char.IsUpper(c) ? "-" + char.ToLowerInvariant(c) : c.ToString())); + type = type.Aggregate("", (current, c) => current + (char.IsUpper(c) ? OopsConcat("-", char.ToLowerInvariant(c).ToString()) : c.ToString())); return string.Format(LocFormat, type, ID, field); } + + private static string OopsConcat(string a, string b) + { + // This exists to prevent Roslyn being clever and compiling something that fails sandbox checks. + return a + b; + } } diff --git a/Content.Shared/Silicons/StationAi/StationAiVisionSystem.cs b/Content.Shared/Silicons/StationAi/StationAiVisionSystem.cs index bdc62a6bb3..86fd5881fe 100644 --- a/Content.Shared/Silicons/StationAi/StationAiVisionSystem.cs +++ b/Content.Shared/Silicons/StationAi/StationAiVisionSystem.cs @@ -278,7 +278,7 @@ public sealed class StationAiVisionSystem : EntitySystem /// private record struct SeedJob() : IRobustJob { - public StationAiVisionSystem System; + public required StationAiVisionSystem System; public Entity Grid; public Box2 ExpandedBounds; @@ -293,14 +293,14 @@ public sealed class StationAiVisionSystem : EntitySystem { public int BatchSize => 1; - public IEntityManager EntManager; - public SharedMapSystem Maps; - public StationAiVisionSystem System; + public required IEntityManager EntManager; + public required SharedMapSystem Maps; + public required StationAiVisionSystem System; public Entity Grid; public List> Data = new(); - public HashSet VisibleTiles; + public HashSet VisibleTiles = new(); public readonly List> Vis1 = new(); public readonly List> Vis2 = new(); diff --git a/global.json b/global.json index c8526b0a8b..cdbb589eda 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "8.0.100", - "rollForward": "patch" + "version": "9.0.100", + "rollForward": "latestFeature" } }