mirror of
https://github.com/NuclearPowered/Reactor.git
synced 2026-10-19 15:51:54 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
100b89125c | ||
|
|
04100970b6 | ||
|
|
16c8c3e553 | ||
|
|
c3775ff33f | ||
|
|
6381d79a18 | ||
|
|
5818041b27 | ||
|
|
a1f6164ca0 | ||
|
|
9bd370bfc1 | ||
|
|
5cb6c35dac | ||
|
|
8505eb5974 | ||
|
|
b1fa5410c9 | ||
|
|
26bd155a42 | ||
|
|
859183a849 | ||
|
|
c58ccc1643 | ||
|
|
3229475361 | ||
|
|
db452bf7e4 | ||
|
|
7b7ba31e94 | ||
|
|
ccade1be0e | ||
|
|
c91706bd67 | ||
|
|
25964208ac | ||
|
|
d50b40ab35 | ||
|
|
e27a79249e | ||
|
|
2c1eeaff9d | ||
|
|
7d3ffa3975 | ||
|
|
2b357512c4 | ||
|
|
32875a2d3d | ||
|
|
de3b20e205 | ||
|
|
bbdbd5bec8 | ||
|
|
f55036efbc | ||
|
|
809b8957a4 | ||
|
|
27e8cb12e5 |
No files matched your search
+10
-10
@@ -4,14 +4,14 @@ on: ["push", "pull_request"]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
- uses: actions/cache@v3
|
||||
- uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
~/.nuget/packages
|
||||
@@ -21,36 +21,36 @@ jobs:
|
||||
${{ runner.os }}-nuget-
|
||||
|
||||
- name: Setup .NET
|
||||
uses: actions/setup-dotnet@v2
|
||||
uses: actions/setup-dotnet@v4
|
||||
with:
|
||||
dotnet-version: 8.0.x
|
||||
|
||||
- name: Run the Cake script
|
||||
uses: cake-build/cake-action@v1
|
||||
uses: cake-build/cake-action@v3
|
||||
with:
|
||||
verbosity: Diagnostic
|
||||
|
||||
- uses: actions/upload-artifact@v3
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: Reactor.dll
|
||||
path: Reactor/bin/Release/net6.0/Reactor.dll
|
||||
|
||||
- uses: actions/upload-artifact@v3
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: Reactor.nupkg
|
||||
path: Reactor/bin/Release/Reactor.*.nupkg
|
||||
|
||||
- uses: actions/upload-artifact@v3
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: Reactor.Networking.Shared.nupkg
|
||||
path: Reactor.Networking.Shared/bin/Release/*.nupkg
|
||||
|
||||
- uses: actions/upload-artifact@v3
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: Reactor.Debugger.dll
|
||||
path: Reactor.Debugger/bin/Release/net6.0/Reactor.Debugger.dll
|
||||
|
||||
- uses: softprops/action-gh-release@v1
|
||||
- uses: softprops/action-gh-release@v2
|
||||
if: github.ref_type == 'tag'
|
||||
with:
|
||||
draft: true
|
||||
|
||||
+3
-3
@@ -1,10 +1,10 @@
|
||||
<Project>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="BepInEx.Unity.IL2CPP" Version="6.0.0-be.679" Private="false" ExcludeAssets="runtime;native" />
|
||||
<PackageReference Include="AmongUs.GameLibs.Steam" Version="2024.6.18" PrivateAssets="all" />
|
||||
<PackageReference Include="BepInEx.Unity.IL2CPP" Version="6.0.0-be.735" Private="false" ExcludeAssets="runtime;native" />
|
||||
<PackageReference Include="AmongUs.GameLibs.Steam" Version="2025.4.15" PrivateAssets="all" />
|
||||
|
||||
<PackageReference Include="BepInEx.AutoPlugin" Version="1.1.0" PrivateAssets="all" />
|
||||
<PackageReference Include="BepInEx.IL2CPP.MSBuild" Version="2.0.1" PrivateAssets="all" ExcludeAssets="runtime" />
|
||||
<PackageReference Include="BepInEx.IL2CPP.MSBuild" Version="2.1.0-rc.1" PrivateAssets="all" ExcludeAssets="runtime" />
|
||||
</ItemGroup>
|
||||
|
||||
<Target Name="Copy" AfterTargets="Build" Condition="'$(AmongUs)' != ''">
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
<RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>
|
||||
|
||||
<VersionPrefix>2.2.0</VersionPrefix>
|
||||
<VersionPrefix>2.5.1</VersionPrefix>
|
||||
<VersionSuffix>dev</VersionSuffix>
|
||||
|
||||
<Authors>NuclearPowered</Authors>
|
||||
@@ -35,7 +35,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="StyleCop.Analyzers" Version="1.2.0-beta.507" PrivateAssets="all" />
|
||||
<PackageReference Include="StyleCop.Analyzers" Version="1.2.0-beta.556" PrivateAssets="all" />
|
||||
<AdditionalFiles Include="$(MSBuildThisFileDirectory)\stylecop.json" Link="stylecop.json" Visible="false" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup>
|
||||
|
||||
@@ -29,7 +29,7 @@ public class AssetBundleBenchmarks
|
||||
|
||||
public static IEnumerable<string> ValuesForAssetBundleName()
|
||||
{
|
||||
yield return $"default-{AssetBundleManager.TargetName}{AssetBundleManager.BundleExtension}";
|
||||
yield return $"{AssetBundleManager.GetFileName("default", false)}";
|
||||
// yield return "submerged";
|
||||
}
|
||||
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
"net6.0": {
|
||||
"AmongUs.GameLibs.Steam": {
|
||||
"type": "Direct",
|
||||
"requested": "[2024.6.18, )",
|
||||
"resolved": "2024.6.18",
|
||||
"contentHash": "xb+HP1xXn4/ES8AgXpk9xeoW568LFYw5NTjY6bHwd6vQjHDf2kT1xHMmQ1me5Vfee/Gp69YIMZDXUAUToG7Elg=="
|
||||
"requested": "[2025.4.15, )",
|
||||
"resolved": "2025.4.15",
|
||||
"contentHash": "R3RxzHGZOGUJ9nMwrP0cjS6g+sh60QUU506Mo47lh17155enUjH6PtErijihSoU7t3aQpzCIyC67W3XrrHhH4g=="
|
||||
},
|
||||
"BenchmarkDotNet": {
|
||||
"type": "Direct",
|
||||
@@ -34,70 +34,82 @@
|
||||
},
|
||||
"BepInEx.IL2CPP.MSBuild": {
|
||||
"type": "Direct",
|
||||
"requested": "[2.0.1, )",
|
||||
"resolved": "2.0.1",
|
||||
"contentHash": "hUZjCV0t8dkw/Z/zq4Zl405QP7frBk/LVfMdUmUz+7XOhGd7lYPKrR48A5vbGl2QeHudMxlkXzAr9WM3Duq2SQ=="
|
||||
"requested": "[2.1.0-rc.1, )",
|
||||
"resolved": "2.1.0-rc.1",
|
||||
"contentHash": "WI/7TbJwWl5P4B6UXGtKI1VMe6fA6h3fcbp3ZjJKqOBQ5MJfDMmeVB4fb+RW1tUQdxnlSWV3Ul62PHFyTqp4PA=="
|
||||
},
|
||||
"BepInEx.Unity.IL2CPP": {
|
||||
"type": "Direct",
|
||||
"requested": "[6.0.0-be.679, )",
|
||||
"resolved": "6.0.0-be.679",
|
||||
"contentHash": "KnfMjWSXI5+dxbkLCy8VssEnZtTN3MXUHDdBkvPbMiZ6oR1RGZWdLlA90/XQkY/4kMA5P4OCZP4eQ1o0XftbSQ==",
|
||||
"requested": "[6.0.0-be.735, )",
|
||||
"resolved": "6.0.0-be.735",
|
||||
"contentHash": "2+eFJGKMR1GFPeU9wuF+TVrMANIaWIc/6N9e8x4b7b/fNiY9B6vicYNiMDb2deYQpWZtOei+2btnar5dDE5BPg==",
|
||||
"dependencies": {
|
||||
"BepInEx.Core": "6.0.0-be.679",
|
||||
"BepInEx.Unity.Common": "6.0.0-be.679",
|
||||
"HarmonyX": "2.10.1",
|
||||
"Iced": "1.18.0",
|
||||
"Il2CppInterop.Generator": "1.4.6-ci.389",
|
||||
"Il2CppInterop.HarmonySupport": "1.4.6-ci.389",
|
||||
"Il2CppInterop.Runtime": "1.4.6-ci.389",
|
||||
"MonoMod.RuntimeDetour": "22.5.1.1",
|
||||
"Samboy063.Cpp2IL.Core": "2022.1.0-development.866"
|
||||
"BepInEx.Core": "6.0.0-be.735",
|
||||
"BepInEx.Unity.Common": "6.0.0-be.735",
|
||||
"HarmonyX": "2.10.2",
|
||||
"Iced": "1.21.0",
|
||||
"Il2CppInterop.Generator": "1.4.6-ci.426",
|
||||
"Il2CppInterop.HarmonySupport": "1.4.6-ci.426",
|
||||
"Il2CppInterop.Runtime": "1.4.6-ci.426",
|
||||
"MonoMod.RuntimeDetour": "22.7.31.1",
|
||||
"Samboy063.Cpp2IL.Core": "2022.1.0-pre-release.19"
|
||||
}
|
||||
},
|
||||
"StyleCop.Analyzers": {
|
||||
"type": "Direct",
|
||||
"requested": "[1.2.0-beta.507, )",
|
||||
"resolved": "1.2.0-beta.507",
|
||||
"contentHash": "/FtugDT66cKJJ+GGH7rNpG6UDrT4iIWz45M6lrXXHobDUFDHw+q5VgkbiR+6ffTO564ge7w6fQh/eoQhVdJO8Q==",
|
||||
"requested": "[1.2.0-beta.556, )",
|
||||
"resolved": "1.2.0-beta.556",
|
||||
"contentHash": "llRPgmA1fhC0I0QyFLEcjvtM2239QzKr/tcnbsjArLMJxJlu0AA5G7Fft0OI30pHF3MW63Gf4aSSsjc5m82J1Q==",
|
||||
"dependencies": {
|
||||
"StyleCop.Analyzers.Unstable": "1.2.0.507"
|
||||
"StyleCop.Analyzers.Unstable": "1.2.0.556"
|
||||
}
|
||||
},
|
||||
"AsmResolver": {
|
||||
"type": "Transitive",
|
||||
"resolved": "5.1.0",
|
||||
"contentHash": "7PjujQzgQ3wjzqZYT4CY8SV6zx7FY6swIwj3Yk4QLolLqo9sBPb7FLF3W30QFvCsCkNfiVWXlSbeZKs4xGgQOQ=="
|
||||
"resolved": "6.0.0-beta.1",
|
||||
"contentHash": "M5btCR/rmrx32jZsoN6CLQ/VQk8lN8hvPb6lgojua7pjNoo7StAl92koMC8qz4vzZyH2CNqxLSDoswRvyyK/vA=="
|
||||
},
|
||||
"AsmResolver.DotNet": {
|
||||
"type": "Transitive",
|
||||
"resolved": "5.1.0",
|
||||
"contentHash": "oKrBU94OaSrbbTwydvpLRFalYxozrNXGkl13nIkm823ZFQtPNYOiOMJb5DQLvkCJlWyis7q865tg803T5zg9IA==",
|
||||
"resolved": "6.0.0-beta.1",
|
||||
"contentHash": "PTq8nNQvhgTxF1iARCknffCsu7Iq9B0kN7TVC8iMaU7uEYog3xvVqH/0+TreY8GW74/+MqhZt/yEFsvS4oAduQ==",
|
||||
"dependencies": {
|
||||
"AsmResolver.PE": "5.1.0",
|
||||
"System.Text.Json": "6.0.7"
|
||||
"AsmResolver.PE": "6.0.0-beta.1"
|
||||
}
|
||||
},
|
||||
"AsmResolver.PE": {
|
||||
"type": "Transitive",
|
||||
"resolved": "5.1.0",
|
||||
"contentHash": "XD3iAgLSInJIODKUUlpHWXf8MR9H1SFMb1lsmabb4GxxxnDQRPjMxjglv2NOCjQQuNB2Oh0bvjHE7ewf82UqyQ==",
|
||||
"resolved": "6.0.0-beta.1",
|
||||
"contentHash": "KadLvx/zzFCJyF+E4jG6jPE1d0iJquzL6+hm8GBivBAs6nwHC8s6g4c857QwQCzXMWza6Vz5Q+3hFiNuOfKaWQ==",
|
||||
"dependencies": {
|
||||
"AsmResolver.PE.File": "5.1.0"
|
||||
"AsmResolver.PE.File": "6.0.0-beta.1"
|
||||
}
|
||||
},
|
||||
"AsmResolver.PE.File": {
|
||||
"type": "Transitive",
|
||||
"resolved": "5.1.0",
|
||||
"contentHash": "YituBYe0Fh471sXQMfu+f4tWKX/JZvRwrX6g/SVsr4XkUIUzYi/aGT3/QvjHoYx19fE1KYOB6zBKqPkkOK7HPw==",
|
||||
"resolved": "6.0.0-beta.1",
|
||||
"contentHash": "+lusB9UMHevI5aQsu73NQ1ctPMLFvyHAsEf8vjaJ/py+kX1DkU0JkbERtBRmaf58/hBZ7cyrE7gFnjoo7Bbg7A==",
|
||||
"dependencies": {
|
||||
"AsmResolver": "5.1.0"
|
||||
"AsmResolver": "6.0.0-beta.1"
|
||||
}
|
||||
},
|
||||
"AssetRipper.VersionUtilities": {
|
||||
"AssetRipper.CIL": {
|
||||
"type": "Transitive",
|
||||
"resolved": "1.3.1",
|
||||
"contentHash": "/1D18NOpqm7rS7+qVUbAReVMNWwgDuYpsnf0RkX1Aah/I0a0irqldoFJ+Kku7YdbSm0zqD+Z6iYUGKoP3GwTNQ=="
|
||||
"resolved": "1.1.2",
|
||||
"contentHash": "BRPcHORadIzSFkrVOvGkSs54j19mQdXH8dmRTVM51mS8MZLSbTpi9CDPpnWN2IdDsILUrAqbPUFo3zJodYxErw==",
|
||||
"dependencies": {
|
||||
"AsmResolver.DotNet": "6.0.0-beta.1"
|
||||
}
|
||||
},
|
||||
"AssetRipper.Gee.External.Capstone": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.3.2",
|
||||
"contentHash": "wOr5PQPL/2ZfD7+ebt6cpRbUhSzSY5nlHGHjjzuQRiU5zkQlqQNwWDLX0M3smrm5IkaDvONkmDjFMKTlZJmyuQ=="
|
||||
},
|
||||
"AssetRipper.Primitives": {
|
||||
"type": "Transitive",
|
||||
"resolved": "3.1.3",
|
||||
"contentHash": "djZbN/+EXmI+Oia9Pm0LyjZVCPLf60TPSL5rGb7mBEYM5F4CN3nPFXvl2yA5LanPZoHS1Yq7PghGUmkP7Pv9RQ=="
|
||||
},
|
||||
"BenchmarkDotNet.Annotations": {
|
||||
"type": "Transitive",
|
||||
@@ -106,21 +118,21 @@
|
||||
},
|
||||
"BepInEx.Core": {
|
||||
"type": "Transitive",
|
||||
"resolved": "6.0.0-be.679",
|
||||
"contentHash": "yg6NSGeevv86P2ERe3VDEa7W/l0lmM7m+AdPSW78dcBOe36Zc3QK/vmNEq57txGa+1kwv+macXLSwkL4UpucjA==",
|
||||
"resolved": "6.0.0-be.735",
|
||||
"contentHash": "FuHm9UCzjSKeiZJc3IF70Fiuqi+FynRn62PwBoOeZcHK3/qm+vl1YwbZyFlmUyf45g+UKxg2Td40iZGx88LVAQ==",
|
||||
"dependencies": {
|
||||
"HarmonyX": "2.10.1",
|
||||
"MonoMod.Utils": "22.5.1.1",
|
||||
"HarmonyX": "2.10.2",
|
||||
"MonoMod.Utils": "22.7.31.1",
|
||||
"SemanticVersioning": "2.0.2"
|
||||
}
|
||||
},
|
||||
"BepInEx.Unity.Common": {
|
||||
"type": "Transitive",
|
||||
"resolved": "6.0.0-be.679",
|
||||
"contentHash": "q4Sux3ULBDasSQAtlAWzAKpAfCyV3ujxVJpK7ydV1bUIksaHNqw9yYTLCUrw8p4DQ/wHvShECFjzeMGHi+wylA==",
|
||||
"resolved": "6.0.0-be.735",
|
||||
"contentHash": "vmK//OBSr+jotqTk//HSdvHtMFTKu+NlQkiEsvr0dZApTVmQM2AgpVMhEAakQPmrSsM6LRJIHCBcLFO1ypfMPQ==",
|
||||
"dependencies": {
|
||||
"AssetRipper.VersionUtilities": "1.2.1",
|
||||
"MonoMod.Utils": "22.5.1.1"
|
||||
"AssetRipper.Primitives": "3.1.3",
|
||||
"MonoMod.Utils": "22.7.31.1"
|
||||
}
|
||||
},
|
||||
"CommandLineParser": {
|
||||
@@ -130,8 +142,8 @@
|
||||
},
|
||||
"Disarm": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2022.1.0-master.26",
|
||||
"contentHash": "YnZEbRGr0nG+N3G8WbRQ4Lkg8dTD3oso9iJlCVBmyhEyhLyqs+drBs1kWQbQqFPnb9mi/RJ++R9bPb+L3HF03Q=="
|
||||
"resolved": "2022.1.0-master.57",
|
||||
"contentHash": "/dkg7hg8iPBQN4bTV1lMQacarH6fMpgUXhJuo6iI7Wv7YpH7g5F9hJfje7dSMhqG0YlDacLuyWvcph5GzKUXog=="
|
||||
},
|
||||
"Gee.External.Capstone": {
|
||||
"type": "Transitive",
|
||||
@@ -140,8 +152,8 @@
|
||||
},
|
||||
"HarmonyX": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.10.1",
|
||||
"contentHash": "9LodMC9Y0u1TW96eKJoWrFJFpmzbgojEO38/Q+e7c1mFPhmHt8xcR8qhI06iF1rf0Dnsk+hqENFVSgbtwl/bEw==",
|
||||
"resolved": "2.10.2",
|
||||
"contentHash": "/5WwkxXX8mPsRuigQt957rJGx1f0dDQxk+bvk4yYITKFjXas9Em+O71zEP8X0ym8OFQQ2XH/2SxS4NC7vEC+Xg==",
|
||||
"dependencies": {
|
||||
"MonoMod.RuntimeDetour": "22.3.23.4",
|
||||
"System.Reflection.Emit": "4.7.0"
|
||||
@@ -149,13 +161,13 @@
|
||||
},
|
||||
"Iced": {
|
||||
"type": "Transitive",
|
||||
"resolved": "1.18.0",
|
||||
"contentHash": "G60lZOvbvqttA+SBSv/yY6/wUboXKJlkffhSNR9iOrx0M5gpcK1TRr6xrFR+qAhqIAhvrsPF1jkn9fYb4lEufQ=="
|
||||
"resolved": "1.21.0",
|
||||
"contentHash": "dv5+81Q1TBQvVMSOOOmRcjJmvWcX3BZPZsIq31+RLc5cNft0IHAyNlkdb7ZarOWG913PyBoFDsDXoCIlKmLclg=="
|
||||
},
|
||||
"Il2CppInterop.Common": {
|
||||
"type": "Transitive",
|
||||
"resolved": "1.4.6-ci.389",
|
||||
"contentHash": "KTyf2f66Q2mS9a6xhvoPWwD0VzRIoskPMVQehaVMo1dx4Di1FPFsKqukQ+ob6wgP5Rbnx53kiH0PY+IRSb35XA==",
|
||||
"resolved": "1.4.6-ci.426",
|
||||
"contentHash": "pI0kU0qqJKMP6z9eFz4+WJtGIwklfPxW2yWEY9vKnrN9bbYMusK3v5uFWV8al7S/HPSATV5jNWH1hyTvP7kglA==",
|
||||
"dependencies": {
|
||||
"Iced": "1.17.0",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "6.0.1",
|
||||
@@ -164,36 +176,31 @@
|
||||
},
|
||||
"Il2CppInterop.Generator": {
|
||||
"type": "Transitive",
|
||||
"resolved": "1.4.6-ci.389",
|
||||
"contentHash": "XJX4sn/RzAEBNIZZXuyDcLZrFx5tCoahujDu5aKWjApiMj/nTRQAxZn17daIIvd9aHqLaAfiWWth5QDLIt2bKw==",
|
||||
"resolved": "1.4.6-ci.426",
|
||||
"contentHash": "kecdx/vbNl0RtfzfYW592jU8PMyq1JbzpvoJSvqwO+tV6icp9SljXy6yG8bT/wt0gaPj9mFUNDTe2Wu6M6XGZQ==",
|
||||
"dependencies": {
|
||||
"Il2CppInterop.Common": "1.4.6-ci.389",
|
||||
"Il2CppInterop.Common": "1.4.6-ci.426",
|
||||
"Mono.Cecil": "0.11.3"
|
||||
}
|
||||
},
|
||||
"Il2CppInterop.HarmonySupport": {
|
||||
"type": "Transitive",
|
||||
"resolved": "1.4.6-ci.389",
|
||||
"contentHash": "Xd2zK6sLqwA0ReyUy83SWKcALwY99fq6vVL5gFOMN5Ct8OOVhtNIws0ysCWsfx1GL0RJiRYfR4pza/MmWRz4PQ==",
|
||||
"resolved": "1.4.6-ci.426",
|
||||
"contentHash": "rd2T5o6SybIc12hmX3HktTF5n27hFb0w4mNSExq7h1YsmrNlt7x+Ac1MBnnB0JwPLIg7w8LjnKjoIX6Gf626ng==",
|
||||
"dependencies": {
|
||||
"HarmonyX": "2.10.0",
|
||||
"Il2CppInterop.Runtime": "1.4.6-ci.389"
|
||||
"Il2CppInterop.Runtime": "1.4.6-ci.426"
|
||||
}
|
||||
},
|
||||
"Il2CppInterop.Runtime": {
|
||||
"type": "Transitive",
|
||||
"resolved": "1.4.6-ci.389",
|
||||
"contentHash": "nzYjuVzDG/O8+AQ8ax3WVHf+ZVsQKrVtp/yvuW8XoEPLdkbgryIrMo75dvN+tPqxOU3o2MPt9MZ9j25P5aVJMw==",
|
||||
"resolved": "1.4.6-ci.426",
|
||||
"contentHash": "0O0oI7gOqJixrsjvh1firhuGYK3Yr0uDLp6Q+t5CfcTMmeEX8Plk3pqAP9ZYyilBvh7uW0gv4Golqz08L1GXug==",
|
||||
"dependencies": {
|
||||
"Iced": "1.17.0",
|
||||
"Il2CppInterop.Common": "1.4.6-ci.389"
|
||||
"Il2CppInterop.Common": "1.4.6-ci.426"
|
||||
}
|
||||
},
|
||||
"js6pak.Gee.External.Capstone": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.1.0",
|
||||
"contentHash": "YYpq7NM50bSSVUDjXyV/eiITk6syXqItPjKBOb3jEWS6RFsk0DNhpWMPW6b3hKDmArARuWDU6S2pVu1IeVrvIA=="
|
||||
},
|
||||
"Microsoft.Bcl.AsyncInterfaces": {
|
||||
"type": "Transitive",
|
||||
"resolved": "1.1.0",
|
||||
@@ -347,11 +354,11 @@
|
||||
},
|
||||
"MonoMod.RuntimeDetour": {
|
||||
"type": "Transitive",
|
||||
"resolved": "22.5.1.1",
|
||||
"contentHash": "WG5zLRuAr8KJEnIkKTuIG1OJCrGIT3pjvnAD43E0FDchHf3Dp985MF/8tmIQvAzCZV87JNs6QKeGGqmwDmpXpw==",
|
||||
"resolved": "22.7.31.1",
|
||||
"contentHash": "nxVJTvQbWAujaogt5XX3eAy7d22t66Z88aWg9sirPLO9rR/6yNCHAyZpgxXrOsIobZVW0IEZPqNMOBhgke25/w==",
|
||||
"dependencies": {
|
||||
"Mono.Cecil": "0.11.4",
|
||||
"MonoMod.Utils": "22.5.1.1",
|
||||
"MonoMod.Utils": "22.7.31.1",
|
||||
"System.Collections.NonGeneric": "4.3.0",
|
||||
"System.ComponentModel.TypeConverter": "4.3.0",
|
||||
"System.IO.FileSystem.Primitives": "4.3.0",
|
||||
@@ -362,8 +369,8 @@
|
||||
},
|
||||
"MonoMod.Utils": {
|
||||
"type": "Transitive",
|
||||
"resolved": "22.5.1.1",
|
||||
"contentHash": "vBObO1atXxhi2C4AuC53y87Bqeogi9xIrD1Ym3YWr5uxc8Nrm8SrsFeD1i3x04R999+XQ3FdeHrbXScyWYEHqQ==",
|
||||
"resolved": "22.7.31.1",
|
||||
"contentHash": "nI0E1oadXS1iMbfwfCzYF08C1jRQR9cnnHv66a4BSPd4sGu2p6g4BmctCWsdAB6oGKkSJUhcfHfxcfTsDyB94Q==",
|
||||
"dependencies": {
|
||||
"Mono.Cecil": "0.11.4",
|
||||
"System.Collections.NonGeneric": "4.3.0",
|
||||
@@ -482,30 +489,31 @@
|
||||
},
|
||||
"Samboy063.Cpp2IL.Core": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2022.1.0-development.866",
|
||||
"contentHash": "QPMuix/3jRngWBdNSLhAbm9BHYf95Ln1Ph1eCK/cDZdVibxFDFP3a6Yczyx1p7GbN7bRQwrhs2skPJSS/z3m2w==",
|
||||
"resolved": "2022.1.0-pre-release.19",
|
||||
"contentHash": "mAYIrMo0VdOZzh1NS5bZeflg80gtYNY7kZo9q/blEYheUPyLXu5ozQOjX+Bq2yDh40pA+yiE2MXTnN2Is2hjgw==",
|
||||
"dependencies": {
|
||||
"AsmResolver.DotNet": "5.1.0",
|
||||
"Disarm": "2022.1.0-master.26",
|
||||
"Iced": "1.18.0",
|
||||
"Samboy063.LibCpp2IL": "2022.1.0-development.866",
|
||||
"StableNameDotNet": "0.1.0-development.866",
|
||||
"js6pak.Gee.External.Capstone": "2.1.0"
|
||||
"AsmResolver.DotNet": "6.0.0-beta.1",
|
||||
"AssetRipper.CIL": "1.1.2",
|
||||
"AssetRipper.Gee.External.Capstone": "2.3.2",
|
||||
"Disarm": "2022.1.0-master.57",
|
||||
"Iced": "1.21.0",
|
||||
"Samboy063.LibCpp2IL": "2022.1.0-pre-release.19",
|
||||
"StableNameDotNet": "0.1.0-pre-release.19"
|
||||
}
|
||||
},
|
||||
"Samboy063.LibCpp2IL": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2022.1.0-development.866",
|
||||
"contentHash": "EcJSWTfQko8SQozozoUT+aQJVWC8wj8C0YUiPBF4rNRId19yTKp2IXcXnI747v+8/aal222QR6WHfoBK2WlVLg==",
|
||||
"resolved": "2022.1.0-pre-release.19",
|
||||
"contentHash": "/n8p81ltd38BeNNS2xUNPGMSzxk/UGXr9cRNqG1MaLogzANNNrvCAXqWmNMM3tZctjp7vqTxEA+e4J4ngul8Fg==",
|
||||
"dependencies": {
|
||||
"AssetRipper.VersionUtilities": "1.3.1",
|
||||
"Samboy063.WasmDisassembler": "2022.1.0-development.866"
|
||||
"AssetRipper.Primitives": "3.1.3",
|
||||
"Samboy063.WasmDisassembler": "2022.1.0-pre-release.19"
|
||||
}
|
||||
},
|
||||
"Samboy063.WasmDisassembler": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2022.1.0-development.866",
|
||||
"contentHash": "2QK8F3eISkLcoW/Nt7wtxyQh31EXAqEMBVXXjEnuxyvXpBXxOIGpjmE3pWhGwxQwDCbe4zBsLF1zUiqq3/pXRA=="
|
||||
"resolved": "2022.1.0-pre-release.19",
|
||||
"contentHash": "uVQdYm/J6+jJ1xt6GJ3hNhXhciwlX+LmHTPITu9jjZ75T33YJuuTD7pLVYuMymr+4gSVisg7f1wterFSyqJBWA=="
|
||||
},
|
||||
"SemanticVersioning": {
|
||||
"type": "Transitive",
|
||||
@@ -514,13 +522,13 @@
|
||||
},
|
||||
"StableNameDotNet": {
|
||||
"type": "Transitive",
|
||||
"resolved": "0.1.0-development.866",
|
||||
"contentHash": "DJb8x4dV3ucDgM12sU28HxCdeqY/JudJbeJG6mgXWDJzpFZw2Jd7JF1pKFRNLzh/0gpo8bCGLQS9gOWZmBjdtg=="
|
||||
"resolved": "0.1.0-pre-release.19",
|
||||
"contentHash": "5BPWtntv3PXeFIg9CuGW6OM3f5GnwvdQJbzRpufPsistFwFyt1xYW1wSDr+QIdDO7vLndr7iNpWD3FyYp9LL4g=="
|
||||
},
|
||||
"StyleCop.Analyzers.Unstable": {
|
||||
"type": "Transitive",
|
||||
"resolved": "1.2.0.507",
|
||||
"contentHash": "gTY3IQdRqDJ4hbhSA3e/R48oE8b/OiKfvwkt1QdNVfrJK2gMHBV8ldaHJ885jxWZfllK66soa/sdcjh9bX49Tw=="
|
||||
"resolved": "1.2.0.556",
|
||||
"contentHash": "zvn9Mqs/ox/83cpYPignI8hJEM2A93s2HkHs8HYMOAQW0PkampyoErAiIyKxgTLqbbad29HX/shv/6LGSjPJNQ=="
|
||||
},
|
||||
"System.CodeDom": {
|
||||
"type": "Transitive",
|
||||
@@ -879,8 +887,8 @@
|
||||
},
|
||||
"System.Runtime.CompilerServices.Unsafe": {
|
||||
"type": "Transitive",
|
||||
"resolved": "6.0.0",
|
||||
"contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg=="
|
||||
"resolved": "5.0.0",
|
||||
"contentHash": "ZD9TMpsmYJLrxbbmdvhwt9YEgG5WntEnZ/d1eH8JBX9LBp+Ju8BSBhUGbZMNVHHomWo2KVImJhTDl2hIgw/6MA=="
|
||||
},
|
||||
"System.Runtime.Extensions": {
|
||||
"type": "Transitive",
|
||||
@@ -1103,23 +1111,6 @@
|
||||
"System.Runtime.CompilerServices.Unsafe": "4.5.2"
|
||||
}
|
||||
},
|
||||
"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.7",
|
||||
"contentHash": "/Tf/9XjprpHolbcDOrxsKVYy/mUG/FS7aGd9YUgBVEiHeQH4kAE0T1sMbde7q6B5xcrNUsJ5iW7D1RvHudQNqA==",
|
||||
"dependencies": {
|
||||
"System.Runtime.CompilerServices.Unsafe": "6.0.0",
|
||||
"System.Text.Encodings.Web": "6.0.0"
|
||||
}
|
||||
},
|
||||
"System.Threading": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
@@ -1147,7 +1138,7 @@
|
||||
"reactor": {
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"BepInEx.Unity.IL2CPP": "[6.0.0-be.679, )"
|
||||
"BepInEx.Unity.IL2CPP": "[6.0.0-be.735, )"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,14 +14,12 @@ internal static class GameOptionsPatches
|
||||
public static void Initialize()
|
||||
{
|
||||
var maxImpostors = (Il2CppStructArray<int>) Enumerable.Repeat((int) byte.MaxValue, byte.MaxValue).ToArray();
|
||||
GameOptionsData.MaxImpostors = maxImpostors;
|
||||
NormalGameOptionsV07.MaxImpostors = maxImpostors;
|
||||
HideNSeekGameOptionsV07.MaxImpostors = maxImpostors;
|
||||
NormalGameOptionsV09.MaxImpostors = maxImpostors;
|
||||
NormalGameOptionsV09.MaxImpostors = maxImpostors;
|
||||
|
||||
var minPlayers = (Il2CppStructArray<int>) Enumerable.Repeat(1, byte.MaxValue).ToArray();
|
||||
GameOptionsData.MinPlayers = minPlayers;
|
||||
NormalGameOptionsV07.MinPlayers = minPlayers;
|
||||
HideNSeekGameOptionsV07.MinPlayers = minPlayers;
|
||||
NormalGameOptionsV09.MinPlayers = minPlayers;
|
||||
NormalGameOptionsV09.MinPlayers = minPlayers;
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(GameSettingMenu), nameof(GameSettingMenu.Start))]
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
using HarmonyLib;
|
||||
|
||||
namespace Reactor.Debugger.Patches;
|
||||
|
||||
[HarmonyPatch]
|
||||
internal static class MiscellaneousPatches
|
||||
{
|
||||
[HarmonyPatch(typeof(StatsManager), nameof(StatsManager.AmBanned), MethodType.Getter)]
|
||||
[HarmonyPrefix]
|
||||
public static void AmBannedPatch(out bool __result)
|
||||
{
|
||||
__result = false;
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,8 @@
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.Text;
|
||||
using BepInEx.Logging;
|
||||
using HarmonyLib;
|
||||
using Object = UnityEngine.Object;
|
||||
using Il2CppInterop.Runtime.InteropTypes.Arrays;
|
||||
|
||||
namespace Reactor.Debugger.Patches;
|
||||
|
||||
@@ -14,61 +13,102 @@ internal static class RedirectLoggerPatch
|
||||
|
||||
private static bool Enabled => DebuggerConfig.RedirectLogger.Value;
|
||||
|
||||
private static void Log(Logger logger, Logger.Level level, Il2CppSystem.Object message, Object? context = null)
|
||||
private static void Log(Logger logger, LogLevel level, Il2CppStringArray? path, Il2CppSystem.Object message, UnityEngine.Object? context = null)
|
||||
{
|
||||
var finalMessage = new StringBuilder();
|
||||
|
||||
if (logger.category != Logger.Category.None) finalMessage.Append(CultureInfo.InvariantCulture, $"[{logger.category}] ");
|
||||
if (!string.IsNullOrEmpty(logger.tag)) finalMessage.Append(CultureInfo.InvariantCulture, $"[{logger.tag}] ");
|
||||
if (context != null) finalMessage.Append(CultureInfo.InvariantCulture, $"[{context.name} ({context.GetIl2CppType().FullName})]");
|
||||
finalMessage.Append(CultureInfo.InvariantCulture, $" {message.ToString()} ");
|
||||
|
||||
_log.Log(
|
||||
level switch
|
||||
if (logger.subCategories != null)
|
||||
{
|
||||
foreach (var subCategory in logger.subCategories)
|
||||
{
|
||||
Logger.Level.Debug => LogLevel.Debug,
|
||||
Logger.Level.Error => LogLevel.Error,
|
||||
Logger.Level.Warning => LogLevel.Warning,
|
||||
Logger.Level.Info => LogLevel.Info,
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(level), level, null),
|
||||
},
|
||||
finalMessage
|
||||
);
|
||||
finalMessage.Append(CultureInfo.InvariantCulture, $"[{subCategory}] ");
|
||||
}
|
||||
}
|
||||
|
||||
if (path != null)
|
||||
{
|
||||
foreach (var p in path)
|
||||
{
|
||||
finalMessage.Append(CultureInfo.InvariantCulture, $"[{p}] ");
|
||||
}
|
||||
}
|
||||
|
||||
if (context != null) finalMessage.Append(CultureInfo.InvariantCulture, $"[{context.name} ({context.GetIl2CppType().FullName})] ");
|
||||
finalMessage.Append(message.ToString());
|
||||
|
||||
_log.Log(level, finalMessage);
|
||||
}
|
||||
|
||||
[HarmonyPatch(nameof(Logger.Debug))]
|
||||
[HarmonyPatch(nameof(Logger.Debug), typeof(Il2CppSystem.Object), typeof(UnityEngine.Object))]
|
||||
[HarmonyPrefix]
|
||||
public static bool DebugPatch(Logger __instance, Il2CppSystem.Object message, Object? context)
|
||||
public static bool DebugPatch(Logger __instance, Il2CppSystem.Object message, UnityEngine.Object? context)
|
||||
{
|
||||
if (!Enabled) return true;
|
||||
Log(__instance, Logger.Level.Debug, message, context);
|
||||
Log(__instance, LogLevel.Debug, null, message, context);
|
||||
return false;
|
||||
}
|
||||
|
||||
[HarmonyPatch(nameof(Logger.Info))]
|
||||
[HarmonyPatch(nameof(Logger.Info), typeof(Il2CppSystem.Object), typeof(UnityEngine.Object))]
|
||||
[HarmonyPrefix]
|
||||
public static bool InfoPatch(Logger __instance, Il2CppSystem.Object message, Object? context)
|
||||
public static bool InfoPatch(Logger __instance, Il2CppSystem.Object message, UnityEngine.Object? context)
|
||||
{
|
||||
if (!Enabled) return true;
|
||||
Log(__instance, Logger.Level.Info, message, context);
|
||||
Log(__instance, LogLevel.Info, null, message, context);
|
||||
return false;
|
||||
}
|
||||
|
||||
[HarmonyPatch(nameof(Logger.Warning))]
|
||||
[HarmonyPatch(nameof(Logger.Warning), typeof(Il2CppSystem.Object), typeof(UnityEngine.Object))]
|
||||
[HarmonyPrefix]
|
||||
public static bool WarningPatch(Logger __instance, Il2CppSystem.Object message, Object? context)
|
||||
public static bool WarningPatch(Logger __instance, Il2CppSystem.Object message, UnityEngine.Object? context)
|
||||
{
|
||||
if (!Enabled) return true;
|
||||
Log(__instance, Logger.Level.Warning, message, context);
|
||||
Log(__instance, LogLevel.Warning, null, message, context);
|
||||
return false;
|
||||
}
|
||||
|
||||
[HarmonyPatch(nameof(Logger.Error))]
|
||||
[HarmonyPatch(nameof(Logger.Error), typeof(Il2CppSystem.Object), typeof(UnityEngine.Object))]
|
||||
[HarmonyPrefix]
|
||||
public static bool ErrorPatch(Logger __instance, Il2CppSystem.Object message, Object? context)
|
||||
public static bool ErrorPatch(Logger __instance, Il2CppSystem.Object message, UnityEngine.Object? context)
|
||||
{
|
||||
if (!Enabled) return true;
|
||||
Log(__instance, Logger.Level.Error, message, context);
|
||||
Log(__instance, LogLevel.Error, null, message, context);
|
||||
return false;
|
||||
}
|
||||
|
||||
[HarmonyPatch(nameof(Logger.Debug), typeof(Il2CppStringArray), typeof(Il2CppSystem.Object), typeof(UnityEngine.Object))]
|
||||
[HarmonyPrefix]
|
||||
public static bool DebugPatch(Logger __instance, Il2CppStringArray? path, Il2CppSystem.Object message, UnityEngine.Object? context)
|
||||
{
|
||||
if (!Enabled) return true;
|
||||
Log(__instance, LogLevel.Debug, path, message, context);
|
||||
return false;
|
||||
}
|
||||
|
||||
[HarmonyPatch(nameof(Logger.Info), typeof(Il2CppStringArray), typeof(Il2CppSystem.Object), typeof(UnityEngine.Object))]
|
||||
[HarmonyPrefix]
|
||||
public static bool InfoPatch(Logger __instance, Il2CppStringArray? path, Il2CppSystem.Object message, UnityEngine.Object? context)
|
||||
{
|
||||
if (!Enabled) return true;
|
||||
Log(__instance, LogLevel.Info, path, message, context);
|
||||
return false;
|
||||
}
|
||||
|
||||
[HarmonyPatch(nameof(Logger.Warning), typeof(Il2CppStringArray), typeof(Il2CppSystem.Object), typeof(UnityEngine.Object))]
|
||||
[HarmonyPrefix]
|
||||
public static bool WarningPatch(Logger __instance, Il2CppStringArray? path, Il2CppSystem.Object message, UnityEngine.Object? context)
|
||||
{
|
||||
if (!Enabled) return true;
|
||||
Log(__instance, LogLevel.Warning, path, message, context);
|
||||
return false;
|
||||
}
|
||||
|
||||
[HarmonyPatch(nameof(Logger.Error), typeof(Il2CppStringArray), typeof(Il2CppSystem.Object), typeof(UnityEngine.Object))]
|
||||
[HarmonyPrefix]
|
||||
public static bool ErrorPatch(Logger __instance, Il2CppStringArray? path, Il2CppSystem.Object message, UnityEngine.Object? context)
|
||||
{
|
||||
if (!Enabled) return true;
|
||||
Log(__instance, LogLevel.Error, path, message, context);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -7,17 +7,30 @@ namespace Reactor.Debugger.Utilities;
|
||||
|
||||
internal static class Extensions
|
||||
{
|
||||
public static IEnumerator CoCreateLocalGame(this AmongUsClient client)
|
||||
public static IEnumerator CoCreateLocalGame(this AmongUsClient client, bool isFreePlay = false)
|
||||
{
|
||||
try
|
||||
{
|
||||
client.NetworkMode = NetworkModes.LocalGame;
|
||||
if (isFreePlay)
|
||||
{
|
||||
client.NetworkMode = NetworkModes.FreePlay;
|
||||
|
||||
InnerNetServer.Instance.StartAsServer();
|
||||
InnerNetServer.Instance.StartAsLocalServer();
|
||||
|
||||
client.MainMenuScene = "MainMenu";
|
||||
client.OnlineScene = "Tutorial";
|
||||
}
|
||||
else
|
||||
{
|
||||
client.NetworkMode = NetworkModes.LocalGame;
|
||||
|
||||
InnerNetServer.Instance.StartAsServer();
|
||||
|
||||
client.MainMenuScene = "MatchMaking";
|
||||
client.OnlineScene = "OnlineGame";
|
||||
}
|
||||
|
||||
client.SetEndpoint(Constants.LocalNetAddress, Constants.GamePlayPort, false);
|
||||
client.MainMenuScene = "MatchMaking";
|
||||
client.OnlineScene = "OnlineGame";
|
||||
}
|
||||
catch (Il2CppException e)
|
||||
{
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Linq;
|
||||
using AmongUs.Data;
|
||||
using BepInEx.Unity.IL2CPP.Utils;
|
||||
using Il2CppInterop.Runtime.Attributes;
|
||||
using Il2CppInterop.Runtime.InteropTypes;
|
||||
using Reactor.Debugger.Utilities;
|
||||
using Reactor.Debugger.Window.Tabs;
|
||||
using Reactor.Utilities.Attributes;
|
||||
using Reactor.Utilities.ImGui;
|
||||
@@ -34,6 +39,43 @@ internal sealed class DebuggerWindow : MonoBehaviour
|
||||
if (AmongUsClient.Instance && AmongUsClient.Instance.AmHost) clientName += " (host)";
|
||||
GUILayout.Label("Name: " + clientName);
|
||||
|
||||
if (GUILayout.Button("Hard crash"))
|
||||
{
|
||||
static unsafe void Corrupt(Il2CppObjectBase o)
|
||||
{
|
||||
var x = (IntPtr*) o.Pointer;
|
||||
x[0] = (IntPtr) 0xF00;
|
||||
}
|
||||
|
||||
static IEnumerator CoCrash()
|
||||
{
|
||||
if (!PlayerControl.LocalPlayer || !ShipStatus.Instance)
|
||||
{
|
||||
yield return AmongUsClient.Instance.CoCreateLocalGame(true);
|
||||
|
||||
while (!PlayerControl.LocalPlayer || !ShipStatus.Instance)
|
||||
{
|
||||
yield return null;
|
||||
}
|
||||
}
|
||||
|
||||
var usable = FindObjectsOfType<MonoBehaviour>().First(x => x.TryCast<IUsable>() != null);
|
||||
if (!usable)
|
||||
{
|
||||
Error("Failed to find an IUsable to crash with");
|
||||
yield break;
|
||||
}
|
||||
|
||||
var cloned = Instantiate(usable, PlayerControl.LocalPlayer.transform.position, default);
|
||||
|
||||
Warning($"Crashing with {cloned.name}");
|
||||
|
||||
Corrupt(cloned);
|
||||
}
|
||||
|
||||
this.StartCoroutine(CoCrash());
|
||||
}
|
||||
|
||||
GUILayout.BeginHorizontal();
|
||||
{
|
||||
foreach (var tab in Tabs)
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
"net6.0": {
|
||||
"AmongUs.GameLibs.Steam": {
|
||||
"type": "Direct",
|
||||
"requested": "[2024.6.18, )",
|
||||
"resolved": "2024.6.18",
|
||||
"contentHash": "xb+HP1xXn4/ES8AgXpk9xeoW568LFYw5NTjY6bHwd6vQjHDf2kT1xHMmQ1me5Vfee/Gp69YIMZDXUAUToG7Elg=="
|
||||
"requested": "[2025.4.15, )",
|
||||
"resolved": "2025.4.15",
|
||||
"contentHash": "R3RxzHGZOGUJ9nMwrP0cjS6g+sh60QUU506Mo47lh17155enUjH6PtErijihSoU7t3aQpzCIyC67W3XrrHhH4g=="
|
||||
},
|
||||
"BepInEx.AutoPlugin": {
|
||||
"type": "Direct",
|
||||
@@ -16,99 +16,111 @@
|
||||
},
|
||||
"BepInEx.IL2CPP.MSBuild": {
|
||||
"type": "Direct",
|
||||
"requested": "[2.0.1, )",
|
||||
"resolved": "2.0.1",
|
||||
"contentHash": "hUZjCV0t8dkw/Z/zq4Zl405QP7frBk/LVfMdUmUz+7XOhGd7lYPKrR48A5vbGl2QeHudMxlkXzAr9WM3Duq2SQ=="
|
||||
"requested": "[2.1.0-rc.1, )",
|
||||
"resolved": "2.1.0-rc.1",
|
||||
"contentHash": "WI/7TbJwWl5P4B6UXGtKI1VMe6fA6h3fcbp3ZjJKqOBQ5MJfDMmeVB4fb+RW1tUQdxnlSWV3Ul62PHFyTqp4PA=="
|
||||
},
|
||||
"BepInEx.Unity.IL2CPP": {
|
||||
"type": "Direct",
|
||||
"requested": "[6.0.0-be.679, )",
|
||||
"resolved": "6.0.0-be.679",
|
||||
"contentHash": "KnfMjWSXI5+dxbkLCy8VssEnZtTN3MXUHDdBkvPbMiZ6oR1RGZWdLlA90/XQkY/4kMA5P4OCZP4eQ1o0XftbSQ==",
|
||||
"requested": "[6.0.0-be.735, )",
|
||||
"resolved": "6.0.0-be.735",
|
||||
"contentHash": "2+eFJGKMR1GFPeU9wuF+TVrMANIaWIc/6N9e8x4b7b/fNiY9B6vicYNiMDb2deYQpWZtOei+2btnar5dDE5BPg==",
|
||||
"dependencies": {
|
||||
"BepInEx.Core": "6.0.0-be.679",
|
||||
"BepInEx.Unity.Common": "6.0.0-be.679",
|
||||
"HarmonyX": "2.10.1",
|
||||
"Iced": "1.18.0",
|
||||
"Il2CppInterop.Generator": "1.4.6-ci.389",
|
||||
"Il2CppInterop.HarmonySupport": "1.4.6-ci.389",
|
||||
"Il2CppInterop.Runtime": "1.4.6-ci.389",
|
||||
"MonoMod.RuntimeDetour": "22.5.1.1",
|
||||
"Samboy063.Cpp2IL.Core": "2022.1.0-development.866"
|
||||
"BepInEx.Core": "6.0.0-be.735",
|
||||
"BepInEx.Unity.Common": "6.0.0-be.735",
|
||||
"HarmonyX": "2.10.2",
|
||||
"Iced": "1.21.0",
|
||||
"Il2CppInterop.Generator": "1.4.6-ci.426",
|
||||
"Il2CppInterop.HarmonySupport": "1.4.6-ci.426",
|
||||
"Il2CppInterop.Runtime": "1.4.6-ci.426",
|
||||
"MonoMod.RuntimeDetour": "22.7.31.1",
|
||||
"Samboy063.Cpp2IL.Core": "2022.1.0-pre-release.19"
|
||||
}
|
||||
},
|
||||
"StyleCop.Analyzers": {
|
||||
"type": "Direct",
|
||||
"requested": "[1.2.0-beta.507, )",
|
||||
"resolved": "1.2.0-beta.507",
|
||||
"contentHash": "/FtugDT66cKJJ+GGH7rNpG6UDrT4iIWz45M6lrXXHobDUFDHw+q5VgkbiR+6ffTO564ge7w6fQh/eoQhVdJO8Q==",
|
||||
"requested": "[1.2.0-beta.556, )",
|
||||
"resolved": "1.2.0-beta.556",
|
||||
"contentHash": "llRPgmA1fhC0I0QyFLEcjvtM2239QzKr/tcnbsjArLMJxJlu0AA5G7Fft0OI30pHF3MW63Gf4aSSsjc5m82J1Q==",
|
||||
"dependencies": {
|
||||
"StyleCop.Analyzers.Unstable": "1.2.0.507"
|
||||
"StyleCop.Analyzers.Unstable": "1.2.0.556"
|
||||
}
|
||||
},
|
||||
"AsmResolver": {
|
||||
"type": "Transitive",
|
||||
"resolved": "5.1.0",
|
||||
"contentHash": "7PjujQzgQ3wjzqZYT4CY8SV6zx7FY6swIwj3Yk4QLolLqo9sBPb7FLF3W30QFvCsCkNfiVWXlSbeZKs4xGgQOQ=="
|
||||
"resolved": "6.0.0-beta.1",
|
||||
"contentHash": "M5btCR/rmrx32jZsoN6CLQ/VQk8lN8hvPb6lgojua7pjNoo7StAl92koMC8qz4vzZyH2CNqxLSDoswRvyyK/vA=="
|
||||
},
|
||||
"AsmResolver.DotNet": {
|
||||
"type": "Transitive",
|
||||
"resolved": "5.1.0",
|
||||
"contentHash": "oKrBU94OaSrbbTwydvpLRFalYxozrNXGkl13nIkm823ZFQtPNYOiOMJb5DQLvkCJlWyis7q865tg803T5zg9IA==",
|
||||
"resolved": "6.0.0-beta.1",
|
||||
"contentHash": "PTq8nNQvhgTxF1iARCknffCsu7Iq9B0kN7TVC8iMaU7uEYog3xvVqH/0+TreY8GW74/+MqhZt/yEFsvS4oAduQ==",
|
||||
"dependencies": {
|
||||
"AsmResolver.PE": "5.1.0",
|
||||
"System.Text.Json": "6.0.7"
|
||||
"AsmResolver.PE": "6.0.0-beta.1"
|
||||
}
|
||||
},
|
||||
"AsmResolver.PE": {
|
||||
"type": "Transitive",
|
||||
"resolved": "5.1.0",
|
||||
"contentHash": "XD3iAgLSInJIODKUUlpHWXf8MR9H1SFMb1lsmabb4GxxxnDQRPjMxjglv2NOCjQQuNB2Oh0bvjHE7ewf82UqyQ==",
|
||||
"resolved": "6.0.0-beta.1",
|
||||
"contentHash": "KadLvx/zzFCJyF+E4jG6jPE1d0iJquzL6+hm8GBivBAs6nwHC8s6g4c857QwQCzXMWza6Vz5Q+3hFiNuOfKaWQ==",
|
||||
"dependencies": {
|
||||
"AsmResolver.PE.File": "5.1.0"
|
||||
"AsmResolver.PE.File": "6.0.0-beta.1"
|
||||
}
|
||||
},
|
||||
"AsmResolver.PE.File": {
|
||||
"type": "Transitive",
|
||||
"resolved": "5.1.0",
|
||||
"contentHash": "YituBYe0Fh471sXQMfu+f4tWKX/JZvRwrX6g/SVsr4XkUIUzYi/aGT3/QvjHoYx19fE1KYOB6zBKqPkkOK7HPw==",
|
||||
"resolved": "6.0.0-beta.1",
|
||||
"contentHash": "+lusB9UMHevI5aQsu73NQ1ctPMLFvyHAsEf8vjaJ/py+kX1DkU0JkbERtBRmaf58/hBZ7cyrE7gFnjoo7Bbg7A==",
|
||||
"dependencies": {
|
||||
"AsmResolver": "5.1.0"
|
||||
"AsmResolver": "6.0.0-beta.1"
|
||||
}
|
||||
},
|
||||
"AssetRipper.VersionUtilities": {
|
||||
"AssetRipper.CIL": {
|
||||
"type": "Transitive",
|
||||
"resolved": "1.3.1",
|
||||
"contentHash": "/1D18NOpqm7rS7+qVUbAReVMNWwgDuYpsnf0RkX1Aah/I0a0irqldoFJ+Kku7YdbSm0zqD+Z6iYUGKoP3GwTNQ=="
|
||||
"resolved": "1.1.2",
|
||||
"contentHash": "BRPcHORadIzSFkrVOvGkSs54j19mQdXH8dmRTVM51mS8MZLSbTpi9CDPpnWN2IdDsILUrAqbPUFo3zJodYxErw==",
|
||||
"dependencies": {
|
||||
"AsmResolver.DotNet": "6.0.0-beta.1"
|
||||
}
|
||||
},
|
||||
"AssetRipper.Gee.External.Capstone": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.3.2",
|
||||
"contentHash": "wOr5PQPL/2ZfD7+ebt6cpRbUhSzSY5nlHGHjjzuQRiU5zkQlqQNwWDLX0M3smrm5IkaDvONkmDjFMKTlZJmyuQ=="
|
||||
},
|
||||
"AssetRipper.Primitives": {
|
||||
"type": "Transitive",
|
||||
"resolved": "3.1.3",
|
||||
"contentHash": "djZbN/+EXmI+Oia9Pm0LyjZVCPLf60TPSL5rGb7mBEYM5F4CN3nPFXvl2yA5LanPZoHS1Yq7PghGUmkP7Pv9RQ=="
|
||||
},
|
||||
"BepInEx.Core": {
|
||||
"type": "Transitive",
|
||||
"resolved": "6.0.0-be.679",
|
||||
"contentHash": "yg6NSGeevv86P2ERe3VDEa7W/l0lmM7m+AdPSW78dcBOe36Zc3QK/vmNEq57txGa+1kwv+macXLSwkL4UpucjA==",
|
||||
"resolved": "6.0.0-be.735",
|
||||
"contentHash": "FuHm9UCzjSKeiZJc3IF70Fiuqi+FynRn62PwBoOeZcHK3/qm+vl1YwbZyFlmUyf45g+UKxg2Td40iZGx88LVAQ==",
|
||||
"dependencies": {
|
||||
"HarmonyX": "2.10.1",
|
||||
"MonoMod.Utils": "22.5.1.1",
|
||||
"HarmonyX": "2.10.2",
|
||||
"MonoMod.Utils": "22.7.31.1",
|
||||
"SemanticVersioning": "2.0.2"
|
||||
}
|
||||
},
|
||||
"BepInEx.Unity.Common": {
|
||||
"type": "Transitive",
|
||||
"resolved": "6.0.0-be.679",
|
||||
"contentHash": "q4Sux3ULBDasSQAtlAWzAKpAfCyV3ujxVJpK7ydV1bUIksaHNqw9yYTLCUrw8p4DQ/wHvShECFjzeMGHi+wylA==",
|
||||
"resolved": "6.0.0-be.735",
|
||||
"contentHash": "vmK//OBSr+jotqTk//HSdvHtMFTKu+NlQkiEsvr0dZApTVmQM2AgpVMhEAakQPmrSsM6LRJIHCBcLFO1ypfMPQ==",
|
||||
"dependencies": {
|
||||
"AssetRipper.VersionUtilities": "1.2.1",
|
||||
"MonoMod.Utils": "22.5.1.1"
|
||||
"AssetRipper.Primitives": "3.1.3",
|
||||
"MonoMod.Utils": "22.7.31.1"
|
||||
}
|
||||
},
|
||||
"Disarm": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2022.1.0-master.26",
|
||||
"contentHash": "YnZEbRGr0nG+N3G8WbRQ4Lkg8dTD3oso9iJlCVBmyhEyhLyqs+drBs1kWQbQqFPnb9mi/RJ++R9bPb+L3HF03Q=="
|
||||
"resolved": "2022.1.0-master.57",
|
||||
"contentHash": "/dkg7hg8iPBQN4bTV1lMQacarH6fMpgUXhJuo6iI7Wv7YpH7g5F9hJfje7dSMhqG0YlDacLuyWvcph5GzKUXog=="
|
||||
},
|
||||
"HarmonyX": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.10.1",
|
||||
"contentHash": "9LodMC9Y0u1TW96eKJoWrFJFpmzbgojEO38/Q+e7c1mFPhmHt8xcR8qhI06iF1rf0Dnsk+hqENFVSgbtwl/bEw==",
|
||||
"resolved": "2.10.2",
|
||||
"contentHash": "/5WwkxXX8mPsRuigQt957rJGx1f0dDQxk+bvk4yYITKFjXas9Em+O71zEP8X0ym8OFQQ2XH/2SxS4NC7vEC+Xg==",
|
||||
"dependencies": {
|
||||
"MonoMod.RuntimeDetour": "22.3.23.4",
|
||||
"System.Reflection.Emit": "4.7.0"
|
||||
@@ -116,13 +128,13 @@
|
||||
},
|
||||
"Iced": {
|
||||
"type": "Transitive",
|
||||
"resolved": "1.18.0",
|
||||
"contentHash": "G60lZOvbvqttA+SBSv/yY6/wUboXKJlkffhSNR9iOrx0M5gpcK1TRr6xrFR+qAhqIAhvrsPF1jkn9fYb4lEufQ=="
|
||||
"resolved": "1.21.0",
|
||||
"contentHash": "dv5+81Q1TBQvVMSOOOmRcjJmvWcX3BZPZsIq31+RLc5cNft0IHAyNlkdb7ZarOWG913PyBoFDsDXoCIlKmLclg=="
|
||||
},
|
||||
"Il2CppInterop.Common": {
|
||||
"type": "Transitive",
|
||||
"resolved": "1.4.6-ci.389",
|
||||
"contentHash": "KTyf2f66Q2mS9a6xhvoPWwD0VzRIoskPMVQehaVMo1dx4Di1FPFsKqukQ+ob6wgP5Rbnx53kiH0PY+IRSb35XA==",
|
||||
"resolved": "1.4.6-ci.426",
|
||||
"contentHash": "pI0kU0qqJKMP6z9eFz4+WJtGIwklfPxW2yWEY9vKnrN9bbYMusK3v5uFWV8al7S/HPSATV5jNWH1hyTvP7kglA==",
|
||||
"dependencies": {
|
||||
"Iced": "1.17.0",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "6.0.1",
|
||||
@@ -131,36 +143,31 @@
|
||||
},
|
||||
"Il2CppInterop.Generator": {
|
||||
"type": "Transitive",
|
||||
"resolved": "1.4.6-ci.389",
|
||||
"contentHash": "XJX4sn/RzAEBNIZZXuyDcLZrFx5tCoahujDu5aKWjApiMj/nTRQAxZn17daIIvd9aHqLaAfiWWth5QDLIt2bKw==",
|
||||
"resolved": "1.4.6-ci.426",
|
||||
"contentHash": "kecdx/vbNl0RtfzfYW592jU8PMyq1JbzpvoJSvqwO+tV6icp9SljXy6yG8bT/wt0gaPj9mFUNDTe2Wu6M6XGZQ==",
|
||||
"dependencies": {
|
||||
"Il2CppInterop.Common": "1.4.6-ci.389",
|
||||
"Il2CppInterop.Common": "1.4.6-ci.426",
|
||||
"Mono.Cecil": "0.11.3"
|
||||
}
|
||||
},
|
||||
"Il2CppInterop.HarmonySupport": {
|
||||
"type": "Transitive",
|
||||
"resolved": "1.4.6-ci.389",
|
||||
"contentHash": "Xd2zK6sLqwA0ReyUy83SWKcALwY99fq6vVL5gFOMN5Ct8OOVhtNIws0ysCWsfx1GL0RJiRYfR4pza/MmWRz4PQ==",
|
||||
"resolved": "1.4.6-ci.426",
|
||||
"contentHash": "rd2T5o6SybIc12hmX3HktTF5n27hFb0w4mNSExq7h1YsmrNlt7x+Ac1MBnnB0JwPLIg7w8LjnKjoIX6Gf626ng==",
|
||||
"dependencies": {
|
||||
"HarmonyX": "2.10.0",
|
||||
"Il2CppInterop.Runtime": "1.4.6-ci.389"
|
||||
"Il2CppInterop.Runtime": "1.4.6-ci.426"
|
||||
}
|
||||
},
|
||||
"Il2CppInterop.Runtime": {
|
||||
"type": "Transitive",
|
||||
"resolved": "1.4.6-ci.389",
|
||||
"contentHash": "nzYjuVzDG/O8+AQ8ax3WVHf+ZVsQKrVtp/yvuW8XoEPLdkbgryIrMo75dvN+tPqxOU3o2MPt9MZ9j25P5aVJMw==",
|
||||
"resolved": "1.4.6-ci.426",
|
||||
"contentHash": "0O0oI7gOqJixrsjvh1firhuGYK3Yr0uDLp6Q+t5CfcTMmeEX8Plk3pqAP9ZYyilBvh7uW0gv4Golqz08L1GXug==",
|
||||
"dependencies": {
|
||||
"Iced": "1.17.0",
|
||||
"Il2CppInterop.Common": "1.4.6-ci.389"
|
||||
"Il2CppInterop.Common": "1.4.6-ci.426"
|
||||
}
|
||||
},
|
||||
"js6pak.Gee.External.Capstone": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.1.0",
|
||||
"contentHash": "YYpq7NM50bSSVUDjXyV/eiITk6syXqItPjKBOb3jEWS6RFsk0DNhpWMPW6b3hKDmArARuWDU6S2pVu1IeVrvIA=="
|
||||
},
|
||||
"Microsoft.Extensions.Logging.Abstractions": {
|
||||
"type": "Transitive",
|
||||
"resolved": "6.0.1",
|
||||
@@ -183,11 +190,11 @@
|
||||
},
|
||||
"MonoMod.RuntimeDetour": {
|
||||
"type": "Transitive",
|
||||
"resolved": "22.5.1.1",
|
||||
"contentHash": "WG5zLRuAr8KJEnIkKTuIG1OJCrGIT3pjvnAD43E0FDchHf3Dp985MF/8tmIQvAzCZV87JNs6QKeGGqmwDmpXpw==",
|
||||
"resolved": "22.7.31.1",
|
||||
"contentHash": "nxVJTvQbWAujaogt5XX3eAy7d22t66Z88aWg9sirPLO9rR/6yNCHAyZpgxXrOsIobZVW0IEZPqNMOBhgke25/w==",
|
||||
"dependencies": {
|
||||
"Mono.Cecil": "0.11.4",
|
||||
"MonoMod.Utils": "22.5.1.1",
|
||||
"MonoMod.Utils": "22.7.31.1",
|
||||
"System.Collections.NonGeneric": "4.3.0",
|
||||
"System.ComponentModel.TypeConverter": "4.3.0",
|
||||
"System.IO.FileSystem.Primitives": "4.3.0",
|
||||
@@ -198,8 +205,8 @@
|
||||
},
|
||||
"MonoMod.Utils": {
|
||||
"type": "Transitive",
|
||||
"resolved": "22.5.1.1",
|
||||
"contentHash": "vBObO1atXxhi2C4AuC53y87Bqeogi9xIrD1Ym3YWr5uxc8Nrm8SrsFeD1i3x04R999+XQ3FdeHrbXScyWYEHqQ==",
|
||||
"resolved": "22.7.31.1",
|
||||
"contentHash": "nI0E1oadXS1iMbfwfCzYF08C1jRQR9cnnHv66a4BSPd4sGu2p6g4BmctCWsdAB6oGKkSJUhcfHfxcfTsDyB94Q==",
|
||||
"dependencies": {
|
||||
"Mono.Cecil": "0.11.4",
|
||||
"System.Collections.NonGeneric": "4.3.0",
|
||||
@@ -310,30 +317,31 @@
|
||||
},
|
||||
"Samboy063.Cpp2IL.Core": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2022.1.0-development.866",
|
||||
"contentHash": "QPMuix/3jRngWBdNSLhAbm9BHYf95Ln1Ph1eCK/cDZdVibxFDFP3a6Yczyx1p7GbN7bRQwrhs2skPJSS/z3m2w==",
|
||||
"resolved": "2022.1.0-pre-release.19",
|
||||
"contentHash": "mAYIrMo0VdOZzh1NS5bZeflg80gtYNY7kZo9q/blEYheUPyLXu5ozQOjX+Bq2yDh40pA+yiE2MXTnN2Is2hjgw==",
|
||||
"dependencies": {
|
||||
"AsmResolver.DotNet": "5.1.0",
|
||||
"Disarm": "2022.1.0-master.26",
|
||||
"Iced": "1.18.0",
|
||||
"Samboy063.LibCpp2IL": "2022.1.0-development.866",
|
||||
"StableNameDotNet": "0.1.0-development.866",
|
||||
"js6pak.Gee.External.Capstone": "2.1.0"
|
||||
"AsmResolver.DotNet": "6.0.0-beta.1",
|
||||
"AssetRipper.CIL": "1.1.2",
|
||||
"AssetRipper.Gee.External.Capstone": "2.3.2",
|
||||
"Disarm": "2022.1.0-master.57",
|
||||
"Iced": "1.21.0",
|
||||
"Samboy063.LibCpp2IL": "2022.1.0-pre-release.19",
|
||||
"StableNameDotNet": "0.1.0-pre-release.19"
|
||||
}
|
||||
},
|
||||
"Samboy063.LibCpp2IL": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2022.1.0-development.866",
|
||||
"contentHash": "EcJSWTfQko8SQozozoUT+aQJVWC8wj8C0YUiPBF4rNRId19yTKp2IXcXnI747v+8/aal222QR6WHfoBK2WlVLg==",
|
||||
"resolved": "2022.1.0-pre-release.19",
|
||||
"contentHash": "/n8p81ltd38BeNNS2xUNPGMSzxk/UGXr9cRNqG1MaLogzANNNrvCAXqWmNMM3tZctjp7vqTxEA+e4J4ngul8Fg==",
|
||||
"dependencies": {
|
||||
"AssetRipper.VersionUtilities": "1.3.1",
|
||||
"Samboy063.WasmDisassembler": "2022.1.0-development.866"
|
||||
"AssetRipper.Primitives": "3.1.3",
|
||||
"Samboy063.WasmDisassembler": "2022.1.0-pre-release.19"
|
||||
}
|
||||
},
|
||||
"Samboy063.WasmDisassembler": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2022.1.0-development.866",
|
||||
"contentHash": "2QK8F3eISkLcoW/Nt7wtxyQh31EXAqEMBVXXjEnuxyvXpBXxOIGpjmE3pWhGwxQwDCbe4zBsLF1zUiqq3/pXRA=="
|
||||
"resolved": "2022.1.0-pre-release.19",
|
||||
"contentHash": "uVQdYm/J6+jJ1xt6GJ3hNhXhciwlX+LmHTPITu9jjZ75T33YJuuTD7pLVYuMymr+4gSVisg7f1wterFSyqJBWA=="
|
||||
},
|
||||
"SemanticVersioning": {
|
||||
"type": "Transitive",
|
||||
@@ -342,13 +350,13 @@
|
||||
},
|
||||
"StableNameDotNet": {
|
||||
"type": "Transitive",
|
||||
"resolved": "0.1.0-development.866",
|
||||
"contentHash": "DJb8x4dV3ucDgM12sU28HxCdeqY/JudJbeJG6mgXWDJzpFZw2Jd7JF1pKFRNLzh/0gpo8bCGLQS9gOWZmBjdtg=="
|
||||
"resolved": "0.1.0-pre-release.19",
|
||||
"contentHash": "5BPWtntv3PXeFIg9CuGW6OM3f5GnwvdQJbzRpufPsistFwFyt1xYW1wSDr+QIdDO7vLndr7iNpWD3FyYp9LL4g=="
|
||||
},
|
||||
"StyleCop.Analyzers.Unstable": {
|
||||
"type": "Transitive",
|
||||
"resolved": "1.2.0.507",
|
||||
"contentHash": "gTY3IQdRqDJ4hbhSA3e/R48oE8b/OiKfvwkt1QdNVfrJK2gMHBV8ldaHJ885jxWZfllK66soa/sdcjh9bX49Tw=="
|
||||
"resolved": "1.2.0.556",
|
||||
"contentHash": "zvn9Mqs/ox/83cpYPignI8hJEM2A93s2HkHs8HYMOAQW0PkampyoErAiIyKxgTLqbbad29HX/shv/6LGSjPJNQ=="
|
||||
},
|
||||
"System.Collections": {
|
||||
"type": "Transitive",
|
||||
@@ -675,11 +683,6 @@
|
||||
"Microsoft.NETCore.Targets": "1.1.0"
|
||||
}
|
||||
},
|
||||
"System.Runtime.CompilerServices.Unsafe": {
|
||||
"type": "Transitive",
|
||||
"resolved": "6.0.0",
|
||||
"contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg=="
|
||||
},
|
||||
"System.Runtime.Extensions": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
@@ -878,23 +881,6 @@
|
||||
"System.Runtime": "4.3.0"
|
||||
}
|
||||
},
|
||||
"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.7",
|
||||
"contentHash": "/Tf/9XjprpHolbcDOrxsKVYy/mUG/FS7aGd9YUgBVEiHeQH4kAE0T1sMbde7q6B5xcrNUsJ5iW7D1RvHudQNqA==",
|
||||
"dependencies": {
|
||||
"System.Runtime.CompilerServices.Unsafe": "6.0.0",
|
||||
"System.Text.Encodings.Web": "6.0.0"
|
||||
}
|
||||
},
|
||||
"System.Threading": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
@@ -917,7 +903,7 @@
|
||||
"reactor": {
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"BepInEx.Unity.IL2CPP": "[6.0.0-be.679, )"
|
||||
"BepInEx.Unity.IL2CPP": "[6.0.0-be.735, )"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,6 +25,8 @@ public partial class ExamplePlugin : BasePlugin
|
||||
|
||||
public override void Load()
|
||||
{
|
||||
ReactorCredits.Register<ExamplePlugin>(ReactorCredits.AlwaysShow);
|
||||
|
||||
this.AddComponent<ExampleComponent>();
|
||||
|
||||
_helloStringName = CustomStringName.CreateAndRegister("Hello!");
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
"net6.0": {
|
||||
"AmongUs.GameLibs.Steam": {
|
||||
"type": "Direct",
|
||||
"requested": "[2024.6.18, )",
|
||||
"resolved": "2024.6.18",
|
||||
"contentHash": "xb+HP1xXn4/ES8AgXpk9xeoW568LFYw5NTjY6bHwd6vQjHDf2kT1xHMmQ1me5Vfee/Gp69YIMZDXUAUToG7Elg=="
|
||||
"requested": "[2025.4.15, )",
|
||||
"resolved": "2025.4.15",
|
||||
"contentHash": "R3RxzHGZOGUJ9nMwrP0cjS6g+sh60QUU506Mo47lh17155enUjH6PtErijihSoU7t3aQpzCIyC67W3XrrHhH4g=="
|
||||
},
|
||||
"BepInEx.AutoPlugin": {
|
||||
"type": "Direct",
|
||||
@@ -16,99 +16,111 @@
|
||||
},
|
||||
"BepInEx.IL2CPP.MSBuild": {
|
||||
"type": "Direct",
|
||||
"requested": "[2.0.1, )",
|
||||
"resolved": "2.0.1",
|
||||
"contentHash": "hUZjCV0t8dkw/Z/zq4Zl405QP7frBk/LVfMdUmUz+7XOhGd7lYPKrR48A5vbGl2QeHudMxlkXzAr9WM3Duq2SQ=="
|
||||
"requested": "[2.1.0-rc.1, )",
|
||||
"resolved": "2.1.0-rc.1",
|
||||
"contentHash": "WI/7TbJwWl5P4B6UXGtKI1VMe6fA6h3fcbp3ZjJKqOBQ5MJfDMmeVB4fb+RW1tUQdxnlSWV3Ul62PHFyTqp4PA=="
|
||||
},
|
||||
"BepInEx.Unity.IL2CPP": {
|
||||
"type": "Direct",
|
||||
"requested": "[6.0.0-be.679, )",
|
||||
"resolved": "6.0.0-be.679",
|
||||
"contentHash": "KnfMjWSXI5+dxbkLCy8VssEnZtTN3MXUHDdBkvPbMiZ6oR1RGZWdLlA90/XQkY/4kMA5P4OCZP4eQ1o0XftbSQ==",
|
||||
"requested": "[6.0.0-be.735, )",
|
||||
"resolved": "6.0.0-be.735",
|
||||
"contentHash": "2+eFJGKMR1GFPeU9wuF+TVrMANIaWIc/6N9e8x4b7b/fNiY9B6vicYNiMDb2deYQpWZtOei+2btnar5dDE5BPg==",
|
||||
"dependencies": {
|
||||
"BepInEx.Core": "6.0.0-be.679",
|
||||
"BepInEx.Unity.Common": "6.0.0-be.679",
|
||||
"HarmonyX": "2.10.1",
|
||||
"Iced": "1.18.0",
|
||||
"Il2CppInterop.Generator": "1.4.6-ci.389",
|
||||
"Il2CppInterop.HarmonySupport": "1.4.6-ci.389",
|
||||
"Il2CppInterop.Runtime": "1.4.6-ci.389",
|
||||
"MonoMod.RuntimeDetour": "22.5.1.1",
|
||||
"Samboy063.Cpp2IL.Core": "2022.1.0-development.866"
|
||||
"BepInEx.Core": "6.0.0-be.735",
|
||||
"BepInEx.Unity.Common": "6.0.0-be.735",
|
||||
"HarmonyX": "2.10.2",
|
||||
"Iced": "1.21.0",
|
||||
"Il2CppInterop.Generator": "1.4.6-ci.426",
|
||||
"Il2CppInterop.HarmonySupport": "1.4.6-ci.426",
|
||||
"Il2CppInterop.Runtime": "1.4.6-ci.426",
|
||||
"MonoMod.RuntimeDetour": "22.7.31.1",
|
||||
"Samboy063.Cpp2IL.Core": "2022.1.0-pre-release.19"
|
||||
}
|
||||
},
|
||||
"StyleCop.Analyzers": {
|
||||
"type": "Direct",
|
||||
"requested": "[1.2.0-beta.507, )",
|
||||
"resolved": "1.2.0-beta.507",
|
||||
"contentHash": "/FtugDT66cKJJ+GGH7rNpG6UDrT4iIWz45M6lrXXHobDUFDHw+q5VgkbiR+6ffTO564ge7w6fQh/eoQhVdJO8Q==",
|
||||
"requested": "[1.2.0-beta.556, )",
|
||||
"resolved": "1.2.0-beta.556",
|
||||
"contentHash": "llRPgmA1fhC0I0QyFLEcjvtM2239QzKr/tcnbsjArLMJxJlu0AA5G7Fft0OI30pHF3MW63Gf4aSSsjc5m82J1Q==",
|
||||
"dependencies": {
|
||||
"StyleCop.Analyzers.Unstable": "1.2.0.507"
|
||||
"StyleCop.Analyzers.Unstable": "1.2.0.556"
|
||||
}
|
||||
},
|
||||
"AsmResolver": {
|
||||
"type": "Transitive",
|
||||
"resolved": "5.1.0",
|
||||
"contentHash": "7PjujQzgQ3wjzqZYT4CY8SV6zx7FY6swIwj3Yk4QLolLqo9sBPb7FLF3W30QFvCsCkNfiVWXlSbeZKs4xGgQOQ=="
|
||||
"resolved": "6.0.0-beta.1",
|
||||
"contentHash": "M5btCR/rmrx32jZsoN6CLQ/VQk8lN8hvPb6lgojua7pjNoo7StAl92koMC8qz4vzZyH2CNqxLSDoswRvyyK/vA=="
|
||||
},
|
||||
"AsmResolver.DotNet": {
|
||||
"type": "Transitive",
|
||||
"resolved": "5.1.0",
|
||||
"contentHash": "oKrBU94OaSrbbTwydvpLRFalYxozrNXGkl13nIkm823ZFQtPNYOiOMJb5DQLvkCJlWyis7q865tg803T5zg9IA==",
|
||||
"resolved": "6.0.0-beta.1",
|
||||
"contentHash": "PTq8nNQvhgTxF1iARCknffCsu7Iq9B0kN7TVC8iMaU7uEYog3xvVqH/0+TreY8GW74/+MqhZt/yEFsvS4oAduQ==",
|
||||
"dependencies": {
|
||||
"AsmResolver.PE": "5.1.0",
|
||||
"System.Text.Json": "6.0.7"
|
||||
"AsmResolver.PE": "6.0.0-beta.1"
|
||||
}
|
||||
},
|
||||
"AsmResolver.PE": {
|
||||
"type": "Transitive",
|
||||
"resolved": "5.1.0",
|
||||
"contentHash": "XD3iAgLSInJIODKUUlpHWXf8MR9H1SFMb1lsmabb4GxxxnDQRPjMxjglv2NOCjQQuNB2Oh0bvjHE7ewf82UqyQ==",
|
||||
"resolved": "6.0.0-beta.1",
|
||||
"contentHash": "KadLvx/zzFCJyF+E4jG6jPE1d0iJquzL6+hm8GBivBAs6nwHC8s6g4c857QwQCzXMWza6Vz5Q+3hFiNuOfKaWQ==",
|
||||
"dependencies": {
|
||||
"AsmResolver.PE.File": "5.1.0"
|
||||
"AsmResolver.PE.File": "6.0.0-beta.1"
|
||||
}
|
||||
},
|
||||
"AsmResolver.PE.File": {
|
||||
"type": "Transitive",
|
||||
"resolved": "5.1.0",
|
||||
"contentHash": "YituBYe0Fh471sXQMfu+f4tWKX/JZvRwrX6g/SVsr4XkUIUzYi/aGT3/QvjHoYx19fE1KYOB6zBKqPkkOK7HPw==",
|
||||
"resolved": "6.0.0-beta.1",
|
||||
"contentHash": "+lusB9UMHevI5aQsu73NQ1ctPMLFvyHAsEf8vjaJ/py+kX1DkU0JkbERtBRmaf58/hBZ7cyrE7gFnjoo7Bbg7A==",
|
||||
"dependencies": {
|
||||
"AsmResolver": "5.1.0"
|
||||
"AsmResolver": "6.0.0-beta.1"
|
||||
}
|
||||
},
|
||||
"AssetRipper.VersionUtilities": {
|
||||
"AssetRipper.CIL": {
|
||||
"type": "Transitive",
|
||||
"resolved": "1.3.1",
|
||||
"contentHash": "/1D18NOpqm7rS7+qVUbAReVMNWwgDuYpsnf0RkX1Aah/I0a0irqldoFJ+Kku7YdbSm0zqD+Z6iYUGKoP3GwTNQ=="
|
||||
"resolved": "1.1.2",
|
||||
"contentHash": "BRPcHORadIzSFkrVOvGkSs54j19mQdXH8dmRTVM51mS8MZLSbTpi9CDPpnWN2IdDsILUrAqbPUFo3zJodYxErw==",
|
||||
"dependencies": {
|
||||
"AsmResolver.DotNet": "6.0.0-beta.1"
|
||||
}
|
||||
},
|
||||
"AssetRipper.Gee.External.Capstone": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.3.2",
|
||||
"contentHash": "wOr5PQPL/2ZfD7+ebt6cpRbUhSzSY5nlHGHjjzuQRiU5zkQlqQNwWDLX0M3smrm5IkaDvONkmDjFMKTlZJmyuQ=="
|
||||
},
|
||||
"AssetRipper.Primitives": {
|
||||
"type": "Transitive",
|
||||
"resolved": "3.1.3",
|
||||
"contentHash": "djZbN/+EXmI+Oia9Pm0LyjZVCPLf60TPSL5rGb7mBEYM5F4CN3nPFXvl2yA5LanPZoHS1Yq7PghGUmkP7Pv9RQ=="
|
||||
},
|
||||
"BepInEx.Core": {
|
||||
"type": "Transitive",
|
||||
"resolved": "6.0.0-be.679",
|
||||
"contentHash": "yg6NSGeevv86P2ERe3VDEa7W/l0lmM7m+AdPSW78dcBOe36Zc3QK/vmNEq57txGa+1kwv+macXLSwkL4UpucjA==",
|
||||
"resolved": "6.0.0-be.735",
|
||||
"contentHash": "FuHm9UCzjSKeiZJc3IF70Fiuqi+FynRn62PwBoOeZcHK3/qm+vl1YwbZyFlmUyf45g+UKxg2Td40iZGx88LVAQ==",
|
||||
"dependencies": {
|
||||
"HarmonyX": "2.10.1",
|
||||
"MonoMod.Utils": "22.5.1.1",
|
||||
"HarmonyX": "2.10.2",
|
||||
"MonoMod.Utils": "22.7.31.1",
|
||||
"SemanticVersioning": "2.0.2"
|
||||
}
|
||||
},
|
||||
"BepInEx.Unity.Common": {
|
||||
"type": "Transitive",
|
||||
"resolved": "6.0.0-be.679",
|
||||
"contentHash": "q4Sux3ULBDasSQAtlAWzAKpAfCyV3ujxVJpK7ydV1bUIksaHNqw9yYTLCUrw8p4DQ/wHvShECFjzeMGHi+wylA==",
|
||||
"resolved": "6.0.0-be.735",
|
||||
"contentHash": "vmK//OBSr+jotqTk//HSdvHtMFTKu+NlQkiEsvr0dZApTVmQM2AgpVMhEAakQPmrSsM6LRJIHCBcLFO1ypfMPQ==",
|
||||
"dependencies": {
|
||||
"AssetRipper.VersionUtilities": "1.2.1",
|
||||
"MonoMod.Utils": "22.5.1.1"
|
||||
"AssetRipper.Primitives": "3.1.3",
|
||||
"MonoMod.Utils": "22.7.31.1"
|
||||
}
|
||||
},
|
||||
"Disarm": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2022.1.0-master.26",
|
||||
"contentHash": "YnZEbRGr0nG+N3G8WbRQ4Lkg8dTD3oso9iJlCVBmyhEyhLyqs+drBs1kWQbQqFPnb9mi/RJ++R9bPb+L3HF03Q=="
|
||||
"resolved": "2022.1.0-master.57",
|
||||
"contentHash": "/dkg7hg8iPBQN4bTV1lMQacarH6fMpgUXhJuo6iI7Wv7YpH7g5F9hJfje7dSMhqG0YlDacLuyWvcph5GzKUXog=="
|
||||
},
|
||||
"HarmonyX": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.10.1",
|
||||
"contentHash": "9LodMC9Y0u1TW96eKJoWrFJFpmzbgojEO38/Q+e7c1mFPhmHt8xcR8qhI06iF1rf0Dnsk+hqENFVSgbtwl/bEw==",
|
||||
"resolved": "2.10.2",
|
||||
"contentHash": "/5WwkxXX8mPsRuigQt957rJGx1f0dDQxk+bvk4yYITKFjXas9Em+O71zEP8X0ym8OFQQ2XH/2SxS4NC7vEC+Xg==",
|
||||
"dependencies": {
|
||||
"MonoMod.RuntimeDetour": "22.3.23.4",
|
||||
"System.Reflection.Emit": "4.7.0"
|
||||
@@ -116,13 +128,13 @@
|
||||
},
|
||||
"Iced": {
|
||||
"type": "Transitive",
|
||||
"resolved": "1.18.0",
|
||||
"contentHash": "G60lZOvbvqttA+SBSv/yY6/wUboXKJlkffhSNR9iOrx0M5gpcK1TRr6xrFR+qAhqIAhvrsPF1jkn9fYb4lEufQ=="
|
||||
"resolved": "1.21.0",
|
||||
"contentHash": "dv5+81Q1TBQvVMSOOOmRcjJmvWcX3BZPZsIq31+RLc5cNft0IHAyNlkdb7ZarOWG913PyBoFDsDXoCIlKmLclg=="
|
||||
},
|
||||
"Il2CppInterop.Common": {
|
||||
"type": "Transitive",
|
||||
"resolved": "1.4.6-ci.389",
|
||||
"contentHash": "KTyf2f66Q2mS9a6xhvoPWwD0VzRIoskPMVQehaVMo1dx4Di1FPFsKqukQ+ob6wgP5Rbnx53kiH0PY+IRSb35XA==",
|
||||
"resolved": "1.4.6-ci.426",
|
||||
"contentHash": "pI0kU0qqJKMP6z9eFz4+WJtGIwklfPxW2yWEY9vKnrN9bbYMusK3v5uFWV8al7S/HPSATV5jNWH1hyTvP7kglA==",
|
||||
"dependencies": {
|
||||
"Iced": "1.17.0",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "6.0.1",
|
||||
@@ -131,36 +143,31 @@
|
||||
},
|
||||
"Il2CppInterop.Generator": {
|
||||
"type": "Transitive",
|
||||
"resolved": "1.4.6-ci.389",
|
||||
"contentHash": "XJX4sn/RzAEBNIZZXuyDcLZrFx5tCoahujDu5aKWjApiMj/nTRQAxZn17daIIvd9aHqLaAfiWWth5QDLIt2bKw==",
|
||||
"resolved": "1.4.6-ci.426",
|
||||
"contentHash": "kecdx/vbNl0RtfzfYW592jU8PMyq1JbzpvoJSvqwO+tV6icp9SljXy6yG8bT/wt0gaPj9mFUNDTe2Wu6M6XGZQ==",
|
||||
"dependencies": {
|
||||
"Il2CppInterop.Common": "1.4.6-ci.389",
|
||||
"Il2CppInterop.Common": "1.4.6-ci.426",
|
||||
"Mono.Cecil": "0.11.3"
|
||||
}
|
||||
},
|
||||
"Il2CppInterop.HarmonySupport": {
|
||||
"type": "Transitive",
|
||||
"resolved": "1.4.6-ci.389",
|
||||
"contentHash": "Xd2zK6sLqwA0ReyUy83SWKcALwY99fq6vVL5gFOMN5Ct8OOVhtNIws0ysCWsfx1GL0RJiRYfR4pza/MmWRz4PQ==",
|
||||
"resolved": "1.4.6-ci.426",
|
||||
"contentHash": "rd2T5o6SybIc12hmX3HktTF5n27hFb0w4mNSExq7h1YsmrNlt7x+Ac1MBnnB0JwPLIg7w8LjnKjoIX6Gf626ng==",
|
||||
"dependencies": {
|
||||
"HarmonyX": "2.10.0",
|
||||
"Il2CppInterop.Runtime": "1.4.6-ci.389"
|
||||
"Il2CppInterop.Runtime": "1.4.6-ci.426"
|
||||
}
|
||||
},
|
||||
"Il2CppInterop.Runtime": {
|
||||
"type": "Transitive",
|
||||
"resolved": "1.4.6-ci.389",
|
||||
"contentHash": "nzYjuVzDG/O8+AQ8ax3WVHf+ZVsQKrVtp/yvuW8XoEPLdkbgryIrMo75dvN+tPqxOU3o2MPt9MZ9j25P5aVJMw==",
|
||||
"resolved": "1.4.6-ci.426",
|
||||
"contentHash": "0O0oI7gOqJixrsjvh1firhuGYK3Yr0uDLp6Q+t5CfcTMmeEX8Plk3pqAP9ZYyilBvh7uW0gv4Golqz08L1GXug==",
|
||||
"dependencies": {
|
||||
"Iced": "1.17.0",
|
||||
"Il2CppInterop.Common": "1.4.6-ci.389"
|
||||
"Il2CppInterop.Common": "1.4.6-ci.426"
|
||||
}
|
||||
},
|
||||
"js6pak.Gee.External.Capstone": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.1.0",
|
||||
"contentHash": "YYpq7NM50bSSVUDjXyV/eiITk6syXqItPjKBOb3jEWS6RFsk0DNhpWMPW6b3hKDmArARuWDU6S2pVu1IeVrvIA=="
|
||||
},
|
||||
"Microsoft.Extensions.Logging.Abstractions": {
|
||||
"type": "Transitive",
|
||||
"resolved": "6.0.1",
|
||||
@@ -183,11 +190,11 @@
|
||||
},
|
||||
"MonoMod.RuntimeDetour": {
|
||||
"type": "Transitive",
|
||||
"resolved": "22.5.1.1",
|
||||
"contentHash": "WG5zLRuAr8KJEnIkKTuIG1OJCrGIT3pjvnAD43E0FDchHf3Dp985MF/8tmIQvAzCZV87JNs6QKeGGqmwDmpXpw==",
|
||||
"resolved": "22.7.31.1",
|
||||
"contentHash": "nxVJTvQbWAujaogt5XX3eAy7d22t66Z88aWg9sirPLO9rR/6yNCHAyZpgxXrOsIobZVW0IEZPqNMOBhgke25/w==",
|
||||
"dependencies": {
|
||||
"Mono.Cecil": "0.11.4",
|
||||
"MonoMod.Utils": "22.5.1.1",
|
||||
"MonoMod.Utils": "22.7.31.1",
|
||||
"System.Collections.NonGeneric": "4.3.0",
|
||||
"System.ComponentModel.TypeConverter": "4.3.0",
|
||||
"System.IO.FileSystem.Primitives": "4.3.0",
|
||||
@@ -198,8 +205,8 @@
|
||||
},
|
||||
"MonoMod.Utils": {
|
||||
"type": "Transitive",
|
||||
"resolved": "22.5.1.1",
|
||||
"contentHash": "vBObO1atXxhi2C4AuC53y87Bqeogi9xIrD1Ym3YWr5uxc8Nrm8SrsFeD1i3x04R999+XQ3FdeHrbXScyWYEHqQ==",
|
||||
"resolved": "22.7.31.1",
|
||||
"contentHash": "nI0E1oadXS1iMbfwfCzYF08C1jRQR9cnnHv66a4BSPd4sGu2p6g4BmctCWsdAB6oGKkSJUhcfHfxcfTsDyB94Q==",
|
||||
"dependencies": {
|
||||
"Mono.Cecil": "0.11.4",
|
||||
"System.Collections.NonGeneric": "4.3.0",
|
||||
@@ -310,30 +317,31 @@
|
||||
},
|
||||
"Samboy063.Cpp2IL.Core": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2022.1.0-development.866",
|
||||
"contentHash": "QPMuix/3jRngWBdNSLhAbm9BHYf95Ln1Ph1eCK/cDZdVibxFDFP3a6Yczyx1p7GbN7bRQwrhs2skPJSS/z3m2w==",
|
||||
"resolved": "2022.1.0-pre-release.19",
|
||||
"contentHash": "mAYIrMo0VdOZzh1NS5bZeflg80gtYNY7kZo9q/blEYheUPyLXu5ozQOjX+Bq2yDh40pA+yiE2MXTnN2Is2hjgw==",
|
||||
"dependencies": {
|
||||
"AsmResolver.DotNet": "5.1.0",
|
||||
"Disarm": "2022.1.0-master.26",
|
||||
"Iced": "1.18.0",
|
||||
"Samboy063.LibCpp2IL": "2022.1.0-development.866",
|
||||
"StableNameDotNet": "0.1.0-development.866",
|
||||
"js6pak.Gee.External.Capstone": "2.1.0"
|
||||
"AsmResolver.DotNet": "6.0.0-beta.1",
|
||||
"AssetRipper.CIL": "1.1.2",
|
||||
"AssetRipper.Gee.External.Capstone": "2.3.2",
|
||||
"Disarm": "2022.1.0-master.57",
|
||||
"Iced": "1.21.0",
|
||||
"Samboy063.LibCpp2IL": "2022.1.0-pre-release.19",
|
||||
"StableNameDotNet": "0.1.0-pre-release.19"
|
||||
}
|
||||
},
|
||||
"Samboy063.LibCpp2IL": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2022.1.0-development.866",
|
||||
"contentHash": "EcJSWTfQko8SQozozoUT+aQJVWC8wj8C0YUiPBF4rNRId19yTKp2IXcXnI747v+8/aal222QR6WHfoBK2WlVLg==",
|
||||
"resolved": "2022.1.0-pre-release.19",
|
||||
"contentHash": "/n8p81ltd38BeNNS2xUNPGMSzxk/UGXr9cRNqG1MaLogzANNNrvCAXqWmNMM3tZctjp7vqTxEA+e4J4ngul8Fg==",
|
||||
"dependencies": {
|
||||
"AssetRipper.VersionUtilities": "1.3.1",
|
||||
"Samboy063.WasmDisassembler": "2022.1.0-development.866"
|
||||
"AssetRipper.Primitives": "3.1.3",
|
||||
"Samboy063.WasmDisassembler": "2022.1.0-pre-release.19"
|
||||
}
|
||||
},
|
||||
"Samboy063.WasmDisassembler": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2022.1.0-development.866",
|
||||
"contentHash": "2QK8F3eISkLcoW/Nt7wtxyQh31EXAqEMBVXXjEnuxyvXpBXxOIGpjmE3pWhGwxQwDCbe4zBsLF1zUiqq3/pXRA=="
|
||||
"resolved": "2022.1.0-pre-release.19",
|
||||
"contentHash": "uVQdYm/J6+jJ1xt6GJ3hNhXhciwlX+LmHTPITu9jjZ75T33YJuuTD7pLVYuMymr+4gSVisg7f1wterFSyqJBWA=="
|
||||
},
|
||||
"SemanticVersioning": {
|
||||
"type": "Transitive",
|
||||
@@ -342,13 +350,13 @@
|
||||
},
|
||||
"StableNameDotNet": {
|
||||
"type": "Transitive",
|
||||
"resolved": "0.1.0-development.866",
|
||||
"contentHash": "DJb8x4dV3ucDgM12sU28HxCdeqY/JudJbeJG6mgXWDJzpFZw2Jd7JF1pKFRNLzh/0gpo8bCGLQS9gOWZmBjdtg=="
|
||||
"resolved": "0.1.0-pre-release.19",
|
||||
"contentHash": "5BPWtntv3PXeFIg9CuGW6OM3f5GnwvdQJbzRpufPsistFwFyt1xYW1wSDr+QIdDO7vLndr7iNpWD3FyYp9LL4g=="
|
||||
},
|
||||
"StyleCop.Analyzers.Unstable": {
|
||||
"type": "Transitive",
|
||||
"resolved": "1.2.0.507",
|
||||
"contentHash": "gTY3IQdRqDJ4hbhSA3e/R48oE8b/OiKfvwkt1QdNVfrJK2gMHBV8ldaHJ885jxWZfllK66soa/sdcjh9bX49Tw=="
|
||||
"resolved": "1.2.0.556",
|
||||
"contentHash": "zvn9Mqs/ox/83cpYPignI8hJEM2A93s2HkHs8HYMOAQW0PkampyoErAiIyKxgTLqbbad29HX/shv/6LGSjPJNQ=="
|
||||
},
|
||||
"System.Collections": {
|
||||
"type": "Transitive",
|
||||
@@ -675,11 +683,6 @@
|
||||
"Microsoft.NETCore.Targets": "1.1.0"
|
||||
}
|
||||
},
|
||||
"System.Runtime.CompilerServices.Unsafe": {
|
||||
"type": "Transitive",
|
||||
"resolved": "6.0.0",
|
||||
"contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg=="
|
||||
},
|
||||
"System.Runtime.Extensions": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
@@ -878,23 +881,6 @@
|
||||
"System.Runtime": "4.3.0"
|
||||
}
|
||||
},
|
||||
"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.7",
|
||||
"contentHash": "/Tf/9XjprpHolbcDOrxsKVYy/mUG/FS7aGd9YUgBVEiHeQH4kAE0T1sMbde7q6B5xcrNUsJ5iW7D1RvHudQNqA==",
|
||||
"dependencies": {
|
||||
"System.Runtime.CompilerServices.Unsafe": "6.0.0",
|
||||
"System.Text.Encodings.Web": "6.0.0"
|
||||
}
|
||||
},
|
||||
"System.Threading": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
@@ -917,7 +903,7 @@
|
||||
"reactor": {
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"BepInEx.Unity.IL2CPP": "[6.0.0-be.679, )"
|
||||
"BepInEx.Unity.IL2CPP": "[6.0.0-be.735, )"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,23 @@ internal static class GetStringPatch
|
||||
return true;
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(TranslationController), nameof(TranslationController.GetString), typeof(string), typeof(string), typeof(Il2CppReferenceArray<Il2CppSystem.Object>))]
|
||||
[HarmonyPrefix]
|
||||
public static bool SystemTypesStringPatch(
|
||||
TranslationController __instance,
|
||||
string id,
|
||||
Il2CppReferenceArray<Il2CppSystem.Object> parts,
|
||||
ref string __result)
|
||||
{
|
||||
if (!int.TryParse(id, out var intId))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
var stringName = (StringNames) intId;
|
||||
return !LocalizationManager.TryGetTextFormatted(stringName, parts, out __result);
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(TranslationController), nameof(TranslationController.GetString), typeof(SystemTypes))]
|
||||
[HarmonyPrefix]
|
||||
public static bool SystemTypesStringPatch(TranslationController __instance, SystemTypes room, ref string __result)
|
||||
|
||||
@@ -38,8 +38,7 @@ public sealed class MessageConverterAttribute : Attribute
|
||||
|
||||
try
|
||||
{
|
||||
var messageConverter = (UnsafeMessageConverter) Activator.CreateInstance(type)!;
|
||||
MessageSerializer.Register(messageConverter);
|
||||
MessageSerializer.Register(type);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
@@ -52,5 +51,6 @@ public sealed class MessageConverterAttribute : Attribute
|
||||
internal static void Initialize()
|
||||
{
|
||||
IL2CPPChainloader.Instance.PluginLoad += (_, assembly, _) => Register(assembly);
|
||||
IL2CPPChainloader.Instance.Finished += MessageSerializer.ClearMaps;
|
||||
}
|
||||
}
|
||||
@@ -36,7 +36,8 @@ public sealed class MethodRpcAttribute : Attribute
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether the rpc should be sent immediately.
|
||||
/// </summary>
|
||||
public bool SendImmediately { get; set; }
|
||||
[Obsolete("Non-immediate RPCs were removed in 2025.5.20. All RPCs are immediate. This property will be removed in a future version.")]
|
||||
public bool SendImmediately { get; set; } = true;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="MethodRpcAttribute"/> class.
|
||||
@@ -71,7 +72,7 @@ public sealed class MethodRpcAttribute : Attribute
|
||||
|
||||
try
|
||||
{
|
||||
var customRpc = new MethodRpc(plugin, method, attribute.Id, attribute.SendOption, attribute.LocalHandling, attribute.SendImmediately);
|
||||
var customRpc = new MethodRpc(plugin, method, attribute.Id, attribute.SendOption, attribute.LocalHandling);
|
||||
PluginSingleton<ReactorPlugin>.Instance.CustomRpcManager.Register(customRpc);
|
||||
}
|
||||
catch (Exception e)
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using Hazel;
|
||||
using Hazel.Udp;
|
||||
using Reactor.Networking.Serialization;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Reactor.Networking.Extensions;
|
||||
@@ -12,10 +14,11 @@ public static class ExtraMessageExtensions
|
||||
{
|
||||
private const float MIN = -50f;
|
||||
private const float MAX = 50f;
|
||||
private const float DIFF = MAX - MIN;
|
||||
|
||||
private static float ReverseLerp(float t)
|
||||
{
|
||||
return Mathf.Clamp((t - MIN) / (MAX - MIN), 0f, 1f);
|
||||
return Mathf.Clamp01((t - MIN) / DIFF);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -32,6 +35,33 @@ public static class ExtraMessageExtensions
|
||||
writer.Write(y);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes an Enum value to the <paramref name="writer"/>.
|
||||
/// </summary>
|
||||
/// <param name="writer">The <see cref="MessageWriter"/> to write to.</param>
|
||||
/// <param name="value">The <see cref="Enum"/> to write.</param>
|
||||
public static void Write(this MessageWriter writer, Enum value) => writer.Serialize(Convert.ChangeType(value, Enum.GetUnderlyingType(value.GetType()), CultureInfo.InvariantCulture));
|
||||
|
||||
/// <summary>
|
||||
/// Writes a long value to the <paramref name="writer"/>.
|
||||
/// </summary>
|
||||
/// <param name="writer">The <see cref="MessageWriter"/> to write to.</param>
|
||||
/// <param name="value">The <see cref="long"/> to write.</param>
|
||||
public static void Write(this MessageWriter writer, long value) => writer.Write(BitConverter.GetBytes(value));
|
||||
|
||||
/// <summary>
|
||||
/// Writes a color value to the <paramref name="writer"/>.
|
||||
/// </summary>
|
||||
/// <param name="writer">The <see cref="MessageWriter"/> to write to.</param>
|
||||
/// <param name="value">The <see cref="Color32"/> to write.</param>
|
||||
public static void Write(this MessageWriter writer, Color32 value)
|
||||
{
|
||||
writer.Write(value.r);
|
||||
writer.Write(value.g);
|
||||
writer.Write(value.b);
|
||||
writer.Write(value.a);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads a <see cref="Vector2"/> from the <paramref name="reader"/>.
|
||||
/// </summary>
|
||||
@@ -45,6 +75,43 @@ public static class ExtraMessageExtensions
|
||||
return new Vector2(Mathf.Lerp(MIN, MAX, x), Mathf.Lerp(MIN, MAX, y));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads an enum value and casts it to the specified type from a network message.
|
||||
/// </summary>
|
||||
/// <param name="reader">The <see cref="MessageReader"/> to read from.</param>
|
||||
/// <typeparam name="T">The <see cref="Enum"/> type to convert to.</typeparam>
|
||||
/// <returns>An <see cref="Enum"/> value from the <paramref name="reader"/>.</returns>
|
||||
public static T ReadEnum<T>(this MessageReader reader) where T : struct, Enum => (T) reader.ReadEnum(typeof(T));
|
||||
|
||||
/// <summary>
|
||||
/// Reads an enum value from a network message.
|
||||
/// </summary>
|
||||
/// <param name="reader">The <see cref="MessageReader"/> to read from.</param>
|
||||
/// <param name="enumType">The type of the enum.</param>
|
||||
/// <returns>The resulting enum value from the <paramref name="reader"/>.</returns>
|
||||
public static object ReadEnum(this MessageReader reader, Type enumType) => Enum.ToObject(enumType, reader.Deserialize(Enum.GetUnderlyingType(enumType)));
|
||||
|
||||
/// <summary>
|
||||
/// Reads a long value from a network message.
|
||||
/// </summary>
|
||||
/// <param name="reader">The <see cref="MessageReader"/> to read from.</param>
|
||||
/// <returns>The resulting long value from the <paramref name="reader"/>.</returns>
|
||||
public static long ReadInt64(this MessageReader reader) => BitConverter.ToInt64(reader.ReadBytes(8), 0);
|
||||
|
||||
/// <summary>
|
||||
/// Reads a color value from a network message.
|
||||
/// </summary>
|
||||
/// <param name="reader">The <see cref="MessageReader"/> to read from.</param>
|
||||
/// <returns>The resulting Color32 value from the <paramref name="reader"/>.</returns>
|
||||
public static Color32 ReadColor32(this MessageReader reader) => new(reader.ReadByte(), reader.ReadByte(), reader.ReadByte(), reader.ReadByte());
|
||||
|
||||
/// <summary>
|
||||
/// Reads a color value from a network message.
|
||||
/// </summary>
|
||||
/// <param name="reader">The <see cref="MessageReader"/> to read from.</param>
|
||||
/// <returns>The resulting Color value from the <paramref name="reader"/>.</returns>
|
||||
public static Color ReadColor(this MessageReader reader) => new(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
|
||||
|
||||
/// <summary>
|
||||
/// Sends a message on the <paramref name="connection"/> with an <paramref name="ackCallback"/>.
|
||||
/// </summary>
|
||||
|
||||
@@ -1,14 +1,18 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using AmongUs.Data;
|
||||
using AmongUs.InnerNet.GameDataMessages;
|
||||
using BepInEx.Unity.IL2CPP.Utils;
|
||||
using HarmonyLib;
|
||||
using Hazel;
|
||||
using Il2CppInterop.Runtime;
|
||||
using Il2CppInterop.Runtime.InteropTypes;
|
||||
using Il2CppInterop.Runtime.InteropTypes.Arrays;
|
||||
using InnerNet;
|
||||
using Reactor.Networking.Extensions;
|
||||
using Reactor.Networking.Messages;
|
||||
using Reactor.Utilities;
|
||||
using UnityEngine;
|
||||
using IEnumerator = System.Collections.IEnumerator;
|
||||
|
||||
@@ -29,15 +33,22 @@ internal static class ClientPatches
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(InnerNetClient._HandleGameDataInner_d__41), nameof(InnerNetClient._HandleGameDataInner_d__41.MoveNext))]
|
||||
[HarmonyPatch]
|
||||
public static class HandleGameDataInnerPatch
|
||||
{
|
||||
public static bool Prefix(InnerNetClient._HandleGameDataInner_d__41 __instance, ref bool __result)
|
||||
public static MethodBase TargetMethod()
|
||||
{
|
||||
var innerNetClient = __instance.__4__this;
|
||||
var reader = __instance.reader;
|
||||
return Il2CppStateMachineWrapper<InnerNetClient>.GetStateMachineMoveNext(nameof(InnerNetClient.HandleGameDataInner))!;
|
||||
}
|
||||
|
||||
if (__instance.__1__state != 0) return true;
|
||||
public static bool Prefix(Il2CppObjectBase __instance, ref bool __result)
|
||||
{
|
||||
var wrapper = new Il2CppStateMachineWrapper<InnerNetClient>(__instance);
|
||||
|
||||
var innerNetClient = wrapper.Instance;
|
||||
var reader = wrapper.GetParameter<MessageReader>("reader");
|
||||
|
||||
if (wrapper.State != 0) return true;
|
||||
|
||||
if (reader.Tag == byte.MaxValue)
|
||||
{
|
||||
@@ -63,7 +74,7 @@ internal static class ClientPatches
|
||||
return false;
|
||||
}
|
||||
|
||||
if (reader.Tag == InnerNetClient.SceneChangeFlag && ReactorConnection.Instance?.Syncer == Syncer.Host)
|
||||
if (reader.Tag == (byte) GameDataTypes.SceneChangeFlag && ReactorConnection.Instance?.Syncer == Syncer.Host)
|
||||
{
|
||||
var clientId = reader.ReadPackedInt32();
|
||||
var clientData = innerNetClient.FindClientById(clientId);
|
||||
@@ -126,7 +137,7 @@ internal static class ClientPatches
|
||||
: chatText;
|
||||
|
||||
// Write SendChat directly instead of using RpcSendChat so we can call AddChat ourselves
|
||||
var messageWriter = AmongUsClient.Instance.StartRpc(PlayerControl.LocalPlayer.NetId, (byte) RpcCalls.SendChat);
|
||||
var messageWriter = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte) RpcCalls.SendChat, SendOption.Reliable);
|
||||
messageWriter.Write(truncatedChatText);
|
||||
messageWriter.EndMessage();
|
||||
}
|
||||
@@ -161,14 +172,22 @@ internal static class ClientPatches
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(InnerNetClient._CoSendSceneChange_d__32), nameof(InnerNetClient._CoSendSceneChange_d__32.MoveNext))]
|
||||
[HarmonyPatch]
|
||||
public static class CoSendSceneChangePatch
|
||||
{
|
||||
public static bool Prefix(InnerNetClient._CoSendSceneChange_d__32 __instance, ref bool __result)
|
||||
public static MethodBase TargetMethod()
|
||||
{
|
||||
return Il2CppStateMachineWrapper<InnerNetClient>.GetStateMachineMoveNext(nameof(InnerNetClient.CoSendSceneChange))!;
|
||||
}
|
||||
|
||||
public static bool Prefix(Il2CppObjectBase __instance, ref bool __result)
|
||||
{
|
||||
var wrapper = new Il2CppStateMachineWrapper<InnerNetClient>(__instance);
|
||||
|
||||
if (ReactorConnection.Instance!.Syncer != Syncer.Host) return true;
|
||||
|
||||
var innerNetClient = __instance.__4__this;
|
||||
var innerNetClient = wrapper.Instance;
|
||||
var sceneName = wrapper.GetParameter<string>("sceneName");
|
||||
|
||||
// Check for the conditions when the scene change message should be sent
|
||||
if (!innerNetClient.AmHost &&
|
||||
@@ -181,9 +200,9 @@ internal static class ClientPatches
|
||||
var writer = MessageWriter.Get(SendOption.Reliable);
|
||||
writer.StartMessage(Tags.GameData);
|
||||
writer.Write(innerNetClient.GameId);
|
||||
writer.StartMessage(InnerNetClient.SceneChangeFlag);
|
||||
writer.StartMessage((byte) GameDataTypes.SceneChangeFlag);
|
||||
writer.WritePacked(innerNetClient.ClientId);
|
||||
writer.Write(__instance.sceneName);
|
||||
writer.Write(sceneName);
|
||||
|
||||
// PATCH - Inject ReactorHandshakeC2S
|
||||
Debug("Injecting ReactorHandshakeC2S to CoSendSceneChange");
|
||||
@@ -196,10 +215,10 @@ internal static class ClientPatches
|
||||
writer.Recycle();
|
||||
|
||||
// Create a new coroutine to let AmongUsClient handle scene changes too
|
||||
innerNetClient.StartCoroutine(innerNetClient.CoOnPlayerChangedScene(clientData, __instance.sceneName));
|
||||
innerNetClient.StartCoroutine(innerNetClient.CoOnPlayerChangedScene(clientData, sceneName));
|
||||
|
||||
// Cancel this coroutine
|
||||
__instance.__1__state = -1;
|
||||
wrapper.State = -1;
|
||||
__result = false;
|
||||
return false;
|
||||
}
|
||||
@@ -209,16 +228,24 @@ internal static class ClientPatches
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(InnerNetClient._CoHandleSpawn_d__42), nameof(InnerNetClient._CoHandleSpawn_d__42.MoveNext))]
|
||||
[HarmonyPatch]
|
||||
public static class CoHandleSpawnPatch
|
||||
{
|
||||
public static void Postfix(InnerNetClient._CoHandleSpawn_d__42 __instance, bool __result)
|
||||
public static MethodBase TargetMethod()
|
||||
{
|
||||
return Il2CppStateMachineWrapper<InnerNetClient>.GetStateMachineMoveNext(nameof(InnerNetClient.CoHandleSpawn))!;
|
||||
}
|
||||
|
||||
public static void Postfix(Il2CppObjectBase __instance, bool __result)
|
||||
{
|
||||
if (ReactorConnection.Instance!.Syncer != Syncer.Host) return;
|
||||
|
||||
if (!__result && !AmongUsClient.Instance.AmHost && __instance._ownerId_5__2 == AmongUsClient.Instance.ClientId)
|
||||
var wrapper = new Il2CppStateMachineWrapper<InnerNetClient>(__instance);
|
||||
var ownerId = wrapper.GetParameter<int>("_ownerId_5__2");
|
||||
|
||||
if (!__result && !AmongUsClient.Instance.AmHost && ownerId == AmongUsClient.Instance.ClientId)
|
||||
{
|
||||
var reader = __instance.reader;
|
||||
var reader = wrapper.GetParameter<MessageReader>("reader");
|
||||
if (reader.BytesRemaining >= ReactorHeader.Size && ReactorHeader.Read(reader))
|
||||
{
|
||||
ModdedHandshakeS2C.Deserialize(reader, out var serverName, out var serverVersion, out _);
|
||||
@@ -227,7 +254,7 @@ internal static class ClientPatches
|
||||
else
|
||||
{
|
||||
Debug("Host is not modded");
|
||||
if (!Mod.Validate(ModList.Current, Array.Empty<Mod>(), out var reason))
|
||||
if (!Mod.Validate(ModList.Current, [], out var reason))
|
||||
{
|
||||
AmongUsClient.Instance.DisconnectWithReason(reason);
|
||||
}
|
||||
@@ -236,47 +263,23 @@ internal static class ClientPatches
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(InnerNetClient), nameof(InnerNetClient.WriteSpawnMessage))]
|
||||
public static class WriteSpawnMessagePatch
|
||||
[HarmonyPatch(typeof(SpawnGameDataMessage), nameof(SpawnGameDataMessage.SerializeValues))]
|
||||
public static class SpawnGameDataMessagePatch
|
||||
{
|
||||
public static bool Prefix(InnerNetClient __instance, InnerNetObject netObjParent, int ownerId, SpawnFlags flags, MessageWriter msg)
|
||||
public static void Postfix(SpawnGameDataMessage __instance, MessageWriter msg)
|
||||
{
|
||||
if (ReactorConnection.Instance!.Syncer != Syncer.Host) return true;
|
||||
|
||||
msg.StartMessage(4);
|
||||
msg.WritePacked(netObjParent.SpawnId);
|
||||
msg.WritePacked(ownerId);
|
||||
msg.Write((byte) flags);
|
||||
InnerNetObject[] componentsInChildren = netObjParent.GetComponentsInChildren<InnerNetObject>();
|
||||
msg.WritePacked(componentsInChildren.Length);
|
||||
foreach (var innerNetObject in componentsInChildren)
|
||||
if (ReactorConnection.Instance!.Syncer != Syncer.Host)
|
||||
{
|
||||
innerNetObject.OwnerId = ownerId;
|
||||
innerNetObject.SpawnFlags = flags;
|
||||
if (innerNetObject.NetId == 0)
|
||||
{
|
||||
innerNetObject.NetId = __instance.NetIdCnt++;
|
||||
__instance.allObjects.Add(innerNetObject);
|
||||
__instance.allObjectsFast.Add(innerNetObject.NetId, innerNetObject);
|
||||
}
|
||||
|
||||
msg.WritePacked(innerNetObject.NetId);
|
||||
msg.StartMessage(1);
|
||||
innerNetObject.Serialize(msg, initialState: true);
|
||||
msg.EndMessage();
|
||||
return;
|
||||
}
|
||||
|
||||
// PATCH - Inject ReactorHandshakeS2C
|
||||
if (__instance.ClientId != ownerId && IL2CPP.il2cpp_object_get_class(netObjParent.Pointer) == Il2CppClassPointerStore<PlayerControl>.NativeClassPtr)
|
||||
if (AmongUsClient.Instance.ClientId != __instance.ownerId && __instance.NetObjectType == Il2CppType.Of<PlayerControl>())
|
||||
{
|
||||
Debug("Injecting ReactorHandshakeS2C to WriteSpawnMessage");
|
||||
ReactorHeader.Write(msg);
|
||||
ModdedHandshakeS2C.Serialize(msg, "Among Us", Application.version, 0); // TODO
|
||||
}
|
||||
|
||||
msg.EndMessage();
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -285,7 +288,10 @@ internal static class ClientPatches
|
||||
{
|
||||
public static bool Prefix(InnerNetClient __instance, [HarmonyArgument(0)] MessageReader reader)
|
||||
{
|
||||
if (__instance.NetworkMode == NetworkModes.FreePlay) return true;
|
||||
if (__instance.NetworkMode == NetworkModes.FreePlay)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
var isFirst = false;
|
||||
|
||||
|
||||
@@ -54,8 +54,12 @@ internal static class HttpPatches
|
||||
|
||||
public static void Prefix(UnityWebRequest __instance)
|
||||
{
|
||||
var path = __instance.uri.AbsolutePath;
|
||||
if (path == "/api/games")
|
||||
// new Uri() is necessary because uri property got stripped.
|
||||
var path = new Uri(__instance.url).AbsolutePath;
|
||||
// Public lobby menu uses /api/games/filtered, code requests use /api/games/code,
|
||||
// creating a game uses /api/games.
|
||||
// So we need to match everything that contains /api/games
|
||||
if (path.Contains("/api/games"))
|
||||
{
|
||||
Debug($"{__instance.method} {path}");
|
||||
__instance.SetRequestHeader("Client-Mods", BuildHeader());
|
||||
@@ -64,8 +68,12 @@ internal static class HttpPatches
|
||||
|
||||
public static void Postfix(UnityWebRequest __instance, UnityWebRequestAsyncOperation __result)
|
||||
{
|
||||
var path = __instance.uri.AbsolutePath;
|
||||
if (path == "/api/games")
|
||||
// new Uri() is necessary because uri property got stripped.
|
||||
var path = new Uri(__instance.url).AbsolutePath;
|
||||
// Public lobby menu uses /api/games/filtered, code requests use /api/games/code,
|
||||
// creating a game uses /api/games.
|
||||
// So we need to match everything that contains /api/games
|
||||
if (path.Contains("/api/games"))
|
||||
{
|
||||
__result.add_completed((Action<AsyncOperation>) (_ =>
|
||||
{
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
using System.Reflection;
|
||||
using HarmonyLib;
|
||||
using InnerNet;
|
||||
using Reactor.Utilities;
|
||||
|
||||
namespace Reactor.Networking.Patches;
|
||||
|
||||
@@ -20,20 +22,29 @@ public class ReactorConnection
|
||||
/// </summary>
|
||||
public static ReactorConnection? Instance { get; private set; }
|
||||
|
||||
// CoConnect(string) was inlined, so we patch the MoveNext method instead.
|
||||
[HarmonyPatch]
|
||||
private static class Patches
|
||||
internal static class CoConnectPatch
|
||||
{
|
||||
[HarmonyPatch(typeof(InnerNetClient), nameof(InnerNetClient.CoConnect), typeof(string))]
|
||||
[HarmonyPrefix]
|
||||
public static void CoConnect()
|
||||
public static MethodBase TargetMethod()
|
||||
{
|
||||
Debug("New ReactorConnection created");
|
||||
Instance = new ReactorConnection();
|
||||
return Il2CppStateMachineWrapper<InnerNetClient>.GetStateMachineMoveNext(nameof(InnerNetClient.CoConnect))!;
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(InnerNetClient), nameof(InnerNetClient.DisconnectInternal))]
|
||||
[HarmonyPostfix]
|
||||
public static void DisconnectInternalPostfix()
|
||||
public static void Prefix()
|
||||
{
|
||||
if (Instance == null)
|
||||
{
|
||||
Debug("New ReactorConnection created");
|
||||
Instance = new ReactorConnection();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(InnerNetClient), nameof(InnerNetClient.DisconnectInternal))]
|
||||
internal static class InnerNetClientDisconnectPatch
|
||||
{
|
||||
public static void Postfix()
|
||||
{
|
||||
Debug("ReactorConnection disconnected");
|
||||
Instance = null;
|
||||
|
||||
@@ -32,13 +32,11 @@ public class MethodRpc : UnsafeCustomRpc
|
||||
/// <param name="id">The id of the rpc.</param>
|
||||
/// <param name="option">The send option of the rpc.</param>
|
||||
/// <param name="localHandling">The local handling method of the rpc.</param>
|
||||
/// <param name="sendImmediately">The value indicating whether the rpc should be sent immediately.</param>
|
||||
public MethodRpc(BasePlugin plugin, MethodInfo method, uint id, SendOption option, RpcLocalHandling localHandling, bool sendImmediately) : base(plugin, id)
|
||||
public MethodRpc(BasePlugin plugin, MethodInfo method, uint id, SendOption option, RpcLocalHandling localHandling) : base(plugin, id)
|
||||
{
|
||||
Method = method;
|
||||
LocalHandling = localHandling;
|
||||
SendOption = option;
|
||||
SendImmediately = sendImmediately;
|
||||
|
||||
var parameters = method.GetParameters();
|
||||
|
||||
@@ -71,6 +69,22 @@ public class MethodRpc : UnsafeCustomRpc
|
||||
_handle = Hook(method, parameters, method.IsStatic);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="MethodRpc"/> class.
|
||||
/// </summary>
|
||||
/// <param name="plugin">The plugin that the rpc is attached to.</param>
|
||||
/// <param name="method">The method of the method rpc.</param>
|
||||
/// <param name="id">The id of the rpc.</param>
|
||||
/// <param name="option">The send option of the rpc.</param>
|
||||
/// <param name="localHandling">The local handling method of the rpc.</param>
|
||||
/// <param name="sendImmediately">The value indicating whether the rpc should be sent immediately.</param>
|
||||
[Obsolete("Non-immediate RPCs were removed in 2025.5.20. All RPCs are immediate. Remove sendImmediately from the parameter list.")]
|
||||
public MethodRpc(BasePlugin plugin, MethodInfo method, uint id, SendOption option, RpcLocalHandling localHandling, bool sendImmediately)
|
||||
: this(plugin, method, id, option, localHandling)
|
||||
{
|
||||
SendImmediately = sendImmediately;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the method of the method rpc.
|
||||
/// </summary>
|
||||
@@ -91,7 +105,8 @@ public class MethodRpc : UnsafeCustomRpc
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether the method rpc should be sent immediately.
|
||||
/// </summary>
|
||||
public bool SendImmediately { get; }
|
||||
[Obsolete("Non-immediate RPCs were removed in 2025.5.20. All RPCs are immediate. This property will be removed in a future version.")]
|
||||
public bool SendImmediately { get; } = true;
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void UnsafeWrite(MessageWriter writer, object? data)
|
||||
@@ -134,7 +149,7 @@ public class MethodRpc : UnsafeCustomRpc
|
||||
/// <param name="args">The arguments to serialize and send.</param>
|
||||
public void Send(InnerNetObject innerNetObject, object[] args)
|
||||
{
|
||||
UnsafeSend(innerNetObject, args, SendImmediately);
|
||||
UnsafeSend(innerNetObject, args);
|
||||
}
|
||||
|
||||
private static readonly MethodInfo _sendMethod = AccessTools.Method(typeof(MethodRpc), nameof(Send));
|
||||
|
||||
@@ -108,11 +108,16 @@ public abstract class UnsafeCustomRpc
|
||||
UnsafeHandle(innerNetObject, data);
|
||||
}
|
||||
|
||||
var writer = immediately switch
|
||||
if (immediately == false)
|
||||
{
|
||||
false => AmongUsClient.Instance.StartRpc(innerNetObject.NetId, CustomRpcManager.CallId, SendOption),
|
||||
true => AmongUsClient.Instance.StartRpcImmediately(innerNetObject.NetId, CustomRpcManager.CallId, SendOption, targetClientId),
|
||||
};
|
||||
Warning("Non-immediate RPCs were removed in 2025.5.20! Reactor will now always send immediately!");
|
||||
}
|
||||
|
||||
var writer = AmongUsClient.Instance.StartRpcImmediately(
|
||||
innerNetObject.NetId,
|
||||
CustomRpcManager.CallId,
|
||||
SendOption,
|
||||
targetClientId);
|
||||
|
||||
writer.Write(Mod);
|
||||
writer.WritePacked(Id);
|
||||
@@ -127,14 +132,7 @@ public abstract class UnsafeCustomRpc
|
||||
AckCallbacks.TryAdd(writer, ackCallback);
|
||||
}
|
||||
|
||||
if (immediately)
|
||||
{
|
||||
AmongUsClient.Instance.FinishRpcImmediately(writer);
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.EndMessage();
|
||||
}
|
||||
AmongUsClient.Instance.FinishRpcImmediately(writer);
|
||||
|
||||
if (LocalHandling == RpcLocalHandling.After)
|
||||
{
|
||||
|
||||
@@ -15,33 +15,83 @@ public static class MessageSerializer
|
||||
private static List<UnsafeMessageConverter> MessageConverters { get; } = new();
|
||||
|
||||
private static Dictionary<Type, UnsafeMessageConverter?> MessageConverterMap { get; } = new();
|
||||
private static Dictionary<Type, Type> GenericConvertersMap { get; } = new();
|
||||
|
||||
internal static void ClearMaps()
|
||||
{
|
||||
MessageConverterMap.Clear();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Registers a MessageConverter.
|
||||
/// </summary>
|
||||
/// <param name="messageConverter">The MessageConverter to be registered.</param>
|
||||
public static void Register(UnsafeMessageConverter messageConverter)
|
||||
/// <param name="type">The Type of the MessageConverter to be registered.</param>
|
||||
public static void Register(Type type)
|
||||
{
|
||||
MessageConverters.Add(messageConverter);
|
||||
MessageConverterMap.Clear();
|
||||
if (type.IsGenericTypeDefinition)
|
||||
{
|
||||
var baseType = type.BaseType!;
|
||||
|
||||
if (!baseType.Name.Contains("MessageConverter"))
|
||||
throw new InvalidOperationException($"{type.Name} should directly inherit from MessageConverter<T>");
|
||||
|
||||
var generics = baseType.GetGenericArguments();
|
||||
var param = generics[0];
|
||||
|
||||
GenericConvertersMap.Add(param.GetGenericTypeDefinition(), type);
|
||||
}
|
||||
else
|
||||
{
|
||||
var messageConverter = (UnsafeMessageConverter) Activator.CreateInstance(type)!;
|
||||
MessageConverters.Add(messageConverter);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Finds a MessageConverter for the specified <paramref name="type"/>.
|
||||
/// </summary>
|
||||
/// <param name="type">The type of an object.</param>
|
||||
/// <returns>A MessageConverted that can convert the specified <see cref="Type"/>.</returns>
|
||||
/// <returns>A MessageConverter that can convert the specified <see cref="Type"/>.</returns>
|
||||
public static UnsafeMessageConverter? FindConverter(Type type)
|
||||
{
|
||||
if (MessageConverterMap.TryGetValue(type, out var value))
|
||||
if (!MessageConverterMap.TryGetValue(type, out var value))
|
||||
{
|
||||
return value;
|
||||
value = MessageConverters.SingleOrDefault(x => x.CanConvert(type));
|
||||
|
||||
if (value == null)
|
||||
return null;
|
||||
|
||||
MessageConverterMap.Add(type, value);
|
||||
}
|
||||
|
||||
var converter = MessageConverters.SingleOrDefault(x => x.CanConvert(type));
|
||||
MessageConverterMap.Add(type, converter);
|
||||
return value;
|
||||
}
|
||||
|
||||
return converter;
|
||||
/// <summary>
|
||||
/// Finds and builds a MessageConverter for the specified <paramref name="type"/> using a registered generic converter.
|
||||
/// </summary>
|
||||
/// <param name="type">The type of an object.</param>
|
||||
/// <returns>A MessageConverter that can convert the specified <see cref="Type"/>.</returns>
|
||||
public static UnsafeMessageConverter? FindGenericConverter(Type type)
|
||||
{
|
||||
if (MessageConverterMap.TryGetValue(type, out var value))
|
||||
return value;
|
||||
|
||||
if (!type.IsGenericType)
|
||||
return null;
|
||||
|
||||
var typeDef = type.GetGenericTypeDefinition();
|
||||
|
||||
if (!GenericConvertersMap.TryGetValue(typeDef, out var builder))
|
||||
return null;
|
||||
|
||||
var generic = builder.MakeGenericType(type.GetGenericArguments());
|
||||
value = (UnsafeMessageConverter) Activator.CreateInstance(generic)!;
|
||||
|
||||
MessageConverters.Add(value);
|
||||
MessageConverterMap.Add(type, value);
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -49,7 +99,7 @@ public static class MessageSerializer
|
||||
/// </summary>
|
||||
/// <param name="writer">The <see cref="MessageWriter"/> to write to.</param>
|
||||
/// <param name="args">The args to be written.</param>
|
||||
public static void Serialize(MessageWriter writer, object[] args)
|
||||
public static void Serialize(this MessageWriter writer, params object[] args)
|
||||
{
|
||||
foreach (var arg in args)
|
||||
{
|
||||
@@ -87,24 +137,48 @@ public static class MessageSerializer
|
||||
case bool i:
|
||||
writer.Write(i);
|
||||
break;
|
||||
case ulong i:
|
||||
writer.Write(i);
|
||||
break;
|
||||
case long i:
|
||||
ExtraMessageExtensions.Write(writer, i); // For some reason this insists on referring the to float write method, so this is me taking precautions
|
||||
break;
|
||||
case Vector2 i:
|
||||
writer.Write(i);
|
||||
break;
|
||||
case string i:
|
||||
writer.Write(i);
|
||||
break;
|
||||
case Color i:
|
||||
writer.Write(i);
|
||||
break;
|
||||
case Color32 i:
|
||||
writer.Write(i);
|
||||
break;
|
||||
case Enum i:
|
||||
writer.Write(i);
|
||||
break;
|
||||
default:
|
||||
var converter = FindConverter(@object.GetType());
|
||||
if (converter != null)
|
||||
{
|
||||
converter.UnsafeWrite(writer, @object);
|
||||
break;
|
||||
}
|
||||
var type = @object.GetType();
|
||||
var converter = FindGenericConverter(type) ?? FindConverter(type);
|
||||
|
||||
throw new NotSupportedException("Couldn't serialize " + @object.GetType());
|
||||
if (converter != null)
|
||||
converter.UnsafeWrite(writer, @object);
|
||||
else
|
||||
throw new NotSupportedException("Couldn't serialize " + type.Name);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Deserializes a generic <typeparamref name="T"/> value from the <paramref name="reader"/>.
|
||||
/// </summary>
|
||||
/// <param name="reader">The <see cref="MessageReader"/> to read from.</param>
|
||||
/// <typeparam name="T">The type to be read.</typeparam>
|
||||
/// <returns>A generic <typeparamref name="T"/> value from the <paramref name="reader"/>.</returns>
|
||||
public static T Deserialize<T>(this MessageReader reader) => (T) reader.Deserialize(typeof(T));
|
||||
|
||||
/// <summary>
|
||||
/// Deserializes an <see cref="object"/> of <paramref name="objectType"/> from the <paramref name="reader"/>.
|
||||
/// </summary>
|
||||
@@ -158,7 +232,33 @@ public static class MessageSerializer
|
||||
return reader.ReadString();
|
||||
}
|
||||
|
||||
var converter = FindConverter(objectType);
|
||||
if (objectType == typeof(ulong))
|
||||
{
|
||||
return reader.ReadUInt64();
|
||||
}
|
||||
|
||||
if (objectType == typeof(long))
|
||||
{
|
||||
return reader.ReadInt64();
|
||||
}
|
||||
|
||||
if (objectType == typeof(Color))
|
||||
{
|
||||
return reader.ReadColor();
|
||||
}
|
||||
|
||||
if (objectType == typeof(Color32))
|
||||
{
|
||||
return reader.ReadColor32();
|
||||
}
|
||||
|
||||
if (objectType.IsEnum)
|
||||
{
|
||||
return reader.ReadEnum(objectType);
|
||||
}
|
||||
|
||||
var converter = FindGenericConverter(objectType) ?? FindConverter(objectType);
|
||||
|
||||
if (converter != null)
|
||||
{
|
||||
return converter.UnsafeRead(reader, objectType);
|
||||
|
||||
@@ -1,13 +1,20 @@
|
||||
using System.Reflection;
|
||||
using HarmonyLib;
|
||||
using Reactor.Utilities;
|
||||
|
||||
namespace Reactor.Patches.Fixes;
|
||||
|
||||
/// <summary>
|
||||
/// Fixes Game Lists not working on servers using legacy matchmaking.
|
||||
/// </summary>
|
||||
[HarmonyPatch(typeof(AmongUsClient._CoFindGame_d__3), nameof(AmongUsClient._CoFindGame_d__3.MoveNext))]
|
||||
[HarmonyPatch]
|
||||
internal static class CoFindGamePatch
|
||||
{
|
||||
public static MethodBase TargetMethod()
|
||||
{
|
||||
return Il2CppStateMachineWrapper<AmongUsClient>.GetStateMachineMoveNext(nameof(AmongUsClient.CoFindGame))!;
|
||||
}
|
||||
|
||||
public static void Prefix()
|
||||
{
|
||||
if (AmongUsClient.Instance.LastDisconnectReason == DisconnectReasons.Unknown)
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using HarmonyLib;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
@@ -8,14 +10,20 @@ namespace Reactor.Patches.Fixes;
|
||||
/// <summary>
|
||||
/// "Fixes" an issue where empty TextBoxes have wrong cursor positions.
|
||||
/// </summary>
|
||||
[HarmonyPatch(typeof(TextMeshProExtensions), nameof(TextMeshProExtensions.CursorPos))]
|
||||
[HarmonyPatch]
|
||||
internal static class CursorPosPatch
|
||||
{
|
||||
public static IEnumerable<MethodBase> TargetMethods()
|
||||
{
|
||||
return AccessTools.GetDeclaredMethods(typeof(TextMeshProExtensions)).Where(m => m.Name == nameof(TextMeshProExtensions.CursorPos));
|
||||
}
|
||||
|
||||
public static bool Prefix(TextMeshPro self, ref Vector2 __result)
|
||||
{
|
||||
if (self.textInfo == null || self.textInfo.lineCount == 0 || self.textInfo.lineInfo[0].characterCount <= 0)
|
||||
{
|
||||
__result = self.GetTextInfo(" ").lineInfo.First().lineExtents.max;
|
||||
self.text = string.Empty;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using HarmonyLib;
|
||||
using Il2CppInterop.Runtime.InteropTypes;
|
||||
using Reactor.Utilities;
|
||||
|
||||
namespace Reactor.Patches.Miscellaneous;
|
||||
|
||||
[HarmonyPatch]
|
||||
internal static class CustomServersPatch
|
||||
{
|
||||
private static bool IsCurrentServerOfficial()
|
||||
@@ -16,32 +19,55 @@ internal static class CustomServersPatch
|
||||
regionInfo.Servers.All(serverInfo => serverInfo.Ip.EndsWith(Domain, StringComparison.Ordinal));
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(AuthManager._CoConnect_d__4), nameof(AuthManager._CoConnect_d__4.MoveNext))]
|
||||
[HarmonyPatch(typeof(AuthManager._CoWaitForNonce_d__6), nameof(AuthManager._CoWaitForNonce_d__6.MoveNext))]
|
||||
[HarmonyPrefix]
|
||||
public static bool DisableAuthServer(ref bool __result)
|
||||
[HarmonyPatch]
|
||||
public static class DisableAuthServerPatch
|
||||
{
|
||||
if (IsCurrentServerOfficial())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
public static IEnumerable<MethodBase> TargetMethods() =>
|
||||
[
|
||||
Il2CppStateMachineWrapper<AuthManager>.GetStateMachineMoveNext(nameof(AuthManager.CoConnect))!,
|
||||
Il2CppStateMachineWrapper<AuthManager>.GetStateMachineMoveNext(nameof(AuthManager.CoWaitForNonce))!
|
||||
];
|
||||
|
||||
__result = false;
|
||||
return false;
|
||||
public static bool Prefix(ref bool __result)
|
||||
{
|
||||
if (IsCurrentServerOfficial())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
__result = false;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(AmongUsClient._CoJoinOnlinePublicGame_d__1), nameof(AmongUsClient._CoJoinOnlinePublicGame_d__1.MoveNext))]
|
||||
[HarmonyPrefix]
|
||||
public static void EnableUdpMatchmaking(AmongUsClient._CoJoinOnlinePublicGame_d__1 __instance)
|
||||
[HarmonyPatch]
|
||||
public static class EnableUdpPatch
|
||||
{
|
||||
// Skip to state 1 which just calls CoJoinOnlineGameDirect
|
||||
if (__instance.__1__state == 0 && !ServerManager.Instance.IsHttp)
|
||||
public static MethodBase TargetMethod()
|
||||
{
|
||||
__instance.__1__state = 1;
|
||||
__instance.__8__1 = new AmongUsClient.__c__DisplayClass1_0
|
||||
return Il2CppStateMachineWrapper<AmongUsClient>.GetStateMachineMoveNext(nameof(AmongUsClient.CoJoinOnlinePublicGame))!;
|
||||
}
|
||||
|
||||
public static void Prefix(Il2CppObjectBase __instance)
|
||||
{
|
||||
var stateMachine = new Il2CppStateMachineWrapper<AmongUsClient>(__instance);
|
||||
|
||||
// Skip to state 1 which just calls CoJoinOnlineGameDirect
|
||||
if (stateMachine.State == 0 && !ServerManager.Instance.IsHttp)
|
||||
{
|
||||
matchmakerToken = string.Empty,
|
||||
};
|
||||
stateMachine.State = 1;
|
||||
var lambdaType = stateMachine.GetParameter<Il2CppObjectBase>("__8__1").GetType();
|
||||
var newDisplayClassObject = Activator.CreateInstance(lambdaType);
|
||||
if (newDisplayClassObject == null)
|
||||
{
|
||||
throw new InvalidOperationException($"Could not create display class of type '{lambdaType}'.");
|
||||
}
|
||||
|
||||
var wrappedDisplayClassObject = new Il2CppCompilerGeneratedObjectWrapper(newDisplayClassObject);
|
||||
wrappedDisplayClassObject.SetField("matchmakerToken", string.Empty);
|
||||
|
||||
stateMachine.SetParameter("__8__1", newDisplayClassObject);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -35,15 +35,12 @@ internal static class FreeNamePatch
|
||||
var textBox = nameText.GetComponent<TextBoxTMP>();
|
||||
textBox.outputText.alignment = TextAlignmentOptions.CenterGeoAligned;
|
||||
textBox.outputText.transform.position = nameText.transform.position;
|
||||
textBox.outputText.fontSize = 4f;
|
||||
|
||||
textBox.OnChange.AddListener((Action) (() =>
|
||||
{
|
||||
DataManager.Player.Customization.Name = textBox.text;
|
||||
}));
|
||||
textBox.OnEnter = textBox.OnFocusLost = textBox.OnChange;
|
||||
|
||||
textBox.Pipe.GetComponent<TextMeshPro>().fontSize = 4f;
|
||||
}));
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
using System;
|
||||
using HarmonyLib;
|
||||
using Reactor.Utilities;
|
||||
|
||||
namespace Reactor.Patches.Miscellaneous;
|
||||
|
||||
[HarmonyPatch(typeof(PingTracker), nameof(PingTracker.Update))]
|
||||
internal static class PingTrackerPatch
|
||||
{
|
||||
[HarmonyPostfix]
|
||||
[HarmonyPriority(Priority.Last)]
|
||||
public static void Postfix(PingTracker __instance)
|
||||
{
|
||||
var extraText = ReactorCredits.GetText(ReactorCredits.Location.PingTracker);
|
||||
if (extraText != null)
|
||||
{
|
||||
if (!__instance.text.text.EndsWith("\n", StringComparison.InvariantCulture)) __instance.text.text += "\n";
|
||||
__instance.text.text += extraText;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
using System;
|
||||
using BepInEx;
|
||||
using BepInEx.Unity.IL2CPP;
|
||||
using HarmonyLib;
|
||||
using Reactor.Utilities;
|
||||
using Reactor.Utilities.Extensions;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
@@ -89,30 +89,22 @@ public static class ReactorVersionShower
|
||||
}));
|
||||
}
|
||||
|
||||
private static string ToStringWithoutBuild(Version version)
|
||||
{
|
||||
return $"{version.Major}.{version.Minor}.{version.Patch}{(version.PreRelease == null ? string.Empty : $"-{version.PreRelease}")}";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Updates <see cref="Text"/> with reactor version and fires <see cref="TextUpdated"/>.
|
||||
/// </summary>
|
||||
public static void UpdateText()
|
||||
{
|
||||
if (Text == null) return;
|
||||
Text.text = "Reactor " + ReactorPlugin.Version;
|
||||
Text.text += "\nBepInEx " + ToStringWithoutBuild(Paths.BepInExVersion);
|
||||
Text.text = "Reactor " + Version.Parse(ReactorPlugin.Version).WithoutBuild();
|
||||
Text.text += "\nBepInEx " + Paths.BepInExVersion.WithoutBuild();
|
||||
Text.text += "\nMods: " + IL2CPPChainloader.Instance.Plugins.Count;
|
||||
|
||||
var creditsText = ReactorCredits.GetText(ReactorCredits.Location.MainMenu);
|
||||
if (creditsText != null)
|
||||
{
|
||||
Text.text += "\n" + creditsText;
|
||||
}
|
||||
|
||||
TextUpdated?.Invoke(Text);
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(FreeWeekendShower), nameof(FreeWeekendShower.Start))]
|
||||
private static class FreeWeekendShowerPatch
|
||||
{
|
||||
public static bool Prefix(FreeWeekendShower __instance)
|
||||
{
|
||||
__instance.Output.Destroy();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,3 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using UnityEngine.EventSystems;
|
||||
using UnityEngine.UI;
|
||||
@@ -52,6 +51,6 @@ public static class CanvasUtilities
|
||||
/// <returns>An empty texture of specified size.</returns>
|
||||
public static Texture2D CreateEmptyTexture(int width = 0, int height = 0)
|
||||
{
|
||||
return new Texture2D(width, height, TextureFormat.RGBA32, Texture.GenerateAllMips, false, IntPtr.Zero);
|
||||
return new Texture2D(width, height, TextureFormat.RGBA32, Texture.GenerateAllMips, false);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
namespace Reactor.Utilities.Extensions;
|
||||
|
||||
/// <summary>
|
||||
/// Provides extension methods for TestMeshPro's Rich Text.
|
||||
/// </summary>
|
||||
internal static class RichTextExtensions
|
||||
{
|
||||
private static string Wrap(this string text, string tag)
|
||||
{
|
||||
return $"<{tag}>{text}</{tag}>";
|
||||
}
|
||||
|
||||
private static string Wrap(this string text, string tag, string value)
|
||||
{
|
||||
return $"<{tag}={value}>{text}</{tag}>";
|
||||
}
|
||||
|
||||
public static string Align(this string text, string value)
|
||||
{
|
||||
return text.Wrap("align", value);
|
||||
}
|
||||
|
||||
public static string Color(this string text, string value)
|
||||
{
|
||||
return text.Wrap("color", value);
|
||||
}
|
||||
|
||||
public static string Size(this string text, string value)
|
||||
{
|
||||
return text.Wrap("size", value);
|
||||
}
|
||||
|
||||
public static string EscapeRichText(this string text)
|
||||
{
|
||||
return text
|
||||
.Replace("<noparse>", string.Empty)
|
||||
.Replace("</noparse>", string.Empty)
|
||||
.Wrap("noparse");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
using SemanticVersioning;
|
||||
|
||||
namespace Reactor.Utilities.Extensions;
|
||||
|
||||
/// <summary>
|
||||
/// Provides extension methods for <see cref="SemanticVersioning.Version"/>.
|
||||
/// </summary>
|
||||
public static class VersionExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets the provided <paramref name="version"/> without the build string (everything after the + symbol like the commit hash is stripped).
|
||||
/// </summary>
|
||||
/// <param name="version">The <see cref="SemanticVersioning.Version"/>.</param>
|
||||
/// <returns>The <paramref name="version"/> without build.</returns>
|
||||
public static Version WithoutBuild(this Version version)
|
||||
{
|
||||
return new Version(version.Major, version.Minor, version.Patch, version.PreRelease);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,132 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using HarmonyLib;
|
||||
|
||||
namespace Reactor.Utilities;
|
||||
|
||||
/// <summary>
|
||||
/// A safe wrapper around IL2CPP compiler generated classes like DisplayClass or IEnumerator state machines.
|
||||
/// This is useful for gracefully handling changes across different game versions and updates, which may affect
|
||||
/// compiler generated names.
|
||||
/// To use this class, pass the instance object of the compiler generated class into the constructor.
|
||||
/// Then you can use the GetField and SetField methods to access the fields of the compiler generated class
|
||||
/// by their original names.
|
||||
/// </summary>
|
||||
public class Il2CppCompilerGeneratedObjectWrapper
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets a reference to the compiler generated object.
|
||||
/// </summary>
|
||||
public object GeneratedObject { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the type of the compiler generated object.
|
||||
/// </summary>
|
||||
protected Type GeneratedType { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the property info cache for faster lookups.
|
||||
/// </summary>
|
||||
protected Dictionary<string, PropertyInfo> PropertyCache { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the getter cache for faster property access.
|
||||
/// </summary>
|
||||
protected Dictionary<string, Delegate> GetterCache { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the setter cache for faster property access.
|
||||
/// </summary>
|
||||
protected Dictionary<string, Delegate> SetterCache { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="Il2CppCompilerGeneratedObjectWrapper"/> class.
|
||||
/// </summary>
|
||||
/// <param name="generatedObject">An instance of the compiler generated object.</param>
|
||||
public Il2CppCompilerGeneratedObjectWrapper(object generatedObject)
|
||||
{
|
||||
GeneratedObject = generatedObject;
|
||||
GeneratedType = generatedObject.GetType();
|
||||
|
||||
PropertyCache = [];
|
||||
GetterCache = [];
|
||||
SetterCache = [];
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Caches the property info, getter, and setter for a given field name and type.
|
||||
/// </summary>
|
||||
/// <param name="fieldName">The name of the field to cache.</param>
|
||||
/// <typeparam name="T">The expected type of the field.</typeparam>
|
||||
/// <returns>The cached <see cref="PropertyInfo"/> for the specified field.</returns>
|
||||
/// <exception cref="MissingMemberException">Thrown if the field does not exist in the compiler generated type.</exception>
|
||||
/// <exception cref="InvalidCastException">Thrown if the field exists but is not of the expected type.</exception>
|
||||
public PropertyInfo CacheProperty<T>(string fieldName)
|
||||
{
|
||||
var propertyInfo = AccessTools.Property(GeneratedType, fieldName)
|
||||
?? throw new MissingMemberException(
|
||||
$"Could not find field '{fieldName}' in type '{GeneratedType}'.");
|
||||
|
||||
if (propertyInfo.PropertyType != typeof(T))
|
||||
{
|
||||
throw new InvalidCastException(
|
||||
$"Field '{fieldName}' is of type '{propertyInfo.PropertyType}', not '{typeof(T)}'.");
|
||||
}
|
||||
|
||||
PropertyCache[fieldName] = propertyInfo;
|
||||
|
||||
var funcType = typeof(Func<T>);
|
||||
GetterCache[fieldName] = propertyInfo.GetMethod!.CreateDelegate(funcType, GeneratedObject);
|
||||
|
||||
var actionType = typeof(Action<T>);
|
||||
SetterCache[fieldName] = propertyInfo.SetMethod!.CreateDelegate(actionType, GeneratedObject);
|
||||
|
||||
return propertyInfo;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the value of a field in the compiler generated object.
|
||||
/// </summary>
|
||||
/// <param name="fieldName">The name of the field to get.</param>
|
||||
/// <typeparam name="TField">The type of the field.</typeparam>
|
||||
/// <returns>>The value of the field.</returns>
|
||||
/// <exception cref="MissingMemberException">Thrown if the field does not exist.</exception>
|
||||
public TField GetField<TField>(string fieldName)
|
||||
{
|
||||
if (!PropertyCache.TryGetValue(fieldName, out var propertyInfo))
|
||||
{
|
||||
propertyInfo = CacheProperty<TField>(fieldName);
|
||||
}
|
||||
|
||||
if (GetterCache.TryGetValue(fieldName, out var getter))
|
||||
{
|
||||
return ((Func<TField>) getter)();
|
||||
}
|
||||
|
||||
return (TField) propertyInfo.GetValue(GeneratedObject)!;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the value of a field in the compiler generated object.
|
||||
/// </summary>
|
||||
/// <param name="fieldName">The name of the field to set.</param>
|
||||
/// <param name="value">The value to set.</param>
|
||||
/// <typeparam name="TField">The type of the field.</typeparam>
|
||||
/// <exception cref="MissingMemberException">Thrown if the field does not exist.</exception>
|
||||
public void SetField<TField>(string fieldName, TField value)
|
||||
{
|
||||
if (!PropertyCache.TryGetValue(fieldName, out var propertyInfo))
|
||||
{
|
||||
propertyInfo = CacheProperty<TField>(fieldName);
|
||||
}
|
||||
|
||||
if (SetterCache.TryGetValue(fieldName, out var setter))
|
||||
{
|
||||
((Action<TField>) setter)(value);
|
||||
return;
|
||||
}
|
||||
|
||||
propertyInfo.SetValue(GeneratedObject, value);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,108 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using HarmonyLib;
|
||||
|
||||
namespace Reactor.Utilities;
|
||||
|
||||
/// <summary>
|
||||
/// A wrapper for IL2CPP state machine objects to access their parent instance and state.
|
||||
/// This class is useful for working with IL2CPP state machines across different game versions.
|
||||
/// To use it, pass the instance object of the state machine into the constructor. To access the parent class,
|
||||
/// use the Instance property. To access the current state of the state machine, use the State property.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">The type of the parent class that owns the state machine.</typeparam>
|
||||
public class Il2CppStateMachineWrapper<T> : Il2CppCompilerGeneratedObjectWrapper
|
||||
{
|
||||
// normally it is fields, but IL2CPP turns them into properties
|
||||
private readonly PropertyInfo _thisProperty;
|
||||
private readonly PropertyInfo _stateProperty;
|
||||
|
||||
private T? _parentInstance;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the instance of the parent class that owns the state machine.
|
||||
/// </summary>
|
||||
public T Instance => _parentInstance ??= (T) _thisProperty.GetValue(GeneratedObject)!;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the current state of the state machine.
|
||||
/// </summary>
|
||||
/// <returns>The current state as an integer.</returns>
|
||||
public int State
|
||||
{
|
||||
get => (int) _stateProperty.GetValue(GeneratedObject)!;
|
||||
set => _stateProperty.SetValue(GeneratedObject, value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="Il2CppStateMachineWrapper{T}"/> class.
|
||||
/// </summary>
|
||||
/// <param name="stateMachine">The instance object of the state machine being wrapped.</param>
|
||||
public Il2CppStateMachineWrapper(object stateMachine) : base(stateMachine)
|
||||
{
|
||||
// The names of these properties are implementation details of the IL compiler used by Unity.
|
||||
// They should be stable as long as Unity sticks to mono.
|
||||
_thisProperty = AccessTools.Property(GeneratedType, "__4__this");
|
||||
_stateProperty = AccessTools.Property(GeneratedType, "__1__state");
|
||||
|
||||
if (_thisProperty == null || _stateProperty == null)
|
||||
{
|
||||
throw new MissingMemberException($"Could not find required properties in type '{GeneratedType}'.");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a parameter from the state machine by its name.
|
||||
/// </summary>
|
||||
/// <param name="parameterName">The name of the parameter to retrieve.</param>
|
||||
/// <typeparam name="TField">The type of the parameter to retrieve.</typeparam>
|
||||
/// <returns>>The value of the specified parameter.</returns>
|
||||
/// <exception cref="MissingFieldException">Thrown if the specified parameter does not exist.</exception>
|
||||
public TField GetParameter<TField>(string parameterName)
|
||||
{
|
||||
return GetField<TField>(parameterName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets a parameter in the state machine by its name.
|
||||
/// </summary>
|
||||
/// <param name="parameterName">The name of the parameter to set.</param>
|
||||
/// <param name="value">The value to set for the parameter.</param>
|
||||
/// <typeparam name="TField">The type of the parameter to set.</typeparam>
|
||||
/// <exception cref="MissingFieldException">Thrown if the specified parameter does not exist.</exception>
|
||||
public void SetParameter<TField>(string parameterName, TField value)
|
||||
{
|
||||
SetField(parameterName, value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Attempts to retrieve the MoveNext method of a state machine for the specified method name.
|
||||
/// </summary>
|
||||
/// <param name="methodName">The name of the method whose state machine MoveNext method is to be retrieved.</param>
|
||||
/// <returns>The MoveNext <see cref="MethodBase"/> if found; otherwise, null.</returns>
|
||||
public static MethodBase? GetStateMachineMoveNext(string methodName)
|
||||
{
|
||||
var typeName = typeof(T).FullName;
|
||||
var showRoleStateMachine =
|
||||
typeof(T)
|
||||
.GetNestedTypes()
|
||||
.FirstOrDefault(x => x.Name.Contains(methodName));
|
||||
|
||||
if (showRoleStateMachine == null)
|
||||
{
|
||||
Error($"Failed to find {methodName} state machine for {typeName}");
|
||||
return null;
|
||||
}
|
||||
|
||||
var moveNext = AccessTools.Method(showRoleStateMachine, "MoveNext");
|
||||
if (moveNext == null)
|
||||
{
|
||||
Error($"Failed to find MoveNext method for {typeName}.{methodName}");
|
||||
return null;
|
||||
}
|
||||
|
||||
Info($"Found {methodName}.MoveNext");
|
||||
return moveNext;
|
||||
}
|
||||
}
|
||||
@@ -9,7 +9,7 @@ namespace Reactor.Utilities.ImGui;
|
||||
/// </summary>
|
||||
public class Window
|
||||
{
|
||||
private static int _lastWindowId;
|
||||
private static int _lastWindowId = 2135184938;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the next window id.
|
||||
|
||||
@@ -0,0 +1,123 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using BepInEx.Unity.IL2CPP;
|
||||
using Reactor.Patches;
|
||||
using Reactor.Utilities.Extensions;
|
||||
|
||||
namespace Reactor.Utilities;
|
||||
|
||||
/// <summary>
|
||||
/// Provides a way for mods to show their version information in-game.
|
||||
/// </summary>
|
||||
public static class ReactorCredits
|
||||
{
|
||||
private readonly struct ModIdentifier(string name, string version, Func<Location, bool>? shouldShow, bool isPreRelease)
|
||||
{
|
||||
private const string NormalColor = "#fff";
|
||||
private const string PreReleaseColor = "#f00";
|
||||
|
||||
public string Name => name;
|
||||
|
||||
public string Text { get; } = $"{name} {version}".EscapeRichText().Color(isPreRelease ? PreReleaseColor : NormalColor);
|
||||
|
||||
public bool ShouldShow(Location location)
|
||||
{
|
||||
return shouldShow == AlwaysShow || shouldShow(location);
|
||||
}
|
||||
}
|
||||
|
||||
private static readonly List<ModIdentifier> _modIdentifiers = [];
|
||||
|
||||
/// <summary>
|
||||
/// Represents the location of where the credit is shown.
|
||||
/// </summary>
|
||||
public enum Location
|
||||
{
|
||||
/// <summary>
|
||||
/// In the main menu under Reactor/BepInEx versions.
|
||||
/// </summary>
|
||||
MainMenu,
|
||||
|
||||
/// <summary>
|
||||
/// During game under the ping tracker.
|
||||
/// </summary>
|
||||
PingTracker,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// A special value indicating a mod should always show.
|
||||
/// </summary>
|
||||
public const Func<Location, bool>? AlwaysShow = null;
|
||||
|
||||
/// <summary>
|
||||
/// Registers a mod with the <see cref="ReactorCredits"/>, adding it to the list of mods that will be displayed.
|
||||
/// </summary>
|
||||
/// <param name="name">The user-friendly name of the mod. Can contain spaces or special characters.</param>
|
||||
/// <param name="version">The version of the mod.</param>
|
||||
/// <param name="isPreRelease">If this version is a development or beta version. If true, it will display the mod in red.</param>
|
||||
/// <param name="shouldShow">
|
||||
/// This function will be called every frame to determine if the mod should be displayed or not.
|
||||
/// This function should return false if your mod is currently disabled or has no effect on gameplay at the time.
|
||||
/// If you want the mod to be displayed at all times, you can set this parameter to <see cref="ReactorCredits.AlwaysShow"/>.
|
||||
/// </param>
|
||||
public static void Register(string name, string version, bool isPreRelease, Func<Location, bool>? shouldShow)
|
||||
{
|
||||
const int MaxLength = 60;
|
||||
|
||||
if (name.Length + version.Length > MaxLength)
|
||||
{
|
||||
Error($"Not registering mod \"{name}\" with version \"{version}\" in {nameof(ReactorCredits)} because the combined length of the mod name and version is greater than {MaxLength} characters.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (_modIdentifiers.Any(m => m.Name == name))
|
||||
{
|
||||
Error($"Mod \"{name}\" is already registered in {nameof(ReactorCredits)}.");
|
||||
return;
|
||||
}
|
||||
|
||||
_modIdentifiers.Add(new ModIdentifier(name, version, shouldShow, isPreRelease));
|
||||
|
||||
_modIdentifiers.Sort((a, b) => string.Compare(a.Name, b.Name, StringComparison.Ordinal));
|
||||
|
||||
if (!isPreRelease)
|
||||
{
|
||||
Info($"Mod \"{name}\" registered in {nameof(ReactorCredits)} with version {version}.");
|
||||
}
|
||||
else
|
||||
{
|
||||
Warning($"Mod \"{name}\" registered in {nameof(ReactorCredits)} with DEVELOPMENT/BETA version {version}.");
|
||||
}
|
||||
|
||||
ReactorVersionShower.UpdateText();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Registers a mod with the <see cref="ReactorCredits"/>, adding it to the list of mods that will be displayed.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">The BepInEx plugin type to get the name and version from.</typeparam>
|
||||
/// <param name="shouldShow"><inheritdoc cref="Register(string,string,bool,System.Func{Location,bool})" path="/param[@name='shouldShow']"/></param>
|
||||
public static void Register<T>(Func<Location, bool>? shouldShow) where T : BasePlugin
|
||||
{
|
||||
var pluginInfo = IL2CPPChainloader.Instance.Plugins.Values.SingleOrDefault(p => p.TypeName == typeof(T).FullName)
|
||||
?? throw new ArgumentException("Couldn't find the metadata for the provided plugin type", nameof(T));
|
||||
|
||||
var metadata = pluginInfo.Metadata;
|
||||
|
||||
Register(metadata.Name, metadata.Version.WithoutBuild().Clean(), metadata.Version.IsPreRelease, shouldShow);
|
||||
}
|
||||
|
||||
internal static string? GetText(Location location)
|
||||
{
|
||||
var modTexts = _modIdentifiers.Where(m => m.ShouldShow(location)).Select(m => m.Text).ToArray();
|
||||
if (modTexts.Length == 0) return null;
|
||||
|
||||
return location switch
|
||||
{
|
||||
Location.MainMenu => string.Join('\n', modTexts),
|
||||
Location.PingTracker => ("<space=3em>" + string.Join(", ", modTexts)).Size("50%").Align("center"),
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(location), location, null),
|
||||
};
|
||||
}
|
||||
}
|
||||
+98
-112
@@ -4,9 +4,9 @@
|
||||
"net6.0": {
|
||||
"AmongUs.GameLibs.Steam": {
|
||||
"type": "Direct",
|
||||
"requested": "[2024.6.18, )",
|
||||
"resolved": "2024.6.18",
|
||||
"contentHash": "xb+HP1xXn4/ES8AgXpk9xeoW568LFYw5NTjY6bHwd6vQjHDf2kT1xHMmQ1me5Vfee/Gp69YIMZDXUAUToG7Elg=="
|
||||
"requested": "[2025.4.15, )",
|
||||
"resolved": "2025.4.15",
|
||||
"contentHash": "R3RxzHGZOGUJ9nMwrP0cjS6g+sh60QUU506Mo47lh17155enUjH6PtErijihSoU7t3aQpzCIyC67W3XrrHhH4g=="
|
||||
},
|
||||
"BepInEx.AutoPlugin": {
|
||||
"type": "Direct",
|
||||
@@ -16,99 +16,111 @@
|
||||
},
|
||||
"BepInEx.IL2CPP.MSBuild": {
|
||||
"type": "Direct",
|
||||
"requested": "[2.0.1, )",
|
||||
"resolved": "2.0.1",
|
||||
"contentHash": "hUZjCV0t8dkw/Z/zq4Zl405QP7frBk/LVfMdUmUz+7XOhGd7lYPKrR48A5vbGl2QeHudMxlkXzAr9WM3Duq2SQ=="
|
||||
"requested": "[2.1.0-rc.1, )",
|
||||
"resolved": "2.1.0-rc.1",
|
||||
"contentHash": "WI/7TbJwWl5P4B6UXGtKI1VMe6fA6h3fcbp3ZjJKqOBQ5MJfDMmeVB4fb+RW1tUQdxnlSWV3Ul62PHFyTqp4PA=="
|
||||
},
|
||||
"BepInEx.Unity.IL2CPP": {
|
||||
"type": "Direct",
|
||||
"requested": "[6.0.0-be.679, )",
|
||||
"resolved": "6.0.0-be.679",
|
||||
"contentHash": "KnfMjWSXI5+dxbkLCy8VssEnZtTN3MXUHDdBkvPbMiZ6oR1RGZWdLlA90/XQkY/4kMA5P4OCZP4eQ1o0XftbSQ==",
|
||||
"requested": "[6.0.0-be.735, )",
|
||||
"resolved": "6.0.0-be.735",
|
||||
"contentHash": "2+eFJGKMR1GFPeU9wuF+TVrMANIaWIc/6N9e8x4b7b/fNiY9B6vicYNiMDb2deYQpWZtOei+2btnar5dDE5BPg==",
|
||||
"dependencies": {
|
||||
"BepInEx.Core": "6.0.0-be.679",
|
||||
"BepInEx.Unity.Common": "6.0.0-be.679",
|
||||
"HarmonyX": "2.10.1",
|
||||
"Iced": "1.18.0",
|
||||
"Il2CppInterop.Generator": "1.4.6-ci.389",
|
||||
"Il2CppInterop.HarmonySupport": "1.4.6-ci.389",
|
||||
"Il2CppInterop.Runtime": "1.4.6-ci.389",
|
||||
"MonoMod.RuntimeDetour": "22.5.1.1",
|
||||
"Samboy063.Cpp2IL.Core": "2022.1.0-development.866"
|
||||
"BepInEx.Core": "6.0.0-be.735",
|
||||
"BepInEx.Unity.Common": "6.0.0-be.735",
|
||||
"HarmonyX": "2.10.2",
|
||||
"Iced": "1.21.0",
|
||||
"Il2CppInterop.Generator": "1.4.6-ci.426",
|
||||
"Il2CppInterop.HarmonySupport": "1.4.6-ci.426",
|
||||
"Il2CppInterop.Runtime": "1.4.6-ci.426",
|
||||
"MonoMod.RuntimeDetour": "22.7.31.1",
|
||||
"Samboy063.Cpp2IL.Core": "2022.1.0-pre-release.19"
|
||||
}
|
||||
},
|
||||
"StyleCop.Analyzers": {
|
||||
"type": "Direct",
|
||||
"requested": "[1.2.0-beta.507, )",
|
||||
"resolved": "1.2.0-beta.507",
|
||||
"contentHash": "/FtugDT66cKJJ+GGH7rNpG6UDrT4iIWz45M6lrXXHobDUFDHw+q5VgkbiR+6ffTO564ge7w6fQh/eoQhVdJO8Q==",
|
||||
"requested": "[1.2.0-beta.556, )",
|
||||
"resolved": "1.2.0-beta.556",
|
||||
"contentHash": "llRPgmA1fhC0I0QyFLEcjvtM2239QzKr/tcnbsjArLMJxJlu0AA5G7Fft0OI30pHF3MW63Gf4aSSsjc5m82J1Q==",
|
||||
"dependencies": {
|
||||
"StyleCop.Analyzers.Unstable": "1.2.0.507"
|
||||
"StyleCop.Analyzers.Unstable": "1.2.0.556"
|
||||
}
|
||||
},
|
||||
"AsmResolver": {
|
||||
"type": "Transitive",
|
||||
"resolved": "5.1.0",
|
||||
"contentHash": "7PjujQzgQ3wjzqZYT4CY8SV6zx7FY6swIwj3Yk4QLolLqo9sBPb7FLF3W30QFvCsCkNfiVWXlSbeZKs4xGgQOQ=="
|
||||
"resolved": "6.0.0-beta.1",
|
||||
"contentHash": "M5btCR/rmrx32jZsoN6CLQ/VQk8lN8hvPb6lgojua7pjNoo7StAl92koMC8qz4vzZyH2CNqxLSDoswRvyyK/vA=="
|
||||
},
|
||||
"AsmResolver.DotNet": {
|
||||
"type": "Transitive",
|
||||
"resolved": "5.1.0",
|
||||
"contentHash": "oKrBU94OaSrbbTwydvpLRFalYxozrNXGkl13nIkm823ZFQtPNYOiOMJb5DQLvkCJlWyis7q865tg803T5zg9IA==",
|
||||
"resolved": "6.0.0-beta.1",
|
||||
"contentHash": "PTq8nNQvhgTxF1iARCknffCsu7Iq9B0kN7TVC8iMaU7uEYog3xvVqH/0+TreY8GW74/+MqhZt/yEFsvS4oAduQ==",
|
||||
"dependencies": {
|
||||
"AsmResolver.PE": "5.1.0",
|
||||
"System.Text.Json": "6.0.7"
|
||||
"AsmResolver.PE": "6.0.0-beta.1"
|
||||
}
|
||||
},
|
||||
"AsmResolver.PE": {
|
||||
"type": "Transitive",
|
||||
"resolved": "5.1.0",
|
||||
"contentHash": "XD3iAgLSInJIODKUUlpHWXf8MR9H1SFMb1lsmabb4GxxxnDQRPjMxjglv2NOCjQQuNB2Oh0bvjHE7ewf82UqyQ==",
|
||||
"resolved": "6.0.0-beta.1",
|
||||
"contentHash": "KadLvx/zzFCJyF+E4jG6jPE1d0iJquzL6+hm8GBivBAs6nwHC8s6g4c857QwQCzXMWza6Vz5Q+3hFiNuOfKaWQ==",
|
||||
"dependencies": {
|
||||
"AsmResolver.PE.File": "5.1.0"
|
||||
"AsmResolver.PE.File": "6.0.0-beta.1"
|
||||
}
|
||||
},
|
||||
"AsmResolver.PE.File": {
|
||||
"type": "Transitive",
|
||||
"resolved": "5.1.0",
|
||||
"contentHash": "YituBYe0Fh471sXQMfu+f4tWKX/JZvRwrX6g/SVsr4XkUIUzYi/aGT3/QvjHoYx19fE1KYOB6zBKqPkkOK7HPw==",
|
||||
"resolved": "6.0.0-beta.1",
|
||||
"contentHash": "+lusB9UMHevI5aQsu73NQ1ctPMLFvyHAsEf8vjaJ/py+kX1DkU0JkbERtBRmaf58/hBZ7cyrE7gFnjoo7Bbg7A==",
|
||||
"dependencies": {
|
||||
"AsmResolver": "5.1.0"
|
||||
"AsmResolver": "6.0.0-beta.1"
|
||||
}
|
||||
},
|
||||
"AssetRipper.VersionUtilities": {
|
||||
"AssetRipper.CIL": {
|
||||
"type": "Transitive",
|
||||
"resolved": "1.3.1",
|
||||
"contentHash": "/1D18NOpqm7rS7+qVUbAReVMNWwgDuYpsnf0RkX1Aah/I0a0irqldoFJ+Kku7YdbSm0zqD+Z6iYUGKoP3GwTNQ=="
|
||||
"resolved": "1.1.2",
|
||||
"contentHash": "BRPcHORadIzSFkrVOvGkSs54j19mQdXH8dmRTVM51mS8MZLSbTpi9CDPpnWN2IdDsILUrAqbPUFo3zJodYxErw==",
|
||||
"dependencies": {
|
||||
"AsmResolver.DotNet": "6.0.0-beta.1"
|
||||
}
|
||||
},
|
||||
"AssetRipper.Gee.External.Capstone": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.3.2",
|
||||
"contentHash": "wOr5PQPL/2ZfD7+ebt6cpRbUhSzSY5nlHGHjjzuQRiU5zkQlqQNwWDLX0M3smrm5IkaDvONkmDjFMKTlZJmyuQ=="
|
||||
},
|
||||
"AssetRipper.Primitives": {
|
||||
"type": "Transitive",
|
||||
"resolved": "3.1.3",
|
||||
"contentHash": "djZbN/+EXmI+Oia9Pm0LyjZVCPLf60TPSL5rGb7mBEYM5F4CN3nPFXvl2yA5LanPZoHS1Yq7PghGUmkP7Pv9RQ=="
|
||||
},
|
||||
"BepInEx.Core": {
|
||||
"type": "Transitive",
|
||||
"resolved": "6.0.0-be.679",
|
||||
"contentHash": "yg6NSGeevv86P2ERe3VDEa7W/l0lmM7m+AdPSW78dcBOe36Zc3QK/vmNEq57txGa+1kwv+macXLSwkL4UpucjA==",
|
||||
"resolved": "6.0.0-be.735",
|
||||
"contentHash": "FuHm9UCzjSKeiZJc3IF70Fiuqi+FynRn62PwBoOeZcHK3/qm+vl1YwbZyFlmUyf45g+UKxg2Td40iZGx88LVAQ==",
|
||||
"dependencies": {
|
||||
"HarmonyX": "2.10.1",
|
||||
"MonoMod.Utils": "22.5.1.1",
|
||||
"HarmonyX": "2.10.2",
|
||||
"MonoMod.Utils": "22.7.31.1",
|
||||
"SemanticVersioning": "2.0.2"
|
||||
}
|
||||
},
|
||||
"BepInEx.Unity.Common": {
|
||||
"type": "Transitive",
|
||||
"resolved": "6.0.0-be.679",
|
||||
"contentHash": "q4Sux3ULBDasSQAtlAWzAKpAfCyV3ujxVJpK7ydV1bUIksaHNqw9yYTLCUrw8p4DQ/wHvShECFjzeMGHi+wylA==",
|
||||
"resolved": "6.0.0-be.735",
|
||||
"contentHash": "vmK//OBSr+jotqTk//HSdvHtMFTKu+NlQkiEsvr0dZApTVmQM2AgpVMhEAakQPmrSsM6LRJIHCBcLFO1ypfMPQ==",
|
||||
"dependencies": {
|
||||
"AssetRipper.VersionUtilities": "1.2.1",
|
||||
"MonoMod.Utils": "22.5.1.1"
|
||||
"AssetRipper.Primitives": "3.1.3",
|
||||
"MonoMod.Utils": "22.7.31.1"
|
||||
}
|
||||
},
|
||||
"Disarm": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2022.1.0-master.26",
|
||||
"contentHash": "YnZEbRGr0nG+N3G8WbRQ4Lkg8dTD3oso9iJlCVBmyhEyhLyqs+drBs1kWQbQqFPnb9mi/RJ++R9bPb+L3HF03Q=="
|
||||
"resolved": "2022.1.0-master.57",
|
||||
"contentHash": "/dkg7hg8iPBQN4bTV1lMQacarH6fMpgUXhJuo6iI7Wv7YpH7g5F9hJfje7dSMhqG0YlDacLuyWvcph5GzKUXog=="
|
||||
},
|
||||
"HarmonyX": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.10.1",
|
||||
"contentHash": "9LodMC9Y0u1TW96eKJoWrFJFpmzbgojEO38/Q+e7c1mFPhmHt8xcR8qhI06iF1rf0Dnsk+hqENFVSgbtwl/bEw==",
|
||||
"resolved": "2.10.2",
|
||||
"contentHash": "/5WwkxXX8mPsRuigQt957rJGx1f0dDQxk+bvk4yYITKFjXas9Em+O71zEP8X0ym8OFQQ2XH/2SxS4NC7vEC+Xg==",
|
||||
"dependencies": {
|
||||
"MonoMod.RuntimeDetour": "22.3.23.4",
|
||||
"System.Reflection.Emit": "4.7.0"
|
||||
@@ -116,13 +128,13 @@
|
||||
},
|
||||
"Iced": {
|
||||
"type": "Transitive",
|
||||
"resolved": "1.18.0",
|
||||
"contentHash": "G60lZOvbvqttA+SBSv/yY6/wUboXKJlkffhSNR9iOrx0M5gpcK1TRr6xrFR+qAhqIAhvrsPF1jkn9fYb4lEufQ=="
|
||||
"resolved": "1.21.0",
|
||||
"contentHash": "dv5+81Q1TBQvVMSOOOmRcjJmvWcX3BZPZsIq31+RLc5cNft0IHAyNlkdb7ZarOWG913PyBoFDsDXoCIlKmLclg=="
|
||||
},
|
||||
"Il2CppInterop.Common": {
|
||||
"type": "Transitive",
|
||||
"resolved": "1.4.6-ci.389",
|
||||
"contentHash": "KTyf2f66Q2mS9a6xhvoPWwD0VzRIoskPMVQehaVMo1dx4Di1FPFsKqukQ+ob6wgP5Rbnx53kiH0PY+IRSb35XA==",
|
||||
"resolved": "1.4.6-ci.426",
|
||||
"contentHash": "pI0kU0qqJKMP6z9eFz4+WJtGIwklfPxW2yWEY9vKnrN9bbYMusK3v5uFWV8al7S/HPSATV5jNWH1hyTvP7kglA==",
|
||||
"dependencies": {
|
||||
"Iced": "1.17.0",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "6.0.1",
|
||||
@@ -131,36 +143,31 @@
|
||||
},
|
||||
"Il2CppInterop.Generator": {
|
||||
"type": "Transitive",
|
||||
"resolved": "1.4.6-ci.389",
|
||||
"contentHash": "XJX4sn/RzAEBNIZZXuyDcLZrFx5tCoahujDu5aKWjApiMj/nTRQAxZn17daIIvd9aHqLaAfiWWth5QDLIt2bKw==",
|
||||
"resolved": "1.4.6-ci.426",
|
||||
"contentHash": "kecdx/vbNl0RtfzfYW592jU8PMyq1JbzpvoJSvqwO+tV6icp9SljXy6yG8bT/wt0gaPj9mFUNDTe2Wu6M6XGZQ==",
|
||||
"dependencies": {
|
||||
"Il2CppInterop.Common": "1.4.6-ci.389",
|
||||
"Il2CppInterop.Common": "1.4.6-ci.426",
|
||||
"Mono.Cecil": "0.11.3"
|
||||
}
|
||||
},
|
||||
"Il2CppInterop.HarmonySupport": {
|
||||
"type": "Transitive",
|
||||
"resolved": "1.4.6-ci.389",
|
||||
"contentHash": "Xd2zK6sLqwA0ReyUy83SWKcALwY99fq6vVL5gFOMN5Ct8OOVhtNIws0ysCWsfx1GL0RJiRYfR4pza/MmWRz4PQ==",
|
||||
"resolved": "1.4.6-ci.426",
|
||||
"contentHash": "rd2T5o6SybIc12hmX3HktTF5n27hFb0w4mNSExq7h1YsmrNlt7x+Ac1MBnnB0JwPLIg7w8LjnKjoIX6Gf626ng==",
|
||||
"dependencies": {
|
||||
"HarmonyX": "2.10.0",
|
||||
"Il2CppInterop.Runtime": "1.4.6-ci.389"
|
||||
"Il2CppInterop.Runtime": "1.4.6-ci.426"
|
||||
}
|
||||
},
|
||||
"Il2CppInterop.Runtime": {
|
||||
"type": "Transitive",
|
||||
"resolved": "1.4.6-ci.389",
|
||||
"contentHash": "nzYjuVzDG/O8+AQ8ax3WVHf+ZVsQKrVtp/yvuW8XoEPLdkbgryIrMo75dvN+tPqxOU3o2MPt9MZ9j25P5aVJMw==",
|
||||
"resolved": "1.4.6-ci.426",
|
||||
"contentHash": "0O0oI7gOqJixrsjvh1firhuGYK3Yr0uDLp6Q+t5CfcTMmeEX8Plk3pqAP9ZYyilBvh7uW0gv4Golqz08L1GXug==",
|
||||
"dependencies": {
|
||||
"Iced": "1.17.0",
|
||||
"Il2CppInterop.Common": "1.4.6-ci.389"
|
||||
"Il2CppInterop.Common": "1.4.6-ci.426"
|
||||
}
|
||||
},
|
||||
"js6pak.Gee.External.Capstone": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.1.0",
|
||||
"contentHash": "YYpq7NM50bSSVUDjXyV/eiITk6syXqItPjKBOb3jEWS6RFsk0DNhpWMPW6b3hKDmArARuWDU6S2pVu1IeVrvIA=="
|
||||
},
|
||||
"Microsoft.Extensions.Logging.Abstractions": {
|
||||
"type": "Transitive",
|
||||
"resolved": "6.0.1",
|
||||
@@ -183,11 +190,11 @@
|
||||
},
|
||||
"MonoMod.RuntimeDetour": {
|
||||
"type": "Transitive",
|
||||
"resolved": "22.5.1.1",
|
||||
"contentHash": "WG5zLRuAr8KJEnIkKTuIG1OJCrGIT3pjvnAD43E0FDchHf3Dp985MF/8tmIQvAzCZV87JNs6QKeGGqmwDmpXpw==",
|
||||
"resolved": "22.7.31.1",
|
||||
"contentHash": "nxVJTvQbWAujaogt5XX3eAy7d22t66Z88aWg9sirPLO9rR/6yNCHAyZpgxXrOsIobZVW0IEZPqNMOBhgke25/w==",
|
||||
"dependencies": {
|
||||
"Mono.Cecil": "0.11.4",
|
||||
"MonoMod.Utils": "22.5.1.1",
|
||||
"MonoMod.Utils": "22.7.31.1",
|
||||
"System.Collections.NonGeneric": "4.3.0",
|
||||
"System.ComponentModel.TypeConverter": "4.3.0",
|
||||
"System.IO.FileSystem.Primitives": "4.3.0",
|
||||
@@ -198,8 +205,8 @@
|
||||
},
|
||||
"MonoMod.Utils": {
|
||||
"type": "Transitive",
|
||||
"resolved": "22.5.1.1",
|
||||
"contentHash": "vBObO1atXxhi2C4AuC53y87Bqeogi9xIrD1Ym3YWr5uxc8Nrm8SrsFeD1i3x04R999+XQ3FdeHrbXScyWYEHqQ==",
|
||||
"resolved": "22.7.31.1",
|
||||
"contentHash": "nI0E1oadXS1iMbfwfCzYF08C1jRQR9cnnHv66a4BSPd4sGu2p6g4BmctCWsdAB6oGKkSJUhcfHfxcfTsDyB94Q==",
|
||||
"dependencies": {
|
||||
"Mono.Cecil": "0.11.4",
|
||||
"System.Collections.NonGeneric": "4.3.0",
|
||||
@@ -310,30 +317,31 @@
|
||||
},
|
||||
"Samboy063.Cpp2IL.Core": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2022.1.0-development.866",
|
||||
"contentHash": "QPMuix/3jRngWBdNSLhAbm9BHYf95Ln1Ph1eCK/cDZdVibxFDFP3a6Yczyx1p7GbN7bRQwrhs2skPJSS/z3m2w==",
|
||||
"resolved": "2022.1.0-pre-release.19",
|
||||
"contentHash": "mAYIrMo0VdOZzh1NS5bZeflg80gtYNY7kZo9q/blEYheUPyLXu5ozQOjX+Bq2yDh40pA+yiE2MXTnN2Is2hjgw==",
|
||||
"dependencies": {
|
||||
"AsmResolver.DotNet": "5.1.0",
|
||||
"Disarm": "2022.1.0-master.26",
|
||||
"Iced": "1.18.0",
|
||||
"Samboy063.LibCpp2IL": "2022.1.0-development.866",
|
||||
"StableNameDotNet": "0.1.0-development.866",
|
||||
"js6pak.Gee.External.Capstone": "2.1.0"
|
||||
"AsmResolver.DotNet": "6.0.0-beta.1",
|
||||
"AssetRipper.CIL": "1.1.2",
|
||||
"AssetRipper.Gee.External.Capstone": "2.3.2",
|
||||
"Disarm": "2022.1.0-master.57",
|
||||
"Iced": "1.21.0",
|
||||
"Samboy063.LibCpp2IL": "2022.1.0-pre-release.19",
|
||||
"StableNameDotNet": "0.1.0-pre-release.19"
|
||||
}
|
||||
},
|
||||
"Samboy063.LibCpp2IL": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2022.1.0-development.866",
|
||||
"contentHash": "EcJSWTfQko8SQozozoUT+aQJVWC8wj8C0YUiPBF4rNRId19yTKp2IXcXnI747v+8/aal222QR6WHfoBK2WlVLg==",
|
||||
"resolved": "2022.1.0-pre-release.19",
|
||||
"contentHash": "/n8p81ltd38BeNNS2xUNPGMSzxk/UGXr9cRNqG1MaLogzANNNrvCAXqWmNMM3tZctjp7vqTxEA+e4J4ngul8Fg==",
|
||||
"dependencies": {
|
||||
"AssetRipper.VersionUtilities": "1.3.1",
|
||||
"Samboy063.WasmDisassembler": "2022.1.0-development.866"
|
||||
"AssetRipper.Primitives": "3.1.3",
|
||||
"Samboy063.WasmDisassembler": "2022.1.0-pre-release.19"
|
||||
}
|
||||
},
|
||||
"Samboy063.WasmDisassembler": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2022.1.0-development.866",
|
||||
"contentHash": "2QK8F3eISkLcoW/Nt7wtxyQh31EXAqEMBVXXjEnuxyvXpBXxOIGpjmE3pWhGwxQwDCbe4zBsLF1zUiqq3/pXRA=="
|
||||
"resolved": "2022.1.0-pre-release.19",
|
||||
"contentHash": "uVQdYm/J6+jJ1xt6GJ3hNhXhciwlX+LmHTPITu9jjZ75T33YJuuTD7pLVYuMymr+4gSVisg7f1wterFSyqJBWA=="
|
||||
},
|
||||
"SemanticVersioning": {
|
||||
"type": "Transitive",
|
||||
@@ -342,13 +350,13 @@
|
||||
},
|
||||
"StableNameDotNet": {
|
||||
"type": "Transitive",
|
||||
"resolved": "0.1.0-development.866",
|
||||
"contentHash": "DJb8x4dV3ucDgM12sU28HxCdeqY/JudJbeJG6mgXWDJzpFZw2Jd7JF1pKFRNLzh/0gpo8bCGLQS9gOWZmBjdtg=="
|
||||
"resolved": "0.1.0-pre-release.19",
|
||||
"contentHash": "5BPWtntv3PXeFIg9CuGW6OM3f5GnwvdQJbzRpufPsistFwFyt1xYW1wSDr+QIdDO7vLndr7iNpWD3FyYp9LL4g=="
|
||||
},
|
||||
"StyleCop.Analyzers.Unstable": {
|
||||
"type": "Transitive",
|
||||
"resolved": "1.2.0.507",
|
||||
"contentHash": "gTY3IQdRqDJ4hbhSA3e/R48oE8b/OiKfvwkt1QdNVfrJK2gMHBV8ldaHJ885jxWZfllK66soa/sdcjh9bX49Tw=="
|
||||
"resolved": "1.2.0.556",
|
||||
"contentHash": "zvn9Mqs/ox/83cpYPignI8hJEM2A93s2HkHs8HYMOAQW0PkampyoErAiIyKxgTLqbbad29HX/shv/6LGSjPJNQ=="
|
||||
},
|
||||
"System.Collections": {
|
||||
"type": "Transitive",
|
||||
@@ -675,11 +683,6 @@
|
||||
"Microsoft.NETCore.Targets": "1.1.0"
|
||||
}
|
||||
},
|
||||
"System.Runtime.CompilerServices.Unsafe": {
|
||||
"type": "Transitive",
|
||||
"resolved": "6.0.0",
|
||||
"contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg=="
|
||||
},
|
||||
"System.Runtime.Extensions": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
@@ -878,23 +881,6 @@
|
||||
"System.Runtime": "4.3.0"
|
||||
}
|
||||
},
|
||||
"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.7",
|
||||
"contentHash": "/Tf/9XjprpHolbcDOrxsKVYy/mUG/FS7aGd9YUgBVEiHeQH4kAE0T1sMbde7q6B5xcrNUsJ5iW7D1RvHudQNqA==",
|
||||
"dependencies": {
|
||||
"System.Runtime.CompilerServices.Unsafe": "6.0.0",
|
||||
"System.Text.Encodings.Web": "6.0.0"
|
||||
}
|
||||
},
|
||||
"System.Threading": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.3.0",
|
||||
|
||||
Reference in new issue
Block a user