diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
index e9bc96263..6f75e0878 100644
--- a/.github/workflows/build.yaml
+++ b/.github/workflows/build.yaml
@@ -14,9 +14,10 @@ jobs:
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
- dotnet-version: '7.0.x'
+ dotnet-version: '8.0.x'
+ dotnet-quality: 'preview'
- - uses: actions/cache@v1
+ - uses: actions/cache@v3
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml
index 9fde2ea00..c92078d2b 100644
--- a/.github/workflows/publish.yaml
+++ b/.github/workflows/publish.yaml
@@ -31,7 +31,7 @@ jobs:
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
- dotnet-version: '7.0.x'
+ dotnet-version: '8.0.x'
- name: Install Minver
run: dotnet tool install --global minver-cli --version 4.3.0
@@ -51,7 +51,7 @@ jobs:
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
- dotnet-version: '7.0.x'
+ dotnet-version: '8.0.x'
- uses: actions/cache@v1
with:
@@ -98,7 +98,7 @@ jobs:
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
- dotnet-version: '7.0.x'
+ dotnet-version: '8.0.x'
- uses: actions/cache@v1
with:
diff --git a/.gitignore b/.gitignore
index b0b3b3669..5bba0909a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,6 +10,8 @@
!**/appsettings.json
!**/devsettings.json
+!**/packages.lock.json
+
.env
scripts.zip
data.zip
diff --git a/src/Source.targets b/src/Source.targets
index 6d2c14c28..37ab9f42c 100644
--- a/src/Source.targets
+++ b/src/Source.targets
@@ -1,11 +1,15 @@
- net7.0
+ net8.0
enable
enable
+
+ true
+
+
Kaioru
@@ -27,16 +31,5 @@
-
-
- preview
- 1.0
-
-
-
- runtime; build; native; contentfiles; analyzers; buildtransitive
- all
-
-
\ No newline at end of file
diff --git a/src/app/Edelstein.Application.Server/Bootstraps/LoadTemplateBootstrap.cs b/src/app/Edelstein.Application.Server/Bootstraps/LoadTemplateBootstrap.cs
index 0c35855a5..f3769eb85 100644
--- a/src/app/Edelstein.Application.Server/Bootstraps/LoadTemplateBootstrap.cs
+++ b/src/app/Edelstein.Application.Server/Bootstraps/LoadTemplateBootstrap.cs
@@ -1,4 +1,4 @@
-using System.Collections.Immutable;
+using System.Collections.Frozen;
using System.Diagnostics;
using Edelstein.Common.Utilities.Templates;
using Microsoft.Extensions.Logging;
@@ -16,7 +16,7 @@ IEnumerable loaders
)
{
_logger = logger;
- _loaders = loaders.ToImmutableList();
+ _loaders = loaders.ToFrozenSet();
}
public int Priority => BootstrapPriority.Load;
diff --git a/src/app/Edelstein.Application.Server/Edelstein.Application.Server.csproj b/src/app/Edelstein.Application.Server/Edelstein.Application.Server.csproj
index 4d7facf06..f3edc87b2 100644
--- a/src/app/Edelstein.Application.Server/Edelstein.Application.Server.csproj
+++ b/src/app/Edelstein.Application.Server/Edelstein.Application.Server.csproj
@@ -14,7 +14,7 @@
-
+
diff --git a/src/app/Edelstein.Application.Server/packages.lock.json b/src/app/Edelstein.Application.Server/packages.lock.json
new file mode 100644
index 000000000..6f41eca2d
--- /dev/null
+++ b/src/app/Edelstein.Application.Server/packages.lock.json
@@ -0,0 +1,861 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {
+ "Autofac": {
+ "type": "Direct",
+ "requested": "[7.1.0, )",
+ "resolved": "7.1.0",
+ "contentHash": "XCXmpxhOnuztTTRkzG+8B8KU8SR8WjBYwSntndjlsFR5lM3K/g43r9hUwewIPDBJwDrmZU3TjmNdH6s8IF3VFQ==",
+ "dependencies": {
+ "System.Diagnostics.DiagnosticSource": "4.7.1"
+ }
+ },
+ "Autofac.Extensions.DependencyInjection": {
+ "type": "Direct",
+ "requested": "[8.0.0, )",
+ "resolved": "8.0.0",
+ "contentHash": "nGrXNpQX2FiZpIBydK9cxZnnoqP/cUd3k/53uRERYEqLtWzKtE15R6L+j5q5ax5Rv/+3wAIkOaPePkahfqrwjg==",
+ "dependencies": {
+ "Autofac": "6.4.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0"
+ }
+ },
+ "AutoMapper.Extensions.Microsoft.DependencyInjection": {
+ "type": "Direct",
+ "requested": "[12.0.1, )",
+ "resolved": "12.0.1",
+ "contentHash": "+g/K+Vpe3gGMKGzjslMOdqNlkikScDjWfVvmWTayrDHaG/n2pPmFBMa+jKX1r/h6BDGFdkyRjAuhFE3ykW+r1g==",
+ "dependencies": {
+ "AutoMapper": "[12.0.1]",
+ "Microsoft.Extensions.Options": "6.0.0"
+ }
+ },
+ "Duey.Provider.NX": {
+ "type": "Direct",
+ "requested": "[2.0.0, )",
+ "resolved": "2.0.0",
+ "contentHash": "+rUyVKH5twoxsv7Rfy0GUDvA78t0M0vKCGGtfMzljDcsX/RyeeNj0ZJENZ9w7va0J+Nm69XMPEjrxZyWMV5uVQ==",
+ "dependencies": {
+ "Duey.Abstractions": "2.0.0",
+ "K4os.Compression.LZ4": "1.3.6"
+ }
+ },
+ "Duey.Provider.WZ": {
+ "type": "Direct",
+ "requested": "[2.0.0, )",
+ "resolved": "2.0.0",
+ "contentHash": "byBI5tAqQvJ8u/Lqyhg0Dg8AkrdKuAP3rF2pA0RkQSBcgdRCsKKLP4ogisCadrt5x+xjN0OMEYOrxjUc1axYoA==",
+ "dependencies": {
+ "Duey.Abstractions": "2.0.0"
+ }
+ },
+ "Foundatio.JsonNet": {
+ "type": "Direct",
+ "requested": "[10.6.1, )",
+ "resolved": "10.6.1",
+ "contentHash": "y+OMdteUdbp2t7Qp7KeYl+bwtYXLLP2PNwe+8BUutVeL08m7e6cWspUGgDePwe4L3RtnYz9jzEJOE82EVYMdMQ==",
+ "dependencies": {
+ "Foundatio": "10.6.1",
+ "Newtonsoft.Json": "13.0.1"
+ }
+ },
+ "Microsoft.EntityFrameworkCore": {
+ "type": "Direct",
+ "requested": "[7.0.10, )",
+ "resolved": "7.0.10",
+ "contentHash": "24NbXJqJ/x8u88/agqeb1pLdAF9+9StDLA36+P/3g5xsJPOaB2GxXn7epR8dWpZTgHsNZ7cvBMxBgfFmF+xZlg==",
+ "dependencies": {
+ "Microsoft.EntityFrameworkCore.Abstractions": "7.0.10",
+ "Microsoft.EntityFrameworkCore.Analyzers": "7.0.10",
+ "Microsoft.Extensions.Caching.Memory": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection": "7.0.0",
+ "Microsoft.Extensions.Logging": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration": {
+ "type": "Direct",
+ "requested": "[8.0.0-rc.1.23419.4, )",
+ "resolved": "8.0.0-rc.1.23419.4",
+ "contentHash": "NoIBM0qnZrl5o3em/5Qx4T3HcDruKdDVvm4PsG/wiuWawtwHRqaqkFjPS66lPnu1Kgzv+D1JJd+r4C5wPxXErw==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "8.0.0-rc.1.23419.4",
+ "Microsoft.Extensions.Primitives": "8.0.0-rc.1.23419.4"
+ }
+ },
+ "Microsoft.Extensions.Configuration.Json": {
+ "type": "Direct",
+ "requested": "[7.0.0, )",
+ "resolved": "7.0.0",
+ "contentHash": "LDNYe3uw76W35Jci+be4LDf2lkQZe0A7EEYQVChFbc509CpZ4Iupod8li4PUXPBhEUOFI/rlQNf5xkzJRQGvtA==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "7.0.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Configuration.FileExtensions": "7.0.0",
+ "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
+ "System.Text.Json": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "Direct",
+ "requested": "[7.0.0, )",
+ "resolved": "7.0.0",
+ "contentHash": "elNeOmkeX3eDVG6pYVeV82p29hr+UKDaBhrZyWvWLw/EVZSYEkZlQdkp0V39k/Xehs2Qa0mvoCvkVj3eQxNQ1Q==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Hosting": {
+ "type": "Direct",
+ "requested": "[7.0.1, )",
+ "resolved": "7.0.1",
+ "contentHash": "aoeMou6XSW84wiqd895OdaGyO9PfH6nohQJ0XBcshRDafbdIU6PQIVl8TpOCssPYq3ciRseP5064hbFyCR9J9w==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "7.0.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Configuration.Binder": "7.0.3",
+ "Microsoft.Extensions.Configuration.CommandLine": "7.0.0",
+ "Microsoft.Extensions.Configuration.EnvironmentVariables": "7.0.0",
+ "Microsoft.Extensions.Configuration.FileExtensions": "7.0.0",
+ "Microsoft.Extensions.Configuration.Json": "7.0.0",
+ "Microsoft.Extensions.Configuration.UserSecrets": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
+ "Microsoft.Extensions.FileProviders.Physical": "7.0.0",
+ "Microsoft.Extensions.Hosting.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging": "7.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging.Configuration": "7.0.0",
+ "Microsoft.Extensions.Logging.Console": "7.0.0",
+ "Microsoft.Extensions.Logging.Debug": "7.0.0",
+ "Microsoft.Extensions.Logging.EventLog": "7.0.0",
+ "Microsoft.Extensions.Logging.EventSource": "7.0.0",
+ "Microsoft.Extensions.Options": "7.0.1",
+ "System.Diagnostics.DiagnosticSource": "7.0.1"
+ }
+ },
+ "Serilog": {
+ "type": "Direct",
+ "requested": "[3.0.1, )",
+ "resolved": "3.0.1",
+ "contentHash": "E4UmOQ++eNJax1laE+lws7E3zbhKgHsGJbO7ra0yE5smUh+5FfUPIKKBxM3MO1tK4sgpQke6/pLReDxIc/ggNw=="
+ },
+ "Serilog.Extensions.Hosting": {
+ "type": "Direct",
+ "requested": "[7.0.0, )",
+ "resolved": "7.0.0",
+ "contentHash": "AWsDTs6TeCtyXYDWakzLXCOZA3/IdIfBWBwkYAF0ZvVktVr3E15oYP9pfI7GzKaGVmHaJF9TgFQnFEfcnzEkcw==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Hosting.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
+ "Serilog": "2.12.0",
+ "Serilog.Extensions.Logging": "7.0.0"
+ }
+ },
+ "Serilog.Settings.Configuration": {
+ "type": "Direct",
+ "requested": "[7.0.0, )",
+ "resolved": "7.0.0",
+ "contentHash": "MlabSn74uXAGKNv9WWDdGejmsr7cKhsfi98ZtdeK119s4lTLp+hakBtnPm8OvXNUvtXYs2ijXKA0tIy4IMnjWQ==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Binder": "7.0.0",
+ "Microsoft.Extensions.DependencyModel": "7.0.0",
+ "Serilog": "2.12.0"
+ }
+ },
+ "Serilog.Sinks.Console": {
+ "type": "Direct",
+ "requested": "[4.1.0, )",
+ "resolved": "4.1.0",
+ "contentHash": "K6N5q+5fetjnJPvCmkWOpJ/V8IEIoMIB1s86OzBrbxwTyHxdx3pmz4H+8+O/Dc/ftUX12DM1aynx/dDowkwzqg==",
+ "dependencies": {
+ "Serilog": "2.10.0"
+ }
+ },
+ "AutoMapper": {
+ "type": "Transitive",
+ "resolved": "12.0.1",
+ "contentHash": "hvV62vl6Hp/WfQ24yzo3Co9+OPl8wH8hApwVtgWpiAynVJkUcs7xvehnSftawL8Pe8FrPffBRM3hwzLQqWDNjA==",
+ "dependencies": {
+ "Microsoft.CSharp": "4.7.0"
+ }
+ },
+ "BCrypt.Net-Next": {
+ "type": "Transitive",
+ "resolved": "4.0.3",
+ "contentHash": "W+U9WvmZQgi5cX6FS5GDtDoPzUCV4LkBLkywq/kRZhuDwcbavOzcDAr3LXJFqHUi952Yj3LEYoWW0jbEUQChsA=="
+ },
+ "DotNetty.Buffers": {
+ "type": "Transitive",
+ "resolved": "0.7.5",
+ "contentHash": "ri4udTfNS856dAZ09VkQ9k6gxmYwFuZh930TAMa71smowEAvhGQEDpRY4mLgA5ADhbKhLYpmO/1vfDXEchDugQ==",
+ "dependencies": {
+ "DotNetty.Common": "0.7.5",
+ "System.Runtime.CompilerServices.Unsafe": "5.0.0"
+ }
+ },
+ "DotNetty.Codecs": {
+ "type": "Transitive",
+ "resolved": "0.7.5",
+ "contentHash": "6FqSnZ2gmc5RalbxVNWeEm6FqZHORdskyDUKGdgm4gDr86D8w8TLv4L1MIS7Mshsq3figHl0TP9yFyOXe6SHdQ==",
+ "dependencies": {
+ "DotNetty.Buffers": "0.7.5",
+ "DotNetty.Common": "0.7.5",
+ "DotNetty.Transport": "0.7.5",
+ "System.Collections.Immutable": "1.5.0"
+ }
+ },
+ "DotNetty.Common": {
+ "type": "Transitive",
+ "resolved": "0.7.5",
+ "contentHash": "U9dLNbZhtWhSsWIwLVhIwKC9Ku3+Q/CrY/U5Lahb8DxoEt6uo3GIPPGY3NT1COllfhT422bLALdGlesFOcwXEg==",
+ "dependencies": {
+ "Microsoft.Extensions.Logging": "5.0.0",
+ "System.Runtime.CompilerServices.Unsafe": "5.0.0"
+ }
+ },
+ "DotNetty.Handlers": {
+ "type": "Transitive",
+ "resolved": "0.7.5",
+ "contentHash": "1iXurgUEaEqRW33CvPCEndrHoTB6Ql4PBNpMkVixJ6MxSS9kMLPi+nVpcnEQCPyRBkf/9znk+YO02R0bDWA03g==",
+ "dependencies": {
+ "DotNetty.Buffers": "0.7.5",
+ "DotNetty.Codecs": "0.7.5",
+ "DotNetty.Common": "0.7.5",
+ "DotNetty.Transport": "0.7.5"
+ }
+ },
+ "DotNetty.Transport": {
+ "type": "Transitive",
+ "resolved": "0.7.5",
+ "contentHash": "Ha1ZDqUOEPgk5/IWpAcP220cUtcekLankgkq/KhkrmvVANNbTxwTvjBS50m2/nAK623HjT+1wcLZBfFzBg3TyQ==",
+ "dependencies": {
+ "DotNetty.Buffers": "0.7.5",
+ "DotNetty.Common": "0.7.5"
+ }
+ },
+ "Duey.Abstractions": {
+ "type": "Transitive",
+ "resolved": "2.0.0",
+ "contentHash": "KP3l7yZoT1uMk8B+rAjZ3VL+2/XfXZxKTx31wDz7JNfcPnUmllJpgoqnDYQcVEJ5e4WLWToBQHZ3OIgOm6T/kg=="
+ },
+ "Foundatio": {
+ "type": "Transitive",
+ "resolved": "10.6.1",
+ "contentHash": "c5LXLzjaCwBlzozpIiumQeuFhalZgE5L38uaGu6IVlB8HMOd2Wnf7WmylRUo15BWySgqi/mpoq2ikVZCUrrpKg==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "6.0.0",
+ "Microsoft.Extensions.DependencyInjection": "6.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "6.0.0",
+ "System.Diagnostics.DiagnosticSource": "6.0.0",
+ "System.Text.Json": "6.0.0"
+ }
+ },
+ "K4os.Compression.LZ4": {
+ "type": "Transitive",
+ "resolved": "1.3.6",
+ "contentHash": "RxGhoJBjZCgGeZgDqOP4Krs1cR9PHInbz6d2N19Dic0Y6ZACzVKbR3uSpqfEZf4RiUbHk9aiog2eS22nQPTc2A=="
+ },
+ "MathParser.org-mXparser": {
+ "type": "Transitive",
+ "resolved": "4.4.3",
+ "contentHash": "QhHsP4nzyjC3G2kJ+dbT3NFuE0M0rKfa0wQjCcn5UyK0VnXN8OeYMy9KEYGzNKI9ealcwOQJd/4Xcq4PE+Vl7g=="
+ },
+ "McMaster.NETCore.Plugins": {
+ "type": "Transitive",
+ "resolved": "1.4.0",
+ "contentHash": "UKw5Z2/QHhkR7kiAJmqdCwVDMQV0lwsfj10+FG676r8DsJWIpxtachtEjE0qBs9WoK5GUQIqxgyFeYUSwuPszg==",
+ "dependencies": {
+ "Microsoft.DotNet.PlatformAbstractions": "3.1.6",
+ "Microsoft.Extensions.DependencyModel": "5.0.0"
+ }
+ },
+ "Microsoft.Bcl.AsyncInterfaces": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "UcSjPsst+DfAdJGVDsu346FX0ci0ah+lw3WRtn18NUwEqRt70HaOQ7lI72vy3+1LxtqI3T5GWwV39rQSrCzAeg=="
+ },
+ "Microsoft.CSharp": {
+ "type": "Transitive",
+ "resolved": "4.7.0",
+ "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA=="
+ },
+ "Microsoft.DotNet.PlatformAbstractions": {
+ "type": "Transitive",
+ "resolved": "3.1.6",
+ "contentHash": "jek4XYaQ/PGUwDKKhwR8K47Uh1189PFzMeLqO83mXrXQVIpARZCcfuDedH50YDTepBkfijCZN5U/vZi++erxtg=="
+ },
+ "Microsoft.EntityFrameworkCore.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.10",
+ "contentHash": "Z/lDWmGLiT9uNQrp6UXTKZxofSmAKQCiKOz98FDscTbfAGgBXE3DTTqRsPMc8HFIVVSNANSiFRz3JyLg07HN9Q=="
+ },
+ "Microsoft.EntityFrameworkCore.Analyzers": {
+ "type": "Transitive",
+ "resolved": "7.0.10",
+ "contentHash": "+8NVNpyJTzW6nNh/7RGfldf+mbeboVcn+X1tD8kMBCEJswuy3RqM/qecEEfOfTcWLliZExPMaHwOwtHO6RMpdA=="
+ },
+ "Microsoft.EntityFrameworkCore.Relational": {
+ "type": "Transitive",
+ "resolved": "7.0.10",
+ "contentHash": "PO2QB2Du+pW210UHmepYR12bk+ZOZJCiNkA7zEAxWs+vzvrRAMsUPlDlfgX2LXE7NBsnb0uvZp7a1/qqKf3fRQ==",
+ "dependencies": {
+ "Microsoft.EntityFrameworkCore": "7.0.10",
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Caching.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "IeimUd0TNbhB4ded3AbgBLQv2SnsiVugDyGV1MvspQFVlA07nDC7Zul7kcwH5jWN3JiTcp/ySE83AIJo8yfKjg==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Caching.Memory": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "xpidBs2KCE2gw1JrD0quHE72kvCaI3xFql5/Peb2GRtUuZX+dYPoK/NTdVMiM67Svym0M0Df9A3xyU0FbMQhHw==",
+ "dependencies": {
+ "Microsoft.Extensions.Caching.Abstractions": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Options": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration.Abstractions": {
+ "type": "Transitive",
+ "resolved": "8.0.0-rc.1.23419.4",
+ "contentHash": "tY5wKwXNZ6cBeyHxvxyLy57TxUaA6H82/vW8vTTmikG9bkfRzfyS0EEDloiPzL4ln8P+3aZxeAestjPC6942Kg==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "8.0.0-rc.1.23419.4"
+ }
+ },
+ "Microsoft.Extensions.Configuration.Binder": {
+ "type": "Transitive",
+ "resolved": "7.0.3",
+ "contentHash": "1eRFwJBrkkncTpvh6mivB8zg4uBVm6+Y6stEJERrVEqZZc8Hvf+N1iIgj2ySYDUQko4J1Gw1rLf1M8bG83F0eA==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration.CommandLine": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "a8Iq8SCw5m8W5pZJcPCgBpBO4E89+NaObPng+ApIhrGSv9X4JPrcFAaGM4sDgR0X83uhLgsNJq8VnGP/wqhr8A==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "7.0.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration.EnvironmentVariables": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "RIkfqCkvrAogirjsqSrG1E1FxgrLsOZU2nhRbl07lrajnxzSU2isj2lwQah0CtCbLWo/pOIukQzM1GfneBUnxA==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "7.0.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration.FileExtensions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "xk2lRJ1RDuqe57BmgvRPyCt6zyePKUmvT6iuXqiHR+/OIIgWVR8Ff5k2p6DwmqY8a17hx/OnrekEhziEIeQP6Q==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "7.0.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
+ "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
+ "Microsoft.Extensions.FileProviders.Physical": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration.UserSecrets": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "33HPW1PmB2RS0ietBQyvOxjp4O3wlt+4tIs8KPyMn1kqp04goiZGa7+3mc69NRLv6bphkLDy0YR7Uw3aZyf8Zw==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Configuration.Json": "7.0.0",
+ "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
+ "Microsoft.Extensions.FileProviders.Physical": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "h3j/QfmFN4S0w4C2A6X7arXij/M/OVw3uQHSOFxnND4DyAzO1F9eMX7Eti7lU/OkSthEE0WzRsfT/Dmx86jzCw=="
+ },
+ "Microsoft.Extensions.DependencyModel": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "oONNYd71J3LzkWc4fUHl3SvMfiQMYUCo/mDHDEu76hYYxdhdrPYv6fvGv9nnKVyhE9P0h20AU8RZB5OOWQcAXg==",
+ "dependencies": {
+ "System.Text.Encodings.Web": "7.0.0",
+ "System.Text.Json": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.FileProviders.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "NyawiW9ZT/liQb34k9YqBSNPLuuPkrjMgQZ24Y/xXX1RoiBkLUdPMaQTmxhZ5TYu8ZKZ9qayzil75JX95vGQUg==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.FileProviders.Physical": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "K8D2MTR+EtzkbZ8z80LrG7Ur64R7ZZdRLt1J5cgpc/pUWl0C6IkAUapPuK28oionHueCPELUqq0oYEvZfalNdg==",
+ "dependencies": {
+ "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
+ "Microsoft.Extensions.FileSystemGlobbing": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.FileSystemGlobbing": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "2jONjKHiF+E92ynz2ZFcr9OvxIw+rTGMPEH+UZGeHTEComVav93jQUWGkso8yWwVBcEJGcNcZAaqY01FFJcj7w=="
+ },
+ "Microsoft.Extensions.Hosting.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "43n9Je09z0p/7ViPxfRqs5BUItRLNVh5b6JH40F2Agkh2NBsY/jpNYTtbCcxrHCsA3oRmbR6RJBzUutB4VZvNQ==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "Nw2muoNrOG5U5qa2ZekXwudUn2BJcD41e65zwmDHb1fQegTX66UokLWZkJRpqSSHXDOWZ5V0iqhbxOEky91atA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Options": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw=="
+ },
+ "Microsoft.Extensions.Logging.Configuration": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "FLDA0HcffKA8ycoDQLJuCNGIE42cLWPxgdQGRBaSzZrYTkMBjnf9zrr8pGT06psLq9Q+RKWmmZczQ9bCrXEBcA==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "7.0.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Configuration.Binder": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging": "7.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Options": "7.0.0",
+ "Microsoft.Extensions.Options.ConfigurationExtensions": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging.Console": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "qt5n8bHLZPUfuRnFxJKW5q9ZwOTncdh96rtWzWpX3Y/064MlxzCSw2ELF5Jlwdo+Y4wK3I47NmUTFsV7Sg8rqg==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging": "7.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging.Configuration": "7.0.0",
+ "Microsoft.Extensions.Options": "7.0.0",
+ "System.Text.Json": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging.Debug": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "tFGGyPDpJ8ZdQdeckCArP7nZuoY3am9zJWuvp4OD1bHq65S0epW9BNHzAWeaIO4eYwWnGm1jRNt3vRciH8H6MA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging": "7.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging.EventLog": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "Rp7cYL9xQRVTgjMl77H5YDxszAaO+mlA+KT0BnLSVhuCoKQQOOs1sSK2/x8BK2dZ/lKeAC/CVF+20Ef2dpKXwg==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging": "7.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Options": "7.0.0",
+ "System.Diagnostics.EventLog": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging.EventSource": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "MxQXndQFviIyOPqyMeLNshXnmqcfzEHE2wWcr7BF1unSisJgouZ3tItnq+aJLGPojrW8OZSC/ZdRoR6wAq+c7w==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging": "7.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Options": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0",
+ "System.Text.Json": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Options": {
+ "type": "Transitive",
+ "resolved": "7.0.1",
+ "contentHash": "pZRDYdN1FpepOIfHU62QoBQ6zdAoTvnjxFfqAzEd9Jhb2dfhA5i6jeTdgGgcgTWFRC7oT0+3XrbQu4LjvgX1Nw==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Options.ConfigurationExtensions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "95UnxZkkFdXxF6vSrtJsMHCzkDeSMuUWGs2hDT54cX+U5eVajrCJ3qLyQRW+CtpTt5OJ8bmTvpQVHu1DLhH+cA==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Configuration.Binder": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Options": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "8.0.0-rc.1.23419.4",
+ "contentHash": "zyoB4zblhvpylS9VOmKyBuGH+RjKDsfi0cTB2KRPPDD6tFinpP+vGr3dictaNYLhGUg6jaBmq+2H/WZMCnvGDQ=="
+ },
+ "Microsoft.IO.RecyclableMemoryStream": {
+ "type": "Transitive",
+ "resolved": "2.3.2",
+ "contentHash": "Oh1qXXFdJFcHozvb4H6XYLf2W0meZFuG0A+TfapFPj9z5fd4vxiARGEhAaLj/6XWQaMYIv4SH/9Q6H78Hw0E2Q=="
+ },
+ "MoonSharp": {
+ "type": "Transitive",
+ "resolved": "2.0.0",
+ "contentHash": "uiAcRh7d+53k3xW9pFDJfAFVw4RnjHVCJG05M3oPAVEVwPtFavhg1H/IpC6So4X1j9kJlzuLlA3OghhPcIvc5A=="
+ },
+ "Newtonsoft.Json": {
+ "type": "Transitive",
+ "resolved": "13.0.3",
+ "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ=="
+ },
+ "Npgsql": {
+ "type": "Transitive",
+ "resolved": "7.0.4",
+ "contentHash": "7UVPYy2RP0ci04PED1tc9ZCaTw/DfSdSkLiGEFCAvwMwsgA/bAluj1liNzP1IpN0MFofnOF0cm1zJfmbEuCehg==",
+ "dependencies": {
+ "Microsoft.Extensions.Logging.Abstractions": "6.0.0"
+ }
+ },
+ "Npgsql.EntityFrameworkCore.PostgreSQL": {
+ "type": "Transitive",
+ "resolved": "7.0.4",
+ "contentHash": "ZYMtyG6pmLtUsFAx0/XaIlVkJM+1gArWEKD55cLLxiVlGScAphjiGj+G7Gk16yg5lhhdWx+bgXWpIUISXuS33g==",
+ "dependencies": {
+ "Microsoft.EntityFrameworkCore": "[7.0.5, 8.0.0)",
+ "Microsoft.EntityFrameworkCore.Abstractions": "[7.0.5, 8.0.0)",
+ "Microsoft.EntityFrameworkCore.Relational": "[7.0.5, 8.0.0)",
+ "Npgsql": "7.0.4"
+ }
+ },
+ "RBush": {
+ "type": "Transitive",
+ "resolved": "3.2.0",
+ "contentHash": "ijGh9N0zZ7JfXk3oQkWCwK8SwSSByexbyh/MjbCjNxOft9eG5ZqKC1vdgiYq78h4IZRFmN4s3JZ/b10Jipud5w=="
+ },
+ "Serilog.Extensions.Logging": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "9faU0zNQqU7I6soVhLUMYaGNpgWv6cKlKb2S5AnS8gXxzW/em5Ladm/6FMrWTnX41cdbdGPOWNAo6adi4WaJ6A==",
+ "dependencies": {
+ "Microsoft.Extensions.Logging": "7.0.0",
+ "Serilog": "2.12.0"
+ }
+ },
+ "Stateless": {
+ "type": "Transitive",
+ "resolved": "5.13.0",
+ "contentHash": "M4Rb4b31TUEfhCd4en0WlRfuFgQ2rwva9e1CuXnto5vNGvRsNVimHENnvjegf6nKG9ZH+51McAZ/huqRtTziYg=="
+ },
+ "System.Collections.Immutable": {
+ "type": "Transitive",
+ "resolved": "1.5.0",
+ "contentHash": "EXKiDFsChZW0RjrZ4FYHu9aW6+P4MCgEDCklsVseRfhoO0F+dXeMSsMRAlVXIo06kGJ/zv+2w1a2uc2+kxxSaQ=="
+ },
+ "System.Diagnostics.DiagnosticSource": {
+ "type": "Transitive",
+ "resolved": "7.0.1",
+ "contentHash": "T9SLFxzDp0SreCffRDXSAS5G+lq6E8qP4knHS2IBjwCdx2KEvGnGZsq7gFpselYOda7l6gXsJMD93TQsFj/URA=="
+ },
+ "System.Diagnostics.EventLog": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "eUDP47obqQm3SFJfP6z+Fx2nJ4KKTQbXB4Q9Uesnzw9SbYdhjyoGXuvDn/gEmFY6N5Z3bFFbpAQGA7m6hrYJCw=="
+ },
+ "System.Runtime.CompilerServices.Unsafe": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "ZD9TMpsmYJLrxbbmdvhwt9YEgG5WntEnZ/d1eH8JBX9LBp+Ju8BSBhUGbZMNVHHomWo2KVImJhTDl2hIgw/6MA=="
+ },
+ "System.Text.Encodings.Web": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "OP6umVGxc0Z0MvZQBVigj4/U31Pw72ITihDWP9WiWDm+q5aoe0GaJivsfYGq53o6dxH7DcXWiCTl7+0o2CGdmg=="
+ },
+ "System.Text.Json": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "DaGSsVqKsn/ia6RG8frjwmJonfos0srquhw09TlT8KRw5I43E+4gs+/bZj4K0vShJ5H9imCuXupb4RmS+dBy3w==",
+ "dependencies": {
+ "System.Text.Encodings.Web": "7.0.0"
+ }
+ },
+ "edelstein.common.constants": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )"
+ }
+ },
+ "edelstein.common.crypto": {
+ "type": "Project"
+ },
+ "edelstein.common.database": {
+ "type": "Project",
+ "dependencies": {
+ "AutoMapper": "[12.0.1, )",
+ "Edelstein.Common.Gameplay": "[1.0.0, )",
+ "Microsoft.EntityFrameworkCore": "[7.0.10, )",
+ "Microsoft.EntityFrameworkCore.Relational": "[7.0.10, )",
+ "Microsoft.Extensions.Configuration": "[8.0.0-rc.1.23419.4, )",
+ "Microsoft.Extensions.Configuration.Json": "[7.0.0, )",
+ "Newtonsoft.Json": "[13.0.3, )",
+ "Npgsql.EntityFrameworkCore.PostgreSQL": "[7.0.4, )"
+ }
+ },
+ "edelstein.common.gameplay": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Common.Constants": "[1.0.0, )",
+ "Edelstein.Common.Utilities": "[1.0.0, )",
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Server": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Social": "[1.0.0, )",
+ "MathParser.org-mXparser": "[4.4.3, )",
+ "Microsoft.Extensions.Logging.Abstractions": "[7.0.0, )"
+ }
+ },
+ "edelstein.common.gameplay.game": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Common.Constants": "[1.0.0, )",
+ "Edelstein.Common.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Gameplay.Game": "[1.0.0, )",
+ "Edelstein.Protocol.Scripting": "[1.0.0, )",
+ "Foundatio": "[10.6.1, )",
+ "Stateless": "[5.13.0, )"
+ }
+ },
+ "edelstein.common.gameplay.login": {
+ "type": "Project",
+ "dependencies": {
+ "BCrypt.Net-Next": "[4.0.3, )",
+ "Edelstein.Common.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Gameplay.Login": "[1.0.0, )"
+ }
+ },
+ "edelstein.common.gameplay.shop": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Common.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Gameplay.Shop": "[1.0.0, )"
+ }
+ },
+ "edelstein.common.gameplay.trade": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Common.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Gameplay.Trade": "[1.0.0, )"
+ }
+ },
+ "edelstein.common.network.dotnetty": {
+ "type": "Project",
+ "dependencies": {
+ "DotNetty.Buffers": "[0.7.5, )",
+ "DotNetty.Codecs": "[0.7.5, )",
+ "DotNetty.Common": "[0.7.5, )",
+ "DotNetty.Handlers": "[0.7.5, )",
+ "DotNetty.Transport": "[0.7.5, )",
+ "Edelstein.Common.Crypto": "[1.0.0, )",
+ "Edelstein.Common.Utilities": "[1.0.0, )",
+ "Edelstein.Protocol.Network": "[1.0.0, )"
+ }
+ },
+ "edelstein.common.plugin": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Common.Utilities": "[1.0.0, )",
+ "Edelstein.Protocol.Plugin": "[1.0.0, )",
+ "McMaster.NETCore.Plugins": "[1.4.0, )",
+ "Microsoft.Extensions.Configuration": "[8.0.0-rc.1.23419.4, )",
+ "Microsoft.Extensions.Configuration.Json": "[7.0.0, )",
+ "Microsoft.Extensions.Hosting.Abstractions": "[7.0.0, )"
+ }
+ },
+ "edelstein.common.scripting.lua": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Scripting": "[1.0.0, )",
+ "MoonSharp": "[2.0.0, )"
+ }
+ },
+ "edelstein.common.services.auth": {
+ "type": "Project",
+ "dependencies": {
+ "BCrypt.Net-Next": "[4.0.3, )",
+ "Edelstein.Protocol.Services.Auth": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )",
+ "Microsoft.EntityFrameworkCore": "[7.0.10, )",
+ "Microsoft.EntityFrameworkCore.Relational": "[7.0.10, )",
+ "Microsoft.Extensions.Configuration": "[8.0.0-rc.1.23419.4, )",
+ "Microsoft.Extensions.Configuration.Json": "[7.0.0, )",
+ "Npgsql.EntityFrameworkCore.PostgreSQL": "[7.0.4, )"
+ }
+ },
+ "edelstein.common.services.server": {
+ "type": "Project",
+ "dependencies": {
+ "AutoMapper": "[12.0.1, )",
+ "Edelstein.Common.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Server": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )",
+ "Microsoft.EntityFrameworkCore": "[7.0.10, )",
+ "Microsoft.EntityFrameworkCore.Relational": "[7.0.10, )",
+ "Microsoft.Extensions.Configuration": "[8.0.0-rc.1.23419.4, )",
+ "Microsoft.Extensions.Configuration.Json": "[7.0.0, )",
+ "Newtonsoft.Json": "[13.0.3, )",
+ "Npgsql.EntityFrameworkCore.PostgreSQL": "[7.0.4, )"
+ }
+ },
+ "edelstein.common.services.social": {
+ "type": "Project",
+ "dependencies": {
+ "AutoMapper": "[12.0.1, )",
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Social": "[1.0.0, )",
+ "Foundatio": "[10.6.1, )",
+ "Microsoft.EntityFrameworkCore": "[7.0.10, )",
+ "Microsoft.EntityFrameworkCore.Relational": "[7.0.10, )",
+ "Microsoft.Extensions.Configuration": "[8.0.0-rc.1.23419.4, )",
+ "Microsoft.Extensions.Configuration.Json": "[7.0.0, )",
+ "Newtonsoft.Json": "[13.0.3, )",
+ "Npgsql.EntityFrameworkCore.PostgreSQL": "[7.0.4, )"
+ }
+ },
+ "edelstein.common.utilities": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )",
+ "Microsoft.Extensions.Logging.Abstractions": "[7.0.0, )",
+ "Microsoft.IO.RecyclableMemoryStream": "[2.3.2, )",
+ "RBush": "[3.2.0, )"
+ }
+ },
+ "edelstein.protocol.gameplay": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Protocol.Network": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Social": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.gameplay.game": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Auth": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Server": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Social": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.gameplay.login": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Auth": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Server": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.gameplay.shop": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Auth": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Server": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.gameplay.trade": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Auth": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Server": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.network": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.plugin": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )",
+ "Microsoft.Extensions.Configuration.Abstractions": "[8.0.0-rc.1.23419.4, )",
+ "Microsoft.Extensions.Logging.Abstractions": "[7.0.0, )"
+ }
+ },
+ "edelstein.protocol.scripting": {
+ "type": "Project"
+ },
+ "edelstein.protocol.services.auth": {
+ "type": "Project"
+ },
+ "edelstein.protocol.services.server": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.services.social": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.utilities": {
+ "type": "Project"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/common/Edelstein.Common.Constants/packages.lock.json b/src/common/Edelstein.Common.Constants/packages.lock.json
new file mode 100644
index 000000000..bb28e8006
--- /dev/null
+++ b/src/common/Edelstein.Common.Constants/packages.lock.json
@@ -0,0 +1,36 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {
+ "Duey.Abstractions": {
+ "type": "Transitive",
+ "resolved": "2.0.0",
+ "contentHash": "KP3l7yZoT1uMk8B+rAjZ3VL+2/XfXZxKTx31wDz7JNfcPnUmllJpgoqnDYQcVEJ5e4WLWToBQHZ3OIgOm6T/kg=="
+ },
+ "edelstein.protocol.gameplay": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Protocol.Network": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Social": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.network": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.services.social": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.utilities": {
+ "type": "Project"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/common/Edelstein.Common.Crypto/AESCipher.cs b/src/common/Edelstein.Common.Crypto/AESCipher.cs
index 3c4da9e7a..13e292ccb 100644
--- a/src/common/Edelstein.Common.Crypto/AESCipher.cs
+++ b/src/common/Edelstein.Common.Crypto/AESCipher.cs
@@ -5,7 +5,7 @@ namespace Edelstein.Common.Crypto;
public class AESCipher
{
- private readonly SymmetricAlgorithm _cipher;
+ private readonly ICryptoTransform _transformer;
public AESCipher() : this(new byte[] { 0x13, 0x08, 0x06, 0xb4, 0x1b, 0x0f, 0x33, 0x52 })
{
@@ -14,14 +14,15 @@ public AESCipher() : this(new byte[] { 0x13, 0x08, 0x06, 0xb4, 0x1b, 0x0f, 0x33,
public AESCipher(ReadOnlySpan userKey)
{
var expandedKey = new byte[userKey.Length * 4];
+ var cipher = Aes.Create();
for (var i = 0; i < userKey.Length; i++)
expandedKey[i * 4] = userKey[i];
-
- _cipher = Aes.Create();
- _cipher.KeySize = 256;
- _cipher.Key = expandedKey;
- _cipher.Mode = CipherMode.ECB;
+
+ cipher.KeySize = 256;
+ cipher.Key = expandedKey;
+ cipher.Mode = CipherMode.ECB;
+ _transformer = cipher.CreateEncryptor();
}
public void Transform(Span input, int remaining, uint pSrc)
@@ -33,8 +34,6 @@ public void Transform(Span input, int remaining, uint pSrc)
var srcExp = ArrayPool.Shared.Rent(srcExpL);
var srcBytes = BitConverter.GetBytes(pSrc);
- using var crypt = _cipher.CreateEncryptor();
-
while (remaining > 0)
{
for (var i = 0; i < srcExpL; ++i)
@@ -48,7 +47,7 @@ public void Transform(Span input, int remaining, uint pSrc)
var sub = i - start;
if (sub % srcExpL == 0)
- crypt.TransformBlock(srcExp, 0, srcExpL, srcExp, 0);
+ _transformer.TransformBlock(srcExp, 0, srcExpL, srcExp, 0);
input[i] ^= srcExp[sub % srcExpL];
}
diff --git a/src/common/Edelstein.Common.Crypto/packages.lock.json b/src/common/Edelstein.Common.Crypto/packages.lock.json
new file mode 100644
index 000000000..807ab822b
--- /dev/null
+++ b/src/common/Edelstein.Common.Crypto/packages.lock.json
@@ -0,0 +1,6 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {}
+ }
+}
\ No newline at end of file
diff --git a/src/common/Edelstein.Common.Data.NX/NXDataManager.cs b/src/common/Edelstein.Common.Data.NX/NXDataManager.cs
new file mode 100644
index 000000000..221dd50bf
--- /dev/null
+++ b/src/common/Edelstein.Common.Data.NX/NXDataManager.cs
@@ -0,0 +1,39 @@
+using System.Collections.Frozen;
+using Duey;
+using Edelstein.Protocol.Data;
+
+namespace Edelstein.Common.Data.NX;
+
+public class NXDataManager : IDataManager
+{
+ private readonly IDictionary _nodes;
+
+ public NXDataManager(string path) =>
+ _nodes = Directory
+ .GetFiles(path, "*.nx")
+ .ToFrozenDictionary(
+ k => Path.GetFileNameWithoutExtension(k)!,
+ d => (INXNode)new NXFile(d).Root
+ );
+
+ public T? Resolve(string? path = null) where T : struct
+ {
+ var node = Resolve(path);
+ return node?.Resolve();
+ }
+
+ public T? ResolveOrDefault(string? path = null) where T : class
+ {
+ var node = Resolve(path);
+ return node?.ResolveOrDefault();
+ }
+
+ public IDataNode? Resolve(string? path = null)
+ {
+ if (string.IsNullOrEmpty(path)) return null;
+ var split = path.Split('/');
+ return _nodes.TryGetValue(split[0], out var value)
+ ? new NXDataNode(value.ResolvePath(string.Join("/", split.Skip(1).ToArray())))
+ : null;
+ }
+}
diff --git a/src/common/Edelstein.Common.Database/Edelstein.Common.Database.csproj b/src/common/Edelstein.Common.Database/Edelstein.Common.Database.csproj
index eb5628952..83092fe8e 100644
--- a/src/common/Edelstein.Common.Database/Edelstein.Common.Database.csproj
+++ b/src/common/Edelstein.Common.Database/Edelstein.Common.Database.csproj
@@ -14,7 +14,7 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
diff --git a/src/common/Edelstein.Common.Database/Repositories/CharacterRepository.cs b/src/common/Edelstein.Common.Database/Repositories/CharacterRepository.cs
index d291066b4..db0d1841b 100644
--- a/src/common/Edelstein.Common.Database/Repositories/CharacterRepository.cs
+++ b/src/common/Edelstein.Common.Database/Repositories/CharacterRepository.cs
@@ -86,6 +86,6 @@ public async Task> RetrieveAllByAccountWorld(int account
.ToListAsync();
return results
.Select(m => _mapper.Map(m))
- .ToImmutableList();
+ .ToImmutableArray();
}
}
diff --git a/src/common/Edelstein.Common.Database/packages.lock.json b/src/common/Edelstein.Common.Database/packages.lock.json
new file mode 100644
index 000000000..4abb4fea4
--- /dev/null
+++ b/src/common/Edelstein.Common.Database/packages.lock.json
@@ -0,0 +1,340 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {
+ "AutoMapper": {
+ "type": "Direct",
+ "requested": "[12.0.1, )",
+ "resolved": "12.0.1",
+ "contentHash": "hvV62vl6Hp/WfQ24yzo3Co9+OPl8wH8hApwVtgWpiAynVJkUcs7xvehnSftawL8Pe8FrPffBRM3hwzLQqWDNjA==",
+ "dependencies": {
+ "Microsoft.CSharp": "4.7.0"
+ }
+ },
+ "Microsoft.EntityFrameworkCore": {
+ "type": "Direct",
+ "requested": "[7.0.10, )",
+ "resolved": "7.0.10",
+ "contentHash": "24NbXJqJ/x8u88/agqeb1pLdAF9+9StDLA36+P/3g5xsJPOaB2GxXn7epR8dWpZTgHsNZ7cvBMxBgfFmF+xZlg==",
+ "dependencies": {
+ "Microsoft.EntityFrameworkCore.Abstractions": "7.0.10",
+ "Microsoft.EntityFrameworkCore.Analyzers": "7.0.10",
+ "Microsoft.Extensions.Caching.Memory": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection": "7.0.0",
+ "Microsoft.Extensions.Logging": "7.0.0"
+ }
+ },
+ "Microsoft.EntityFrameworkCore.Design": {
+ "type": "Direct",
+ "requested": "[7.0.10, )",
+ "resolved": "7.0.10",
+ "contentHash": "ZDdJ2aAE529A1zd3sEvszADRCiJmlOKxc0WlhS+NIhSs68NESAApPZL4uHXrIk0vb7SBRnNPYPfOhASWf9dahg==",
+ "dependencies": {
+ "Humanizer.Core": "2.14.1",
+ "Microsoft.EntityFrameworkCore.Relational": "7.0.10",
+ "Microsoft.Extensions.DependencyModel": "7.0.0",
+ "Mono.TextTemplating": "2.2.1"
+ }
+ },
+ "Microsoft.EntityFrameworkCore.Relational": {
+ "type": "Direct",
+ "requested": "[7.0.10, )",
+ "resolved": "7.0.10",
+ "contentHash": "PO2QB2Du+pW210UHmepYR12bk+ZOZJCiNkA7zEAxWs+vzvrRAMsUPlDlfgX2LXE7NBsnb0uvZp7a1/qqKf3fRQ==",
+ "dependencies": {
+ "Microsoft.EntityFrameworkCore": "7.0.10",
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration": {
+ "type": "Direct",
+ "requested": "[8.0.0-rc.1.23419.4, )",
+ "resolved": "8.0.0-rc.1.23419.4",
+ "contentHash": "NoIBM0qnZrl5o3em/5Qx4T3HcDruKdDVvm4PsG/wiuWawtwHRqaqkFjPS66lPnu1Kgzv+D1JJd+r4C5wPxXErw==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "8.0.0-rc.1.23419.4",
+ "Microsoft.Extensions.Primitives": "8.0.0-rc.1.23419.4"
+ }
+ },
+ "Microsoft.Extensions.Configuration.Json": {
+ "type": "Direct",
+ "requested": "[7.0.0, )",
+ "resolved": "7.0.0",
+ "contentHash": "LDNYe3uw76W35Jci+be4LDf2lkQZe0A7EEYQVChFbc509CpZ4Iupod8li4PUXPBhEUOFI/rlQNf5xkzJRQGvtA==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "7.0.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Configuration.FileExtensions": "7.0.0",
+ "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
+ "System.Text.Json": "7.0.0"
+ }
+ },
+ "Newtonsoft.Json": {
+ "type": "Direct",
+ "requested": "[13.0.3, )",
+ "resolved": "13.0.3",
+ "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ=="
+ },
+ "Npgsql.EntityFrameworkCore.PostgreSQL": {
+ "type": "Direct",
+ "requested": "[7.0.4, )",
+ "resolved": "7.0.4",
+ "contentHash": "ZYMtyG6pmLtUsFAx0/XaIlVkJM+1gArWEKD55cLLxiVlGScAphjiGj+G7Gk16yg5lhhdWx+bgXWpIUISXuS33g==",
+ "dependencies": {
+ "Microsoft.EntityFrameworkCore": "[7.0.5, 8.0.0)",
+ "Microsoft.EntityFrameworkCore.Abstractions": "[7.0.5, 8.0.0)",
+ "Microsoft.EntityFrameworkCore.Relational": "[7.0.5, 8.0.0)",
+ "Npgsql": "7.0.4"
+ }
+ },
+ "Duey.Abstractions": {
+ "type": "Transitive",
+ "resolved": "2.0.0",
+ "contentHash": "KP3l7yZoT1uMk8B+rAjZ3VL+2/XfXZxKTx31wDz7JNfcPnUmllJpgoqnDYQcVEJ5e4WLWToBQHZ3OIgOm6T/kg=="
+ },
+ "Humanizer.Core": {
+ "type": "Transitive",
+ "resolved": "2.14.1",
+ "contentHash": "lQKvtaTDOXnoVJ20ibTuSIOf2i0uO0MPbDhd1jm238I+U/2ZnRENj0cktKZhtchBMtCUSRQ5v4xBCUbKNmyVMw=="
+ },
+ "MathParser.org-mXparser": {
+ "type": "Transitive",
+ "resolved": "4.4.3",
+ "contentHash": "QhHsP4nzyjC3G2kJ+dbT3NFuE0M0rKfa0wQjCcn5UyK0VnXN8OeYMy9KEYGzNKI9ealcwOQJd/4Xcq4PE+Vl7g=="
+ },
+ "Microsoft.CSharp": {
+ "type": "Transitive",
+ "resolved": "4.7.0",
+ "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA=="
+ },
+ "Microsoft.EntityFrameworkCore.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.10",
+ "contentHash": "Z/lDWmGLiT9uNQrp6UXTKZxofSmAKQCiKOz98FDscTbfAGgBXE3DTTqRsPMc8HFIVVSNANSiFRz3JyLg07HN9Q=="
+ },
+ "Microsoft.EntityFrameworkCore.Analyzers": {
+ "type": "Transitive",
+ "resolved": "7.0.10",
+ "contentHash": "+8NVNpyJTzW6nNh/7RGfldf+mbeboVcn+X1tD8kMBCEJswuy3RqM/qecEEfOfTcWLliZExPMaHwOwtHO6RMpdA=="
+ },
+ "Microsoft.Extensions.Caching.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "IeimUd0TNbhB4ded3AbgBLQv2SnsiVugDyGV1MvspQFVlA07nDC7Zul7kcwH5jWN3JiTcp/ySE83AIJo8yfKjg==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Caching.Memory": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "xpidBs2KCE2gw1JrD0quHE72kvCaI3xFql5/Peb2GRtUuZX+dYPoK/NTdVMiM67Svym0M0Df9A3xyU0FbMQhHw==",
+ "dependencies": {
+ "Microsoft.Extensions.Caching.Abstractions": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Options": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration.Abstractions": {
+ "type": "Transitive",
+ "resolved": "8.0.0-rc.1.23419.4",
+ "contentHash": "tY5wKwXNZ6cBeyHxvxyLy57TxUaA6H82/vW8vTTmikG9bkfRzfyS0EEDloiPzL4ln8P+3aZxeAestjPC6942Kg==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "8.0.0-rc.1.23419.4"
+ }
+ },
+ "Microsoft.Extensions.Configuration.FileExtensions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "xk2lRJ1RDuqe57BmgvRPyCt6zyePKUmvT6iuXqiHR+/OIIgWVR8Ff5k2p6DwmqY8a17hx/OnrekEhziEIeQP6Q==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "7.0.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
+ "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
+ "Microsoft.Extensions.FileProviders.Physical": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "elNeOmkeX3eDVG6pYVeV82p29hr+UKDaBhrZyWvWLw/EVZSYEkZlQdkp0V39k/Xehs2Qa0mvoCvkVj3eQxNQ1Q==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "h3j/QfmFN4S0w4C2A6X7arXij/M/OVw3uQHSOFxnND4DyAzO1F9eMX7Eti7lU/OkSthEE0WzRsfT/Dmx86jzCw=="
+ },
+ "Microsoft.Extensions.DependencyModel": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "oONNYd71J3LzkWc4fUHl3SvMfiQMYUCo/mDHDEu76hYYxdhdrPYv6fvGv9nnKVyhE9P0h20AU8RZB5OOWQcAXg==",
+ "dependencies": {
+ "System.Text.Encodings.Web": "7.0.0",
+ "System.Text.Json": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.FileProviders.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "NyawiW9ZT/liQb34k9YqBSNPLuuPkrjMgQZ24Y/xXX1RoiBkLUdPMaQTmxhZ5TYu8ZKZ9qayzil75JX95vGQUg==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.FileProviders.Physical": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "K8D2MTR+EtzkbZ8z80LrG7Ur64R7ZZdRLt1J5cgpc/pUWl0C6IkAUapPuK28oionHueCPELUqq0oYEvZfalNdg==",
+ "dependencies": {
+ "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
+ "Microsoft.Extensions.FileSystemGlobbing": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.FileSystemGlobbing": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "2jONjKHiF+E92ynz2ZFcr9OvxIw+rTGMPEH+UZGeHTEComVav93jQUWGkso8yWwVBcEJGcNcZAaqY01FFJcj7w=="
+ },
+ "Microsoft.Extensions.Logging": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "Nw2muoNrOG5U5qa2ZekXwudUn2BJcD41e65zwmDHb1fQegTX66UokLWZkJRpqSSHXDOWZ5V0iqhbxOEky91atA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Options": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw=="
+ },
+ "Microsoft.Extensions.Options": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "lP1yBnTTU42cKpMozuafbvNtQ7QcBjr/CcK3bYOGEMH55Fjt+iecXjT6chR7vbgCMqy3PG3aNQSZgo/EuY/9qQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "8.0.0-rc.1.23419.4",
+ "contentHash": "zyoB4zblhvpylS9VOmKyBuGH+RjKDsfi0cTB2KRPPDD6tFinpP+vGr3dictaNYLhGUg6jaBmq+2H/WZMCnvGDQ=="
+ },
+ "Microsoft.IO.RecyclableMemoryStream": {
+ "type": "Transitive",
+ "resolved": "2.3.2",
+ "contentHash": "Oh1qXXFdJFcHozvb4H6XYLf2W0meZFuG0A+TfapFPj9z5fd4vxiARGEhAaLj/6XWQaMYIv4SH/9Q6H78Hw0E2Q=="
+ },
+ "Mono.TextTemplating": {
+ "type": "Transitive",
+ "resolved": "2.2.1",
+ "contentHash": "KZYeKBET/2Z0gY1WlTAK7+RHTl7GSbtvTLDXEZZojUdAPqpQNDL6tHv7VUpqfX5VEOh+uRGKaZXkuD253nEOBQ==",
+ "dependencies": {
+ "System.CodeDom": "4.4.0"
+ }
+ },
+ "Npgsql": {
+ "type": "Transitive",
+ "resolved": "7.0.4",
+ "contentHash": "7UVPYy2RP0ci04PED1tc9ZCaTw/DfSdSkLiGEFCAvwMwsgA/bAluj1liNzP1IpN0MFofnOF0cm1zJfmbEuCehg==",
+ "dependencies": {
+ "Microsoft.Extensions.Logging.Abstractions": "6.0.0"
+ }
+ },
+ "RBush": {
+ "type": "Transitive",
+ "resolved": "3.2.0",
+ "contentHash": "ijGh9N0zZ7JfXk3oQkWCwK8SwSSByexbyh/MjbCjNxOft9eG5ZqKC1vdgiYq78h4IZRFmN4s3JZ/b10Jipud5w=="
+ },
+ "System.CodeDom": {
+ "type": "Transitive",
+ "resolved": "4.4.0",
+ "contentHash": "2sCCb7doXEwtYAbqzbF/8UAeDRMNmPaQbU2q50Psg1J9KzumyVVCgKQY8s53WIPTufNT0DpSe9QRvVjOzfDWBA=="
+ },
+ "System.Text.Encodings.Web": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "OP6umVGxc0Z0MvZQBVigj4/U31Pw72ITihDWP9WiWDm+q5aoe0GaJivsfYGq53o6dxH7DcXWiCTl7+0o2CGdmg=="
+ },
+ "System.Text.Json": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "DaGSsVqKsn/ia6RG8frjwmJonfos0srquhw09TlT8KRw5I43E+4gs+/bZj4K0vShJ5H9imCuXupb4RmS+dBy3w==",
+ "dependencies": {
+ "System.Text.Encodings.Web": "7.0.0"
+ }
+ },
+ "edelstein.common.constants": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )"
+ }
+ },
+ "edelstein.common.gameplay": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Common.Constants": "[1.0.0, )",
+ "Edelstein.Common.Utilities": "[1.0.0, )",
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Server": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Social": "[1.0.0, )",
+ "MathParser.org-mXparser": "[4.4.3, )",
+ "Microsoft.Extensions.Logging.Abstractions": "[7.0.0, )"
+ }
+ },
+ "edelstein.common.utilities": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )",
+ "Microsoft.Extensions.Logging.Abstractions": "[7.0.0, )",
+ "Microsoft.IO.RecyclableMemoryStream": "[2.3.2, )",
+ "RBush": "[3.2.0, )"
+ }
+ },
+ "edelstein.protocol.gameplay": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Protocol.Network": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Social": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.network": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.services.server": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.services.social": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.utilities": {
+ "type": "Project"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Combat/SkillContext.cs b/src/common/Edelstein.Common.Gameplay.Game/Combat/SkillContext.cs
index dacc440cd..6739c51c3 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Combat/SkillContext.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Combat/SkillContext.cs
@@ -418,7 +418,7 @@ await Task.WhenAll(targets
foreach (var summoned in _user.Owned
.OfType()
.Where(s => _resetSummoned.Contains(s.SkillID))
- .ToImmutableList())
+ .ToImmutableArray())
{
_user.Owned.Remove(summoned);
if (_user.Field != null)
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Combat/Skills/Resistance/Mechanic1SkillHandler.cs b/src/common/Edelstein.Common.Gameplay.Game/Combat/Skills/Resistance/Mechanic1SkillHandler.cs
index 812c38eb9..ecdc0deb9 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Combat/Skills/Resistance/Mechanic1SkillHandler.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Combat/Skills/Resistance/Mechanic1SkillHandler.cs
@@ -1,7 +1,5 @@
using Edelstein.Common.Constants;
using Edelstein.Protocol.Gameplay.Game.Combat;
-using Edelstein.Protocol.Gameplay.Game.Objects.Mob;
-using Edelstein.Protocol.Gameplay.Game.Objects.Mob.Stats;
using Edelstein.Protocol.Gameplay.Game.Objects.User;
namespace Edelstein.Common.Gameplay.Game.Combat.Skills.Resistance;
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Combat/Skills/Resistance/Mechanic3SkillHandler.cs b/src/common/Edelstein.Common.Gameplay.Game/Combat/Skills/Resistance/Mechanic3SkillHandler.cs
index 26529c199..4a875e2a1 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Combat/Skills/Resistance/Mechanic3SkillHandler.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Combat/Skills/Resistance/Mechanic3SkillHandler.cs
@@ -1,7 +1,6 @@
using Edelstein.Common.Constants;
using Edelstein.Protocol.Gameplay.Game.Combat;
using Edelstein.Protocol.Gameplay.Game.Objects;
-using Edelstein.Protocol.Gameplay.Game.Objects.AffectedArea;
using Edelstein.Protocol.Gameplay.Game.Objects.Mob;
using Edelstein.Protocol.Gameplay.Game.Objects.Mob.Stats;
using Edelstein.Protocol.Gameplay.Game.Objects.Summoned;
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Continents/ContiMove.cs b/src/common/Edelstein.Common.Gameplay.Game/Continents/ContiMove.cs
index 72ef3613d..1fafd247c 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Continents/ContiMove.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Continents/ContiMove.cs
@@ -170,7 +170,7 @@ await MoveField.Dispatch(packet.Build()
}
.Where(f => f != null)
.SelectMany(f => f!.Objects)
- .ToImmutableList();
+ .ToImmutableArray();
public override Task Enter(IFieldObject obj) => (State switch
{
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Continents/ContiMoveManager.cs b/src/common/Edelstein.Common.Gameplay.Game/Continents/ContiMoveManager.cs
index 8f9db231e..bf8fdd38a 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Continents/ContiMoveManager.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Continents/ContiMoveManager.cs
@@ -34,7 +34,7 @@ public ContiMoveManager(ITickerManager tickerManager)
));
public Task> RetrieveAll() =>
- Task.FromResult>(_conti.Values.ToImmutableList());
+ Task.FromResult>(_conti.Values.ToImmutableArray());
public Task Insert(IContiMove entry)
{
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Continents/Templates/ContiMoveTemplateLoader.cs b/src/common/Edelstein.Common.Gameplay.Game/Continents/Templates/ContiMoveTemplateLoader.cs
index b756f0e49..6749b1ef2 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Continents/Templates/ContiMoveTemplateLoader.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Continents/Templates/ContiMoveTemplateLoader.cs
@@ -39,6 +39,7 @@ await _manager.Insert(new TemplateProviderLazy(
));
}));
+ _manager.Freeze();
return _manager.Count;
}
}
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Conversations/Speakers/Facades/SpeakerUserInventory.cs b/src/common/Edelstein.Common.Gameplay.Game/Conversations/Speakers/Facades/SpeakerUserInventory.cs
index 7528ce080..0c139269e 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Conversations/Speakers/Facades/SpeakerUserInventory.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Conversations/Speakers/Facades/SpeakerUserInventory.cs
@@ -1,4 +1,5 @@
-using Edelstein.Common.Gameplay.Game.Objects.User.Effects;
+using System.Collections.Immutable;
+using Edelstein.Common.Gameplay.Game.Objects.User.Effects;
using Edelstein.Protocol.Gameplay.Game.Conversations.Speakers.Facades;
using Edelstein.Protocol.Gameplay.Game.Objects.User;
@@ -37,5 +38,5 @@ public bool HasSlotFor(int templateID, short count = 1)
public bool HasSlotFor(IDictionary templates)
=> _user.StageUser.Context.Managers.Inventory.HasSlotFor(_user.Character.Inventories, templates
.Select(kv => Tuple.Create(kv.Key, kv.Value))
- .ToList());
+ .ToImmutableArray());
}
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Conversations/Speakers/Facades/SpeakerUserQuests.cs b/src/common/Edelstein.Common.Gameplay.Game/Conversations/Speakers/Facades/SpeakerUserQuests.cs
index 3881522cb..4d8a7dc4a 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Conversations/Speakers/Facades/SpeakerUserQuests.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Conversations/Speakers/Facades/SpeakerUserQuests.cs
@@ -1,5 +1,4 @@
-using System.Collections.Immutable;
-using Edelstein.Common.Gameplay.Game.Objects.User.Messages;
+using Edelstein.Common.Gameplay.Game.Objects.User.Messages;
using Edelstein.Common.Gameplay.Models.Characters.Quests;
using Edelstein.Protocol.Gameplay.Game.Conversations.Speakers.Facades;
using Edelstein.Protocol.Gameplay.Game.Objects.User;
@@ -25,9 +24,7 @@ private IDictionary GetDictionaryFromRecord(string record)
);
private string GetRecordFromDictionary(IDictionary dictionary)
- => string.Join(';', dictionary
- .Select(kv => kv.Key + "=" + kv.Value)
- .ToImmutableHashSet());
+ => string.Join(';', dictionary.Select(kv => kv.Key + "=" + kv.Value));
public void SetRecord(short questID, string value)
{
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Field.cs b/src/common/Edelstein.Common.Gameplay.Game/Field.cs
index 4cf2a01d0..16c4b2825 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Field.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Field.cs
@@ -58,7 +58,7 @@ public Field(IFieldManager manager, IFieldTemplate template)
private DateTime NextGeneratorTick { get; set; }
public override IReadOnlyCollection Objects =>
- _pools.Values.SelectMany(p => p.Objects).ToImmutableList();
+ _pools.Values.SelectMany(p => p.Objects).ToImmutableArray();
public IFieldSplit? GetSplit(IPoint2D position)
{
@@ -195,7 +195,7 @@ public async Task Leave(IFieldObject obj, Func? getLeavePacket)
if (obj.FieldSplit != null)
{
if (obj is IFieldSplitObserver observer)
- foreach (var split in observer.Observing.ToImmutableList())
+ foreach (var split in observer.Observing.ToImmutableArray())
await split.Unobserve(observer, true);
await obj.FieldSplit.Leave(obj, getLeavePacket: getLeavePacket);
}
diff --git a/src/common/Edelstein.Common.Gameplay.Game/FieldManager.cs b/src/common/Edelstein.Common.Gameplay.Game/FieldManager.cs
index 3cf298be7..f1c1bd0a0 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/FieldManager.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/FieldManager.cs
@@ -73,5 +73,5 @@ ITemplateManager npcTemplates
}
public Task> RetrieveAll() =>
- Task.FromResult>(_fields.Values.ToImmutableList());
+ Task.FromResult>(_fields.Values.ToImmutableArray());
}
diff --git a/src/common/Edelstein.Common.Gameplay.Game/FieldSplit.cs b/src/common/Edelstein.Common.Gameplay.Game/FieldSplit.cs
index 37bdbfe85..5b754413d 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/FieldSplit.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/FieldSplit.cs
@@ -22,8 +22,8 @@ public FieldSplit(int row, int col)
public int Row { get; }
public int Col { get; }
- public override IReadOnlyCollection Objects => _objects.ToImmutableList();
- public IReadOnlyCollection Observers => _observers.ToImmutableList();
+ public override IReadOnlyCollection Objects => _objects.ToImmutableArray();
+ public IReadOnlyCollection Observers => _observers.ToImmutableArray();
public override Task Enter(IFieldObject obj) => Enter(obj, null);
public override Task Leave(IFieldObject obj) => Leave(obj, null);
@@ -44,12 +44,12 @@ public async Task Enter(IFieldObject obj, Func? getEnterPacket, Func w != obj)
.Where(obj.IsVisibleTo)
.Except(fromObservers)
- .ToImmutableList();
+ .ToImmutableArray();
var oldWatchers = fromObservers
.Where(w => w != obj)
.Where(obj.IsVisibleTo)
.Except(toObservers)
- .ToImmutableList();
+ .ToImmutableArray();
var enterPacket = getEnterPacket?.Invoke() ?? obj.GetEnterFieldPacket();
var leavePacket = getLeavePacket?.Invoke() ?? obj.GetLeaveFieldPacket();
@@ -63,11 +63,11 @@ public async Task Enter(IFieldObject obj, Func? getEnterPacket, Func s != null)
- .ToImmutableList();
+ .ToImmutableArray();
var newSplits = enclosingSplits
.Except(observer.Observing)
.Where(s => s != null)
- .ToImmutableList();
+ .ToImmutableArray();
await Task.WhenAll(oldSplits.Select(s => s!.Unobserve(observer)));
await Task.WhenAll(newSplits.Select(s => s!.Observe(observer)));
@@ -139,10 +139,10 @@ private async Task UpdateControllableObjects()
var controllers = Observers
.OfType()
.OrderBy(u => u.Controlled.Count)
- .ToImmutableList();
+ .ToImmutableArray();
var controlled = Objects
.OfType()
- .ToImmutableList();
+ .ToImmutableArray();
await Task.WhenAll(controlled
.Where(c => c.Controller == null || !controllers.Contains(c.Controller))
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Handling/Plugs/FieldOnPacketUserCharacterInfoRequestPlug.cs b/src/common/Edelstein.Common.Gameplay.Game/Handling/Plugs/FieldOnPacketUserCharacterInfoRequestPlug.cs
index 64bfbfebe..035865712 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Handling/Plugs/FieldOnPacketUserCharacterInfoRequestPlug.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Handling/Plugs/FieldOnPacketUserCharacterInfoRequestPlug.cs
@@ -31,9 +31,9 @@ public async Task Handle(IPipelineContext ctx, FieldOnPacketUserCharacterInfoReq
var wishlist = message.Target.Character.Wishlist.Records
.Where(c => c > 0)
- .ToImmutableList();
+ .ToImmutableArray();
- packet.WriteByte((byte)wishlist.Count);
+ packet.WriteByte((byte)wishlist.Length);
foreach (var commodity in wishlist)
packet.WriteInt(commodity);
@@ -44,9 +44,9 @@ public async Task Handle(IPipelineContext ctx, FieldOnPacketUserCharacterInfoReq
.Select(kv => kv.Value)
.Select(i => i.ID)
.Where(i => i / 10000 == 301)
- .ToList() ?? new List();
+ .ToImmutableArray() ?? ImmutableArray.Empty;
- packet.WriteInt(chairs.Count);
+ packet.WriteInt(chairs.Length);
foreach (var chair in chairs)
packet.WriteInt(chair);
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Handling/Plugs/NotifyPartyChangedBossPlug.cs b/src/common/Edelstein.Common.Gameplay.Game/Handling/Plugs/NotifyPartyChangedBossPlug.cs
index 13074f85e..71d04c493 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Handling/Plugs/NotifyPartyChangedBossPlug.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Handling/Plugs/NotifyPartyChangedBossPlug.cs
@@ -17,7 +17,9 @@ public class NotifyPartyChangedBossPlug : IPipelinePlug
public async Task Handle(IPipelineContext ctx, NotifyPartyChangedBoss message)
{
var users = await _stage.Users.RetrieveAll();
- var partied = users.Where(u => u.Party?.PartyID == message.PartyID).ToImmutableList();
+ var partied = users
+ .Where(u => u.Party?.PartyID == message.PartyID)
+ .ToImmutableArray();
foreach (var user in partied)
{
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Handling/Plugs/NotifyPartyDisbandedPlug.cs b/src/common/Edelstein.Common.Gameplay.Game/Handling/Plugs/NotifyPartyDisbandedPlug.cs
index 385d1bc72..4eb385934 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Handling/Plugs/NotifyPartyDisbandedPlug.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Handling/Plugs/NotifyPartyDisbandedPlug.cs
@@ -17,7 +17,9 @@ public class NotifyPartyDisbandedPlug : IPipelinePlug
public async Task Handle(IPipelineContext ctx, NotifyPartyDisbanded message)
{
var users = await _stage.Users.RetrieveAll();
- var partied = users.Where(u => u.Party?.PartyID == message.PartyID).ToImmutableList();
+ var partied = users
+ .Where(u => u.Party?.PartyID == message.PartyID)
+ .ToImmutableArray();
foreach (var user in partied)
{
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Handling/Plugs/NotifyPartyMemberJoinedPlug.cs b/src/common/Edelstein.Common.Gameplay.Game/Handling/Plugs/NotifyPartyMemberJoinedPlug.cs
index ec2dec5fb..25f540416 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Handling/Plugs/NotifyPartyMemberJoinedPlug.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Handling/Plugs/NotifyPartyMemberJoinedPlug.cs
@@ -22,7 +22,7 @@ public async Task Handle(IPipelineContext ctx, NotifyPartyMemberJoined message)
.Where(u =>
u.Party?.PartyID == message.PartyID ||
u.Character?.ID == message.PartyMember.CharacterID)
- .ToImmutableList();
+ .ToImmutableArray();
foreach (var user in partied)
{
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Handling/Plugs/NotifyPartyMemberUpdateChannelOrFieldPlug.cs b/src/common/Edelstein.Common.Gameplay.Game/Handling/Plugs/NotifyPartyMemberUpdateChannelOrFieldPlug.cs
index 37e204b9a..96a055b63 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Handling/Plugs/NotifyPartyMemberUpdateChannelOrFieldPlug.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Handling/Plugs/NotifyPartyMemberUpdateChannelOrFieldPlug.cs
@@ -17,7 +17,9 @@ public class NotifyPartyMemberUpdateChannelOrFieldPlug : IPipelinePlug u.Party?.PartyID == message.PartyID).ToImmutableList();
+ var partied = users
+ .Where(u => u.Party?.PartyID == message.PartyID)
+ .ToImmutableArray();
foreach (var user in partied)
{
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Handling/Plugs/NotifyPartyMemberUpdateLevelOrJobPlug.cs b/src/common/Edelstein.Common.Gameplay.Game/Handling/Plugs/NotifyPartyMemberUpdateLevelOrJobPlug.cs
index 6783fafef..de556b6ff 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Handling/Plugs/NotifyPartyMemberUpdateLevelOrJobPlug.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Handling/Plugs/NotifyPartyMemberUpdateLevelOrJobPlug.cs
@@ -17,7 +17,9 @@ public class NotifyPartyMemberUpdateLevelOrJobPlug : IPipelinePlug u.Party?.PartyID == message.PartyID).ToImmutableList();
+ var partied = users
+ .Where(u => u.Party?.PartyID == message.PartyID)
+ .ToImmutableArray();
foreach (var user in partied)
{
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Handling/Plugs/NotifyPartyMemberWithdrawnPlug.cs b/src/common/Edelstein.Common.Gameplay.Game/Handling/Plugs/NotifyPartyMemberWithdrawnPlug.cs
index 02d2e6af2..40051958d 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Handling/Plugs/NotifyPartyMemberWithdrawnPlug.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Handling/Plugs/NotifyPartyMemberWithdrawnPlug.cs
@@ -17,7 +17,9 @@ public class NotifyPartyMemberWithdrawnPlug : IPipelinePlug u.Party?.PartyID == message.PartyID).ToImmutableList();
+ var partied = users
+ .Where(u => u.Party?.PartyID == message.PartyID)
+ .ToImmutableArray();
foreach (var user in partied)
{
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Objects/AbstractFieldObject.cs b/src/common/Edelstein.Common.Gameplay.Game/Objects/AbstractFieldObject.cs
index 3820af458..d595a13f9 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Objects/AbstractFieldObject.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Objects/AbstractFieldObject.cs
@@ -53,7 +53,7 @@ public async Task Hide(bool hidden = true)
if (this is not IFieldObjectController controller) return;
- foreach (var controlled in controller.Controlled.ToImmutableList())
+ foreach (var controlled in controller.Controlled.ToImmutableArray())
await controlled.Control();
}
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Objects/AffectedArea/FieldAffectedArea.cs b/src/common/Edelstein.Common.Gameplay.Game/Objects/AffectedArea/FieldAffectedArea.cs
index bd51c283d..b4a9c3d80 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Objects/AffectedArea/FieldAffectedArea.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Objects/AffectedArea/FieldAffectedArea.cs
@@ -116,7 +116,7 @@ public async Task OnTick(DateTime now)
.Where(o => o is not IFieldAffectedArea)
.Where(o => _affected.Contains(o))
.Where(o => !Bounds.Intersects(o.Position) || o.Field != Field)
- .ToImmutableList())
+ .ToImmutableArray())
{
_affected.Remove(obj);
_ = Leave(obj);
@@ -131,7 +131,7 @@ public async Task OnTick(DateTime now)
.Where(o => o is not IFieldAffectedArea)
.Where(o => !_affected.Contains(o))
.Where(o => Bounds.Intersects(o.Position))
- .ToImmutableList())
+ .ToImmutableArray())
{
_affected.Add(obj);
_ = Enter(obj);
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Objects/FieldObjectPool.cs b/src/common/Edelstein.Common.Gameplay.Game/Objects/FieldObjectPool.cs
index 9d749a2da..51a7a63c7 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Objects/FieldObjectPool.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Objects/FieldObjectPool.cs
@@ -16,7 +16,7 @@ public FieldObjectPool()
_runningObjectID = new Queue(Enumerable.Range(1, 30_000));
}
- public override IReadOnlyCollection Objects => _objects.Values.ToImmutableList();
+ public override IReadOnlyCollection Objects => _objects.Values.ToImmutableArray();
public override Task Enter(IFieldObject obj)
{
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Objects/Mob/FieldMob.cs b/src/common/Edelstein.Common.Gameplay.Game/Objects/Mob/FieldMob.cs
index 022255dc3..ea445ae64 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Objects/Mob/FieldMob.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Objects/Mob/FieldMob.cs
@@ -238,12 +238,12 @@ public async Task OnTick(DateTime now)
var expiredStats = TemporaryStats.Records
.Where(kv => kv.Value.DateExpire < now)
- .ToImmutableList();
+ .ToImmutableArray();
var expiredBurned = TemporaryStats.BurnedInfo
.Where(b => b.DateExpire < now)
- .ToImmutableList();
+ .ToImmutableArray();
- if (expiredStats.Count > 0)
+ if (expiredStats.Length > 0)
{
await ModifyTemporaryStats(s =>
{
@@ -252,7 +252,7 @@ await ModifyTemporaryStats(s =>
});
}
- if (expiredBurned.Count > 0)
+ if (expiredBurned.Length > 0)
{
await ModifyTemporaryStats(s =>
{
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Objects/Mob/Stats/Modify/ModifyMobTemporaryStatsContext.cs b/src/common/Edelstein.Common.Gameplay.Game/Objects/Mob/Stats/Modify/ModifyMobTemporaryStatsContext.cs
index bc130a4c5..f789fa0b0 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Objects/Mob/Stats/Modify/ModifyMobTemporaryStatsContext.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Objects/Mob/Stats/Modify/ModifyMobTemporaryStatsContext.cs
@@ -58,7 +58,7 @@ public void ResetByReason(int reason)
foreach (var type in _stats.Records
.Where(kv => kv.Value.Reason == reason)
.Select(kv => kv.Key)
- .ToImmutableList())
+ .ToImmutableArray())
ResetByType(type);
}
@@ -92,7 +92,7 @@ public void ResetBurnedInfoBySkill(int skillID)
public void ResetBurnedInfoAll()
{
- foreach (var burned in _stats.BurnedInfo.ToImmutableList())
+ foreach (var burned in _stats.BurnedInfo.ToImmutableArray())
{
_stats.BurnedInfo.Remove(burned);
HistoryReset.BurnedInfo.Add(burned);
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Objects/Mob/Templates/MobStringTemplateLoader.cs b/src/common/Edelstein.Common.Gameplay.Game/Objects/Mob/Templates/MobStringTemplateLoader.cs
index 0a0390106..6c85b5305 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Objects/Mob/Templates/MobStringTemplateLoader.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Objects/Mob/Templates/MobStringTemplateLoader.cs
@@ -31,6 +31,7 @@ await _manager.Insert(new TemplateProviderEager(
));
}) ?? Array.Empty());
+ _manager.Freeze();
return _manager.Count;
}
}
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Objects/Mob/Templates/MobTemplate.cs b/src/common/Edelstein.Common.Gameplay.Game/Objects/Mob/Templates/MobTemplate.cs
index bb17b1fd1..a1b052940 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Objects/Mob/Templates/MobTemplate.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Objects/Mob/Templates/MobTemplate.cs
@@ -1,4 +1,5 @@
-using Duey.Abstractions;
+using System.Collections.Immutable;
+using Duey.Abstractions;
using Edelstein.Protocol.Gameplay.Game.Objects;
using Edelstein.Protocol.Gameplay.Game.Objects.Mob.Templates;
using Edelstein.Protocol.Gameplay.Models.Characters.Skills.Templates;
@@ -49,9 +50,9 @@ public MobTemplate(int id, IDataNode node, IDataNode info)
var elemCount = 0;
var elemAttrs = info.ResolveString("elemAttr") ?? string.Empty;
- foreach (var group in elemAttrs.GroupBy(_ => elemCount++ / 2).ToList())
+ foreach (var group in elemAttrs.GroupBy(_ => elemCount++ / 2).ToImmutableArray())
{
- var groupList = group.ToList();
+ var groupList = group.ToImmutableArray();
var elem = groupList[0] switch
{
'P' => Element.Physical,
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Objects/Mob/Templates/MobTemplateLoader.cs b/src/common/Edelstein.Common.Gameplay.Game/Objects/Mob/Templates/MobTemplateLoader.cs
index cd2edf828..9dcded153 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Objects/Mob/Templates/MobTemplateLoader.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Objects/Mob/Templates/MobTemplateLoader.cs
@@ -37,6 +37,7 @@ await _manager.Insert(new TemplateProviderLazy(
));
}));
+ _manager.Freeze();
return _manager.Count;
}
}
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Objects/NPC/Templates/NPCShopTemplate.cs b/src/common/Edelstein.Common.Gameplay.Game/Objects/NPC/Templates/NPCShopTemplate.cs
index d53ae63f9..76e79d17e 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Objects/NPC/Templates/NPCShopTemplate.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Objects/NPC/Templates/NPCShopTemplate.cs
@@ -16,6 +16,6 @@ public NPCShopTemplate(int id, IDataNode property)
ID = id;
Items = property.Children
.Select(p => (INPCShopItem)new NPCShopTemplateItem(Convert.ToInt32(p.Name), p.Cache()))
- .ToImmutableSortedSet(new NPCShopTemplateItemComparer()) ?? ImmutableSortedSet.Empty;
+ .ToImmutableSortedSet(new NPCShopTemplateItemComparer());
}
}
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Objects/NPC/Templates/NPCShopTemplateLoader.cs b/src/common/Edelstein.Common.Gameplay.Game/Objects/NPC/Templates/NPCShopTemplateLoader.cs
index dcc7952f3..db1da473b 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Objects/NPC/Templates/NPCShopTemplateLoader.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Objects/NPC/Templates/NPCShopTemplateLoader.cs
@@ -27,6 +27,7 @@ await _manager.Insert(new TemplateProviderEager(
));
}) ?? Array.Empty());
+ _manager.Freeze();
return _manager.Count;
}
}
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Objects/NPC/Templates/NPCStringTemplateLoader.cs b/src/common/Edelstein.Common.Gameplay.Game/Objects/NPC/Templates/NPCStringTemplateLoader.cs
index 43d7293cd..5af1989b1 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Objects/NPC/Templates/NPCStringTemplateLoader.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Objects/NPC/Templates/NPCStringTemplateLoader.cs
@@ -31,6 +31,7 @@ await _manager.Insert(new TemplateProviderEager(
));
}) ?? Array.Empty());
+ _manager.Freeze();
return _manager.Count;
}
}
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Objects/NPC/Templates/NPCTemplate.cs b/src/common/Edelstein.Common.Gameplay.Game/Objects/NPC/Templates/NPCTemplate.cs
index 7e6b468e6..720d91dfc 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Objects/NPC/Templates/NPCTemplate.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Objects/NPC/Templates/NPCTemplate.cs
@@ -1,4 +1,4 @@
-using System.Collections.Immutable;
+using System.Collections.Frozen;
using Duey.Abstractions;
using Edelstein.Protocol.Gameplay.Game.Objects.NPC.Templates;
@@ -22,8 +22,8 @@ public NPCTemplate(int id, IDataNode node, IDataNode info)
Scripts = info.ResolvePath("script")?.Children
.Where(p => p.Name.All(char.IsDigit)) // 1057006 causes errors
.Select(p => new NPCTemplateScript(Convert.ToInt32(p.Name), p))
- .ToImmutableList()
- ?? ImmutableList.Empty;
+ .ToFrozenSet()
+ ?? FrozenSet.Empty;
}
public int ID { get; }
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Objects/NPC/Templates/NPCTemplateLoader.cs b/src/common/Edelstein.Common.Gameplay.Game/Objects/NPC/Templates/NPCTemplateLoader.cs
index 75981588c..97477c70e 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Objects/NPC/Templates/NPCTemplateLoader.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Objects/NPC/Templates/NPCTemplateLoader.cs
@@ -36,6 +36,7 @@ await _manager.Insert(new TemplateProviderLazy(
));
}));
+ _manager.Freeze();
return _manager.Count;
}
}
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Objects/User/FieldUser.cs b/src/common/Edelstein.Common.Gameplay.Game/Objects/User/FieldUser.cs
index 3525e94cc..3d5ecb406 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Objects/User/FieldUser.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Objects/User/FieldUser.cs
@@ -479,7 +479,7 @@ await ModifyTemporaryStats(s =>
{
foreach (var kv in Character.TemporaryStats.Records
.Where(kv => kv.Value.DateExpire < now)
- .ToImmutableList())
+ .ToImmutableArray())
s.ResetByType(kv.Key);
if ((Character.TemporaryStats.EnergyChargedRecord?.IsActive() ?? false) &&
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Objects/User/FieldUserStats.cs b/src/common/Edelstein.Common.Gameplay.Game/Objects/User/FieldUserStats.cs
index 5f3d7f701..cc2390080 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Objects/User/FieldUserStats.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Objects/User/FieldUserStats.cs
@@ -254,7 +254,7 @@ private async Task ApplyItems(IFieldUser user)
.Where(kv => kv.Key < 0)
.Where(kv => kv.Value is ItemSlotEquip)
.Select(kv => (kv.Key, (ItemSlotEquip)kv.Value))
- .ToImmutableList() ?? ImmutableList<(short Key, ItemSlotEquip)>.Empty;
+ .ToImmutableArray() ?? ImmutableArray<(short Key, ItemSlotEquip)>.Empty;
var setCompletion = new Dictionary();
foreach (var (slot, item) in equipped)
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Quests/QuestManager.cs b/src/common/Edelstein.Common.Gameplay.Game/Quests/QuestManager.cs
index cf9bc58f2..7a6b8b6aa 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Quests/QuestManager.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Quests/QuestManager.cs
@@ -184,7 +184,9 @@ private async Task Act(QuestAction action, IQuestTemplate templ
var actTemplate = action == QuestAction.Start
? template.ActStart
: template.ActEnd;
- var rewardsBase = actTemplate.Items?.Where(i => i.Prob == null).ToImmutableList();
+ var rewardsBase = actTemplate.Items?
+ .Where(i => i.Prob == null)
+ .ToImmutableArray() ?? ImmutableArray.Empty;
var rewardsRandom = actTemplate.Items?
.Where(i => i.Gender is null or 2 || i.Gender == user.Character.Gender)
.Where(i =>
@@ -242,11 +244,13 @@ private async Task Act(QuestAction action, IQuestTemplate templ
return check;
})
.Where(i => i.Prob > 0)
- .ToImmutableList();
- var rewardsSelect = actTemplate.Items?.Where(i => i.Prob == -1).ToDictionary(
- i => i.Order,
- i => i
- );
+ .ToImmutableArray() ?? ImmutableArray.Empty;
+ var rewardsSelect = actTemplate.Items?
+ .Where(i => i.Prob == -1)
+ .ToImmutableDictionary(
+ i => i.Order,
+ i => i
+ );
var rewardSelect = select != null ? rewardsSelect?.GetValueOrDefault(select.Value) : null;
var rewardsCheck = new List>();
@@ -347,7 +351,7 @@ private async Task Act(QuestAction action, IQuestTemplate templ
await user.ModifyInventory(inventory);
await user.Effect(new QuestEffect(rewards
.Select(r => Tuple.Create(r.ItemID, r.Count))
- .ToImmutableList()));
+ .ToImmutableArray()));
}
return QuestResultType.Success;
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Quests/Templates/ModifiedQuestTimeTemplateLoader.cs b/src/common/Edelstein.Common.Gameplay.Game/Quests/Templates/ModifiedQuestTimeTemplateLoader.cs
index 6b45cd99b..932874a51 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Quests/Templates/ModifiedQuestTimeTemplateLoader.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Quests/Templates/ModifiedQuestTimeTemplateLoader.cs
@@ -27,6 +27,7 @@ await _manager.Insert(new TemplateProviderEager(
));
}) ?? Array.Empty());
+ _manager.Freeze();
return _manager.Count;
}
}
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Quests/Templates/QuestTemplateAct.cs b/src/common/Edelstein.Common.Gameplay.Game/Quests/Templates/QuestTemplateAct.cs
index b14e2b03f..60d9cd8c5 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Quests/Templates/QuestTemplateAct.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Quests/Templates/QuestTemplateAct.cs
@@ -1,4 +1,4 @@
-using System.Collections.Immutable;
+using System.Collections.Frozen;
using Duey.Abstractions;
using Edelstein.Protocol.Gameplay.Game.Quests.Templates;
@@ -21,13 +21,13 @@ public QuestTemplateAct(IDataNode? node)
Items = node?.ResolvePath("item")?.Children
.Select(p => (IQuestTemplateActItem)new QuestTemplateActItem(Convert.ToInt32(p.Name), p.Cache()))
- .ToImmutableList();
+ .ToFrozenSet();
Skills = node?.ResolvePath("skill")?.Children
.Select(p => (IQuestTemplateActSkill)new QuestTemplateActSkill(p.Cache()))
- .ToImmutableList();
+ .ToFrozenSet();
SP = node?.ResolvePath("sp")?.Children
.Select(p => (IQuestTemplateActSP)new QuestTemplateActSP(p.Cache()))
- .ToImmutableList();
+ .ToFrozenSet();
}
public int? IncEXP { get; }
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Quests/Templates/QuestTemplateActSP.cs b/src/common/Edelstein.Common.Gameplay.Game/Quests/Templates/QuestTemplateActSP.cs
index 01893c777..47d187aaa 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Quests/Templates/QuestTemplateActSP.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Quests/Templates/QuestTemplateActSP.cs
@@ -1,4 +1,4 @@
-using System.Collections.Immutable;
+using System.Collections.Frozen;
using Duey.Abstractions;
using Edelstein.Protocol.Gameplay.Game.Quests.Templates;
@@ -13,7 +13,7 @@ public QuestTemplateActSP(IDataNode node)
.Select(p => p.ResolveInt())
.Where(i => i.HasValue)
.Select(i => i.Value)
- .ToImmutableList();
+ .ToFrozenSet();
}
public int SP { get; }
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Quests/Templates/QuestTemplateActSkill.cs b/src/common/Edelstein.Common.Gameplay.Game/Quests/Templates/QuestTemplateActSkill.cs
index 382171b5e..86a4b842c 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Quests/Templates/QuestTemplateActSkill.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Quests/Templates/QuestTemplateActSkill.cs
@@ -1,4 +1,4 @@
-using System.Collections.Immutable;
+using System.Collections.Frozen;
using Duey.Abstractions;
using Edelstein.Protocol.Gameplay.Game.Quests.Templates;
@@ -16,7 +16,7 @@ public QuestTemplateActSkill(IDataNode node)
.Select(p => p.ResolveInt())
.Where(i => i.HasValue)
.Select(i => i.Value)
- .ToImmutableList();
+ .ToFrozenSet();
}
public int SkillID { get; }
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Quests/Templates/QuestTemplateCheck.cs b/src/common/Edelstein.Common.Gameplay.Game/Quests/Templates/QuestTemplateCheck.cs
index 0b84bb698..9d3e2e32f 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Quests/Templates/QuestTemplateCheck.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Quests/Templates/QuestTemplateCheck.cs
@@ -1,4 +1,5 @@
-using System.Collections.Immutable;
+using System.Collections.Frozen;
+using System.Collections.Immutable;
using System.Globalization;
using Duey.Abstractions;
using Edelstein.Protocol.Gameplay.Game.Quests.Templates;
@@ -33,12 +34,12 @@ public QuestTemplateCheck(IDataNode? node)
Jobs = node?.ResolvePath("job")?.Children
.Select(c => c.ResolveInt() ?? -1)
- .ToImmutableList();
+ .ToFrozenSet();
SubJobFlags = node?.ResolveInt("subJobFlags");
CheckItem = node?.ResolvePath("item")?.Children
.Select(p => (IQuestTemplateCheckItem)new QuestTemplateCheckItem(p.Cache()))
- .ToImmutableList();
+ .ToFrozenSet();
CheckMob = node?.ResolvePath("mob")?.Children
.Select(p => (IQuestTemplateCheckMob)new QuestTemplateCheckMob(Convert.ToInt32(p.Name), p.Cache()))
.ToImmutableSortedSet(new QuestTemplateCheckMobComparer());
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Quests/Templates/QuestTemplateLoader.cs b/src/common/Edelstein.Common.Gameplay.Game/Quests/Templates/QuestTemplateLoader.cs
index 27dbb60ac..c9c9ebd72 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Quests/Templates/QuestTemplateLoader.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Quests/Templates/QuestTemplateLoader.cs
@@ -38,6 +38,7 @@ await _manager.Insert(new TemplateProviderEager(
));
}) ?? Array.Empty());
+ _manager.Freeze();
return _manager.Count;
}
}
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Spatial/FieldSpace.cs b/src/common/Edelstein.Common.Gameplay.Game/Spatial/FieldSpace.cs
index 6dfed44d3..bde7be42f 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Spatial/FieldSpace.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Spatial/FieldSpace.cs
@@ -19,13 +19,13 @@ public FieldSpace(IRectangle2D bounds)
_space = new RBushSpace2D();
}
- public IReadOnlyCollection Objects => _objects.Values.ToImmutableList();
+ public IReadOnlyCollection Objects => _objects.Values.ToImmutableArray();
public IRectangle2D Bounds { get; }
public void Insert(IEnumerable obj)
{
- var objects = obj.ToImmutableList();
+ var objects = obj.ToImmutableArray();
foreach (var o in objects)
_objects.Add(o.ID, o);
_space.Insert(objects);
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Templates/FieldStringTemplateLoader.cs b/src/common/Edelstein.Common.Gameplay.Game/Templates/FieldStringTemplateLoader.cs
index 3d5de8fa7..a0719d42f 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Templates/FieldStringTemplateLoader.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Templates/FieldStringTemplateLoader.cs
@@ -36,6 +36,7 @@ await _manager.Insert(new TemplateProviderEager(
));
}));
+ _manager.Freeze();
return _manager.Count;
}
}
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Templates/FieldTemplate.cs b/src/common/Edelstein.Common.Gameplay.Game/Templates/FieldTemplate.cs
index 41ceb803f..f130d9b07 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Templates/FieldTemplate.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Templates/FieldTemplate.cs
@@ -1,4 +1,4 @@
-using System.Collections.Immutable;
+using System.Collections.Frozen;
using Duey.Abstractions;
using Edelstein.Common.Gameplay.Game.Spatial;
using Edelstein.Common.Utilities.Spatial;
@@ -38,11 +38,11 @@ IDataNode info
.SelectMany(c => c.Children)
.SelectMany(c => c.Children)
.Select(p => new FieldFoothold(Convert.ToInt32(p.Name), p.Cache()))
- .ToImmutableList();
+ .ToFrozenSet();
var portals = portal.Children
.Select(p => new FieldPortal(Convert.ToInt32(p.Name), p.Cache()))
- .ToImmutableList();
-
+ .ToFrozenSet();
+
var leftTop = new Point2D(
footholds.Min(f => f.MinX),
footholds.Min(f => f.MinY)
@@ -74,7 +74,7 @@ IDataNode info
Life = life.Children
.Select(p => new FieldTemplateLife(p.Cache()))
- .ToImmutableList();
+ .ToFrozenSet();
MobRate = info.ResolveDouble("mobRate") ?? 1.0;
diff --git a/src/common/Edelstein.Common.Gameplay.Game/Templates/FieldTemplateLoader.cs b/src/common/Edelstein.Common.Gameplay.Game/Templates/FieldTemplateLoader.cs
index 4f2d2fe35..0d3788054 100644
--- a/src/common/Edelstein.Common.Gameplay.Game/Templates/FieldTemplateLoader.cs
+++ b/src/common/Edelstein.Common.Gameplay.Game/Templates/FieldTemplateLoader.cs
@@ -41,6 +41,7 @@ await _manager.Insert(new TemplateProviderLazy(
));
}));
+ _manager.Freeze();
return _manager.Count;
}
}
diff --git a/src/common/Edelstein.Common.Gameplay.Game/packages.lock.json b/src/common/Edelstein.Common.Gameplay.Game/packages.lock.json
new file mode 100644
index 000000000..b4f08f156
--- /dev/null
+++ b/src/common/Edelstein.Common.Gameplay.Game/packages.lock.json
@@ -0,0 +1,175 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {
+ "Foundatio": {
+ "type": "Direct",
+ "requested": "[10.6.1, )",
+ "resolved": "10.6.1",
+ "contentHash": "c5LXLzjaCwBlzozpIiumQeuFhalZgE5L38uaGu6IVlB8HMOd2Wnf7WmylRUo15BWySgqi/mpoq2ikVZCUrrpKg==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "6.0.0",
+ "Microsoft.Extensions.DependencyInjection": "6.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "6.0.0",
+ "System.Diagnostics.DiagnosticSource": "6.0.0",
+ "System.Text.Json": "6.0.0"
+ }
+ },
+ "Stateless": {
+ "type": "Direct",
+ "requested": "[5.13.0, )",
+ "resolved": "5.13.0",
+ "contentHash": "M4Rb4b31TUEfhCd4en0WlRfuFgQ2rwva9e1CuXnto5vNGvRsNVimHENnvjegf6nKG9ZH+51McAZ/huqRtTziYg=="
+ },
+ "Duey.Abstractions": {
+ "type": "Transitive",
+ "resolved": "2.0.0",
+ "contentHash": "KP3l7yZoT1uMk8B+rAjZ3VL+2/XfXZxKTx31wDz7JNfcPnUmllJpgoqnDYQcVEJ5e4WLWToBQHZ3OIgOm6T/kg=="
+ },
+ "MathParser.org-mXparser": {
+ "type": "Transitive",
+ "resolved": "4.4.3",
+ "contentHash": "QhHsP4nzyjC3G2kJ+dbT3NFuE0M0rKfa0wQjCcn5UyK0VnXN8OeYMy9KEYGzNKI9ealcwOQJd/4Xcq4PE+Vl7g=="
+ },
+ "Microsoft.Bcl.AsyncInterfaces": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "UcSjPsst+DfAdJGVDsu346FX0ci0ah+lw3WRtn18NUwEqRt70HaOQ7lI72vy3+1LxtqI3T5GWwV39rQSrCzAeg=="
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "k6PWQMuoBDGGHOQTtyois2u4AwyVcIwL2LaSLlTZQm2CYcJ1pxbt6jfAnpWmzENA/wfrYRI/X9DTLoUkE4AsLw==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0",
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "xlzi2IYREJH3/m6+lUrQlujzX8wDitm4QGnUu6kUXTQAWPuZY8i+ticFJbzfqaetLA6KR/rO6Ew/HuYD+bxifg=="
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw=="
+ },
+ "Microsoft.IO.RecyclableMemoryStream": {
+ "type": "Transitive",
+ "resolved": "2.3.2",
+ "contentHash": "Oh1qXXFdJFcHozvb4H6XYLf2W0meZFuG0A+TfapFPj9z5fd4vxiARGEhAaLj/6XWQaMYIv4SH/9Q6H78Hw0E2Q=="
+ },
+ "RBush": {
+ "type": "Transitive",
+ "resolved": "3.2.0",
+ "contentHash": "ijGh9N0zZ7JfXk3oQkWCwK8SwSSByexbyh/MjbCjNxOft9eG5ZqKC1vdgiYq78h4IZRFmN4s3JZ/b10Jipud5w=="
+ },
+ "System.Diagnostics.DiagnosticSource": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "frQDfv0rl209cKm1lnwTgFPzNigy2EKk1BS3uAvHvlBVKe5cymGyHO+Sj+NLv5VF/AhHsqPIUUwya5oV4CHMUw==",
+ "dependencies": {
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0"
+ }
+ },
+ "System.Runtime.CompilerServices.Unsafe": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg=="
+ },
+ "System.Text.Encodings.Web": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "Vg8eB5Tawm1IFqj4TVK1czJX89rhFxJo9ELqc/Eiq0eXy13RK00eubyU6TJE6y+GQXjyV5gSfiewDUZjQgSE0w==",
+ "dependencies": {
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0"
+ }
+ },
+ "System.Text.Json": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "zaJsHfESQvJ11vbXnNlkrR46IaMULk/gHxYsJphzSF+07kTjPHv+Oc14w6QEOfo3Q4hqLJgStUaYB9DBl0TmWg==",
+ "dependencies": {
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0",
+ "System.Text.Encodings.Web": "6.0.0"
+ }
+ },
+ "edelstein.common.constants": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )"
+ }
+ },
+ "edelstein.common.gameplay": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Common.Constants": "[1.0.0, )",
+ "Edelstein.Common.Utilities": "[1.0.0, )",
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Server": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Social": "[1.0.0, )",
+ "MathParser.org-mXparser": "[4.4.3, )",
+ "Microsoft.Extensions.Logging.Abstractions": "[7.0.0, )"
+ }
+ },
+ "edelstein.common.utilities": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )",
+ "Microsoft.Extensions.Logging.Abstractions": "[7.0.0, )",
+ "Microsoft.IO.RecyclableMemoryStream": "[2.3.2, )",
+ "RBush": "[3.2.0, )"
+ }
+ },
+ "edelstein.protocol.gameplay": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Protocol.Network": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Social": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.gameplay.game": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Auth": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Server": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Social": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.network": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.scripting": {
+ "type": "Project"
+ },
+ "edelstein.protocol.services.auth": {
+ "type": "Project"
+ },
+ "edelstein.protocol.services.server": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.services.social": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.utilities": {
+ "type": "Project"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/common/Edelstein.Common.Gameplay.Login/Handling/Plugs/UserOnPacketSelectWorldPlug.cs b/src/common/Edelstein.Common.Gameplay.Login/Handling/Plugs/UserOnPacketSelectWorldPlug.cs
index e870872f1..fff4413c4 100644
--- a/src/common/Edelstein.Common.Gameplay.Login/Handling/Plugs/UserOnPacketSelectWorldPlug.cs
+++ b/src/common/Edelstein.Common.Gameplay.Login/Handling/Plugs/UserOnPacketSelectWorldPlug.cs
@@ -55,7 +55,7 @@ public async Task Handle(IPipelineContext ctx, UserOnPacketSelectWorld message)
var characters = (await _characterRepository
.RetrieveAllByAccountWorld(accountWorld.ID))
- .ToImmutableList();
+ .ToImmutableArray();
using var packet = new PacketWriter(PacketSendOperations.SelectWorldResult);
packet.WriteByte((byte)result);
@@ -67,7 +67,7 @@ public async Task Handle(IPipelineContext ctx, UserOnPacketSelectWorld message)
message.User.SelectedWorldID = (byte)gameStage.Server!.WorldID;
message.User.SelectedChannelID = (byte)gameStage.Server!.ChannelID;
- packet.WriteByte((byte)characters.Count);
+ packet.WriteByte((byte)characters.Length);
foreach (var character in characters)
{
diff --git a/src/common/Edelstein.Common.Gameplay.Login/Handling/Plugs/UserOnPacketWorldRequestPlug.cs b/src/common/Edelstein.Common.Gameplay.Login/Handling/Plugs/UserOnPacketWorldRequestPlug.cs
index 62c5f7b6d..685539810 100644
--- a/src/common/Edelstein.Common.Gameplay.Login/Handling/Plugs/UserOnPacketWorldRequestPlug.cs
+++ b/src/common/Edelstein.Common.Gameplay.Login/Handling/Plugs/UserOnPacketWorldRequestPlug.cs
@@ -48,9 +48,9 @@ public async Task Handle(IPipelineContext ctx, UserOnPacketWorldRequest message)
var gameStages =
(await _serverService.GetGameByWorld(new ServerGetGameByWorldRequest(worldID))).Servers
.OrderBy(s => s.ChannelID)
- .ToImmutableList();
+ .ToImmutableArray();
- packet.WriteByte((byte)gameStages.Count);
+ packet.WriteByte((byte)gameStages.Length);
foreach (var stage in gameStages)
{
diff --git a/src/common/Edelstein.Common.Gameplay.Login/Templates/WorldTemplateLoader.cs b/src/common/Edelstein.Common.Gameplay.Login/Templates/WorldTemplateLoader.cs
index ccf5f55c4..56e2569c1 100644
--- a/src/common/Edelstein.Common.Gameplay.Login/Templates/WorldTemplateLoader.cs
+++ b/src/common/Edelstein.Common.Gameplay.Login/Templates/WorldTemplateLoader.cs
@@ -31,6 +31,7 @@ await _manager.Insert(new TemplateProviderLazy(
));
}
+ _manager.Freeze();
return _manager.Count;
}
}
diff --git a/src/common/Edelstein.Common.Gameplay.Login/packages.lock.json b/src/common/Edelstein.Common.Gameplay.Login/packages.lock.json
new file mode 100644
index 000000000..d806566d7
--- /dev/null
+++ b/src/common/Edelstein.Common.Gameplay.Login/packages.lock.json
@@ -0,0 +1,109 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {
+ "BCrypt.Net-Next": {
+ "type": "Direct",
+ "requested": "[4.0.3, )",
+ "resolved": "4.0.3",
+ "contentHash": "W+U9WvmZQgi5cX6FS5GDtDoPzUCV4LkBLkywq/kRZhuDwcbavOzcDAr3LXJFqHUi952Yj3LEYoWW0jbEUQChsA=="
+ },
+ "Duey.Abstractions": {
+ "type": "Transitive",
+ "resolved": "2.0.0",
+ "contentHash": "KP3l7yZoT1uMk8B+rAjZ3VL+2/XfXZxKTx31wDz7JNfcPnUmllJpgoqnDYQcVEJ5e4WLWToBQHZ3OIgOm6T/kg=="
+ },
+ "MathParser.org-mXparser": {
+ "type": "Transitive",
+ "resolved": "4.4.3",
+ "contentHash": "QhHsP4nzyjC3G2kJ+dbT3NFuE0M0rKfa0wQjCcn5UyK0VnXN8OeYMy9KEYGzNKI9ealcwOQJd/4Xcq4PE+Vl7g=="
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw=="
+ },
+ "Microsoft.IO.RecyclableMemoryStream": {
+ "type": "Transitive",
+ "resolved": "2.3.2",
+ "contentHash": "Oh1qXXFdJFcHozvb4H6XYLf2W0meZFuG0A+TfapFPj9z5fd4vxiARGEhAaLj/6XWQaMYIv4SH/9Q6H78Hw0E2Q=="
+ },
+ "RBush": {
+ "type": "Transitive",
+ "resolved": "3.2.0",
+ "contentHash": "ijGh9N0zZ7JfXk3oQkWCwK8SwSSByexbyh/MjbCjNxOft9eG5ZqKC1vdgiYq78h4IZRFmN4s3JZ/b10Jipud5w=="
+ },
+ "edelstein.common.constants": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )"
+ }
+ },
+ "edelstein.common.gameplay": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Common.Constants": "[1.0.0, )",
+ "Edelstein.Common.Utilities": "[1.0.0, )",
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Server": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Social": "[1.0.0, )",
+ "MathParser.org-mXparser": "[4.4.3, )",
+ "Microsoft.Extensions.Logging.Abstractions": "[7.0.0, )"
+ }
+ },
+ "edelstein.common.utilities": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )",
+ "Microsoft.Extensions.Logging.Abstractions": "[7.0.0, )",
+ "Microsoft.IO.RecyclableMemoryStream": "[2.3.2, )",
+ "RBush": "[3.2.0, )"
+ }
+ },
+ "edelstein.protocol.gameplay": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Protocol.Network": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Social": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.gameplay.login": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Auth": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Server": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.network": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.services.auth": {
+ "type": "Project"
+ },
+ "edelstein.protocol.services.server": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.services.social": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.utilities": {
+ "type": "Project"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/common/Edelstein.Common.Gameplay.Shop/Commodities/Templates/CashPackageTemplate.cs b/src/common/Edelstein.Common.Gameplay.Shop/Commodities/Templates/CashPackageTemplate.cs
index d56117f62..1996040c5 100644
--- a/src/common/Edelstein.Common.Gameplay.Shop/Commodities/Templates/CashPackageTemplate.cs
+++ b/src/common/Edelstein.Common.Gameplay.Shop/Commodities/Templates/CashPackageTemplate.cs
@@ -1,4 +1,4 @@
-using System.Collections.Immutable;
+using System.Collections.Frozen;
using Duey.Abstractions;
using Edelstein.Protocol.Gameplay.Shop.Commodities.Templates;
@@ -15,6 +15,6 @@ public CashPackageTemplate(int id, IDataNode node)
SN = node
.ResolvePath("SN")?
.Select(c => c.ResolveInt() ?? 0)
- .ToImmutableList() ?? ImmutableList.Empty;
+ .ToFrozenSet() ?? FrozenSet.Empty;
}
}
diff --git a/src/common/Edelstein.Common.Gameplay.Shop/Commodities/Templates/CashPackageTemplateLoader.cs b/src/common/Edelstein.Common.Gameplay.Shop/Commodities/Templates/CashPackageTemplateLoader.cs
index 3d583451a..77e929f43 100644
--- a/src/common/Edelstein.Common.Gameplay.Shop/Commodities/Templates/CashPackageTemplateLoader.cs
+++ b/src/common/Edelstein.Common.Gameplay.Shop/Commodities/Templates/CashPackageTemplateLoader.cs
@@ -28,6 +28,7 @@ await _manager.Insert(new TemplateProviderLazy(
));
}) ?? Array.Empty());
+ _manager.Freeze();
return _manager.Count;
}
}
diff --git a/src/common/Edelstein.Common.Gameplay.Shop/Commodities/Templates/CommodityTemplateLoader.cs b/src/common/Edelstein.Common.Gameplay.Shop/Commodities/Templates/CommodityTemplateLoader.cs
index f5d8cc56d..25476e7ae 100644
--- a/src/common/Edelstein.Common.Gameplay.Shop/Commodities/Templates/CommodityTemplateLoader.cs
+++ b/src/common/Edelstein.Common.Gameplay.Shop/Commodities/Templates/CommodityTemplateLoader.cs
@@ -27,6 +27,7 @@ await _manager.Insert(new TemplateProviderLazy(
));
}) ?? Array.Empty());
+ _manager.Freeze();
return _manager.Count;
}
}
diff --git a/src/common/Edelstein.Common.Gameplay.Shop/Commodities/Templates/ModifiedCommodityTemplate.cs b/src/common/Edelstein.Common.Gameplay.Shop/Commodities/Templates/ModifiedCommodityTemplate.cs
index b2cf8a370..f7041a6de 100644
--- a/src/common/Edelstein.Common.Gameplay.Shop/Commodities/Templates/ModifiedCommodityTemplate.cs
+++ b/src/common/Edelstein.Common.Gameplay.Shop/Commodities/Templates/ModifiedCommodityTemplate.cs
@@ -1,4 +1,4 @@
-using System.Collections.Immutable;
+using System.Collections.Frozen;
using Duey.Abstractions;
using Edelstein.Protocol.Gameplay.Shop.Commodities;
using Edelstein.Protocol.Utilities.Templates;
@@ -39,7 +39,7 @@ public ModifiedCommodityTemplate(int sn, IDataNode node)
PackageSN = node
.ResolvePath("PackageSN")?
.Select(c => c.ResolveInt() ?? 0)
- .ToImmutableList() ?? null;
+ .ToFrozenSet() ?? null;
if (ItemID != null) Flags |= CommodityFlags.ItemID;
if (Count != null) Flags |= CommodityFlags.Count;
diff --git a/src/common/Edelstein.Common.Gameplay.Shop/Commodities/Templates/ModifiedCommodityTemplateLoader.cs b/src/common/Edelstein.Common.Gameplay.Shop/Commodities/Templates/ModifiedCommodityTemplateLoader.cs
index 4fcb31eb9..c1d00c4b9 100644
--- a/src/common/Edelstein.Common.Gameplay.Shop/Commodities/Templates/ModifiedCommodityTemplateLoader.cs
+++ b/src/common/Edelstein.Common.Gameplay.Shop/Commodities/Templates/ModifiedCommodityTemplateLoader.cs
@@ -27,6 +27,7 @@ await _manager.Insert(new TemplateProviderEager(
));
}) ?? Array.Empty());
+ _manager.Freeze();
return _manager.Count;
}
}
diff --git a/src/common/Edelstein.Common.Gameplay.Shop/Commodities/Templates/NotSaleTemplateLoader.cs b/src/common/Edelstein.Common.Gameplay.Shop/Commodities/Templates/NotSaleTemplateLoader.cs
index 792906bfe..ee1cb66d1 100644
--- a/src/common/Edelstein.Common.Gameplay.Shop/Commodities/Templates/NotSaleTemplateLoader.cs
+++ b/src/common/Edelstein.Common.Gameplay.Shop/Commodities/Templates/NotSaleTemplateLoader.cs
@@ -27,6 +27,7 @@ await _manager.Insert(new TemplateProviderEager(
));
}) ?? Array.Empty());
+ _manager.Freeze();
return _manager.Count;
}
}
diff --git a/src/common/Edelstein.Common.Gameplay.Shop/packages.lock.json b/src/common/Edelstein.Common.Gameplay.Shop/packages.lock.json
new file mode 100644
index 000000000..9f927a4fb
--- /dev/null
+++ b/src/common/Edelstein.Common.Gameplay.Shop/packages.lock.json
@@ -0,0 +1,104 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {
+ "Duey.Abstractions": {
+ "type": "Transitive",
+ "resolved": "2.0.0",
+ "contentHash": "KP3l7yZoT1uMk8B+rAjZ3VL+2/XfXZxKTx31wDz7JNfcPnUmllJpgoqnDYQcVEJ5e4WLWToBQHZ3OIgOm6T/kg=="
+ },
+ "MathParser.org-mXparser": {
+ "type": "Transitive",
+ "resolved": "4.4.3",
+ "contentHash": "QhHsP4nzyjC3G2kJ+dbT3NFuE0M0rKfa0wQjCcn5UyK0VnXN8OeYMy9KEYGzNKI9ealcwOQJd/4Xcq4PE+Vl7g=="
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw=="
+ },
+ "Microsoft.IO.RecyclableMemoryStream": {
+ "type": "Transitive",
+ "resolved": "2.3.2",
+ "contentHash": "Oh1qXXFdJFcHozvb4H6XYLf2W0meZFuG0A+TfapFPj9z5fd4vxiARGEhAaLj/6XWQaMYIv4SH/9Q6H78Hw0E2Q=="
+ },
+ "RBush": {
+ "type": "Transitive",
+ "resolved": "3.2.0",
+ "contentHash": "ijGh9N0zZ7JfXk3oQkWCwK8SwSSByexbyh/MjbCjNxOft9eG5ZqKC1vdgiYq78h4IZRFmN4s3JZ/b10Jipud5w=="
+ },
+ "edelstein.common.constants": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )"
+ }
+ },
+ "edelstein.common.gameplay": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Common.Constants": "[1.0.0, )",
+ "Edelstein.Common.Utilities": "[1.0.0, )",
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Server": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Social": "[1.0.0, )",
+ "MathParser.org-mXparser": "[4.4.3, )",
+ "Microsoft.Extensions.Logging.Abstractions": "[7.0.0, )"
+ }
+ },
+ "edelstein.common.utilities": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )",
+ "Microsoft.Extensions.Logging.Abstractions": "[7.0.0, )",
+ "Microsoft.IO.RecyclableMemoryStream": "[2.3.2, )",
+ "RBush": "[3.2.0, )"
+ }
+ },
+ "edelstein.protocol.gameplay": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Protocol.Network": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Social": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.gameplay.shop": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Auth": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Server": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.network": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.services.auth": {
+ "type": "Project"
+ },
+ "edelstein.protocol.services.server": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.services.social": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.utilities": {
+ "type": "Project"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/common/Edelstein.Common.Gameplay.Trade/packages.lock.json b/src/common/Edelstein.Common.Gameplay.Trade/packages.lock.json
new file mode 100644
index 000000000..640de9a59
--- /dev/null
+++ b/src/common/Edelstein.Common.Gameplay.Trade/packages.lock.json
@@ -0,0 +1,104 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {
+ "Duey.Abstractions": {
+ "type": "Transitive",
+ "resolved": "2.0.0",
+ "contentHash": "KP3l7yZoT1uMk8B+rAjZ3VL+2/XfXZxKTx31wDz7JNfcPnUmllJpgoqnDYQcVEJ5e4WLWToBQHZ3OIgOm6T/kg=="
+ },
+ "MathParser.org-mXparser": {
+ "type": "Transitive",
+ "resolved": "4.4.3",
+ "contentHash": "QhHsP4nzyjC3G2kJ+dbT3NFuE0M0rKfa0wQjCcn5UyK0VnXN8OeYMy9KEYGzNKI9ealcwOQJd/4Xcq4PE+Vl7g=="
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw=="
+ },
+ "Microsoft.IO.RecyclableMemoryStream": {
+ "type": "Transitive",
+ "resolved": "2.3.2",
+ "contentHash": "Oh1qXXFdJFcHozvb4H6XYLf2W0meZFuG0A+TfapFPj9z5fd4vxiARGEhAaLj/6XWQaMYIv4SH/9Q6H78Hw0E2Q=="
+ },
+ "RBush": {
+ "type": "Transitive",
+ "resolved": "3.2.0",
+ "contentHash": "ijGh9N0zZ7JfXk3oQkWCwK8SwSSByexbyh/MjbCjNxOft9eG5ZqKC1vdgiYq78h4IZRFmN4s3JZ/b10Jipud5w=="
+ },
+ "edelstein.common.constants": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )"
+ }
+ },
+ "edelstein.common.gameplay": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Common.Constants": "[1.0.0, )",
+ "Edelstein.Common.Utilities": "[1.0.0, )",
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Server": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Social": "[1.0.0, )",
+ "MathParser.org-mXparser": "[4.4.3, )",
+ "Microsoft.Extensions.Logging.Abstractions": "[7.0.0, )"
+ }
+ },
+ "edelstein.common.utilities": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )",
+ "Microsoft.Extensions.Logging.Abstractions": "[7.0.0, )",
+ "Microsoft.IO.RecyclableMemoryStream": "[2.3.2, )",
+ "RBush": "[3.2.0, )"
+ }
+ },
+ "edelstein.protocol.gameplay": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Protocol.Network": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Social": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.gameplay.trade": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Auth": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Server": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.network": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.services.auth": {
+ "type": "Project"
+ },
+ "edelstein.protocol.services.server": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.services.social": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.utilities": {
+ "type": "Project"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/common/Edelstein.Common.Gameplay/Models/Characters/Skills/Modify/ModifySkillContext.cs b/src/common/Edelstein.Common.Gameplay/Models/Characters/Skills/Modify/ModifySkillContext.cs
index f2d2432b1..9e19af9d0 100644
--- a/src/common/Edelstein.Common.Gameplay/Models/Characters/Skills/Modify/ModifySkillContext.cs
+++ b/src/common/Edelstein.Common.Gameplay/Models/Characters/Skills/Modify/ModifySkillContext.cs
@@ -1,4 +1,5 @@
-using Edelstein.Common.Constants;
+using System.Collections.Immutable;
+using Edelstein.Common.Constants;
using Edelstein.Common.Utilities.Packets;
using Edelstein.Protocol.Gameplay.Models.Characters;
using Edelstein.Protocol.Gameplay.Models.Characters.Skills;
@@ -59,13 +60,13 @@ public void ResetByJobLevel(int jobLevel)
{
foreach (var kv in _character.Skills.Records
.Where(kv => JobConstants.GetJobLevel(jobLevel) == jobLevel)
- .ToList())
+ .ToImmutableArray())
Set(kv.Key, 0);
}
public void ResetAll()
{
- foreach (var kv in _character.Skills.Records.ToList())
+ foreach (var kv in _character.Skills.Records.ToImmutableArray())
Set(kv.Key, 0);
}
diff --git a/src/common/Edelstein.Common.Gameplay/Models/Characters/Skills/Templates/SkillStringTemplateLoader.cs b/src/common/Edelstein.Common.Gameplay/Models/Characters/Skills/Templates/SkillStringTemplateLoader.cs
index 41794ddf2..c30a53555 100644
--- a/src/common/Edelstein.Common.Gameplay/Models/Characters/Skills/Templates/SkillStringTemplateLoader.cs
+++ b/src/common/Edelstein.Common.Gameplay/Models/Characters/Skills/Templates/SkillStringTemplateLoader.cs
@@ -33,6 +33,7 @@ await _manager.Insert(new TemplateProviderEager(
));
}) ?? Array.Empty());
+ _manager.Freeze();
return _manager.Count;
}
}
diff --git a/src/common/Edelstein.Common.Gameplay/Models/Characters/Skills/Templates/SkillTemplate.cs b/src/common/Edelstein.Common.Gameplay/Models/Characters/Skills/Templates/SkillTemplate.cs
index 3c4b3eb21..e0f4602f4 100644
--- a/src/common/Edelstein.Common.Gameplay/Models/Characters/Skills/Templates/SkillTemplate.cs
+++ b/src/common/Edelstein.Common.Gameplay/Models/Characters/Skills/Templates/SkillTemplate.cs
@@ -1,4 +1,4 @@
-using System.Collections.Immutable;
+using System.Collections.Frozen;
using Duey.Abstractions;
using Edelstein.Protocol.Gameplay.Models.Characters.Skills.Templates;
@@ -57,12 +57,12 @@ public SkillTemplate(int id, IDataNode node)
PsdSkill = node.ResolvePath("psdSkill")?
.Select(c => Convert.ToInt32(c.Name))
- .ToImmutableList() ?? ImmutableList.Empty;
+ .ToFrozenSet() ?? FrozenSet.Empty;
ReqSkill = node.ResolvePath("req")?.Children
- .ToImmutableDictionary(
+ .ToFrozenDictionary(
c => Convert.ToInt32(c.Name),
c => c.ResolveInt() ?? 0
- ) ?? ImmutableDictionary.Empty;
+ ) ?? FrozenDictionary.Empty;
var common = node.ResolvePath("common");
@@ -78,7 +78,7 @@ public SkillTemplate(int id, IDataNode node)
Levels = Enumerable
.Range(1, maxLevel + (IsCombatOrders ? 2 : 0))
- .ToImmutableDictionary(
+ .ToFrozenDictionary(
i => i,
i => (ISkillTemplateLevel)new SkillTemplateLevelCommon(i, common.Cache())
);
@@ -88,10 +88,10 @@ public SkillTemplate(int id, IDataNode node)
{
var level = node.ResolvePath("level");
- Levels = level?.Children.ToImmutableDictionary(
+ Levels = level?.Children.ToFrozenDictionary(
c => Convert.ToInt32(c.Name),
c => (ISkillTemplateLevel)new SkillTemplateLevel(Convert.ToInt32(c.Name), c.Cache())
- ) ?? ImmutableDictionary.Empty;
+ ) ?? FrozenDictionary.Empty;
MaxLevel = (short)(Levels?.Count ?? 0);
}
}
diff --git a/src/common/Edelstein.Common.Gameplay/Models/Characters/Skills/Templates/SkillTemplateLoader.cs b/src/common/Edelstein.Common.Gameplay/Models/Characters/Skills/Templates/SkillTemplateLoader.cs
index e7083a414..3d0f9b597 100644
--- a/src/common/Edelstein.Common.Gameplay/Models/Characters/Skills/Templates/SkillTemplateLoader.cs
+++ b/src/common/Edelstein.Common.Gameplay/Models/Characters/Skills/Templates/SkillTemplateLoader.cs
@@ -35,6 +35,7 @@ await _manager.Insert(new TemplateProviderLazy(
));
}));
+ _manager.Freeze();
return _manager.Count;
}
}
diff --git a/src/common/Edelstein.Common.Gameplay/Models/Characters/Stats/Modify/ModifyTemporaryStatContext.cs b/src/common/Edelstein.Common.Gameplay/Models/Characters/Stats/Modify/ModifyTemporaryStatContext.cs
index 741bacbf6..7da357ac4 100644
--- a/src/common/Edelstein.Common.Gameplay/Models/Characters/Stats/Modify/ModifyTemporaryStatContext.cs
+++ b/src/common/Edelstein.Common.Gameplay/Models/Characters/Stats/Modify/ModifyTemporaryStatContext.cs
@@ -1,4 +1,4 @@
-using System.Collections.Immutable;
+using System.Collections.Frozen;
using Edelstein.Common.Gameplay.Models.Characters.Stats.TwoState;
using Edelstein.Protocol.Gameplay.Models.Characters;
using Edelstein.Protocol.Gameplay.Models.Characters.Stats;
@@ -228,7 +228,7 @@ public void ResetByReason(int reason)
foreach (var type in _stats.Records
.Where(kv => kv.Value.Reason == reason)
.Select(kv => kv.Key)
- .ToImmutableList())
+ .ToFrozenSet())
ResetByType(type);
}
diff --git a/src/common/Edelstein.Common.Gameplay/Models/Inventories/InventoryManager.cs b/src/common/Edelstein.Common.Gameplay/Models/Inventories/InventoryManager.cs
index 950db6b27..068bc2ecb 100644
--- a/src/common/Edelstein.Common.Gameplay/Models/Inventories/InventoryManager.cs
+++ b/src/common/Edelstein.Common.Gameplay/Models/Inventories/InventoryManager.cs
@@ -51,7 +51,7 @@ public bool HasSlotFor(ICharacterInventories inventory, int templateID, short co
public bool HasSlotFor(ICharacterInventories inventory, ICollection> templates)
=> templates
.GroupBy(t => GetTypeByID(t.Item1))
- .All(g => HasSlotFor(inventory[g.Key], g.ToImmutableList()));
+ .All(g => HasSlotFor(inventory[g.Key], g.ToImmutableArray()));
public bool HasSlotFor(ICharacterInventories inventory, IItemTemplate template)
=> HasSlotFor(inventory[GetTypeByID(template.ID)], template.ID);
@@ -62,7 +62,7 @@ public bool HasSlotFor(ICharacterInventories inventory, IItemTemplate template,
public bool HasSlotFor(ICharacterInventories inventory, ICollection> templates)
=> templates
.GroupBy(t => GetTypeByID(t.Item1.ID))
- .All(g => HasSlotFor(inventory[g.Key], g.ToImmutableList()));
+ .All(g => HasSlotFor(inventory[g.Key], g.ToImmutableArray()));
public bool HasSlotFor(ICharacterInventories inventory, IItemSlot item)
=> HasSlotFor(inventory[GetTypeByID(item.ID)], item);
@@ -70,7 +70,7 @@ public bool HasSlotFor(ICharacterInventories inventory, IItemSlot item)
public bool HasSlotFor(ICharacterInventories inventory, ICollection items)
=> items
.GroupBy(t => GetTypeByID(t.ID))
- .All(g => HasSlotFor(inventory[g.Key], g.ToImmutableList()));
+ .All(g => HasSlotFor(inventory[g.Key], g.ToImmutableArray()));
public int CountItem(IItemInventory? inventory, int templateID)
=> inventory?.Items
@@ -110,7 +110,7 @@ public bool HasSlotFor(IItemInventory? inventory, int templateID, short count)
public bool HasSlotFor(IItemInventory? inventory, ICollection> templates)
=> HasSlotFor(inventory, templates
.Select(t => Tuple.Create(_templates.Retrieve(t.Item1).Result!, t.Item2))
- .ToImmutableList());
+ .ToImmutableArray());
public bool HasSlotFor(IItemInventory? inventory, IItemTemplate template)
=> HasSlotFor(inventory, template, 1);
@@ -143,7 +143,7 @@ public bool HasSlotFor(IItemInventory? inventory, ICollection i)
- .ToImmutableList());
+ .ToImmutableArray());
public bool HasSlotFor(IItemInventory? inventory, IItemSlot item)
=> HasSlotFor(inventory, ImmutableList.Create(item));
@@ -155,7 +155,7 @@ public bool HasSlotFor(IItemInventory? inventory, ICollection items)
var bundles = items
.OfType()
.Where(b => !ItemConstants.IsRechargeableItem(b.ID))
- .ToImmutableList();
+ .ToImmutableArray();
var bundlesMerged = new List();
foreach (var bundle in bundles)
diff --git a/src/common/Edelstein.Common.Gameplay/Models/Inventories/Items/Templates/ItemStringTemplateLoader.cs b/src/common/Edelstein.Common.Gameplay/Models/Inventories/Items/Templates/ItemStringTemplateLoader.cs
index f60be26d1..a81e231ae 100644
--- a/src/common/Edelstein.Common.Gameplay/Models/Inventories/Items/Templates/ItemStringTemplateLoader.cs
+++ b/src/common/Edelstein.Common.Gameplay/Models/Inventories/Items/Templates/ItemStringTemplateLoader.cs
@@ -64,6 +64,7 @@ await _manager.Insert(new TemplateProviderEager(
));
}) ?? Array.Empty());
+ _manager.Freeze();
return _manager.Count;
}
}
diff --git a/src/common/Edelstein.Common.Gameplay/Models/Inventories/Items/Templates/ItemTemplateLoader.cs b/src/common/Edelstein.Common.Gameplay/Models/Inventories/Items/Templates/ItemTemplateLoader.cs
index e347d78b7..e91eacd81 100644
--- a/src/common/Edelstein.Common.Gameplay/Models/Inventories/Items/Templates/ItemTemplateLoader.cs
+++ b/src/common/Edelstein.Common.Gameplay/Models/Inventories/Items/Templates/ItemTemplateLoader.cs
@@ -1,4 +1,4 @@
-using System.Collections.Immutable;
+using System.Collections.Frozen;
using Duey.Abstractions;
using Edelstein.Common.Utilities.Templates;
using Edelstein.Protocol.Gameplay.Models.Inventories.Templates;
@@ -62,7 +62,7 @@ await _manager.Insert(new TemplateProviderLazy(
() => new ItemEquipTemplate(id, node)
));
})
- .ToImmutableList();
+ .ToFrozenSet();
var loadBundle = nodesBundle
.Where(n => n != null)
.SelectMany(n => n!.Children)
@@ -77,7 +77,7 @@ await _manager.Insert(new TemplateProviderLazy(
() => new ItemBundleTemplate(id, node)
));
})
- .ToImmutableList();
+ .ToFrozenSet();
var loadPet = nodesPet?
.Select(async n =>
{
@@ -89,12 +89,13 @@ await _manager.Insert(new TemplateProviderLazy(
() => new ItemPetTemplate(id, node)
));
})
- .ToImmutableList();
+ .ToFrozenSet();
await Task.WhenAll(loadEquip);
await Task.WhenAll(loadBundle);
if (loadPet != null) await Task.WhenAll(loadPet);
+ _manager.Freeze();
return _manager.Count;
}
}
diff --git a/src/common/Edelstein.Common.Gameplay/Models/Inventories/Items/Templates/Options/ItemOptionTemplate.cs b/src/common/Edelstein.Common.Gameplay/Models/Inventories/Items/Templates/Options/ItemOptionTemplate.cs
index a7e0f462a..284ce13b9 100644
--- a/src/common/Edelstein.Common.Gameplay/Models/Inventories/Items/Templates/Options/ItemOptionTemplate.cs
+++ b/src/common/Edelstein.Common.Gameplay/Models/Inventories/Items/Templates/Options/ItemOptionTemplate.cs
@@ -1,4 +1,4 @@
-using System.Collections.Immutable;
+using System.Collections.Frozen;
using Duey.Abstractions;
using Edelstein.Protocol.Gameplay.Models.Inventories.Templates.Options;
@@ -19,10 +19,10 @@ public ItemOptionTemplate(int id, IDataNode node)
ReqLevel = info?.ResolveShort("reqLevel") ?? 0;
Levels = level?.Children
- .ToImmutableDictionary(
+ .ToFrozenDictionary(
l => Convert.ToInt32(l.Name),
l => (IItemOptionTemplateLevel)new ItemOptionTemplateLevel(Convert.ToInt32(l.Name), l.Cache())
- ) ?? ImmutableDictionary.Empty;
+ ) ?? FrozenDictionary.Empty;
}
public int ID { get; }
diff --git a/src/common/Edelstein.Common.Gameplay/Models/Inventories/Items/Templates/Options/ItemOptionTemplateLoader.cs b/src/common/Edelstein.Common.Gameplay/Models/Inventories/Items/Templates/Options/ItemOptionTemplateLoader.cs
index 9d7625b89..e4d352cc7 100644
--- a/src/common/Edelstein.Common.Gameplay/Models/Inventories/Items/Templates/Options/ItemOptionTemplateLoader.cs
+++ b/src/common/Edelstein.Common.Gameplay/Models/Inventories/Items/Templates/Options/ItemOptionTemplateLoader.cs
@@ -31,6 +31,7 @@ await _manager.Insert(new TemplateProviderEager(
));
}) ?? Array.Empty());
+ _manager.Freeze();
return _manager.Count;
}
}
diff --git a/src/common/Edelstein.Common.Gameplay/Models/Inventories/Items/Templates/Sets/ItemSetTemplate.cs b/src/common/Edelstein.Common.Gameplay/Models/Inventories/Items/Templates/Sets/ItemSetTemplate.cs
index 1bc5865db..90110920b 100644
--- a/src/common/Edelstein.Common.Gameplay/Models/Inventories/Items/Templates/Sets/ItemSetTemplate.cs
+++ b/src/common/Edelstein.Common.Gameplay/Models/Inventories/Items/Templates/Sets/ItemSetTemplate.cs
@@ -1,4 +1,4 @@
-using System.Collections.Immutable;
+using System.Collections.Frozen;
using Duey.Abstractions;
using Edelstein.Protocol.Gameplay.Models.Inventories.Templates.Sets;
@@ -14,12 +14,12 @@ public ItemSetTemplate(int id, IDataNode node)
Items = node.ResolvePath("ItemID")?.Children
.Select(c => c.ResolveInt() ?? 0)
- .ToImmutableList() ?? ImmutableList.Empty;
+ .ToFrozenSet() ?? FrozenSet.Empty;
Effects = node.ResolvePath("Effect")?.Children
- .ToImmutableDictionary(
+ .ToFrozenDictionary(
c => Convert.ToInt32(c.Name),
c => (IItemSetTemplateEffect)new ItemSetTemplateEffect(Convert.ToInt32(c.Name), c.Cache())
- ) ?? ImmutableDictionary.Empty;
+ ) ?? FrozenDictionary.Empty;
}
public int ID { get; }
diff --git a/src/common/Edelstein.Common.Gameplay/Models/Inventories/Items/Templates/Sets/ItemSetTemplateLoader.cs b/src/common/Edelstein.Common.Gameplay/Models/Inventories/Items/Templates/Sets/ItemSetTemplateLoader.cs
index 0a25c984c..44b9871ce 100644
--- a/src/common/Edelstein.Common.Gameplay/Models/Inventories/Items/Templates/Sets/ItemSetTemplateLoader.cs
+++ b/src/common/Edelstein.Common.Gameplay/Models/Inventories/Items/Templates/Sets/ItemSetTemplateLoader.cs
@@ -31,6 +31,7 @@ await _manager.Insert(new TemplateProviderEager(
));
}) ?? Array.Empty());
+ _manager.Freeze();
return _manager.Count;
}
}
diff --git a/src/common/Edelstein.Common.Gameplay/Models/Inventories/Modify/AbstractModifyInventory.cs b/src/common/Edelstein.Common.Gameplay/Models/Inventories/Modify/AbstractModifyInventory.cs
index 85bc50e7d..2ab2c2eb7 100644
--- a/src/common/Edelstein.Common.Gameplay/Models/Inventories/Modify/AbstractModifyInventory.cs
+++ b/src/common/Edelstein.Common.Gameplay/Models/Inventories/Modify/AbstractModifyInventory.cs
@@ -39,9 +39,9 @@ public abstract class AbstractModifyInventory : IModifyInventory
public void WriteTo(IPacketWriter writer)
{
- var operations = Operations.ToImmutableList();
+ var operations = Operations.ToImmutableArray();
- writer.WriteByte((byte)operations.Count);
+ writer.WriteByte((byte)operations.Length);
foreach (var operation in operations)
writer.Write(operation);
}
diff --git a/src/common/Edelstein.Common.Gameplay/Models/Inventories/Modify/ModifyInventoryContext.cs b/src/common/Edelstein.Common.Gameplay/Models/Inventories/Modify/ModifyInventoryContext.cs
index 0977ea9a3..11ac121fb 100644
--- a/src/common/Edelstein.Common.Gameplay/Models/Inventories/Modify/ModifyInventoryContext.cs
+++ b/src/common/Edelstein.Common.Gameplay/Models/Inventories/Modify/ModifyInventoryContext.cs
@@ -94,7 +94,7 @@ public override void Remove(int templateID, short count)
var match = _inventory.Items
.Where(kv => kv.Key > 0)
.Where(kv => kv.Value.ID == templateID)
- .ToImmutableList();
+ .ToImmutableArray();
foreach (var kv in match)
{
@@ -133,7 +133,7 @@ public override void RemoveAll(int templateID)
{
var match = _inventory.Items
.Where(kv => kv.Value.ID == templateID)
- .ToImmutableList();
+ .ToImmutableArray();
foreach (var kv in match)
RemoveSlot(kv.Key);
@@ -147,11 +147,13 @@ public override void Gather()
var inventoryCopy = _inventory.Items
.Where(kv => kv.Key > 0)
.OrderBy(kv => kv.Key)
- .ToList();
+ .ToImmutableArray();
short position = 1;
- inventoryCopy.ForEach(kv => RemoveSlot(kv.Key));
- inventoryCopy.ForEach(kv => SetSlot(position++, kv.Value));
+ foreach (var kv in inventoryCopy)
+ RemoveSlot(kv.Key);
+ foreach (var kv in inventoryCopy)
+ SetSlot(position++, kv.Value);
}
public override void Sort()
@@ -160,15 +162,17 @@ public override void Sort()
.Where(kv => kv.Key > 0)
.OrderBy(kv => kv.Value.ID)
.ThenByDescending(kv => kv.Value is IItemSlotBundle bundle ? bundle.Number : 1)
- .ToList();
+ .ToImmutableArray();
- inventoryCopy.ForEach(kv => RemoveSlot(kv.Key));
- inventoryCopy.ForEach(kv => Add(kv.Value));
+ foreach (var kv in inventoryCopy)
+ RemoveSlot(kv.Key);
+ foreach (var kv in inventoryCopy)
+ Add(kv.Value);
}
public override void Clear() =>
_inventory.Items
.Where(kv => kv.Key > 0)
- .ToList()
+ .ToImmutableList()
.ForEach(kv => RemoveSlot(kv.Key));
public override short Add(int templateID) =>
diff --git a/src/common/Edelstein.Common.Gameplay/Models/Inventories/Modify/ModifyInventoryGroupContext.cs b/src/common/Edelstein.Common.Gameplay/Models/Inventories/Modify/ModifyInventoryGroupContext.cs
index 2d853f2f2..b07ed3842 100644
--- a/src/common/Edelstein.Common.Gameplay/Models/Inventories/Modify/ModifyInventoryGroupContext.cs
+++ b/src/common/Edelstein.Common.Gameplay/Models/Inventories/Modify/ModifyInventoryGroupContext.cs
@@ -1,4 +1,5 @@
-using Edelstein.Protocol.Gameplay.Models.Characters;
+using System.Collections.Immutable;
+using Edelstein.Protocol.Gameplay.Models.Characters;
using Edelstein.Protocol.Gameplay.Models.Inventories;
using Edelstein.Protocol.Gameplay.Models.Inventories.Items;
using Edelstein.Protocol.Gameplay.Models.Inventories.Modify;
@@ -9,7 +10,7 @@ namespace Edelstein.Common.Gameplay.Models.Inventories.Modify;
public class ModifyInventoryGroupContext : AbstractModifyInventory, IModifyInventoryGroupContext
{
- private readonly Dictionary _contexts;
+ private readonly IDictionary _contexts;
public ModifyInventoryGroupContext(
ICharacterInventories inventories,
@@ -31,7 +32,7 @@ private ModifyInventoryGroupContext(
IDictionary inventories,
ITemplateManager manager
) =>
- _contexts = inventories.ToDictionary(
+ _contexts = inventories.ToImmutableDictionary(
kv => kv.Key,
kv => new ModifyInventoryContext(kv.Key, kv.Value, manager)
);
@@ -40,7 +41,9 @@ ITemplateManager manager
_contexts.Values.SelectMany(c => c.Operations);
public IModifyInventoryContext? this[ItemInventoryType type] =>
- _contexts.GetValueOrDefault(type);
+ _contexts.TryGetValue(type, out var context)
+ ? context
+ : null;
public override short Add(IItemSlot item) =>
this[GetTypeByID(item.ID)]?.Add(item) ?? -1;
diff --git a/src/common/Edelstein.Common.Gameplay/Social/PartyExtensions.cs b/src/common/Edelstein.Common.Gameplay/Social/PartyExtensions.cs
index ec3f5c9b8..cada26faa 100644
--- a/src/common/Edelstein.Common.Gameplay/Social/PartyExtensions.cs
+++ b/src/common/Edelstein.Common.Gameplay/Social/PartyExtensions.cs
@@ -1,4 +1,5 @@
-using Edelstein.Protocol.Services.Social;
+using System.Collections.Immutable;
+using Edelstein.Protocol.Services.Social;
using Edelstein.Protocol.Utilities.Packets;
namespace Edelstein.Common.Gameplay.Social;
@@ -7,7 +8,7 @@ public static class PartyExtensions
{
public static void WritePartyInfo(this IPacketWriter writer, IPartyMembership party)
{
- var members = party.Members.Values.ToList();
+ var members = party.Members.Values.ToImmutableList();
for (var i = 0; i < 6; i++)
writer.WriteInt(members.ElementAtOrDefault(i)?.CharacterID ?? 0);
diff --git a/src/common/Edelstein.Common.Gameplay/packages.lock.json b/src/common/Edelstein.Common.Gameplay/packages.lock.json
new file mode 100644
index 000000000..57a34f50c
--- /dev/null
+++ b/src/common/Edelstein.Common.Gameplay/packages.lock.json
@@ -0,0 +1,81 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {
+ "Duey.Abstractions": {
+ "type": "Direct",
+ "requested": "[2.0.0, )",
+ "resolved": "2.0.0",
+ "contentHash": "KP3l7yZoT1uMk8B+rAjZ3VL+2/XfXZxKTx31wDz7JNfcPnUmllJpgoqnDYQcVEJ5e4WLWToBQHZ3OIgOm6T/kg=="
+ },
+ "MathParser.org-mXparser": {
+ "type": "Direct",
+ "requested": "[4.4.3, )",
+ "resolved": "4.4.3",
+ "contentHash": "QhHsP4nzyjC3G2kJ+dbT3NFuE0M0rKfa0wQjCcn5UyK0VnXN8OeYMy9KEYGzNKI9ealcwOQJd/4Xcq4PE+Vl7g=="
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Direct",
+ "requested": "[7.0.0, )",
+ "resolved": "7.0.0",
+ "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw=="
+ },
+ "Microsoft.IO.RecyclableMemoryStream": {
+ "type": "Transitive",
+ "resolved": "2.3.2",
+ "contentHash": "Oh1qXXFdJFcHozvb4H6XYLf2W0meZFuG0A+TfapFPj9z5fd4vxiARGEhAaLj/6XWQaMYIv4SH/9Q6H78Hw0E2Q=="
+ },
+ "RBush": {
+ "type": "Transitive",
+ "resolved": "3.2.0",
+ "contentHash": "ijGh9N0zZ7JfXk3oQkWCwK8SwSSByexbyh/MjbCjNxOft9eG5ZqKC1vdgiYq78h4IZRFmN4s3JZ/b10Jipud5w=="
+ },
+ "edelstein.common.constants": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )"
+ }
+ },
+ "edelstein.common.utilities": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )",
+ "Microsoft.Extensions.Logging.Abstractions": "[7.0.0, )",
+ "Microsoft.IO.RecyclableMemoryStream": "[2.3.2, )",
+ "RBush": "[3.2.0, )"
+ }
+ },
+ "edelstein.protocol.gameplay": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Protocol.Network": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Social": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.network": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.services.server": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.services.social": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.utilities": {
+ "type": "Project"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/common/Edelstein.Common.Network.DotNetty/Handlers/NettyTransportAcceptorHandler.cs b/src/common/Edelstein.Common.Network.DotNetty/Handlers/NettyTransportAcceptorHandler.cs
index cdee10b83..8573c5c9b 100644
--- a/src/common/Edelstein.Common.Network.DotNetty/Handlers/NettyTransportAcceptorHandler.cs
+++ b/src/common/Edelstein.Common.Network.DotNetty/Handlers/NettyTransportAcceptorHandler.cs
@@ -1,5 +1,4 @@
-using System.Buffers;
-using DotNetty.Transport.Channels;
+using DotNetty.Transport.Channels;
using Edelstein.Common.Utilities.Packets;
using Edelstein.Protocol.Network;
using Edelstein.Protocol.Network.Transports;
diff --git a/src/common/Edelstein.Common.Network.DotNetty/Handlers/NettyTransportConnectorHandler.cs b/src/common/Edelstein.Common.Network.DotNetty/Handlers/NettyTransportConnectorHandler.cs
index b30954382..221df50cb 100644
--- a/src/common/Edelstein.Common.Network.DotNetty/Handlers/NettyTransportConnectorHandler.cs
+++ b/src/common/Edelstein.Common.Network.DotNetty/Handlers/NettyTransportConnectorHandler.cs
@@ -1,5 +1,4 @@
-using System.Buffers;
-using DotNetty.Transport.Channels;
+using DotNetty.Transport.Channels;
using Edelstein.Common.Utilities.Packets;
using Edelstein.Protocol.Network;
using Edelstein.Protocol.Network.Transports;
diff --git a/src/common/Edelstein.Common.Network.DotNetty/packages.lock.json b/src/common/Edelstein.Common.Network.DotNetty/packages.lock.json
new file mode 100644
index 000000000..90bd110ae
--- /dev/null
+++ b/src/common/Edelstein.Common.Network.DotNetty/packages.lock.json
@@ -0,0 +1,145 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {
+ "DotNetty.Buffers": {
+ "type": "Direct",
+ "requested": "[0.7.5, )",
+ "resolved": "0.7.5",
+ "contentHash": "ri4udTfNS856dAZ09VkQ9k6gxmYwFuZh930TAMa71smowEAvhGQEDpRY4mLgA5ADhbKhLYpmO/1vfDXEchDugQ==",
+ "dependencies": {
+ "DotNetty.Common": "0.7.5",
+ "System.Runtime.CompilerServices.Unsafe": "5.0.0"
+ }
+ },
+ "DotNetty.Codecs": {
+ "type": "Direct",
+ "requested": "[0.7.5, )",
+ "resolved": "0.7.5",
+ "contentHash": "6FqSnZ2gmc5RalbxVNWeEm6FqZHORdskyDUKGdgm4gDr86D8w8TLv4L1MIS7Mshsq3figHl0TP9yFyOXe6SHdQ==",
+ "dependencies": {
+ "DotNetty.Buffers": "0.7.5",
+ "DotNetty.Common": "0.7.5",
+ "DotNetty.Transport": "0.7.5",
+ "System.Collections.Immutable": "1.5.0"
+ }
+ },
+ "DotNetty.Common": {
+ "type": "Direct",
+ "requested": "[0.7.5, )",
+ "resolved": "0.7.5",
+ "contentHash": "U9dLNbZhtWhSsWIwLVhIwKC9Ku3+Q/CrY/U5Lahb8DxoEt6uo3GIPPGY3NT1COllfhT422bLALdGlesFOcwXEg==",
+ "dependencies": {
+ "Microsoft.Extensions.Logging": "5.0.0",
+ "System.Runtime.CompilerServices.Unsafe": "5.0.0"
+ }
+ },
+ "DotNetty.Handlers": {
+ "type": "Direct",
+ "requested": "[0.7.5, )",
+ "resolved": "0.7.5",
+ "contentHash": "1iXurgUEaEqRW33CvPCEndrHoTB6Ql4PBNpMkVixJ6MxSS9kMLPi+nVpcnEQCPyRBkf/9znk+YO02R0bDWA03g==",
+ "dependencies": {
+ "DotNetty.Buffers": "0.7.5",
+ "DotNetty.Codecs": "0.7.5",
+ "DotNetty.Common": "0.7.5",
+ "DotNetty.Transport": "0.7.5"
+ }
+ },
+ "DotNetty.Transport": {
+ "type": "Direct",
+ "requested": "[0.7.5, )",
+ "resolved": "0.7.5",
+ "contentHash": "Ha1ZDqUOEPgk5/IWpAcP220cUtcekLankgkq/KhkrmvVANNbTxwTvjBS50m2/nAK623HjT+1wcLZBfFzBg3TyQ==",
+ "dependencies": {
+ "DotNetty.Buffers": "0.7.5",
+ "DotNetty.Common": "0.7.5"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "Rc2kb/p3Ze6cP6rhFC3PJRdWGbLvSHZc0ev7YlyeU6FmHciDMLrhoVoTUEzKPhN5ZjFgKF1Cf5fOz8mCMIkvpA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "ORj7Zh81gC69TyvmcUm9tSzytcy8AVousi+IVRAI8nLieQjOFryRusSFh7+aLk16FN9pQNqJAiMd7BTKINK0kA=="
+ },
+ "Microsoft.Extensions.Logging": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "MgOwK6tPzB6YNH21wssJcw/2MKwee8b2gI7SllYfn6rvTpIrVvVS5HAjSU2vqSku1fwqRvWP0MdIi14qjd93Aw==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection": "5.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "5.0.0",
+ "Microsoft.Extensions.Options": "5.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw=="
+ },
+ "Microsoft.Extensions.Options": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "CBvR92TCJ5uBIdd9/HzDSrxYak+0W/3+yxrNg8Qm6Bmrkh5L+nu6m3WeazQehcZ5q1/6dDA7J5YdQjim0165zg==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
+ "Microsoft.Extensions.Primitives": "5.0.0"
+ }
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "cI/VWn9G1fghXrNDagX9nYaaB/nokkZn0HYAawGaELQrl8InSezfe9OnfPZLcJq3esXxygh3hkq2c3qoV3SDyQ=="
+ },
+ "Microsoft.IO.RecyclableMemoryStream": {
+ "type": "Transitive",
+ "resolved": "2.3.2",
+ "contentHash": "Oh1qXXFdJFcHozvb4H6XYLf2W0meZFuG0A+TfapFPj9z5fd4vxiARGEhAaLj/6XWQaMYIv4SH/9Q6H78Hw0E2Q=="
+ },
+ "RBush": {
+ "type": "Transitive",
+ "resolved": "3.2.0",
+ "contentHash": "ijGh9N0zZ7JfXk3oQkWCwK8SwSSByexbyh/MjbCjNxOft9eG5ZqKC1vdgiYq78h4IZRFmN4s3JZ/b10Jipud5w=="
+ },
+ "System.Collections.Immutable": {
+ "type": "Transitive",
+ "resolved": "1.5.0",
+ "contentHash": "EXKiDFsChZW0RjrZ4FYHu9aW6+P4MCgEDCklsVseRfhoO0F+dXeMSsMRAlVXIo06kGJ/zv+2w1a2uc2+kxxSaQ=="
+ },
+ "System.Runtime.CompilerServices.Unsafe": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "ZD9TMpsmYJLrxbbmdvhwt9YEgG5WntEnZ/d1eH8JBX9LBp+Ju8BSBhUGbZMNVHHomWo2KVImJhTDl2hIgw/6MA=="
+ },
+ "edelstein.common.crypto": {
+ "type": "Project"
+ },
+ "edelstein.common.utilities": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )",
+ "Microsoft.Extensions.Logging.Abstractions": "[7.0.0, )",
+ "Microsoft.IO.RecyclableMemoryStream": "[2.3.2, )",
+ "RBush": "[3.2.0, )"
+ }
+ },
+ "edelstein.protocol.network": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.utilities": {
+ "type": "Project"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/common/Edelstein.Common.Plugin/Edelstein.Common.Plugin.csproj b/src/common/Edelstein.Common.Plugin/Edelstein.Common.Plugin.csproj
index 9fbaae4fd..990e1f04f 100644
--- a/src/common/Edelstein.Common.Plugin/Edelstein.Common.Plugin.csproj
+++ b/src/common/Edelstein.Common.Plugin/Edelstein.Common.Plugin.csproj
@@ -9,7 +9,7 @@
-
+
diff --git a/src/common/Edelstein.Common.Plugin/packages.lock.json b/src/common/Edelstein.Common.Plugin/packages.lock.json
new file mode 100644
index 000000000..48e05bb1e
--- /dev/null
+++ b/src/common/Edelstein.Common.Plugin/packages.lock.json
@@ -0,0 +1,162 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {
+ "McMaster.NETCore.Plugins": {
+ "type": "Direct",
+ "requested": "[1.4.0, )",
+ "resolved": "1.4.0",
+ "contentHash": "UKw5Z2/QHhkR7kiAJmqdCwVDMQV0lwsfj10+FG676r8DsJWIpxtachtEjE0qBs9WoK5GUQIqxgyFeYUSwuPszg==",
+ "dependencies": {
+ "Microsoft.DotNet.PlatformAbstractions": "3.1.6",
+ "Microsoft.Extensions.DependencyModel": "5.0.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration": {
+ "type": "Direct",
+ "requested": "[8.0.0-rc.1.23419.4, )",
+ "resolved": "8.0.0-rc.1.23419.4",
+ "contentHash": "NoIBM0qnZrl5o3em/5Qx4T3HcDruKdDVvm4PsG/wiuWawtwHRqaqkFjPS66lPnu1Kgzv+D1JJd+r4C5wPxXErw==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "8.0.0-rc.1.23419.4",
+ "Microsoft.Extensions.Primitives": "8.0.0-rc.1.23419.4"
+ }
+ },
+ "Microsoft.Extensions.Configuration.Json": {
+ "type": "Direct",
+ "requested": "[7.0.0, )",
+ "resolved": "7.0.0",
+ "contentHash": "LDNYe3uw76W35Jci+be4LDf2lkQZe0A7EEYQVChFbc509CpZ4Iupod8li4PUXPBhEUOFI/rlQNf5xkzJRQGvtA==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "7.0.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Configuration.FileExtensions": "7.0.0",
+ "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
+ "System.Text.Json": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Hosting.Abstractions": {
+ "type": "Direct",
+ "requested": "[7.0.0, )",
+ "resolved": "7.0.0",
+ "contentHash": "43n9Je09z0p/7ViPxfRqs5BUItRLNVh5b6JH40F2Agkh2NBsY/jpNYTtbCcxrHCsA3oRmbR6RJBzUutB4VZvNQ==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0"
+ }
+ },
+ "Microsoft.DotNet.PlatformAbstractions": {
+ "type": "Transitive",
+ "resolved": "3.1.6",
+ "contentHash": "jek4XYaQ/PGUwDKKhwR8K47Uh1189PFzMeLqO83mXrXQVIpARZCcfuDedH50YDTepBkfijCZN5U/vZi++erxtg=="
+ },
+ "Microsoft.Extensions.Configuration.Abstractions": {
+ "type": "Transitive",
+ "resolved": "8.0.0-rc.1.23419.4",
+ "contentHash": "tY5wKwXNZ6cBeyHxvxyLy57TxUaA6H82/vW8vTTmikG9bkfRzfyS0EEDloiPzL4ln8P+3aZxeAestjPC6942Kg==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "8.0.0-rc.1.23419.4"
+ }
+ },
+ "Microsoft.Extensions.Configuration.FileExtensions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "xk2lRJ1RDuqe57BmgvRPyCt6zyePKUmvT6iuXqiHR+/OIIgWVR8Ff5k2p6DwmqY8a17hx/OnrekEhziEIeQP6Q==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "7.0.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
+ "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
+ "Microsoft.Extensions.FileProviders.Physical": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "h3j/QfmFN4S0w4C2A6X7arXij/M/OVw3uQHSOFxnND4DyAzO1F9eMX7Eti7lU/OkSthEE0WzRsfT/Dmx86jzCw=="
+ },
+ "Microsoft.Extensions.DependencyModel": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "umBECCoMC+sOUgm083yFr8SxTobUOcPFH4AXigdO2xJiszCHAnmeDl4qPphJt+oaJ/XIfV1wOjIts2nRnki61Q=="
+ },
+ "Microsoft.Extensions.FileProviders.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "NyawiW9ZT/liQb34k9YqBSNPLuuPkrjMgQZ24Y/xXX1RoiBkLUdPMaQTmxhZ5TYu8ZKZ9qayzil75JX95vGQUg==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.FileProviders.Physical": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "K8D2MTR+EtzkbZ8z80LrG7Ur64R7ZZdRLt1J5cgpc/pUWl0C6IkAUapPuK28oionHueCPELUqq0oYEvZfalNdg==",
+ "dependencies": {
+ "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
+ "Microsoft.Extensions.FileSystemGlobbing": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.FileSystemGlobbing": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "2jONjKHiF+E92ynz2ZFcr9OvxIw+rTGMPEH+UZGeHTEComVav93jQUWGkso8yWwVBcEJGcNcZAaqY01FFJcj7w=="
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw=="
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "8.0.0-rc.1.23419.4",
+ "contentHash": "zyoB4zblhvpylS9VOmKyBuGH+RjKDsfi0cTB2KRPPDD6tFinpP+vGr3dictaNYLhGUg6jaBmq+2H/WZMCnvGDQ=="
+ },
+ "Microsoft.IO.RecyclableMemoryStream": {
+ "type": "Transitive",
+ "resolved": "2.3.2",
+ "contentHash": "Oh1qXXFdJFcHozvb4H6XYLf2W0meZFuG0A+TfapFPj9z5fd4vxiARGEhAaLj/6XWQaMYIv4SH/9Q6H78Hw0E2Q=="
+ },
+ "RBush": {
+ "type": "Transitive",
+ "resolved": "3.2.0",
+ "contentHash": "ijGh9N0zZ7JfXk3oQkWCwK8SwSSByexbyh/MjbCjNxOft9eG5ZqKC1vdgiYq78h4IZRFmN4s3JZ/b10Jipud5w=="
+ },
+ "System.Text.Encodings.Web": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "OP6umVGxc0Z0MvZQBVigj4/U31Pw72ITihDWP9WiWDm+q5aoe0GaJivsfYGq53o6dxH7DcXWiCTl7+0o2CGdmg=="
+ },
+ "System.Text.Json": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "DaGSsVqKsn/ia6RG8frjwmJonfos0srquhw09TlT8KRw5I43E+4gs+/bZj4K0vShJ5H9imCuXupb4RmS+dBy3w==",
+ "dependencies": {
+ "System.Text.Encodings.Web": "7.0.0"
+ }
+ },
+ "edelstein.common.utilities": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )",
+ "Microsoft.Extensions.Logging.Abstractions": "[7.0.0, )",
+ "Microsoft.IO.RecyclableMemoryStream": "[2.3.2, )",
+ "RBush": "[3.2.0, )"
+ }
+ },
+ "edelstein.protocol.plugin": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )",
+ "Microsoft.Extensions.Configuration.Abstractions": "[8.0.0-rc.1.23419.4, )",
+ "Microsoft.Extensions.Logging.Abstractions": "[7.0.0, )"
+ }
+ },
+ "edelstein.protocol.utilities": {
+ "type": "Project"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/common/Edelstein.Common.Scripting.Lua/packages.lock.json b/src/common/Edelstein.Common.Scripting.Lua/packages.lock.json
new file mode 100644
index 000000000..a16876980
--- /dev/null
+++ b/src/common/Edelstein.Common.Scripting.Lua/packages.lock.json
@@ -0,0 +1,16 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {
+ "MoonSharp": {
+ "type": "Direct",
+ "requested": "[2.0.0, )",
+ "resolved": "2.0.0",
+ "contentHash": "uiAcRh7d+53k3xW9pFDJfAFVw4RnjHVCJG05M3oPAVEVwPtFavhg1H/IpC6So4X1j9kJlzuLlA3OghhPcIvc5A=="
+ },
+ "edelstein.protocol.scripting": {
+ "type": "Project"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/common/Edelstein.Common.Services.Auth/Edelstein.Common.Services.Auth.csproj b/src/common/Edelstein.Common.Services.Auth/Edelstein.Common.Services.Auth.csproj
index d51536aca..c935a0d60 100644
--- a/src/common/Edelstein.Common.Services.Auth/Edelstein.Common.Services.Auth.csproj
+++ b/src/common/Edelstein.Common.Services.Auth/Edelstein.Common.Services.Auth.csproj
@@ -14,7 +14,7 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
diff --git a/src/common/Edelstein.Common.Services.Auth/packages.lock.json b/src/common/Edelstein.Common.Services.Auth/packages.lock.json
new file mode 100644
index 000000000..f79de56f9
--- /dev/null
+++ b/src/common/Edelstein.Common.Services.Auth/packages.lock.json
@@ -0,0 +1,253 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {
+ "BCrypt.Net-Next": {
+ "type": "Direct",
+ "requested": "[4.0.3, )",
+ "resolved": "4.0.3",
+ "contentHash": "W+U9WvmZQgi5cX6FS5GDtDoPzUCV4LkBLkywq/kRZhuDwcbavOzcDAr3LXJFqHUi952Yj3LEYoWW0jbEUQChsA=="
+ },
+ "Microsoft.EntityFrameworkCore": {
+ "type": "Direct",
+ "requested": "[7.0.10, )",
+ "resolved": "7.0.10",
+ "contentHash": "24NbXJqJ/x8u88/agqeb1pLdAF9+9StDLA36+P/3g5xsJPOaB2GxXn7epR8dWpZTgHsNZ7cvBMxBgfFmF+xZlg==",
+ "dependencies": {
+ "Microsoft.EntityFrameworkCore.Abstractions": "7.0.10",
+ "Microsoft.EntityFrameworkCore.Analyzers": "7.0.10",
+ "Microsoft.Extensions.Caching.Memory": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection": "7.0.0",
+ "Microsoft.Extensions.Logging": "7.0.0"
+ }
+ },
+ "Microsoft.EntityFrameworkCore.Design": {
+ "type": "Direct",
+ "requested": "[7.0.10, )",
+ "resolved": "7.0.10",
+ "contentHash": "ZDdJ2aAE529A1zd3sEvszADRCiJmlOKxc0WlhS+NIhSs68NESAApPZL4uHXrIk0vb7SBRnNPYPfOhASWf9dahg==",
+ "dependencies": {
+ "Humanizer.Core": "2.14.1",
+ "Microsoft.EntityFrameworkCore.Relational": "7.0.10",
+ "Microsoft.Extensions.DependencyModel": "7.0.0",
+ "Mono.TextTemplating": "2.2.1"
+ }
+ },
+ "Microsoft.EntityFrameworkCore.Relational": {
+ "type": "Direct",
+ "requested": "[7.0.10, )",
+ "resolved": "7.0.10",
+ "contentHash": "PO2QB2Du+pW210UHmepYR12bk+ZOZJCiNkA7zEAxWs+vzvrRAMsUPlDlfgX2LXE7NBsnb0uvZp7a1/qqKf3fRQ==",
+ "dependencies": {
+ "Microsoft.EntityFrameworkCore": "7.0.10",
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration": {
+ "type": "Direct",
+ "requested": "[8.0.0-rc.1.23419.4, )",
+ "resolved": "8.0.0-rc.1.23419.4",
+ "contentHash": "NoIBM0qnZrl5o3em/5Qx4T3HcDruKdDVvm4PsG/wiuWawtwHRqaqkFjPS66lPnu1Kgzv+D1JJd+r4C5wPxXErw==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "8.0.0-rc.1.23419.4",
+ "Microsoft.Extensions.Primitives": "8.0.0-rc.1.23419.4"
+ }
+ },
+ "Microsoft.Extensions.Configuration.Json": {
+ "type": "Direct",
+ "requested": "[7.0.0, )",
+ "resolved": "7.0.0",
+ "contentHash": "LDNYe3uw76W35Jci+be4LDf2lkQZe0A7EEYQVChFbc509CpZ4Iupod8li4PUXPBhEUOFI/rlQNf5xkzJRQGvtA==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "7.0.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Configuration.FileExtensions": "7.0.0",
+ "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
+ "System.Text.Json": "7.0.0"
+ }
+ },
+ "Npgsql.EntityFrameworkCore.PostgreSQL": {
+ "type": "Direct",
+ "requested": "[7.0.4, )",
+ "resolved": "7.0.4",
+ "contentHash": "ZYMtyG6pmLtUsFAx0/XaIlVkJM+1gArWEKD55cLLxiVlGScAphjiGj+G7Gk16yg5lhhdWx+bgXWpIUISXuS33g==",
+ "dependencies": {
+ "Microsoft.EntityFrameworkCore": "[7.0.5, 8.0.0)",
+ "Microsoft.EntityFrameworkCore.Abstractions": "[7.0.5, 8.0.0)",
+ "Microsoft.EntityFrameworkCore.Relational": "[7.0.5, 8.0.0)",
+ "Npgsql": "7.0.4"
+ }
+ },
+ "Humanizer.Core": {
+ "type": "Transitive",
+ "resolved": "2.14.1",
+ "contentHash": "lQKvtaTDOXnoVJ20ibTuSIOf2i0uO0MPbDhd1jm238I+U/2ZnRENj0cktKZhtchBMtCUSRQ5v4xBCUbKNmyVMw=="
+ },
+ "Microsoft.EntityFrameworkCore.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.10",
+ "contentHash": "Z/lDWmGLiT9uNQrp6UXTKZxofSmAKQCiKOz98FDscTbfAGgBXE3DTTqRsPMc8HFIVVSNANSiFRz3JyLg07HN9Q=="
+ },
+ "Microsoft.EntityFrameworkCore.Analyzers": {
+ "type": "Transitive",
+ "resolved": "7.0.10",
+ "contentHash": "+8NVNpyJTzW6nNh/7RGfldf+mbeboVcn+X1tD8kMBCEJswuy3RqM/qecEEfOfTcWLliZExPMaHwOwtHO6RMpdA=="
+ },
+ "Microsoft.Extensions.Caching.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "IeimUd0TNbhB4ded3AbgBLQv2SnsiVugDyGV1MvspQFVlA07nDC7Zul7kcwH5jWN3JiTcp/ySE83AIJo8yfKjg==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Caching.Memory": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "xpidBs2KCE2gw1JrD0quHE72kvCaI3xFql5/Peb2GRtUuZX+dYPoK/NTdVMiM67Svym0M0Df9A3xyU0FbMQhHw==",
+ "dependencies": {
+ "Microsoft.Extensions.Caching.Abstractions": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Options": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration.Abstractions": {
+ "type": "Transitive",
+ "resolved": "8.0.0-rc.1.23419.4",
+ "contentHash": "tY5wKwXNZ6cBeyHxvxyLy57TxUaA6H82/vW8vTTmikG9bkfRzfyS0EEDloiPzL4ln8P+3aZxeAestjPC6942Kg==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "8.0.0-rc.1.23419.4"
+ }
+ },
+ "Microsoft.Extensions.Configuration.FileExtensions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "xk2lRJ1RDuqe57BmgvRPyCt6zyePKUmvT6iuXqiHR+/OIIgWVR8Ff5k2p6DwmqY8a17hx/OnrekEhziEIeQP6Q==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "7.0.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
+ "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
+ "Microsoft.Extensions.FileProviders.Physical": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "elNeOmkeX3eDVG6pYVeV82p29hr+UKDaBhrZyWvWLw/EVZSYEkZlQdkp0V39k/Xehs2Qa0mvoCvkVj3eQxNQ1Q==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "h3j/QfmFN4S0w4C2A6X7arXij/M/OVw3uQHSOFxnND4DyAzO1F9eMX7Eti7lU/OkSthEE0WzRsfT/Dmx86jzCw=="
+ },
+ "Microsoft.Extensions.DependencyModel": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "oONNYd71J3LzkWc4fUHl3SvMfiQMYUCo/mDHDEu76hYYxdhdrPYv6fvGv9nnKVyhE9P0h20AU8RZB5OOWQcAXg==",
+ "dependencies": {
+ "System.Text.Encodings.Web": "7.0.0",
+ "System.Text.Json": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.FileProviders.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "NyawiW9ZT/liQb34k9YqBSNPLuuPkrjMgQZ24Y/xXX1RoiBkLUdPMaQTmxhZ5TYu8ZKZ9qayzil75JX95vGQUg==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.FileProviders.Physical": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "K8D2MTR+EtzkbZ8z80LrG7Ur64R7ZZdRLt1J5cgpc/pUWl0C6IkAUapPuK28oionHueCPELUqq0oYEvZfalNdg==",
+ "dependencies": {
+ "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
+ "Microsoft.Extensions.FileSystemGlobbing": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.FileSystemGlobbing": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "2jONjKHiF+E92ynz2ZFcr9OvxIw+rTGMPEH+UZGeHTEComVav93jQUWGkso8yWwVBcEJGcNcZAaqY01FFJcj7w=="
+ },
+ "Microsoft.Extensions.Logging": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "Nw2muoNrOG5U5qa2ZekXwudUn2BJcD41e65zwmDHb1fQegTX66UokLWZkJRpqSSHXDOWZ5V0iqhbxOEky91atA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Options": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw=="
+ },
+ "Microsoft.Extensions.Options": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "lP1yBnTTU42cKpMozuafbvNtQ7QcBjr/CcK3bYOGEMH55Fjt+iecXjT6chR7vbgCMqy3PG3aNQSZgo/EuY/9qQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "8.0.0-rc.1.23419.4",
+ "contentHash": "zyoB4zblhvpylS9VOmKyBuGH+RjKDsfi0cTB2KRPPDD6tFinpP+vGr3dictaNYLhGUg6jaBmq+2H/WZMCnvGDQ=="
+ },
+ "Mono.TextTemplating": {
+ "type": "Transitive",
+ "resolved": "2.2.1",
+ "contentHash": "KZYeKBET/2Z0gY1WlTAK7+RHTl7GSbtvTLDXEZZojUdAPqpQNDL6tHv7VUpqfX5VEOh+uRGKaZXkuD253nEOBQ==",
+ "dependencies": {
+ "System.CodeDom": "4.4.0"
+ }
+ },
+ "Npgsql": {
+ "type": "Transitive",
+ "resolved": "7.0.4",
+ "contentHash": "7UVPYy2RP0ci04PED1tc9ZCaTw/DfSdSkLiGEFCAvwMwsgA/bAluj1liNzP1IpN0MFofnOF0cm1zJfmbEuCehg==",
+ "dependencies": {
+ "Microsoft.Extensions.Logging.Abstractions": "6.0.0"
+ }
+ },
+ "System.CodeDom": {
+ "type": "Transitive",
+ "resolved": "4.4.0",
+ "contentHash": "2sCCb7doXEwtYAbqzbF/8UAeDRMNmPaQbU2q50Psg1J9KzumyVVCgKQY8s53WIPTufNT0DpSe9QRvVjOzfDWBA=="
+ },
+ "System.Text.Encodings.Web": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "OP6umVGxc0Z0MvZQBVigj4/U31Pw72ITihDWP9WiWDm+q5aoe0GaJivsfYGq53o6dxH7DcXWiCTl7+0o2CGdmg=="
+ },
+ "System.Text.Json": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "DaGSsVqKsn/ia6RG8frjwmJonfos0srquhw09TlT8KRw5I43E+4gs+/bZj4K0vShJ5H9imCuXupb4RmS+dBy3w==",
+ "dependencies": {
+ "System.Text.Encodings.Web": "7.0.0"
+ }
+ },
+ "edelstein.protocol.services.auth": {
+ "type": "Project"
+ },
+ "edelstein.protocol.utilities": {
+ "type": "Project"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/common/Edelstein.Common.Services.Server/Edelstein.Common.Services.Server.csproj b/src/common/Edelstein.Common.Services.Server/Edelstein.Common.Services.Server.csproj
index c63149c7a..97955f6f5 100644
--- a/src/common/Edelstein.Common.Services.Server/Edelstein.Common.Services.Server.csproj
+++ b/src/common/Edelstein.Common.Services.Server/Edelstein.Common.Services.Server.csproj
@@ -20,7 +20,7 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
diff --git a/src/common/Edelstein.Common.Services.Server/ServerService.cs b/src/common/Edelstein.Common.Services.Server/ServerService.cs
index 340cd769e..f4e997efb 100644
--- a/src/common/Edelstein.Common.Services.Server/ServerService.cs
+++ b/src/common/Edelstein.Common.Services.Server/ServerService.cs
@@ -129,7 +129,7 @@ public async Task> GetGameByWorld(ServerGetGam
return new ServerGetAllResponse(ServerResult.Success, existing
.Where(s => s.DateExpire > now)
.Select(s => _mapper.Map(s))
- .ToImmutableList());
+ .ToImmutableArray());
}
catch (Exception)
{
@@ -188,7 +188,7 @@ public async Task> GetAll()
return new ServerGetAllResponse(ServerResult.Success, existing
.Where(s => s.DateExpire > now)
.Select(s => _mapper.Map(s))
- .ToImmutableList());
+ .ToImmutableArray());
}
catch (Exception)
{
diff --git a/src/common/Edelstein.Common.Services.Server/packages.lock.json b/src/common/Edelstein.Common.Services.Server/packages.lock.json
new file mode 100644
index 000000000..4abb4fea4
--- /dev/null
+++ b/src/common/Edelstein.Common.Services.Server/packages.lock.json
@@ -0,0 +1,340 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {
+ "AutoMapper": {
+ "type": "Direct",
+ "requested": "[12.0.1, )",
+ "resolved": "12.0.1",
+ "contentHash": "hvV62vl6Hp/WfQ24yzo3Co9+OPl8wH8hApwVtgWpiAynVJkUcs7xvehnSftawL8Pe8FrPffBRM3hwzLQqWDNjA==",
+ "dependencies": {
+ "Microsoft.CSharp": "4.7.0"
+ }
+ },
+ "Microsoft.EntityFrameworkCore": {
+ "type": "Direct",
+ "requested": "[7.0.10, )",
+ "resolved": "7.0.10",
+ "contentHash": "24NbXJqJ/x8u88/agqeb1pLdAF9+9StDLA36+P/3g5xsJPOaB2GxXn7epR8dWpZTgHsNZ7cvBMxBgfFmF+xZlg==",
+ "dependencies": {
+ "Microsoft.EntityFrameworkCore.Abstractions": "7.0.10",
+ "Microsoft.EntityFrameworkCore.Analyzers": "7.0.10",
+ "Microsoft.Extensions.Caching.Memory": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection": "7.0.0",
+ "Microsoft.Extensions.Logging": "7.0.0"
+ }
+ },
+ "Microsoft.EntityFrameworkCore.Design": {
+ "type": "Direct",
+ "requested": "[7.0.10, )",
+ "resolved": "7.0.10",
+ "contentHash": "ZDdJ2aAE529A1zd3sEvszADRCiJmlOKxc0WlhS+NIhSs68NESAApPZL4uHXrIk0vb7SBRnNPYPfOhASWf9dahg==",
+ "dependencies": {
+ "Humanizer.Core": "2.14.1",
+ "Microsoft.EntityFrameworkCore.Relational": "7.0.10",
+ "Microsoft.Extensions.DependencyModel": "7.0.0",
+ "Mono.TextTemplating": "2.2.1"
+ }
+ },
+ "Microsoft.EntityFrameworkCore.Relational": {
+ "type": "Direct",
+ "requested": "[7.0.10, )",
+ "resolved": "7.0.10",
+ "contentHash": "PO2QB2Du+pW210UHmepYR12bk+ZOZJCiNkA7zEAxWs+vzvrRAMsUPlDlfgX2LXE7NBsnb0uvZp7a1/qqKf3fRQ==",
+ "dependencies": {
+ "Microsoft.EntityFrameworkCore": "7.0.10",
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration": {
+ "type": "Direct",
+ "requested": "[8.0.0-rc.1.23419.4, )",
+ "resolved": "8.0.0-rc.1.23419.4",
+ "contentHash": "NoIBM0qnZrl5o3em/5Qx4T3HcDruKdDVvm4PsG/wiuWawtwHRqaqkFjPS66lPnu1Kgzv+D1JJd+r4C5wPxXErw==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "8.0.0-rc.1.23419.4",
+ "Microsoft.Extensions.Primitives": "8.0.0-rc.1.23419.4"
+ }
+ },
+ "Microsoft.Extensions.Configuration.Json": {
+ "type": "Direct",
+ "requested": "[7.0.0, )",
+ "resolved": "7.0.0",
+ "contentHash": "LDNYe3uw76W35Jci+be4LDf2lkQZe0A7EEYQVChFbc509CpZ4Iupod8li4PUXPBhEUOFI/rlQNf5xkzJRQGvtA==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "7.0.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Configuration.FileExtensions": "7.0.0",
+ "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
+ "System.Text.Json": "7.0.0"
+ }
+ },
+ "Newtonsoft.Json": {
+ "type": "Direct",
+ "requested": "[13.0.3, )",
+ "resolved": "13.0.3",
+ "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ=="
+ },
+ "Npgsql.EntityFrameworkCore.PostgreSQL": {
+ "type": "Direct",
+ "requested": "[7.0.4, )",
+ "resolved": "7.0.4",
+ "contentHash": "ZYMtyG6pmLtUsFAx0/XaIlVkJM+1gArWEKD55cLLxiVlGScAphjiGj+G7Gk16yg5lhhdWx+bgXWpIUISXuS33g==",
+ "dependencies": {
+ "Microsoft.EntityFrameworkCore": "[7.0.5, 8.0.0)",
+ "Microsoft.EntityFrameworkCore.Abstractions": "[7.0.5, 8.0.0)",
+ "Microsoft.EntityFrameworkCore.Relational": "[7.0.5, 8.0.0)",
+ "Npgsql": "7.0.4"
+ }
+ },
+ "Duey.Abstractions": {
+ "type": "Transitive",
+ "resolved": "2.0.0",
+ "contentHash": "KP3l7yZoT1uMk8B+rAjZ3VL+2/XfXZxKTx31wDz7JNfcPnUmllJpgoqnDYQcVEJ5e4WLWToBQHZ3OIgOm6T/kg=="
+ },
+ "Humanizer.Core": {
+ "type": "Transitive",
+ "resolved": "2.14.1",
+ "contentHash": "lQKvtaTDOXnoVJ20ibTuSIOf2i0uO0MPbDhd1jm238I+U/2ZnRENj0cktKZhtchBMtCUSRQ5v4xBCUbKNmyVMw=="
+ },
+ "MathParser.org-mXparser": {
+ "type": "Transitive",
+ "resolved": "4.4.3",
+ "contentHash": "QhHsP4nzyjC3G2kJ+dbT3NFuE0M0rKfa0wQjCcn5UyK0VnXN8OeYMy9KEYGzNKI9ealcwOQJd/4Xcq4PE+Vl7g=="
+ },
+ "Microsoft.CSharp": {
+ "type": "Transitive",
+ "resolved": "4.7.0",
+ "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA=="
+ },
+ "Microsoft.EntityFrameworkCore.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.10",
+ "contentHash": "Z/lDWmGLiT9uNQrp6UXTKZxofSmAKQCiKOz98FDscTbfAGgBXE3DTTqRsPMc8HFIVVSNANSiFRz3JyLg07HN9Q=="
+ },
+ "Microsoft.EntityFrameworkCore.Analyzers": {
+ "type": "Transitive",
+ "resolved": "7.0.10",
+ "contentHash": "+8NVNpyJTzW6nNh/7RGfldf+mbeboVcn+X1tD8kMBCEJswuy3RqM/qecEEfOfTcWLliZExPMaHwOwtHO6RMpdA=="
+ },
+ "Microsoft.Extensions.Caching.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "IeimUd0TNbhB4ded3AbgBLQv2SnsiVugDyGV1MvspQFVlA07nDC7Zul7kcwH5jWN3JiTcp/ySE83AIJo8yfKjg==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Caching.Memory": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "xpidBs2KCE2gw1JrD0quHE72kvCaI3xFql5/Peb2GRtUuZX+dYPoK/NTdVMiM67Svym0M0Df9A3xyU0FbMQhHw==",
+ "dependencies": {
+ "Microsoft.Extensions.Caching.Abstractions": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Options": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration.Abstractions": {
+ "type": "Transitive",
+ "resolved": "8.0.0-rc.1.23419.4",
+ "contentHash": "tY5wKwXNZ6cBeyHxvxyLy57TxUaA6H82/vW8vTTmikG9bkfRzfyS0EEDloiPzL4ln8P+3aZxeAestjPC6942Kg==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "8.0.0-rc.1.23419.4"
+ }
+ },
+ "Microsoft.Extensions.Configuration.FileExtensions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "xk2lRJ1RDuqe57BmgvRPyCt6zyePKUmvT6iuXqiHR+/OIIgWVR8Ff5k2p6DwmqY8a17hx/OnrekEhziEIeQP6Q==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "7.0.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
+ "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
+ "Microsoft.Extensions.FileProviders.Physical": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "elNeOmkeX3eDVG6pYVeV82p29hr+UKDaBhrZyWvWLw/EVZSYEkZlQdkp0V39k/Xehs2Qa0mvoCvkVj3eQxNQ1Q==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "h3j/QfmFN4S0w4C2A6X7arXij/M/OVw3uQHSOFxnND4DyAzO1F9eMX7Eti7lU/OkSthEE0WzRsfT/Dmx86jzCw=="
+ },
+ "Microsoft.Extensions.DependencyModel": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "oONNYd71J3LzkWc4fUHl3SvMfiQMYUCo/mDHDEu76hYYxdhdrPYv6fvGv9nnKVyhE9P0h20AU8RZB5OOWQcAXg==",
+ "dependencies": {
+ "System.Text.Encodings.Web": "7.0.0",
+ "System.Text.Json": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.FileProviders.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "NyawiW9ZT/liQb34k9YqBSNPLuuPkrjMgQZ24Y/xXX1RoiBkLUdPMaQTmxhZ5TYu8ZKZ9qayzil75JX95vGQUg==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.FileProviders.Physical": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "K8D2MTR+EtzkbZ8z80LrG7Ur64R7ZZdRLt1J5cgpc/pUWl0C6IkAUapPuK28oionHueCPELUqq0oYEvZfalNdg==",
+ "dependencies": {
+ "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
+ "Microsoft.Extensions.FileSystemGlobbing": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.FileSystemGlobbing": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "2jONjKHiF+E92ynz2ZFcr9OvxIw+rTGMPEH+UZGeHTEComVav93jQUWGkso8yWwVBcEJGcNcZAaqY01FFJcj7w=="
+ },
+ "Microsoft.Extensions.Logging": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "Nw2muoNrOG5U5qa2ZekXwudUn2BJcD41e65zwmDHb1fQegTX66UokLWZkJRpqSSHXDOWZ5V0iqhbxOEky91atA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Options": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw=="
+ },
+ "Microsoft.Extensions.Options": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "lP1yBnTTU42cKpMozuafbvNtQ7QcBjr/CcK3bYOGEMH55Fjt+iecXjT6chR7vbgCMqy3PG3aNQSZgo/EuY/9qQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "8.0.0-rc.1.23419.4",
+ "contentHash": "zyoB4zblhvpylS9VOmKyBuGH+RjKDsfi0cTB2KRPPDD6tFinpP+vGr3dictaNYLhGUg6jaBmq+2H/WZMCnvGDQ=="
+ },
+ "Microsoft.IO.RecyclableMemoryStream": {
+ "type": "Transitive",
+ "resolved": "2.3.2",
+ "contentHash": "Oh1qXXFdJFcHozvb4H6XYLf2W0meZFuG0A+TfapFPj9z5fd4vxiARGEhAaLj/6XWQaMYIv4SH/9Q6H78Hw0E2Q=="
+ },
+ "Mono.TextTemplating": {
+ "type": "Transitive",
+ "resolved": "2.2.1",
+ "contentHash": "KZYeKBET/2Z0gY1WlTAK7+RHTl7GSbtvTLDXEZZojUdAPqpQNDL6tHv7VUpqfX5VEOh+uRGKaZXkuD253nEOBQ==",
+ "dependencies": {
+ "System.CodeDom": "4.4.0"
+ }
+ },
+ "Npgsql": {
+ "type": "Transitive",
+ "resolved": "7.0.4",
+ "contentHash": "7UVPYy2RP0ci04PED1tc9ZCaTw/DfSdSkLiGEFCAvwMwsgA/bAluj1liNzP1IpN0MFofnOF0cm1zJfmbEuCehg==",
+ "dependencies": {
+ "Microsoft.Extensions.Logging.Abstractions": "6.0.0"
+ }
+ },
+ "RBush": {
+ "type": "Transitive",
+ "resolved": "3.2.0",
+ "contentHash": "ijGh9N0zZ7JfXk3oQkWCwK8SwSSByexbyh/MjbCjNxOft9eG5ZqKC1vdgiYq78h4IZRFmN4s3JZ/b10Jipud5w=="
+ },
+ "System.CodeDom": {
+ "type": "Transitive",
+ "resolved": "4.4.0",
+ "contentHash": "2sCCb7doXEwtYAbqzbF/8UAeDRMNmPaQbU2q50Psg1J9KzumyVVCgKQY8s53WIPTufNT0DpSe9QRvVjOzfDWBA=="
+ },
+ "System.Text.Encodings.Web": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "OP6umVGxc0Z0MvZQBVigj4/U31Pw72ITihDWP9WiWDm+q5aoe0GaJivsfYGq53o6dxH7DcXWiCTl7+0o2CGdmg=="
+ },
+ "System.Text.Json": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "DaGSsVqKsn/ia6RG8frjwmJonfos0srquhw09TlT8KRw5I43E+4gs+/bZj4K0vShJ5H9imCuXupb4RmS+dBy3w==",
+ "dependencies": {
+ "System.Text.Encodings.Web": "7.0.0"
+ }
+ },
+ "edelstein.common.constants": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )"
+ }
+ },
+ "edelstein.common.gameplay": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Common.Constants": "[1.0.0, )",
+ "Edelstein.Common.Utilities": "[1.0.0, )",
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Server": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Social": "[1.0.0, )",
+ "MathParser.org-mXparser": "[4.4.3, )",
+ "Microsoft.Extensions.Logging.Abstractions": "[7.0.0, )"
+ }
+ },
+ "edelstein.common.utilities": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )",
+ "Microsoft.Extensions.Logging.Abstractions": "[7.0.0, )",
+ "Microsoft.IO.RecyclableMemoryStream": "[2.3.2, )",
+ "RBush": "[3.2.0, )"
+ }
+ },
+ "edelstein.protocol.gameplay": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Protocol.Network": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Social": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.network": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.services.server": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.services.social": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.utilities": {
+ "type": "Project"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/common/Edelstein.Common.Services.Social/Edelstein.Common.Services.Social.csproj b/src/common/Edelstein.Common.Services.Social/Edelstein.Common.Services.Social.csproj
index 5883cd265..49935c5ad 100644
--- a/src/common/Edelstein.Common.Services.Social/Edelstein.Common.Services.Social.csproj
+++ b/src/common/Edelstein.Common.Services.Social/Edelstein.Common.Services.Social.csproj
@@ -16,7 +16,7 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
diff --git a/src/common/Edelstein.Common.Services.Social/packages.lock.json b/src/common/Edelstein.Common.Services.Social/packages.lock.json
new file mode 100644
index 000000000..4a9986de9
--- /dev/null
+++ b/src/common/Edelstein.Common.Services.Social/packages.lock.json
@@ -0,0 +1,321 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {
+ "AutoMapper": {
+ "type": "Direct",
+ "requested": "[12.0.1, )",
+ "resolved": "12.0.1",
+ "contentHash": "hvV62vl6Hp/WfQ24yzo3Co9+OPl8wH8hApwVtgWpiAynVJkUcs7xvehnSftawL8Pe8FrPffBRM3hwzLQqWDNjA==",
+ "dependencies": {
+ "Microsoft.CSharp": "4.7.0"
+ }
+ },
+ "Foundatio": {
+ "type": "Direct",
+ "requested": "[10.6.1, )",
+ "resolved": "10.6.1",
+ "contentHash": "c5LXLzjaCwBlzozpIiumQeuFhalZgE5L38uaGu6IVlB8HMOd2Wnf7WmylRUo15BWySgqi/mpoq2ikVZCUrrpKg==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "6.0.0",
+ "Microsoft.Extensions.DependencyInjection": "6.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "6.0.0",
+ "System.Diagnostics.DiagnosticSource": "6.0.0",
+ "System.Text.Json": "6.0.0"
+ }
+ },
+ "Microsoft.EntityFrameworkCore": {
+ "type": "Direct",
+ "requested": "[7.0.10, )",
+ "resolved": "7.0.10",
+ "contentHash": "24NbXJqJ/x8u88/agqeb1pLdAF9+9StDLA36+P/3g5xsJPOaB2GxXn7epR8dWpZTgHsNZ7cvBMxBgfFmF+xZlg==",
+ "dependencies": {
+ "Microsoft.EntityFrameworkCore.Abstractions": "7.0.10",
+ "Microsoft.EntityFrameworkCore.Analyzers": "7.0.10",
+ "Microsoft.Extensions.Caching.Memory": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection": "7.0.0",
+ "Microsoft.Extensions.Logging": "7.0.0"
+ }
+ },
+ "Microsoft.EntityFrameworkCore.Design": {
+ "type": "Direct",
+ "requested": "[7.0.10, )",
+ "resolved": "7.0.10",
+ "contentHash": "ZDdJ2aAE529A1zd3sEvszADRCiJmlOKxc0WlhS+NIhSs68NESAApPZL4uHXrIk0vb7SBRnNPYPfOhASWf9dahg==",
+ "dependencies": {
+ "Humanizer.Core": "2.14.1",
+ "Microsoft.EntityFrameworkCore.Relational": "7.0.10",
+ "Microsoft.Extensions.DependencyModel": "7.0.0",
+ "Mono.TextTemplating": "2.2.1"
+ }
+ },
+ "Microsoft.EntityFrameworkCore.Relational": {
+ "type": "Direct",
+ "requested": "[7.0.10, )",
+ "resolved": "7.0.10",
+ "contentHash": "PO2QB2Du+pW210UHmepYR12bk+ZOZJCiNkA7zEAxWs+vzvrRAMsUPlDlfgX2LXE7NBsnb0uvZp7a1/qqKf3fRQ==",
+ "dependencies": {
+ "Microsoft.EntityFrameworkCore": "7.0.10",
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration": {
+ "type": "Direct",
+ "requested": "[8.0.0-rc.1.23419.4, )",
+ "resolved": "8.0.0-rc.1.23419.4",
+ "contentHash": "NoIBM0qnZrl5o3em/5Qx4T3HcDruKdDVvm4PsG/wiuWawtwHRqaqkFjPS66lPnu1Kgzv+D1JJd+r4C5wPxXErw==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "8.0.0-rc.1.23419.4",
+ "Microsoft.Extensions.Primitives": "8.0.0-rc.1.23419.4"
+ }
+ },
+ "Microsoft.Extensions.Configuration.Json": {
+ "type": "Direct",
+ "requested": "[7.0.0, )",
+ "resolved": "7.0.0",
+ "contentHash": "LDNYe3uw76W35Jci+be4LDf2lkQZe0A7EEYQVChFbc509CpZ4Iupod8li4PUXPBhEUOFI/rlQNf5xkzJRQGvtA==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "7.0.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Configuration.FileExtensions": "7.0.0",
+ "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
+ "System.Text.Json": "7.0.0"
+ }
+ },
+ "Newtonsoft.Json": {
+ "type": "Direct",
+ "requested": "[13.0.3, )",
+ "resolved": "13.0.3",
+ "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ=="
+ },
+ "Npgsql.EntityFrameworkCore.PostgreSQL": {
+ "type": "Direct",
+ "requested": "[7.0.4, )",
+ "resolved": "7.0.4",
+ "contentHash": "ZYMtyG6pmLtUsFAx0/XaIlVkJM+1gArWEKD55cLLxiVlGScAphjiGj+G7Gk16yg5lhhdWx+bgXWpIUISXuS33g==",
+ "dependencies": {
+ "Microsoft.EntityFrameworkCore": "[7.0.5, 8.0.0)",
+ "Microsoft.EntityFrameworkCore.Abstractions": "[7.0.5, 8.0.0)",
+ "Microsoft.EntityFrameworkCore.Relational": "[7.0.5, 8.0.0)",
+ "Npgsql": "7.0.4"
+ }
+ },
+ "Duey.Abstractions": {
+ "type": "Transitive",
+ "resolved": "2.0.0",
+ "contentHash": "KP3l7yZoT1uMk8B+rAjZ3VL+2/XfXZxKTx31wDz7JNfcPnUmllJpgoqnDYQcVEJ5e4WLWToBQHZ3OIgOm6T/kg=="
+ },
+ "Humanizer.Core": {
+ "type": "Transitive",
+ "resolved": "2.14.1",
+ "contentHash": "lQKvtaTDOXnoVJ20ibTuSIOf2i0uO0MPbDhd1jm238I+U/2ZnRENj0cktKZhtchBMtCUSRQ5v4xBCUbKNmyVMw=="
+ },
+ "Microsoft.Bcl.AsyncInterfaces": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "UcSjPsst+DfAdJGVDsu346FX0ci0ah+lw3WRtn18NUwEqRt70HaOQ7lI72vy3+1LxtqI3T5GWwV39rQSrCzAeg=="
+ },
+ "Microsoft.CSharp": {
+ "type": "Transitive",
+ "resolved": "4.7.0",
+ "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA=="
+ },
+ "Microsoft.EntityFrameworkCore.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.10",
+ "contentHash": "Z/lDWmGLiT9uNQrp6UXTKZxofSmAKQCiKOz98FDscTbfAGgBXE3DTTqRsPMc8HFIVVSNANSiFRz3JyLg07HN9Q=="
+ },
+ "Microsoft.EntityFrameworkCore.Analyzers": {
+ "type": "Transitive",
+ "resolved": "7.0.10",
+ "contentHash": "+8NVNpyJTzW6nNh/7RGfldf+mbeboVcn+X1tD8kMBCEJswuy3RqM/qecEEfOfTcWLliZExPMaHwOwtHO6RMpdA=="
+ },
+ "Microsoft.Extensions.Caching.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "IeimUd0TNbhB4ded3AbgBLQv2SnsiVugDyGV1MvspQFVlA07nDC7Zul7kcwH5jWN3JiTcp/ySE83AIJo8yfKjg==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Caching.Memory": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "xpidBs2KCE2gw1JrD0quHE72kvCaI3xFql5/Peb2GRtUuZX+dYPoK/NTdVMiM67Svym0M0Df9A3xyU0FbMQhHw==",
+ "dependencies": {
+ "Microsoft.Extensions.Caching.Abstractions": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Options": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration.Abstractions": {
+ "type": "Transitive",
+ "resolved": "8.0.0-rc.1.23419.4",
+ "contentHash": "tY5wKwXNZ6cBeyHxvxyLy57TxUaA6H82/vW8vTTmikG9bkfRzfyS0EEDloiPzL4ln8P+3aZxeAestjPC6942Kg==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "8.0.0-rc.1.23419.4"
+ }
+ },
+ "Microsoft.Extensions.Configuration.FileExtensions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "xk2lRJ1RDuqe57BmgvRPyCt6zyePKUmvT6iuXqiHR+/OIIgWVR8Ff5k2p6DwmqY8a17hx/OnrekEhziEIeQP6Q==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "7.0.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
+ "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
+ "Microsoft.Extensions.FileProviders.Physical": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "elNeOmkeX3eDVG6pYVeV82p29hr+UKDaBhrZyWvWLw/EVZSYEkZlQdkp0V39k/Xehs2Qa0mvoCvkVj3eQxNQ1Q==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "h3j/QfmFN4S0w4C2A6X7arXij/M/OVw3uQHSOFxnND4DyAzO1F9eMX7Eti7lU/OkSthEE0WzRsfT/Dmx86jzCw=="
+ },
+ "Microsoft.Extensions.DependencyModel": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "oONNYd71J3LzkWc4fUHl3SvMfiQMYUCo/mDHDEu76hYYxdhdrPYv6fvGv9nnKVyhE9P0h20AU8RZB5OOWQcAXg==",
+ "dependencies": {
+ "System.Text.Encodings.Web": "7.0.0",
+ "System.Text.Json": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.FileProviders.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "NyawiW9ZT/liQb34k9YqBSNPLuuPkrjMgQZ24Y/xXX1RoiBkLUdPMaQTmxhZ5TYu8ZKZ9qayzil75JX95vGQUg==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.FileProviders.Physical": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "K8D2MTR+EtzkbZ8z80LrG7Ur64R7ZZdRLt1J5cgpc/pUWl0C6IkAUapPuK28oionHueCPELUqq0oYEvZfalNdg==",
+ "dependencies": {
+ "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
+ "Microsoft.Extensions.FileSystemGlobbing": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.FileSystemGlobbing": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "2jONjKHiF+E92ynz2ZFcr9OvxIw+rTGMPEH+UZGeHTEComVav93jQUWGkso8yWwVBcEJGcNcZAaqY01FFJcj7w=="
+ },
+ "Microsoft.Extensions.Logging": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "Nw2muoNrOG5U5qa2ZekXwudUn2BJcD41e65zwmDHb1fQegTX66UokLWZkJRpqSSHXDOWZ5V0iqhbxOEky91atA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Options": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw=="
+ },
+ "Microsoft.Extensions.Options": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "lP1yBnTTU42cKpMozuafbvNtQ7QcBjr/CcK3bYOGEMH55Fjt+iecXjT6chR7vbgCMqy3PG3aNQSZgo/EuY/9qQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "8.0.0-rc.1.23419.4",
+ "contentHash": "zyoB4zblhvpylS9VOmKyBuGH+RjKDsfi0cTB2KRPPDD6tFinpP+vGr3dictaNYLhGUg6jaBmq+2H/WZMCnvGDQ=="
+ },
+ "Mono.TextTemplating": {
+ "type": "Transitive",
+ "resolved": "2.2.1",
+ "contentHash": "KZYeKBET/2Z0gY1WlTAK7+RHTl7GSbtvTLDXEZZojUdAPqpQNDL6tHv7VUpqfX5VEOh+uRGKaZXkuD253nEOBQ==",
+ "dependencies": {
+ "System.CodeDom": "4.4.0"
+ }
+ },
+ "Npgsql": {
+ "type": "Transitive",
+ "resolved": "7.0.4",
+ "contentHash": "7UVPYy2RP0ci04PED1tc9ZCaTw/DfSdSkLiGEFCAvwMwsgA/bAluj1liNzP1IpN0MFofnOF0cm1zJfmbEuCehg==",
+ "dependencies": {
+ "Microsoft.Extensions.Logging.Abstractions": "6.0.0"
+ }
+ },
+ "System.CodeDom": {
+ "type": "Transitive",
+ "resolved": "4.4.0",
+ "contentHash": "2sCCb7doXEwtYAbqzbF/8UAeDRMNmPaQbU2q50Psg1J9KzumyVVCgKQY8s53WIPTufNT0DpSe9QRvVjOzfDWBA=="
+ },
+ "System.Diagnostics.DiagnosticSource": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "frQDfv0rl209cKm1lnwTgFPzNigy2EKk1BS3uAvHvlBVKe5cymGyHO+Sj+NLv5VF/AhHsqPIUUwya5oV4CHMUw==",
+ "dependencies": {
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0"
+ }
+ },
+ "System.Runtime.CompilerServices.Unsafe": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg=="
+ },
+ "System.Text.Encodings.Web": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "OP6umVGxc0Z0MvZQBVigj4/U31Pw72ITihDWP9WiWDm+q5aoe0GaJivsfYGq53o6dxH7DcXWiCTl7+0o2CGdmg=="
+ },
+ "System.Text.Json": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "DaGSsVqKsn/ia6RG8frjwmJonfos0srquhw09TlT8KRw5I43E+4gs+/bZj4K0vShJ5H9imCuXupb4RmS+dBy3w==",
+ "dependencies": {
+ "System.Text.Encodings.Web": "7.0.0"
+ }
+ },
+ "edelstein.protocol.gameplay": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Protocol.Network": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Social": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.network": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.services.social": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.utilities": {
+ "type": "Project"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/common/Edelstein.Common.Utilities/Edelstein.Common.Utilities.csproj b/src/common/Edelstein.Common.Utilities/Edelstein.Common.Utilities.csproj
index f4f6b1e68..b0c253e1c 100644
--- a/src/common/Edelstein.Common.Utilities/Edelstein.Common.Utilities.csproj
+++ b/src/common/Edelstein.Common.Utilities/Edelstein.Common.Utilities.csproj
@@ -8,7 +8,6 @@
-
diff --git a/src/common/Edelstein.Common.Utilities/Repositories/Repository.cs b/src/common/Edelstein.Common.Utilities/Repositories/Repository.cs
index 3b525efcb..01c794b14 100644
--- a/src/common/Edelstein.Common.Utilities/Repositories/Repository.cs
+++ b/src/common/Edelstein.Common.Utilities/Repositories/Repository.cs
@@ -7,7 +7,7 @@ public class Repository : IRepository
where TKey : notnull
where TEntry : IIdentifiable
{
- private readonly IDictionary _dictionary;
+ private IDictionary _dictionary;
public Repository() => _dictionary = new ConcurrentDictionary();
diff --git a/src/common/Edelstein.Common.Utilities/Templates/TemplateManager.cs b/src/common/Edelstein.Common.Utilities/Templates/TemplateManager.cs
index 55f2ae915..1836b8e0f 100644
--- a/src/common/Edelstein.Common.Utilities/Templates/TemplateManager.cs
+++ b/src/common/Edelstein.Common.Utilities/Templates/TemplateManager.cs
@@ -1,21 +1,29 @@
-using Edelstein.Protocol.Utilities.Templates;
+using System.Collections.Frozen;
+using Edelstein.Protocol.Utilities.Templates;
namespace Edelstein.Common.Utilities.Templates;
public class TemplateManager : ITemplateManager where TTemplate : ITemplate
{
private readonly IDictionary> _providers;
+ private FrozenDictionary>? _providersFrozen;
public TemplateManager() => _providers = new Dictionary>();
- public int Count => _providers.Count;
+ public int Count => (_providersFrozen ?? _providers).Count;
public async Task Retrieve(int key) =>
- _providers.TryGetValue(key, out var provider) ? await provider.Provide() : default;
+ (_providersFrozen ?? _providers).TryGetValue(key, out var provider) ? await provider.Provide() : default;
public Task> Insert(ITemplateProvider entry) =>
- Task.FromResult(_providers[entry.ID] = entry);
+ Task.FromResult((_providersFrozen ?? _providers)[entry.ID] = entry);
public async Task> RetrieveAll() =>
- await Task.WhenAll(_providers.Values.Select(p => p.Provide()));
+ await Task.WhenAll((_providersFrozen ?? _providers).Values.Select(p => p.Provide()));
+
+ public void Freeze()
+ {
+ _providersFrozen = _providers.ToFrozenDictionary();
+ _providers.Clear();
+ }
}
diff --git a/src/common/Edelstein.Common.Utilities/Tickers/TickerManager.cs b/src/common/Edelstein.Common.Utilities/Tickers/TickerManager.cs
index 16846b151..40d913186 100644
--- a/src/common/Edelstein.Common.Utilities/Tickers/TickerManager.cs
+++ b/src/common/Edelstein.Common.Utilities/Tickers/TickerManager.cs
@@ -1,5 +1,4 @@
-using System.Collections.Immutable;
-using Edelstein.Protocol.Utilities.Tickers;
+using Edelstein.Protocol.Utilities.Tickers;
using Microsoft.Extensions.Logging;
namespace Edelstein.Common.Utilities.Tickers;
@@ -18,9 +17,7 @@ public TickerManager(ILogger logger, int refreshRate = 4)
public async Task OnTick(DateTime now)
{
- var tickables = _tickables.ToImmutableList();
-
- await Task.WhenAll(tickables.Select(b =>
+ await Task.WhenAll(_tickables.Select(b =>
Task.Run(async () =>
{
if (!b.IsRequestedCancellation && now >= b.TickNext)
@@ -28,7 +25,7 @@ await Task.WhenAll(tickables.Select(b =>
})
));
- foreach (var b in tickables.Where(b => b.IsRequestedCancellation))
+ foreach (var b in _tickables.Where(b => b.IsRequestedCancellation))
_tickables.Remove(b);
}
diff --git a/src/common/Edelstein.Common.Utilities/packages.lock.json b/src/common/Edelstein.Common.Utilities/packages.lock.json
new file mode 100644
index 000000000..b8e0ae293
--- /dev/null
+++ b/src/common/Edelstein.Common.Utilities/packages.lock.json
@@ -0,0 +1,28 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Direct",
+ "requested": "[7.0.0, )",
+ "resolved": "7.0.0",
+ "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw=="
+ },
+ "Microsoft.IO.RecyclableMemoryStream": {
+ "type": "Direct",
+ "requested": "[2.3.2, )",
+ "resolved": "2.3.2",
+ "contentHash": "Oh1qXXFdJFcHozvb4H6XYLf2W0meZFuG0A+TfapFPj9z5fd4vxiARGEhAaLj/6XWQaMYIv4SH/9Q6H78Hw0E2Q=="
+ },
+ "RBush": {
+ "type": "Direct",
+ "requested": "[3.2.0, )",
+ "resolved": "3.2.0",
+ "contentHash": "ijGh9N0zZ7JfXk3oQkWCwK8SwSSByexbyh/MjbCjNxOft9eG5ZqKC1vdgiYq78h4IZRFmN4s3JZ/b10Jipud5w=="
+ },
+ "edelstein.protocol.utilities": {
+ "type": "Project"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/plugin/Edelstein.Plugin.Rue/Commands/AbstractTemplateCommand.cs b/src/plugin/Edelstein.Plugin.Rue/Commands/AbstractTemplateCommand.cs
index dc452883e..ae062449b 100644
--- a/src/plugin/Edelstein.Plugin.Rue/Commands/AbstractTemplateCommand.cs
+++ b/src/plugin/Edelstein.Plugin.Rue/Commands/AbstractTemplateCommand.cs
@@ -1,4 +1,5 @@
-using System.Diagnostics;
+using System.Collections.Immutable;
+using System.Diagnostics;
using Edelstein.Protocol.Gameplay.Game.Objects.User;
using Edelstein.Protocol.Utilities.Templates;
using Gma.DataStructures.StringSearch;
@@ -72,7 +73,7 @@ protected override async Task Execute(IFieldUser user, TArgs args)
var results = _trie
.Retrieve(args.Search.ToLower())
.DistinctBy(d => d.ID)
- .ToList();
+ .ToImmutableArray();
var elapsed = stopwatch.Elapsed;
if (args.Search.All(char.IsDigit) && !results.Any())
@@ -90,7 +91,7 @@ protected override async Task Execute(IFieldUser user, TArgs args)
{
var maxPerPage = 6;
var minPage = 1;
- var maxPage = (int)Math.Ceiling((double)results.Count / maxPerPage);
+ var maxPage = (int)Math.Ceiling((double)results.Length / maxPerPage);
var currentPage = 1;
while (true)
@@ -98,7 +99,7 @@ protected override async Task Execute(IFieldUser user, TArgs args)
var items = results
.Skip(maxPerPage * (currentPage - 1))
.Take(maxPerPage)
- .ToList();
+ .ToImmutableArray();
var menu = items.ToDictionary(
r => r.ID,
r => $"{r.DisplayString} ({r.ID})"
@@ -107,7 +108,7 @@ protected override async Task Execute(IFieldUser user, TArgs args)
if (currentPage < maxPage) menu.Add(-10, "#rNext page#k");
if (currentPage > minPage) menu.Add(-20, "#rPrevious page#k");
- var selection = target.AskMenu($"Found {results.Count} results for '{args.Search}' in {elapsed.TotalMilliseconds:F2}ms (page {currentPage} of {maxPage})", menu);
+ var selection = target.AskMenu($"Found {results.Length} results for '{args.Search}' in {elapsed.TotalMilliseconds:F2}ms (page {currentPage} of {maxPage})", menu);
if (selection == -10) { currentPage++; continue; }
if (selection == -20) { currentPage--; continue; }
diff --git a/src/plugin/Edelstein.Plugin.Rue/Commands/Admin/EquipCommand.cs b/src/plugin/Edelstein.Plugin.Rue/Commands/Admin/EquipCommand.cs
index d0583b7a3..1f878ce63 100644
--- a/src/plugin/Edelstein.Plugin.Rue/Commands/Admin/EquipCommand.cs
+++ b/src/plugin/Edelstein.Plugin.Rue/Commands/Admin/EquipCommand.cs
@@ -1,4 +1,5 @@
-using Edelstein.Protocol.Gameplay.Game.Objects.User;
+using System.Collections.Immutable;
+using Edelstein.Protocol.Gameplay.Game.Objects.User;
using Edelstein.Protocol.Gameplay.Models.Inventories;
using Edelstein.Protocol.Gameplay.Models.Inventories.Items;
@@ -11,11 +12,12 @@ public class EquipCommand : AbstractCommand
public override async Task Execute(IFieldUser user, string[] args)
{
- var equipped = user.Character.Inventories[ItemInventoryType.Equip]?.Items.ToList() ?? new List>();
- if (equipped.Count == 0) return;
+ var equipped = user.Character.Inventories[ItemInventoryType.Equip]?.Items
+ .ToImmutableArray() ?? ImmutableArray>.Empty;
+ if (equipped.Length == 0) return;
var slot = await user.Prompt(target => target.AskMenu("Which equipment would you like to modify?", equipped
- .ToDictionary(
+ .ToImmutableDictionary(
i => (int)i.Key,
i => $"{i.Value.ID}"
)), -1);
diff --git a/src/plugin/Edelstein.Plugin.Rue/Commands/Admin/FieldCommand.cs b/src/plugin/Edelstein.Plugin.Rue/Commands/Admin/FieldCommand.cs
index 601928120..037b0cf6d 100644
--- a/src/plugin/Edelstein.Plugin.Rue/Commands/Admin/FieldCommand.cs
+++ b/src/plugin/Edelstein.Plugin.Rue/Commands/Admin/FieldCommand.cs
@@ -29,7 +29,7 @@ ITemplateManager strings
protected override async Task> Indices()
{
var result = new List();
- var strings = (await _strings.RetrieveAll()).ToList();
+ var strings = await _strings.RetrieveAll();
result.AddRange(strings.Select(s => new TemplateCommandIndex(s.ID, s.ID.ToString(), $"{s.StreetName}: {s.MapName}")));
result.AddRange(strings.Select(s => new TemplateCommandIndex(s.ID, s.MapName, $"{s.StreetName}: {s.MapName}")));
diff --git a/src/plugin/Edelstein.Plugin.Rue/Commands/Admin/ItemCommand.cs b/src/plugin/Edelstein.Plugin.Rue/Commands/Admin/ItemCommand.cs
index eb5c10555..72bed7e9a 100644
--- a/src/plugin/Edelstein.Plugin.Rue/Commands/Admin/ItemCommand.cs
+++ b/src/plugin/Edelstein.Plugin.Rue/Commands/Admin/ItemCommand.cs
@@ -24,7 +24,7 @@ ITemplateManager strings
protected override async Task> Indices()
{
var result = new List();
- var strings = (await _strings.RetrieveAll()).ToList();
+ var strings = await _strings.RetrieveAll();
result.AddRange(strings.Select(s => new TemplateCommandIndex(s.ID, s.ID.ToString(), s.Name)));
result.AddRange(strings.Select(s => new TemplateCommandIndex(s.ID, s.Name, s.Name)));
diff --git a/src/plugin/Edelstein.Plugin.Rue/Commands/Admin/MobCommand.cs b/src/plugin/Edelstein.Plugin.Rue/Commands/Admin/MobCommand.cs
index d4e0f2be2..4b1792d2d 100644
--- a/src/plugin/Edelstein.Plugin.Rue/Commands/Admin/MobCommand.cs
+++ b/src/plugin/Edelstein.Plugin.Rue/Commands/Admin/MobCommand.cs
@@ -20,7 +20,7 @@ ITemplateManager strings
protected override async Task> Indices()
{
var result = new List();
- var strings = (await _strings.RetrieveAll()).ToList();
+ var strings = await _strings.RetrieveAll();
result.AddRange(strings.Select(s => new TemplateCommandIndex(s.ID, s.ID.ToString(), s.Name)));
result.AddRange(strings.Select(s => new TemplateCommandIndex(s.ID, s.Name, s.Name)));
diff --git a/src/plugin/Edelstein.Plugin.Rue/Commands/Admin/NPCCommand.cs b/src/plugin/Edelstein.Plugin.Rue/Commands/Admin/NPCCommand.cs
index e30b0b325..d4940f088 100644
--- a/src/plugin/Edelstein.Plugin.Rue/Commands/Admin/NPCCommand.cs
+++ b/src/plugin/Edelstein.Plugin.Rue/Commands/Admin/NPCCommand.cs
@@ -20,7 +20,7 @@ ITemplateManager strings
protected override async Task> Indices()
{
var result = new List();
- var strings = (await _strings.RetrieveAll()).ToList();
+ var strings = await _strings.RetrieveAll();
result.AddRange(strings.Select(s => new TemplateCommandIndex(s.ID, s.ID.ToString(), s.Name)));
result.AddRange(strings.Select(s => new TemplateCommandIndex(s.ID, s.Name, $"{s.Name}{(!string.IsNullOrWhiteSpace(s.Func) ? $": {s.Func}" : "")}")));
diff --git a/src/plugin/Edelstein.Plugin.Rue/Commands/Admin/QuestCommand.cs b/src/plugin/Edelstein.Plugin.Rue/Commands/Admin/QuestCommand.cs
index a892dbd9e..ede09ebb3 100644
--- a/src/plugin/Edelstein.Plugin.Rue/Commands/Admin/QuestCommand.cs
+++ b/src/plugin/Edelstein.Plugin.Rue/Commands/Admin/QuestCommand.cs
@@ -21,7 +21,7 @@ ITemplateManager templates
protected override async Task> Indices()
{
var result = new List();
- var strings = (await _strings.RetrieveAll()).ToList();
+ var strings = await _strings.RetrieveAll();
result.AddRange(strings.Select(s => new TemplateCommandIndex(s.ID, s.ID.ToString(), s.Name)));
result.AddRange(strings.Select(s => new TemplateCommandIndex(s.ID, s.Name, s.Name)));
diff --git a/src/plugin/Edelstein.Plugin.Rue/Commands/Admin/SkillCommand.cs b/src/plugin/Edelstein.Plugin.Rue/Commands/Admin/SkillCommand.cs
index 5a9186ac0..c441f89a0 100644
--- a/src/plugin/Edelstein.Plugin.Rue/Commands/Admin/SkillCommand.cs
+++ b/src/plugin/Edelstein.Plugin.Rue/Commands/Admin/SkillCommand.cs
@@ -26,7 +26,7 @@ ITemplateManager strings
protected override async Task> Indices()
{
var result = new List();
- var strings = (await _strings.RetrieveAll()).ToList();
+ var strings = await _strings.RetrieveAll();
result.AddRange(strings.Select(s => new TemplateCommandIndex(s.ID, s.ID.ToString(), s.Name)));
result.AddRange(strings.Select(s => new TemplateCommandIndex(s.ID, s.Name, s.Name)));
diff --git a/src/plugin/Edelstein.Plugin.Rue/packages.lock.json b/src/plugin/Edelstein.Plugin.Rue/packages.lock.json
new file mode 100644
index 000000000..11f06410a
--- /dev/null
+++ b/src/plugin/Edelstein.Plugin.Rue/packages.lock.json
@@ -0,0 +1,151 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {
+ "Microsoft.Extensions.Configuration.Binder": {
+ "type": "Direct",
+ "requested": "[7.0.4, )",
+ "resolved": "7.0.4",
+ "contentHash": "8+XPvJnHZsYgHOQlcMuQe7QNF5KdVKHH1F/wW3nd8/u81Gk/XFAYMDP0Lpz18h7/AM95M662vvqMorcYxCBB4w==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0"
+ }
+ },
+ "PowerArgs": {
+ "type": "Direct",
+ "requested": "[4.0.2, )",
+ "resolved": "4.0.2",
+ "contentHash": "OvnFpO5T68RcZ14XTbHPGrPV3iXv8pxitTbP3oPTY87UZmnFyx6DzFWCjNIzrE8ACHm2PaNcTSfpCJD29/cTng=="
+ },
+ "TrieNet": {
+ "type": "Direct",
+ "requested": "[1.0.3.26316, )",
+ "resolved": "1.0.3.26316",
+ "contentHash": "H9Qo4oF+jVlhFznnDbic/gZ1vlEiXI3XTkfWGWK0tES1yh6lXHtYrRiZGRlhx6FGbkcwCCSCxr0ZvqgKu9usmw=="
+ },
+ "Duey.Abstractions": {
+ "type": "Transitive",
+ "resolved": "2.0.0",
+ "contentHash": "KP3l7yZoT1uMk8B+rAjZ3VL+2/XfXZxKTx31wDz7JNfcPnUmllJpgoqnDYQcVEJ5e4WLWToBQHZ3OIgOm6T/kg=="
+ },
+ "Microsoft.Extensions.Configuration.Abstractions": {
+ "type": "Transitive",
+ "resolved": "8.0.0-rc.1.23419.4",
+ "contentHash": "tY5wKwXNZ6cBeyHxvxyLy57TxUaA6H82/vW8vTTmikG9bkfRzfyS0EEDloiPzL4ln8P+3aZxeAestjPC6942Kg==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "8.0.0-rc.1.23419.4"
+ }
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw=="
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "8.0.0-rc.1.23419.4",
+ "contentHash": "zyoB4zblhvpylS9VOmKyBuGH+RjKDsfi0cTB2KRPPDD6tFinpP+vGr3dictaNYLhGUg6jaBmq+2H/WZMCnvGDQ=="
+ },
+ "Microsoft.IO.RecyclableMemoryStream": {
+ "type": "Transitive",
+ "resolved": "2.3.2",
+ "contentHash": "Oh1qXXFdJFcHozvb4H6XYLf2W0meZFuG0A+TfapFPj9z5fd4vxiARGEhAaLj/6XWQaMYIv4SH/9Q6H78Hw0E2Q=="
+ },
+ "RBush": {
+ "type": "Transitive",
+ "resolved": "3.2.0",
+ "contentHash": "ijGh9N0zZ7JfXk3oQkWCwK8SwSSByexbyh/MjbCjNxOft9eG5ZqKC1vdgiYq78h4IZRFmN4s3JZ/b10Jipud5w=="
+ },
+ "edelstein.common.constants": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )"
+ }
+ },
+ "edelstein.common.utilities": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )",
+ "Microsoft.Extensions.Logging.Abstractions": "[7.0.0, )",
+ "Microsoft.IO.RecyclableMemoryStream": "[2.3.2, )",
+ "RBush": "[3.2.0, )"
+ }
+ },
+ "edelstein.protocol.gameplay": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Protocol.Network": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Social": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.gameplay.game": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Auth": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Server": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Social": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.gameplay.login": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Auth": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Server": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.network": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.plugin": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )",
+ "Microsoft.Extensions.Configuration.Abstractions": "[8.0.0-rc.1.23419.4, )",
+ "Microsoft.Extensions.Logging.Abstractions": "[7.0.0, )"
+ }
+ },
+ "edelstein.protocol.plugin.game": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Gameplay.Game": "[1.0.0, )",
+ "Edelstein.Protocol.Plugin": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.plugin.login": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Gameplay.Login": "[1.0.0, )",
+ "Edelstein.Protocol.Plugin": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.services.auth": {
+ "type": "Project"
+ },
+ "edelstein.protocol.services.server": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.services.social": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.utilities": {
+ "type": "Project"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/protocol/Edelstein.Protocol.Gameplay.Game/packages.lock.json b/src/protocol/Edelstein.Protocol.Gameplay.Game/packages.lock.json
new file mode 100644
index 000000000..7c19465bd
--- /dev/null
+++ b/src/protocol/Edelstein.Protocol.Gameplay.Game/packages.lock.json
@@ -0,0 +1,47 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {
+ "Duey.Abstractions": {
+ "type": "Direct",
+ "requested": "[2.0.0, )",
+ "resolved": "2.0.0",
+ "contentHash": "KP3l7yZoT1uMk8B+rAjZ3VL+2/XfXZxKTx31wDz7JNfcPnUmllJpgoqnDYQcVEJ5e4WLWToBQHZ3OIgOm6T/kg=="
+ },
+ "edelstein.protocol.gameplay": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Protocol.Network": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Social": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.network": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.services.auth": {
+ "type": "Project"
+ },
+ "edelstein.protocol.services.server": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.services.social": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.utilities": {
+ "type": "Project"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/protocol/Edelstein.Protocol.Gameplay.Login/packages.lock.json b/src/protocol/Edelstein.Protocol.Gameplay.Login/packages.lock.json
new file mode 100644
index 000000000..7c19465bd
--- /dev/null
+++ b/src/protocol/Edelstein.Protocol.Gameplay.Login/packages.lock.json
@@ -0,0 +1,47 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {
+ "Duey.Abstractions": {
+ "type": "Direct",
+ "requested": "[2.0.0, )",
+ "resolved": "2.0.0",
+ "contentHash": "KP3l7yZoT1uMk8B+rAjZ3VL+2/XfXZxKTx31wDz7JNfcPnUmllJpgoqnDYQcVEJ5e4WLWToBQHZ3OIgOm6T/kg=="
+ },
+ "edelstein.protocol.gameplay": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Protocol.Network": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Social": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.network": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.services.auth": {
+ "type": "Project"
+ },
+ "edelstein.protocol.services.server": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.services.social": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.utilities": {
+ "type": "Project"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/protocol/Edelstein.Protocol.Gameplay.Shop/packages.lock.json b/src/protocol/Edelstein.Protocol.Gameplay.Shop/packages.lock.json
new file mode 100644
index 000000000..7c19465bd
--- /dev/null
+++ b/src/protocol/Edelstein.Protocol.Gameplay.Shop/packages.lock.json
@@ -0,0 +1,47 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {
+ "Duey.Abstractions": {
+ "type": "Direct",
+ "requested": "[2.0.0, )",
+ "resolved": "2.0.0",
+ "contentHash": "KP3l7yZoT1uMk8B+rAjZ3VL+2/XfXZxKTx31wDz7JNfcPnUmllJpgoqnDYQcVEJ5e4WLWToBQHZ3OIgOm6T/kg=="
+ },
+ "edelstein.protocol.gameplay": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Protocol.Network": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Social": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.network": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.services.auth": {
+ "type": "Project"
+ },
+ "edelstein.protocol.services.server": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.services.social": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.utilities": {
+ "type": "Project"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/protocol/Edelstein.Protocol.Gameplay.Trade/packages.lock.json b/src/protocol/Edelstein.Protocol.Gameplay.Trade/packages.lock.json
new file mode 100644
index 000000000..7c19465bd
--- /dev/null
+++ b/src/protocol/Edelstein.Protocol.Gameplay.Trade/packages.lock.json
@@ -0,0 +1,47 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {
+ "Duey.Abstractions": {
+ "type": "Direct",
+ "requested": "[2.0.0, )",
+ "resolved": "2.0.0",
+ "contentHash": "KP3l7yZoT1uMk8B+rAjZ3VL+2/XfXZxKTx31wDz7JNfcPnUmllJpgoqnDYQcVEJ5e4WLWToBQHZ3OIgOm6T/kg=="
+ },
+ "edelstein.protocol.gameplay": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Protocol.Network": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Social": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.network": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.services.auth": {
+ "type": "Project"
+ },
+ "edelstein.protocol.services.server": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.services.social": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.utilities": {
+ "type": "Project"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/protocol/Edelstein.Protocol.Gameplay/packages.lock.json b/src/protocol/Edelstein.Protocol.Gameplay/packages.lock.json
new file mode 100644
index 000000000..296eddbe7
--- /dev/null
+++ b/src/protocol/Edelstein.Protocol.Gameplay/packages.lock.json
@@ -0,0 +1,28 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {
+ "Duey.Abstractions": {
+ "type": "Direct",
+ "requested": "[2.0.0, )",
+ "resolved": "2.0.0",
+ "contentHash": "KP3l7yZoT1uMk8B+rAjZ3VL+2/XfXZxKTx31wDz7JNfcPnUmllJpgoqnDYQcVEJ5e4WLWToBQHZ3OIgOm6T/kg=="
+ },
+ "edelstein.protocol.network": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.services.social": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.utilities": {
+ "type": "Project"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/protocol/Edelstein.Protocol.Network/packages.lock.json b/src/protocol/Edelstein.Protocol.Network/packages.lock.json
new file mode 100644
index 000000000..f1cf99cd6
--- /dev/null
+++ b/src/protocol/Edelstein.Protocol.Network/packages.lock.json
@@ -0,0 +1,10 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {
+ "edelstein.protocol.utilities": {
+ "type": "Project"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/protocol/Edelstein.Protocol.Plugin.Game/packages.lock.json b/src/protocol/Edelstein.Protocol.Plugin.Game/packages.lock.json
new file mode 100644
index 000000000..54541c49a
--- /dev/null
+++ b/src/protocol/Edelstein.Protocol.Plugin.Game/packages.lock.json
@@ -0,0 +1,82 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {
+ "Duey.Abstractions": {
+ "type": "Transitive",
+ "resolved": "2.0.0",
+ "contentHash": "KP3l7yZoT1uMk8B+rAjZ3VL+2/XfXZxKTx31wDz7JNfcPnUmllJpgoqnDYQcVEJ5e4WLWToBQHZ3OIgOm6T/kg=="
+ },
+ "Microsoft.Extensions.Configuration.Abstractions": {
+ "type": "Transitive",
+ "resolved": "8.0.0-rc.1.23419.4",
+ "contentHash": "tY5wKwXNZ6cBeyHxvxyLy57TxUaA6H82/vW8vTTmikG9bkfRzfyS0EEDloiPzL4ln8P+3aZxeAestjPC6942Kg==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "8.0.0-rc.1.23419.4"
+ }
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw=="
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "8.0.0-rc.1.23419.4",
+ "contentHash": "zyoB4zblhvpylS9VOmKyBuGH+RjKDsfi0cTB2KRPPDD6tFinpP+vGr3dictaNYLhGUg6jaBmq+2H/WZMCnvGDQ=="
+ },
+ "edelstein.protocol.gameplay": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Protocol.Network": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Social": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.gameplay.game": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Auth": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Server": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Social": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.network": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.plugin": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )",
+ "Microsoft.Extensions.Configuration.Abstractions": "[8.0.0-rc.1.23419.4, )",
+ "Microsoft.Extensions.Logging.Abstractions": "[7.0.0, )"
+ }
+ },
+ "edelstein.protocol.services.auth": {
+ "type": "Project"
+ },
+ "edelstein.protocol.services.server": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.services.social": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.utilities": {
+ "type": "Project"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/protocol/Edelstein.Protocol.Plugin.Login/packages.lock.json b/src/protocol/Edelstein.Protocol.Plugin.Login/packages.lock.json
new file mode 100644
index 000000000..7094a389b
--- /dev/null
+++ b/src/protocol/Edelstein.Protocol.Plugin.Login/packages.lock.json
@@ -0,0 +1,81 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {
+ "Duey.Abstractions": {
+ "type": "Transitive",
+ "resolved": "2.0.0",
+ "contentHash": "KP3l7yZoT1uMk8B+rAjZ3VL+2/XfXZxKTx31wDz7JNfcPnUmllJpgoqnDYQcVEJ5e4WLWToBQHZ3OIgOm6T/kg=="
+ },
+ "Microsoft.Extensions.Configuration.Abstractions": {
+ "type": "Transitive",
+ "resolved": "8.0.0-rc.1.23419.4",
+ "contentHash": "tY5wKwXNZ6cBeyHxvxyLy57TxUaA6H82/vW8vTTmikG9bkfRzfyS0EEDloiPzL4ln8P+3aZxeAestjPC6942Kg==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "8.0.0-rc.1.23419.4"
+ }
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw=="
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "8.0.0-rc.1.23419.4",
+ "contentHash": "zyoB4zblhvpylS9VOmKyBuGH+RjKDsfi0cTB2KRPPDD6tFinpP+vGr3dictaNYLhGUg6jaBmq+2H/WZMCnvGDQ=="
+ },
+ "edelstein.protocol.gameplay": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Protocol.Network": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Social": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.gameplay.login": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Auth": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Server": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.network": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.plugin": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )",
+ "Microsoft.Extensions.Configuration.Abstractions": "[8.0.0-rc.1.23419.4, )",
+ "Microsoft.Extensions.Logging.Abstractions": "[7.0.0, )"
+ }
+ },
+ "edelstein.protocol.services.auth": {
+ "type": "Project"
+ },
+ "edelstein.protocol.services.server": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.services.social": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.utilities": {
+ "type": "Project"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/protocol/Edelstein.Protocol.Plugin.Shop/packages.lock.json b/src/protocol/Edelstein.Protocol.Plugin.Shop/packages.lock.json
new file mode 100644
index 000000000..9712f719a
--- /dev/null
+++ b/src/protocol/Edelstein.Protocol.Plugin.Shop/packages.lock.json
@@ -0,0 +1,82 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {
+ "Duey.Abstractions": {
+ "type": "Transitive",
+ "resolved": "2.0.0",
+ "contentHash": "KP3l7yZoT1uMk8B+rAjZ3VL+2/XfXZxKTx31wDz7JNfcPnUmllJpgoqnDYQcVEJ5e4WLWToBQHZ3OIgOm6T/kg=="
+ },
+ "Microsoft.Extensions.Configuration.Abstractions": {
+ "type": "Transitive",
+ "resolved": "8.0.0-rc.1.23419.4",
+ "contentHash": "tY5wKwXNZ6cBeyHxvxyLy57TxUaA6H82/vW8vTTmikG9bkfRzfyS0EEDloiPzL4ln8P+3aZxeAestjPC6942Kg==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "8.0.0-rc.1.23419.4"
+ }
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw=="
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "8.0.0-rc.1.23419.4",
+ "contentHash": "zyoB4zblhvpylS9VOmKyBuGH+RjKDsfi0cTB2KRPPDD6tFinpP+vGr3dictaNYLhGUg6jaBmq+2H/WZMCnvGDQ=="
+ },
+ "edelstein.protocol.gameplay": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Protocol.Network": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Social": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.gameplay.shop": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Auth": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Server": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.network": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.plugin": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )",
+ "Microsoft.Extensions.Configuration.Abstractions": "[8.0.0-rc.1.23419.4, )",
+ "Microsoft.Extensions.Logging.Abstractions": "[7.0.0, )"
+ }
+ },
+ "edelstein.protocol.services.auth": {
+ "type": "Project"
+ },
+ "edelstein.protocol.services.server": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.services.social": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.utilities": {
+ "type": "Project"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/protocol/Edelstein.Protocol.Plugin.Trade/packages.lock.json b/src/protocol/Edelstein.Protocol.Plugin.Trade/packages.lock.json
new file mode 100644
index 000000000..591f1e4dd
--- /dev/null
+++ b/src/protocol/Edelstein.Protocol.Plugin.Trade/packages.lock.json
@@ -0,0 +1,82 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {
+ "Duey.Abstractions": {
+ "type": "Transitive",
+ "resolved": "2.0.0",
+ "contentHash": "KP3l7yZoT1uMk8B+rAjZ3VL+2/XfXZxKTx31wDz7JNfcPnUmllJpgoqnDYQcVEJ5e4WLWToBQHZ3OIgOm6T/kg=="
+ },
+ "Microsoft.Extensions.Configuration.Abstractions": {
+ "type": "Transitive",
+ "resolved": "8.0.0-rc.1.23419.4",
+ "contentHash": "tY5wKwXNZ6cBeyHxvxyLy57TxUaA6H82/vW8vTTmikG9bkfRzfyS0EEDloiPzL4ln8P+3aZxeAestjPC6942Kg==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "8.0.0-rc.1.23419.4"
+ }
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw=="
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "8.0.0-rc.1.23419.4",
+ "contentHash": "zyoB4zblhvpylS9VOmKyBuGH+RjKDsfi0cTB2KRPPDD6tFinpP+vGr3dictaNYLhGUg6jaBmq+2H/WZMCnvGDQ=="
+ },
+ "edelstein.protocol.gameplay": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Protocol.Network": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Social": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.gameplay.trade": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Auth": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Server": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.network": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.plugin": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )",
+ "Microsoft.Extensions.Configuration.Abstractions": "[8.0.0-rc.1.23419.4, )",
+ "Microsoft.Extensions.Logging.Abstractions": "[7.0.0, )"
+ }
+ },
+ "edelstein.protocol.services.auth": {
+ "type": "Project"
+ },
+ "edelstein.protocol.services.server": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Gameplay": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.services.social": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.utilities": {
+ "type": "Project"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/protocol/Edelstein.Protocol.Plugin/Edelstein.Protocol.Plugin.csproj b/src/protocol/Edelstein.Protocol.Plugin/Edelstein.Protocol.Plugin.csproj
index 651399f48..f137b5568 100644
--- a/src/protocol/Edelstein.Protocol.Plugin/Edelstein.Protocol.Plugin.csproj
+++ b/src/protocol/Edelstein.Protocol.Plugin/Edelstein.Protocol.Plugin.csproj
@@ -7,7 +7,7 @@
-
+
diff --git a/src/protocol/Edelstein.Protocol.Plugin/packages.lock.json b/src/protocol/Edelstein.Protocol.Plugin/packages.lock.json
new file mode 100644
index 000000000..37f227e62
--- /dev/null
+++ b/src/protocol/Edelstein.Protocol.Plugin/packages.lock.json
@@ -0,0 +1,30 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {
+ "Microsoft.Extensions.Configuration.Abstractions": {
+ "type": "Direct",
+ "requested": "[8.0.0-rc.1.23419.4, )",
+ "resolved": "8.0.0-rc.1.23419.4",
+ "contentHash": "tY5wKwXNZ6cBeyHxvxyLy57TxUaA6H82/vW8vTTmikG9bkfRzfyS0EEDloiPzL4ln8P+3aZxeAestjPC6942Kg==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "8.0.0-rc.1.23419.4"
+ }
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Direct",
+ "requested": "[7.0.0, )",
+ "resolved": "7.0.0",
+ "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw=="
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "8.0.0-rc.1.23419.4",
+ "contentHash": "zyoB4zblhvpylS9VOmKyBuGH+RjKDsfi0cTB2KRPPDD6tFinpP+vGr3dictaNYLhGUg6jaBmq+2H/WZMCnvGDQ=="
+ },
+ "edelstein.protocol.utilities": {
+ "type": "Project"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/protocol/Edelstein.Protocol.Scripting/packages.lock.json b/src/protocol/Edelstein.Protocol.Scripting/packages.lock.json
new file mode 100644
index 000000000..807ab822b
--- /dev/null
+++ b/src/protocol/Edelstein.Protocol.Scripting/packages.lock.json
@@ -0,0 +1,6 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {}
+ }
+}
\ No newline at end of file
diff --git a/src/protocol/Edelstein.Protocol.Services.Auth/packages.lock.json b/src/protocol/Edelstein.Protocol.Services.Auth/packages.lock.json
new file mode 100644
index 000000000..807ab822b
--- /dev/null
+++ b/src/protocol/Edelstein.Protocol.Services.Auth/packages.lock.json
@@ -0,0 +1,6 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {}
+ }
+}
\ No newline at end of file
diff --git a/src/protocol/Edelstein.Protocol.Services.Server/packages.lock.json b/src/protocol/Edelstein.Protocol.Services.Server/packages.lock.json
new file mode 100644
index 000000000..bb28e8006
--- /dev/null
+++ b/src/protocol/Edelstein.Protocol.Services.Server/packages.lock.json
@@ -0,0 +1,36 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {
+ "Duey.Abstractions": {
+ "type": "Transitive",
+ "resolved": "2.0.0",
+ "contentHash": "KP3l7yZoT1uMk8B+rAjZ3VL+2/XfXZxKTx31wDz7JNfcPnUmllJpgoqnDYQcVEJ5e4WLWToBQHZ3OIgOm6T/kg=="
+ },
+ "edelstein.protocol.gameplay": {
+ "type": "Project",
+ "dependencies": {
+ "Duey.Abstractions": "[2.0.0, )",
+ "Edelstein.Protocol.Network": "[1.0.0, )",
+ "Edelstein.Protocol.Services.Social": "[1.0.0, )",
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.network": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.services.social": {
+ "type": "Project",
+ "dependencies": {
+ "Edelstein.Protocol.Utilities": "[1.0.0, )"
+ }
+ },
+ "edelstein.protocol.utilities": {
+ "type": "Project"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/protocol/Edelstein.Protocol.Services.Social/packages.lock.json b/src/protocol/Edelstein.Protocol.Services.Social/packages.lock.json
new file mode 100644
index 000000000..f1cf99cd6
--- /dev/null
+++ b/src/protocol/Edelstein.Protocol.Services.Social/packages.lock.json
@@ -0,0 +1,10 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {
+ "edelstein.protocol.utilities": {
+ "type": "Project"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/protocol/Edelstein.Protocol.Utilities/Repositories/Methods/IRepositoryMethodFreeze.cs b/src/protocol/Edelstein.Protocol.Utilities/Repositories/Methods/IRepositoryMethodFreeze.cs
new file mode 100644
index 000000000..9acb44fd3
--- /dev/null
+++ b/src/protocol/Edelstein.Protocol.Utilities/Repositories/Methods/IRepositoryMethodFreeze.cs
@@ -0,0 +1,6 @@
+namespace Edelstein.Protocol.Utilities.Repositories.Methods;
+
+public interface IRepositoryMethodFreeze
+{
+ void Freeze();
+}
diff --git a/src/protocol/Edelstein.Protocol.Utilities/Templates/ITemplateManager.cs b/src/protocol/Edelstein.Protocol.Utilities/Templates/ITemplateManager.cs
index 8b0f26b7e..a7d439dc0 100644
--- a/src/protocol/Edelstein.Protocol.Utilities/Templates/ITemplateManager.cs
+++ b/src/protocol/Edelstein.Protocol.Utilities/Templates/ITemplateManager.cs
@@ -5,7 +5,8 @@ namespace Edelstein.Protocol.Utilities.Templates;
public interface ITemplateManager :
IRepositoryMethodRetrieve,
IRepositoryMethodRetrieveAll,
- IRepositoryMethodInsert>
+ IRepositoryMethodInsert>,
+ IRepositoryMethodFreeze
where TTemplate : ITemplate
{
int Count { get; }
diff --git a/src/protocol/Edelstein.Protocol.Utilities/packages.lock.json b/src/protocol/Edelstein.Protocol.Utilities/packages.lock.json
new file mode 100644
index 000000000..807ab822b
--- /dev/null
+++ b/src/protocol/Edelstein.Protocol.Utilities/packages.lock.json
@@ -0,0 +1,6 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {}
+ }
+}
\ No newline at end of file