From: Mallöris <|||||@||.||> Date: Wed, 18 May 2022 21:14:56 +0000 (+0200) Subject: Update to v4.1.3 X-Git-Url: https://git.deb.at/?a=commitdiff_plain;h=c8eda67c60f8288d0cdbf0f91bcd90045eb1ab90;p=rhonda%2Ftheotherroles.git Update to v4.1.3 --- diff --git a/README.md b/README.md index 188ba0b..5faba6a 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,7 @@ The [Role Assignment](#role-assignment) sections explains how the roles are bein # Releases | Among Us - Version| Mod Version | Link | |----------|-------------|-----------------| +| 2022.3.29| v4.1.3| [Download](https://github.com/Eisbison/TheOtherRoles/releases/download/v4.1.3/TheOtherRoles.zip) | 2022.3.29| v4.1.2| [Download](https://github.com/Eisbison/TheOtherRoles/releases/download/v4.1.2/TheOtherRoles.zip) | 2022.3.29| v4.1.1| [Download](https://github.com/Eisbison/TheOtherRoles/releases/download/v4.1.1/TheOtherRoles.zip) | 2022.3.29| v4.1.0| [Download](https://github.com/Eisbison/TheOtherRoles/releases/download/v4.1.0/TheOtherRoles.zip) @@ -104,6 +105,11 @@ The [Role Assignment](#role-assignment) sections explains how the roles are bein
Click to show the Changelog +**Version 4.1.3** +- Fixed morphling's being morphed during meetings +- Fixed hide player names hiding the player's name during meetings +- Added an option to the mayor: "Number Of Remote Meetings", so that the amount of mobile meetings is limited. + **Version 4.1.2** - Made some general performance fixes. Special thanks to [probablyadnf](https://github.com/simonkellly) - Added an option to the ninja to get invisible after kill for x-seconds diff --git a/TheOtherRoles/Buttons.cs b/TheOtherRoles/Buttons.cs index f059789..30dbfed 100644 --- a/TheOtherRoles/Buttons.cs +++ b/TheOtherRoles/Buttons.cs @@ -1491,23 +1491,25 @@ namespace TheOtherRoles mayorMeetingButton = new CustomButton( () => { PlayerControl.LocalPlayer.NetTransform.Halt(); // Stop current movement - Helpers.handleVampireBiteOnBodyReport(); // Manually call Vampire handling, since the CmdReportDeadBody Prefix won't be called + Mayor.remoteMeetingsLeft--; + Helpers.handleVampireBiteOnBodyReport(); // Manually call Vampire handling, since the CmdReportDeadBody Prefix won't be called RPCProcedure.uncheckedCmdReportDeadBody(PlayerControl.LocalPlayer.PlayerId, Byte.MinValue); MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.UncheckedCmdReportDeadBody, Hazel.SendOption.Reliable, -1); writer.Write(PlayerControl.LocalPlayer.PlayerId); writer.Write(Byte.MaxValue); AmongUsClient.Instance.FinishRpcImmediately(writer); + mayorMeetingButton.Timer = 1f; }, () => { return Mayor.mayor != null && Mayor.mayor == PlayerControl.LocalPlayer && !PlayerControl.LocalPlayer.Data.IsDead ;}, () => { - mayorMeetingButton.actionButton.OverrideText("Emergency"); + mayorMeetingButton.actionButton.OverrideText("Emergency ("+ Mayor.remoteMeetingsLeft + ")"); bool sabotageActive = false; foreach (PlayerTask task in PlayerControl.LocalPlayer.myTasks.GetFastEnumerator()) if (task.TaskType == TaskTypes.FixLights || task.TaskType == TaskTypes.RestoreOxy || task.TaskType == TaskTypes.ResetReactor || task.TaskType == TaskTypes.ResetSeismic || task.TaskType == TaskTypes.FixComms || task.TaskType == TaskTypes.StopCharles || SubmergedCompatibility.IsSubmerged && task.TaskType == SubmergedCompatibility.RetrieveOxygenMask) sabotageActive = true; - return !sabotageActive && PlayerControl.LocalPlayer.CanMove; + return !sabotageActive && PlayerControl.LocalPlayer.CanMove && (Mayor.remoteMeetingsLeft > 0); }, () => { mayorMeetingButton.Timer = mayorMeetingButton.MaxTimer; }, Mayor.getMeetingSprite(), diff --git a/TheOtherRoles/CustomOptionHolder.cs b/TheOtherRoles/CustomOptionHolder.cs index fcfbfbe..2f8d90b 100644 --- a/TheOtherRoles/CustomOptionHolder.cs +++ b/TheOtherRoles/CustomOptionHolder.cs @@ -98,6 +98,7 @@ namespace TheOtherRoles { public static CustomOption mayorCanSeeVoteColors; public static CustomOption mayorTasksNeededToSeeVoteColors; public static CustomOption mayorMeetingButton; + public static CustomOption mayorMaxRemoteMeetings; public static CustomOption portalmakerSpawnRate; public static CustomOption portalmakerCooldown; @@ -406,6 +407,7 @@ namespace TheOtherRoles { mayorCanSeeVoteColors = CustomOption.Create(81, Types.Crewmate, "Mayor Can See Vote Colors", false, mayorSpawnRate); mayorTasksNeededToSeeVoteColors = CustomOption.Create(82, Types.Crewmate, "Completed Tasks Needed To See Vote Colors", 5f, 0f, 20f, 1f, mayorCanSeeVoteColors); mayorMeetingButton = CustomOption.Create(83, Types.Crewmate, "Mobile Emergency Button", true, mayorSpawnRate); + mayorMaxRemoteMeetings = CustomOption.Create(84, Types.Crewmate, "Number Of Remote Meetings", 1f, 1f, 5f, 1f, mayorMeetingButton); engineerSpawnRate = CustomOption.Create(90, Types.Crewmate, cs(Engineer.color, "Engineer"), rates, null, true); engineerNumberOfFixes = CustomOption.Create(91, Types.Crewmate, "Number Of Sabotage Fixes", 1f, 1f, 3f, 1f, engineerSpawnRate); diff --git a/TheOtherRoles/Helpers.cs b/TheOtherRoles/Helpers.cs index 853afb2..aa84afb 100644 --- a/TheOtherRoles/Helpers.cs +++ b/TheOtherRoles/Helpers.cs @@ -17,12 +17,19 @@ namespace TheOtherRoles { SuppressKill, BlankKill } - public static class Helpers { + public static class Helpers + { + + public static Dictionary CachedSprites = new(); public static Sprite loadSpriteFromResources(string path, float pixelsPerUnit) { - try { + try + { + if (CachedSprites.TryGetValue(path + pixelsPerUnit, out var sprite)) return sprite; Texture2D texture = loadTextureFromResources(path); - return Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f), pixelsPerUnit); + sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f), pixelsPerUnit); + sprite.hideFlags |= HideFlags.HideAndDontSave | HideFlags.DontSaveInEditor; + return CachedSprites[path + pixelsPerUnit] = sprite; } catch { System.Console.WriteLine("Error loading sprite from path: " + path); } diff --git a/TheOtherRoles/Main.cs b/TheOtherRoles/Main.cs index 54a5ca3..0433882 100644 --- a/TheOtherRoles/Main.cs +++ b/TheOtherRoles/Main.cs @@ -22,7 +22,7 @@ namespace TheOtherRoles public class TheOtherRolesPlugin : BasePlugin { public const string Id = "me.eisbison.theotherroles"; - public const string VersionString = "4.1.2"; + public const string VersionString = "4.1.3"; public static Version Version = Version.Parse(VersionString); internal static BepInEx.Logging.ManualLogSource Logger; diff --git a/TheOtherRoles/Objects/Footprint.cs b/TheOtherRoles/Objects/Footprint.cs index d5aa86c..c3aa892 100644 --- a/TheOtherRoles/Objects/Footprint.cs +++ b/TheOtherRoles/Objects/Footprint.cs @@ -1,65 +1,121 @@ using System; +using System.Collections.Concurrent; using System.Collections.Generic; using TheOtherRoles.Utilities; using UnityEngine; -namespace TheOtherRoles.Objects { - class Footprint { - private static List footprints = new List(); - private static Sprite sprite; - private Color color; - private GameObject footprint; - private SpriteRenderer spriteRenderer; - private PlayerControl owner; - private bool anonymousFootprints; +namespace TheOtherRoles.Objects +{ + public class FootprintHolder : MonoBehaviour + { + static FootprintHolder() => ClassInjector.RegisterTypeInIl2Cpp(); - public static Sprite getFootprintSprite() { - if (sprite) return sprite; - sprite = Helpers.loadSpriteFromResources("TheOtherRoles.Resources.Footprint.png", 600f); - return sprite; - } - - public Footprint(float footprintDuration, bool anonymousFootprints, PlayerControl player) { - this.owner = player; - this.anonymousFootprints = anonymousFootprints; - if (anonymousFootprints) - this.color = Palette.PlayerColors[6]; - else - this.color = Palette.PlayerColors[(int) player.Data.DefaultOutfit.ColorId]; + public FootprintHolder(IntPtr ptr) : base(ptr) { } - footprint = new GameObject("Footprint"); - footprint.AddSubmergedComponent(SubmergedCompatibility.Classes.ElevatorMover); - Vector3 position = new Vector3(player.transform.position.x, player.transform.position.y, player.transform.position.y / 1000 + 0.001f); - footprint.transform.position = position; - footprint.transform.localPosition = position; - footprint.transform.SetParent(player.transform.parent); + private static FootprintHolder _instance; + public static FootprintHolder Instance + { + get => _instance ? _instance : _instance = new GameObject("FootprintHolder").AddComponent(); + set => _instance = value; - footprint.transform.Rotate(0.0f, 0.0f, UnityEngine.Random.Range(0.0f, 360.0f)); + } + + private static Sprite _footprintSprite; + private static Sprite FootprintSprite => _footprintSprite ??= Helpers.loadSpriteFromResources("TheOtherRoles.Resources.Footprint.png", 600f); + private static bool AnonymousFootprints => TheOtherRoles.Detective.anonymousFootprints; + private static float FootprintDuration => TheOtherRoles.Detective.footprintDuration; + + private class Footprint + { + public GameObject GameObject; + public Transform Transform; + public SpriteRenderer Renderer; + public PlayerControl Owner; + public GameData.PlayerInfo Data; + public float Lifetime; - spriteRenderer = footprint.AddComponent(); - spriteRenderer.sprite = getFootprintSprite(); - spriteRenderer.color = color; + public Footprint() + { + GameObject = new("Footprint") { layer = 8 }; + Transform = GameObject.transform; + Renderer = GameObject.AddComponent(); + Renderer.sprite = FootprintSprite; + Renderer.color = Color.clear; + GameObject.AddSubmergedComponent(SubmergedCompatibility.Classes.ElevatorMover); + } + } - footprint.SetActive(true); - footprints.Add(this); + - FastDestroyableSingleton.Instance.StartCoroutine(Effects.Lerp(footprintDuration, new Action((p) => { - Color c = color; - if (!anonymousFootprints && owner != null) { - if (owner == Morphling.morphling && Morphling.morphTimer > 0 && Morphling.morphTarget?.Data != null) - c = Palette.ShadowColors[Morphling.morphTarget.Data.DefaultOutfit.ColorId]; - else if (Camouflager.camouflageTimer > 0) - c = Palette.PlayerColors[6]; + private readonly ConcurrentBag _pool = new(); + private readonly List _activeFootprints = new(); + private readonly List _toRemove = new(); + + [HideFromIl2Cpp] + public void MakeFootprint(PlayerControl player) + { + if (!_pool.TryTake(out var print)) + { + print = new(); } - if (spriteRenderer) spriteRenderer.color = new Color(c.r, c.g, c.b, Mathf.Clamp01(1 - p)); + print.Lifetime = FootprintDuration; + + var pos = player.transform.position; + pos.z = pos.y / 1000f + 0.001f; + print.Transform.SetPositionAndRotation(pos, Quaternion.EulerRotation(0, 0, UnityEngine.Random.Range(0.0f, 360.0f))); + print.GameObject.SetActive(true); + print.Owner = player; + print.Data = player.Data; + _activeFootprints.Add(print); + } - if (p == 1f && footprint != null) { - UnityEngine.Object.Destroy(footprint); - footprints.Remove(this); + private void Update() + { + var dt = Time.deltaTime; + _toRemove.Clear(); + foreach (var activeFootprint in _activeFootprints) + { + var p = activeFootprint.Lifetime / FootprintDuration; + + if (activeFootprint.Lifetime <= 0) + { + _toRemove.Add(activeFootprint); + continue; + } + + Color color; + if (AnonymousFootprints || Camouflager.camouflageTimer > 0) + { + color = Palette.PlayerColors[6]; + } + else if (activeFootprint.Owner == Morphling.morphling && Morphling.morphTimer > 0 && Morphling.morphTarget && Morphling.morphTarget.Data != null) + { + color = Palette.PlayerColors[Morphling.morphTarget.Data.DefaultOutfit.ColorId]; + } + else + { + color = Palette.PlayerColors[activeFootprint.Data.DefaultOutfit.ColorId]; + } + + color.a = Math.Clamp(p, 0f, 1f); + activeFootprint.Renderer.color = color; + + activeFootprint.Lifetime -= dt; + } + + foreach (var footprint in _toRemove) + { + footprint.GameObject.SetActive(false); + _activeFootprints.Remove(footprint); + _pool.Add(footprint); } - }))); + } + + private void OnDestroy() + { + Instance = null; } } } diff --git a/TheOtherRoles/Patches/PlayerControlPatch.cs b/TheOtherRoles/Patches/PlayerControlPatch.cs index 9722ea4..169c3f3 100644 --- a/TheOtherRoles/Patches/PlayerControlPatch.cs +++ b/TheOtherRoles/Patches/PlayerControlPatch.cs @@ -184,8 +184,9 @@ namespace TheOtherRoles.Patches { if (Detective.timer <= 0f) { Detective.timer = Detective.footprintIntervall; foreach (PlayerControl player in PlayerControl.AllPlayerControls.GetFastEnumerator()) { - if (player != null && player != PlayerControl.LocalPlayer && !player.Data.IsDead && !player.inVent) { - new Footprint(Detective.footprintDuration, Detective.anonymousFootprints, player); + if (player != null && player != PlayerControl.LocalPlayer && !player.Data.IsDead && !player.inVent) + { + FootprintHolder.Instance.MakeFootprint(player); } } } diff --git a/TheOtherRoles/Patches/UpdatePatch.cs b/TheOtherRoles/Patches/UpdatePatch.cs index 2d591d6..ecc9bb5 100644 --- a/TheOtherRoles/Patches/UpdatePatch.cs +++ b/TheOtherRoles/Patches/UpdatePatch.cs @@ -23,20 +23,19 @@ namespace TheOtherRoles.Patches { foreach (var data in GameData.Instance.AllPlayers.GetFastEnumerator()) { var player = data.Object; - string text; + string text = data.PlayerName; Color color; if (player) { - String playerName = data.PlayerName; + var playerName = text; if (morphTimerNotUp && morphTargetNotNull && Morphling.morphling == player) playerName = Morphling.morphTarget.Data.PlayerName; var nameText = player.nameText; - nameText.text = text = Helpers.hidePlayerName(localPlayer, player) ? "" : playerName; + nameText.text = Helpers.hidePlayerName(localPlayer, player) ? "" : playerName; nameText.color = color = amImpostor && data.Role.IsImpostor ? Palette.ImpostorRed : Color.white; } else { - text = data.PlayerName; color = Color.white; } diff --git a/TheOtherRoles/Resources/ThirdParty/Submerged/Submerged.dll b/TheOtherRoles/Resources/ThirdParty/Submerged/Submerged.dll index 483e962..2018ff5 100644 Binary files a/TheOtherRoles/Resources/ThirdParty/Submerged/Submerged.dll and b/TheOtherRoles/Resources/ThirdParty/Submerged/Submerged.dll differ diff --git a/TheOtherRoles/TheOtherRoles.cs b/TheOtherRoles/TheOtherRoles.cs index 0e5aaa3..139eb8c 100644 --- a/TheOtherRoles/TheOtherRoles.cs +++ b/TheOtherRoles/TheOtherRoles.cs @@ -129,6 +129,8 @@ namespace TheOtherRoles public static Color color = new Color32(32, 77, 66, byte.MaxValue); public static Minigame emergency = null; public static Sprite emergencySprite = null; + public static int remoteMeetingsLeft = 1; + public static bool canSeeVoteColors = false; public static int tasksNeededToSeeVoteColors; @@ -145,7 +147,7 @@ namespace TheOtherRoles mayor = null; emergency = null; emergencySprite = null; - + remoteMeetingsLeft = Mathf.RoundToInt(CustomOptionHolder.mayorMaxRemoteMeetings.getFloat()); canSeeVoteColors = CustomOptionHolder.mayorCanSeeVoteColors.getBool(); tasksNeededToSeeVoteColors = (int)CustomOptionHolder.mayorTasksNeededToSeeVoteColors.getFloat(); meetingButton = CustomOptionHolder.mayorMeetingButton.getBool(); diff --git a/TheOtherRoles/TheOtherRoles.csproj b/TheOtherRoles/TheOtherRoles.csproj index 3ce2e4f..35c5928 100644 --- a/TheOtherRoles/TheOtherRoles.csproj +++ b/TheOtherRoles/TheOtherRoles.csproj @@ -1,25 +1,26 @@  - - netstandard2.1 - 4.1.2 - TheOtherRoles - Eisbison + + netstandard2.1 + 4.1.3 + TheOtherRoles + Eisbison latest - true - + true + true + - - - + + + - - - - - + + + + + - - - - + + + + diff --git a/TheOtherRoles/packages.lock.json b/TheOtherRoles/packages.lock.json new file mode 100644 index 0000000..a92cbd2 --- /dev/null +++ b/TheOtherRoles/packages.lock.json @@ -0,0 +1,474 @@ +{ + "version": 1, + "dependencies": { + ".NETStandard,Version=v2.1": { + "AmongUs.GameLibs.Steam": { + "type": "Direct", + "requested": "[2022.3.29, )", + "resolved": "2022.3.29", + "contentHash": "EStKwHGq8MMvSRxIHjlh31VJmCZrGHZ/xoDDN33L5gh7XJLWBFufo6+5ueezndSRpanoCkqLwuTkG73KCS2J1A==" + }, + "BepInEx.IL2CPP": { + "type": "Direct", + "requested": "[6.0.0-be.559, )", + "resolved": "6.0.0-be.559", + "contentHash": "s0PSNq7Gr1/OWh+Yw2SGu8QYMow5lp6iP5hozxReMaJIGctnb/lUPj1pjeVP33pWWDomXwsWN76dCAW2qIY0tg==", + "dependencies": { + "BepInEx.Core": "6.0.0-be.559", + "BepInEx.Il2Cpp.TlsAdapter": "1.0.1", + "HarmonyX": "2.10.0", + "Iced": "1.17.0", + "Il2CppAssemblyUnhollower.BaseLib": "0.4.33", + "Il2CppAssemblyUnhollower.BaseLib.Legacy": "0.4.33", + "Il2CppAssemblyUnhollower.Lib": "0.4.33", + "Il2CppDumper": "6.6.4", + "MonoMod.RuntimeDetour": "22.3.23.4", + "Samboy063.Cpp2IL.Core": "2022.0.4" + } + }, + "BepInEx.IL2CPP.MSBuild": { + "type": "Direct", + "requested": "[1.1.1, )", + "resolved": "1.1.1", + "contentHash": "uUSo4TuamyEIVg+ICNeJMSSW/arKWHGpfBFINc4fdF5kppfHFrsDURKzNPmDvxivtLsiuGthck9J/5uPXgIcTg==" + }, + "BepInEx.Core": { + "type": "Transitive", + "resolved": "6.0.0-be.559", + "contentHash": "pjqwrVxD3JKz/Qz4gn8phzi0mEJucb1EVVcF/2A4oQ1+ytRnBUcOYldg1GCkzLoVYwbuhE0J2bXfUOGawRUwog==", + "dependencies": { + "HarmonyX": "2.10.0", + "MonoMod.Utils": "22.3.23.4", + "SemanticVersioning": "2.0.2" + } + }, + "BepInEx.Il2Cpp.TlsAdapter": { + "type": "Transitive", + "resolved": "1.0.1", + "contentHash": "kTfX6312X0Fvwks+t7Ul3YO2jMSbqNS2Jx/85Cgl6lbAjEJnKzsmx7Krmd66dbnx0eY/QMjaV2r6LyWmQARtdA==", + "dependencies": { + "HarmonyX": "2.3.1" + } + }, + "HarmonyX": { + "type": "Transitive", + "resolved": "2.10.0", + "contentHash": "4ayiy/dlCiW86K2N7Jvbf+VpI5wvP7dncv/6oRmfwRi32UCmCRzCGzsxdMfzJZkp6/26oBW+DrD8vi4UejzVAg==", + "dependencies": { + "MonoMod.RuntimeDetour": "22.3.23.4", + "System.Reflection.Emit": "4.7.0" + } + }, + "Iced": { + "type": "Transitive", + "resolved": "1.17.0", + "contentHash": "8x+HCVTl/HHTGpscH3vMBhV8sknN/muZFw9s3TsI8SA6+c43cOTCi2+jE4KsU8pNLbJ++iF2ZFcpcXHXtDglnw==" + }, + "Il2CppAssemblyUnhollower.BaseLib": { + "type": "Transitive", + "resolved": "0.4.33", + "contentHash": "QiltA4HJt6DvrFCcS4vQnirPV4WmQKZNG8M4lCn51k7yyx5LW0xix8HqE4Xt1IVo1Ei+60t5aLRga4W2ktve5w==", + "dependencies": { + "Iced": "1.15.0" + } + }, + "Il2CppAssemblyUnhollower.BaseLib.Legacy": { + "type": "Transitive", + "resolved": "0.4.33", + "contentHash": "4o2Z44uqmI/6VBNpyhKJ1JksuqtrOgNrNkbv00ljITs3KedrcqZqGXCP+RaJF2ej4Fkr67fGsATshZ9B8f7izQ==", + "dependencies": { + "Il2CppAssemblyUnhollower.BaseLib": "0.4.33" + } + }, + "Il2CppAssemblyUnhollower.Lib": { + "type": "Transitive", + "resolved": "0.4.33", + "contentHash": "1l7tqjAdzRyq+FP6h//Lojlr0PviEc5adfvsit9BZBQtmBUZoifAccAfXAiU0zLv5pbvHiAguspgmeRdUT1yUw==", + "dependencies": { + "Il2CppAssemblyUnhollower.BaseLib": "0.4.33", + "Il2CppAssemblyUnhollower.BaseLib.Legacy": "0.4.33", + "Mono.Cecil": "0.11.3" + } + }, + "Il2CppDumper": { + "type": "Transitive", + "resolved": "6.6.4", + "contentHash": "aqjmlyigdZ5FS9ElMNlaCExlgSmAiho4BeIcVwkmzHGnomBzopjOCxqIX9vc/575TQ87TKoaGW2KP+3b5xI15A==", + "dependencies": { + "Mono.Cecil": "0.11.3" + } + }, + "IndexRange": { + "type": "Transitive", + "resolved": "1.0.0", + "contentHash": "6TgS1JLSUkpmPLfXBPaAgB39ZUix8E4soXWk2XSDcscVe84i1JKzIAtA7jHbRHSkOOrcr6YA0MpLCeq98y9mYQ==" + }, + "js6pak.Gee.External.Capstone": { + "type": "Transitive", + "resolved": "2.1.0", + "contentHash": "YYpq7NM50bSSVUDjXyV/eiITk6syXqItPjKBOb3jEWS6RFsk0DNhpWMPW6b3hKDmArARuWDU6S2pVu1IeVrvIA==" + }, + "Microsoft.NETCore.Platforms": { + "type": "Transitive", + "resolved": "1.1.0", + "contentHash": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==" + }, + "Microsoft.NETCore.Targets": { + "type": "Transitive", + "resolved": "1.1.0", + "contentHash": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==" + }, + "Mono.Cecil": { + "type": "Transitive", + "resolved": "0.11.4", + "contentHash": "IC1h5g0NeJGHIUgzM1P82ld57knhP0IcQfrYITDPXlNpMYGUrsG5TxuaWTjaeqDNQMBDNZkB8L0rBnwsY6JHuQ==" + }, + "MonoMod.RuntimeDetour": { + "type": "Transitive", + "resolved": "22.3.23.4", + "contentHash": "2nwwFfwYDSgUzhi+1MutTg1gyUgXoMS4+E04vHOFp84Vxs0oBkkn4mGAfhkr272y0j3vqIBzo2aT9pXRlCd/ZA==", + "dependencies": { + "Mono.Cecil": "0.11.4", + "MonoMod.Utils": "22.3.23.4", + "System.Collections.NonGeneric": "4.3.0", + "System.ComponentModel.TypeConverter": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.7.0", + "System.Reflection.Emit.Lightweight": "4.7.0", + "System.Reflection.TypeExtensions": "4.7.0" + } + }, + "MonoMod.Utils": { + "type": "Transitive", + "resolved": "22.3.23.4", + "contentHash": "xso1rHFfcsPy3X1kj2uDk115z9tLTMxPEnba/zdNB6WazvrLRWGPuV9d4hHwr1iVz5quTFlZCbLBlE5fS2TqLA==", + "dependencies": { + "Mono.Cecil": "0.11.4", + "System.Collections.NonGeneric": "4.3.0", + "System.ComponentModel.TypeConverter": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.7.0", + "System.Reflection.Emit.Lightweight": "4.7.0", + "System.Reflection.TypeExtensions": "4.7.0" + } + }, + "Samboy063.Cpp2IL.Core": { + "type": "Transitive", + "resolved": "2022.0.4", + "contentHash": "6fLZDkAmnClogPwDWCkB5NYG1uqUShOkdNap4ud3m5cLI57BiBRzBoUBEKV+9SNtSirUrEAOUP+0kIfduTLYWQ==", + "dependencies": { + "HarmonyX": "2.5.5", + "Iced": "1.11.1", + "IndexRange": "1.0.0", + "Mono.Cecil": "0.11.4", + "Samboy063.LibCpp2IL": "2022.0.4", + "System.Runtime.InteropServices": "4.3.0", + "System.ValueTuple": "4.5.0", + "js6pak.Gee.External.Capstone": "2.1.0" + } + }, + "Samboy063.LibCpp2IL": { + "type": "Transitive", + "resolved": "2022.0.4", + "contentHash": "KxUvnPgGSIgmLqVbK2fMCUmL+RJK0Ccvhkj2boVMtkE9feEFxtriHX7YkqZGQtXs55CpyETm8nZfYhj1m2bYkQ==", + "dependencies": { + "IndexRange": "1.0.0", + "Samboy063.WasmDisassembler": "2022.0.2" + } + }, + "Samboy063.WasmDisassembler": { + "type": "Transitive", + "resolved": "2022.0.2", + "contentHash": "2uu+xBb7M3HKfBx9tAY6jiDieAf0hRnQjSmGX+7IdE6i24dYsx6TYgtrLvRx5lOuF2M8DijZ5H8yQ1pcuCs2SA==" + }, + "SemanticVersioning": { + "type": "Transitive", + "resolved": "2.0.2", + "contentHash": "4EQgYdNZ92SyaO7YFk6olVnebF5V+jrHyMUjvPq89tLeMo8NSfgDF+6Zwq/lgh9j/0yfQp9Lkm0ZA0rUATCZFA==" + }, + "System.Collections": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Collections.NonGeneric": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "prtjIEMhGUnQq6RnPEYLpFt8AtLbp9yq2zxOSrY7KJJZrw25Fi97IzBqY7iqssbM61Ek5b8f3MG/sG1N2sN5KA==", + "dependencies": { + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Collections.Specialized": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "Epx8PoVZR0iuOnJJDzp7pWvdfMMOAvpUo95pC4ScH2mJuXkKA2Y4aR3cG9qt2klHgSons1WFh4kcGW7cSXvrxg==", + "dependencies": { + "System.Collections.NonGeneric": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Extensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.ComponentModel": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "VyGn1jGRZVfxnh8EdvDCi71v3bMXrsu8aYJOwoV7SNDLVhiEqwP86pPMyRGsDsxhXAm2b3o9OIqeETfN5qfezw==", + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.ComponentModel.Primitives": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "j8GUkCpM8V4d4vhLIIoBLGey2Z5bCkMVNjEZseyAlm4n5arcsJOeI3zkUP+zvZgzsbLTYh4lYeP/ZD/gdIAPrw==", + "dependencies": { + "System.ComponentModel": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.ComponentModel.TypeConverter": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "16pQ6P+EdhcXzPiEK4kbA953Fu0MNG2ovxTZU81/qsCd1zPRsKc3uif5NgvllCY598k6bI0KUyKW8fanlfaDQg==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Collections.NonGeneric": "4.3.0", + "System.Collections.Specialized": "4.3.0", + "System.ComponentModel": "4.3.0", + "System.ComponentModel.Primitives": "4.3.0", + "System.Globalization": "4.3.0", + "System.Linq": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Diagnostics.Debug": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Globalization": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Globalization.Extensions": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "FhKmdR6MPG+pxow6wGtNAWdZh7noIOpdD5TwQ3CprzgIE1bBBoim0vbR1+AWsWjQmU7zXHgQo4TWSP6lCeiWcQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0" + } + }, + "System.IO": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.IO.FileSystem.Primitives": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "6QOb2XFLch7bEc4lIcJH49nJN2HV+OC3fHDgsLVsBVBk3Y4hFAnOBGzJ2lUu7CyDDFo9IBWkSsnbkT6IBwwiMw==", + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.Linq": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "5DbqIUpsDp0dFftytzuMmc0oeMdQwjcP/EWxsksIz/w1TcFRkZ3yKKz0PqiYFMmEwPSWw+qNVqD7PJ889JzHbw==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0" + } + }, + "System.Reflection": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Emit": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "VR4kk8XLKebQ4MZuKuIni/7oh+QGFmZW3qORd1GvBq/8026OpW501SzT/oypwiQl4TvT8ErnReh/NzY9u+C6wQ==" + }, + "System.Reflection.Emit.ILGeneration": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "AucBYo3DSI0IDxdUjKksBcQJXPHyoPyrCXYURW1WDsLI4M65Ar/goSHjdnHOAY9MiYDNKqDlIgaYm+zL2hA1KA==" + }, + "System.Reflection.Emit.Lightweight": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "a4OLB4IITxAXJeV74MDx49Oq2+PsF6Sml54XAFv+2RyWwtDBcabzoxiiJRhdhx+gaohLh4hEGCLQyBozXoQPqA==" + }, + "System.Reflection.Extensions": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "rJkrJD3kBI5B712aRu4DpSIiHRtr6QlfZSQsb0hYHrDCZORXCFjQfoipo2LaMUHoT9i1B7j7MnfaEKWDFmFQNQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Primitives": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.TypeExtensions": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "VybpaOQQhqE6siHppMktjfGBw1GCwvCqiufqmP8F1nj7fTUNtW35LOEt3UZTEsECfo+ELAl/9o9nJx3U91i7vA==" + }, + "System.Resources.ResourceManager": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Globalization": "4.3.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + } + }, + "System.Runtime.Extensions": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime.Handles": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime.InteropServices": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Reflection": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0" + } + }, + "System.Text.Encoding": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Threading": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "VkUS0kOBcUf3Wwm0TSbrevDDZ6BlM+b/HRiapRFWjM5O0NS0LviG0glKmFK+hhPDd1XFeSdU1GmlLhb2CoVpIw==", + "dependencies": { + "System.Runtime": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Threading.Tasks": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.ValueTuple": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "okurQJO6NRE/apDIP23ajJ0hpiNmJ+f0BwOlB/cSqTLQlw5upkf+5+96+iG2Jw40G1fCVCyPz/FhIABUjMR+RQ==" + } + } + } +} \ No newline at end of file