diff --git a/.github/workflows/benchmarks.yml b/.github/workflows/benchmarks.yml
deleted file mode 100644
index 827cc9c64eb..00000000000
--- a/.github/workflows/benchmarks.yml
+++ /dev/null
@@ -1,41 +0,0 @@
-name: Benchmarks
-on:
- workflow_dispatch:
- schedule:
- - cron: '0 5 * * *'
- push:
- tags:
- - 'v*'
-
-concurrency: benchmarks
-
-jobs:
- benchmark:
- name: Run Benchmarks
- runs-on: ubuntu-latest
- steps:
- - name: Run script on centcomm
- uses: appleboy/ssh-action@master
- with:
- host: centcomm.spacestation14.io
- username: robust-benchmark-runner
- key: ${{ secrets.CENTCOMM_ROBUST_BENCHMARK_RUNNER_KEY }}
- command_timeout: 100000m
- script: |
- mkdir benchmark_run_${{ github.sha }}
- cd benchmark_run_${{ github.sha }}
- git clone https://github.com/space-wizards/RobustToolbox.git repo_dir --recursive
- cd repo_dir
- git checkout ${{ github.sha }}
- cd Robust.Benchmarks
- dotnet restore
- export ROBUST_BENCHMARKS_ENABLE_SQL=1
- export ROBUST_BENCHMARKS_SQL_ADDRESS="${{ secrets.BENCHMARKS_WRITE_ADDRESS }}"
- export ROBUST_BENCHMARKS_SQL_PORT="${{ secrets.BENCHMARKS_WRITE_PORT }}"
- export ROBUST_BENCHMARKS_SQL_USER="${{ secrets.BENCHMARKS_WRITE_USER }}"
- export ROBUST_BENCHMARKS_SQL_PASSWORD="${{ secrets.BENCHMARKS_WRITE_PASSWORD }}"
- export ROBUST_BENCHMARKS_SQL_DATABASE="benchmarks"
- export GITHUB_SHA="${{ github.sha }}"
- dotnet run --filter '*' --configuration Release
- cd ../../..
- rm -rf benchmark_run_${{ github.sha }}
diff --git a/.github/workflows/build-all-configurations.yml b/.github/workflows/build-all-configurations.yml
index 2f209bda4ef..fc969e44672 100644
--- a/.github/workflows/build-all-configurations.yml
+++ b/.github/workflows/build-all-configurations.yml
@@ -4,8 +4,13 @@ on:
push:
branches: [master]
pull_request:
+ types: [ opened, reopened, synchronize, ready_for_review ]
branches: [master]
+concurrency:
+ group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.event.pull_request.number || github.ref }}
+ cancel-in-progress: ${{ github.event_name != 'merge_group' }}
+
jobs:
build:
strategy:
diff --git a/.github/workflows/build-docfx.yml b/.github/workflows/build-docfx.yml
deleted file mode 100644
index 46f443ac23b..00000000000
--- a/.github/workflows/build-docfx.yml
+++ /dev/null
@@ -1,34 +0,0 @@
-name: Build & Publish DocFX
-
-on:
- schedule:
- - cron: "0 0 * * 0"
-jobs:
- docfx:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v4.2.2
- with:
- submodules: true
-
- - name: Setup .NET Core
- uses: actions/setup-dotnet@v4.1.0
- with:
- dotnet-version: 10.0.x
-
- - name: Install dependencies
- run: dotnet restore
-
- - name: Build Project
- run: dotnet build --no-restore /p:WarningsAsErrors=nullable
-
- - name: Build DocFX
- uses: nikeee/docfx-action@v1.0.0
- with:
- args: Robust.Docfx/docfx.json
-
- - name: Publish Docfx Documentation on GitHub Pages
- uses: maxheld83/ghpages@master
- env:
- BUILD_DIR: Robust.Docfx/_robust-site
- GH_PAT: ${{ secrets.GH_PAT }}
diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml
index 87cc7573d36..3a0d8a41cd0 100644
--- a/.github/workflows/build-test.yml
+++ b/.github/workflows/build-test.yml
@@ -4,8 +4,13 @@ on:
push:
branches: [master]
pull_request:
+ types: [ opened, reopened, synchronize, ready_for_review ]
branches: [master]
+concurrency:
+ group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.event.pull_request.number || github.ref }}
+ cancel-in-progress: ${{ github.event_name != 'merge_group' }}
+
jobs:
build:
strategy:
@@ -13,6 +18,7 @@ jobs:
os: [ubuntu-latest, windows-latest, macos-latest]
runs-on: ${{ matrix.os }}
+ timeout-minutes: 30
steps:
- uses: actions/checkout@v4.2.2
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
deleted file mode 100644
index ae600a3be6d..00000000000
--- a/.github/workflows/codeql-analysis.yml
+++ /dev/null
@@ -1,71 +0,0 @@
-# For most projects, this workflow file will not need changing; you simply need
-# to commit it to your repository.
-#
-# You may wish to alter this file to override the set of languages analyzed,
-# or to provide custom queries or build logic.
-#
-# ******** NOTE ********
-# We have attempted to detect the languages in your repository. Please check
-# the `language` matrix defined below to confirm you have the correct set of
-# supported CodeQL languages.
-#
-name: "CodeQL"
-
-on:
- workflow_dispatch
-
-jobs:
- analyze:
- name: Analyze
- runs-on: ubuntu-latest
-
- strategy:
- fail-fast: false
- matrix:
- language: ["csharp"]
- # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
- # Learn more:
- # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4.2.2
- with:
- submodules: true
-
- - name: Setup .NET Core
- uses: actions/setup-dotnet@v4.1.0
- with:
- dotnet-version: 7.0.x
-
- - name: Build
- run: dotnet build
-
- # Initializes the CodeQL tools for scanning.
- - name: Initialize CodeQL
- uses: github/codeql-action/init@v1
- with:
- languages: ${{ matrix.language }}
- # If you wish to specify custom queries, you can do so here or in a config file.
- # By default, queries listed here will override any specified in a config file.
- # Prefix the list here with "+" to use these queries and those in the config file.
- # queries: ./path/to/local/query, your-org/your-repo/queries@main
-
- # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
- # If this step fails, then you should remove it and run the build manually (see below)
- - name: Autobuild
- uses: github/codeql-action/autobuild@v1
-
- # ℹ️ Command-line programs to run using the OS shell.
- # 📚 https://git.io/JvXDl
-
- # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
- # and modify them (or add more) to build your code if your project
- # uses a compiled language
-
- #- run: |
- # make bootstrap
- # make release
-
- - name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@v1
diff --git a/.github/workflows/publish-client.yml b/.github/workflows/publish-client.yml
index 4767740a2ff..5319e4bec30 100644
--- a/.github/workflows/publish-client.yml
+++ b/.github/workflows/publish-client.yml
@@ -33,10 +33,10 @@ jobs:
mkdir "release/${{ steps.parse_version.outputs.version }}"
mv release/*.zip "release/${{ steps.parse_version.outputs.version }}"
- - name: Upload files to Suns
+ - name: Upload files to Dropwig
uses: appleboy/scp-action@master
with:
- host: suns.spacestation14.com
+ host: dropwig.playss14.com
username: robust-build-push
key: ${{ secrets.CENTCOMM_ROBUST_BUILDS_PUSH_KEY }}
source: "release/${{ steps.parse_version.outputs.version }}"
@@ -46,7 +46,7 @@ jobs:
- name: Update manifest JSON
uses: appleboy/ssh-action@master
with:
- host: suns.spacestation14.com
+ host: dropwig.playss14.com
username: robust-build-push
key: ${{ secrets.CENTCOMM_ROBUST_BUILDS_PUSH_KEY }}
script: /home/robust-build-push/push.ps1 ${{ steps.parse_version.outputs.version }}
diff --git a/.github/workflows/test-content.yml b/.github/workflows/test-content.yml
index f8014cc945a..2bdd0c06291 100644
--- a/.github/workflows/test-content.yml
+++ b/.github/workflows/test-content.yml
@@ -4,11 +4,17 @@ on:
push:
branches: [master]
pull_request:
+ types: [ opened, reopened, synchronize, ready_for_review ]
branches: [master]
+concurrency:
+ group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.event.pull_request.number || github.ref }}
+ cancel-in-progress: ${{ github.event_name != 'merge_group' }}
+
jobs:
build:
runs-on: ubuntu-latest
+ timeout-minutes: 30
steps:
- name: Check out content
@@ -34,7 +40,9 @@ jobs:
run: cp RobustToolbox/global.json .
- name: Install dependencies
run: dotnet restore
- - name: Build
+ - name: Build (Release)
+ run: dotnet build --configuration Release --no-restore /m
+ - name: Build (Debug)
run: dotnet build --configuration DebugOpt --no-restore /m
- name: Content.Tests
shell: pwsh
diff --git a/.gitmodules b/.gitmodules
index ced7b604ef7..4f7f4889a01 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -3,7 +3,7 @@
url = https://github.com/space-wizards/netserializer
[submodule "Lidgren.Network"]
path = Lidgren.Network/Lidgren.Network
- url = https://github.com/ss14Starlight/SpaceWizards.Lidgren.Network.git
+ url = https://github.com/space-wizards/SpaceWizards.Lidgren.Network.git
[submodule "XamlX"]
path = XamlX
url = https://github.com/space-wizards/XamlX
diff --git a/Directory.Build.props b/Directory.Build.props
index 446a43ae83c..8d998165911 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -24,4 +24,10 @@
-->
$(NoWarn);NU1510
+
+
+
+ false
+
diff --git a/Directory.Packages.props b/Directory.Packages.props
index 69000ce2613..e740d3a3e38 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -48,7 +48,7 @@
-
+
@@ -69,6 +69,7 @@
+
diff --git a/Lidgren.Network/Lidgren.Network b/Lidgren.Network/Lidgren.Network
index b060f75c6bd..68a5b883d5c 160000
--- a/Lidgren.Network/Lidgren.Network
+++ b/Lidgren.Network/Lidgren.Network
@@ -1 +1 @@
-Subproject commit b060f75c6bde4a0bd0623da15b7eecf9f4eca5cb
+Subproject commit 68a5b883d5c3f5d4eabda8f04a2f4fd1afce12f4
diff --git a/MSBuild/Robust.Engine.Version.props b/MSBuild/Robust.Engine.Version.props
index bac96a1d378..befe6da3636 100644
--- a/MSBuild/Robust.Engine.Version.props
+++ b/MSBuild/Robust.Engine.Version.props
@@ -1,4 +1,4 @@
- 277.0.0
+ 283.0.0
diff --git a/MSBuild/Robust.EntitySystemSubscriptionsGenerator.targets b/MSBuild/Robust.EntitySystemSubscriptionsGenerator.targets
new file mode 100644
index 00000000000..dd74af58764
--- /dev/null
+++ b/MSBuild/Robust.EntitySystemSubscriptionsGenerator.targets
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md
index e60a7b1ed48..5eb382e8722 100644
--- a/RELEASE-NOTES.md
+++ b/RELEASE-NOTES.md
@@ -54,6 +54,251 @@ END TEMPLATE-->
*None yet*
+## 283.0.0
+
+### Breaking changes
+
+* The CompNetworkGenerator now .Clears and .Adds for collections where possible on the client.
+* Defer UI state application until the Update loop.
+* Expose the file name for selected file in dialog.
+* Removed unused GridEventHandler.
+
+### New features
+
+* Added a NetMessage.EstimateBufferSize() to provide an estimate of the initialCapacity required for NetMessages. This will make NetMessage take an existing adequately sized pooled buffer for your message. This is opt-in and will default to the old 4-byte size if not specified.
+* Add AudioParams.AddVariation.
+* Made AudioAuxiliaryComponent public.
+* Added API for OwnedTexture to load a texture without caching it.
+* Make TableContainer virtual and public.
+* Try to make connection failure message more useful by not defaulting to the first message (on IPV4 or IPV6).
+* Add methods for generating Color palettes.
+* Expose FovRenderTarget for the viewport.
+* Add TryComp(EntityUid, Type, IComponent?) proxy methods to EntitySystem.
+
+### Bugfixes
+
+* Static + StaticSundries will now also be considered for grid-traversal when a grid moves over these entities.
+* Fix field deltas not supporting 1-field states.
+* Fix interface cast in serialization generator.
+* Dispose PVS session states on disconnect.
+* Fix BaseWindow jittering on resize.
+
+### Internal
+
+* Improve clean and incremental build times around serialization generators.
+* Cleanup engine warnings around transform handling.
+* Made several internal performance improvements on debug and release.
+
+
+## 282.0.0
+
+### Breaking changes
+
+* Serv5 has been merged, re-doing the internals of DataDefinition serialization.
+ * It can now write into readonly fields.
+ * DataFields defined on objects that don't have DataDefinitions will cause errors in the analyzer and require the attribute.
+ * Value types will now be copied directly where possible rather than round-tripping through TryCustomCopy if no custom serializer is specified.
+ * It no longer uses as many expression trees so more tests should be able to run concurrently
+
+
+## 281.0.0
+
+### Breaking changes
+
+* Updated Lidgren.Network to `04678d057cc503f14f49801a725e61cfe27790a0` with additional fixes around MTU handling, NAT handling, and malformed packets.
+
+### New features
+
+* Exposed new Lidgren properties/CVARs for the above-mentioned fixes and previous updates around rate-limit settings.
+
+### Bugfixes
+
+* Fixed `EntitySystemSubscriptionsGenerator` not targeting server-side `SubscribeLocalEvent`/`SubscribeNetworkEvent` attributes.
+
+
+## 280.0.1
+
+### Bugfixes
+
+* Fix DynamicTree.Clear not removing node references.
+* Reverted validation for `UiBox2i` `ctor`s as it was causing regressions in debug UIs.
+* Fix command completions not being ordered. The list will still populate by any commands that contain the supplied arg.
+* Lidgren rate-limit settings were tweaked to make it less likely that players will unintentionally trigger it
+
+### Other
+
+* `EyeComponent.DrawLight` is now serialized.
+
+
+## 280.0.0
+
+### Breaking changes
+
+* Validate UIBox2i inputs
+* IMapManager has been completely nuked from the codebase. Almost all of its content-facing functionality was ported to `SharedMapSystem` in https://github.com/space-wizards/RobustToolbox/pull/6579 beforehand.
+
+### New features
+
+* Lidgren now rate-limits logging. You can control this via the `net.lidgren_log_rate_...` CVars.
+
+### Bugfixes
+
+* Fixed Lidgren.ChatClient/ChatServer not building properly.
+* Fixed multiple sources of memory exhaustion/DOS attack surfaces in Lidgren.
+
+
+## 279.0.1
+
+### Bugfixes
+
+* Fix SubscribeLocalEvent name and added `MeansImplicitUse` attribute to the sourcegenned eventbus methods.
+
+
+## 279.0.0
+
+### Breaking changes
+
+* Validate Box2i inputs to ensure no negative-sized boxes.
+* Removed QuadTree due to lack of maintenance, test coverage, and usage.
+* Partivally reverted the additional mouse cursors on button hovers.
+* Changed SpawnAtPosition EntityCoordinates overload to use the attached entity's rotation, and also added a rotation override argument.
+* Reduced the default ReallyBeIdle tick count from 25 to 5.
+
+### New features
+
+* Added DictionaryEquals helper method to compare elements to determine if 2 dictionaries are identical.
+* Tracy integration is now supported for profiling.
+* SubscribeLocalEvent and SubscribeNetworkEvent can now be replaced with the similarly named attributes on methods.
+* Adds `AttachedAudioDespawnedEvent`, which is raised against the parent of a despawning `AudioComponent`.
+* Added a DictionaryEquals extension method to check equality between two dictionaries.
+* Added support for uploading .ftl files. Format is: //.ftl - Example: /TestUpload/en-US.ftl , you can have multiple files, so long they are on different subfolders, they will all be loaded.
+
+### Bugfixes
+
+* Fix IsHardCollidable mask check.
+* Fix Robust.Benchmarks not compiling in some instances.
+* Fix ApplyLinearImpulse not correctly using world-space.
+* Fix OnClientRequestFull throwing an error when logging deleted entities.
+
+### Internal
+
+* Unnecessary prototypemanager dependencies were removed from engine systems.
+* Added a 30m timeout to engine test workflows.
+* Cleaned up ContainerSystems and PlayerManagers code-files.
+
+
+## 278.0.0
+
+### Breaking changes
+
+* Remove the duplicate serialization copy of components kept on ComponentRegistryEntry; now it only stores the deserialized component. To get the raw MappingDataNode for EntityPrototypes use PrototypeManager. This is expected to significantly reduce memory usage.
+* Obsolete LocalRotation in favor of the system method. The angle is now also normalized to 2PI and no longer grows indefinitely.
+* Obsoleted IMapManager methods in lieu of SharedMapSystem.
+
+### New features
+
+* Add a `OnlyRotation` property to MoveEvent where the EntityCoordinates remain the same.
+* ValueList now implements IList and not just IEnumerable.
+* Add a BoundUserInterfaceMessageReceivedEvent that will be raised whenever a BoundUserInterfaceMessage is received regardless of validation.
+* Added `IsHardCollidable` to `SharedPhysicsSystem`.
+* Added `GetFilledTileCount` to `SharedMapSystem`.
+* Changed the cursors on interactive controls.
+* Added new `StyleProperty` `track` to `ScrollBar` that takes a `StyleBox` and displays it as a backing track for the whole height of the `ScrollBar`.
+* Scroll Lock is now a bindable key.
+* The obsoleted TryIndex methods on PrototypeManager have now been removed.
+* Add batched Box2 / Box2Rotated drawing methods to Clyde WorldHandle.
+* Completion filter now works by Contains instead of StartsWith
+* Add SwitchAudioDevice API to AudioManager.
+* Added a PhysicsBodyStatusChangedEvent (self-descriptive).
+* Allow enumeration on EntityQuery.
+
+### Bugfixes
+
+* Fix ValueList TryPop not clearing element references.
+* Fix ValueList Peek always throwing by referencing the wrong index.
+* Windows will stay at relative position not absolute pixel position on window resize.
+* Fixed override properties in `WrapContainer` not actually overriding the Style Properties.
+* Fixed `BoxContainer`'s `SeparationOverride` not overriding the Style Properties.
+* Fixed `SeparationOverride` not invalidating measure.
+* Fixed swapped parameters in `MapManager`'s `FindGridsIntersecting` methods.
+* Fix DataRecord serialization.
+
+### Other
+
+* Optimise Direction and DirectionFlag methods.
+* Added Pure attributes to the `EntityLookup` bounds methods.
+* Improved performance of collision filter test.
+* Removed an outdated xmldoc comment regarding dependency injection.
+* Audio resources now use `AsSpan` when checking signatures.
+
+### Internal
+
+* Reduce TryParseEnum string allocations.
+* Reduce TryRelativeTo string allocations.
+* Reduce OpenGL logging string allocations on debug for the client.
+* Optimise sprite sorting slightly.
+* Simplify and optimise Box2.Contains(Vector2)
+* Optimise ComponentRegistry deserialization slightly.
+* Optimise Box2Rotated.TransformBox slightly.
+* Added several test helpers to avoid boilerplate in integration tests around client connection / disconnection.
+* Simplifed AccessAnalyzer check to speed it up.
+
+## 277.2.1
+
+### Bugfixes
+
+* Fixed a bug in Lidgren.Network HandleReleasedFragment that could cause out of memory errors.
+
+
+## 277.2.0
+
+### New features
+
+* Local and guest trust scores are now assigned via the `auth.localtrust` and `auth.guesttrust` CVars.
+
+### Bugfixes
+
+* Fixed exceptions related to WebSocket transfer system.
+
+
+## 277.1.0
+
+### New features
+
+* Console commands can now be "hidden" by prefixing them with `_`.
+* Add `ESCAPE()` and `ESCAPE-PARAM()` localization functions, for escaping text for markup formatting.
+* The `[cmdlink /]` tag can now have a tooltip specified with the optional "title" attribute.
+* Added `CommandParsing.EscapeCommand()` for *formatting* command strings easily.
+* Added `IUserInterfaceManager.GetRootForMouse()`.
+* Added `Popup.OpenAtCursor()`.
+* Added `FormattedStringBuilder` for safely constructing markup with code.
+* Added `VBox` and `HBox` convenience types for more concisely construct `BoxContainer`s.
+* Added `IsLocal` to `NetUserData`.
+* Add `SharedMapSystem.GetFilledTileCount()`
+* Add a `track` style property for scroll bars.
+* Added `ScrollLock` key.
+
+### Bugfixes
+
+* Fixes override properties in `WrapContainer` not being respected properly.
+* Fix `BoxContainer.SeparationOverride` not being respected properly and not invalidating layout.
+* Fixed swapped arguments being passed through in various `FindGridsIntersecting` overloads.
+* Fixed a doc comment in `LocalizationManager`.
+
+### Other
+
+* Add Pure attributes to the EntityLookup bounds methods
+* Bump `Robust.Natives` to `0.2.5`.
+* Minor performance improvement in `IsHardCollidable()`.
+* Remove an outdated paragraph from `[DependencyAttribute]` documentation related to `readonly` fields.
+* More stock controls use alternative cursor shapes where appropriate.
+* Minor performance improvement to audio loading.
+
+### Internal
+
+* Added `.lscache` to `.gitignore`.
+
+
## 277.0.0
### New features
diff --git a/Resources/Locale/en-US/commands.ftl b/Resources/Locale/en-US/commands.ftl
index 4d4e3264618..fcafc42eedf 100644
--- a/Resources/Locale/en-US/commands.ftl
+++ b/Resources/Locale/en-US/commands.ftl
@@ -306,6 +306,15 @@ cmd-addmap-help = Usage: {$command} [pre-init]
cmd-rmmap-desc = Removes a map from the world. You cannot remove nullspace.
cmd-rmmap-help = Usage: {$command}
+cmd-pausemap-desc = Pauses a map, pausing all simulation processing on it.
+cmd-pausemap-help = Usage: pausemap