diff --git a/BossHealthPlugin/BossBarStyle.cs b/BossHealthPlugin/BossBarStyle.cs new file mode 100644 index 0000000..39296fa --- /dev/null +++ b/BossHealthPlugin/BossBarStyle.cs @@ -0,0 +1,33 @@ +using UnityEngine; + +namespace Skopje.BossHealth +{ + /// + /// Look of the boss health bar. This is the file to edit. + /// + /// Sprites are chosen by the name shown on an Image's Sprite field in the game. + /// Leave a name empty to copy the in-game XP progress bar sprite. + /// After changing a name, rebuild the plugin. + /// + public static class BossBarStyle + { + public const string HealthSpriteName = ""; + public const string DelaySpriteName = ""; + public const string BackgroundSpriteName = ""; + + public static readonly Color HealthColor = new Color(0.86f, 0.1f, 0.1f, 1f); + public static readonly Color DelayColor = new Color(1f, 0.48f, 0.08f, 1f); + public static readonly Color BackgroundColor = new Color(0.04f, 0.04f, 0.04f, 0.8f); + public static readonly Color LabelColor = Color.white; + + // The white bar waits this long after the last hit, then drains toward the real health. + public const float DelaySeconds = 0.6f; + public const float DelayDrainPerSecond = 0.75f; + + public static readonly Vector2 BarSize = new Vector2(392f, 13f); + public const float TopClearance = 100f; + public const float TrackPadding = 2f; + public const float LabelHeight = 26f; + public const float LabelFontSize = 20f; + } +} diff --git a/BossHealthPlugin/BossHealthPlugin.cs b/BossHealthPlugin/BossHealthPlugin.cs new file mode 100644 index 0000000..deb77f6 --- /dev/null +++ b/BossHealthPlugin/BossHealthPlugin.cs @@ -0,0 +1,980 @@ +using System; +using BepInEx; +using BepInEx.Logging; +using BepInEx.Unity.IL2CPP; +using Doozy.Engine.UI; +using FishNet.Object.Synchronizing; +using Il2CppInterop.Runtime; +using Il2CppInterop.Runtime.Injection; +using Skopje.Modding; +using TMPro; +using UnityEngine; +using UnityEngine.SceneManagement; +using UnityEngine.UI; + +namespace Skopje.BossHealth +{ + [BepInPlugin(PluginGuid, PluginName, PluginVersion)] + public class BossHealthPlugin : BasePlugin + { + public const string PluginGuid = "com.skopje.bosshealth"; + public const string PluginName = "Skopje Boss Health"; + public const string PluginVersion = "1.0.0"; + + internal static ManualLogSource LogSource; + internal static bool ScanEnabled; + + // Il2Cpp delegates are collected if nothing managed keeps them alive. + static Il2CppSystem.Action _onClientStarted; + static Il2CppSystem.Action _onClientStopped; + static Il2CppSystem.Action _onGameModeStarted; + static Il2CppSystem.Action _onGameStatusChanged; + static Il2CppSystem.Action _onGameOver; + + public override void Load() + { + LogSource = Log; + ClassInjector.RegisterTypeInIl2Cpp(); + + // Client events only. A dedicated server never creates the display. + _onClientStarted = ToIl2Cpp(new System.Action(OnClientStarted)); + _onClientStopped = ToIl2Cpp(new System.Action(OnClientStopped)); + _onGameModeStarted = ToIl2Cpp(new System.Action(_ => ScanEnabled = true)); + _onGameStatusChanged = ToIl2Cpp(new System.Action(OnGameStatusChanged)); + _onGameOver = ToIl2Cpp(new System.Action(() => + { + ScanEnabled = false; + BossHealthDisplay.ClearFights(); + })); + + ModAPI.add_OnClientStarted(_onClientStarted); + ModAPI.add_OnClientStopped(_onClientStopped); + ModAPI.add_OnGameModeStartedClient(_onGameModeStarted); + ModAPI.add_OnGameStatusChanged(_onGameStatusChanged); + ModAPI.add_OnGameOver(_onGameOver); + + LogSource.LogInfo($"{PluginName} {PluginVersion} loaded."); + } + + static void OnClientStarted() + { + if (BossHealthDisplay.Instance != null) + return; + + var overlay = new GameObject("BossHealthDisplay"); + UnityEngine.Object.DontDestroyOnLoad(overlay); + overlay.AddComponent(); + LogSource.LogInfo("Boss health display created."); + } + + static void OnClientStopped() + { + ScanEnabled = false; + if (BossHealthDisplay.Instance != null) + UnityEngine.Object.Destroy(BossHealthDisplay.Instance.gameObject); + } + + static Il2CppSystem.Action ToIl2Cpp(System.Action action) + { + return DelegateSupport.ConvertDelegate(action); + } + + static Il2CppSystem.Action ToIl2Cpp(System.Action action) + { + return DelegateSupport.ConvertDelegate>(action); + } + + static void OnGameStatusChanged(SkopjeGameStatus status) + { + ScanEnabled = status == SkopjeGameStatus.Active; + if (!ScanEnabled) + BossHealthDisplay.ClearFights(); + } + } + + public class BossHealthDisplay : MonoBehaviour + { + const float IdleScanSeconds = 2f; + const float FightReadSeconds = 0.1f; + + public static BossHealthDisplay Instance { get; private set; } + + readonly Fight[] _fights = new Fight[4]; + int _fightCount; + float _nextScanTime; + float _nextReadTime; + + UIView _ingameView; + UIView _pauseView; + UIView _mpPauseView; + IngameMenuController _menu; + GameObject _barRoot; + RectTransform _barRect; + CompassViewController _compass; + Image _healthImage; + Image _delayImage; + TextMeshProUGUI _label; + string _bossName = string.Empty; + float _health = 1f; + float _delay = 1f; + float _delayWait; + bool _hasSample; + bool _loggedParent; + bool _loggedMissingView; + float _nextViewSearch; + + public BossHealthDisplay(IntPtr pointer) : base(pointer) + { + } + + public static void ClearFights() + { + if (Instance == null) + return; + Instance._fightCount = 0; + Instance._hasSample = false; + Instance._bossName = string.Empty; + Instance.ApplyVisibility(); + } + + void Awake() + { + Instance = this; + } + + void OnDestroy() + { + if (_barRoot != null) + Destroy(_barRoot); + if (Instance == this) + Instance = null; + } + + void Update() + { + if (!BossHealthPlugin.ScanEnabled) + { + _fightCount = 0; + _hasSample = false; + _bossName = string.Empty; + ApplyVisibility(); + return; + } + + float now = Time.unscaledTime; + if (_fightCount == 0) + { + if (now >= _nextScanTime) + { + _nextScanTime = now + IdleScanSeconds; + Scan(); + } + } + else if (now >= _nextReadTime) + { + _nextReadTime = now + FightReadSeconds; + Refresh(); + } + + if (_fightCount > 0) + AnimateDelay(); + PlaceBar(); + ApplyVisibility(); + } + + void Scan() + { + _fightCount = 0; + ConsiderAna(); + ConsiderVesna(); + ConsiderMetalsky(); + ConsiderTeofan(); + if (_fightCount > 0) + { + _nextReadTime = Time.unscaledTime + FightReadSeconds; + if (_fights[0].StillGoing(out float ratio)) + Present(_fights[0].Name, ratio); + } + else + { + _hasSample = false; + _bossName = string.Empty; + } + } + + void Refresh() + { + int write = 0; + for (int i = 0; i < _fightCount; i++) + { + Fight fight = _fights[i]; + if (!fight.StillGoing(out _)) + continue; + _fights[write++] = fight; + } + + _fightCount = write; + if (_fightCount == 0) + { + _hasSample = false; + _bossName = string.Empty; + _nextScanTime = Time.unscaledTime + IdleScanSeconds; + return; + } + + if (_fights[0].StillGoing(out float ratio)) + Present(_fights[0].Name, ratio); + } + + void Present(string bossName, float ratio) + { + EnsureBar(); + if (!_hasSample || _bossName != bossName) + { + _bossName = bossName; + _health = ratio; + _delay = ratio; + _delayWait = 0f; + _hasSample = true; + } + else if (ratio < _health - 0.001f) + { + _delayWait = BossBarStyle.DelaySeconds; + _health = ratio; + } + else + { + if (ratio > _delay) + { + _delay = ratio; + _delayWait = 0f; + } + _health = ratio; + } + + if (_label != null) + _label.text = bossName; + if (_healthImage != null) + _healthImage.fillAmount = _health; + if (_delayImage != null) + _delayImage.fillAmount = _delay; + } + + void AnimateDelay() + { + if (_delayImage == null || !_hasSample) + return; + + if (_delayWait > 0f) + _delayWait -= Time.unscaledDeltaTime; + else if (_delay > _health) + _delay = Mathf.MoveTowards(_delay, _health, BossBarStyle.DelayDrainPerSecond * Time.unscaledDeltaTime); + + _delayImage.fillAmount = _delay; + } + + void ApplyVisibility() + { + if (_barRoot == null) + return; + + bool show = _fightCount > 0 && _hasSample && HudAvailable(); + if (_barRoot.activeSelf != show) + _barRoot.SetActive(show); + } + + bool HudAvailable() + { + if (_ingameView == null || !_ingameView.gameObject.activeInHierarchy) + return false; + return !PauseOpen(); + } + + bool PauseOpen() + { + if (ViewShown(_pauseView) || ViewShown(_mpPauseView)) + return true; + + try + { + if (_menu == null) + return false; + string node = _menu.ActiveNode; + string pause = _menu.PauseNodeName; + return !string.IsNullOrEmpty(node) && node == pause; + } + catch (Exception) + { + return false; + } + } + + static bool ViewShown(UIView view) + { + if (view == null || !view.gameObject.activeInHierarchy) + return false; + try + { + return view.IsVisible || view.IsShowing; + } + catch (Exception) + { + return false; + } + } + + void EnsureBar() + { + ResolveViews(); + if (_ingameView == null) + { + if (!_loggedMissingView) + { + _loggedMissingView = true; + BossHealthPlugin.LogSource.LogWarning("Boss bar could not find the Ingame view."); + } + return; + } + if (_barRoot != null) + return; + BuildBar(); + } + + void ResolveViews() + { + if (_ingameView != null && _menu != null && _compass != null) + return; + if (Time.unscaledTime < _nextViewSearch) + return; + + _nextViewSearch = Time.unscaledTime + 2f; + if (_ingameView == null) + _ingameView = FindIngameView(); + if (_pauseView == null || _menu == null) + FindPause(); + if (_compass == null) + _compass = FindCompass(); + } + + static UIView FindIngameView() + { + UIView inactive = null; + var views = Resources.FindObjectsOfTypeAll(); + for (int i = 0; i < views.Length; i++) + { + UIView view = views[i]; + if (!IsSceneObject(view) || !IsIngameView(view)) + continue; + if (view.gameObject.activeInHierarchy) + return view; + inactive ??= view; + } + + return inactive; + } + + static bool IsIngameView(UIView view) + { + string objectName = view.name; + if (objectName == "View - Ingame" || objectName == "View - Ingam") + return true; + + try + { + string viewName = view.ViewName; + return viewName == "Ingame" || viewName == "Ingam"; + } + catch (Exception) + { + return false; + } + } + + void FindPause() + { + var views = Resources.FindObjectsOfTypeAll(); + for (int i = 0; i < views.Length; i++) + { + UIView view = views[i]; + if (!IsSceneObject(view) || !IsPauseView(view)) + continue; + if (_pauseView == null) + _pauseView = view; + else if (_mpPauseView == null && view != _pauseView) + _mpPauseView = view; + } + + if (_menu != null) + return; + + var menus = Resources.FindObjectsOfTypeAll(); + for (int i = 0; i < menus.Length; i++) + { + if (!IsSceneObject(menus[i])) + continue; + _menu = menus[i]; + return; + } + } + + static bool IsPauseView(UIView view) + { + string objectName = view.name; + if (objectName.StartsWith("View - Pause") || objectName.StartsWith("View - MPPaus")) + return true; + + try + { + string viewName = view.ViewName; + return viewName == "Pause" || viewName == "MPPause" || viewName == "MPPaus"; + } + catch (Exception) + { + return false; + } + } + + static bool IsSceneObject(Component component) + { + return component != null && component.gameObject.scene.IsValid(); + } + + void BuildBar() + { + XpProgressBar xpBar = FindXpBar(); + Image xpImage = xpBar != null ? xpBar.ProgressBar : null; + Sprite xpSprite = xpImage != null ? xpImage.sprite : null; + Sprite healthSprite = ResolveSprite(BossBarStyle.HealthSpriteName, xpSprite) ?? SolidSprite(); + Sprite delaySprite = ResolveSprite(BossBarStyle.DelaySpriteName, healthSprite) ?? healthSprite; + Sprite backgroundSprite = ResolveSprite(BossBarStyle.BackgroundSpriteName, FrameSprite(xpImage, healthSprite)); + + _barRoot = new GameObject("BossHealthBar"); + _barRoot.AddComponent(); + _barRoot.transform.SetParent(_ingameView.transform, false); + + _barRect = _barRoot.GetComponent(); + _barRect.anchorMin = new Vector2(0.5f, 1f); + _barRect.anchorMax = new Vector2(0.5f, 1f); + _barRect.pivot = new Vector2(0.5f, 1f); + _barRect.sizeDelta = BossBarStyle.BarSize; + _barRect.localScale = Vector3.one; + PlaceBar(); + + Color healthColor = BossBarStyle.HealthColor; + + CreateImage("Background", backgroundSprite, Image.Type.Simple, BossBarStyle.BackgroundColor, 0f); + _delayImage = CreateImage("DelayFill", delaySprite, Image.Type.Filled, BossBarStyle.DelayColor, BossBarStyle.TrackPadding); + _healthImage = CreateImage("HealthFill", healthSprite, Image.Type.Filled, healthColor, BossBarStyle.TrackPadding); + if (xpImage != null && xpImage.material != null) + { + _healthImage.material = xpImage.material; + _delayImage.material = xpImage.material; + } + + _healthImage.fillAmount = _health; + _delayImage.fillAmount = _delay; + CreateLabel(xpBar); + _barRoot.SetActive(false); + + _barRoot.transform.SetAsLastSibling(); + if (!_loggedParent) + { + _loggedParent = true; + string spriteName = healthSprite != null ? healthSprite.name : "(solid white)"; + BossHealthPlugin.LogSource.LogInfo( + "Boss bar parented to '" + _ingameView.name + "' using sprite '" + spriteName + "'. Edit BossBarStyle.cs to change sprites."); + } + } + + Image CreateImage(string name, Sprite sprite, Image.Type type, Color color, float inset) + { + var go = new GameObject(name); + go.AddComponent(); + go.transform.SetParent(_barRoot.transform, false); + + RectTransform rect = go.GetComponent(); + rect.anchorMin = Vector2.zero; + rect.anchorMax = Vector2.one; + rect.offsetMin = new Vector2(inset, inset); + rect.offsetMax = new Vector2(-inset, -inset); + rect.localScale = Vector3.one; + + Image image = go.AddComponent(); + image.sprite = sprite; + image.type = type; + image.color = color; + image.raycastTarget = false; + if (type == Image.Type.Filled) + { + image.fillMethod = Image.FillMethod.Horizontal; + image.fillOrigin = (int)Image.OriginHorizontal.Left; + image.fillAmount = 1f; + } + + return image; + } + + void PlaceBar() + { + if (_barRect == null) + return; + + float y = -(CompassHeight() + BossBarStyle.TopClearance); + if (Mathf.Abs(_barRect.anchoredPosition.y - y) < 0.5f) + return; + _barRect.anchoredPosition = new Vector2(0f, y); + } + + float CompassHeight() + { + if (_compass == null || _barRect == null) + return 0f; + + try + { + if (!_compass.compassEnabled) + return 0f; + } + catch (Exception) + { + return 0f; + } + + RectTransform compass = null; + CompassView view = _compass.CompassView; + if (view != null) + compass = view.Compass; + if (compass == null && _compass.CompassGO != null) + compass = _compass.CompassGO.GetComponent(); + if (compass == null || !compass.gameObject.activeInHierarchy) + return 0f; + + float height = Mathf.Abs(compass.rect.height); + if (height < 1f) + height = Mathf.Abs(compass.sizeDelta.y); + if (height < 1f) + return 0f; + + float barScale = Mathf.Abs(_barRect.lossyScale.y); + float compassScale = Mathf.Abs(compass.lossyScale.y); + if (barScale > 0.0001f) + height *= compassScale / barScale; + return height; + } + + static CompassViewController FindCompass() + { + var controllers = Resources.FindObjectsOfTypeAll(); + CompassViewController inactive = null; + for (int i = 0; i < controllers.Length; i++) + { + CompassViewController controller = controllers[i]; + if (!IsSceneObject(controller)) + continue; + if (controller.gameObject.activeInHierarchy) + return controller; + inactive ??= controller; + } + + return inactive; + } + + void CreateLabel(XpProgressBar xpBar) + { + TMP_FontAsset font = null; + Material fontMaterial = null; + if (xpBar != null && xpBar.LevelText != null) + { + font = xpBar.LevelText.font; + fontMaterial = xpBar.LevelText.fontSharedMaterial; + } + + if (font == null) + { + var texts = Resources.FindObjectsOfTypeAll(); + for (int i = 0; i < texts.Length; i++) + { + TextMeshProUGUI text = texts[i]; + if (!IsSceneObject(text) || text.font == null) + continue; + font = text.font; + fontMaterial = text.fontSharedMaterial; + break; + } + } + + if (font == null) + return; + + var go = new GameObject("Label"); + go.AddComponent(); + go.transform.SetParent(_barRoot.transform, false); + + RectTransform rect = go.GetComponent(); + rect.anchorMin = new Vector2(0f, 1f); + rect.anchorMax = new Vector2(1f, 1f); + rect.pivot = new Vector2(0.5f, 0f); + rect.anchoredPosition = new Vector2(0f, 2f); + rect.sizeDelta = new Vector2(0f, BossBarStyle.LabelHeight); + rect.localScale = Vector3.one; + + _label = go.AddComponent(); + _label.font = font; + if (fontMaterial != null) + _label.fontSharedMaterial = fontMaterial; + _label.fontSize = BossBarStyle.LabelFontSize; + _label.alignment = TextAlignmentOptions.Center; + _label.color = BossBarStyle.LabelColor; + _label.raycastTarget = false; + _label.enableWordWrapping = false; + _label.text = _bossName; + } + + static XpProgressBar FindXpBar() + { + var bars = Resources.FindObjectsOfTypeAll(); + XpProgressBar inactive = null; + for (int i = 0; i < bars.Length; i++) + { + XpProgressBar bar = bars[i]; + if (!IsSceneObject(bar)) + continue; + if (bar.gameObject.activeInHierarchy) + return bar; + inactive ??= bar; + } + + return inactive; + } + + static Sprite FrameSprite(Image xpImage, Sprite healthSprite) + { + if (xpImage == null || xpImage.transform.parent == null) + return null; + + Image frame = xpImage.transform.parent.GetComponent(); + if (frame == null || frame.sprite == null || frame.sprite == healthSprite) + return null; + return frame.sprite; + } + + static Sprite _solidSprite; + + static Sprite SolidSprite() + { + if (_solidSprite != null) + return _solidSprite; + + var texture = new Texture2D(1, 1, TextureFormat.RGBA32, false); + texture.SetPixel(0, 0, Color.white); + texture.Apply(); + _solidSprite = Sprite.Create(texture, new Rect(0, 0, 1, 1), new Vector2(0.5f, 0.5f), 1f); + return _solidSprite; + } + + static Sprite ResolveSprite(string overrideName, Sprite fallback) + { + if (string.IsNullOrEmpty(overrideName)) + return fallback; + + var sprites = Resources.FindObjectsOfTypeAll(); + for (int i = 0; i < sprites.Length; i++) + { + Sprite sprite = sprites[i]; + if (sprite != null && sprite.name == overrideName) + return sprite; + } + + BossHealthPlugin.LogSource.LogWarning( + "Boss bar sprite '" + overrideName + "' was not found. Using the XP bar sprite instead."); + return fallback; + } + + void AddFight(Fight fight) + { + if (fight == null || _fightCount >= _fights.Length) + return; + _fights[_fightCount++] = fight; + BossHealthPlugin.LogSource.LogInfo($"Boss fight started: {fight.Name}"); + } + + void ConsiderAna() + { + var bosses = UnityEngine.Object.FindObjectsOfType(); + for (int i = 0; i < bosses.Length; i++) + { + AnaBoss boss = bosses[i]; + if (!IsAlive(boss) || !boss.isActiveAndEnabled) + continue; + if (!TryRatio(boss.EnemyControl, out _)) + continue; + if (IsTrue(boss.Dead)) + continue; + if (!IsTrue(boss.Visibility) && !IsTrue(boss.IsVulnerable)) + continue; + + AddFight(new AnaFight(boss)); + return; + } + } + + void ConsiderVesna() + { + var bosses = UnityEngine.Object.FindObjectsOfType(); + for (int i = 0; i < bosses.Length; i++) + { + VesnaBoss boss = bosses[i]; + if (!IsAlive(boss) || !boss.isActiveAndEnabled) + continue; + if (!TryRatio(boss.EnemyControl, out _)) + continue; + if (IsTrue(boss.Dead) || !IsTrue(boss.Visibility)) + continue; + + AddFight(new VesnaFight(boss)); + return; + } + } + + void ConsiderMetalsky() + { + var bosses = UnityEngine.Object.FindObjectsOfType(); + for (int i = 0; i < bosses.Length; i++) + { + MetalskyBoss boss = bosses[i]; + if (!IsAlive(boss) || !boss.isActiveAndEnabled) + continue; + if (!IsTrue(boss.BossBattleState) || SafeDead(boss)) + continue; + if (!TryRatio(boss.PawnStatus, out _)) + continue; + + AddFight(new MetalskyFight(boss)); + return; + } + } + + void ConsiderTeofan() + { + var brains = UnityEngine.Object.FindObjectsOfType(); + for (int i = 0; i < brains.Length; i++) + { + TeofanBossBrain brain = brains[i]; + if (!IsAlive(brain) || !brain.isActiveAndEnabled || SafeDead(brain)) + continue; + + EnemyControlAStar control = brain.GetComponent(); + if (control == null) + control = brain.GetComponentInParent(); + if (control == null) + control = brain.GetComponentInChildren(true); + if (!TryRatio(control, out _)) + continue; + if (!TeofanPhaseStarted()) + continue; + + AddFight(new TeofanFight(brain)); + return; + } + } + + static bool TeofanPhaseStarted() + { + var arenas = UnityEngine.Object.FindObjectsOfType(); + if (arenas == null || arenas.Length == 0) + return true; + + for (int i = 0; i < arenas.Length; i++) + { + TeofanBossArena arena = arenas[i]; + if (!IsAlive(arena) || arena.Phase == null) + continue; + if (arena.Phase.Value > 0) + return true; + } + + return false; + } + + static bool TryRatio(EnemyControlAStar control, out float ratio) + { + ratio = 0f; + if (!IsAlive(control)) + return false; + return TryRatio(control.PawnStatus, out ratio); + } + + static bool TryRatio(PawnStatus status, out float ratio) + { + ratio = 0f; + try + { + if (!IsAlive(status)) + return false; + + float max = status.InitialHealth; + if (max <= 0.01f) + return false; + + SyncVar health = status.Health; + if (health == null) + return false; + + ratio = Mathf.Clamp01(health.Value / max); + return true; + } + catch (Exception) + { + return false; + } + } + + static bool IsTrue(SyncVar value) + { + try + { + return value != null && value.Value; + } + catch (Exception) + { + return false; + } + } + + static bool IsAlive(UnityEngine.Object obj) + { + return obj != null; + } + + static bool SafeDead(MetalskyBoss boss) + { + try + { + return boss.IsDead; + } + catch (Exception) + { + return true; + } + } + + static bool SafeDead(TeofanBossBrain brain) + { + try + { + return brain.dead; + } + catch (Exception) + { + return true; + } + } + + abstract class Fight + { + public string Name; + + public abstract bool StillGoing(out float ratio); + } + + sealed class AnaFight : Fight + { + readonly AnaBoss _boss; + bool _engaged; + + public AnaFight(AnaBoss boss) + { + _boss = boss; + Name = "Ana"; + _engaged = true; + } + + public override bool StillGoing(out float ratio) + { + ratio = 0f; + if (!IsAlive(_boss)) + return false; + if (IsTrue(_boss.Dead)) + return false; + + // Ana disappears between attacks. Keep the counter until she is actually dead. + if (IsTrue(_boss.Visibility) || IsTrue(_boss.IsVulnerable)) + _engaged = true; + if (!_engaged) + return false; + return TryRatio(_boss.EnemyControl, out ratio); + } + } + + sealed class VesnaFight : Fight + { + readonly VesnaBoss _boss; + bool _engaged; + + public VesnaFight(VesnaBoss boss) + { + _boss = boss; + Name = "Vesna"; + _engaged = true; + } + + public override bool StillGoing(out float ratio) + { + ratio = 0f; + if (!IsAlive(_boss)) + return false; + if (IsTrue(_boss.Dead)) + return false; + if (IsTrue(_boss.Visibility)) + _engaged = true; + if (!_engaged) + return false; + return TryRatio(_boss.EnemyControl, out ratio); + } + } + + sealed class MetalskyFight : Fight + { + readonly MetalskyBoss _boss; + + public MetalskyFight(MetalskyBoss boss) + { + _boss = boss; + Name = "Metalsky"; + } + + public override bool StillGoing(out float ratio) + { + ratio = 0f; + if (!IsAlive(_boss) || SafeDead(_boss) || !IsTrue(_boss.BossBattleState)) + return false; + return TryRatio(_boss.PawnStatus, out ratio); + } + } + + sealed class TeofanFight : Fight + { + readonly TeofanBossBrain _brain; + + public TeofanFight(TeofanBossBrain brain) + { + _brain = brain; + Name = "Teofan"; + } + + public override bool StillGoing(out float ratio) + { + ratio = 0f; + if (!IsAlive(_brain) || SafeDead(_brain)) + return false; + + EnemyControlAStar control = _brain.GetComponent(); + if (control == null) + control = _brain.GetComponentInParent(); + if (control == null) + control = _brain.GetComponentInChildren(true); + return TryRatio(control, out ratio); + } + } + } +} diff --git a/BossHealthPlugin/BossHealthPlugin.csproj b/BossHealthPlugin/BossHealthPlugin.csproj new file mode 100644 index 0000000..256318c --- /dev/null +++ b/BossHealthPlugin/BossHealthPlugin.csproj @@ -0,0 +1,60 @@ + + + net6.0 + latest + disable + disable + true + Skopje.BossHealth + Skopje.BossHealth + true + D:\SteamLibrary\steamapps\common\Skopje83 + + + + + $(GameDir)\BepInEx\core\BepInEx.Core.dll + false + + + $(GameDir)\BepInEx\core\BepInEx.Unity.IL2CPP.dll + false + + + $(GameDir)\BepInEx\core\Il2CppInterop.Runtime.dll + false + + + $(GameDir)\BepInEx\interop\Il2Cppmscorlib.dll + false + + + $(GameDir)\BepInEx\interop\SkopjeAssembly.dll + false + + + $(GameDir)\BepInEx\interop\FishNet.Runtime.dll + false + + + $(GameDir)\BepInEx\interop\UnityEngine.CoreModule.dll + false + + + $(GameDir)\BepInEx\interop\UnityEngine.UI.dll + false + + + $(GameDir)\BepInEx\interop\Unity.TextMeshPro.dll + false + + + $(GameDir)\BepInEx\interop\DoozyEngineAssembly.dll + false + + + $(GameDir)\BepInEx\interop\Archon.SwissArmyLib.dll + false + + + diff --git a/BossHealthPlugin/bin/Release/net6.0/Skopje.BossHealth.deps.json b/BossHealthPlugin/bin/Release/net6.0/Skopje.BossHealth.deps.json new file mode 100644 index 0000000..2e0b310 --- /dev/null +++ b/BossHealthPlugin/bin/Release/net6.0/Skopje.BossHealth.deps.json @@ -0,0 +1,23 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v6.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v6.0": { + "Skopje.BossHealth/1.0.0": { + "runtime": { + "Skopje.BossHealth.dll": {} + } + } + } + }, + "libraries": { + "Skopje.BossHealth/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + } + } +} \ No newline at end of file diff --git a/BossHealthPlugin/bin/Release/net6.0/Skopje.BossHealth.dll b/BossHealthPlugin/bin/Release/net6.0/Skopje.BossHealth.dll new file mode 100644 index 0000000..388b28b Binary files /dev/null and b/BossHealthPlugin/bin/Release/net6.0/Skopje.BossHealth.dll differ diff --git a/BossHealthPlugin/bin/Release/net6.0/Skopje.BossHealth.pdb b/BossHealthPlugin/bin/Release/net6.0/Skopje.BossHealth.pdb new file mode 100644 index 0000000..14a4ead Binary files /dev/null and b/BossHealthPlugin/bin/Release/net6.0/Skopje.BossHealth.pdb differ diff --git a/BossHealthPlugin/obj/BossHealthPlugin.csproj.nuget.dgspec.json b/BossHealthPlugin/obj/BossHealthPlugin.csproj.nuget.dgspec.json new file mode 100644 index 0000000..df95fae --- /dev/null +++ b/BossHealthPlugin/obj/BossHealthPlugin.csproj.nuget.dgspec.json @@ -0,0 +1,85 @@ +{ + "format": 1, + "restore": { + "c:\\Users\\andre\\Desktop\\SkopjeMods\\BossHealthPlugin\\BossHealthPlugin.csproj": {} + }, + "projects": { + "c:\\Users\\andre\\Desktop\\SkopjeMods\\BossHealthPlugin\\BossHealthPlugin.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "c:\\Users\\andre\\Desktop\\SkopjeMods\\BossHealthPlugin\\BossHealthPlugin.csproj", + "projectName": "Skopje.BossHealth", + "projectPath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\BossHealthPlugin\\BossHealthPlugin.csproj", + "packagesPath": "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget", + "outputPath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\BossHealthPlugin\\obj\\", + "projectStyle": "PackageReference", + "configFilePaths": [ + "C:\\Users\\andre\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net6.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net6.0": { + "framework": "net6.0", + "targetAlias": "net6.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "10.0.300" + }, + "frameworks": { + "net6.0": { + "framework": "net6.0", + "targetAlias": "net6.0", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[6.0.36, 6.0.36]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[6.0.36, 6.0.36]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[6.0.36, 6.0.36]" + } + ], + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.301\\RuntimeIdentifierGraph.json" + } + } + } + } +} \ No newline at end of file diff --git a/BossHealthPlugin/obj/BossHealthPlugin.csproj.nuget.g.props b/BossHealthPlugin/obj/BossHealthPlugin.csproj.nuget.g.props new file mode 100644 index 0000000..ba0d2cb --- /dev/null +++ b/BossHealthPlugin/obj/BossHealthPlugin.csproj.nuget.g.props @@ -0,0 +1,15 @@ + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + $(UserProfile)\AppData\Local\Temp\cursor-sandbox-cache\a0404811fc6e51c4c5761fd11591789f\nuget + C:\Users\andre\AppData\Local\Temp\cursor-sandbox-cache\a0404811fc6e51c4c5761fd11591789f\nuget + PackageReference + 7.0.0 + + + + + \ No newline at end of file diff --git a/BossHealthPlugin/obj/BossHealthPlugin.csproj.nuget.g.targets b/BossHealthPlugin/obj/BossHealthPlugin.csproj.nuget.g.targets new file mode 100644 index 0000000..3dc06ef --- /dev/null +++ b/BossHealthPlugin/obj/BossHealthPlugin.csproj.nuget.g.targets @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/BossHealthPlugin/obj/Release/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs b/BossHealthPlugin/obj/Release/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs new file mode 100644 index 0000000..ed92695 --- /dev/null +++ b/BossHealthPlugin/obj/Release/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")] diff --git a/BossHealthPlugin/obj/Release/net6.0/BossHealthPlugin.AssemblyInfo.cs b/BossHealthPlugin/obj/Release/net6.0/BossHealthPlugin.AssemblyInfo.cs new file mode 100644 index 0000000..39f06f9 --- /dev/null +++ b/BossHealthPlugin/obj/Release/net6.0/BossHealthPlugin.AssemblyInfo.cs @@ -0,0 +1,22 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("Skopje.BossHealth")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] +[assembly: System.Reflection.AssemblyProductAttribute("Skopje.BossHealth")] +[assembly: System.Reflection.AssemblyTitleAttribute("Skopje.BossHealth")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/BossHealthPlugin/obj/Release/net6.0/BossHealthPlugin.AssemblyInfoInputs.cache b/BossHealthPlugin/obj/Release/net6.0/BossHealthPlugin.AssemblyInfoInputs.cache new file mode 100644 index 0000000..b0d2506 --- /dev/null +++ b/BossHealthPlugin/obj/Release/net6.0/BossHealthPlugin.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +0acf9d2f1a6c359332339552562b4ad3180ad1d45517bc93e22ec640b2c677b6 diff --git a/BossHealthPlugin/obj/Release/net6.0/BossHealthPlugin.GeneratedMSBuildEditorConfig.editorconfig b/BossHealthPlugin/obj/Release/net6.0/BossHealthPlugin.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..beded67 --- /dev/null +++ b/BossHealthPlugin/obj/Release/net6.0/BossHealthPlugin.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,18 @@ +is_global = true +build_property.TargetFramework = net6.0 +build_property.TargetFrameworkIdentifier = .NETCoreApp +build_property.TargetFrameworkVersion = v6.0 +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property.EntryPointFilePath = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = Skopje.BossHealth +build_property.ProjectDir = c:\Users\andre\Desktop\SkopjeMods\BossHealthPlugin\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.EffectiveAnalysisLevelStyle = 6.0 +build_property.EnableCodeStyleSeverity = diff --git a/BossHealthPlugin/obj/Release/net6.0/BossHealthPlugin.assets.cache b/BossHealthPlugin/obj/Release/net6.0/BossHealthPlugin.assets.cache new file mode 100644 index 0000000..e43f9e5 Binary files /dev/null and b/BossHealthPlugin/obj/Release/net6.0/BossHealthPlugin.assets.cache differ diff --git a/BossHealthPlugin/obj/Release/net6.0/BossHealthPlugin.csproj.AssemblyReference.cache b/BossHealthPlugin/obj/Release/net6.0/BossHealthPlugin.csproj.AssemblyReference.cache new file mode 100644 index 0000000..69b3c6f Binary files /dev/null and b/BossHealthPlugin/obj/Release/net6.0/BossHealthPlugin.csproj.AssemblyReference.cache differ diff --git a/BossHealthPlugin/obj/Release/net6.0/BossHealthPlugin.csproj.CoreCompileInputs.cache b/BossHealthPlugin/obj/Release/net6.0/BossHealthPlugin.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..7921fba --- /dev/null +++ b/BossHealthPlugin/obj/Release/net6.0/BossHealthPlugin.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +fa3b81ae49792c7e2809d45957a31d8bfffb4da7db29d70797a1fd96529ce180 diff --git a/BossHealthPlugin/obj/Release/net6.0/BossHealthPlugin.csproj.FileListAbsolute.txt b/BossHealthPlugin/obj/Release/net6.0/BossHealthPlugin.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..52fae5f --- /dev/null +++ b/BossHealthPlugin/obj/Release/net6.0/BossHealthPlugin.csproj.FileListAbsolute.txt @@ -0,0 +1,12 @@ +c:\Users\andre\Desktop\SkopjeMods\BossHealthPlugin\obj\Release\net6.0\BossHealthPlugin.csproj.AssemblyReference.cache +c:\Users\andre\Desktop\SkopjeMods\BossHealthPlugin\obj\Release\net6.0\BossHealthPlugin.GeneratedMSBuildEditorConfig.editorconfig +c:\Users\andre\Desktop\SkopjeMods\BossHealthPlugin\obj\Release\net6.0\BossHealthPlugin.AssemblyInfoInputs.cache +c:\Users\andre\Desktop\SkopjeMods\BossHealthPlugin\obj\Release\net6.0\BossHealthPlugin.AssemblyInfo.cs +c:\Users\andre\Desktop\SkopjeMods\BossHealthPlugin\obj\Release\net6.0\BossHealthPlugin.csproj.CoreCompileInputs.cache +c:\Users\andre\Desktop\SkopjeMods\BossHealthPlugin\bin\Release\net6.0\Skopje.BossHealth.deps.json +c:\Users\andre\Desktop\SkopjeMods\BossHealthPlugin\bin\Release\net6.0\Skopje.BossHealth.dll +c:\Users\andre\Desktop\SkopjeMods\BossHealthPlugin\bin\Release\net6.0\Skopje.BossHealth.pdb +c:\Users\andre\Desktop\SkopjeMods\BossHealthPlugin\obj\Release\net6.0\Skopje.BossHealth.dll +c:\Users\andre\Desktop\SkopjeMods\BossHealthPlugin\obj\Release\net6.0\refint\Skopje.BossHealth.dll +c:\Users\andre\Desktop\SkopjeMods\BossHealthPlugin\obj\Release\net6.0\Skopje.BossHealth.pdb +c:\Users\andre\Desktop\SkopjeMods\BossHealthPlugin\obj\Release\net6.0\ref\Skopje.BossHealth.dll diff --git a/BossHealthPlugin/obj/Release/net6.0/Skopje.BossHealth.dll b/BossHealthPlugin/obj/Release/net6.0/Skopje.BossHealth.dll new file mode 100644 index 0000000..388b28b Binary files /dev/null and b/BossHealthPlugin/obj/Release/net6.0/Skopje.BossHealth.dll differ diff --git a/BossHealthPlugin/obj/Release/net6.0/Skopje.BossHealth.pdb b/BossHealthPlugin/obj/Release/net6.0/Skopje.BossHealth.pdb new file mode 100644 index 0000000..14a4ead Binary files /dev/null and b/BossHealthPlugin/obj/Release/net6.0/Skopje.BossHealth.pdb differ diff --git a/BossHealthPlugin/obj/Release/net6.0/ref/Skopje.BossHealth.dll b/BossHealthPlugin/obj/Release/net6.0/ref/Skopje.BossHealth.dll new file mode 100644 index 0000000..aa5efe0 Binary files /dev/null and b/BossHealthPlugin/obj/Release/net6.0/ref/Skopje.BossHealth.dll differ diff --git a/BossHealthPlugin/obj/Release/net6.0/refint/Skopje.BossHealth.dll b/BossHealthPlugin/obj/Release/net6.0/refint/Skopje.BossHealth.dll new file mode 100644 index 0000000..aa5efe0 Binary files /dev/null and b/BossHealthPlugin/obj/Release/net6.0/refint/Skopje.BossHealth.dll differ diff --git a/BossHealthPlugin/obj/project.assets.json b/BossHealthPlugin/obj/project.assets.json new file mode 100644 index 0000000..d466b0d --- /dev/null +++ b/BossHealthPlugin/obj/project.assets.json @@ -0,0 +1,90 @@ +{ + "version": 4, + "targets": { + "net6.0": {} + }, + "libraries": {}, + "projectFileDependencyGroups": { + "net6.0": [] + }, + "packageFolders": { + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget": {} + }, + "project": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "c:\\Users\\andre\\Desktop\\SkopjeMods\\BossHealthPlugin\\BossHealthPlugin.csproj", + "projectName": "Skopje.BossHealth", + "projectPath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\BossHealthPlugin\\BossHealthPlugin.csproj", + "packagesPath": "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget", + "outputPath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\BossHealthPlugin\\obj\\", + "projectStyle": "PackageReference", + "configFilePaths": [ + "C:\\Users\\andre\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net6.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net6.0": { + "framework": "net6.0", + "targetAlias": "net6.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "10.0.300" + }, + "frameworks": { + "net6.0": { + "framework": "net6.0", + "targetAlias": "net6.0", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[6.0.36, 6.0.36]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[6.0.36, 6.0.36]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[6.0.36, 6.0.36]" + } + ], + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.301\\RuntimeIdentifierGraph.json" + } + } + } +} \ No newline at end of file diff --git a/BossHealthPlugin/obj/project.nuget.cache b/BossHealthPlugin/obj/project.nuget.cache new file mode 100644 index 0000000..f6d5928 --- /dev/null +++ b/BossHealthPlugin/obj/project.nuget.cache @@ -0,0 +1,12 @@ +{ + "version": 2, + "dgSpecHash": "H27KblJKjqM=", + "success": true, + "projectFilePath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\BossHealthPlugin\\BossHealthPlugin.csproj", + "expectedPackageFiles": [ + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\microsoft.netcore.app.ref\\6.0.36\\microsoft.netcore.app.ref.6.0.36.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\microsoft.windowsdesktop.app.ref\\6.0.36\\microsoft.windowsdesktop.app.ref.6.0.36.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\microsoft.aspnetcore.app.ref\\6.0.36\\microsoft.aspnetcore.app.ref.6.0.36.nupkg.sha512" + ], + "logs": [] +} \ No newline at end of file diff --git a/DamageNumbers/DamageNumbersPlugin.cs b/DamageNumbers/DamageNumbersPlugin.cs new file mode 100644 index 0000000..369fdf8 --- /dev/null +++ b/DamageNumbers/DamageNumbersPlugin.cs @@ -0,0 +1,628 @@ +using System; +using BepInEx; +using BepInEx.Configuration; +using BepInEx.Logging; +using BepInEx.Unity.IL2CPP; +using HarmonyLib; +using Il2CppInterop.Runtime; +using Il2CppInterop.Runtime.Injection; +using Skopje.Modding; +using UnityEngine; + +namespace Skopje.DamageNumbers +{ + [BepInPlugin(PluginGuid, PluginName, PluginVersion)] + public class DamageNumbersPlugin : BasePlugin + { + public const string PluginGuid = "com.skopje.damagenumbers"; + public const string PluginName = "Skopje Damage Numbers"; + public const string PluginVersion = "1.0.0"; + + internal static ManualLogSource LogSource; + internal static bool ClientRunning; + + internal static ConfigEntry Enabled; + internal static ConfigEntry OnlyYourDamage; + internal static ConfigEntry Lifetime; + internal static ConfigEntry Size; + + static Harmony _harmony; + static SkopjePlayer _localPlayer; + static int _errorLogs; + static int _traceLogs; + + const int Recent = 32; + static readonly int[] _recentEnemy = new int[Recent]; + static readonly int[] _recentAmount = new int[Recent]; + static readonly int[] _recentCell = new int[Recent]; + static readonly int[] _recentFrame = new int[Recent]; + static int _recentWrite; + + static Il2CppSystem.Action _onClientStarted; + static Il2CppSystem.Action _onClientStopped; + static Il2CppSystem.Action _onPlayerStarted; + static Il2CppSystem.Action _onPlayerStopped; + static Il2CppSystem.Action _onGameOver; + + public override void Load() + { + LogSource = Log; + Enabled = Config.Bind("Display", "Enabled", true, "Show floating damage numbers."); + OnlyYourDamage = Config.Bind("Display", "OnlyYourDamage", true, "Only show hits dealt by your pawn. Hits with no owner still show."); + Lifetime = Config.Bind("Display", "Lifetime", 0.8f, "Seconds each number stays on screen."); + Size = Config.Bind("Display", "Size", 1f, "Size multiplier."); + + ClassInjector.RegisterTypeInIl2Cpp(); + + _onClientStarted = ToIl2Cpp(new System.Action(OnClientStarted)); + _onClientStopped = ToIl2Cpp(new System.Action(OnClientStopped)); + _onPlayerStarted = ToIl2Cpp(new System.Action(OnPlayerStarted)); + _onPlayerStopped = ToIl2Cpp(new System.Action(OnPlayerStopped)); + _onGameOver = ToIl2Cpp(new System.Action(OnGameOver)); + + ModAPI.add_OnClientStarted(_onClientStarted); + ModAPI.add_OnClientStopped(_onClientStopped); + ModAPI.add_OnPlayerStartedClient(_onPlayerStarted); + ModAPI.add_OnPlayerStoppedClient(_onPlayerStopped); + ModAPI.add_OnGameOver(_onGameOver); + + _harmony = new Harmony(PluginGuid); + Patch(AccessTools.Method(typeof(EnemyControlAStar), nameof(EnemyControlAStar.TakeDamage)), nameof(AfterTakeDamage)); + // Observers RPC body. Parameter names are stripped, so the postfix binds them by index. + Patch(AccessTools.Method(typeof(EnemyControlAStar), "RpcLogic___RpcDamageTaken_3262335728"), nameof(AfterObservedDamage)); + + LogSource.LogInfo($"{PluginName} {PluginVersion} loaded."); + } + + public override bool Unload() + { + ClientRunning = false; + if (_harmony != null) + _harmony.UnpatchSelf(); + DamageNumbersDisplay.DestroyHost(); + return true; + } + + static void Patch(System.Reflection.MethodInfo method, string postfix) + { + if (method == null) + { + LogSource.LogWarning("Damage number hook was not found: " + postfix); + return; + } + + _harmony.Patch(method, postfix: new HarmonyMethod(typeof(DamageNumbersPlugin), postfix)); + } + + static void OnClientStarted() + { + ClientRunning = true; + DamageNumbersDisplay.Ensure(); + LogSource.LogInfo("Damage numbers ready."); + } + + static void OnClientStopped() + { + ClientRunning = false; + _localPlayer = null; + DamageNumbersDisplay.DestroyHost(); + } + + static void OnPlayerStarted(SkopjePlayer player) + { + if (player != null && player.IsOwner) + _localPlayer = player; + } + + static void OnPlayerStopped(SkopjePlayer player) + { + if (_localPlayer == player) + _localPlayer = null; + } + + static void OnGameOver() + { + DamageNumbersDisplay.Clear(); + } + + static void AfterTakeDamage(EnemyControlAStar __instance, HitData hitData) + { + try + { + Present(__instance, hitData, null, true); + } + catch (Exception ex) + { + Fail(ex); + } + } + + static void AfterObservedDamage( + EnemyControlAStar __instance, + [HarmonyArgument(0)] HitData hitData, + [HarmonyArgument(1)] DamageablePart part) + { + try + { + Present(__instance, hitData, part, false); + } + catch (Exception ex) + { + Fail(ex); + } + } + + static void Present(EnemyControlAStar enemy, HitData hit, DamageablePart part, bool allowLastPart) + { + if (!ClientRunning || Enabled == null || !Enabled.Value) + return; + if (enemy == null || hit == null || hit.isDespawn) + return; + + DamageType type = hit.DamageType; + if (HasFlag(type, DamageType.Enemy) || HasFlag(type, DamageType.Fall)) + return; + if (!IsYourHit(hit)) + { + Trace("skipped somebody else's hit"); + return; + } + + float raw = hit.damageAmount; + if (float.IsNaN(raw) || float.IsInfinity(raw) || raw <= 0.01f) + return; + + int rawAmount = Mathf.Max(1, Mathf.RoundToInt(raw)); + Vector3 pos = HitPosition(enemy, hit); + if (!Claim(enemy, rawAmount, pos)) + return; + + if (part == null && allowLastPart && enemy.lastDamagedPart != null) + part = enemy.lastDamagedPart.Value; + + bool crit = IsCrit(part); + int shown = ShownDamage(raw, crit); + DamageTier.Apply(shown, out Color color, out float tierScale); + float punch = PunchFor(rawAmount, crit, type) * tierScale; + pos += new Vector3( + UnityEngine.Random.Range(-0.22f, 0.22f), + UnityEngine.Random.Range(0.05f, 0.28f), + UnityEngine.Random.Range(-0.22f, 0.22f)); + + DamageNumbersDisplay.Ensure(); + DamageNumbersDisplay.Spawn(pos, shown, color, punch, crit); + Trace("hit " + shown + " " + type + (crit ? " crit" : "") + " at " + pos); + } + + static bool IsYourHit(HitData hit) + { + if (OnlyYourDamage == null || !OnlyYourDamage.Value) + return true; + + PawnStatus owner = hit.HitOwner; + if (owner == null) + return true; + + PawnStatus local = LocalPawn(); + if (local == null) + return true; + + return owner.Pointer == local.Pointer; + } + + static PawnStatus LocalPawn() + { + if (_localPlayer == null) + _localPlayer = FindLocalPlayer(); + if (_localPlayer == null) + return null; + + try + { + return _localPlayer.PawnStatus; + } + catch (Exception) + { + _localPlayer = null; + return null; + } + } + + static SkopjePlayer FindLocalPlayer() + { + var players = UnityEngine.Object.FindObjectsOfType(); + if (players == null) + return null; + + for (int i = 0; i < players.Length; i++) + { + SkopjePlayer player = players[i]; + if (player != null && player.IsOwner) + return player; + } + + return null; + } + + static Vector3 HitPosition(EnemyControlAStar enemy, HitData hit) + { + Vector3 pos = hit.hitPosition; + if (pos.sqrMagnitude > 0.0001f) + return pos; + + pos = enemy.lastHitPosition; + if (pos.sqrMagnitude > 0.0001f) + return pos; + + if (enemy.transform != null) + return enemy.transform.position + Vector3.up * 1.4f; + return Vector3.up; + } + + static bool IsCrit(DamageablePart part) + { + // part.name goes through UnityEngine.Object and can access-violate on a + // networked part that is not a live Unity object. Weakspot fields are enough. + if (part == null) + return false; + + try + { + if (part.WeakspotType != WeakspotType.None) + return true; + return part.PartDamageModifier > 1.05f; + } + catch (Exception) + { + return false; + } + } + + // Real hits in this game are often 1, 2, or 3. Scale them up so the popup + // still tracks the hit, but reads like a chunky score. Crits are doubled. + static int ShownDamage(float raw, bool crit) + { + float scale = crit ? 200f : 100f; + float roll = UnityEngine.Random.Range(0.94f, 1.06f); + return Mathf.Max(1, Mathf.RoundToInt(raw * scale * roll)); + } + + static bool Claim(EnemyControlAStar enemy, int amount, Vector3 pos) + { + int id = enemy.GetInstanceID(); + int cell = (int)(pos.x * 8f) * 73856093 + ^ (int)(pos.y * 8f) * 19349663 + ^ (int)(pos.z * 8f) * 83492791; + int frame = Time.frameCount; + for (int i = 0; i < Recent; i++) + { + if (_recentFrame[i] < frame - 1) + continue; + if (_recentEnemy[i] == id && _recentAmount[i] == amount && _recentCell[i] == cell) + return false; + } + + int slot = _recentWrite++ % Recent; + if (_recentWrite < 0) + _recentWrite = 0; + _recentEnemy[slot] = id; + _recentAmount[slot] = amount; + _recentCell[slot] = cell; + _recentFrame[slot] = frame; + return true; + } + + static float PunchFor(int amount, bool crit, DamageType type) + { + float punch = 1f + Mathf.Clamp(Mathf.Log10(Mathf.Max(amount, 1)) * 0.14f, 0f, 0.5f); + if (crit) + punch *= 1.45f; + if (HasFlag(type, DamageType.Explosion)) + punch *= 1.2f; + return punch; + } + + static bool HasFlag(DamageType value, DamageType flag) + { + return ((int)value & (int)flag) != 0; + } + + static void Fail(Exception ex) + { + if (_errorLogs++ < 5) + LogSource.LogWarning("Damage number failed: " + ex.Message); + } + + static void Trace(string message) + { + if (_traceLogs++ < 8) + LogSource.LogInfo(message); + } + + static Il2CppSystem.Action ToIl2Cpp(System.Action action) + { + return DelegateSupport.ConvertDelegate(action); + } + + static Il2CppSystem.Action ToIl2Cpp(System.Action action) + { + return DelegateSupport.ConvertDelegate>(action); + } + } + + public class DamageNumbersDisplay : MonoBehaviour + { + const int Capacity = 48; + + public static DamageNumbersDisplay Instance { get; private set; } + + readonly Number[] _numbers = new Number[Capacity]; + GUIStyle _style; + Camera _camera; + float _nextCameraSearch; + + public DamageNumbersDisplay(IntPtr pointer) : base(pointer) + { + } + + public static void Ensure() + { + if (Instance != null) + return; + + var overlay = new GameObject("DamageNumbersDisplay"); + UnityEngine.Object.DontDestroyOnLoad(overlay); + overlay.AddComponent(); + } + + public static void DestroyHost() + { + if (Instance != null) + UnityEngine.Object.Destroy(Instance.gameObject); + } + + public static void Clear() + { + if (Instance == null) + return; + for (int i = 0; i < Instance._numbers.Length; i++) + Instance._numbers[i].Used = false; + } + + public static void Spawn(Vector3 worldPos, int amount, Color color, float punch, bool crit) + { + DamageNumbersDisplay display = Instance; + if (display == null) + return; + + float life = 0.8f; + if (DamageNumbersPlugin.Lifetime != null) + life = Mathf.Clamp(DamageNumbersPlugin.Lifetime.Value, 0.25f, 2.5f); + if (crit) + life *= 1.15f; + + int slot = display.FindSlot(); + display._numbers[slot] = new Number + { + Used = true, + Origin = worldPos, + Drift = new Vector3( + UnityEngine.Random.Range(-0.55f, 0.55f), + UnityEngine.Random.Range(crit ? 1.15f : 0.9f, crit ? 1.65f : 1.35f), + UnityEngine.Random.Range(-0.2f, 0.2f)), + Age = 0f, + Life = life, + Punch = punch, + Tilt = UnityEngine.Random.Range(crit ? -18f : -14f, crit ? 18f : 14f), + Amount = amount, + Color = color, + Text = crit ? "CRIT\n" + amount : amount.ToString() + }; + Measure(display._numbers[slot].Text, out display._numbers[slot].Lines, out display._numbers[slot].Longest); + } + + static void Measure(string text, out int lines, out int longest) + { + lines = 1; + longest = 0; + int run = 0; + for (int i = 0; i < text.Length; i++) + { + if (text[i] == '\n') + { + lines++; + if (run > longest) + longest = run; + run = 0; + } + else + { + run++; + } + } + + if (run > longest) + longest = run; + } + + int FindSlot() + { + int oldest = 0; + float oldestAge = -1f; + for (int i = 0; i < _numbers.Length; i++) + { + if (!_numbers[i].Used) + return i; + if (_numbers[i].Age > oldestAge) + { + oldestAge = _numbers[i].Age; + oldest = i; + } + } + + return oldest; + } + + void Awake() + { + Instance = this; + } + + void OnDestroy() + { + if (Instance == this) + Instance = null; + } + + void Update() + { + float step = Time.deltaTime; + for (int i = 0; i < _numbers.Length; i++) + { + if (!_numbers[i].Used) + continue; + _numbers[i].Age += step; + if (_numbers[i].Age >= _numbers[i].Life) + _numbers[i].Used = false; + } + } + + void OnGUI() + { + Camera cam = CameraNow(); + if (cam == null) + return; + + if (_style == null) + { + _style = new GUIStyle(GUI.skin.label) + { + alignment = TextAnchor.MiddleCenter, + fontStyle = FontStyle.Bold, + richText = false + }; + } + + float size = DamageNumbersPlugin.Size != null + ? Mathf.Clamp(DamageNumbersPlugin.Size.Value, 0.25f, 4f) + : 1f; + + for (int i = 0; i < _numbers.Length; i++) + { + if (_numbers[i].Used) + Draw(cam, _numbers[i], size); + } + } + + Camera CameraNow() + { + if (_camera != null && _camera.isActiveAndEnabled) + return _camera; + if (Time.unscaledTime < _nextCameraSearch) + return null; + + _nextCameraSearch = Time.unscaledTime + 0.5f; + _camera = Camera.main; + if (_camera == null) + _camera = UnityEngine.Object.FindObjectOfType(); + return _camera; + } + + void Draw(Camera cam, Number number, float size) + { + float t = Mathf.Clamp01(number.Age / number.Life); + float rise = 1f - (1f - t) * (1f - t); + Vector3 world = number.Origin + number.Drift * rise; + Vector3 screen = cam.WorldToScreenPoint(world); + if (screen.z <= 0.05f) + return; + if (screen.x < -60f || screen.y < -60f || screen.x > Screen.width + 60f || screen.y > Screen.height + 60f) + return; + + float dist = Vector3.Distance(cam.transform.position, world); + float perspective = Mathf.Clamp(8f / Mathf.Max(dist, 0.75f), 0.4f, 1.8f); + float pop = PopScale(t); + int font = Mathf.Clamp(Mathf.RoundToInt(36f * perspective * pop * number.Punch * size), 12, 140); + + float alpha = t < 0.62f ? 1f : 1f - (t - 0.62f) / 0.38f; + Color color = number.Color; + color.a *= alpha; + + float width = font * Mathf.Max(2, number.Longest) * 0.7f + 20f; + float height = font * number.Lines + 12f; + float x = screen.x - width * 0.5f; + float y = Screen.height - screen.y - height * 0.5f; + var rect = new Rect(x, y, width, height); + var pivot = new Vector2(screen.x, Screen.height - screen.y); + + Matrix4x4 matrix = GUI.matrix; + Color previous = GUI.color; + _style.fontSize = font; + GUIUtility.RotateAroundPivot(number.Tilt * (1f - t), pivot); + + float outline = Mathf.Max(1f, font / 16f); + GUI.color = new Color(0f, 0f, 0f, color.a * 0.92f); + GUI.Label(new Rect(rect.x - outline, rect.y, rect.width, rect.height), number.Text, _style); + GUI.Label(new Rect(rect.x + outline, rect.y, rect.width, rect.height), number.Text, _style); + GUI.Label(new Rect(rect.x, rect.y - outline, rect.width, rect.height), number.Text, _style); + GUI.Label(new Rect(rect.x, rect.y + outline, rect.width, rect.height), number.Text, _style); + GUI.color = color; + GUI.Label(rect, number.Text, _style); + + GUI.color = previous; + GUI.matrix = matrix; + } + + static float PopScale(float t) + { + if (t < 0.08f) + return Mathf.Lerp(0.35f, 1.4f, t / 0.08f); + if (t < 0.18f) + return Mathf.Lerp(1.4f, 1f, (t - 0.08f) / 0.1f); + return 1f; + } + + struct Number + { + public bool Used; + public Vector3 Origin; + public Vector3 Drift; + public float Age; + public float Life; + public float Punch; + public float Tilt; + public int Amount; + public int Lines; + public int Longest; + public Color Color; + public string Text; + } + } + + static class DamageTier + { + // Chosen once per hit. Draw only reads the stored color and punch. + static readonly Color White = new Color(1f, 1f, 1f, 1f); + static readonly Color LightYellow = new Color(1f, 0.96f, 0.55f, 1f); + static readonly Color LightOrange = new Color(1f, 0.74f, 0.38f, 1f); + static readonly Color Orange = new Color(1f, 0.48f, 0.08f, 1f); + + public static void Apply(int amount, out Color color, out float sizeScale) + { + if (amount >= 50) + { + color = Orange; + sizeScale = 1.15f; + return; + } + + sizeScale = 1f; + if (amount >= 40) + color = LightOrange; + else if (amount >= 25) + color = LightYellow; + else + color = White; + } + } +} diff --git a/DamageNumbers/DamageNumbersPlugin.csproj b/DamageNumbers/DamageNumbersPlugin.csproj new file mode 100644 index 0000000..22bc99d --- /dev/null +++ b/DamageNumbers/DamageNumbersPlugin.csproj @@ -0,0 +1,60 @@ + + + net6.0 + latest + disable + disable + true + Skopje.DamageNumbers + Skopje.DamageNumbers + true + D:\SteamLibrary\steamapps\common\Skopje83 + + + + + $(GameDir)\BepInEx\core\0Harmony.dll + false + + + $(GameDir)\BepInEx\core\BepInEx.Core.dll + false + + + $(GameDir)\BepInEx\core\BepInEx.Unity.IL2CPP.dll + false + + + $(GameDir)\BepInEx\core\Il2CppInterop.Runtime.dll + false + + + $(GameDir)\BepInEx\interop\Il2Cppmscorlib.dll + false + + + $(GameDir)\BepInEx\interop\SkopjeAssembly.dll + false + + + $(GameDir)\BepInEx\interop\FishNet.Runtime.dll + false + + + $(GameDir)\BepInEx\interop\UnityEngine.CoreModule.dll + false + + + $(GameDir)\BepInEx\interop\UnityEngine.IMGUIModule.dll + false + + + $(GameDir)\BepInEx\interop\UnityEngine.TextRenderingModule.dll + false + + + $(GameDir)\BepInEx\interop\Archon.SwissArmyLib.dll + false + + + diff --git a/DamageNumbers/bin/Release/net6.0/DamageNumbers.zip b/DamageNumbers/bin/Release/net6.0/DamageNumbers.zip new file mode 100644 index 0000000..94479b2 Binary files /dev/null and b/DamageNumbers/bin/Release/net6.0/DamageNumbers.zip differ diff --git a/DamageNumbers/bin/Release/net6.0/Skopje.DamageNumbers.deps.json b/DamageNumbers/bin/Release/net6.0/Skopje.DamageNumbers.deps.json new file mode 100644 index 0000000..bbb710d --- /dev/null +++ b/DamageNumbers/bin/Release/net6.0/Skopje.DamageNumbers.deps.json @@ -0,0 +1,23 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v6.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v6.0": { + "Skopje.DamageNumbers/1.0.0": { + "runtime": { + "Skopje.DamageNumbers.dll": {} + } + } + } + }, + "libraries": { + "Skopje.DamageNumbers/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + } + } +} \ No newline at end of file diff --git a/DamageNumbers/bin/Release/net6.0/Skopje.DamageNumbers.dll b/DamageNumbers/bin/Release/net6.0/Skopje.DamageNumbers.dll new file mode 100644 index 0000000..9574fba Binary files /dev/null and b/DamageNumbers/bin/Release/net6.0/Skopje.DamageNumbers.dll differ diff --git a/DamageNumbers/bin/Release/net6.0/Skopje.DamageNumbers.pdb b/DamageNumbers/bin/Release/net6.0/Skopje.DamageNumbers.pdb new file mode 100644 index 0000000..066284a Binary files /dev/null and b/DamageNumbers/bin/Release/net6.0/Skopje.DamageNumbers.pdb differ diff --git a/DamageNumbers/obj/DamageNumbersPlugin.csproj.nuget.dgspec.json b/DamageNumbers/obj/DamageNumbersPlugin.csproj.nuget.dgspec.json new file mode 100644 index 0000000..c59d6b0 --- /dev/null +++ b/DamageNumbers/obj/DamageNumbersPlugin.csproj.nuget.dgspec.json @@ -0,0 +1,85 @@ +{ + "format": 1, + "restore": { + "c:\\Users\\andre\\Desktop\\SkopjeMods\\DamageNumbers\\DamageNumbersPlugin.csproj": {} + }, + "projects": { + "c:\\Users\\andre\\Desktop\\SkopjeMods\\DamageNumbers\\DamageNumbersPlugin.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "c:\\Users\\andre\\Desktop\\SkopjeMods\\DamageNumbers\\DamageNumbersPlugin.csproj", + "projectName": "Skopje.DamageNumbers", + "projectPath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\DamageNumbers\\DamageNumbersPlugin.csproj", + "packagesPath": "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget", + "outputPath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\DamageNumbers\\obj\\", + "projectStyle": "PackageReference", + "configFilePaths": [ + "C:\\Users\\andre\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net6.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net6.0": { + "framework": "net6.0", + "targetAlias": "net6.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "10.0.300" + }, + "frameworks": { + "net6.0": { + "framework": "net6.0", + "targetAlias": "net6.0", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[6.0.36, 6.0.36]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[6.0.36, 6.0.36]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[6.0.36, 6.0.36]" + } + ], + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.301\\RuntimeIdentifierGraph.json" + } + } + } + } +} \ No newline at end of file diff --git a/DamageNumbers/obj/DamageNumbersPlugin.csproj.nuget.g.props b/DamageNumbers/obj/DamageNumbersPlugin.csproj.nuget.g.props new file mode 100644 index 0000000..ba0d2cb --- /dev/null +++ b/DamageNumbers/obj/DamageNumbersPlugin.csproj.nuget.g.props @@ -0,0 +1,15 @@ + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + $(UserProfile)\AppData\Local\Temp\cursor-sandbox-cache\a0404811fc6e51c4c5761fd11591789f\nuget + C:\Users\andre\AppData\Local\Temp\cursor-sandbox-cache\a0404811fc6e51c4c5761fd11591789f\nuget + PackageReference + 7.0.0 + + + + + \ No newline at end of file diff --git a/DamageNumbers/obj/DamageNumbersPlugin.csproj.nuget.g.targets b/DamageNumbers/obj/DamageNumbersPlugin.csproj.nuget.g.targets new file mode 100644 index 0000000..3dc06ef --- /dev/null +++ b/DamageNumbers/obj/DamageNumbersPlugin.csproj.nuget.g.targets @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/DamageNumbers/obj/Release/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs b/DamageNumbers/obj/Release/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs new file mode 100644 index 0000000..ed92695 --- /dev/null +++ b/DamageNumbers/obj/Release/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")] diff --git a/DamageNumbers/obj/Release/net6.0/DamageNumbersPlugin.AssemblyInfo.cs b/DamageNumbers/obj/Release/net6.0/DamageNumbersPlugin.AssemblyInfo.cs new file mode 100644 index 0000000..66d0f42 --- /dev/null +++ b/DamageNumbers/obj/Release/net6.0/DamageNumbersPlugin.AssemblyInfo.cs @@ -0,0 +1,22 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("Skopje.DamageNumbers")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] +[assembly: System.Reflection.AssemblyProductAttribute("Skopje.DamageNumbers")] +[assembly: System.Reflection.AssemblyTitleAttribute("Skopje.DamageNumbers")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/DamageNumbers/obj/Release/net6.0/DamageNumbersPlugin.AssemblyInfoInputs.cache b/DamageNumbers/obj/Release/net6.0/DamageNumbersPlugin.AssemblyInfoInputs.cache new file mode 100644 index 0000000..9954ebc --- /dev/null +++ b/DamageNumbers/obj/Release/net6.0/DamageNumbersPlugin.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +a6bbf0f8cbba65e2618b81c6321ac40b204cddd43585a4acfc7f7e5c36244fcc diff --git a/DamageNumbers/obj/Release/net6.0/DamageNumbersPlugin.GeneratedMSBuildEditorConfig.editorconfig b/DamageNumbers/obj/Release/net6.0/DamageNumbersPlugin.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..b6469cb --- /dev/null +++ b/DamageNumbers/obj/Release/net6.0/DamageNumbersPlugin.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,18 @@ +is_global = true +build_property.TargetFramework = net6.0 +build_property.TargetFrameworkIdentifier = .NETCoreApp +build_property.TargetFrameworkVersion = v6.0 +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property.EntryPointFilePath = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = Skopje.DamageNumbers +build_property.ProjectDir = c:\Users\andre\Desktop\SkopjeMods\DamageNumbers\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.EffectiveAnalysisLevelStyle = 6.0 +build_property.EnableCodeStyleSeverity = diff --git a/DamageNumbers/obj/Release/net6.0/DamageNumbersPlugin.assets.cache b/DamageNumbers/obj/Release/net6.0/DamageNumbersPlugin.assets.cache new file mode 100644 index 0000000..ead7fdb Binary files /dev/null and b/DamageNumbers/obj/Release/net6.0/DamageNumbersPlugin.assets.cache differ diff --git a/DamageNumbers/obj/Release/net6.0/DamageNumbersPlugin.csproj.AssemblyReference.cache b/DamageNumbers/obj/Release/net6.0/DamageNumbersPlugin.csproj.AssemblyReference.cache new file mode 100644 index 0000000..1a4a5d3 Binary files /dev/null and b/DamageNumbers/obj/Release/net6.0/DamageNumbersPlugin.csproj.AssemblyReference.cache differ diff --git a/DamageNumbers/obj/Release/net6.0/DamageNumbersPlugin.csproj.CoreCompileInputs.cache b/DamageNumbers/obj/Release/net6.0/DamageNumbersPlugin.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..6f9fa3d --- /dev/null +++ b/DamageNumbers/obj/Release/net6.0/DamageNumbersPlugin.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +86ccfeda65ab3141bba0482e04b1b5751f6561288b86aad71bf1a392c7e22381 diff --git a/DamageNumbers/obj/Release/net6.0/DamageNumbersPlugin.csproj.FileListAbsolute.txt b/DamageNumbers/obj/Release/net6.0/DamageNumbersPlugin.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..ef6a44c --- /dev/null +++ b/DamageNumbers/obj/Release/net6.0/DamageNumbersPlugin.csproj.FileListAbsolute.txt @@ -0,0 +1,12 @@ +c:\Users\andre\Desktop\SkopjeMods\DamageNumbers\obj\Release\net6.0\DamageNumbersPlugin.csproj.AssemblyReference.cache +c:\Users\andre\Desktop\SkopjeMods\DamageNumbers\obj\Release\net6.0\DamageNumbersPlugin.GeneratedMSBuildEditorConfig.editorconfig +c:\Users\andre\Desktop\SkopjeMods\DamageNumbers\obj\Release\net6.0\DamageNumbersPlugin.AssemblyInfoInputs.cache +c:\Users\andre\Desktop\SkopjeMods\DamageNumbers\obj\Release\net6.0\DamageNumbersPlugin.AssemblyInfo.cs +c:\Users\andre\Desktop\SkopjeMods\DamageNumbers\obj\Release\net6.0\DamageNumbersPlugin.csproj.CoreCompileInputs.cache +c:\Users\andre\Desktop\SkopjeMods\DamageNumbers\bin\Release\net6.0\Skopje.DamageNumbers.deps.json +c:\Users\andre\Desktop\SkopjeMods\DamageNumbers\bin\Release\net6.0\Skopje.DamageNumbers.dll +c:\Users\andre\Desktop\SkopjeMods\DamageNumbers\bin\Release\net6.0\Skopje.DamageNumbers.pdb +c:\Users\andre\Desktop\SkopjeMods\DamageNumbers\obj\Release\net6.0\Skopje.DamageNumbers.dll +c:\Users\andre\Desktop\SkopjeMods\DamageNumbers\obj\Release\net6.0\refint\Skopje.DamageNumbers.dll +c:\Users\andre\Desktop\SkopjeMods\DamageNumbers\obj\Release\net6.0\Skopje.DamageNumbers.pdb +c:\Users\andre\Desktop\SkopjeMods\DamageNumbers\obj\Release\net6.0\ref\Skopje.DamageNumbers.dll diff --git a/DamageNumbers/obj/Release/net6.0/Skopje.DamageNumbers.dll b/DamageNumbers/obj/Release/net6.0/Skopje.DamageNumbers.dll new file mode 100644 index 0000000..9574fba Binary files /dev/null and b/DamageNumbers/obj/Release/net6.0/Skopje.DamageNumbers.dll differ diff --git a/DamageNumbers/obj/Release/net6.0/Skopje.DamageNumbers.pdb b/DamageNumbers/obj/Release/net6.0/Skopje.DamageNumbers.pdb new file mode 100644 index 0000000..066284a Binary files /dev/null and b/DamageNumbers/obj/Release/net6.0/Skopje.DamageNumbers.pdb differ diff --git a/DamageNumbers/obj/Release/net6.0/ref/Skopje.DamageNumbers.dll b/DamageNumbers/obj/Release/net6.0/ref/Skopje.DamageNumbers.dll new file mode 100644 index 0000000..14e2ff6 Binary files /dev/null and b/DamageNumbers/obj/Release/net6.0/ref/Skopje.DamageNumbers.dll differ diff --git a/DamageNumbers/obj/Release/net6.0/refint/Skopje.DamageNumbers.dll b/DamageNumbers/obj/Release/net6.0/refint/Skopje.DamageNumbers.dll new file mode 100644 index 0000000..14e2ff6 Binary files /dev/null and b/DamageNumbers/obj/Release/net6.0/refint/Skopje.DamageNumbers.dll differ diff --git a/DamageNumbers/obj/project.assets.json b/DamageNumbers/obj/project.assets.json new file mode 100644 index 0000000..4c91dd0 --- /dev/null +++ b/DamageNumbers/obj/project.assets.json @@ -0,0 +1,90 @@ +{ + "version": 4, + "targets": { + "net6.0": {} + }, + "libraries": {}, + "projectFileDependencyGroups": { + "net6.0": [] + }, + "packageFolders": { + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget": {} + }, + "project": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "c:\\Users\\andre\\Desktop\\SkopjeMods\\DamageNumbers\\DamageNumbersPlugin.csproj", + "projectName": "Skopje.DamageNumbers", + "projectPath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\DamageNumbers\\DamageNumbersPlugin.csproj", + "packagesPath": "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget", + "outputPath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\DamageNumbers\\obj\\", + "projectStyle": "PackageReference", + "configFilePaths": [ + "C:\\Users\\andre\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net6.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net6.0": { + "framework": "net6.0", + "targetAlias": "net6.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "10.0.300" + }, + "frameworks": { + "net6.0": { + "framework": "net6.0", + "targetAlias": "net6.0", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[6.0.36, 6.0.36]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[6.0.36, 6.0.36]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[6.0.36, 6.0.36]" + } + ], + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.301\\RuntimeIdentifierGraph.json" + } + } + } +} \ No newline at end of file diff --git a/DamageNumbers/obj/project.nuget.cache b/DamageNumbers/obj/project.nuget.cache new file mode 100644 index 0000000..462d7d6 --- /dev/null +++ b/DamageNumbers/obj/project.nuget.cache @@ -0,0 +1,12 @@ +{ + "version": 2, + "dgSpecHash": "KG8aXDVuUAU=", + "success": true, + "projectFilePath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\DamageNumbers\\DamageNumbersPlugin.csproj", + "expectedPackageFiles": [ + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\microsoft.netcore.app.ref\\6.0.36\\microsoft.netcore.app.ref.6.0.36.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\microsoft.windowsdesktop.app.ref\\6.0.36\\microsoft.windowsdesktop.app.ref.6.0.36.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\microsoft.aspnetcore.app.ref\\6.0.36\\microsoft.aspnetcore.app.ref.6.0.36.nupkg.sha512" + ], + "logs": [] +} \ No newline at end of file diff --git a/Horde/HordeConfig.cs b/Horde/HordeConfig.cs new file mode 100644 index 0000000..f5e1853 --- /dev/null +++ b/Horde/HordeConfig.cs @@ -0,0 +1,262 @@ +using System; +using System.Collections.Generic; +using BepInEx.Configuration; + +namespace Skopje.Horde +{ + // One row here becomes a setting on Global and on every zone. + // Zone values are used only when that zone's Override is true. + static class HordeConfig + { + internal const string PopulationKey = "PopulationMultiplier"; + internal const string StatKey = "StatMultiplier"; + + sealed class FieldDef + { + public string Key; + public bool IsFloat; + public int IntDefault = 0; + public float FloatDefault; + public int IntMin = 0; + public int IntMax = 0; + public float FloatMin; + public float FloatMax; + } + + sealed class District + { + public string Name; + public string[] Zones; + + public District(string name, params string[] zones) + { + Name = name; + Zones = zones; + } + } + + internal sealed class ZoneSettings + { + public string District; + public string Name; + public ConfigEntry Override; + public Dictionary> Ints = new Dictionary>(); + public Dictionary> Floats = new Dictionary>(); + } + + const string Explanation = + "Global multipliers apply to every zone whose Override is false.\n" + + "PopulationMultiplier multiplies that zone's enemy count, remaining kills, and alive cap. Decimal, range 0.01 to 64, default 4.\n" + + "StatMultiplier multiplies health and damage of enemies that zone spawns. Range 0.01 to 10, default 0.5.\n" + + "Set a zone's Override to true to use that zone's own PopulationMultiplier and StatMultiplier instead of Global."; + + static readonly FieldDef[] Fields = + { + new FieldDef + { + Key = PopulationKey, + IsFloat = true, + FloatDefault = 4f, + FloatMin = 0.01f, + FloatMax = 64f, + }, + new FieldDef + { + Key = StatKey, + IsFloat = true, + FloatDefault = 0.5f, + FloatMin = 0.01f, + FloatMax = 10f, + }, + }; + + // Neighborhoods from the game's zone table, grouped into the district that owns them. + static readonly District[] Districts = + { + new District("Metalsky", + "Kale", + "Chair - West", + "Chair - East", + "Chair", + "Zhelezara", + "Avtokomanda", + "Triangla"), + new District("Vesna", + "Vesna", + "Karposh", + "Kozle", + "Debar Maalo", + "Taftalidze", + "Treska", + "Stadium"), + new District("Teofan", + "Teofan", + "Ostrovo", + "Michurin", + "Kisela Voda", + "Kisela Voda - East", + "Crniche", + "Aerodrom", + "Sandanski"), + new District("Eva", + "Eva"), + new District("Ana", + "Ana", + "UKIM", + "Kapishtec", + "Gradski Dzid"), + }; + + static readonly Dictionary> GlobalInts = new Dictionary>(); + static readonly Dictionary> GlobalFloats = new Dictionary>(); + static readonly Dictionary Zones = new Dictionary(StringComparer.OrdinalIgnoreCase); + + public static float GlobalPopulation + { + get { return GlobalFloats[PopulationKey].Value; } + } + + public static float GlobalStat + { + get { return GlobalFloats[StatKey].Value; } + } + + public static void Bind(ConfigFile config) + { + GlobalInts.Clear(); + GlobalFloats.Clear(); + Zones.Clear(); + + for (int i = 0; i < Fields.Length; i++) + BindField(config, "Global", Fields[i], null, true); + + for (int d = 0; d < Districts.Length; d++) + { + District district = Districts[d]; + for (int z = 0; z < district.Zones.Length; z++) + BindZone(config, district.Name, district.Zones[z]); + } + } + + public static float Population(SpawnZone zone) + { + return FloatSetting(zone, PopulationKey); + } + + public static float Stat(SpawnZone zone) + { + return FloatSetting(zone, StatKey); + } + + // Shared alive budget has to cover the largest multiplier actually in use. + public static float BudgetPopulation() + { + float budget = GlobalPopulation; + foreach (KeyValuePair pair in Zones) + { + ZoneSettings zone = pair.Value; + if (!zone.Override.Value) + continue; + + float population = zone.Floats[PopulationKey].Value; + if (population > budget) + budget = population; + } + + return budget < 0.01f ? 0.01f : budget; + } + + public static void CollectStats(List into) + { + into.Clear(); + AddStat(into, GlobalStat); + foreach (KeyValuePair pair in Zones) + { + ZoneSettings zone = pair.Value; + if (zone.Override.Value) + AddStat(into, zone.Floats[StatKey].Value); + } + } + + public static int IntSetting(SpawnZone zone, string key) + { + ZoneSettings settings; + if (TryZone(zone, out settings) && settings.Override.Value) + return settings.Ints[key].Value; + return GlobalInts[key].Value; + } + + public static float FloatSetting(SpawnZone zone, string key) + { + ZoneSettings settings; + if (TryZone(zone, out settings) && settings.Override.Value) + return settings.Floats[key].Value; + return GlobalFloats[key].Value; + } + + public static bool TryZone(SpawnZone zone, out ZoneSettings settings) + { + settings = null; + if (zone == null) + return false; + + string name = zone.ZoneName; + if (string.IsNullOrEmpty(name)) + return false; + + return Zones.TryGetValue(name.Trim(), out settings); + } + + static void BindZone(ConfigFile config, string district, string zone) + { + string section = district + "." + zone; + var settings = new ZoneSettings + { + District = district, + Name = zone, + Override = config.Bind(section, "Override", false, (string)null), + }; + + for (int i = 0; i < Fields.Length; i++) + BindField(config, section, Fields[i], settings, false); + + Zones[zone] = settings; + } + + static void BindField(ConfigFile config, string section, FieldDef field, ZoneSettings zone, bool global) + { + // The explanation is written once, above the first global setting. + string description = global && field.Key == PopulationKey ? Explanation : null; + ConfigDescription configDescription = field.IsFloat + ? new ConfigDescription(description, new AcceptableValueRange(field.FloatMin, field.FloatMax)) + : new ConfigDescription(description, new AcceptableValueRange(field.IntMin, field.IntMax)); + + if (!field.IsFloat) + { + ConfigEntry entry = config.Bind(section, field.Key, field.IntDefault, configDescription); + if (zone == null) + GlobalInts[field.Key] = entry; + else + zone.Ints[field.Key] = entry; + return; + } + + ConfigEntry floating = config.Bind(section, field.Key, field.FloatDefault, configDescription); + if (zone == null) + GlobalFloats[field.Key] = floating; + else + zone.Floats[field.Key] = floating; + } + + static void AddStat(List into, float value) + { + for (int i = 0; i < into.Count; i++) + { + if (Math.Abs(into[i] - value) < 0.0001f) + return; + } + + into.Add(value); + } + } +} diff --git a/Horde/HordePlugin.cs b/Horde/HordePlugin.cs new file mode 100644 index 0000000..0f05951 --- /dev/null +++ b/Horde/HordePlugin.cs @@ -0,0 +1,484 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using BepInEx; +using BepInEx.Logging; +using BepInEx.Unity.IL2CPP; +using FishNet.Object.Synchronizing; +using HarmonyLib; +using Il2CppInterop.Runtime.InteropTypes.Arrays; +using UnityEngine; + +namespace Skopje.Horde +{ + [BepInPlugin(PluginGuid, PluginName, PluginVersion)] + public class HordePlugin : BasePlugin + { + public const string PluginGuid = "com.skopje.horde"; + public const string PluginName = "Skopje Horde"; + public const string PluginVersion = "1.0.0"; + + internal static ManualLogSource LogSource; + + static Harmony _harmony; + + public override void Load() + { + LogSource = Log; + HordeConfig.Bind(Config); + _harmony = new Harmony(PluginGuid); + + Patch(AccessTools.Method(typeof(SpawnSystem), nameof(SpawnSystem.Awake)), nameof(HordePatches.AfterSpawnSystemAwake), null); + Patch(AccessTools.Method(typeof(SpawnSystem), nameof(SpawnSystem.OnStartServer)), nameof(HordePatches.AfterSpawnSystemReady), null); + Patch(AccessTools.Method(typeof(SpawnZone), nameof(SpawnZone.OnStartServer)), nameof(HordePatches.AfterZoneServerStart), nameof(HordePatches.BeforeZoneServerStart)); + Patch(AccessTools.Method(typeof(SpawnZone), nameof(SpawnZone.ResetZone)), null, nameof(HordePatches.BeforeZoneServerStart)); + Patch(AccessTools.Method(typeof(SpawnZone), "get_EnemiesLeft"), nameof(HordePatches.AfterReadEnemiesLeft), null); + Patch(AccessTools.Method(typeof(SpawnZone), "set_EnemiesLeft"), null, nameof(HordePatches.BeforeWriteEnemiesLeft)); + Patch(AccessTools.Method(typeof(RunSaveManager), "SaveSpawnZones"), nameof(HordePatches.AfterSaveZones), nameof(HordePatches.BeforeSaveZones)); + Patch(AccessTools.Method(typeof(RunSaveManager), "LoadSpawnZones"), nameof(HordePatches.AfterLoadZones), nameof(HordePatches.BeforeLoadZones)); + Patch(AccessTools.Method(typeof(EnemyControlAStar), nameof(EnemyControlAStar.OnStartServer)), nameof(HordePatches.AfterEnemyServerStart), null); + Patch(AccessTools.Method(typeof(EnemyControlAStar), nameof(EnemyControlAStar.OnStartClient)), nameof(HordePatches.AfterEnemyClientStart), null); + Patch(AccessTools.Method(typeof(EnemyControlAStar), nameof(EnemyControlAStar.OnStopServer)), nameof(HordePatches.AfterEnemyServerStop), null); + Patch(AccessTools.Method(typeof(PawnStatus), "get_Damage"), nameof(HordePatches.AfterReadDamage), null); + + LogSource.LogInfo($"{PluginName} {PluginVersion} loaded. Global population x{HordeConfig.GlobalPopulation}, stats {HordeConfig.GlobalStat:0%}. Config: {Config.ConfigFilePath}"); + } + + public override bool Unload() + { + if (_harmony != null) + _harmony.UnpatchSelf(); + HordePatches.Clear(); + return true; + } + + static void Patch(MethodInfo method, string postfix, string prefix) + { + if (method == null) + { + LogSource.LogWarning("Horde hook was not found: " + (postfix ?? prefix)); + return; + } + + _harmony.Patch( + method, + prefix: prefix == null ? null : new HarmonyMethod(typeof(HordePatches), prefix), + postfix: postfix == null ? null : new HarmonyMethod(typeof(HordePatches), postfix)); + } + } + + static class HordePatches + { + sealed class CapState + { + public float Vanilla; + public float Applied; + public bool Captured; + } + + static readonly Dictionary _vanillaInitial = new Dictionary(); + static readonly Dictionary _appliedPopulation = new Dictionary(); + static readonly Dictionary _loadedLeft = new Dictionary(); + static readonly Dictionary _vanillaBudget = new Dictionary(); + static readonly Dictionary _trackedZones = new Dictionary(); + static readonly Dictionary _caps = new Dictionary(); + static readonly HashSet _healthScaled = new HashSet(); + static readonly Dictionary _pawnStats = new Dictionary(); + static readonly Dictionary _pawnByEnemy = new Dictionary(); + static readonly HashSet _unknownZones = new HashSet(); + static readonly List _statCandidates = new List(); + + static float _budgetMultiplier; + static int _loading; + static bool _saving; + static bool _applying; + + public static void Clear() + { + _vanillaInitial.Clear(); + _appliedPopulation.Clear(); + _loadedLeft.Clear(); + _vanillaBudget.Clear(); + _trackedZones.Clear(); + _caps.Clear(); + _healthScaled.Clear(); + _pawnStats.Clear(); + _pawnByEnemy.Clear(); + _unknownZones.Clear(); + _budgetMultiplier = 0; + _loading = 0; + _saving = false; + _applying = false; + } + + public static void AfterSpawnSystemAwake(SpawnSystem __instance) + { + ScaleBudget(__instance); + } + + public static void AfterSpawnSystemReady(SpawnSystem __instance) + { + ScaleBudget(__instance); + } + + public static void BeforeZoneServerStart(SpawnZone __instance) + { + ScaleQuota(__instance); + } + + public static void AfterZoneServerStart(SpawnZone __instance) + { + if (__instance == null) + return; + + int id = __instance.GetInstanceID(); + if (!_loadedLeft.Remove(id, out int left) || __instance.EnemiesLeft == left) + return; + + _applying = true; + try + { + __instance.EnemiesLeft = left; + } + finally + { + _applying = false; + } + } + + public static void BeforeSaveZones() + { + _saving = true; + } + + public static void AfterSaveZones() + { + _saving = false; + } + + public static void BeforeLoadZones() + { + _loading++; + } + + public static void AfterLoadZones() + { + if (_loading > 0) + _loading--; + + foreach (KeyValuePair pair in _trackedZones) + { + if (pair.Value != null) + ApplyCap(pair.Value); + } + } + + // Saves store the vanilla kill count. While a save is reading the property, report that count. + public static void AfterReadEnemiesLeft(SpawnZone __instance, ref int __result) + { + if (!_saving || __instance == null) + return; + + int id = __instance.GetInstanceID(); + if (!_vanillaInitial.ContainsKey(id)) + return; + + float population = AppliedPopulation(__instance); + if (population <= 0f) + return; + + __result = Mathf.CeilToInt(__result / population); + } + + // Loaded kills are the vanilla remaining count. Stretch them to the horde quota. + public static void BeforeWriteEnemiesLeft(SpawnZone __instance, [HarmonyArgument(0)] ref int value) + { + if (_applying || _loading <= 0) + return; + + value = ScaleCount(value, AppliedPopulation(__instance)); + if (__instance != null) + _loadedLeft[__instance.GetInstanceID()] = value; + } + + public static void AfterEnemyServerStart(EnemyControlAStar __instance) + { + try + { + Weaken(__instance); + } + catch (Exception ex) + { + HordePlugin.LogSource.LogWarning("Horde could not weaken a zone enemy: " + ex.Message); + } + } + + public static void AfterEnemyClientStart(EnemyControlAStar __instance) + { + try + { + MatchClientHealth(__instance); + } + catch (Exception ex) + { + HordePlugin.LogSource.LogWarning("Horde could not match client health: " + ex.Message); + } + } + + public static void AfterEnemyServerStop(EnemyControlAStar __instance) + { + if (__instance == null) + return; + + int enemyId = __instance.GetInstanceID(); + _healthScaled.Remove(enemyId); + if (_pawnByEnemy.TryGetValue(enemyId, out int pawnId)) + { + _pawnStats.Remove(pawnId); + _pawnByEnemy.Remove(enemyId); + } + } + + public static void AfterReadDamage(PawnStatus __instance, ref float __result) + { + if (__instance == null) + return; + + if (_pawnStats.TryGetValue(__instance.GetInstanceID(), out float multiplier)) + __result *= multiplier; + } + + static void ScaleBudget(SpawnSystem system) + { + if (system == null) + return; + + int id = system.GetInstanceID(); + if (!_vanillaBudget.TryGetValue(id, out int vanilla)) + { + int cap = system.EnemiesCap; + if (cap <= 0) + return; + + vanilla = cap; + _vanillaBudget[id] = vanilla; + } + + float budget = HordeConfig.BudgetPopulation(); + if (budget <= 0f) + budget = 1f; + + _budgetMultiplier = budget; + int scaled = ScaleCount(vanilla, budget); + if (system.EnemiesCap != scaled) + { + system.EnemiesCap = scaled; + HordePlugin.LogSource.LogInfo($"Horde enemy cap {vanilla} -> {scaled}."); + } + + foreach (KeyValuePair pair in _trackedZones) + { + if (pair.Value != null) + ApplyCap(pair.Value); + } + } + + static void ScaleQuota(SpawnZone zone) + { + if (zone == null) + return; + + int id = zone.GetInstanceID(); + _trackedZones[id] = zone; + NoteZone(zone); + + if (!_vanillaInitial.TryGetValue(id, out int vanilla)) + { + vanilla = zone.InitialEnemies; + _vanillaInitial[id] = vanilla; + } + + float population = HordeConfig.Population(zone); + if (population <= 0f) + population = 1f; + + _appliedPopulation[id] = population; + int scaled = ScaleCount(vanilla, population); + if (zone.InitialEnemies != scaled) + zone.InitialEnemies = scaled; + + ApplyCap(zone); + } + + static float AppliedPopulation(SpawnZone zone) + { + if (zone != null && _appliedPopulation.TryGetValue(zone.GetInstanceID(), out float applied) && applied > 0f) + return applied; + + float population = HordeConfig.Population(zone); + return population <= 0f ? 1f : population; + } + + static int ScaleCount(int count, float multiplier) + { + if (count <= 0 || multiplier <= 0f) + return 0; + + return Mathf.Max(0, Mathf.RoundToInt(count * multiplier)); + } + + // The shared cap is one number. A zone's own share is its multiplier over that shared budget. + static void ApplyCap(SpawnZone zone) + { + float population = HordeConfig.Population(zone); + if (population <= 0f) + population = 1f; + + float budget = _budgetMultiplier > 0f ? _budgetMultiplier : HordeConfig.BudgetPopulation(); + if (budget <= 0f) + budget = 1f; + + int id = zone.GetInstanceID(); + if (!_caps.TryGetValue(id, out CapState state)) + { + state = new CapState(); + _caps[id] = state; + } + + float current = zone.CapMultiplier; + if (!state.Captured) + { + state.Vanilla = current; + state.Captured = true; + } + else if (Mathf.Abs(current - state.Applied) > 0.0001f) + { + state.Vanilla = current; + } + + float next = state.Vanilla * population / budget; + state.Applied = next; + if (Mathf.Abs(current - next) > 0.0001f) + zone.CapMultiplier = next; + } + + static void NoteZone(SpawnZone zone) + { + if (HordeConfig.TryZone(zone, out _)) + return; + + string name = zone.ZoneName; + if (string.IsNullOrEmpty(name) || !_unknownZones.Add(name)) + return; + + HordePlugin.LogSource.LogInfo("Horde has no config entry for zone '" + name + "'. Using global multipliers."); + } + + static void Weaken(EnemyControlAStar enemy) + { + if (enemy == null || enemy.SpawnZone == null) + return; + + PawnStatus status = enemy.PawnStatus; + if (status == null) + return; + + int enemyId = enemy.GetInstanceID(); + if (!_healthScaled.Add(enemyId)) + return; + + float stat = HordeConfig.Stat(enemy.SpawnZone); + if (Mathf.Abs(stat - 1f) < 0.0001f) + { + _healthScaled.Remove(enemyId); + return; + } + + status.InitialHealth *= stat; + + SyncVar health = status.Health; + if (health != null) + health.Value *= stat; + + ScaleParts(enemy.damageableParts, stat); + + int pawnId = status.GetInstanceID(); + _pawnStats[pawnId] = stat; + _pawnByEnemy[enemyId] = pawnId; + } + + // The zone reference is not networked. A client sees the replicated health already + // halved and has to lower the local max so the bar still starts full. + static void MatchClientHealth(EnemyControlAStar enemy) + { + if (enemy == null) + return; + + int enemyId = enemy.GetInstanceID(); + if (_healthScaled.Contains(enemyId)) + return; + + PawnStatus status = enemy.PawnStatus; + if (status == null) + return; + + float stat; + if (enemy.SpawnZone != null) + { + stat = HordeConfig.Stat(enemy.SpawnZone); + } + else + { + SyncVar health = status.Health; + float initial = status.InitialHealth; + if (health == null || initial <= 1f || !TryMatchStat(health.Value, initial, out stat)) + return; + } + + if (Mathf.Abs(stat - 1f) < 0.0001f) + return; + + _healthScaled.Add(enemyId); + status.InitialHealth *= stat; + } + + static bool TryMatchStat(float health, float initial, out float multiplier) + { + multiplier = 1f; + HordeConfig.CollectStats(_statCandidates); + float best = 0.05f; + bool found = false; + for (int i = 0; i < _statCandidates.Count; i++) + { + float candidate = _statCandidates[i]; + float delta = Mathf.Abs(health - initial * candidate); + if (delta > best) + continue; + + best = delta; + multiplier = candidate; + found = true; + } + + return found; + } + + static void ScaleParts(Il2CppReferenceArray parts, float stat) + { + if (parts == null) + return; + + for (int i = 0; i < parts.Length; i++) + { + DamageablePart part = parts[i]; + if (part == null || part.MaxHealth <= 0f) + continue; + + part.MaxHealth *= stat; + SyncVar current = part.CurrentHealth; + if (current != null) + current.Value *= stat; + } + } + } +} diff --git a/Horde/HordePlugin.csproj b/Horde/HordePlugin.csproj new file mode 100644 index 0000000..9171c9f --- /dev/null +++ b/Horde/HordePlugin.csproj @@ -0,0 +1,52 @@ + + + net6.0 + latest + disable + disable + true + Skopje.Horde + Skopje.Horde + true + D:\SteamLibrary\steamapps\common\Skopje83 + + + + + $(GameDir)\BepInEx\core\0Harmony.dll + false + + + $(GameDir)\BepInEx\core\BepInEx.Core.dll + false + + + $(GameDir)\BepInEx\core\BepInEx.Unity.IL2CPP.dll + false + + + $(GameDir)\BepInEx\core\Il2CppInterop.Runtime.dll + false + + + $(GameDir)\BepInEx\interop\Il2Cppmscorlib.dll + false + + + $(GameDir)\BepInEx\interop\SkopjeAssembly.dll + false + + + $(GameDir)\BepInEx\interop\FishNet.Runtime.dll + false + + + $(GameDir)\BepInEx\interop\UnityEngine.CoreModule.dll + false + + + $(GameDir)\BepInEx\interop\Archon.SwissArmyLib.dll + false + + + diff --git a/Horde/bin/Release/net6.0/Skopje.Horde.deps.json b/Horde/bin/Release/net6.0/Skopje.Horde.deps.json new file mode 100644 index 0000000..9249d28 --- /dev/null +++ b/Horde/bin/Release/net6.0/Skopje.Horde.deps.json @@ -0,0 +1,23 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v6.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v6.0": { + "Skopje.Horde/1.0.0": { + "runtime": { + "Skopje.Horde.dll": {} + } + } + } + }, + "libraries": { + "Skopje.Horde/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + } + } +} \ No newline at end of file diff --git a/Horde/bin/Release/net6.0/Skopje.Horde.dll b/Horde/bin/Release/net6.0/Skopje.Horde.dll new file mode 100644 index 0000000..60d1004 Binary files /dev/null and b/Horde/bin/Release/net6.0/Skopje.Horde.dll differ diff --git a/Horde/bin/Release/net6.0/Skopje.Horde.pdb b/Horde/bin/Release/net6.0/Skopje.Horde.pdb new file mode 100644 index 0000000..0476fa5 Binary files /dev/null and b/Horde/bin/Release/net6.0/Skopje.Horde.pdb differ diff --git a/Horde/bin/Release/net6.0/com.skopje.horde.cfg b/Horde/bin/Release/net6.0/com.skopje.horde.cfg new file mode 100644 index 0000000..05a00fd --- /dev/null +++ b/Horde/bin/Release/net6.0/com.skopje.horde.cfg @@ -0,0 +1,230 @@ +## Settings file was created by plugin Skopje Horde v1.0.0 +## Plugin GUID: com.skopje.horde +## +## Global multipliers apply to every zone whose Override is false. +## PopulationMultiplier multiplies that zone's enemy count, remaining kills, and alive cap. Decimal, range 0.01 to 64, default 4. +## StatMultiplier multiplies health and damage of enemies that zone spawns. Range 0.01 to 10, default 0.5. +## Set a zone's Override to true to use that zone's own PopulationMultiplier and StatMultiplier instead of Global. + +[Global] + +PopulationMultiplier = 4 + +StatMultiplier = 0.5 + +[Metalsky.Kale] + +Override = false + +PopulationMultiplier = 4 + +StatMultiplier = 0.5 + +[Metalsky.Chair - West] + +Override = false + +PopulationMultiplier = 4 + +StatMultiplier = 0.5 + +[Metalsky.Chair - East] + +Override = false + +PopulationMultiplier = 4 + +StatMultiplier = 0.5 + +[Metalsky.Chair] + +Override = false + +PopulationMultiplier = 4 + +StatMultiplier = 0.5 + +[Metalsky.Zhelezara] + +Override = false + +PopulationMultiplier = 4 + +StatMultiplier = 0.5 + +[Metalsky.Avtokomanda] + +Override = false + +PopulationMultiplier = 4 + +StatMultiplier = 0.5 + +[Metalsky.Triangla] + +Override = false + +PopulationMultiplier = 4 + +StatMultiplier = 0.5 + +[Vesna.Vesna] + +Override = false + +PopulationMultiplier = 4 + +StatMultiplier = 0.5 + +[Vesna.Karposh] + +Override = false + +PopulationMultiplier = 4 + +StatMultiplier = 0.5 + +[Vesna.Kozle] + +Override = false + +PopulationMultiplier = 4 + +StatMultiplier = 0.5 + +[Vesna.Debar Maalo] + +Override = false + +PopulationMultiplier = 4 + +StatMultiplier = 0.5 + +[Vesna.Taftalidze] + +Override = false + +PopulationMultiplier = 4 + +StatMultiplier = 0.5 + +[Vesna.Treska] + +Override = false + +PopulationMultiplier = 4 + +StatMultiplier = 0.5 + +[Vesna.Stadium] + +Override = false + +PopulationMultiplier = 4 + +StatMultiplier = 0.5 + +[Teofan.Teofan] + +Override = false + +PopulationMultiplier = 4 + +StatMultiplier = 0.5 + +[Teofan.Ostrovo] + +Override = false + +PopulationMultiplier = 4 + +StatMultiplier = 0.5 + +[Teofan.Michurin] + +Override = false + +PopulationMultiplier = 4 + +StatMultiplier = 0.5 + +[Teofan.Kisela Voda] + +Override = false + +PopulationMultiplier = 4 + +StatMultiplier = 0.5 + +[Teofan.Kisela Voda - East] + +Override = false + +PopulationMultiplier = 4 + +StatMultiplier = 0.5 + +[Teofan.Crniche] + +Override = false + +PopulationMultiplier = 4 + +StatMultiplier = 0.5 + +[Teofan.Aerodrom] + +Override = false + +PopulationMultiplier = 4 + +StatMultiplier = 0.5 + +[Teofan.Sandanski] + +Override = false + +PopulationMultiplier = 4 + +StatMultiplier = 0.5 + +[Eva.Eva] + +Override = true + +PopulationMultiplier = 1 + +StatMultiplier = 1 + +[Ana.Ana] + +Override = false + +PopulationMultiplier = 4 + +StatMultiplier = 0.5 + +[Ana.UKIM] + +Override = false + +PopulationMultiplier = 4 + +StatMultiplier = 0.5 + +[Ana.Kapishtec] + +Override = false + +PopulationMultiplier = 4 + +StatMultiplier = 0.5 + +[Ana.Gradski Dzid] + +Override = false + +PopulationMultiplier = 4 + +StatMultiplier = 0.5 + diff --git a/Horde/obj/HordePlugin.csproj.nuget.dgspec.json b/Horde/obj/HordePlugin.csproj.nuget.dgspec.json new file mode 100644 index 0000000..645d04e --- /dev/null +++ b/Horde/obj/HordePlugin.csproj.nuget.dgspec.json @@ -0,0 +1,85 @@ +{ + "format": 1, + "restore": { + "c:\\Users\\andre\\Desktop\\SkopjeMods\\Horde\\HordePlugin.csproj": {} + }, + "projects": { + "c:\\Users\\andre\\Desktop\\SkopjeMods\\Horde\\HordePlugin.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "c:\\Users\\andre\\Desktop\\SkopjeMods\\Horde\\HordePlugin.csproj", + "projectName": "Skopje.Horde", + "projectPath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\Horde\\HordePlugin.csproj", + "packagesPath": "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget", + "outputPath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\Horde\\obj\\", + "projectStyle": "PackageReference", + "configFilePaths": [ + "C:\\Users\\andre\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net6.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net6.0": { + "framework": "net6.0", + "targetAlias": "net6.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "10.0.300" + }, + "frameworks": { + "net6.0": { + "framework": "net6.0", + "targetAlias": "net6.0", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[6.0.36, 6.0.36]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[6.0.36, 6.0.36]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[6.0.36, 6.0.36]" + } + ], + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.301\\RuntimeIdentifierGraph.json" + } + } + } + } +} \ No newline at end of file diff --git a/Horde/obj/HordePlugin.csproj.nuget.g.props b/Horde/obj/HordePlugin.csproj.nuget.g.props new file mode 100644 index 0000000..ba0d2cb --- /dev/null +++ b/Horde/obj/HordePlugin.csproj.nuget.g.props @@ -0,0 +1,15 @@ + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + $(UserProfile)\AppData\Local\Temp\cursor-sandbox-cache\a0404811fc6e51c4c5761fd11591789f\nuget + C:\Users\andre\AppData\Local\Temp\cursor-sandbox-cache\a0404811fc6e51c4c5761fd11591789f\nuget + PackageReference + 7.0.0 + + + + + \ No newline at end of file diff --git a/Horde/obj/HordePlugin.csproj.nuget.g.targets b/Horde/obj/HordePlugin.csproj.nuget.g.targets new file mode 100644 index 0000000..3dc06ef --- /dev/null +++ b/Horde/obj/HordePlugin.csproj.nuget.g.targets @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/Horde/obj/Release/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs b/Horde/obj/Release/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs new file mode 100644 index 0000000..ed92695 --- /dev/null +++ b/Horde/obj/Release/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")] diff --git a/Horde/obj/Release/net6.0/HordePlugin.AssemblyInfo.cs b/Horde/obj/Release/net6.0/HordePlugin.AssemblyInfo.cs new file mode 100644 index 0000000..6bff05f --- /dev/null +++ b/Horde/obj/Release/net6.0/HordePlugin.AssemblyInfo.cs @@ -0,0 +1,22 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("Skopje.Horde")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] +[assembly: System.Reflection.AssemblyProductAttribute("Skopje.Horde")] +[assembly: System.Reflection.AssemblyTitleAttribute("Skopje.Horde")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/Horde/obj/Release/net6.0/HordePlugin.AssemblyInfoInputs.cache b/Horde/obj/Release/net6.0/HordePlugin.AssemblyInfoInputs.cache new file mode 100644 index 0000000..937cc8c --- /dev/null +++ b/Horde/obj/Release/net6.0/HordePlugin.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +78354d0dbe9c37cdeff6d330f786856a0657639466ace854ec971ba17a86c0d3 diff --git a/Horde/obj/Release/net6.0/HordePlugin.GeneratedMSBuildEditorConfig.editorconfig b/Horde/obj/Release/net6.0/HordePlugin.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..3c67a36 --- /dev/null +++ b/Horde/obj/Release/net6.0/HordePlugin.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,18 @@ +is_global = true +build_property.TargetFramework = net6.0 +build_property.TargetFrameworkIdentifier = .NETCoreApp +build_property.TargetFrameworkVersion = v6.0 +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property.EntryPointFilePath = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = Skopje.Horde +build_property.ProjectDir = c:\Users\andre\Desktop\SkopjeMods\Horde\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.EffectiveAnalysisLevelStyle = 6.0 +build_property.EnableCodeStyleSeverity = diff --git a/Horde/obj/Release/net6.0/HordePlugin.assets.cache b/Horde/obj/Release/net6.0/HordePlugin.assets.cache new file mode 100644 index 0000000..a2ba845 Binary files /dev/null and b/Horde/obj/Release/net6.0/HordePlugin.assets.cache differ diff --git a/Horde/obj/Release/net6.0/HordePlugin.csproj.AssemblyReference.cache b/Horde/obj/Release/net6.0/HordePlugin.csproj.AssemblyReference.cache new file mode 100644 index 0000000..08a25c7 Binary files /dev/null and b/Horde/obj/Release/net6.0/HordePlugin.csproj.AssemblyReference.cache differ diff --git a/Horde/obj/Release/net6.0/HordePlugin.csproj.CoreCompileInputs.cache b/Horde/obj/Release/net6.0/HordePlugin.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..79aa0fa --- /dev/null +++ b/Horde/obj/Release/net6.0/HordePlugin.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +c7952710e69e753726d2741a7baa2fed13a39f80a1316f04ebf980f3f88f4dfc diff --git a/Horde/obj/Release/net6.0/HordePlugin.csproj.FileListAbsolute.txt b/Horde/obj/Release/net6.0/HordePlugin.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..1516e94 --- /dev/null +++ b/Horde/obj/Release/net6.0/HordePlugin.csproj.FileListAbsolute.txt @@ -0,0 +1,12 @@ +c:\Users\andre\Desktop\SkopjeMods\Horde\obj\Release\net6.0\HordePlugin.csproj.AssemblyReference.cache +c:\Users\andre\Desktop\SkopjeMods\Horde\obj\Release\net6.0\HordePlugin.GeneratedMSBuildEditorConfig.editorconfig +c:\Users\andre\Desktop\SkopjeMods\Horde\obj\Release\net6.0\HordePlugin.AssemblyInfoInputs.cache +c:\Users\andre\Desktop\SkopjeMods\Horde\obj\Release\net6.0\HordePlugin.AssemblyInfo.cs +c:\Users\andre\Desktop\SkopjeMods\Horde\obj\Release\net6.0\HordePlugin.csproj.CoreCompileInputs.cache +c:\Users\andre\Desktop\SkopjeMods\Horde\bin\Release\net6.0\Skopje.Horde.deps.json +c:\Users\andre\Desktop\SkopjeMods\Horde\bin\Release\net6.0\Skopje.Horde.dll +c:\Users\andre\Desktop\SkopjeMods\Horde\bin\Release\net6.0\Skopje.Horde.pdb +c:\Users\andre\Desktop\SkopjeMods\Horde\obj\Release\net6.0\Skopje.Horde.dll +c:\Users\andre\Desktop\SkopjeMods\Horde\obj\Release\net6.0\refint\Skopje.Horde.dll +c:\Users\andre\Desktop\SkopjeMods\Horde\obj\Release\net6.0\Skopje.Horde.pdb +c:\Users\andre\Desktop\SkopjeMods\Horde\obj\Release\net6.0\ref\Skopje.Horde.dll diff --git a/Horde/obj/Release/net6.0/Skopje.Horde.dll b/Horde/obj/Release/net6.0/Skopje.Horde.dll new file mode 100644 index 0000000..60d1004 Binary files /dev/null and b/Horde/obj/Release/net6.0/Skopje.Horde.dll differ diff --git a/Horde/obj/Release/net6.0/Skopje.Horde.pdb b/Horde/obj/Release/net6.0/Skopje.Horde.pdb new file mode 100644 index 0000000..0476fa5 Binary files /dev/null and b/Horde/obj/Release/net6.0/Skopje.Horde.pdb differ diff --git a/Horde/obj/Release/net6.0/ref/Skopje.Horde.dll b/Horde/obj/Release/net6.0/ref/Skopje.Horde.dll new file mode 100644 index 0000000..2f22729 Binary files /dev/null and b/Horde/obj/Release/net6.0/ref/Skopje.Horde.dll differ diff --git a/Horde/obj/Release/net6.0/refint/Skopje.Horde.dll b/Horde/obj/Release/net6.0/refint/Skopje.Horde.dll new file mode 100644 index 0000000..2f22729 Binary files /dev/null and b/Horde/obj/Release/net6.0/refint/Skopje.Horde.dll differ diff --git a/Horde/obj/project.assets.json b/Horde/obj/project.assets.json new file mode 100644 index 0000000..f4534cd --- /dev/null +++ b/Horde/obj/project.assets.json @@ -0,0 +1,90 @@ +{ + "version": 4, + "targets": { + "net6.0": {} + }, + "libraries": {}, + "projectFileDependencyGroups": { + "net6.0": [] + }, + "packageFolders": { + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget": {} + }, + "project": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "c:\\Users\\andre\\Desktop\\SkopjeMods\\Horde\\HordePlugin.csproj", + "projectName": "Skopje.Horde", + "projectPath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\Horde\\HordePlugin.csproj", + "packagesPath": "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget", + "outputPath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\Horde\\obj\\", + "projectStyle": "PackageReference", + "configFilePaths": [ + "C:\\Users\\andre\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net6.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net6.0": { + "framework": "net6.0", + "targetAlias": "net6.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "10.0.300" + }, + "frameworks": { + "net6.0": { + "framework": "net6.0", + "targetAlias": "net6.0", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[6.0.36, 6.0.36]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[6.0.36, 6.0.36]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[6.0.36, 6.0.36]" + } + ], + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.301\\RuntimeIdentifierGraph.json" + } + } + } +} \ No newline at end of file diff --git a/Horde/obj/project.nuget.cache b/Horde/obj/project.nuget.cache new file mode 100644 index 0000000..b4be11b --- /dev/null +++ b/Horde/obj/project.nuget.cache @@ -0,0 +1,12 @@ +{ + "version": 2, + "dgSpecHash": "6A7ZxIjC660=", + "success": true, + "projectFilePath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\Horde\\HordePlugin.csproj", + "expectedPackageFiles": [ + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\microsoft.netcore.app.ref\\6.0.36\\microsoft.netcore.app.ref.6.0.36.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\microsoft.windowsdesktop.app.ref\\6.0.36\\microsoft.windowsdesktop.app.ref.6.0.36.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\microsoft.aspnetcore.app.ref\\6.0.36\\microsoft.aspnetcore.app.ref.6.0.36.nupkg.sha512" + ], + "logs": [] +} \ No newline at end of file diff --git a/Modding.md b/Modding.md new file mode 100644 index 0000000..0536bfd --- /dev/null +++ b/Modding.md @@ -0,0 +1,140 @@ +# Skopje modding (BepInEx 6 IL2CPP) + +This game loads [BepInEx 6](https://docs.bepinex.dev/) plugins for Unity **IL2CPP**. Official hooks live in the interop assembly **`SkopjeAssembly`**, namespace `Skopje.Modding`. + +## Requirements + +| Item | Value | +|------|--------| +| Unity (game build) | 2022.3.62 | +| Loader | BepInEx **6** for Unity **IL2CPP** | +| Game assembly to reference | `SkopjeAssembly` (from a built game’s Il2CppInterop / dummy assemblies) | +| Hook API | `Skopje.Modding.ModAPI` | + +## Install layout + +Install BepInEx next to the game executable (same folder as the `.exe`). Typical layout: + +```text +GameRoot/ + Game.exe + winhttp.dll # Doorstop (Windows) + doorstop_config.ini + BepInEx/ + core/ + config/ # Local settings — NOT compared on join + plugins/ # Your mod DLLs (+ shared data files) + patchers/ # Optional patcher DLLs (+ shared data files) + LogOutput.log +``` + +Put gameplay plugins in `BepInEx/plugins/`. Shared override tables (JSON/CFG/etc.) must sit under `plugins/` or `patchers/` next to the DLL, **not** under `BepInEx/config`. + +## Minimal plugin + +Subscribe in `BasePlugin.Load` with `+=` (plugins load before the first scene): + +```csharp +using BepInEx; +using BepInEx.Unity.IL2CPP; +using Skopje.Modding; + +[BepInPlugin("com.example.skopje.hello", "Hello Skopje", "1.0.0")] +public class HelloPlugin : BasePlugin +{ + public override void Load() + { + ModAPI.OnServerStarted += () => Log.LogInfo("Server started"); + ModAPI.OnGameModeStartedServer += gm => Log.LogInfo($"GameMode server: {gm}"); + ModAPI.OnModCheckFailed += msg => Log.LogError(msg); + } +} +``` + +A full logging sample lives in [`Modding/SamplePlugin/`](../Modding/SamplePlugin/). + +## ModAPI events + +| Event | Where it runs | Notes | +|-------|----------------|-------| +| `OnServerStarted` / `OnServerStopped` | Dedicated server, listen host | FishNet local server state | +| `OnClientStarted` / `OnClientStopped` | Pure client, listen host | FishNet local client state | +| `OnPlayerStartedServer` / `OnPlayerStoppedServer` | Server / host | `SkopjePlayer` | +| `OnPlayerStartedClient` / `OnPlayerStoppedClient` | Clients / host | `SkopjePlayer` | +| `OnGameModeStartedServer` | Server / host | After `SkopjeGameMode.OnStartServer` | +| `OnGameModeStartedClient` | Clients / host | After `SkopjeGameMode.OnStartClient` | +| `OnGameStatusChanged` | Server/host and client-only | `NotStarted`, `Active`, `GameOver` | +| `OnGameOver` | Same peers as status | When status becomes `GameOver` | +| `OnNewDay` / `OnDay` / `OnNight` | Server and clients | Day/night cycle | +| `OnModCheckFailed` | Local client | Join rejected; message lists path diffs | + +A **listen host** raises both server and client events. Prefer **server** events for gameplay changes so dedicated servers work. + +### ScriptableObject lookup helpers + +```csharp +if (ModAPI.TryGetGuidObject(123456, out GuidScriptableObject obj)) { /* ... */ } +if (ModAPI.TryGetGuidObject(123456, out var weapon)) { /* mutate fields */ } +``` + +Call these after `OnServerStarted` or `OnGameModeStartedServer` so the GUID database is registered. + +## ScriptableObject / item stat overrides + +Items and many definitions are baked `ScriptableObject`s keyed by integer `Guid` in `GuidScriptableObjectDBManager`. + +**Supported today** + +- Mutate **public fields** on existing instances (`ItemData`, `WeaponData`, `UtilityData`, …) at runtime after the DB is ready. +- Same plugin must run on the **dedicated server and every client** for gameplay stats. + +**Not supported yet** + +- Adding brand-new items/recipes as new assets. +- Replacing loose `.asset` files on disk (IL2CPP does not load those as Mono would). + +Example pattern (also commented in the sample plugin): + +```csharp +ModAPI.OnGameModeStartedServer += _ => +{ + if (ModAPI.TryGetGuidObject(YOUR_GUID, out var weapon)) + { + // weapon.SomePublicStatField = newValue; + } +}; +``` + +## Multiplayer contract + +- FishNet is **server-authoritative**. Client-only stat changes do not define combat/inventory outcomes. +- Gameplay mods must be **identical** on the host/dedicated server and every joining client. +- Client-only mods (UI, camera, cosmetics) should subscribe only to **client** events and must not change server-owned results. +- Put shared override data under `BepInEx/plugins/` (or `patchers/`) so the join check can see it. Local keybinds and BepInEx settings stay in `BepInEx/config/` and are **not** compared. + +## Manifest join check + +Before a remote client is authenticated, the game hashes: + +- `BepInEx/plugins/**` and `BepInEx/patchers/**` +- Extensions: `.dll`, `.json`, `.cfg`, `.txt`, `.xml` + +Relative paths (forward slashes) + SHA-256 must match the server’s install. If `BepInEx` is missing on both sides, both look vanilla and match. + +**Not hashed:** `BepInEx/core`, `BepInEx/config`, logs. + +**Note:** A DLL present under `plugins/` still counts even if disabled in BepInEx config. Remove or rename the file to drop it from the check. + +On mismatch the client is disconnected, `ModAPI.OnModCheckFailed` runs with a detail string, and a Doozy game event named **`ModCheckFailed`** is sent (UI can listen for that name). + +## Troubleshooting + +| Symptom | What to check | +|---------|----------------| +| Join rejected / disconnect | Log message and `OnModCheckFailed`; compare listed missing/extra/changed paths under `plugins`/`patchers` | +| Plugin never loads | BepInEx 6 IL2CPP pack; `LogOutput.log`; Doorstop `winhttp.dll` next to the exe | +| Overrides work solo but not in MP | Same plugin + sidecar files on **server and clients**; use server hooks for gameplay | +| Different stats with “matching” mods | Shared data must live under `plugins/`, not only in `BepInEx/config/` | +| Disabled mod still blocks join | File still hashed; remove the DLL/data file from `plugins` | + +Logs: `BepInEx/LogOutput.log` and the Unity player log. diff --git a/SamplePlugin/README.md b/SamplePlugin/README.md new file mode 100644 index 0000000..422743d --- /dev/null +++ b/SamplePlugin/README.md @@ -0,0 +1,16 @@ +# Sample BepInEx plugin + +Minimal BepInEx **6 IL2CPP** plugin that logs `Skopje.Modding.ModAPI` events and shows a commented ScriptableObject override pattern. + +Full guide: [`Docs/Modding.md`](../../Docs/Modding.md). + +## Setup + +1. Install BepInEx 6 IL2CPP for the game build. +2. Generate or copy Il2CppInterop assemblies from a run of that build (BepInEx `interop` / unhollowed output — folder names vary by pack). +3. Edit [`SamplePlugin.csproj`](SamplePlugin.csproj): + - Set `GameInteropDir` to that assemblies folder (must contain `SkopjeAssembly.dll` and BepInEx / Il2Cpp references as needed). +4. `dotnet build -c Release` +5. Copy `bin/Release/net6.0/Skopje.SamplePlugin.dll` to `BepInEx/plugins/`. + +Gameplay mods that change stats must be installed on the dedicated server and every client. Shared JSON/CFG override files belong next to the DLL under `plugins/`, not in `BepInEx/config/`. diff --git a/SamplePlugin/SamplePlugin.cs b/SamplePlugin/SamplePlugin.cs new file mode 100644 index 0000000..2faa51f --- /dev/null +++ b/SamplePlugin/SamplePlugin.cs @@ -0,0 +1,67 @@ +using System; +using BepInEx; +using BepInEx.Logging; +using BepInEx.Unity.IL2CPP; +using Skopje.Modding; + +namespace Skopje.SamplePlugin +{ + [BepInPlugin(PluginGuid, PluginName, PluginVersion)] + public class SamplePlugin : BasePlugin + { + public const string PluginGuid = "com.skopje.sampleplugin"; + public const string PluginName = "Skopje Sample Plugin"; + public const string PluginVersion = "1.0.0"; + + static ManualLogSource LogSource; + + public override void Load() + { + LogSource = Log; + LogSource.LogInfo($"{PluginName} {PluginVersion} loaded. Subscribe to ModAPI from Load()."); + + ModAPI.OnServerStarted += () => LogSource.LogInfo("[ModAPI] OnServerStarted"); + ModAPI.OnServerStopped += () => LogSource.LogInfo("[ModAPI] OnServerStopped"); + ModAPI.OnClientStarted += () => LogSource.LogInfo("[ModAPI] OnClientStarted"); + ModAPI.OnClientStopped += () => LogSource.LogInfo("[ModAPI] OnClientStopped"); + + ModAPI.OnPlayerStartedServer += player => + LogSource.LogInfo($"[ModAPI] OnPlayerStartedServer idx={player?.PlayerIdx}"); + ModAPI.OnPlayerStoppedServer += player => + LogSource.LogInfo($"[ModAPI] OnPlayerStoppedServer idx={player?.PlayerIdx}"); + ModAPI.OnPlayerStartedClient += player => + LogSource.LogInfo($"[ModAPI] OnPlayerStartedClient idx={player?.PlayerIdx}"); + ModAPI.OnPlayerStoppedClient += player => + LogSource.LogInfo($"[ModAPI] OnPlayerStoppedClient idx={player?.PlayerIdx}"); + + ModAPI.OnGameModeStartedServer += OnGameModeStartedServer; + ModAPI.OnGameModeStartedClient += gm => + LogSource.LogInfo($"[ModAPI] OnGameModeStartedClient scene={gm?.ActiveSceneName}"); + ModAPI.OnGameStatusChanged += status => + LogSource.LogInfo($"[ModAPI] OnGameStatusChanged {status}"); + ModAPI.OnGameOver += () => LogSource.LogInfo("[ModAPI] OnGameOver"); + ModAPI.OnNewDay += () => LogSource.LogInfo("[ModAPI] OnNewDay"); + ModAPI.OnDay += () => LogSource.LogInfo("[ModAPI] OnDay"); + ModAPI.OnNight += () => LogSource.LogInfo("[ModAPI] OnNight"); + + ModAPI.OnModCheckFailed += message => + LogSource.LogError($"[ModAPI] OnModCheckFailed\n{message}"); + } + + static void OnGameModeStartedServer(SkopjeGameMode gameMode) + { + LogSource.LogInfo($"[ModAPI] OnGameModeStartedServer scene={gameMode?.ActiveSceneName}"); + + // Example: mutate an existing baked ScriptableObject after the GUID DB is ready. + // Replace YOUR_ITEM_GUID with a real Guid from the game’s ScriptableObject assets. + // Gameplay overrides must run on the dedicated server and every client. + // + // const int YourItemGuid = 0; + // if (ModAPI.TryGetGuidObject(YourItemGuid, out ItemData item)) + // { + // item.ItemStackSize = 99; + // LogSource.LogInfo($"Overrode stack size for {item.name}"); + // } + } + } +} diff --git a/SamplePlugin/SamplePlugin.csproj b/SamplePlugin/SamplePlugin.csproj new file mode 100644 index 0000000..8aada5f --- /dev/null +++ b/SamplePlugin/SamplePlugin.csproj @@ -0,0 +1,37 @@ + + + net6.0 + latest + disable + disable + true + Skopje.SamplePlugin + Skopje.SamplePlugin + true + + $(MSBuildThisFileDirectory)..\..\GameInterop + + + + + $(GameInteropDir)\BepInEx.Core.dll + false + + + $(GameInteropDir)\BepInEx.Unity.IL2CPP.dll + false + + + $(GameInteropDir)\Il2CppInterop.Runtime.dll + false + + + $(GameInteropDir)\SkopjeAssembly.dll + false + + + $(GameInteropDir)\UnityEngine.CoreModule.dll + false + + + diff --git a/ThirdPerson/ThirdPersonPlugin.cs b/ThirdPerson/ThirdPersonPlugin.cs new file mode 100644 index 0000000..0d4f4f1 --- /dev/null +++ b/ThirdPerson/ThirdPersonPlugin.cs @@ -0,0 +1,145 @@ +using System; +using System.Reflection; +using BepInEx; +using BepInEx.Configuration; +using BepInEx.Logging; +using BepInEx.Unity.IL2CPP; +using Cinemachine; +using HarmonyLib; +using Il2CppInterop.Runtime; +using Il2CppInterop.Runtime.Injection; +using Skopje.Modding; +using UnityEngine; + +namespace Skopje.ThirdPerson +{ + [BepInPlugin(PluginGuid, PluginName, PluginVersion)] + public class ThirdPersonPlugin : BasePlugin + { + public const string PluginGuid = "com.skopje.thirdperson"; + public const string PluginName = "Skopje Third Person"; + public const string PluginVersion = "1.0.0"; + + internal static ManualLogSource LogSource; + + internal static ConfigEntry Enabled; + internal static ConfigEntry FaceMovement; + internal static ConfigEntry Distance; + internal static ConfigEntry Shoulder; + internal static ConfigEntry Height; + internal static ConfigEntry PivotHeight; + internal static ConfigEntry AdsDistance; + internal static ConfigEntry AdsShoulder; + internal static ConfigEntry FovBonus; + internal static ConfigEntry AimDistance; + + static Harmony _harmony; + static GameObject _driverHost; + + static Il2CppSystem.Action _onClientStarted; + static Il2CppSystem.Action _onClientStopped; + static Il2CppSystem.Action _onPlayerStarted; + static Il2CppSystem.Action _onPlayerStopped; + + public override void Load() + { + LogSource = Log; + Enabled = Config.Bind("Camera", "Enabled", true, "Over-the-shoulder camera on the right. The body keeps its own facing so the camera can orbit around to the face."); + FaceMovement = Config.Bind("Camera", "FaceMovement", false, "Turn the body toward the direction you move. Leave this off to keep the body still while the camera orbits."); + Distance = Config.Bind("Camera", "Distance", 2.7f, "Meters behind the aim axis."); + Shoulder = Config.Bind("Camera", "Shoulder", 0.62f, "Meters to the right of the aim axis."); + Height = Config.Bind("Camera", "Height", 0.22f, "Meters above the pivot."); + PivotHeight = Config.Bind("Camera", "PivotHeight", 1.25f, "Orbit height above the feet, before crouch."); + AdsDistance = Config.Bind("Camera", "AdsDistance", 1.55f, "Distance while aiming down sights."); + AdsShoulder = Config.Bind("Camera", "AdsShoulder", 0.4f, "Right offset while aiming down sights."); + FovBonus = Config.Bind("Camera", "FovBonus", 8f, "Extra field of view. Drops to zero while aiming."); + AimDistance = Config.Bind("Camera", "AimDistance", 80f, "Crosshair trace length when nothing is under the reticle."); + + ClassInjector.RegisterTypeInIl2Cpp(); + + _onClientStarted = ToIl2Cpp(new System.Action(ThirdPersonRig.OnClientStarted)); + _onClientStopped = ToIl2Cpp(new System.Action(ThirdPersonRig.OnClientStopped)); + _onPlayerStarted = ToIl2Cpp(new System.Action(ThirdPersonRig.OnPlayerStarted)); + _onPlayerStopped = ToIl2Cpp(new System.Action(ThirdPersonRig.OnPlayerStopped)); + + ModAPI.add_OnClientStarted(_onClientStarted); + ModAPI.add_OnClientStopped(_onClientStopped); + ModAPI.add_OnPlayerStartedClient(_onPlayerStarted); + ModAPI.add_OnPlayerStoppedClient(_onPlayerStopped); + + _driverHost = new GameObject("SkopjeThirdPerson"); + UnityEngine.Object.DontDestroyOnLoad(_driverHost); + _driverHost.hideFlags = HideFlags.HideAndDontSave; + _driverHost.AddComponent(); + + _harmony = new Harmony(PluginGuid); + Patch(AccessTools.Method(typeof(SkopjeFPSCamera), "LateUpdate"), nameof(ThirdPersonPatches.AfterCamera)); + Patch(AccessTools.Method(typeof(CinemachineBrain), "LateUpdate"), nameof(ThirdPersonPatches.AfterBrain)); + Patch(AccessTools.Method(typeof(SkopjeCharacterController), "UpdateRotation"), nameof(ThirdPersonPatches.AfterBodyRotation), nameof(ThirdPersonPatches.BeforeBodyRotation)); + + LogSource.LogInfo($"{PluginName} {PluginVersion} loaded. Config: {Config.ConfigFilePath}"); + } + + public override bool Unload() + { + if (_harmony != null) + _harmony.UnpatchSelf(); + ThirdPersonRig.Shutdown(); + if (_driverHost != null) + { + UnityEngine.Object.Destroy(_driverHost); + _driverHost = null; + } + + return true; + } + + static void Patch(MethodInfo method, string postfix, string prefix = null) + { + if (method == null) + { + LogSource.LogWarning("Third person hook was not found: " + (postfix ?? prefix)); + return; + } + + _harmony.Patch( + method, + prefix: prefix == null ? null : new HarmonyMethod(typeof(ThirdPersonPatches), prefix), + postfix: postfix == null ? null : new HarmonyMethod(typeof(ThirdPersonPatches), postfix)); + } + + static Il2CppSystem.Action ToIl2Cpp(System.Action action) + { + return DelegateSupport.ConvertDelegate(action); + } + + static Il2CppSystem.Action ToIl2Cpp(System.Action action) + { + return DelegateSupport.ConvertDelegate>(action); + } + } + + public static class ThirdPersonPatches + { + public static void AfterCamera(SkopjeFPSCamera __instance) + { + ThirdPersonRig.Apply(__instance); + } + + public static void AfterBrain() + { + ThirdPersonRig.Apply(ThirdPersonRig.LocalCamera); + } + + public static void BeforeBodyRotation(SkopjeCharacterController __instance, ref Quaternion currentRotation) + { + ThirdPersonRig.RememberBody(__instance, currentRotation); + } + + // The motor turns the capsule toward the look yaw. Put the previous facing back so mouse-look only orbits the camera. + public static void AfterBodyRotation(SkopjeCharacterController __instance, ref Quaternion currentRotation, float deltaTime) + { + ThirdPersonRig.HoldBodyFacing(__instance, ref currentRotation, deltaTime); + } + } +} diff --git a/ThirdPerson/ThirdPersonPlugin.csproj b/ThirdPerson/ThirdPersonPlugin.csproj new file mode 100644 index 0000000..b0c16ed --- /dev/null +++ b/ThirdPerson/ThirdPersonPlugin.csproj @@ -0,0 +1,64 @@ + + + net6.0 + latest + disable + disable + true + Skopje.ThirdPerson + Skopje.ThirdPerson + true + D:\SteamLibrary\steamapps\common\Skopje83 + + + + + $(GameDir)\BepInEx\core\0Harmony.dll + false + + + $(GameDir)\BepInEx\core\BepInEx.Core.dll + false + + + $(GameDir)\BepInEx\core\BepInEx.Unity.IL2CPP.dll + false + + + $(GameDir)\BepInEx\core\Il2CppInterop.Runtime.dll + false + + + $(GameDir)\BepInEx\interop\Il2Cppmscorlib.dll + false + + + $(GameDir)\BepInEx\interop\SkopjeAssembly.dll + false + + + $(GameDir)\BepInEx\interop\FishNet.Runtime.dll + false + + + $(GameDir)\BepInEx\interop\Cinemachine.dll + false + + + $(GameDir)\BepInEx\interop\RootMotion.dll + false + + + $(GameDir)\BepInEx\interop\UnityEngine.CoreModule.dll + false + + + $(GameDir)\BepInEx\interop\UnityEngine.PhysicsModule.dll + false + + + $(GameDir)\BepInEx\interop\Archon.SwissArmyLib.dll + false + + + diff --git a/ThirdPerson/ThirdPersonRig.cs b/ThirdPerson/ThirdPersonRig.cs new file mode 100644 index 0000000..658b969 --- /dev/null +++ b/ThirdPerson/ThirdPersonRig.cs @@ -0,0 +1,485 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace Skopje.ThirdPerson +{ + public class ThirdPersonDriver : MonoBehaviour + { + void Update() + { + ThirdPersonRig.TickBody(); + } + + void LateUpdate() + { + ThirdPersonRig.Apply(ThirdPersonRig.LocalCamera); + } + } + + static class ThirdPersonRig + { + const float MoveThreshold = 0.2f; + const float ExternalTurn = 35f; + + static readonly List Hidden = new List(); + static readonly RaycastHit[] Hits = new RaycastHit[24]; + + internal static SkopjeFPSCamera LocalCamera; + + static SkopjePlayer _player; + static bool _holding; + static bool _hasFacing; + static Quaternion _facing; + static Quaternion _incomingFacing; + static bool _hasIncoming; + static bool _hasLook; + static Quaternion _look = Quaternion.identity; + static bool _hasPlacement; + static Vector3 _placedPos; + static float _baseFov; + static float _boom = 2.7f; + static float _ads; + static bool _capturedIk; + static bool _aimWasEnabled; + static bool _lookWasEnabled; + static bool _followWasEnabled; + static bool _disabledFollow; + static float _nextScan; + static int _errors; + static bool _logged; + + public static void OnClientStarted() + { + } + + public static void OnClientStopped() + { + Release(); + _player = null; + LocalCamera = null; + } + + public static void OnPlayerStarted(SkopjePlayer player) + { + if (player != null && player.IsOwner) + _player = player; + } + + public static void OnPlayerStopped(SkopjePlayer player) + { + if (_player == player) + { + Release(); + _player = null; + LocalCamera = null; + } + } + + public static void Shutdown() + { + Release(); + _player = null; + LocalCamera = null; + } + + public static void TickBody() + { + if (!CanControl(_player)) + { + if (_holding) + Release(); + return; + } + + try + { + HoldPresentation(_player); + } + catch (Exception ex) + { + Fail(ex); + } + } + + public static void Apply(SkopjeFPSCamera fps) + { + if (fps == null || !CanControl(fps.Player)) + return; + + Camera cam = fps.mainCamera != null ? fps.mainCamera : Camera.main; + if (cam == null) + return; + + LocalCamera = fps; + if (_player == null) + _player = fps.Player; + + try + { + Place(fps, cam); + } + catch (Exception ex) + { + Fail(ex); + } + } + + public static void RememberBody(SkopjeCharacterController controller, Quaternion currentRotation) + { + if (!CanControl(controller != null ? controller.Player : null)) + { + _hasIncoming = false; + return; + } + + _incomingFacing = FlatYaw(currentRotation); + _hasIncoming = true; + } + + public static void HoldBodyFacing(SkopjeCharacterController controller, ref Quaternion currentRotation, float deltaTime) + { + if (!_hasIncoming || controller == null || !CanControl(controller.Player)) + return; + + Quaternion held = _hasFacing ? _facing : _incomingFacing; + if (!_hasFacing || Quaternion.Angle(held, _incomingFacing) > ExternalTurn) + held = _incomingFacing; + + if (ThirdPersonPlugin.FaceMovement.Value) + { + Vector3 move = controller.moveInputVector; + move.y = 0f; + if (move.sqrMagnitude > MoveThreshold * MoveThreshold) + { + float sharp = controller.OrientationSharpness; + if (sharp < 0.01f) + sharp = 12f; + float blend = 1f - Mathf.Exp(-sharp * Mathf.Max(0f, deltaTime)); + held = Quaternion.Slerp(held, Quaternion.LookRotation(move.normalized, Vector3.up), blend); + } + } + + _facing = FlatYaw(held); + _hasFacing = true; + currentRotation = _facing; + } + + static void Place(SkopjeFPSCamera fps, Camera cam) + { + Quaternion look = ReadLook(fps, cam); + _look = look; + _hasLook = true; + + bool fresh = !_hasPlacement || (cam.transform.position - _placedPos).sqrMagnitude > 0.0004f; + if (fresh) + _baseFov = cam.fieldOfView; + + float adsTarget = fps.adsMode ? 1f : 0f; + _ads = Mathf.MoveTowards(_ads, adsTarget, Time.deltaTime / 0.12f); + + float distance = Mathf.Lerp(Clamp(ThirdPersonPlugin.Distance.Value, 0.8f, 8f), Clamp(ThirdPersonPlugin.AdsDistance.Value, 0.6f, 6f), _ads); + float shoulder = Mathf.Lerp(Clamp(ThirdPersonPlugin.Shoulder.Value, 0f, 2f), Clamp(ThirdPersonPlugin.AdsShoulder.Value, 0f, 1.5f), _ads); + float height = Clamp(ThirdPersonPlugin.Height.Value, -1f, 2f); + float boom = new Vector3(shoulder, height, -distance).magnitude; + if (!_hasPlacement) + _boom = boom; + _boom = Mathf.Lerp(_boom, boom, 1f - Mathf.Exp(-16f * Time.deltaTime)); + + Vector3 pivot = Pivot(fps.Player); + Vector3 offset = look * new Vector3(shoulder, height, -distance); + if (offset.sqrMagnitude < 0.0001f) + offset = look * Vector3.back; + Vector3 dir = offset.normalized; + float allowed = PullIn(fps.Player, pivot, dir, _boom); + Vector3 camPos = pivot + dir * allowed; + + Vector3 aim = AimPoint(fps.Player, pivot, look * Vector3.forward); + Vector3 toAim = aim - camPos; + Vector3 up = look * Vector3.up; + if (toAim.sqrMagnitude < 0.0001f || Mathf.Abs(Vector3.Dot(toAim.normalized, up.normalized)) > 0.995f) + cam.transform.rotation = look; + else + cam.transform.rotation = Quaternion.LookRotation(toAim, up); + + cam.transform.position = camPos; + cam.fieldOfView = _baseFov + Clamp(ThirdPersonPlugin.FovBonus.Value, 0f, 40f) * (1f - _ads); + _placedPos = camPos; + _hasPlacement = true; + KeepBodyYaw(fps.Player); + + if (!_logged) + { + _logged = true; + ThirdPersonPlugin.LogSource.LogInfo("Right-shoulder camera is active. The body does not turn with the mouse."); + } + } + + static void KeepBodyYaw(SkopjePlayer player) + { + if (!_hasFacing || player == null) + return; + + Transform body = player.transform; + Vector3 up = body.up; + Vector3 forward = Vector3.ProjectOnPlane(_facing * Vector3.forward, up); + if (forward.sqrMagnitude < 0.0001f) + return; + + body.rotation = Quaternion.LookRotation(forward.normalized, up); + } + + static Quaternion ReadLook(SkopjeFPSCamera fps, Camera cam) + { + if (fps.VCamera != null && fps.VCamera.transform != cam.transform) + return fps.VCamera.transform.rotation; + if (fps.SocketTransform != null && fps.SocketTransform != cam.transform) + return fps.SocketTransform.rotation; + if (_hasLook && _hasPlacement && (cam.transform.position - _placedPos).sqrMagnitude < 0.0004f) + return _look; + return cam.transform.rotation; + } + + static Vector3 Pivot(SkopjePlayer player) + { + float height = Clamp(ThirdPersonPlugin.PivotHeight.Value, 0.4f, 2.4f); + var body = player.SkopjeCharacterController; + if (body != null) + { + if (body.standingHeight > 0.5f) + height = Mathf.Min(height, body.standingHeight * 0.78f); + float crouch = body.CrouchedHeightMult > 0.05f ? body.CrouchedHeightMult : 0.55f; + height *= Mathf.Lerp(1f, crouch, Mathf.Clamp01(body.currentCrouch01)); + } + + return player.transform.position + Vector3.up * height; + } + + static Vector3 AimPoint(SkopjePlayer player, Vector3 origin, Vector3 direction) + { + float reach = Clamp(ThirdPersonPlugin.AimDistance.Value, 5f, 200f); + if (direction.sqrMagnitude < 0.0001f) + direction = Vector3.forward; + direction.Normalize(); + + int count = Physics.RaycastNonAlloc(origin, direction, Hits, reach, Physics.DefaultRaycastLayers, QueryTriggerInteraction.Ignore); + float best = float.MaxValue; + Vector3 point = origin + direction * reach; + for (int i = 0; i < count; i++) + { + if (Hits[i].collider == null || IsOwn(player, Hits[i].collider)) + continue; + if (Hits[i].distance < best) + { + best = Hits[i].distance; + point = Hits[i].point; + } + } + + return point; + } + + static float PullIn(SkopjePlayer player, Vector3 origin, Vector3 direction, float distance) + { + const float radius = 0.18f; + int count = Physics.SphereCastNonAlloc(origin, radius, direction, Hits, distance, Physics.DefaultRaycastLayers, QueryTriggerInteraction.Ignore); + float best = distance; + for (int i = 0; i < count; i++) + { + if (Hits[i].collider == null || IsOwn(player, Hits[i].collider)) + continue; + float room = Mathf.Max(0.35f, Hits[i].distance); + if (room < best) + best = room; + } + + return best; + } + + static void HoldPresentation(SkopjePlayer player) + { + GameObject third = player.ThirdPerson; + if (third != null && !third.activeSelf) + third.SetActive(true); + + GameObject pack = player.ThirdPersonBackpackParent; + if (pack != null && !pack.activeSelf) + pack.SetActive(true); + + var anim = player.TPAnimationController; + if (anim != null) + { + if (!_capturedIk) + { + _aimWasEnabled = anim.AimAtMotor != null && anim.AimAtMotor.enabled; + _lookWasEnabled = anim.LookAtMotor != null && anim.LookAtMotor.enabled; + _capturedIk = true; + } + + if (anim.AimAtMotor != null) + anim.AimAtMotor.enabled = false; + if (anim.LookAtMotor != null) + anim.LookAtMotor.enabled = false; + } + + var follow = player.ThirdPersonFollowCam; + if (follow != null && follow.Look != null && follow.Look.enabled) + { + _followWasEnabled = true; + follow.Look.enabled = false; + _disabledFollow = true; + } + + if (Time.unscaledTime >= _nextScan) + { + _nextScan = Time.unscaledTime + 0.25f; + RebuildHidden(player); + } + + for (int i = 0; i < Hidden.Count; i++) + { + if (Hidden[i] != null) + Hidden[i].forceRenderingOff = true; + } + + _holding = true; + } + + static void RebuildHidden(SkopjePlayer player) + { + var next = new List(); + Transform third = player.ThirdPerson != null ? player.ThirdPerson.transform : null; + Collect(player.FirstPerson, third, next); + + var weapons = player.WeaponsController; + if (weapons != null) + { + if (weapons.Socket != null) + Collect(weapons.Socket.gameObject, third, next); + if (weapons.ThrowSocket != null) + Collect(weapons.ThrowSocket.gameObject, third, next); + } + + for (int i = 0; i < Hidden.Count; i++) + { + Renderer old = Hidden[i]; + if (old != null && !next.Contains(old)) + old.forceRenderingOff = false; + } + + Hidden.Clear(); + Hidden.AddRange(next); + } + + static void Collect(GameObject root, Transform thirdPerson, List into) + { + if (root == null) + return; + if (thirdPerson != null && (root.transform == thirdPerson || root.transform.IsChildOf(thirdPerson))) + return; + + Renderer[] found = root.GetComponentsInChildren(true); + for (int i = 0; i < found.Length; i++) + { + Renderer renderer = found[i]; + if (renderer == null) + continue; + if (thirdPerson != null && renderer.transform.IsChildOf(thirdPerson)) + continue; + if (!into.Contains(renderer)) + into.Add(renderer); + } + } + + static void Release() + { + for (int i = 0; i < Hidden.Count; i++) + { + if (Hidden[i] != null) + Hidden[i].forceRenderingOff = false; + } + + Hidden.Clear(); + + if (_player != null) + { + var anim = _player.TPAnimationController; + if (_capturedIk && anim != null) + { + if (anim.AimAtMotor != null) + anim.AimAtMotor.enabled = _aimWasEnabled; + if (anim.LookAtMotor != null) + anim.LookAtMotor.enabled = _lookWasEnabled; + } + + if (_disabledFollow && _player.ThirdPersonFollowCam != null && _player.ThirdPersonFollowCam.Look != null) + _player.ThirdPersonFollowCam.Look.enabled = _followWasEnabled; + + try + { + _player.RefreshActiveModels(); + } + catch (Exception ex) + { + Fail(ex); + } + } + + _capturedIk = false; + _disabledFollow = false; + _holding = false; + _hasFacing = false; + _hasIncoming = false; + _hasPlacement = false; + _hasLook = false; + _ads = 0f; + _logged = false; + } + + static bool CanControl(SkopjePlayer player) + { + if (!ThirdPersonPlugin.Enabled.Value || player == null || !player.IsOwner) + return false; + if (player.IsDead || player.IsFallen || player.IsSpectating || player.IsPaused || player.InInventory) + return false; + if (player.InsideVehicle != null) + return false; + + var cine = player._cinematicController; + if (cine != null && cine.PlayingCinematic != null && cine.PlayingCinematic.PlayingCinematic != null) + return false; + + return player.SkopjeFPSCamera != null; + } + + static bool IsOwn(SkopjePlayer player, Collider collider) + { + if (player == null || collider == null) + return false; + Transform transform = collider.transform; + Transform root = player.transform; + return transform == root || transform.IsChildOf(root); + } + + static Quaternion FlatYaw(Quaternion rotation) + { + Vector3 forward = Vector3.ProjectOnPlane(rotation * Vector3.forward, Vector3.up); + if (forward.sqrMagnitude < 0.0001f) + forward = Vector3.ProjectOnPlane(rotation * Vector3.up, Vector3.up); + if (forward.sqrMagnitude < 0.0001f) + forward = Vector3.forward; + return Quaternion.LookRotation(forward.normalized, Vector3.up); + } + + static float Clamp(float value, float min, float max) + { + return Mathf.Clamp(value, min, max); + } + + static void Fail(Exception ex) + { + if (_errors++ < 5 && ThirdPersonPlugin.LogSource != null) + ThirdPersonPlugin.LogSource.LogWarning("Third person failed: " + ex.Message); + } + } +} diff --git a/ThirdPerson/bin/Release/net6.0/Skopje.ThirdPerson.deps.json b/ThirdPerson/bin/Release/net6.0/Skopje.ThirdPerson.deps.json new file mode 100644 index 0000000..1ff88d8 --- /dev/null +++ b/ThirdPerson/bin/Release/net6.0/Skopje.ThirdPerson.deps.json @@ -0,0 +1,23 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v6.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v6.0": { + "Skopje.ThirdPerson/1.0.0": { + "runtime": { + "Skopje.ThirdPerson.dll": {} + } + } + } + }, + "libraries": { + "Skopje.ThirdPerson/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + } + } +} \ No newline at end of file diff --git a/ThirdPerson/bin/Release/net6.0/Skopje.ThirdPerson.dll b/ThirdPerson/bin/Release/net6.0/Skopje.ThirdPerson.dll new file mode 100644 index 0000000..3d95e43 Binary files /dev/null and b/ThirdPerson/bin/Release/net6.0/Skopje.ThirdPerson.dll differ diff --git a/ThirdPerson/bin/Release/net6.0/Skopje.ThirdPerson.pdb b/ThirdPerson/bin/Release/net6.0/Skopje.ThirdPerson.pdb new file mode 100644 index 0000000..8c09b11 Binary files /dev/null and b/ThirdPerson/bin/Release/net6.0/Skopje.ThirdPerson.pdb differ diff --git a/ThirdPerson/obj/Release/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs b/ThirdPerson/obj/Release/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs new file mode 100644 index 0000000..ed92695 --- /dev/null +++ b/ThirdPerson/obj/Release/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")] diff --git a/ThirdPerson/obj/Release/net6.0/Skopje.ThirdPerson.dll b/ThirdPerson/obj/Release/net6.0/Skopje.ThirdPerson.dll new file mode 100644 index 0000000..3d95e43 Binary files /dev/null and b/ThirdPerson/obj/Release/net6.0/Skopje.ThirdPerson.dll differ diff --git a/ThirdPerson/obj/Release/net6.0/Skopje.ThirdPerson.pdb b/ThirdPerson/obj/Release/net6.0/Skopje.ThirdPerson.pdb new file mode 100644 index 0000000..8c09b11 Binary files /dev/null and b/ThirdPerson/obj/Release/net6.0/Skopje.ThirdPerson.pdb differ diff --git a/ThirdPerson/obj/Release/net6.0/ThirdPersonPlugin.AssemblyInfo.cs b/ThirdPerson/obj/Release/net6.0/ThirdPersonPlugin.AssemblyInfo.cs new file mode 100644 index 0000000..f81db69 --- /dev/null +++ b/ThirdPerson/obj/Release/net6.0/ThirdPersonPlugin.AssemblyInfo.cs @@ -0,0 +1,22 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("Skopje.ThirdPerson")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] +[assembly: System.Reflection.AssemblyProductAttribute("Skopje.ThirdPerson")] +[assembly: System.Reflection.AssemblyTitleAttribute("Skopje.ThirdPerson")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/ThirdPerson/obj/Release/net6.0/ThirdPersonPlugin.AssemblyInfoInputs.cache b/ThirdPerson/obj/Release/net6.0/ThirdPersonPlugin.AssemblyInfoInputs.cache new file mode 100644 index 0000000..d37f276 --- /dev/null +++ b/ThirdPerson/obj/Release/net6.0/ThirdPersonPlugin.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +8ec25d9c2fd66f388ffb60470d85e452afd95523e8f8b9133f1a26f62c293384 diff --git a/ThirdPerson/obj/Release/net6.0/ThirdPersonPlugin.GeneratedMSBuildEditorConfig.editorconfig b/ThirdPerson/obj/Release/net6.0/ThirdPersonPlugin.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..f2ffec6 --- /dev/null +++ b/ThirdPerson/obj/Release/net6.0/ThirdPersonPlugin.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,18 @@ +is_global = true +build_property.TargetFramework = net6.0 +build_property.TargetFrameworkIdentifier = .NETCoreApp +build_property.TargetFrameworkVersion = v6.0 +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property.EntryPointFilePath = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = Skopje.ThirdPerson +build_property.ProjectDir = c:\Users\andre\Desktop\SkopjeMods\ThirdPerson\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.EffectiveAnalysisLevelStyle = 6.0 +build_property.EnableCodeStyleSeverity = diff --git a/ThirdPerson/obj/Release/net6.0/ThirdPersonPlugin.assets.cache b/ThirdPerson/obj/Release/net6.0/ThirdPersonPlugin.assets.cache new file mode 100644 index 0000000..7ea8abb Binary files /dev/null and b/ThirdPerson/obj/Release/net6.0/ThirdPersonPlugin.assets.cache differ diff --git a/ThirdPerson/obj/Release/net6.0/ThirdPersonPlugin.csproj.AssemblyReference.cache b/ThirdPerson/obj/Release/net6.0/ThirdPersonPlugin.csproj.AssemblyReference.cache new file mode 100644 index 0000000..47e5d12 Binary files /dev/null and b/ThirdPerson/obj/Release/net6.0/ThirdPersonPlugin.csproj.AssemblyReference.cache differ diff --git a/ThirdPerson/obj/Release/net6.0/ThirdPersonPlugin.csproj.CoreCompileInputs.cache b/ThirdPerson/obj/Release/net6.0/ThirdPersonPlugin.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..555c706 --- /dev/null +++ b/ThirdPerson/obj/Release/net6.0/ThirdPersonPlugin.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +18339d4439978cc6f6c93b5159fc999229a5968512d398389890b72d566d8679 diff --git a/ThirdPerson/obj/Release/net6.0/ThirdPersonPlugin.csproj.FileListAbsolute.txt b/ThirdPerson/obj/Release/net6.0/ThirdPersonPlugin.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..03d8c5a --- /dev/null +++ b/ThirdPerson/obj/Release/net6.0/ThirdPersonPlugin.csproj.FileListAbsolute.txt @@ -0,0 +1,12 @@ +c:\Users\andre\Desktop\SkopjeMods\ThirdPerson\obj\Release\net6.0\ThirdPersonPlugin.csproj.AssemblyReference.cache +c:\Users\andre\Desktop\SkopjeMods\ThirdPerson\obj\Release\net6.0\ThirdPersonPlugin.GeneratedMSBuildEditorConfig.editorconfig +c:\Users\andre\Desktop\SkopjeMods\ThirdPerson\obj\Release\net6.0\ThirdPersonPlugin.AssemblyInfoInputs.cache +c:\Users\andre\Desktop\SkopjeMods\ThirdPerson\obj\Release\net6.0\ThirdPersonPlugin.AssemblyInfo.cs +c:\Users\andre\Desktop\SkopjeMods\ThirdPerson\obj\Release\net6.0\ThirdPersonPlugin.csproj.CoreCompileInputs.cache +c:\Users\andre\Desktop\SkopjeMods\ThirdPerson\bin\Release\net6.0\Skopje.ThirdPerson.deps.json +c:\Users\andre\Desktop\SkopjeMods\ThirdPerson\bin\Release\net6.0\Skopje.ThirdPerson.dll +c:\Users\andre\Desktop\SkopjeMods\ThirdPerson\bin\Release\net6.0\Skopje.ThirdPerson.pdb +c:\Users\andre\Desktop\SkopjeMods\ThirdPerson\obj\Release\net6.0\Skopje.ThirdPerson.dll +c:\Users\andre\Desktop\SkopjeMods\ThirdPerson\obj\Release\net6.0\refint\Skopje.ThirdPerson.dll +c:\Users\andre\Desktop\SkopjeMods\ThirdPerson\obj\Release\net6.0\Skopje.ThirdPerson.pdb +c:\Users\andre\Desktop\SkopjeMods\ThirdPerson\obj\Release\net6.0\ref\Skopje.ThirdPerson.dll diff --git a/ThirdPerson/obj/Release/net6.0/ref/Skopje.ThirdPerson.dll b/ThirdPerson/obj/Release/net6.0/ref/Skopje.ThirdPerson.dll new file mode 100644 index 0000000..d1edbd8 Binary files /dev/null and b/ThirdPerson/obj/Release/net6.0/ref/Skopje.ThirdPerson.dll differ diff --git a/ThirdPerson/obj/Release/net6.0/refint/Skopje.ThirdPerson.dll b/ThirdPerson/obj/Release/net6.0/refint/Skopje.ThirdPerson.dll new file mode 100644 index 0000000..d1edbd8 Binary files /dev/null and b/ThirdPerson/obj/Release/net6.0/refint/Skopje.ThirdPerson.dll differ diff --git a/ThirdPerson/obj/ThirdPersonPlugin.csproj.nuget.dgspec.json b/ThirdPerson/obj/ThirdPersonPlugin.csproj.nuget.dgspec.json new file mode 100644 index 0000000..ff38810 --- /dev/null +++ b/ThirdPerson/obj/ThirdPersonPlugin.csproj.nuget.dgspec.json @@ -0,0 +1,85 @@ +{ + "format": 1, + "restore": { + "c:\\Users\\andre\\Desktop\\SkopjeMods\\ThirdPerson\\ThirdPersonPlugin.csproj": {} + }, + "projects": { + "c:\\Users\\andre\\Desktop\\SkopjeMods\\ThirdPerson\\ThirdPersonPlugin.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "c:\\Users\\andre\\Desktop\\SkopjeMods\\ThirdPerson\\ThirdPersonPlugin.csproj", + "projectName": "Skopje.ThirdPerson", + "projectPath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\ThirdPerson\\ThirdPersonPlugin.csproj", + "packagesPath": "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget", + "outputPath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\ThirdPerson\\obj\\", + "projectStyle": "PackageReference", + "configFilePaths": [ + "C:\\Users\\andre\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net6.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net6.0": { + "framework": "net6.0", + "targetAlias": "net6.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "10.0.300" + }, + "frameworks": { + "net6.0": { + "framework": "net6.0", + "targetAlias": "net6.0", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[6.0.36, 6.0.36]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[6.0.36, 6.0.36]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[6.0.36, 6.0.36]" + } + ], + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.301\\RuntimeIdentifierGraph.json" + } + } + } + } +} \ No newline at end of file diff --git a/ThirdPerson/obj/ThirdPersonPlugin.csproj.nuget.g.props b/ThirdPerson/obj/ThirdPersonPlugin.csproj.nuget.g.props new file mode 100644 index 0000000..ba0d2cb --- /dev/null +++ b/ThirdPerson/obj/ThirdPersonPlugin.csproj.nuget.g.props @@ -0,0 +1,15 @@ + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + $(UserProfile)\AppData\Local\Temp\cursor-sandbox-cache\a0404811fc6e51c4c5761fd11591789f\nuget + C:\Users\andre\AppData\Local\Temp\cursor-sandbox-cache\a0404811fc6e51c4c5761fd11591789f\nuget + PackageReference + 7.0.0 + + + + + \ No newline at end of file diff --git a/ThirdPerson/obj/ThirdPersonPlugin.csproj.nuget.g.targets b/ThirdPerson/obj/ThirdPersonPlugin.csproj.nuget.g.targets new file mode 100644 index 0000000..3dc06ef --- /dev/null +++ b/ThirdPerson/obj/ThirdPersonPlugin.csproj.nuget.g.targets @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/ThirdPerson/obj/project.assets.json b/ThirdPerson/obj/project.assets.json new file mode 100644 index 0000000..d0ce101 --- /dev/null +++ b/ThirdPerson/obj/project.assets.json @@ -0,0 +1,90 @@ +{ + "version": 4, + "targets": { + "net6.0": {} + }, + "libraries": {}, + "projectFileDependencyGroups": { + "net6.0": [] + }, + "packageFolders": { + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget": {} + }, + "project": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "c:\\Users\\andre\\Desktop\\SkopjeMods\\ThirdPerson\\ThirdPersonPlugin.csproj", + "projectName": "Skopje.ThirdPerson", + "projectPath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\ThirdPerson\\ThirdPersonPlugin.csproj", + "packagesPath": "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget", + "outputPath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\ThirdPerson\\obj\\", + "projectStyle": "PackageReference", + "configFilePaths": [ + "C:\\Users\\andre\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net6.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net6.0": { + "framework": "net6.0", + "targetAlias": "net6.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "10.0.300" + }, + "frameworks": { + "net6.0": { + "framework": "net6.0", + "targetAlias": "net6.0", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[6.0.36, 6.0.36]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[6.0.36, 6.0.36]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[6.0.36, 6.0.36]" + } + ], + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.301\\RuntimeIdentifierGraph.json" + } + } + } +} \ No newline at end of file diff --git a/ThirdPerson/obj/project.nuget.cache b/ThirdPerson/obj/project.nuget.cache new file mode 100644 index 0000000..16da8be --- /dev/null +++ b/ThirdPerson/obj/project.nuget.cache @@ -0,0 +1,12 @@ +{ + "version": 2, + "dgSpecHash": "5HEtZERsN5U=", + "success": true, + "projectFilePath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\ThirdPerson\\ThirdPersonPlugin.csproj", + "expectedPackageFiles": [ + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\microsoft.netcore.app.ref\\6.0.36\\microsoft.netcore.app.ref.6.0.36.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\microsoft.windowsdesktop.app.ref\\6.0.36\\microsoft.windowsdesktop.app.ref.6.0.36.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\microsoft.aspnetcore.app.ref\\6.0.36\\microsoft.aspnetcore.app.ref.6.0.36.nupkg.sha512" + ], + "logs": [] +} \ No newline at end of file diff --git a/_fix/ApiCheck/ApiCheck.csproj b/_fix/ApiCheck/ApiCheck.csproj new file mode 100644 index 0000000..296188d --- /dev/null +++ b/_fix/ApiCheck/ApiCheck.csproj @@ -0,0 +1,16 @@ + + + + Exe + net8.0 + enable + enable + + + + + + + + + diff --git a/_fix/ApiCheck/Program.cs b/_fix/ApiCheck/Program.cs new file mode 100644 index 0000000..48f75c2 --- /dev/null +++ b/_fix/ApiCheck/Program.cs @@ -0,0 +1,274 @@ +using System.Reflection; +using System.Reflection.Metadata; +using System.Reflection.Metadata.Ecma335; +using System.Reflection.PortableExecutable; + +var built = new[] +{ + @"c:\Users\andre\Desktop\SkopjeMods\_fix\Il2CppInterop\bin\Il2CppInterop.Runtime\net6.0\Il2CppInterop.Runtime.dll", + @"c:\Users\andre\Desktop\SkopjeMods\_fix\Il2CppInterop\bin\Il2CppInterop.Common\netstandard2.0\Il2CppInterop.Common.dll", +}; +var builtMembers = new Dictionary>(StringComparer.Ordinal); +foreach (var dll in built) +{ + using var fs = File.OpenRead(dll); + using var pe = new PEReader(fs); + var reader = pe.GetMetadataReader(); + var asm = reader.GetAssemblyDefinition(); + Console.WriteLine("BUILT " + Path.GetFileName(dll) + " " + asm.Version); + foreach (var ah in reader.AssemblyReferences) + { + var a = reader.GetAssemblyReference(ah); + var n = reader.GetString(a.Name); + Console.WriteLine(" ref " + n + " " + a.Version); + } + foreach (var th in reader.TypeDefinitions) + { + var t = reader.GetTypeDefinition(th); + var name = reader.GetString(t.Namespace) + "." + reader.GetString(t.Name); + var set = new HashSet(StringComparer.Ordinal); + foreach (var mh in t.GetMethods()) set.Add(reader.GetString(reader.GetMethodDefinition(mh).Name)); + foreach (var fh in t.GetFields()) set.Add(reader.GetString(reader.GetFieldDefinition(fh).Name)); + builtMembers[name] = set; + } +} + +foreach (var caller in new[] +{ + @"D:\SteamLibrary\steamapps\common\Skopje83\BepInEx\core\Il2CppInterop.HarmonySupport.dll", + @"D:\SteamLibrary\steamapps\common\Skopje83\BepInEx\core\BepInEx.Unity.IL2CPP.dll", + @"D:\SteamLibrary\steamapps\common\Skopje83\BepInEx\plugins\Skopje.BossHealth.dll", +}) +{ + using var fs = File.OpenRead(caller); + using var pe = new PEReader(fs); + var reader = pe.GetMetadataReader(); + int miss = 0; + foreach (var mh in reader.MemberReferences) + { + var m = reader.GetMemberReference(mh); + if (m.Parent.Kind != HandleKind.TypeReference) continue; + var tr = reader.GetTypeReference((TypeReferenceHandle)m.Parent); + if (tr.ResolutionScope.Kind != HandleKind.AssemblyReference) continue; + var scope = reader.GetString(reader.GetAssemblyReference((AssemblyReferenceHandle)tr.ResolutionScope).Name); + if (scope != "Il2CppInterop.Runtime" && scope != "Il2CppInterop.Common") continue; + var typeName = reader.GetString(tr.Namespace) + "." + reader.GetString(tr.Name); + var member = reader.GetString(m.Name); + if (!builtMembers.TryGetValue(typeName, out var set) || !set.Contains(member)) + { + miss++; + Console.WriteLine("MISS " + Path.GetFileName(caller) + " " + typeName + "::" + member); + } + } + Console.WriteLine(Path.GetFileName(caller) + " missing " + miss); +} +return; + +var bep = @"D:\SteamLibrary\steamapps\common\Skopje83\BepInEx\core\BepInEx.Unity.IL2CPP.dll"; +var newDlls = new[] +{ + @"C:\Users\andre\AppData\Local\Temp\cursor-sandbox-cache\a0404811fc6e51c4c5761fd11591789f\nuget\il2cppinterop.runtime\1.5.3\lib\net6.0\Il2CppInterop.Runtime.dll", + @"C:\Users\andre\AppData\Local\Temp\cursor-sandbox-cache\a0404811fc6e51c4c5761fd11591789f\nuget\il2cppinterop.common\1.5.3\lib\netstandard2.0\Il2CppInterop.Common.dll", + @"C:\Users\andre\AppData\Local\Temp\cursor-sandbox-cache\a0404811fc6e51c4c5761fd11591789f\nuget\il2cppinterop.harmonysupport\1.5.3\lib\net6.0\Il2CppInterop.HarmonySupport.dll", +}; + +var members = new Dictionary>(StringComparer.Ordinal); +foreach (var dll in newDlls) +{ + if (!File.Exists(dll)) { Console.WriteLine("MISSING " + dll); continue; } + using var fs = File.OpenRead(dll); + using var pe = new PEReader(fs); + var reader = pe.GetMetadataReader(); + foreach (var th in reader.TypeDefinitions) + { + var t = reader.GetTypeDefinition(th); + var name = reader.GetString(t.Namespace) + "." + reader.GetString(t.Name); + var set = new HashSet(StringComparer.Ordinal); + foreach (var mh in t.GetMethods()) + { + var m = reader.GetMethodDefinition(mh); + set.Add(reader.GetString(m.Name)); + } + foreach (var fh in t.GetFields()) + set.Add(reader.GetString(reader.GetFieldDefinition(fh).Name)); + members[name] = set; + } +} + +using var bfs = File.OpenRead(bep); +using var bpe = new PEReader(bfs); +var br = bpe.GetMetadataReader(); +int missing = 0; +foreach (var mh in br.MemberReferences) +{ + var m = br.GetMemberReference(mh); + if (m.Parent.Kind != HandleKind.TypeReference) continue; + var tr = br.GetTypeReference((TypeReferenceHandle)m.Parent); + if (tr.ResolutionScope.Kind != HandleKind.AssemblyReference) continue; + var scope = br.GetString(br.GetAssemblyReference((AssemblyReferenceHandle)tr.ResolutionScope).Name); + if (!scope.StartsWith("Il2CppInterop")) continue; + var typeName = br.GetString(tr.Namespace) + "." + br.GetString(tr.Name); + var member = br.GetString(m.Name); + if (!members.TryGetValue(typeName, out var set) || !set.Contains(member)) + { + missing++; + Console.WriteLine($"MISSING {scope} {typeName}::{member}"); + } +} +Console.WriteLine("bepinex missing count " + missing); + +var interopDir = @"D:\SteamLibrary\steamapps\common\Skopje83\BepInEx\interop"; +var seen = new HashSet(StringComparer.Ordinal); +int interopMissing = 0; +foreach (var file in Directory.EnumerateFiles(interopDir, "*.dll")) +{ + using var fs = File.OpenRead(file); + using var pe = new PEReader(fs); + if (!pe.HasMetadata) continue; + var reader = pe.GetMetadataReader(); + foreach (var mh in reader.MemberReferences) + { + var m = reader.GetMemberReference(mh); + if (m.Parent.Kind != HandleKind.TypeReference) continue; + var tr = reader.GetTypeReference((TypeReferenceHandle)m.Parent); + if (tr.ResolutionScope.Kind != HandleKind.AssemblyReference) continue; + var scope = reader.GetString(reader.GetAssemblyReference((AssemblyReferenceHandle)tr.ResolutionScope).Name); + if (scope != "Il2CppInterop.Runtime" && scope != "Il2CppInterop.Common") continue; + var typeName = reader.GetString(tr.Namespace) + "." + reader.GetString(tr.Name); + var member = reader.GetString(m.Name); + var key = typeName + "::" + member; + if (!seen.Add(key)) continue; + if (!members.TryGetValue(typeName, out var set) || !set.Contains(member)) + { + interopMissing++; + if (interopMissing <= 40) + { + var raw = reader.GetBlobReader(m.Signature); + Console.WriteLine("INTEROP MISSING " + key + " in " + Path.GetFileName(file) + " sig=" + Convert.ToHexString(raw.ReadBytes(raw.Length))); + } + } + } +} +Console.WriteLine("interop missing count " + interopMissing); + +static string ReadType(MetadataReader reader, BlobReader blob) +{ + var et = blob.ReadByte(); + switch (et) + { + case 0x01: return "void"; + case 0x02: return "bool"; + case 0x03: return "char"; + case 0x04: return "sbyte"; + case 0x05: return "byte"; + case 0x06: return "short"; + case 0x07: return "ushort"; + case 0x08: return "int"; + case 0x09: return "uint"; + case 0x0A: return "long"; + case 0x0B: return "ulong"; + case 0x0C: return "float"; + case 0x0D: return "double"; + case 0x0E: return "string"; + case 0x0F: return ReadType(reader, blob) + "*"; + case 0x10: return ReadType(reader, blob) + "&"; + case 0x18: return "nint"; + case 0x19: return "nuint"; + case 0x1C: return "object"; + case 0x1D: return ReadType(reader, blob) + "[]"; + case 0x13: return "!!" + blob.ReadCompressedInteger(); + case 0x1E: return "!" + blob.ReadCompressedInteger(); + case 0x11: + case 0x12: + { + var coded = blob.ReadCompressedInteger(); + var index = coded >> 2; + var tag = coded & 3; + if (tag == 0) + { + var td = reader.GetTypeDefinition(MetadataTokens.TypeDefinitionHandle(index)); + return reader.GetString(td.Namespace) + "." + reader.GetString(td.Name); + } + if (tag == 1) + { + var tr = reader.GetTypeReference(MetadataTokens.TypeReferenceHandle(index)); + return reader.GetString(tr.Namespace) + "." + reader.GetString(tr.Name); + } + if (tag == 2) + { + return "typespec" + index; + } + return "type" + tag + ":" + index; + } + case 0x15: + { + var g = ReadType(reader, blob); + var n = blob.ReadCompressedInteger(); + var args = new List(); + for (int i = 0; i < n; i++) args.Add(ReadType(reader, blob)); + return g + "<" + string.Join(",", args) + ">"; + } + default: return "et" + et.ToString("X2"); + } +} + +var runtimePath = @"D:\SteamLibrary\steamapps\common\Skopje83\BepInEx\core\Il2CppInterop.Runtime.dll"; +using (var fs = File.OpenRead(runtimePath)) +using (var pe = new PEReader(fs)) +{ + var reader = pe.GetMetadataReader(); + foreach (var th in reader.TypeDefinitions) + { + var t = reader.GetTypeDefinition(th); + foreach (var mh in t.GetMethods()) + { + var m = reader.GetMethodDefinition(mh); + if (reader.GetString(m.Name) != "WrapNativeGenericArrayPointer") continue; + var raw = reader.GetBlobReader(m.Signature); + Console.WriteLine("OLD RAW " + Convert.ToHexString(raw.ReadBytes(raw.Length)) + " parent=" + reader.GetString(t.Name)); + var blob = reader.GetBlobReader(m.Signature); + var cc = blob.ReadByte(); + int gen = 0; + if ((cc & 0x10) != 0) gen = blob.ReadCompressedInteger(); + var pc = blob.ReadCompressedInteger(); + var ret = ReadType(reader, blob); + var ps = new List(); + for (int i = 0; i < pc; i++) ps.Add(ReadType(reader, blob)); + Console.WriteLine($"OLD {reader.GetString(t.Namespace)}.{reader.GetString(t.Name)} gen={gen} {ret} ({string.Join(", ", ps)})"); + } + } +} + +var sample = Directory.GetFiles(@"D:\SteamLibrary\steamapps\common\Skopje83\BepInEx\interop", "UnityEngine.CoreModule.dll").First(); +using (var fs = File.OpenRead(sample)) +using (var pe = new PEReader(fs)) +{ + var reader = pe.GetMetadataReader(); + foreach (var mh in reader.MemberReferences) + { + var m = reader.GetMemberReference(mh); + if (reader.GetString(m.Name) != "WrapNativeGenericArrayPointer") continue; + string parent; + if (m.Parent.Kind == HandleKind.TypeReference) + { + var tr = reader.GetTypeReference((TypeReferenceHandle)m.Parent); + parent = "typeref " + reader.GetString(tr.Namespace) + "." + reader.GetString(tr.Name); + } + else parent = m.Parent.Kind.ToString(); + var raw = reader.GetBlobReader(m.Signature); + var bytes = raw.ReadBytes(raw.Length); + Console.WriteLine("REF parent=" + parent + " sig=" + Convert.ToHexString(bytes)); + } +} +foreach (var dll in newDlls) +{ + using var fs = File.OpenRead(dll); + using var pe = new PEReader(fs); + var reader = pe.GetMetadataReader(); + Console.WriteLine("REFS " + Path.GetFileName(dll)); + foreach (var ah in reader.AssemblyReferences) + { + var a = reader.GetAssemblyReference(ah); + Console.WriteLine(" " + reader.GetString(a.Name) + " " + a.Version); + } +} diff --git a/_fix/ApiCheck/bin/Release/net8.0/0Harmony.dll b/_fix/ApiCheck/bin/Release/net8.0/0Harmony.dll new file mode 100644 index 0000000..c608bd8 Binary files /dev/null and b/_fix/ApiCheck/bin/Release/net8.0/0Harmony.dll differ diff --git a/_fix/ApiCheck/bin/Release/net8.0/ApiCheck.deps.json b/_fix/ApiCheck/bin/Release/net8.0/ApiCheck.deps.json new file mode 100644 index 0000000..5924421 --- /dev/null +++ b/_fix/ApiCheck/bin/Release/net8.0/ApiCheck.deps.json @@ -0,0 +1,197 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v8.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v8.0": { + "ApiCheck/1.0.0": { + "dependencies": { + "Il2CppInterop.Common": "1.5.3", + "Il2CppInterop.HarmonySupport": "1.5.3", + "Il2CppInterop.Runtime": "1.5.3" + }, + "runtime": { + "ApiCheck.dll": {} + } + }, + "HarmonyX/2.10.0": { + "dependencies": { + "MonoMod.RuntimeDetour": "22.3.23.4" + }, + "runtime": { + "lib/netstandard2.0/0Harmony.dll": { + "assemblyVersion": "2.10.0.0", + "fileVersion": "2.10.0.0" + } + } + }, + "Iced/1.17.0": { + "runtime": { + "lib/netstandard2.1/Iced.dll": { + "assemblyVersion": "1.17.0.0", + "fileVersion": "1.17.0.0" + } + } + }, + "Il2CppInterop.Common/1.5.3": { + "dependencies": { + "Iced": "1.17.0", + "Microsoft.Extensions.Logging.Abstractions": "6.0.1" + }, + "runtime": { + "lib/netstandard2.0/Il2CppInterop.Common.dll": { + "assemblyVersion": "1.5.3.0", + "fileVersion": "1.5.3.0" + } + } + }, + "Il2CppInterop.HarmonySupport/1.5.3": { + "dependencies": { + "HarmonyX": "2.10.0", + "Il2CppInterop.Runtime": "1.5.3" + }, + "runtime": { + "lib/net6.0/Il2CppInterop.HarmonySupport.dll": { + "assemblyVersion": "1.5.3.0", + "fileVersion": "1.5.3.0" + } + } + }, + "Il2CppInterop.Runtime/1.5.3": { + "dependencies": { + "Iced": "1.17.0", + "Il2CppInterop.Common": "1.5.3" + }, + "runtime": { + "lib/net6.0/Il2CppInterop.Runtime.dll": { + "assemblyVersion": "1.5.3.0", + "fileVersion": "1.5.3.0" + } + } + }, + "Microsoft.Extensions.Logging.Abstractions/6.0.1": { + "runtime": { + "lib/net6.0/Microsoft.Extensions.Logging.Abstractions.dll": { + "assemblyVersion": "6.0.0.0", + "fileVersion": "6.0.322.12309" + } + } + }, + "Mono.Cecil/0.11.4": { + "runtime": { + "lib/netstandard2.0/Mono.Cecil.Mdb.dll": { + "assemblyVersion": "0.11.4.0", + "fileVersion": "0.11.4.0" + }, + "lib/netstandard2.0/Mono.Cecil.Pdb.dll": { + "assemblyVersion": "0.11.4.0", + "fileVersion": "0.11.4.0" + }, + "lib/netstandard2.0/Mono.Cecil.Rocks.dll": { + "assemblyVersion": "0.11.4.0", + "fileVersion": "0.11.4.0" + }, + "lib/netstandard2.0/Mono.Cecil.dll": { + "assemblyVersion": "0.11.4.0", + "fileVersion": "0.11.4.0" + } + } + }, + "MonoMod.RuntimeDetour/22.3.23.4": { + "dependencies": { + "Mono.Cecil": "0.11.4", + "MonoMod.Utils": "22.3.23.4" + }, + "runtime": { + "lib/net5.0/MonoMod.RuntimeDetour.dll": { + "assemblyVersion": "22.3.23.4", + "fileVersion": "22.3.23.4" + } + } + }, + "MonoMod.Utils/22.3.23.4": { + "dependencies": { + "Mono.Cecil": "0.11.4" + }, + "runtime": { + "lib/net5.0/MonoMod.Utils.dll": { + "assemblyVersion": "22.3.23.4", + "fileVersion": "22.3.23.4" + } + } + } + } + }, + "libraries": { + "ApiCheck/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "HarmonyX/2.10.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-4ayiy/dlCiW86K2N7Jvbf+VpI5wvP7dncv/6oRmfwRi32UCmCRzCGzsxdMfzJZkp6/26oBW+DrD8vi4UejzVAg==", + "path": "harmonyx/2.10.0", + "hashPath": "harmonyx.2.10.0.nupkg.sha512" + }, + "Iced/1.17.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-8x+HCVTl/HHTGpscH3vMBhV8sknN/muZFw9s3TsI8SA6+c43cOTCi2+jE4KsU8pNLbJ++iF2ZFcpcXHXtDglnw==", + "path": "iced/1.17.0", + "hashPath": "iced.1.17.0.nupkg.sha512" + }, + "Il2CppInterop.Common/1.5.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ziFbpzgXtqTvIwpfva9z3vlhjXrKYHfXDF5barssiFcc0YdFkQyT8FlIVQzDnycVdgPcKjzXD7goFaWddKg/KA==", + "path": "il2cppinterop.common/1.5.3", + "hashPath": "il2cppinterop.common.1.5.3.nupkg.sha512" + }, + "Il2CppInterop.HarmonySupport/1.5.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-kap8a2rkCpKBenaHQAJqGofLOAOyBnHnlZmTMCEwlwFODXjNv+sQHmlfatl7OYvZXdoIJnZErlOl/8YEk67XaQ==", + "path": "il2cppinterop.harmonysupport/1.5.3", + "hashPath": "il2cppinterop.harmonysupport.1.5.3.nupkg.sha512" + }, + "Il2CppInterop.Runtime/1.5.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-kV7UJ9Ra7kHAmFguM2DcD8CBiqM2PYSAUqb/0OajgrAw8yJKxSFmzOjcu653ZMLJ+kVi0XXEO/+uwEspKGCbLQ==", + "path": "il2cppinterop.runtime/1.5.3", + "hashPath": "il2cppinterop.runtime.1.5.3.nupkg.sha512" + }, + "Microsoft.Extensions.Logging.Abstractions/6.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-dzB2Cgg+JmrouhjkcQGzSFjjvpwlq353i8oBQO2GWNjCXSzhbtBRUf28HSauWe7eib3wYOdb3tItdjRwAdwCSg==", + "path": "microsoft.extensions.logging.abstractions/6.0.1", + "hashPath": "microsoft.extensions.logging.abstractions.6.0.1.nupkg.sha512" + }, + "Mono.Cecil/0.11.4": { + "type": "package", + "serviceable": true, + "sha512": "sha512-IC1h5g0NeJGHIUgzM1P82ld57knhP0IcQfrYITDPXlNpMYGUrsG5TxuaWTjaeqDNQMBDNZkB8L0rBnwsY6JHuQ==", + "path": "mono.cecil/0.11.4", + "hashPath": "mono.cecil.0.11.4.nupkg.sha512" + }, + "MonoMod.RuntimeDetour/22.3.23.4": { + "type": "package", + "serviceable": true, + "sha512": "sha512-2nwwFfwYDSgUzhi+1MutTg1gyUgXoMS4+E04vHOFp84Vxs0oBkkn4mGAfhkr272y0j3vqIBzo2aT9pXRlCd/ZA==", + "path": "monomod.runtimedetour/22.3.23.4", + "hashPath": "monomod.runtimedetour.22.3.23.4.nupkg.sha512" + }, + "MonoMod.Utils/22.3.23.4": { + "type": "package", + "serviceable": true, + "sha512": "sha512-xso1rHFfcsPy3X1kj2uDk115z9tLTMxPEnba/zdNB6WazvrLRWGPuV9d4hHwr1iVz5quTFlZCbLBlE5fS2TqLA==", + "path": "monomod.utils/22.3.23.4", + "hashPath": "monomod.utils.22.3.23.4.nupkg.sha512" + } + } +} \ No newline at end of file diff --git a/_fix/ApiCheck/bin/Release/net8.0/ApiCheck.dll b/_fix/ApiCheck/bin/Release/net8.0/ApiCheck.dll new file mode 100644 index 0000000..5eb610f Binary files /dev/null and b/_fix/ApiCheck/bin/Release/net8.0/ApiCheck.dll differ diff --git a/_fix/ApiCheck/bin/Release/net8.0/ApiCheck.exe b/_fix/ApiCheck/bin/Release/net8.0/ApiCheck.exe new file mode 100644 index 0000000..d26e682 Binary files /dev/null and b/_fix/ApiCheck/bin/Release/net8.0/ApiCheck.exe differ diff --git a/_fix/ApiCheck/bin/Release/net8.0/ApiCheck.pdb b/_fix/ApiCheck/bin/Release/net8.0/ApiCheck.pdb new file mode 100644 index 0000000..9bdcf40 Binary files /dev/null and b/_fix/ApiCheck/bin/Release/net8.0/ApiCheck.pdb differ diff --git a/_fix/ApiCheck/bin/Release/net8.0/ApiCheck.runtimeconfig.json b/_fix/ApiCheck/bin/Release/net8.0/ApiCheck.runtimeconfig.json new file mode 100644 index 0000000..d784515 --- /dev/null +++ b/_fix/ApiCheck/bin/Release/net8.0/ApiCheck.runtimeconfig.json @@ -0,0 +1,13 @@ +{ + "runtimeOptions": { + "tfm": "net8.0", + "framework": { + "name": "Microsoft.NETCore.App", + "version": "8.0.0" + }, + "configProperties": { + "System.Reflection.Metadata.MetadataUpdater.IsSupported": false, + "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false + } + } +} \ No newline at end of file diff --git a/_fix/ApiCheck/bin/Release/net8.0/Iced.dll b/_fix/ApiCheck/bin/Release/net8.0/Iced.dll new file mode 100644 index 0000000..bc4d149 Binary files /dev/null and b/_fix/ApiCheck/bin/Release/net8.0/Iced.dll differ diff --git a/_fix/ApiCheck/bin/Release/net8.0/Il2CppInterop.Common.dll b/_fix/ApiCheck/bin/Release/net8.0/Il2CppInterop.Common.dll new file mode 100644 index 0000000..862f346 Binary files /dev/null and b/_fix/ApiCheck/bin/Release/net8.0/Il2CppInterop.Common.dll differ diff --git a/_fix/ApiCheck/bin/Release/net8.0/Il2CppInterop.HarmonySupport.dll b/_fix/ApiCheck/bin/Release/net8.0/Il2CppInterop.HarmonySupport.dll new file mode 100644 index 0000000..cd36e93 Binary files /dev/null and b/_fix/ApiCheck/bin/Release/net8.0/Il2CppInterop.HarmonySupport.dll differ diff --git a/_fix/ApiCheck/bin/Release/net8.0/Il2CppInterop.Runtime.dll b/_fix/ApiCheck/bin/Release/net8.0/Il2CppInterop.Runtime.dll new file mode 100644 index 0000000..9097445 Binary files /dev/null and b/_fix/ApiCheck/bin/Release/net8.0/Il2CppInterop.Runtime.dll differ diff --git a/_fix/ApiCheck/bin/Release/net8.0/Microsoft.Extensions.Logging.Abstractions.dll b/_fix/ApiCheck/bin/Release/net8.0/Microsoft.Extensions.Logging.Abstractions.dll new file mode 100644 index 0000000..a42ea83 Binary files /dev/null and b/_fix/ApiCheck/bin/Release/net8.0/Microsoft.Extensions.Logging.Abstractions.dll differ diff --git a/_fix/ApiCheck/bin/Release/net8.0/Mono.Cecil.Mdb.dll b/_fix/ApiCheck/bin/Release/net8.0/Mono.Cecil.Mdb.dll new file mode 100644 index 0000000..c22998b Binary files /dev/null and b/_fix/ApiCheck/bin/Release/net8.0/Mono.Cecil.Mdb.dll differ diff --git a/_fix/ApiCheck/bin/Release/net8.0/Mono.Cecil.Pdb.dll b/_fix/ApiCheck/bin/Release/net8.0/Mono.Cecil.Pdb.dll new file mode 100644 index 0000000..0d396b8 Binary files /dev/null and b/_fix/ApiCheck/bin/Release/net8.0/Mono.Cecil.Pdb.dll differ diff --git a/_fix/ApiCheck/bin/Release/net8.0/Mono.Cecil.Rocks.dll b/_fix/ApiCheck/bin/Release/net8.0/Mono.Cecil.Rocks.dll new file mode 100644 index 0000000..785c186 Binary files /dev/null and b/_fix/ApiCheck/bin/Release/net8.0/Mono.Cecil.Rocks.dll differ diff --git a/_fix/ApiCheck/bin/Release/net8.0/Mono.Cecil.dll b/_fix/ApiCheck/bin/Release/net8.0/Mono.Cecil.dll new file mode 100644 index 0000000..9b78a39 Binary files /dev/null and b/_fix/ApiCheck/bin/Release/net8.0/Mono.Cecil.dll differ diff --git a/_fix/ApiCheck/bin/Release/net8.0/MonoMod.RuntimeDetour.dll b/_fix/ApiCheck/bin/Release/net8.0/MonoMod.RuntimeDetour.dll new file mode 100644 index 0000000..15830e4 Binary files /dev/null and b/_fix/ApiCheck/bin/Release/net8.0/MonoMod.RuntimeDetour.dll differ diff --git a/_fix/ApiCheck/bin/Release/net8.0/MonoMod.Utils.dll b/_fix/ApiCheck/bin/Release/net8.0/MonoMod.Utils.dll new file mode 100644 index 0000000..2221517 Binary files /dev/null and b/_fix/ApiCheck/bin/Release/net8.0/MonoMod.Utils.dll differ diff --git a/_fix/ApiCheck/obj/ApiCheck.csproj.nuget.dgspec.json b/_fix/ApiCheck/obj/ApiCheck.csproj.nuget.dgspec.json new file mode 100644 index 0000000..a3e8a86 --- /dev/null +++ b/_fix/ApiCheck/obj/ApiCheck.csproj.nuget.dgspec.json @@ -0,0 +1,103 @@ +{ + "format": 1, + "restore": { + "c:\\Users\\andre\\Desktop\\SkopjeMods\\_fix\\ApiCheck\\ApiCheck.csproj": {} + }, + "projects": { + "c:\\Users\\andre\\Desktop\\SkopjeMods\\_fix\\ApiCheck\\ApiCheck.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "c:\\Users\\andre\\Desktop\\SkopjeMods\\_fix\\ApiCheck\\ApiCheck.csproj", + "projectName": "ApiCheck", + "projectPath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\_fix\\ApiCheck\\ApiCheck.csproj", + "packagesPath": "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget", + "outputPath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\_fix\\ApiCheck\\obj\\", + "projectStyle": "PackageReference", + "configFilePaths": [ + "C:\\Users\\andre\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net8.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net8.0": { + "framework": "net8.0", + "targetAlias": "net8.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "10.0.300" + }, + "frameworks": { + "net8.0": { + "framework": "net8.0", + "targetAlias": "net8.0", + "dependencies": { + "Il2CppInterop.Common": { + "target": "Package", + "version": "[1.5.3, )" + }, + "Il2CppInterop.HarmonySupport": { + "target": "Package", + "version": "[1.5.3, )" + }, + "Il2CppInterop.Runtime": { + "target": "Package", + "version": "[1.5.3, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[8.0.28, 8.0.28]" + }, + { + "name": "Microsoft.NETCore.App.Host.win-x64", + "version": "[8.0.28, 8.0.28]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[8.0.28, 8.0.28]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[8.0.28, 8.0.28]" + } + ], + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.301/PortableRuntimeIdentifierGraph.json" + } + } + } + } +} \ No newline at end of file diff --git a/_fix/ApiCheck/obj/ApiCheck.csproj.nuget.g.props b/_fix/ApiCheck/obj/ApiCheck.csproj.nuget.g.props new file mode 100644 index 0000000..ba0d2cb --- /dev/null +++ b/_fix/ApiCheck/obj/ApiCheck.csproj.nuget.g.props @@ -0,0 +1,15 @@ + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + $(UserProfile)\AppData\Local\Temp\cursor-sandbox-cache\a0404811fc6e51c4c5761fd11591789f\nuget + C:\Users\andre\AppData\Local\Temp\cursor-sandbox-cache\a0404811fc6e51c4c5761fd11591789f\nuget + PackageReference + 7.0.0 + + + + + \ No newline at end of file diff --git a/_fix/ApiCheck/obj/ApiCheck.csproj.nuget.g.targets b/_fix/ApiCheck/obj/ApiCheck.csproj.nuget.g.targets new file mode 100644 index 0000000..3dc06ef --- /dev/null +++ b/_fix/ApiCheck/obj/ApiCheck.csproj.nuget.g.targets @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/_fix/ApiCheck/obj/Release/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs b/_fix/ApiCheck/obj/Release/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs new file mode 100644 index 0000000..2217181 --- /dev/null +++ b/_fix/ApiCheck/obj/Release/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")] diff --git a/_fix/ApiCheck/obj/Release/net8.0/ApiCheck.AssemblyInfo.cs b/_fix/ApiCheck/obj/Release/net8.0/ApiCheck.AssemblyInfo.cs new file mode 100644 index 0000000..5d4ede3 --- /dev/null +++ b/_fix/ApiCheck/obj/Release/net8.0/ApiCheck.AssemblyInfo.cs @@ -0,0 +1,22 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("ApiCheck")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] +[assembly: System.Reflection.AssemblyProductAttribute("ApiCheck")] +[assembly: System.Reflection.AssemblyTitleAttribute("ApiCheck")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/_fix/ApiCheck/obj/Release/net8.0/ApiCheck.AssemblyInfoInputs.cache b/_fix/ApiCheck/obj/Release/net8.0/ApiCheck.AssemblyInfoInputs.cache new file mode 100644 index 0000000..1d02be1 --- /dev/null +++ b/_fix/ApiCheck/obj/Release/net8.0/ApiCheck.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +ddec6d401af3e0a46562f962985ab123c6644cfc16f1e8d616a7694302213df9 diff --git a/_fix/ApiCheck/obj/Release/net8.0/ApiCheck.GeneratedMSBuildEditorConfig.editorconfig b/_fix/ApiCheck/obj/Release/net8.0/ApiCheck.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..88a46d8 --- /dev/null +++ b/_fix/ApiCheck/obj/Release/net8.0/ApiCheck.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,18 @@ +is_global = true +build_property.TargetFramework = net8.0 +build_property.TargetFrameworkIdentifier = .NETCoreApp +build_property.TargetFrameworkVersion = v8.0 +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property.EntryPointFilePath = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = ApiCheck +build_property.ProjectDir = c:\Users\andre\Desktop\SkopjeMods\_fix\ApiCheck\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.EffectiveAnalysisLevelStyle = 8.0 +build_property.EnableCodeStyleSeverity = diff --git a/_fix/ApiCheck/obj/Release/net8.0/ApiCheck.GlobalUsings.g.cs b/_fix/ApiCheck/obj/Release/net8.0/ApiCheck.GlobalUsings.g.cs new file mode 100644 index 0000000..d12bcbc --- /dev/null +++ b/_fix/ApiCheck/obj/Release/net8.0/ApiCheck.GlobalUsings.g.cs @@ -0,0 +1,8 @@ +// +global using System; +global using System.Collections.Generic; +global using System.IO; +global using System.Linq; +global using System.Net.Http; +global using System.Threading; +global using System.Threading.Tasks; diff --git a/_fix/ApiCheck/obj/Release/net8.0/ApiCheck.assets.cache b/_fix/ApiCheck/obj/Release/net8.0/ApiCheck.assets.cache new file mode 100644 index 0000000..92c3a72 Binary files /dev/null and b/_fix/ApiCheck/obj/Release/net8.0/ApiCheck.assets.cache differ diff --git a/_fix/ApiCheck/obj/Release/net8.0/ApiCheck.csproj.AssemblyReference.cache b/_fix/ApiCheck/obj/Release/net8.0/ApiCheck.csproj.AssemblyReference.cache new file mode 100644 index 0000000..cd8d500 Binary files /dev/null and b/_fix/ApiCheck/obj/Release/net8.0/ApiCheck.csproj.AssemblyReference.cache differ diff --git a/_fix/ApiCheck/obj/Release/net8.0/ApiCheck.csproj.CoreCompileInputs.cache b/_fix/ApiCheck/obj/Release/net8.0/ApiCheck.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..d57ec63 --- /dev/null +++ b/_fix/ApiCheck/obj/Release/net8.0/ApiCheck.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +f21698e49e2d948e7c128bc3a9cf45254d6e00eed39713bbb1c3518681676944 diff --git a/_fix/ApiCheck/obj/Release/net8.0/ApiCheck.csproj.FileListAbsolute.txt b/_fix/ApiCheck/obj/Release/net8.0/ApiCheck.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..89f994d --- /dev/null +++ b/_fix/ApiCheck/obj/Release/net8.0/ApiCheck.csproj.FileListAbsolute.txt @@ -0,0 +1,28 @@ +c:\Users\andre\Desktop\SkopjeMods\_fix\ApiCheck\bin\Release\net8.0\ApiCheck.exe +c:\Users\andre\Desktop\SkopjeMods\_fix\ApiCheck\bin\Release\net8.0\ApiCheck.deps.json +c:\Users\andre\Desktop\SkopjeMods\_fix\ApiCheck\bin\Release\net8.0\ApiCheck.runtimeconfig.json +c:\Users\andre\Desktop\SkopjeMods\_fix\ApiCheck\bin\Release\net8.0\ApiCheck.dll +c:\Users\andre\Desktop\SkopjeMods\_fix\ApiCheck\bin\Release\net8.0\ApiCheck.pdb +c:\Users\andre\Desktop\SkopjeMods\_fix\ApiCheck\bin\Release\net8.0\0Harmony.dll +c:\Users\andre\Desktop\SkopjeMods\_fix\ApiCheck\bin\Release\net8.0\Iced.dll +c:\Users\andre\Desktop\SkopjeMods\_fix\ApiCheck\bin\Release\net8.0\Il2CppInterop.Common.dll +c:\Users\andre\Desktop\SkopjeMods\_fix\ApiCheck\bin\Release\net8.0\Il2CppInterop.HarmonySupport.dll +c:\Users\andre\Desktop\SkopjeMods\_fix\ApiCheck\bin\Release\net8.0\Il2CppInterop.Runtime.dll +c:\Users\andre\Desktop\SkopjeMods\_fix\ApiCheck\bin\Release\net8.0\Microsoft.Extensions.Logging.Abstractions.dll +c:\Users\andre\Desktop\SkopjeMods\_fix\ApiCheck\bin\Release\net8.0\Mono.Cecil.Mdb.dll +c:\Users\andre\Desktop\SkopjeMods\_fix\ApiCheck\bin\Release\net8.0\Mono.Cecil.Pdb.dll +c:\Users\andre\Desktop\SkopjeMods\_fix\ApiCheck\bin\Release\net8.0\Mono.Cecil.Rocks.dll +c:\Users\andre\Desktop\SkopjeMods\_fix\ApiCheck\bin\Release\net8.0\Mono.Cecil.dll +c:\Users\andre\Desktop\SkopjeMods\_fix\ApiCheck\bin\Release\net8.0\MonoMod.RuntimeDetour.dll +c:\Users\andre\Desktop\SkopjeMods\_fix\ApiCheck\bin\Release\net8.0\MonoMod.Utils.dll +c:\Users\andre\Desktop\SkopjeMods\_fix\ApiCheck\obj\Release\net8.0\ApiCheck.csproj.AssemblyReference.cache +c:\Users\andre\Desktop\SkopjeMods\_fix\ApiCheck\obj\Release\net8.0\ApiCheck.GeneratedMSBuildEditorConfig.editorconfig +c:\Users\andre\Desktop\SkopjeMods\_fix\ApiCheck\obj\Release\net8.0\ApiCheck.AssemblyInfoInputs.cache +c:\Users\andre\Desktop\SkopjeMods\_fix\ApiCheck\obj\Release\net8.0\ApiCheck.AssemblyInfo.cs +c:\Users\andre\Desktop\SkopjeMods\_fix\ApiCheck\obj\Release\net8.0\ApiCheck.csproj.CoreCompileInputs.cache +c:\Users\andre\Desktop\SkopjeMods\_fix\ApiCheck\obj\Release\net8.0\ApiCheck.csproj.Up2Date +c:\Users\andre\Desktop\SkopjeMods\_fix\ApiCheck\obj\Release\net8.0\ApiCheck.dll +c:\Users\andre\Desktop\SkopjeMods\_fix\ApiCheck\obj\Release\net8.0\refint\ApiCheck.dll +c:\Users\andre\Desktop\SkopjeMods\_fix\ApiCheck\obj\Release\net8.0\ApiCheck.pdb +c:\Users\andre\Desktop\SkopjeMods\_fix\ApiCheck\obj\Release\net8.0\ApiCheck.genruntimeconfig.cache +c:\Users\andre\Desktop\SkopjeMods\_fix\ApiCheck\obj\Release\net8.0\ref\ApiCheck.dll diff --git a/_fix/ApiCheck/obj/Release/net8.0/ApiCheck.csproj.Up2Date b/_fix/ApiCheck/obj/Release/net8.0/ApiCheck.csproj.Up2Date new file mode 100644 index 0000000..e69de29 diff --git a/_fix/ApiCheck/obj/Release/net8.0/ApiCheck.dll b/_fix/ApiCheck/obj/Release/net8.0/ApiCheck.dll new file mode 100644 index 0000000..5eb610f Binary files /dev/null and b/_fix/ApiCheck/obj/Release/net8.0/ApiCheck.dll differ diff --git a/_fix/ApiCheck/obj/Release/net8.0/ApiCheck.genruntimeconfig.cache b/_fix/ApiCheck/obj/Release/net8.0/ApiCheck.genruntimeconfig.cache new file mode 100644 index 0000000..cb3062b --- /dev/null +++ b/_fix/ApiCheck/obj/Release/net8.0/ApiCheck.genruntimeconfig.cache @@ -0,0 +1 @@ +c56c5d3d6a03f500745c12ee6e40dcbd7f63e2c0bf823d38bc8519a5754e0561 diff --git a/_fix/ApiCheck/obj/Release/net8.0/ApiCheck.pdb b/_fix/ApiCheck/obj/Release/net8.0/ApiCheck.pdb new file mode 100644 index 0000000..9bdcf40 Binary files /dev/null and b/_fix/ApiCheck/obj/Release/net8.0/ApiCheck.pdb differ diff --git a/_fix/ApiCheck/obj/Release/net8.0/apphost.exe b/_fix/ApiCheck/obj/Release/net8.0/apphost.exe new file mode 100644 index 0000000..d26e682 Binary files /dev/null and b/_fix/ApiCheck/obj/Release/net8.0/apphost.exe differ diff --git a/_fix/ApiCheck/obj/Release/net8.0/ref/ApiCheck.dll b/_fix/ApiCheck/obj/Release/net8.0/ref/ApiCheck.dll new file mode 100644 index 0000000..3165b0c Binary files /dev/null and b/_fix/ApiCheck/obj/Release/net8.0/ref/ApiCheck.dll differ diff --git a/_fix/ApiCheck/obj/Release/net8.0/refint/ApiCheck.dll b/_fix/ApiCheck/obj/Release/net8.0/refint/ApiCheck.dll new file mode 100644 index 0000000..3165b0c Binary files /dev/null and b/_fix/ApiCheck/obj/Release/net8.0/refint/ApiCheck.dll differ diff --git a/_fix/ApiCheck/obj/project.assets.json b/_fix/ApiCheck/obj/project.assets.json new file mode 100644 index 0000000..96d620f --- /dev/null +++ b/_fix/ApiCheck/obj/project.assets.json @@ -0,0 +1,4031 @@ +{ + "version": 4, + "targets": { + "net8.0": { + "HarmonyX/2.10.0": { + "type": "package", + "dependencies": { + "MonoMod.RuntimeDetour": "22.3.23.4", + "System.Reflection.Emit": "4.7.0" + }, + "compile": { + "lib/netstandard2.0/0Harmony.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/0Harmony.dll": { + "related": ".xml" + } + } + }, + "Iced/1.17.0": { + "type": "package", + "compile": { + "lib/netstandard2.1/Iced.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.1/Iced.dll": { + "related": ".xml" + } + } + }, + "Il2CppInterop.Common/1.5.3": { + "type": "package", + "dependencies": { + "Iced": "1.17.0", + "Microsoft.Extensions.Logging.Abstractions": "6.0.1", + "System.Net.Http": "4.3.4" + }, + "compile": { + "lib/netstandard2.0/Il2CppInterop.Common.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/Il2CppInterop.Common.dll": { + "related": ".xml" + } + } + }, + "Il2CppInterop.HarmonySupport/1.5.3": { + "type": "package", + "dependencies": { + "HarmonyX": "2.10.0", + "Il2CppInterop.Runtime": "1.5.3" + }, + "compile": { + "lib/net6.0/Il2CppInterop.HarmonySupport.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/Il2CppInterop.HarmonySupport.dll": { + "related": ".xml" + } + } + }, + "Il2CppInterop.Runtime/1.5.3": { + "type": "package", + "dependencies": { + "Iced": "1.17.0", + "Il2CppInterop.Common": "1.5.3" + }, + "compile": { + "lib/net6.0/Il2CppInterop.Runtime.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/Il2CppInterop.Runtime.dll": { + "related": ".xml" + } + } + }, + "Microsoft.Extensions.Logging.Abstractions/6.0.1": { + "type": "package", + "compile": { + "lib/net6.0/Microsoft.Extensions.Logging.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/Microsoft.Extensions.Logging.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/netcoreapp3.1/_._": {} + } + }, + "Microsoft.NETCore.Platforms/1.1.1": { + "type": "package", + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "Microsoft.NETCore.Targets/1.1.0": { + "type": "package", + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "Mono.Cecil/0.11.4": { + "type": "package", + "compile": { + "lib/netstandard2.0/Mono.Cecil.Mdb.dll": { + "related": ".pdb" + }, + "lib/netstandard2.0/Mono.Cecil.Pdb.dll": { + "related": ".pdb" + }, + "lib/netstandard2.0/Mono.Cecil.Rocks.dll": { + "related": ".pdb" + }, + "lib/netstandard2.0/Mono.Cecil.dll": { + "related": ".Mdb.pdb;.pdb;.Pdb.pdb;.Rocks.pdb" + } + }, + "runtime": { + "lib/netstandard2.0/Mono.Cecil.Mdb.dll": { + "related": ".pdb" + }, + "lib/netstandard2.0/Mono.Cecil.Pdb.dll": { + "related": ".pdb" + }, + "lib/netstandard2.0/Mono.Cecil.Rocks.dll": { + "related": ".pdb" + }, + "lib/netstandard2.0/Mono.Cecil.dll": { + "related": ".Mdb.pdb;.pdb;.Pdb.pdb;.Rocks.pdb" + } + } + }, + "MonoMod.RuntimeDetour/22.3.23.4": { + "type": "package", + "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" + }, + "compile": { + "lib/net5.0/MonoMod.RuntimeDetour.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net5.0/MonoMod.RuntimeDetour.dll": { + "related": ".xml" + } + } + }, + "MonoMod.Utils/22.3.23.4": { + "type": "package", + "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" + }, + "compile": { + "lib/net5.0/MonoMod.Utils.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net5.0/MonoMod.Utils.dll": { + "related": ".xml" + } + } + }, + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": { + "type": "package", + "runtimeTargets": { + "runtimes/debian.8-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { + "assetType": "native", + "rid": "debian.8-x64" + } + } + }, + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": { + "type": "package", + "runtimeTargets": { + "runtimes/fedora.23-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { + "assetType": "native", + "rid": "fedora.23-x64" + } + } + }, + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": { + "type": "package", + "runtimeTargets": { + "runtimes/fedora.24-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { + "assetType": "native", + "rid": "fedora.24-x64" + } + } + }, + "runtime.native.System/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + }, + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "runtime.native.System.Net.Http/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + }, + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "runtime.native.System.Security.Cryptography.Apple/4.3.0": { + "type": "package", + "dependencies": { + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "4.3.0" + }, + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": { + "type": "package", + "dependencies": { + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2" + }, + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": { + "type": "package", + "runtimeTargets": { + "runtimes/opensuse.13.2-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { + "assetType": "native", + "rid": "opensuse.13.2-x64" + } + } + }, + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": { + "type": "package", + "runtimeTargets": { + "runtimes/opensuse.42.1-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { + "assetType": "native", + "rid": "opensuse.42.1-x64" + } + } + }, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0": { + "type": "package", + "runtimeTargets": { + "runtimes/osx.10.10-x64/native/System.Security.Cryptography.Native.Apple.dylib": { + "assetType": "native", + "rid": "osx.10.10-x64" + } + } + }, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": { + "type": "package", + "runtimeTargets": { + "runtimes/osx.10.10-x64/native/System.Security.Cryptography.Native.OpenSsl.dylib": { + "assetType": "native", + "rid": "osx.10.10-x64" + } + } + }, + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": { + "type": "package", + "runtimeTargets": { + "runtimes/rhel.7-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { + "assetType": "native", + "rid": "rhel.7-x64" + } + } + }, + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": { + "type": "package", + "runtimeTargets": { + "runtimes/ubuntu.14.04-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { + "assetType": "native", + "rid": "ubuntu.14.04-x64" + } + } + }, + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": { + "type": "package", + "runtimeTargets": { + "runtimes/ubuntu.16.04-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { + "assetType": "native", + "rid": "ubuntu.16.04-x64" + } + } + }, + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": { + "type": "package", + "runtimeTargets": { + "runtimes/ubuntu.16.10-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { + "assetType": "native", + "rid": "ubuntu.16.10-x64" + } + } + }, + "System.Collections/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/_._": { + "related": ".xml" + } + } + }, + "System.Collections.Concurrent/4.3.0": { + "type": "package", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Reflection": "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.Threading.Tasks": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/System.Collections.Concurrent.dll": {} + } + }, + "System.Collections.NonGeneric/4.3.0": { + "type": "package", + "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" + }, + "compile": { + "ref/netstandard1.3/System.Collections.NonGeneric.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/System.Collections.NonGeneric.dll": {} + } + }, + "System.Collections.Specialized/4.3.0": { + "type": "package", + "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" + }, + "compile": { + "ref/netstandard1.3/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/System.Collections.Specialized.dll": {} + } + }, + "System.ComponentModel/4.3.0": { + "type": "package", + "dependencies": { + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.0/System.ComponentModel.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/System.ComponentModel.dll": {} + } + }, + "System.ComponentModel.Primitives/4.3.0": { + "type": "package", + "dependencies": { + "System.ComponentModel": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.0/System.ComponentModel.Primitives.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.0/System.ComponentModel.Primitives.dll": {} + } + }, + "System.ComponentModel.TypeConverter/4.3.0": { + "type": "package", + "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" + }, + "compile": { + "ref/netstandard1.5/System.ComponentModel.TypeConverter.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.5/System.ComponentModel.TypeConverter.dll": {} + } + }, + "System.Diagnostics.Debug/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/_._": { + "related": ".xml" + } + } + }, + "System.Diagnostics.DiagnosticSource/4.3.0": { + "type": "package", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0" + }, + "compile": { + "lib/netstandard1.3/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/System.Diagnostics.DiagnosticSource.dll": { + "related": ".xml" + } + } + }, + "System.Diagnostics.Tracing/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.5/_._": { + "related": ".xml" + } + } + }, + "System.Globalization/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.Globalization.dll": { + "related": ".xml" + } + } + }, + "System.Globalization.Calendars/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Globalization": "4.3.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/_._": { + "related": ".xml" + } + } + }, + "System.Globalization.Extensions/4.3.0": { + "type": "package", + "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" + }, + "compile": { + "ref/netstandard1.3/_._": { + "related": ".xml" + } + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.3/System.Globalization.Extensions.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/netstandard1.3/System.Globalization.Extensions.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.IO/4.3.0": { + "type": "package", + "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" + }, + "compile": { + "ref/netstandard1.5/System.IO.dll": { + "related": ".xml" + } + } + }, + "System.IO.FileSystem/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading.Tasks": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/_._": { + "related": ".xml" + } + } + }, + "System.IO.FileSystem.Primitives/4.3.0": { + "type": "package", + "dependencies": { + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.IO.FileSystem.Primitives.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/System.IO.FileSystem.Primitives.dll": {} + } + }, + "System.Linq/4.3.0": { + "type": "package", + "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" + }, + "compile": { + "ref/netstandard1.6/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.6/System.Linq.dll": {} + } + }, + "System.Net.Http/4.3.4": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.1", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.DiagnosticSource": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Extensions": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.Net.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.OpenSsl": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Security.Cryptography.X509Certificates": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.Net.Http": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2" + }, + "compile": { + "ref/netstandard1.3/System.Net.Http.dll": {} + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.6/System.Net.Http.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/netstandard1.3/System.Net.Http.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Net.Primitives/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.Net.Primitives.dll": { + "related": ".xml" + } + } + }, + "System.Reflection/4.3.0": { + "type": "package", + "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" + }, + "compile": { + "ref/netstandard1.5/System.Reflection.dll": { + "related": ".xml" + } + } + }, + "System.Reflection.Emit/4.7.0": { + "type": "package", + "compile": { + "ref/netcoreapp2.0/_._": {} + }, + "runtime": { + "lib/netcoreapp2.0/_._": {} + } + }, + "System.Reflection.Emit.ILGeneration/4.7.0": { + "type": "package", + "compile": { + "ref/netcoreapp2.0/_._": {} + }, + "runtime": { + "lib/netcoreapp2.0/_._": {} + } + }, + "System.Reflection.Emit.Lightweight/4.7.0": { + "type": "package", + "compile": { + "ref/netcoreapp2.0/_._": {} + }, + "runtime": { + "lib/netcoreapp2.0/_._": {} + } + }, + "System.Reflection.Extensions/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.0/_._": { + "related": ".xml" + } + } + }, + "System.Reflection.Primitives/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.0/System.Reflection.Primitives.dll": { + "related": ".xml" + } + } + }, + "System.Reflection.TypeExtensions/4.7.0": { + "type": "package", + "compile": { + "ref/netcoreapp2.0/_._": {} + }, + "runtime": { + "lib/netcoreapp2.0/_._": {} + } + }, + "System.Resources.ResourceManager/4.3.0": { + "type": "package", + "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" + }, + "compile": { + "ref/netstandard1.0/_._": { + "related": ".xml" + } + } + }, + "System.Runtime/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + }, + "compile": { + "ref/netstandard1.5/System.Runtime.dll": { + "related": ".xml" + } + } + }, + "System.Runtime.Extensions/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.5/_._": { + "related": ".xml" + } + } + }, + "System.Runtime.Handles/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.Runtime.Handles.dll": { + "related": ".xml" + } + } + }, + "System.Runtime.InteropServices/4.3.0": { + "type": "package", + "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" + }, + "compile": { + "ref/netcoreapp1.1/_._": {} + } + }, + "System.Runtime.Numerics/4.3.0": { + "type": "package", + "dependencies": { + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0" + }, + "compile": { + "ref/netstandard1.1/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/System.Runtime.Numerics.dll": {} + } + }, + "System.Security.Cryptography.Algorithms/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "runtime.native.System.Security.Cryptography.Apple": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + }, + "compile": { + "ref/netstandard1.6/System.Security.Cryptography.Algorithms.dll": {} + }, + "runtimeTargets": { + "runtimes/osx/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll": { + "assetType": "runtime", + "rid": "osx" + }, + "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Security.Cryptography.Cng/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0" + }, + "compile": { + "ref/netstandard1.6/_._": {} + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.Cng.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/netstandard1.6/System.Security.Cryptography.Cng.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Security.Cryptography.Csp/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/_._": {} + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.3/System.Security.Cryptography.Csp.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/netstandard1.3/System.Security.Cryptography.Csp.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Security.Cryptography.Encoding/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "4.3.0", + "System.Collections.Concurrent": "4.3.0", + "System.Linq": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.Security.Cryptography.Encoding.dll": { + "related": ".xml" + } + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.3/System.Security.Cryptography.Encoding.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/netstandard1.3/System.Security.Cryptography.Encoding.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "dependencies": { + "System.Collections": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + }, + "compile": { + "ref/netstandard1.6/_._": {} + }, + "runtime": { + "lib/netstandard1.6/System.Security.Cryptography.OpenSsl.dll": {} + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.OpenSsl.dll": { + "assetType": "runtime", + "rid": "unix" + } + } + }, + "System.Security.Cryptography.Primitives/4.3.0": { + "type": "package", + "dependencies": { + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.Security.Cryptography.Primitives.dll": {} + }, + "runtime": { + "lib/netstandard1.3/System.Security.Cryptography.Primitives.dll": {} + } + }, + "System.Security.Cryptography.X509Certificates/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Calendars": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Cng": "4.3.0", + "System.Security.Cryptography.Csp": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.OpenSsl": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.Net.Http": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + }, + "compile": { + "ref/netstandard1.4/System.Security.Cryptography.X509Certificates.dll": { + "related": ".xml" + } + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.X509Certificates.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/netstandard1.6/System.Security.Cryptography.X509Certificates.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Text.Encoding/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.Text.Encoding.dll": { + "related": ".xml" + } + } + }, + "System.Threading/4.3.0": { + "type": "package", + "dependencies": { + "System.Runtime": "4.3.0", + "System.Threading.Tasks": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/System.Threading.dll": {} + } + }, + "System.Threading.Tasks/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.Threading.Tasks.dll": { + "related": ".xml" + } + } + } + } + }, + "libraries": { + "HarmonyX/2.10.0": { + "sha512": "4ayiy/dlCiW86K2N7Jvbf+VpI5wvP7dncv/6oRmfwRi32UCmCRzCGzsxdMfzJZkp6/26oBW+DrD8vi4UejzVAg==", + "type": "package", + "path": "harmonyx/2.10.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE", + "harmonyx.2.10.0.nupkg.sha512", + "harmonyx.nuspec", + "lib/net35/0Harmony.dll", + "lib/net35/0Harmony.xml", + "lib/net45/0Harmony.dll", + "lib/net45/0Harmony.xml", + "lib/netstandard2.0/0Harmony.dll", + "lib/netstandard2.0/0Harmony.xml", + "logo_mini.png" + ] + }, + "Iced/1.17.0": { + "sha512": "8x+HCVTl/HHTGpscH3vMBhV8sknN/muZFw9s3TsI8SA6+c43cOTCi2+jE4KsU8pNLbJ++iF2ZFcpcXHXtDglnw==", + "type": "package", + "path": "iced/1.17.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "iced.1.17.0.nupkg.sha512", + "iced.nuspec", + "lib/net45/Iced.dll", + "lib/net45/Iced.xml", + "lib/netstandard2.0/Iced.dll", + "lib/netstandard2.0/Iced.xml", + "lib/netstandard2.1/Iced.dll", + "lib/netstandard2.1/Iced.xml", + "logo.png" + ] + }, + "Il2CppInterop.Common/1.5.3": { + "sha512": "ziFbpzgXtqTvIwpfva9z3vlhjXrKYHfXDF5barssiFcc0YdFkQyT8FlIVQzDnycVdgPcKjzXD7goFaWddKg/KA==", + "type": "package", + "path": "il2cppinterop.common/1.5.3", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "README.md", + "il2cppinterop.common.1.5.3.nupkg.sha512", + "il2cppinterop.common.nuspec", + "lib/netstandard2.0/Il2CppInterop.Common.dll", + "lib/netstandard2.0/Il2CppInterop.Common.xml", + "logo_icon.png" + ] + }, + "Il2CppInterop.HarmonySupport/1.5.3": { + "sha512": "kap8a2rkCpKBenaHQAJqGofLOAOyBnHnlZmTMCEwlwFODXjNv+sQHmlfatl7OYvZXdoIJnZErlOl/8YEk67XaQ==", + "type": "package", + "path": "il2cppinterop.harmonysupport/1.5.3", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "README.md", + "il2cppinterop.harmonysupport.1.5.3.nupkg.sha512", + "il2cppinterop.harmonysupport.nuspec", + "lib/net6.0/Il2CppInterop.HarmonySupport.dll", + "lib/net6.0/Il2CppInterop.HarmonySupport.xml", + "logo_icon.png" + ] + }, + "Il2CppInterop.Runtime/1.5.3": { + "sha512": "kV7UJ9Ra7kHAmFguM2DcD8CBiqM2PYSAUqb/0OajgrAw8yJKxSFmzOjcu653ZMLJ+kVi0XXEO/+uwEspKGCbLQ==", + "type": "package", + "path": "il2cppinterop.runtime/1.5.3", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "README.md", + "il2cppinterop.runtime.1.5.3.nupkg.sha512", + "il2cppinterop.runtime.nuspec", + "lib/net6.0/Il2CppInterop.Runtime.dll", + "lib/net6.0/Il2CppInterop.Runtime.xml", + "logo_icon.png" + ] + }, + "Microsoft.Extensions.Logging.Abstractions/6.0.1": { + "sha512": "dzB2Cgg+JmrouhjkcQGzSFjjvpwlq353i8oBQO2GWNjCXSzhbtBRUf28HSauWe7eib3wYOdb3tItdjRwAdwCSg==", + "type": "package", + "path": "microsoft.extensions.logging.abstractions/6.0.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "analyzers/dotnet/roslyn3.11/cs/Microsoft.Extensions.Logging.Generators.dll", + "analyzers/dotnet/roslyn3.11/cs/cs/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/de/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/es/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/fr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/it/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ja/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ko/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/pl/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/pt-BR/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ru/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/tr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/zh-Hans/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/zh-Hant/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/Microsoft.Extensions.Logging.Generators.dll", + "analyzers/dotnet/roslyn4.0/cs/cs/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/de/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/es/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/fr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/it/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ja/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ko/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/pl/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/pt-BR/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ru/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/tr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/zh-Hans/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/zh-Hant/Microsoft.Extensions.Logging.Generators.resources.dll", + "build/Microsoft.Extensions.Logging.Abstractions.targets", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Logging.Abstractions.targets", + "buildTransitive/netcoreapp3.1/_._", + "lib/net461/Microsoft.Extensions.Logging.Abstractions.dll", + "lib/net461/Microsoft.Extensions.Logging.Abstractions.xml", + "lib/net6.0/Microsoft.Extensions.Logging.Abstractions.dll", + "lib/net6.0/Microsoft.Extensions.Logging.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.xml", + "microsoft.extensions.logging.abstractions.6.0.1.nupkg.sha512", + "microsoft.extensions.logging.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.NETCore.Platforms/1.1.1": { + "sha512": "TMBuzAHpTenGbGgk0SMTwyEkyijY/Eae4ZGsFNYJvAr/LDn1ku3Etp3FPxChmDp5HHF3kzJuoaa08N0xjqAJfQ==", + "type": "package", + "path": "microsoft.netcore.platforms/1.1.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.0/_._", + "microsoft.netcore.platforms.1.1.1.nupkg.sha512", + "microsoft.netcore.platforms.nuspec", + "runtime.json" + ] + }, + "Microsoft.NETCore.Targets/1.1.0": { + "sha512": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==", + "type": "package", + "path": "microsoft.netcore.targets/1.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.0/_._", + "microsoft.netcore.targets.1.1.0.nupkg.sha512", + "microsoft.netcore.targets.nuspec", + "runtime.json" + ] + }, + "Mono.Cecil/0.11.4": { + "sha512": "IC1h5g0NeJGHIUgzM1P82ld57knhP0IcQfrYITDPXlNpMYGUrsG5TxuaWTjaeqDNQMBDNZkB8L0rBnwsY6JHuQ==", + "type": "package", + "path": "mono.cecil/0.11.4", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net40/Mono.Cecil.Mdb.dll", + "lib/net40/Mono.Cecil.Mdb.pdb", + "lib/net40/Mono.Cecil.Pdb.dll", + "lib/net40/Mono.Cecil.Pdb.pdb", + "lib/net40/Mono.Cecil.Rocks.dll", + "lib/net40/Mono.Cecil.Rocks.pdb", + "lib/net40/Mono.Cecil.dll", + "lib/net40/Mono.Cecil.pdb", + "lib/netstandard2.0/Mono.Cecil.Mdb.dll", + "lib/netstandard2.0/Mono.Cecil.Mdb.pdb", + "lib/netstandard2.0/Mono.Cecil.Pdb.dll", + "lib/netstandard2.0/Mono.Cecil.Pdb.pdb", + "lib/netstandard2.0/Mono.Cecil.Rocks.dll", + "lib/netstandard2.0/Mono.Cecil.Rocks.pdb", + "lib/netstandard2.0/Mono.Cecil.dll", + "lib/netstandard2.0/Mono.Cecil.pdb", + "mono.cecil.0.11.4.nupkg.sha512", + "mono.cecil.nuspec" + ] + }, + "MonoMod.RuntimeDetour/22.3.23.4": { + "sha512": "2nwwFfwYDSgUzhi+1MutTg1gyUgXoMS4+E04vHOFp84Vxs0oBkkn4mGAfhkr272y0j3vqIBzo2aT9pXRlCd/ZA==", + "type": "package", + "path": "monomod.runtimedetour/22.3.23.4", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net35/MonoMod.RuntimeDetour.dll", + "lib/net35/MonoMod.RuntimeDetour.xml", + "lib/net452/MonoMod.RuntimeDetour.dll", + "lib/net452/MonoMod.RuntimeDetour.xml", + "lib/net5.0/MonoMod.RuntimeDetour.dll", + "lib/net5.0/MonoMod.RuntimeDetour.xml", + "lib/netstandard2.0/MonoMod.RuntimeDetour.dll", + "lib/netstandard2.0/MonoMod.RuntimeDetour.xml", + "monomod.runtimedetour.22.3.23.4.nupkg.sha512", + "monomod.runtimedetour.nuspec" + ] + }, + "MonoMod.Utils/22.3.23.4": { + "sha512": "xso1rHFfcsPy3X1kj2uDk115z9tLTMxPEnba/zdNB6WazvrLRWGPuV9d4hHwr1iVz5quTFlZCbLBlE5fS2TqLA==", + "type": "package", + "path": "monomod.utils/22.3.23.4", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net35/MonoMod.Utils.dll", + "lib/net35/MonoMod.Utils.xml", + "lib/net452/MonoMod.Utils.dll", + "lib/net452/MonoMod.Utils.xml", + "lib/net5.0/MonoMod.Utils.dll", + "lib/net5.0/MonoMod.Utils.xml", + "lib/netstandard2.0/MonoMod.Utils.dll", + "lib/netstandard2.0/MonoMod.Utils.xml", + "monomod.utils.22.3.23.4.nupkg.sha512", + "monomod.utils.nuspec" + ] + }, + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": { + "sha512": "7VSGO0URRKoMEAq0Sc9cRz8mb6zbyx/BZDEWhgPdzzpmFhkam3fJ1DAGWFXBI4nGlma+uPKpfuMQP5LXRnOH5g==", + "type": "package", + "path": "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl/4.3.2", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl.4.3.2.nupkg.sha512", + "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl.nuspec", + "runtimes/debian.8-x64/native/System.Security.Cryptography.Native.OpenSsl.so" + ] + }, + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": { + "sha512": "0oAaTAm6e2oVH+/Zttt0cuhGaePQYKII1dY8iaqP7CvOpVKgLybKRFvQjXR2LtxXOXTVPNv14j0ot8uV+HrUmw==", + "type": "package", + "path": "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl/4.3.2", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.4.3.2.nupkg.sha512", + "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.nuspec", + "runtimes/fedora.23-x64/native/System.Security.Cryptography.Native.OpenSsl.so" + ] + }, + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": { + "sha512": "G24ibsCNi5Kbz0oXWynBoRgtGvsw5ZSVEWjv13/KiCAM8C6wz9zzcCniMeQFIkJ2tasjo2kXlvlBZhplL51kGg==", + "type": "package", + "path": "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl/4.3.2", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.4.3.2.nupkg.sha512", + "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.nuspec", + "runtimes/fedora.24-x64/native/System.Security.Cryptography.Native.OpenSsl.so" + ] + }, + "runtime.native.System/4.3.0": { + "sha512": "c/qWt2LieNZIj1jGnVNsE2Kl23Ya2aSTBuXMD6V7k9KWr6l16Tqdwq+hJScEpWER9753NWC8h96PaVNY5Ld7Jw==", + "type": "package", + "path": "runtime.native.system/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.0/_._", + "runtime.native.system.4.3.0.nupkg.sha512", + "runtime.native.system.nuspec" + ] + }, + "runtime.native.System.Net.Http/4.3.0": { + "sha512": "ZVuZJqnnegJhd2k/PtAbbIcZ3aZeITq3sj06oKfMBSfphW3HDmk/t4ObvbOk/JA/swGR0LNqMksAh/f7gpTROg==", + "type": "package", + "path": "runtime.native.system.net.http/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.0/_._", + "runtime.native.system.net.http.4.3.0.nupkg.sha512", + "runtime.native.system.net.http.nuspec" + ] + }, + "runtime.native.System.Security.Cryptography.Apple/4.3.0": { + "sha512": "DloMk88juo0OuOWr56QG7MNchmafTLYWvABy36izkrLI5VledI0rq28KGs1i9wbpeT9NPQrx/wTf8U2vazqQ3Q==", + "type": "package", + "path": "runtime.native.system.security.cryptography.apple/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.0/_._", + "runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512", + "runtime.native.system.security.cryptography.apple.nuspec" + ] + }, + "runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": { + "sha512": "QR1OwtwehHxSeQvZKXe+iSd+d3XZNkEcuWMFYa2i0aG1l+lR739HPicKMlTbJst3spmeekDVBUS7SeS26s4U/g==", + "type": "package", + "path": "runtime.native.system.security.cryptography.openssl/4.3.2", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.0/_._", + "runtime.native.system.security.cryptography.openssl.4.3.2.nupkg.sha512", + "runtime.native.system.security.cryptography.openssl.nuspec" + ] + }, + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": { + "sha512": "I+GNKGg2xCHueRd1m9PzeEW7WLbNNLznmTuEi8/vZX71HudUbx1UTwlGkiwMri7JLl8hGaIAWnA/GONhu+LOyQ==", + "type": "package", + "path": "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl/4.3.2", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl.4.3.2.nupkg.sha512", + "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl.nuspec", + "runtimes/opensuse.13.2-x64/native/System.Security.Cryptography.Native.OpenSsl.so" + ] + }, + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": { + "sha512": "1Z3TAq1ytS1IBRtPXJvEUZdVsfWfeNEhBkbiOCGEl9wwAfsjP2lz3ZFDx5tq8p60/EqbS0HItG5piHuB71RjoA==", + "type": "package", + "path": "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl/4.3.2", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl.4.3.2.nupkg.sha512", + "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl.nuspec", + "runtimes/opensuse.42.1-x64/native/System.Security.Cryptography.Native.OpenSsl.so" + ] + }, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0": { + "sha512": "kVXCuMTrTlxq4XOOMAysuNwsXWpYeboGddNGpIgNSZmv1b6r/s/DPk0fYMB7Q5Qo4bY68o48jt4T4y5BVecbCQ==", + "type": "package", + "path": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512", + "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple.nuspec", + "runtimes/osx.10.10-x64/native/System.Security.Cryptography.Native.Apple.dylib" + ] + }, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": { + "sha512": "6mU/cVmmHtQiDXhnzUImxIcDL48GbTk+TsptXyJA+MIOG9LRjPoAQC/qBFB7X+UNyK86bmvGwC8t+M66wsYC8w==", + "type": "package", + "path": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl/4.3.2", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl.4.3.2.nupkg.sha512", + "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl.nuspec", + "runtimes/osx.10.10-x64/native/System.Security.Cryptography.Native.OpenSsl.dylib" + ] + }, + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": { + "sha512": "vjwG0GGcTW/PPg6KVud8F9GLWYuAV1rrw1BKAqY0oh4jcUqg15oYF1+qkGR2x2ZHM4DQnWKQ7cJgYbfncz/lYg==", + "type": "package", + "path": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl/4.3.2", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.4.3.2.nupkg.sha512", + "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.nuspec", + "runtimes/rhel.7-x64/native/System.Security.Cryptography.Native.OpenSsl.so" + ] + }, + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": { + "sha512": "7KMFpTkHC/zoExs+PwP8jDCWcrK9H6L7soowT80CUx3e+nxP/AFnq0AQAW5W76z2WYbLAYCRyPfwYFG6zkvQRw==", + "type": "package", + "path": "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl/4.3.2", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl.4.3.2.nupkg.sha512", + "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl.nuspec", + "runtimes/ubuntu.14.04-x64/native/System.Security.Cryptography.Native.OpenSsl.so" + ] + }, + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": { + "sha512": "xrlmRCnKZJLHxyyLIqkZjNXqgxnKdZxfItrPkjI+6pkRo5lHX8YvSZlWrSI5AVwLMi4HbNWP7064hcAWeZKp5w==", + "type": "package", + "path": "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl/4.3.2", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl.4.3.2.nupkg.sha512", + "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl.nuspec", + "runtimes/ubuntu.16.04-x64/native/System.Security.Cryptography.Native.OpenSsl.so" + ] + }, + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": { + "sha512": "leXiwfiIkW7Gmn7cgnNcdtNAU70SjmKW3jxGj1iKHOvdn0zRWsgv/l2OJUO5zdGdiv2VRFnAsxxhDgMzofPdWg==", + "type": "package", + "path": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl/4.3.2", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.4.3.2.nupkg.sha512", + "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.nuspec", + "runtimes/ubuntu.16.10-x64/native/System.Security.Cryptography.Native.OpenSsl.so" + ] + }, + "System.Collections/4.3.0": { + "sha512": "3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", + "type": "package", + "path": "system.collections/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Collections.dll", + "ref/netcore50/System.Collections.xml", + "ref/netcore50/de/System.Collections.xml", + "ref/netcore50/es/System.Collections.xml", + "ref/netcore50/fr/System.Collections.xml", + "ref/netcore50/it/System.Collections.xml", + "ref/netcore50/ja/System.Collections.xml", + "ref/netcore50/ko/System.Collections.xml", + "ref/netcore50/ru/System.Collections.xml", + "ref/netcore50/zh-hans/System.Collections.xml", + "ref/netcore50/zh-hant/System.Collections.xml", + "ref/netstandard1.0/System.Collections.dll", + "ref/netstandard1.0/System.Collections.xml", + "ref/netstandard1.0/de/System.Collections.xml", + "ref/netstandard1.0/es/System.Collections.xml", + "ref/netstandard1.0/fr/System.Collections.xml", + "ref/netstandard1.0/it/System.Collections.xml", + "ref/netstandard1.0/ja/System.Collections.xml", + "ref/netstandard1.0/ko/System.Collections.xml", + "ref/netstandard1.0/ru/System.Collections.xml", + "ref/netstandard1.0/zh-hans/System.Collections.xml", + "ref/netstandard1.0/zh-hant/System.Collections.xml", + "ref/netstandard1.3/System.Collections.dll", + "ref/netstandard1.3/System.Collections.xml", + "ref/netstandard1.3/de/System.Collections.xml", + "ref/netstandard1.3/es/System.Collections.xml", + "ref/netstandard1.3/fr/System.Collections.xml", + "ref/netstandard1.3/it/System.Collections.xml", + "ref/netstandard1.3/ja/System.Collections.xml", + "ref/netstandard1.3/ko/System.Collections.xml", + "ref/netstandard1.3/ru/System.Collections.xml", + "ref/netstandard1.3/zh-hans/System.Collections.xml", + "ref/netstandard1.3/zh-hant/System.Collections.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.collections.4.3.0.nupkg.sha512", + "system.collections.nuspec" + ] + }, + "System.Collections.Concurrent/4.3.0": { + "sha512": "ztl69Xp0Y/UXCL+3v3tEU+lIy+bvjKNUmopn1wep/a291pVPK7dxBd6T7WnlQqRog+d1a/hSsgRsmFnIBKTPLQ==", + "type": "package", + "path": "system.collections.concurrent/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.Collections.Concurrent.dll", + "lib/netstandard1.3/System.Collections.Concurrent.dll", + "lib/portable-net45+win8+wpa81/_._", + "lib/win8/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Collections.Concurrent.dll", + "ref/netcore50/System.Collections.Concurrent.xml", + "ref/netcore50/de/System.Collections.Concurrent.xml", + "ref/netcore50/es/System.Collections.Concurrent.xml", + "ref/netcore50/fr/System.Collections.Concurrent.xml", + "ref/netcore50/it/System.Collections.Concurrent.xml", + "ref/netcore50/ja/System.Collections.Concurrent.xml", + "ref/netcore50/ko/System.Collections.Concurrent.xml", + "ref/netcore50/ru/System.Collections.Concurrent.xml", + "ref/netcore50/zh-hans/System.Collections.Concurrent.xml", + "ref/netcore50/zh-hant/System.Collections.Concurrent.xml", + "ref/netstandard1.1/System.Collections.Concurrent.dll", + "ref/netstandard1.1/System.Collections.Concurrent.xml", + "ref/netstandard1.1/de/System.Collections.Concurrent.xml", + "ref/netstandard1.1/es/System.Collections.Concurrent.xml", + "ref/netstandard1.1/fr/System.Collections.Concurrent.xml", + "ref/netstandard1.1/it/System.Collections.Concurrent.xml", + "ref/netstandard1.1/ja/System.Collections.Concurrent.xml", + "ref/netstandard1.1/ko/System.Collections.Concurrent.xml", + "ref/netstandard1.1/ru/System.Collections.Concurrent.xml", + "ref/netstandard1.1/zh-hans/System.Collections.Concurrent.xml", + "ref/netstandard1.1/zh-hant/System.Collections.Concurrent.xml", + "ref/netstandard1.3/System.Collections.Concurrent.dll", + "ref/netstandard1.3/System.Collections.Concurrent.xml", + "ref/netstandard1.3/de/System.Collections.Concurrent.xml", + "ref/netstandard1.3/es/System.Collections.Concurrent.xml", + "ref/netstandard1.3/fr/System.Collections.Concurrent.xml", + "ref/netstandard1.3/it/System.Collections.Concurrent.xml", + "ref/netstandard1.3/ja/System.Collections.Concurrent.xml", + "ref/netstandard1.3/ko/System.Collections.Concurrent.xml", + "ref/netstandard1.3/ru/System.Collections.Concurrent.xml", + "ref/netstandard1.3/zh-hans/System.Collections.Concurrent.xml", + "ref/netstandard1.3/zh-hant/System.Collections.Concurrent.xml", + "ref/portable-net45+win8+wpa81/_._", + "ref/win8/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.collections.concurrent.4.3.0.nupkg.sha512", + "system.collections.concurrent.nuspec" + ] + }, + "System.Collections.NonGeneric/4.3.0": { + "sha512": "prtjIEMhGUnQq6RnPEYLpFt8AtLbp9yq2zxOSrY7KJJZrw25Fi97IzBqY7iqssbM61Ek5b8f3MG/sG1N2sN5KA==", + "type": "package", + "path": "system.collections.nongeneric/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Collections.NonGeneric.dll", + "lib/netstandard1.3/System.Collections.NonGeneric.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Collections.NonGeneric.dll", + "ref/netstandard1.3/System.Collections.NonGeneric.dll", + "ref/netstandard1.3/System.Collections.NonGeneric.xml", + "ref/netstandard1.3/de/System.Collections.NonGeneric.xml", + "ref/netstandard1.3/es/System.Collections.NonGeneric.xml", + "ref/netstandard1.3/fr/System.Collections.NonGeneric.xml", + "ref/netstandard1.3/it/System.Collections.NonGeneric.xml", + "ref/netstandard1.3/ja/System.Collections.NonGeneric.xml", + "ref/netstandard1.3/ko/System.Collections.NonGeneric.xml", + "ref/netstandard1.3/ru/System.Collections.NonGeneric.xml", + "ref/netstandard1.3/zh-hans/System.Collections.NonGeneric.xml", + "ref/netstandard1.3/zh-hant/System.Collections.NonGeneric.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.collections.nongeneric.4.3.0.nupkg.sha512", + "system.collections.nongeneric.nuspec" + ] + }, + "System.Collections.Specialized/4.3.0": { + "sha512": "Epx8PoVZR0iuOnJJDzp7pWvdfMMOAvpUo95pC4ScH2mJuXkKA2Y4aR3cG9qt2klHgSons1WFh4kcGW7cSXvrxg==", + "type": "package", + "path": "system.collections.specialized/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Collections.Specialized.dll", + "lib/netstandard1.3/System.Collections.Specialized.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Collections.Specialized.dll", + "ref/netstandard1.3/System.Collections.Specialized.dll", + "ref/netstandard1.3/System.Collections.Specialized.xml", + "ref/netstandard1.3/de/System.Collections.Specialized.xml", + "ref/netstandard1.3/es/System.Collections.Specialized.xml", + "ref/netstandard1.3/fr/System.Collections.Specialized.xml", + "ref/netstandard1.3/it/System.Collections.Specialized.xml", + "ref/netstandard1.3/ja/System.Collections.Specialized.xml", + "ref/netstandard1.3/ko/System.Collections.Specialized.xml", + "ref/netstandard1.3/ru/System.Collections.Specialized.xml", + "ref/netstandard1.3/zh-hans/System.Collections.Specialized.xml", + "ref/netstandard1.3/zh-hant/System.Collections.Specialized.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.collections.specialized.4.3.0.nupkg.sha512", + "system.collections.specialized.nuspec" + ] + }, + "System.ComponentModel/4.3.0": { + "sha512": "VyGn1jGRZVfxnh8EdvDCi71v3bMXrsu8aYJOwoV7SNDLVhiEqwP86pPMyRGsDsxhXAm2b3o9OIqeETfN5qfezw==", + "type": "package", + "path": "system.componentmodel/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.ComponentModel.dll", + "lib/netstandard1.3/System.ComponentModel.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.ComponentModel.dll", + "ref/netcore50/System.ComponentModel.xml", + "ref/netcore50/de/System.ComponentModel.xml", + "ref/netcore50/es/System.ComponentModel.xml", + "ref/netcore50/fr/System.ComponentModel.xml", + "ref/netcore50/it/System.ComponentModel.xml", + "ref/netcore50/ja/System.ComponentModel.xml", + "ref/netcore50/ko/System.ComponentModel.xml", + "ref/netcore50/ru/System.ComponentModel.xml", + "ref/netcore50/zh-hans/System.ComponentModel.xml", + "ref/netcore50/zh-hant/System.ComponentModel.xml", + "ref/netstandard1.0/System.ComponentModel.dll", + "ref/netstandard1.0/System.ComponentModel.xml", + "ref/netstandard1.0/de/System.ComponentModel.xml", + "ref/netstandard1.0/es/System.ComponentModel.xml", + "ref/netstandard1.0/fr/System.ComponentModel.xml", + "ref/netstandard1.0/it/System.ComponentModel.xml", + "ref/netstandard1.0/ja/System.ComponentModel.xml", + "ref/netstandard1.0/ko/System.ComponentModel.xml", + "ref/netstandard1.0/ru/System.ComponentModel.xml", + "ref/netstandard1.0/zh-hans/System.ComponentModel.xml", + "ref/netstandard1.0/zh-hant/System.ComponentModel.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.componentmodel.4.3.0.nupkg.sha512", + "system.componentmodel.nuspec" + ] + }, + "System.ComponentModel.Primitives/4.3.0": { + "sha512": "j8GUkCpM8V4d4vhLIIoBLGey2Z5bCkMVNjEZseyAlm4n5arcsJOeI3zkUP+zvZgzsbLTYh4lYeP/ZD/gdIAPrw==", + "type": "package", + "path": "system.componentmodel.primitives/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/System.ComponentModel.Primitives.dll", + "lib/netstandard1.0/System.ComponentModel.Primitives.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/System.ComponentModel.Primitives.dll", + "ref/netstandard1.0/System.ComponentModel.Primitives.dll", + "ref/netstandard1.0/System.ComponentModel.Primitives.xml", + "ref/netstandard1.0/de/System.ComponentModel.Primitives.xml", + "ref/netstandard1.0/es/System.ComponentModel.Primitives.xml", + "ref/netstandard1.0/fr/System.ComponentModel.Primitives.xml", + "ref/netstandard1.0/it/System.ComponentModel.Primitives.xml", + "ref/netstandard1.0/ja/System.ComponentModel.Primitives.xml", + "ref/netstandard1.0/ko/System.ComponentModel.Primitives.xml", + "ref/netstandard1.0/ru/System.ComponentModel.Primitives.xml", + "ref/netstandard1.0/zh-hans/System.ComponentModel.Primitives.xml", + "ref/netstandard1.0/zh-hant/System.ComponentModel.Primitives.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.componentmodel.primitives.4.3.0.nupkg.sha512", + "system.componentmodel.primitives.nuspec" + ] + }, + "System.ComponentModel.TypeConverter/4.3.0": { + "sha512": "16pQ6P+EdhcXzPiEK4kbA953Fu0MNG2ovxTZU81/qsCd1zPRsKc3uif5NgvllCY598k6bI0KUyKW8fanlfaDQg==", + "type": "package", + "path": "system.componentmodel.typeconverter/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/System.ComponentModel.TypeConverter.dll", + "lib/net462/System.ComponentModel.TypeConverter.dll", + "lib/netstandard1.0/System.ComponentModel.TypeConverter.dll", + "lib/netstandard1.5/System.ComponentModel.TypeConverter.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/System.ComponentModel.TypeConverter.dll", + "ref/net462/System.ComponentModel.TypeConverter.dll", + "ref/netstandard1.0/System.ComponentModel.TypeConverter.dll", + "ref/netstandard1.0/System.ComponentModel.TypeConverter.xml", + "ref/netstandard1.0/de/System.ComponentModel.TypeConverter.xml", + "ref/netstandard1.0/es/System.ComponentModel.TypeConverter.xml", + "ref/netstandard1.0/fr/System.ComponentModel.TypeConverter.xml", + "ref/netstandard1.0/it/System.ComponentModel.TypeConverter.xml", + "ref/netstandard1.0/ja/System.ComponentModel.TypeConverter.xml", + "ref/netstandard1.0/ko/System.ComponentModel.TypeConverter.xml", + "ref/netstandard1.0/ru/System.ComponentModel.TypeConverter.xml", + "ref/netstandard1.0/zh-hans/System.ComponentModel.TypeConverter.xml", + "ref/netstandard1.0/zh-hant/System.ComponentModel.TypeConverter.xml", + "ref/netstandard1.5/System.ComponentModel.TypeConverter.dll", + "ref/netstandard1.5/System.ComponentModel.TypeConverter.xml", + "ref/netstandard1.5/de/System.ComponentModel.TypeConverter.xml", + "ref/netstandard1.5/es/System.ComponentModel.TypeConverter.xml", + "ref/netstandard1.5/fr/System.ComponentModel.TypeConverter.xml", + "ref/netstandard1.5/it/System.ComponentModel.TypeConverter.xml", + "ref/netstandard1.5/ja/System.ComponentModel.TypeConverter.xml", + "ref/netstandard1.5/ko/System.ComponentModel.TypeConverter.xml", + "ref/netstandard1.5/ru/System.ComponentModel.TypeConverter.xml", + "ref/netstandard1.5/zh-hans/System.ComponentModel.TypeConverter.xml", + "ref/netstandard1.5/zh-hant/System.ComponentModel.TypeConverter.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.componentmodel.typeconverter.4.3.0.nupkg.sha512", + "system.componentmodel.typeconverter.nuspec" + ] + }, + "System.Diagnostics.Debug/4.3.0": { + "sha512": "ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==", + "type": "package", + "path": "system.diagnostics.debug/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Diagnostics.Debug.dll", + "ref/netcore50/System.Diagnostics.Debug.xml", + "ref/netcore50/de/System.Diagnostics.Debug.xml", + "ref/netcore50/es/System.Diagnostics.Debug.xml", + "ref/netcore50/fr/System.Diagnostics.Debug.xml", + "ref/netcore50/it/System.Diagnostics.Debug.xml", + "ref/netcore50/ja/System.Diagnostics.Debug.xml", + "ref/netcore50/ko/System.Diagnostics.Debug.xml", + "ref/netcore50/ru/System.Diagnostics.Debug.xml", + "ref/netcore50/zh-hans/System.Diagnostics.Debug.xml", + "ref/netcore50/zh-hant/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/System.Diagnostics.Debug.dll", + "ref/netstandard1.0/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/de/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/es/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/fr/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/it/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/ja/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/ko/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/ru/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/zh-hans/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/zh-hant/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/System.Diagnostics.Debug.dll", + "ref/netstandard1.3/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/de/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/es/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/fr/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/it/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/ja/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/ko/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/ru/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/zh-hans/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/zh-hant/System.Diagnostics.Debug.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.diagnostics.debug.4.3.0.nupkg.sha512", + "system.diagnostics.debug.nuspec" + ] + }, + "System.Diagnostics.DiagnosticSource/4.3.0": { + "sha512": "tD6kosZnTAGdrEa0tZSuFyunMbt/5KYDnHdndJYGqZoNy00XVXyACd5d6KnE1YgYv3ne2CjtAfNXo/fwEhnKUA==", + "type": "package", + "path": "system.diagnostics.diagnosticsource/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/net46/System.Diagnostics.DiagnosticSource.dll", + "lib/net46/System.Diagnostics.DiagnosticSource.xml", + "lib/netstandard1.1/System.Diagnostics.DiagnosticSource.dll", + "lib/netstandard1.1/System.Diagnostics.DiagnosticSource.xml", + "lib/netstandard1.3/System.Diagnostics.DiagnosticSource.dll", + "lib/netstandard1.3/System.Diagnostics.DiagnosticSource.xml", + "lib/portable-net45+win8+wpa81/System.Diagnostics.DiagnosticSource.dll", + "lib/portable-net45+win8+wpa81/System.Diagnostics.DiagnosticSource.xml", + "system.diagnostics.diagnosticsource.4.3.0.nupkg.sha512", + "system.diagnostics.diagnosticsource.nuspec" + ] + }, + "System.Diagnostics.Tracing/4.3.0": { + "sha512": "rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==", + "type": "package", + "path": "system.diagnostics.tracing/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Diagnostics.Tracing.dll", + "lib/portable-net45+win8+wpa81/_._", + "lib/win8/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Diagnostics.Tracing.dll", + "ref/netcore50/System.Diagnostics.Tracing.dll", + "ref/netcore50/System.Diagnostics.Tracing.xml", + "ref/netcore50/de/System.Diagnostics.Tracing.xml", + "ref/netcore50/es/System.Diagnostics.Tracing.xml", + "ref/netcore50/fr/System.Diagnostics.Tracing.xml", + "ref/netcore50/it/System.Diagnostics.Tracing.xml", + "ref/netcore50/ja/System.Diagnostics.Tracing.xml", + "ref/netcore50/ko/System.Diagnostics.Tracing.xml", + "ref/netcore50/ru/System.Diagnostics.Tracing.xml", + "ref/netcore50/zh-hans/System.Diagnostics.Tracing.xml", + "ref/netcore50/zh-hant/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/System.Diagnostics.Tracing.dll", + "ref/netstandard1.1/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/de/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/es/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/fr/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/it/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/ja/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/ko/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/ru/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/zh-hans/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/zh-hant/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/System.Diagnostics.Tracing.dll", + "ref/netstandard1.2/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/de/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/es/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/fr/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/it/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/ja/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/ko/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/ru/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/zh-hans/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/zh-hant/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/System.Diagnostics.Tracing.dll", + "ref/netstandard1.3/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/de/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/es/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/fr/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/it/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/ja/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/ko/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/ru/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/zh-hans/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/zh-hant/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/System.Diagnostics.Tracing.dll", + "ref/netstandard1.5/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/de/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/es/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/fr/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/it/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/ja/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/ko/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/ru/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/zh-hans/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/zh-hant/System.Diagnostics.Tracing.xml", + "ref/portable-net45+win8+wpa81/_._", + "ref/win8/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.diagnostics.tracing.4.3.0.nupkg.sha512", + "system.diagnostics.tracing.nuspec" + ] + }, + "System.Globalization/4.3.0": { + "sha512": "kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==", + "type": "package", + "path": "system.globalization/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Globalization.dll", + "ref/netcore50/System.Globalization.xml", + "ref/netcore50/de/System.Globalization.xml", + "ref/netcore50/es/System.Globalization.xml", + "ref/netcore50/fr/System.Globalization.xml", + "ref/netcore50/it/System.Globalization.xml", + "ref/netcore50/ja/System.Globalization.xml", + "ref/netcore50/ko/System.Globalization.xml", + "ref/netcore50/ru/System.Globalization.xml", + "ref/netcore50/zh-hans/System.Globalization.xml", + "ref/netcore50/zh-hant/System.Globalization.xml", + "ref/netstandard1.0/System.Globalization.dll", + "ref/netstandard1.0/System.Globalization.xml", + "ref/netstandard1.0/de/System.Globalization.xml", + "ref/netstandard1.0/es/System.Globalization.xml", + "ref/netstandard1.0/fr/System.Globalization.xml", + "ref/netstandard1.0/it/System.Globalization.xml", + "ref/netstandard1.0/ja/System.Globalization.xml", + "ref/netstandard1.0/ko/System.Globalization.xml", + "ref/netstandard1.0/ru/System.Globalization.xml", + "ref/netstandard1.0/zh-hans/System.Globalization.xml", + "ref/netstandard1.0/zh-hant/System.Globalization.xml", + "ref/netstandard1.3/System.Globalization.dll", + "ref/netstandard1.3/System.Globalization.xml", + "ref/netstandard1.3/de/System.Globalization.xml", + "ref/netstandard1.3/es/System.Globalization.xml", + "ref/netstandard1.3/fr/System.Globalization.xml", + "ref/netstandard1.3/it/System.Globalization.xml", + "ref/netstandard1.3/ja/System.Globalization.xml", + "ref/netstandard1.3/ko/System.Globalization.xml", + "ref/netstandard1.3/ru/System.Globalization.xml", + "ref/netstandard1.3/zh-hans/System.Globalization.xml", + "ref/netstandard1.3/zh-hant/System.Globalization.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.globalization.4.3.0.nupkg.sha512", + "system.globalization.nuspec" + ] + }, + "System.Globalization.Calendars/4.3.0": { + "sha512": "GUlBtdOWT4LTV3I+9/PJW+56AnnChTaOqqTLFtdmype/L500M2LIyXgmtd9X2P2VOkmJd5c67H5SaC2QcL1bFA==", + "type": "package", + "path": "system.globalization.calendars/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Globalization.Calendars.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Globalization.Calendars.dll", + "ref/netstandard1.3/System.Globalization.Calendars.dll", + "ref/netstandard1.3/System.Globalization.Calendars.xml", + "ref/netstandard1.3/de/System.Globalization.Calendars.xml", + "ref/netstandard1.3/es/System.Globalization.Calendars.xml", + "ref/netstandard1.3/fr/System.Globalization.Calendars.xml", + "ref/netstandard1.3/it/System.Globalization.Calendars.xml", + "ref/netstandard1.3/ja/System.Globalization.Calendars.xml", + "ref/netstandard1.3/ko/System.Globalization.Calendars.xml", + "ref/netstandard1.3/ru/System.Globalization.Calendars.xml", + "ref/netstandard1.3/zh-hans/System.Globalization.Calendars.xml", + "ref/netstandard1.3/zh-hant/System.Globalization.Calendars.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.globalization.calendars.4.3.0.nupkg.sha512", + "system.globalization.calendars.nuspec" + ] + }, + "System.Globalization.Extensions/4.3.0": { + "sha512": "FhKmdR6MPG+pxow6wGtNAWdZh7noIOpdD5TwQ3CprzgIE1bBBoim0vbR1+AWsWjQmU7zXHgQo4TWSP6lCeiWcQ==", + "type": "package", + "path": "system.globalization.extensions/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Globalization.Extensions.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Globalization.Extensions.dll", + "ref/netstandard1.3/System.Globalization.Extensions.dll", + "ref/netstandard1.3/System.Globalization.Extensions.xml", + "ref/netstandard1.3/de/System.Globalization.Extensions.xml", + "ref/netstandard1.3/es/System.Globalization.Extensions.xml", + "ref/netstandard1.3/fr/System.Globalization.Extensions.xml", + "ref/netstandard1.3/it/System.Globalization.Extensions.xml", + "ref/netstandard1.3/ja/System.Globalization.Extensions.xml", + "ref/netstandard1.3/ko/System.Globalization.Extensions.xml", + "ref/netstandard1.3/ru/System.Globalization.Extensions.xml", + "ref/netstandard1.3/zh-hans/System.Globalization.Extensions.xml", + "ref/netstandard1.3/zh-hant/System.Globalization.Extensions.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/unix/lib/netstandard1.3/System.Globalization.Extensions.dll", + "runtimes/win/lib/net46/System.Globalization.Extensions.dll", + "runtimes/win/lib/netstandard1.3/System.Globalization.Extensions.dll", + "system.globalization.extensions.4.3.0.nupkg.sha512", + "system.globalization.extensions.nuspec" + ] + }, + "System.IO/4.3.0": { + "sha512": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", + "type": "package", + "path": "system.io/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.IO.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.IO.dll", + "ref/netcore50/System.IO.dll", + "ref/netcore50/System.IO.xml", + "ref/netcore50/de/System.IO.xml", + "ref/netcore50/es/System.IO.xml", + "ref/netcore50/fr/System.IO.xml", + "ref/netcore50/it/System.IO.xml", + "ref/netcore50/ja/System.IO.xml", + "ref/netcore50/ko/System.IO.xml", + "ref/netcore50/ru/System.IO.xml", + "ref/netcore50/zh-hans/System.IO.xml", + "ref/netcore50/zh-hant/System.IO.xml", + "ref/netstandard1.0/System.IO.dll", + "ref/netstandard1.0/System.IO.xml", + "ref/netstandard1.0/de/System.IO.xml", + "ref/netstandard1.0/es/System.IO.xml", + "ref/netstandard1.0/fr/System.IO.xml", + "ref/netstandard1.0/it/System.IO.xml", + "ref/netstandard1.0/ja/System.IO.xml", + "ref/netstandard1.0/ko/System.IO.xml", + "ref/netstandard1.0/ru/System.IO.xml", + "ref/netstandard1.0/zh-hans/System.IO.xml", + "ref/netstandard1.0/zh-hant/System.IO.xml", + "ref/netstandard1.3/System.IO.dll", + "ref/netstandard1.3/System.IO.xml", + "ref/netstandard1.3/de/System.IO.xml", + "ref/netstandard1.3/es/System.IO.xml", + "ref/netstandard1.3/fr/System.IO.xml", + "ref/netstandard1.3/it/System.IO.xml", + "ref/netstandard1.3/ja/System.IO.xml", + "ref/netstandard1.3/ko/System.IO.xml", + "ref/netstandard1.3/ru/System.IO.xml", + "ref/netstandard1.3/zh-hans/System.IO.xml", + "ref/netstandard1.3/zh-hant/System.IO.xml", + "ref/netstandard1.5/System.IO.dll", + "ref/netstandard1.5/System.IO.xml", + "ref/netstandard1.5/de/System.IO.xml", + "ref/netstandard1.5/es/System.IO.xml", + "ref/netstandard1.5/fr/System.IO.xml", + "ref/netstandard1.5/it/System.IO.xml", + "ref/netstandard1.5/ja/System.IO.xml", + "ref/netstandard1.5/ko/System.IO.xml", + "ref/netstandard1.5/ru/System.IO.xml", + "ref/netstandard1.5/zh-hans/System.IO.xml", + "ref/netstandard1.5/zh-hant/System.IO.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.io.4.3.0.nupkg.sha512", + "system.io.nuspec" + ] + }, + "System.IO.FileSystem/4.3.0": { + "sha512": "3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==", + "type": "package", + "path": "system.io.filesystem/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.IO.FileSystem.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.IO.FileSystem.dll", + "ref/netstandard1.3/System.IO.FileSystem.dll", + "ref/netstandard1.3/System.IO.FileSystem.xml", + "ref/netstandard1.3/de/System.IO.FileSystem.xml", + "ref/netstandard1.3/es/System.IO.FileSystem.xml", + "ref/netstandard1.3/fr/System.IO.FileSystem.xml", + "ref/netstandard1.3/it/System.IO.FileSystem.xml", + "ref/netstandard1.3/ja/System.IO.FileSystem.xml", + "ref/netstandard1.3/ko/System.IO.FileSystem.xml", + "ref/netstandard1.3/ru/System.IO.FileSystem.xml", + "ref/netstandard1.3/zh-hans/System.IO.FileSystem.xml", + "ref/netstandard1.3/zh-hant/System.IO.FileSystem.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.io.filesystem.4.3.0.nupkg.sha512", + "system.io.filesystem.nuspec" + ] + }, + "System.IO.FileSystem.Primitives/4.3.0": { + "sha512": "6QOb2XFLch7bEc4lIcJH49nJN2HV+OC3fHDgsLVsBVBk3Y4hFAnOBGzJ2lUu7CyDDFo9IBWkSsnbkT6IBwwiMw==", + "type": "package", + "path": "system.io.filesystem.primitives/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.IO.FileSystem.Primitives.dll", + "lib/netstandard1.3/System.IO.FileSystem.Primitives.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.IO.FileSystem.Primitives.dll", + "ref/netstandard1.3/System.IO.FileSystem.Primitives.dll", + "ref/netstandard1.3/System.IO.FileSystem.Primitives.xml", + "ref/netstandard1.3/de/System.IO.FileSystem.Primitives.xml", + "ref/netstandard1.3/es/System.IO.FileSystem.Primitives.xml", + "ref/netstandard1.3/fr/System.IO.FileSystem.Primitives.xml", + "ref/netstandard1.3/it/System.IO.FileSystem.Primitives.xml", + "ref/netstandard1.3/ja/System.IO.FileSystem.Primitives.xml", + "ref/netstandard1.3/ko/System.IO.FileSystem.Primitives.xml", + "ref/netstandard1.3/ru/System.IO.FileSystem.Primitives.xml", + "ref/netstandard1.3/zh-hans/System.IO.FileSystem.Primitives.xml", + "ref/netstandard1.3/zh-hant/System.IO.FileSystem.Primitives.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.io.filesystem.primitives.4.3.0.nupkg.sha512", + "system.io.filesystem.primitives.nuspec" + ] + }, + "System.Linq/4.3.0": { + "sha512": "5DbqIUpsDp0dFftytzuMmc0oeMdQwjcP/EWxsksIz/w1TcFRkZ3yKKz0PqiYFMmEwPSWw+qNVqD7PJ889JzHbw==", + "type": "package", + "path": "system.linq/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net463/System.Linq.dll", + "lib/netcore50/System.Linq.dll", + "lib/netstandard1.6/System.Linq.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net463/System.Linq.dll", + "ref/netcore50/System.Linq.dll", + "ref/netcore50/System.Linq.xml", + "ref/netcore50/de/System.Linq.xml", + "ref/netcore50/es/System.Linq.xml", + "ref/netcore50/fr/System.Linq.xml", + "ref/netcore50/it/System.Linq.xml", + "ref/netcore50/ja/System.Linq.xml", + "ref/netcore50/ko/System.Linq.xml", + "ref/netcore50/ru/System.Linq.xml", + "ref/netcore50/zh-hans/System.Linq.xml", + "ref/netcore50/zh-hant/System.Linq.xml", + "ref/netstandard1.0/System.Linq.dll", + "ref/netstandard1.0/System.Linq.xml", + "ref/netstandard1.0/de/System.Linq.xml", + "ref/netstandard1.0/es/System.Linq.xml", + "ref/netstandard1.0/fr/System.Linq.xml", + "ref/netstandard1.0/it/System.Linq.xml", + "ref/netstandard1.0/ja/System.Linq.xml", + "ref/netstandard1.0/ko/System.Linq.xml", + "ref/netstandard1.0/ru/System.Linq.xml", + "ref/netstandard1.0/zh-hans/System.Linq.xml", + "ref/netstandard1.0/zh-hant/System.Linq.xml", + "ref/netstandard1.6/System.Linq.dll", + "ref/netstandard1.6/System.Linq.xml", + "ref/netstandard1.6/de/System.Linq.xml", + "ref/netstandard1.6/es/System.Linq.xml", + "ref/netstandard1.6/fr/System.Linq.xml", + "ref/netstandard1.6/it/System.Linq.xml", + "ref/netstandard1.6/ja/System.Linq.xml", + "ref/netstandard1.6/ko/System.Linq.xml", + "ref/netstandard1.6/ru/System.Linq.xml", + "ref/netstandard1.6/zh-hans/System.Linq.xml", + "ref/netstandard1.6/zh-hant/System.Linq.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.linq.4.3.0.nupkg.sha512", + "system.linq.nuspec" + ] + }, + "System.Net.Http/4.3.4": { + "sha512": "aOa2d51SEbmM+H+Csw7yJOuNZoHkrP2XnAurye5HWYgGVVU54YZDvsLUYRv6h18X3sPnjNCANmN7ZhIPiqMcjA==", + "type": "package", + "path": "system.net.http/4.3.4", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/Xamarinmac20/_._", + "lib/monoandroid10/_._", + "lib/monotouch10/_._", + "lib/net45/_._", + "lib/net46/System.Net.Http.dll", + "lib/portable-net45+win8+wpa81/_._", + "lib/win8/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/Xamarinmac20/_._", + "ref/monoandroid10/_._", + "ref/monotouch10/_._", + "ref/net45/_._", + "ref/net46/System.Net.Http.dll", + "ref/netcore50/System.Net.Http.dll", + "ref/netstandard1.1/System.Net.Http.dll", + "ref/netstandard1.3/System.Net.Http.dll", + "ref/portable-net45+win8+wpa81/_._", + "ref/win8/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/unix/lib/netstandard1.6/System.Net.Http.dll", + "runtimes/win/lib/net46/System.Net.Http.dll", + "runtimes/win/lib/netcore50/System.Net.Http.dll", + "runtimes/win/lib/netstandard1.3/System.Net.Http.dll", + "system.net.http.4.3.4.nupkg.sha512", + "system.net.http.nuspec" + ] + }, + "System.Net.Primitives/4.3.0": { + "sha512": "qOu+hDwFwoZPbzPvwut2qATe3ygjeQBDQj91xlsaqGFQUI5i4ZnZb8yyQuLGpDGivEPIt8EJkd1BVzVoP31FXA==", + "type": "package", + "path": "system.net.primitives/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Net.Primitives.dll", + "ref/netcore50/System.Net.Primitives.xml", + "ref/netcore50/de/System.Net.Primitives.xml", + "ref/netcore50/es/System.Net.Primitives.xml", + "ref/netcore50/fr/System.Net.Primitives.xml", + "ref/netcore50/it/System.Net.Primitives.xml", + "ref/netcore50/ja/System.Net.Primitives.xml", + "ref/netcore50/ko/System.Net.Primitives.xml", + "ref/netcore50/ru/System.Net.Primitives.xml", + "ref/netcore50/zh-hans/System.Net.Primitives.xml", + "ref/netcore50/zh-hant/System.Net.Primitives.xml", + "ref/netstandard1.0/System.Net.Primitives.dll", + "ref/netstandard1.0/System.Net.Primitives.xml", + "ref/netstandard1.0/de/System.Net.Primitives.xml", + "ref/netstandard1.0/es/System.Net.Primitives.xml", + "ref/netstandard1.0/fr/System.Net.Primitives.xml", + "ref/netstandard1.0/it/System.Net.Primitives.xml", + "ref/netstandard1.0/ja/System.Net.Primitives.xml", + "ref/netstandard1.0/ko/System.Net.Primitives.xml", + "ref/netstandard1.0/ru/System.Net.Primitives.xml", + "ref/netstandard1.0/zh-hans/System.Net.Primitives.xml", + "ref/netstandard1.0/zh-hant/System.Net.Primitives.xml", + "ref/netstandard1.1/System.Net.Primitives.dll", + "ref/netstandard1.1/System.Net.Primitives.xml", + "ref/netstandard1.1/de/System.Net.Primitives.xml", + "ref/netstandard1.1/es/System.Net.Primitives.xml", + "ref/netstandard1.1/fr/System.Net.Primitives.xml", + "ref/netstandard1.1/it/System.Net.Primitives.xml", + "ref/netstandard1.1/ja/System.Net.Primitives.xml", + "ref/netstandard1.1/ko/System.Net.Primitives.xml", + "ref/netstandard1.1/ru/System.Net.Primitives.xml", + "ref/netstandard1.1/zh-hans/System.Net.Primitives.xml", + "ref/netstandard1.1/zh-hant/System.Net.Primitives.xml", + "ref/netstandard1.3/System.Net.Primitives.dll", + "ref/netstandard1.3/System.Net.Primitives.xml", + "ref/netstandard1.3/de/System.Net.Primitives.xml", + "ref/netstandard1.3/es/System.Net.Primitives.xml", + "ref/netstandard1.3/fr/System.Net.Primitives.xml", + "ref/netstandard1.3/it/System.Net.Primitives.xml", + "ref/netstandard1.3/ja/System.Net.Primitives.xml", + "ref/netstandard1.3/ko/System.Net.Primitives.xml", + "ref/netstandard1.3/ru/System.Net.Primitives.xml", + "ref/netstandard1.3/zh-hans/System.Net.Primitives.xml", + "ref/netstandard1.3/zh-hant/System.Net.Primitives.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.net.primitives.4.3.0.nupkg.sha512", + "system.net.primitives.nuspec" + ] + }, + "System.Reflection/4.3.0": { + "sha512": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", + "type": "package", + "path": "system.reflection/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Reflection.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Reflection.dll", + "ref/netcore50/System.Reflection.dll", + "ref/netcore50/System.Reflection.xml", + "ref/netcore50/de/System.Reflection.xml", + "ref/netcore50/es/System.Reflection.xml", + "ref/netcore50/fr/System.Reflection.xml", + "ref/netcore50/it/System.Reflection.xml", + "ref/netcore50/ja/System.Reflection.xml", + "ref/netcore50/ko/System.Reflection.xml", + "ref/netcore50/ru/System.Reflection.xml", + "ref/netcore50/zh-hans/System.Reflection.xml", + "ref/netcore50/zh-hant/System.Reflection.xml", + "ref/netstandard1.0/System.Reflection.dll", + "ref/netstandard1.0/System.Reflection.xml", + "ref/netstandard1.0/de/System.Reflection.xml", + "ref/netstandard1.0/es/System.Reflection.xml", + "ref/netstandard1.0/fr/System.Reflection.xml", + "ref/netstandard1.0/it/System.Reflection.xml", + "ref/netstandard1.0/ja/System.Reflection.xml", + "ref/netstandard1.0/ko/System.Reflection.xml", + "ref/netstandard1.0/ru/System.Reflection.xml", + "ref/netstandard1.0/zh-hans/System.Reflection.xml", + "ref/netstandard1.0/zh-hant/System.Reflection.xml", + "ref/netstandard1.3/System.Reflection.dll", + "ref/netstandard1.3/System.Reflection.xml", + "ref/netstandard1.3/de/System.Reflection.xml", + "ref/netstandard1.3/es/System.Reflection.xml", + "ref/netstandard1.3/fr/System.Reflection.xml", + "ref/netstandard1.3/it/System.Reflection.xml", + "ref/netstandard1.3/ja/System.Reflection.xml", + "ref/netstandard1.3/ko/System.Reflection.xml", + "ref/netstandard1.3/ru/System.Reflection.xml", + "ref/netstandard1.3/zh-hans/System.Reflection.xml", + "ref/netstandard1.3/zh-hant/System.Reflection.xml", + "ref/netstandard1.5/System.Reflection.dll", + "ref/netstandard1.5/System.Reflection.xml", + "ref/netstandard1.5/de/System.Reflection.xml", + "ref/netstandard1.5/es/System.Reflection.xml", + "ref/netstandard1.5/fr/System.Reflection.xml", + "ref/netstandard1.5/it/System.Reflection.xml", + "ref/netstandard1.5/ja/System.Reflection.xml", + "ref/netstandard1.5/ko/System.Reflection.xml", + "ref/netstandard1.5/ru/System.Reflection.xml", + "ref/netstandard1.5/zh-hans/System.Reflection.xml", + "ref/netstandard1.5/zh-hant/System.Reflection.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.reflection.4.3.0.nupkg.sha512", + "system.reflection.nuspec" + ] + }, + "System.Reflection.Emit/4.7.0": { + "sha512": "VR4kk8XLKebQ4MZuKuIni/7oh+QGFmZW3qORd1GvBq/8026OpW501SzT/oypwiQl4TvT8ErnReh/NzY9u+C6wQ==", + "type": "package", + "path": "system.reflection.emit/4.7.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.Reflection.Emit.dll", + "lib/netcoreapp2.0/_._", + "lib/netstandard1.1/System.Reflection.Emit.dll", + "lib/netstandard1.1/System.Reflection.Emit.xml", + "lib/netstandard1.3/System.Reflection.Emit.dll", + "lib/netstandard2.0/System.Reflection.Emit.dll", + "lib/netstandard2.0/System.Reflection.Emit.xml", + "lib/netstandard2.1/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcoreapp2.0/_._", + "ref/netstandard1.1/System.Reflection.Emit.dll", + "ref/netstandard1.1/System.Reflection.Emit.xml", + "ref/netstandard1.1/de/System.Reflection.Emit.xml", + "ref/netstandard1.1/es/System.Reflection.Emit.xml", + "ref/netstandard1.1/fr/System.Reflection.Emit.xml", + "ref/netstandard1.1/it/System.Reflection.Emit.xml", + "ref/netstandard1.1/ja/System.Reflection.Emit.xml", + "ref/netstandard1.1/ko/System.Reflection.Emit.xml", + "ref/netstandard1.1/ru/System.Reflection.Emit.xml", + "ref/netstandard1.1/zh-hans/System.Reflection.Emit.xml", + "ref/netstandard1.1/zh-hant/System.Reflection.Emit.xml", + "ref/netstandard2.0/System.Reflection.Emit.dll", + "ref/netstandard2.0/System.Reflection.Emit.xml", + "ref/netstandard2.1/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/aot/lib/netcore50/System.Reflection.Emit.dll", + "runtimes/aot/lib/netcore50/System.Reflection.Emit.xml", + "system.reflection.emit.4.7.0.nupkg.sha512", + "system.reflection.emit.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Reflection.Emit.ILGeneration/4.7.0": { + "sha512": "AucBYo3DSI0IDxdUjKksBcQJXPHyoPyrCXYURW1WDsLI4M65Ar/goSHjdnHOAY9MiYDNKqDlIgaYm+zL2hA1KA==", + "type": "package", + "path": "system.reflection.emit.ilgeneration/4.7.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.Reflection.Emit.ILGeneration.dll", + "lib/netcoreapp2.0/_._", + "lib/netstandard1.0/System.Reflection.Emit.ILGeneration.dll", + "lib/netstandard1.0/System.Reflection.Emit.ILGeneration.xml", + "lib/netstandard1.3/System.Reflection.Emit.ILGeneration.dll", + "lib/netstandard2.0/System.Reflection.Emit.ILGeneration.dll", + "lib/netstandard2.0/System.Reflection.Emit.ILGeneration.xml", + "lib/netstandard2.1/_._", + "lib/portable-net45+wp8/_._", + "lib/wp80/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcoreapp2.0/_._", + "ref/netstandard1.0/System.Reflection.Emit.ILGeneration.dll", + "ref/netstandard1.0/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard1.0/de/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard1.0/es/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard1.0/fr/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard1.0/it/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard1.0/ja/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard1.0/ko/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard1.0/ru/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard1.0/zh-hans/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard1.0/zh-hant/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard2.0/System.Reflection.Emit.ILGeneration.dll", + "ref/netstandard2.0/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard2.1/_._", + "ref/portable-net45+wp8/_._", + "ref/wp80/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/aot/lib/netcore50/System.Reflection.Emit.ILGeneration.dll", + "runtimes/aot/lib/netcore50/System.Reflection.Emit.ILGeneration.xml", + "system.reflection.emit.ilgeneration.4.7.0.nupkg.sha512", + "system.reflection.emit.ilgeneration.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Reflection.Emit.Lightweight/4.7.0": { + "sha512": "a4OLB4IITxAXJeV74MDx49Oq2+PsF6Sml54XAFv+2RyWwtDBcabzoxiiJRhdhx+gaohLh4hEGCLQyBozXoQPqA==", + "type": "package", + "path": "system.reflection.emit.lightweight/4.7.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.Reflection.Emit.Lightweight.dll", + "lib/netcoreapp2.0/_._", + "lib/netstandard1.0/System.Reflection.Emit.Lightweight.dll", + "lib/netstandard1.0/System.Reflection.Emit.Lightweight.xml", + "lib/netstandard1.3/System.Reflection.Emit.Lightweight.dll", + "lib/netstandard2.0/System.Reflection.Emit.Lightweight.dll", + "lib/netstandard2.0/System.Reflection.Emit.Lightweight.xml", + "lib/netstandard2.1/_._", + "lib/portable-net45+wp8/_._", + "lib/wp80/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcoreapp2.0/_._", + "ref/netstandard1.0/System.Reflection.Emit.Lightweight.dll", + "ref/netstandard1.0/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/de/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/es/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/fr/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/it/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/ja/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/ko/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/ru/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/zh-hans/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/zh-hant/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard2.0/System.Reflection.Emit.Lightweight.dll", + "ref/netstandard2.0/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard2.1/_._", + "ref/portable-net45+wp8/_._", + "ref/wp80/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/aot/lib/netcore50/System.Reflection.Emit.Lightweight.dll", + "runtimes/aot/lib/netcore50/System.Reflection.Emit.Lightweight.xml", + "system.reflection.emit.lightweight.4.7.0.nupkg.sha512", + "system.reflection.emit.lightweight.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Reflection.Extensions/4.3.0": { + "sha512": "rJkrJD3kBI5B712aRu4DpSIiHRtr6QlfZSQsb0hYHrDCZORXCFjQfoipo2LaMUHoT9i1B7j7MnfaEKWDFmFQNQ==", + "type": "package", + "path": "system.reflection.extensions/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Reflection.Extensions.dll", + "ref/netcore50/System.Reflection.Extensions.xml", + "ref/netcore50/de/System.Reflection.Extensions.xml", + "ref/netcore50/es/System.Reflection.Extensions.xml", + "ref/netcore50/fr/System.Reflection.Extensions.xml", + "ref/netcore50/it/System.Reflection.Extensions.xml", + "ref/netcore50/ja/System.Reflection.Extensions.xml", + "ref/netcore50/ko/System.Reflection.Extensions.xml", + "ref/netcore50/ru/System.Reflection.Extensions.xml", + "ref/netcore50/zh-hans/System.Reflection.Extensions.xml", + "ref/netcore50/zh-hant/System.Reflection.Extensions.xml", + "ref/netstandard1.0/System.Reflection.Extensions.dll", + "ref/netstandard1.0/System.Reflection.Extensions.xml", + "ref/netstandard1.0/de/System.Reflection.Extensions.xml", + "ref/netstandard1.0/es/System.Reflection.Extensions.xml", + "ref/netstandard1.0/fr/System.Reflection.Extensions.xml", + "ref/netstandard1.0/it/System.Reflection.Extensions.xml", + "ref/netstandard1.0/ja/System.Reflection.Extensions.xml", + "ref/netstandard1.0/ko/System.Reflection.Extensions.xml", + "ref/netstandard1.0/ru/System.Reflection.Extensions.xml", + "ref/netstandard1.0/zh-hans/System.Reflection.Extensions.xml", + "ref/netstandard1.0/zh-hant/System.Reflection.Extensions.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.reflection.extensions.4.3.0.nupkg.sha512", + "system.reflection.extensions.nuspec" + ] + }, + "System.Reflection.Primitives/4.3.0": { + "sha512": "5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==", + "type": "package", + "path": "system.reflection.primitives/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Reflection.Primitives.dll", + "ref/netcore50/System.Reflection.Primitives.xml", + "ref/netcore50/de/System.Reflection.Primitives.xml", + "ref/netcore50/es/System.Reflection.Primitives.xml", + "ref/netcore50/fr/System.Reflection.Primitives.xml", + "ref/netcore50/it/System.Reflection.Primitives.xml", + "ref/netcore50/ja/System.Reflection.Primitives.xml", + "ref/netcore50/ko/System.Reflection.Primitives.xml", + "ref/netcore50/ru/System.Reflection.Primitives.xml", + "ref/netcore50/zh-hans/System.Reflection.Primitives.xml", + "ref/netcore50/zh-hant/System.Reflection.Primitives.xml", + "ref/netstandard1.0/System.Reflection.Primitives.dll", + "ref/netstandard1.0/System.Reflection.Primitives.xml", + "ref/netstandard1.0/de/System.Reflection.Primitives.xml", + "ref/netstandard1.0/es/System.Reflection.Primitives.xml", + "ref/netstandard1.0/fr/System.Reflection.Primitives.xml", + "ref/netstandard1.0/it/System.Reflection.Primitives.xml", + "ref/netstandard1.0/ja/System.Reflection.Primitives.xml", + "ref/netstandard1.0/ko/System.Reflection.Primitives.xml", + "ref/netstandard1.0/ru/System.Reflection.Primitives.xml", + "ref/netstandard1.0/zh-hans/System.Reflection.Primitives.xml", + "ref/netstandard1.0/zh-hant/System.Reflection.Primitives.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.reflection.primitives.4.3.0.nupkg.sha512", + "system.reflection.primitives.nuspec" + ] + }, + "System.Reflection.TypeExtensions/4.7.0": { + "sha512": "VybpaOQQhqE6siHppMktjfGBw1GCwvCqiufqmP8F1nj7fTUNtW35LOEt3UZTEsECfo+ELAl/9o9nJx3U91i7vA==", + "type": "package", + "path": "system.reflection.typeextensions/4.7.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Reflection.TypeExtensions.dll", + "lib/net461/System.Reflection.TypeExtensions.dll", + "lib/net461/System.Reflection.TypeExtensions.xml", + "lib/netcore50/System.Reflection.TypeExtensions.dll", + "lib/netcoreapp1.0/System.Reflection.TypeExtensions.dll", + "lib/netcoreapp2.0/_._", + "lib/netstandard1.3/System.Reflection.TypeExtensions.dll", + "lib/netstandard1.3/System.Reflection.TypeExtensions.xml", + "lib/netstandard1.5/System.Reflection.TypeExtensions.dll", + "lib/netstandard1.5/System.Reflection.TypeExtensions.xml", + "lib/netstandard2.0/System.Reflection.TypeExtensions.dll", + "lib/netstandard2.0/System.Reflection.TypeExtensions.xml", + "lib/uap10.0.16299/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Reflection.TypeExtensions.dll", + "ref/net461/System.Reflection.TypeExtensions.dll", + "ref/net461/System.Reflection.TypeExtensions.xml", + "ref/net472/System.Reflection.TypeExtensions.dll", + "ref/net472/System.Reflection.TypeExtensions.xml", + "ref/netcoreapp2.0/_._", + "ref/netstandard1.3/System.Reflection.TypeExtensions.dll", + "ref/netstandard1.3/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/de/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/es/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/fr/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/it/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/ja/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/ko/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/ru/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/zh-hans/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/zh-hant/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/System.Reflection.TypeExtensions.dll", + "ref/netstandard1.5/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/de/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/es/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/fr/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/it/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/ja/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/ko/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/ru/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/zh-hans/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/zh-hant/System.Reflection.TypeExtensions.xml", + "ref/netstandard2.0/System.Reflection.TypeExtensions.dll", + "ref/netstandard2.0/System.Reflection.TypeExtensions.xml", + "ref/uap10.0.16299/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/aot/lib/netcore50/System.Reflection.TypeExtensions.dll", + "runtimes/aot/lib/uap10.0.16299/_._", + "system.reflection.typeextensions.4.7.0.nupkg.sha512", + "system.reflection.typeextensions.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Resources.ResourceManager/4.3.0": { + "sha512": "/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", + "type": "package", + "path": "system.resources.resourcemanager/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Resources.ResourceManager.dll", + "ref/netcore50/System.Resources.ResourceManager.xml", + "ref/netcore50/de/System.Resources.ResourceManager.xml", + "ref/netcore50/es/System.Resources.ResourceManager.xml", + "ref/netcore50/fr/System.Resources.ResourceManager.xml", + "ref/netcore50/it/System.Resources.ResourceManager.xml", + "ref/netcore50/ja/System.Resources.ResourceManager.xml", + "ref/netcore50/ko/System.Resources.ResourceManager.xml", + "ref/netcore50/ru/System.Resources.ResourceManager.xml", + "ref/netcore50/zh-hans/System.Resources.ResourceManager.xml", + "ref/netcore50/zh-hant/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/System.Resources.ResourceManager.dll", + "ref/netstandard1.0/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/de/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/es/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/fr/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/it/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/ja/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/ko/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/ru/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/zh-hans/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/zh-hant/System.Resources.ResourceManager.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.resources.resourcemanager.4.3.0.nupkg.sha512", + "system.resources.resourcemanager.nuspec" + ] + }, + "System.Runtime/4.3.0": { + "sha512": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", + "type": "package", + "path": "system.runtime/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Runtime.dll", + "lib/portable-net45+win8+wp80+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Runtime.dll", + "ref/netcore50/System.Runtime.dll", + "ref/netcore50/System.Runtime.xml", + "ref/netcore50/de/System.Runtime.xml", + "ref/netcore50/es/System.Runtime.xml", + "ref/netcore50/fr/System.Runtime.xml", + "ref/netcore50/it/System.Runtime.xml", + "ref/netcore50/ja/System.Runtime.xml", + "ref/netcore50/ko/System.Runtime.xml", + "ref/netcore50/ru/System.Runtime.xml", + "ref/netcore50/zh-hans/System.Runtime.xml", + "ref/netcore50/zh-hant/System.Runtime.xml", + "ref/netstandard1.0/System.Runtime.dll", + "ref/netstandard1.0/System.Runtime.xml", + "ref/netstandard1.0/de/System.Runtime.xml", + "ref/netstandard1.0/es/System.Runtime.xml", + "ref/netstandard1.0/fr/System.Runtime.xml", + "ref/netstandard1.0/it/System.Runtime.xml", + "ref/netstandard1.0/ja/System.Runtime.xml", + "ref/netstandard1.0/ko/System.Runtime.xml", + "ref/netstandard1.0/ru/System.Runtime.xml", + "ref/netstandard1.0/zh-hans/System.Runtime.xml", + "ref/netstandard1.0/zh-hant/System.Runtime.xml", + "ref/netstandard1.2/System.Runtime.dll", + "ref/netstandard1.2/System.Runtime.xml", + "ref/netstandard1.2/de/System.Runtime.xml", + "ref/netstandard1.2/es/System.Runtime.xml", + "ref/netstandard1.2/fr/System.Runtime.xml", + "ref/netstandard1.2/it/System.Runtime.xml", + "ref/netstandard1.2/ja/System.Runtime.xml", + "ref/netstandard1.2/ko/System.Runtime.xml", + "ref/netstandard1.2/ru/System.Runtime.xml", + "ref/netstandard1.2/zh-hans/System.Runtime.xml", + "ref/netstandard1.2/zh-hant/System.Runtime.xml", + "ref/netstandard1.3/System.Runtime.dll", + "ref/netstandard1.3/System.Runtime.xml", + "ref/netstandard1.3/de/System.Runtime.xml", + "ref/netstandard1.3/es/System.Runtime.xml", + "ref/netstandard1.3/fr/System.Runtime.xml", + "ref/netstandard1.3/it/System.Runtime.xml", + "ref/netstandard1.3/ja/System.Runtime.xml", + "ref/netstandard1.3/ko/System.Runtime.xml", + "ref/netstandard1.3/ru/System.Runtime.xml", + "ref/netstandard1.3/zh-hans/System.Runtime.xml", + "ref/netstandard1.3/zh-hant/System.Runtime.xml", + "ref/netstandard1.5/System.Runtime.dll", + "ref/netstandard1.5/System.Runtime.xml", + "ref/netstandard1.5/de/System.Runtime.xml", + "ref/netstandard1.5/es/System.Runtime.xml", + "ref/netstandard1.5/fr/System.Runtime.xml", + "ref/netstandard1.5/it/System.Runtime.xml", + "ref/netstandard1.5/ja/System.Runtime.xml", + "ref/netstandard1.5/ko/System.Runtime.xml", + "ref/netstandard1.5/ru/System.Runtime.xml", + "ref/netstandard1.5/zh-hans/System.Runtime.xml", + "ref/netstandard1.5/zh-hant/System.Runtime.xml", + "ref/portable-net45+win8+wp80+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.runtime.4.3.0.nupkg.sha512", + "system.runtime.nuspec" + ] + }, + "System.Runtime.Extensions/4.3.0": { + "sha512": "guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==", + "type": "package", + "path": "system.runtime.extensions/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Runtime.Extensions.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Runtime.Extensions.dll", + "ref/netcore50/System.Runtime.Extensions.dll", + "ref/netcore50/System.Runtime.Extensions.xml", + "ref/netcore50/de/System.Runtime.Extensions.xml", + "ref/netcore50/es/System.Runtime.Extensions.xml", + "ref/netcore50/fr/System.Runtime.Extensions.xml", + "ref/netcore50/it/System.Runtime.Extensions.xml", + "ref/netcore50/ja/System.Runtime.Extensions.xml", + "ref/netcore50/ko/System.Runtime.Extensions.xml", + "ref/netcore50/ru/System.Runtime.Extensions.xml", + "ref/netcore50/zh-hans/System.Runtime.Extensions.xml", + "ref/netcore50/zh-hant/System.Runtime.Extensions.xml", + "ref/netstandard1.0/System.Runtime.Extensions.dll", + "ref/netstandard1.0/System.Runtime.Extensions.xml", + "ref/netstandard1.0/de/System.Runtime.Extensions.xml", + "ref/netstandard1.0/es/System.Runtime.Extensions.xml", + "ref/netstandard1.0/fr/System.Runtime.Extensions.xml", + "ref/netstandard1.0/it/System.Runtime.Extensions.xml", + "ref/netstandard1.0/ja/System.Runtime.Extensions.xml", + "ref/netstandard1.0/ko/System.Runtime.Extensions.xml", + "ref/netstandard1.0/ru/System.Runtime.Extensions.xml", + "ref/netstandard1.0/zh-hans/System.Runtime.Extensions.xml", + "ref/netstandard1.0/zh-hant/System.Runtime.Extensions.xml", + "ref/netstandard1.3/System.Runtime.Extensions.dll", + "ref/netstandard1.3/System.Runtime.Extensions.xml", + "ref/netstandard1.3/de/System.Runtime.Extensions.xml", + "ref/netstandard1.3/es/System.Runtime.Extensions.xml", + "ref/netstandard1.3/fr/System.Runtime.Extensions.xml", + "ref/netstandard1.3/it/System.Runtime.Extensions.xml", + "ref/netstandard1.3/ja/System.Runtime.Extensions.xml", + "ref/netstandard1.3/ko/System.Runtime.Extensions.xml", + "ref/netstandard1.3/ru/System.Runtime.Extensions.xml", + "ref/netstandard1.3/zh-hans/System.Runtime.Extensions.xml", + "ref/netstandard1.3/zh-hant/System.Runtime.Extensions.xml", + "ref/netstandard1.5/System.Runtime.Extensions.dll", + "ref/netstandard1.5/System.Runtime.Extensions.xml", + "ref/netstandard1.5/de/System.Runtime.Extensions.xml", + "ref/netstandard1.5/es/System.Runtime.Extensions.xml", + "ref/netstandard1.5/fr/System.Runtime.Extensions.xml", + "ref/netstandard1.5/it/System.Runtime.Extensions.xml", + "ref/netstandard1.5/ja/System.Runtime.Extensions.xml", + "ref/netstandard1.5/ko/System.Runtime.Extensions.xml", + "ref/netstandard1.5/ru/System.Runtime.Extensions.xml", + "ref/netstandard1.5/zh-hans/System.Runtime.Extensions.xml", + "ref/netstandard1.5/zh-hant/System.Runtime.Extensions.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.runtime.extensions.4.3.0.nupkg.sha512", + "system.runtime.extensions.nuspec" + ] + }, + "System.Runtime.Handles/4.3.0": { + "sha512": "OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==", + "type": "package", + "path": "system.runtime.handles/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/_._", + "ref/netstandard1.3/System.Runtime.Handles.dll", + "ref/netstandard1.3/System.Runtime.Handles.xml", + "ref/netstandard1.3/de/System.Runtime.Handles.xml", + "ref/netstandard1.3/es/System.Runtime.Handles.xml", + "ref/netstandard1.3/fr/System.Runtime.Handles.xml", + "ref/netstandard1.3/it/System.Runtime.Handles.xml", + "ref/netstandard1.3/ja/System.Runtime.Handles.xml", + "ref/netstandard1.3/ko/System.Runtime.Handles.xml", + "ref/netstandard1.3/ru/System.Runtime.Handles.xml", + "ref/netstandard1.3/zh-hans/System.Runtime.Handles.xml", + "ref/netstandard1.3/zh-hant/System.Runtime.Handles.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.runtime.handles.4.3.0.nupkg.sha512", + "system.runtime.handles.nuspec" + ] + }, + "System.Runtime.InteropServices/4.3.0": { + "sha512": "uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==", + "type": "package", + "path": "system.runtime.interopservices/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Runtime.InteropServices.dll", + "lib/net463/System.Runtime.InteropServices.dll", + "lib/portable-net45+win8+wpa81/_._", + "lib/win8/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Runtime.InteropServices.dll", + "ref/net463/System.Runtime.InteropServices.dll", + "ref/netcore50/System.Runtime.InteropServices.dll", + "ref/netcore50/System.Runtime.InteropServices.xml", + "ref/netcore50/de/System.Runtime.InteropServices.xml", + "ref/netcore50/es/System.Runtime.InteropServices.xml", + "ref/netcore50/fr/System.Runtime.InteropServices.xml", + "ref/netcore50/it/System.Runtime.InteropServices.xml", + "ref/netcore50/ja/System.Runtime.InteropServices.xml", + "ref/netcore50/ko/System.Runtime.InteropServices.xml", + "ref/netcore50/ru/System.Runtime.InteropServices.xml", + "ref/netcore50/zh-hans/System.Runtime.InteropServices.xml", + "ref/netcore50/zh-hant/System.Runtime.InteropServices.xml", + "ref/netcoreapp1.1/System.Runtime.InteropServices.dll", + "ref/netstandard1.1/System.Runtime.InteropServices.dll", + "ref/netstandard1.1/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/de/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/es/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/fr/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/it/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/ja/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/ko/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/ru/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/zh-hans/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/zh-hant/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/System.Runtime.InteropServices.dll", + "ref/netstandard1.2/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/de/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/es/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/fr/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/it/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/ja/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/ko/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/ru/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/zh-hans/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/zh-hant/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/System.Runtime.InteropServices.dll", + "ref/netstandard1.3/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/de/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/es/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/fr/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/it/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/ja/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/ko/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/ru/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/zh-hans/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/zh-hant/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/System.Runtime.InteropServices.dll", + "ref/netstandard1.5/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/de/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/es/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/fr/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/it/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/ja/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/ko/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/ru/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/zh-hans/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/zh-hant/System.Runtime.InteropServices.xml", + "ref/portable-net45+win8+wpa81/_._", + "ref/win8/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.runtime.interopservices.4.3.0.nupkg.sha512", + "system.runtime.interopservices.nuspec" + ] + }, + "System.Runtime.Numerics/4.3.0": { + "sha512": "yMH+MfdzHjy17l2KESnPiF2dwq7T+xLnSJar7slyimAkUh/gTrS9/UQOtv7xarskJ2/XDSNvfLGOBQPjL7PaHQ==", + "type": "package", + "path": "system.runtime.numerics/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.Runtime.Numerics.dll", + "lib/netstandard1.3/System.Runtime.Numerics.dll", + "lib/portable-net45+win8+wpa81/_._", + "lib/win8/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Runtime.Numerics.dll", + "ref/netcore50/System.Runtime.Numerics.xml", + "ref/netcore50/de/System.Runtime.Numerics.xml", + "ref/netcore50/es/System.Runtime.Numerics.xml", + "ref/netcore50/fr/System.Runtime.Numerics.xml", + "ref/netcore50/it/System.Runtime.Numerics.xml", + "ref/netcore50/ja/System.Runtime.Numerics.xml", + "ref/netcore50/ko/System.Runtime.Numerics.xml", + "ref/netcore50/ru/System.Runtime.Numerics.xml", + "ref/netcore50/zh-hans/System.Runtime.Numerics.xml", + "ref/netcore50/zh-hant/System.Runtime.Numerics.xml", + "ref/netstandard1.1/System.Runtime.Numerics.dll", + "ref/netstandard1.1/System.Runtime.Numerics.xml", + "ref/netstandard1.1/de/System.Runtime.Numerics.xml", + "ref/netstandard1.1/es/System.Runtime.Numerics.xml", + "ref/netstandard1.1/fr/System.Runtime.Numerics.xml", + "ref/netstandard1.1/it/System.Runtime.Numerics.xml", + "ref/netstandard1.1/ja/System.Runtime.Numerics.xml", + "ref/netstandard1.1/ko/System.Runtime.Numerics.xml", + "ref/netstandard1.1/ru/System.Runtime.Numerics.xml", + "ref/netstandard1.1/zh-hans/System.Runtime.Numerics.xml", + "ref/netstandard1.1/zh-hant/System.Runtime.Numerics.xml", + "ref/portable-net45+win8+wpa81/_._", + "ref/win8/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.runtime.numerics.4.3.0.nupkg.sha512", + "system.runtime.numerics.nuspec" + ] + }, + "System.Security.Cryptography.Algorithms/4.3.0": { + "sha512": "W1kd2Y8mYSCgc3ULTAZ0hOP2dSdG5YauTb1089T0/kRcN2MpSAW1izOFROrJgxSlMn3ArsgHXagigyi+ibhevg==", + "type": "package", + "path": "system.security.cryptography.algorithms/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Security.Cryptography.Algorithms.dll", + "lib/net461/System.Security.Cryptography.Algorithms.dll", + "lib/net463/System.Security.Cryptography.Algorithms.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Security.Cryptography.Algorithms.dll", + "ref/net461/System.Security.Cryptography.Algorithms.dll", + "ref/net463/System.Security.Cryptography.Algorithms.dll", + "ref/netstandard1.3/System.Security.Cryptography.Algorithms.dll", + "ref/netstandard1.4/System.Security.Cryptography.Algorithms.dll", + "ref/netstandard1.6/System.Security.Cryptography.Algorithms.dll", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/osx/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll", + "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll", + "runtimes/win/lib/net46/System.Security.Cryptography.Algorithms.dll", + "runtimes/win/lib/net461/System.Security.Cryptography.Algorithms.dll", + "runtimes/win/lib/net463/System.Security.Cryptography.Algorithms.dll", + "runtimes/win/lib/netcore50/System.Security.Cryptography.Algorithms.dll", + "runtimes/win/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll", + "system.security.cryptography.algorithms.4.3.0.nupkg.sha512", + "system.security.cryptography.algorithms.nuspec" + ] + }, + "System.Security.Cryptography.Cng/4.3.0": { + "sha512": "03idZOqFlsKRL4W+LuCpJ6dBYDUWReug6lZjBa3uJWnk5sPCUXckocevTaUA8iT/MFSrY/2HXkOt753xQ/cf8g==", + "type": "package", + "path": "system.security.cryptography.cng/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/net46/System.Security.Cryptography.Cng.dll", + "lib/net461/System.Security.Cryptography.Cng.dll", + "lib/net463/System.Security.Cryptography.Cng.dll", + "ref/net46/System.Security.Cryptography.Cng.dll", + "ref/net461/System.Security.Cryptography.Cng.dll", + "ref/net463/System.Security.Cryptography.Cng.dll", + "ref/netstandard1.3/System.Security.Cryptography.Cng.dll", + "ref/netstandard1.4/System.Security.Cryptography.Cng.dll", + "ref/netstandard1.6/System.Security.Cryptography.Cng.dll", + "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.Cng.dll", + "runtimes/win/lib/net46/System.Security.Cryptography.Cng.dll", + "runtimes/win/lib/net461/System.Security.Cryptography.Cng.dll", + "runtimes/win/lib/net463/System.Security.Cryptography.Cng.dll", + "runtimes/win/lib/netstandard1.4/System.Security.Cryptography.Cng.dll", + "runtimes/win/lib/netstandard1.6/System.Security.Cryptography.Cng.dll", + "system.security.cryptography.cng.4.3.0.nupkg.sha512", + "system.security.cryptography.cng.nuspec" + ] + }, + "System.Security.Cryptography.Csp/4.3.0": { + "sha512": "X4s/FCkEUnRGnwR3aSfVIkldBmtURMhmexALNTwpjklzxWU7yjMk7GHLKOZTNkgnWnE0q7+BCf9N2LVRWxewaA==", + "type": "package", + "path": "system.security.cryptography.csp/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Security.Cryptography.Csp.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Security.Cryptography.Csp.dll", + "ref/netstandard1.3/System.Security.Cryptography.Csp.dll", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/unix/lib/netstandard1.3/System.Security.Cryptography.Csp.dll", + "runtimes/win/lib/net46/System.Security.Cryptography.Csp.dll", + "runtimes/win/lib/netcore50/_._", + "runtimes/win/lib/netstandard1.3/System.Security.Cryptography.Csp.dll", + "system.security.cryptography.csp.4.3.0.nupkg.sha512", + "system.security.cryptography.csp.nuspec" + ] + }, + "System.Security.Cryptography.Encoding/4.3.0": { + "sha512": "1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw==", + "type": "package", + "path": "system.security.cryptography.encoding/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Security.Cryptography.Encoding.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Security.Cryptography.Encoding.dll", + "ref/netstandard1.3/System.Security.Cryptography.Encoding.dll", + "ref/netstandard1.3/System.Security.Cryptography.Encoding.xml", + "ref/netstandard1.3/de/System.Security.Cryptography.Encoding.xml", + "ref/netstandard1.3/es/System.Security.Cryptography.Encoding.xml", + "ref/netstandard1.3/fr/System.Security.Cryptography.Encoding.xml", + "ref/netstandard1.3/it/System.Security.Cryptography.Encoding.xml", + "ref/netstandard1.3/ja/System.Security.Cryptography.Encoding.xml", + "ref/netstandard1.3/ko/System.Security.Cryptography.Encoding.xml", + "ref/netstandard1.3/ru/System.Security.Cryptography.Encoding.xml", + "ref/netstandard1.3/zh-hans/System.Security.Cryptography.Encoding.xml", + "ref/netstandard1.3/zh-hant/System.Security.Cryptography.Encoding.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/unix/lib/netstandard1.3/System.Security.Cryptography.Encoding.dll", + "runtimes/win/lib/net46/System.Security.Cryptography.Encoding.dll", + "runtimes/win/lib/netstandard1.3/System.Security.Cryptography.Encoding.dll", + "system.security.cryptography.encoding.4.3.0.nupkg.sha512", + "system.security.cryptography.encoding.nuspec" + ] + }, + "System.Security.Cryptography.OpenSsl/4.3.0": { + "sha512": "h4CEgOgv5PKVF/HwaHzJRiVboL2THYCou97zpmhjghx5frc7fIvlkY1jL+lnIQyChrJDMNEXS6r7byGif8Cy4w==", + "type": "package", + "path": "system.security.cryptography.openssl/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.6/System.Security.Cryptography.OpenSsl.dll", + "ref/netstandard1.6/System.Security.Cryptography.OpenSsl.dll", + "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.OpenSsl.dll", + "system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "system.security.cryptography.openssl.nuspec" + ] + }, + "System.Security.Cryptography.Primitives/4.3.0": { + "sha512": "7bDIyVFNL/xKeFHjhobUAQqSpJq9YTOpbEs6mR233Et01STBMXNAc/V+BM6dwYGc95gVh/Zf+iVXWzj3mE8DWg==", + "type": "package", + "path": "system.security.cryptography.primitives/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Security.Cryptography.Primitives.dll", + "lib/netstandard1.3/System.Security.Cryptography.Primitives.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Security.Cryptography.Primitives.dll", + "ref/netstandard1.3/System.Security.Cryptography.Primitives.dll", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.security.cryptography.primitives.4.3.0.nupkg.sha512", + "system.security.cryptography.primitives.nuspec" + ] + }, + "System.Security.Cryptography.X509Certificates/4.3.0": { + "sha512": "t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==", + "type": "package", + "path": "system.security.cryptography.x509certificates/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Security.Cryptography.X509Certificates.dll", + "lib/net461/System.Security.Cryptography.X509Certificates.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Security.Cryptography.X509Certificates.dll", + "ref/net461/System.Security.Cryptography.X509Certificates.dll", + "ref/netstandard1.3/System.Security.Cryptography.X509Certificates.dll", + "ref/netstandard1.3/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.3/de/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.3/es/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.3/fr/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.3/it/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.3/ja/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.3/ko/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.3/ru/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.3/zh-hans/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.3/zh-hant/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.4/System.Security.Cryptography.X509Certificates.dll", + "ref/netstandard1.4/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.4/de/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.4/es/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.4/fr/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.4/it/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.4/ja/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.4/ko/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.4/ru/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.4/zh-hans/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.4/zh-hant/System.Security.Cryptography.X509Certificates.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.X509Certificates.dll", + "runtimes/win/lib/net46/System.Security.Cryptography.X509Certificates.dll", + "runtimes/win/lib/net461/System.Security.Cryptography.X509Certificates.dll", + "runtimes/win/lib/netcore50/System.Security.Cryptography.X509Certificates.dll", + "runtimes/win/lib/netstandard1.6/System.Security.Cryptography.X509Certificates.dll", + "system.security.cryptography.x509certificates.4.3.0.nupkg.sha512", + "system.security.cryptography.x509certificates.nuspec" + ] + }, + "System.Text.Encoding/4.3.0": { + "sha512": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", + "type": "package", + "path": "system.text.encoding/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Text.Encoding.dll", + "ref/netcore50/System.Text.Encoding.xml", + "ref/netcore50/de/System.Text.Encoding.xml", + "ref/netcore50/es/System.Text.Encoding.xml", + "ref/netcore50/fr/System.Text.Encoding.xml", + "ref/netcore50/it/System.Text.Encoding.xml", + "ref/netcore50/ja/System.Text.Encoding.xml", + "ref/netcore50/ko/System.Text.Encoding.xml", + "ref/netcore50/ru/System.Text.Encoding.xml", + "ref/netcore50/zh-hans/System.Text.Encoding.xml", + "ref/netcore50/zh-hant/System.Text.Encoding.xml", + "ref/netstandard1.0/System.Text.Encoding.dll", + "ref/netstandard1.0/System.Text.Encoding.xml", + "ref/netstandard1.0/de/System.Text.Encoding.xml", + "ref/netstandard1.0/es/System.Text.Encoding.xml", + "ref/netstandard1.0/fr/System.Text.Encoding.xml", + "ref/netstandard1.0/it/System.Text.Encoding.xml", + "ref/netstandard1.0/ja/System.Text.Encoding.xml", + "ref/netstandard1.0/ko/System.Text.Encoding.xml", + "ref/netstandard1.0/ru/System.Text.Encoding.xml", + "ref/netstandard1.0/zh-hans/System.Text.Encoding.xml", + "ref/netstandard1.0/zh-hant/System.Text.Encoding.xml", + "ref/netstandard1.3/System.Text.Encoding.dll", + "ref/netstandard1.3/System.Text.Encoding.xml", + "ref/netstandard1.3/de/System.Text.Encoding.xml", + "ref/netstandard1.3/es/System.Text.Encoding.xml", + "ref/netstandard1.3/fr/System.Text.Encoding.xml", + "ref/netstandard1.3/it/System.Text.Encoding.xml", + "ref/netstandard1.3/ja/System.Text.Encoding.xml", + "ref/netstandard1.3/ko/System.Text.Encoding.xml", + "ref/netstandard1.3/ru/System.Text.Encoding.xml", + "ref/netstandard1.3/zh-hans/System.Text.Encoding.xml", + "ref/netstandard1.3/zh-hant/System.Text.Encoding.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.text.encoding.4.3.0.nupkg.sha512", + "system.text.encoding.nuspec" + ] + }, + "System.Threading/4.3.0": { + "sha512": "VkUS0kOBcUf3Wwm0TSbrevDDZ6BlM+b/HRiapRFWjM5O0NS0LviG0glKmFK+hhPDd1XFeSdU1GmlLhb2CoVpIw==", + "type": "package", + "path": "system.threading/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.Threading.dll", + "lib/netstandard1.3/System.Threading.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Threading.dll", + "ref/netcore50/System.Threading.xml", + "ref/netcore50/de/System.Threading.xml", + "ref/netcore50/es/System.Threading.xml", + "ref/netcore50/fr/System.Threading.xml", + "ref/netcore50/it/System.Threading.xml", + "ref/netcore50/ja/System.Threading.xml", + "ref/netcore50/ko/System.Threading.xml", + "ref/netcore50/ru/System.Threading.xml", + "ref/netcore50/zh-hans/System.Threading.xml", + "ref/netcore50/zh-hant/System.Threading.xml", + "ref/netstandard1.0/System.Threading.dll", + "ref/netstandard1.0/System.Threading.xml", + "ref/netstandard1.0/de/System.Threading.xml", + "ref/netstandard1.0/es/System.Threading.xml", + "ref/netstandard1.0/fr/System.Threading.xml", + "ref/netstandard1.0/it/System.Threading.xml", + "ref/netstandard1.0/ja/System.Threading.xml", + "ref/netstandard1.0/ko/System.Threading.xml", + "ref/netstandard1.0/ru/System.Threading.xml", + "ref/netstandard1.0/zh-hans/System.Threading.xml", + "ref/netstandard1.0/zh-hant/System.Threading.xml", + "ref/netstandard1.3/System.Threading.dll", + "ref/netstandard1.3/System.Threading.xml", + "ref/netstandard1.3/de/System.Threading.xml", + "ref/netstandard1.3/es/System.Threading.xml", + "ref/netstandard1.3/fr/System.Threading.xml", + "ref/netstandard1.3/it/System.Threading.xml", + "ref/netstandard1.3/ja/System.Threading.xml", + "ref/netstandard1.3/ko/System.Threading.xml", + "ref/netstandard1.3/ru/System.Threading.xml", + "ref/netstandard1.3/zh-hans/System.Threading.xml", + "ref/netstandard1.3/zh-hant/System.Threading.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/aot/lib/netcore50/System.Threading.dll", + "system.threading.4.3.0.nupkg.sha512", + "system.threading.nuspec" + ] + }, + "System.Threading.Tasks/4.3.0": { + "sha512": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", + "type": "package", + "path": "system.threading.tasks/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Threading.Tasks.dll", + "ref/netcore50/System.Threading.Tasks.xml", + "ref/netcore50/de/System.Threading.Tasks.xml", + "ref/netcore50/es/System.Threading.Tasks.xml", + "ref/netcore50/fr/System.Threading.Tasks.xml", + "ref/netcore50/it/System.Threading.Tasks.xml", + "ref/netcore50/ja/System.Threading.Tasks.xml", + "ref/netcore50/ko/System.Threading.Tasks.xml", + "ref/netcore50/ru/System.Threading.Tasks.xml", + "ref/netcore50/zh-hans/System.Threading.Tasks.xml", + "ref/netcore50/zh-hant/System.Threading.Tasks.xml", + "ref/netstandard1.0/System.Threading.Tasks.dll", + "ref/netstandard1.0/System.Threading.Tasks.xml", + "ref/netstandard1.0/de/System.Threading.Tasks.xml", + "ref/netstandard1.0/es/System.Threading.Tasks.xml", + "ref/netstandard1.0/fr/System.Threading.Tasks.xml", + "ref/netstandard1.0/it/System.Threading.Tasks.xml", + "ref/netstandard1.0/ja/System.Threading.Tasks.xml", + "ref/netstandard1.0/ko/System.Threading.Tasks.xml", + "ref/netstandard1.0/ru/System.Threading.Tasks.xml", + "ref/netstandard1.0/zh-hans/System.Threading.Tasks.xml", + "ref/netstandard1.0/zh-hant/System.Threading.Tasks.xml", + "ref/netstandard1.3/System.Threading.Tasks.dll", + "ref/netstandard1.3/System.Threading.Tasks.xml", + "ref/netstandard1.3/de/System.Threading.Tasks.xml", + "ref/netstandard1.3/es/System.Threading.Tasks.xml", + "ref/netstandard1.3/fr/System.Threading.Tasks.xml", + "ref/netstandard1.3/it/System.Threading.Tasks.xml", + "ref/netstandard1.3/ja/System.Threading.Tasks.xml", + "ref/netstandard1.3/ko/System.Threading.Tasks.xml", + "ref/netstandard1.3/ru/System.Threading.Tasks.xml", + "ref/netstandard1.3/zh-hans/System.Threading.Tasks.xml", + "ref/netstandard1.3/zh-hant/System.Threading.Tasks.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.threading.tasks.4.3.0.nupkg.sha512", + "system.threading.tasks.nuspec" + ] + } + }, + "projectFileDependencyGroups": { + "net8.0": [ + "Il2CppInterop.Common >= 1.5.3", + "Il2CppInterop.HarmonySupport >= 1.5.3", + "Il2CppInterop.Runtime >= 1.5.3" + ] + }, + "packageFolders": { + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget": {} + }, + "project": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "c:\\Users\\andre\\Desktop\\SkopjeMods\\_fix\\ApiCheck\\ApiCheck.csproj", + "projectName": "ApiCheck", + "projectPath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\_fix\\ApiCheck\\ApiCheck.csproj", + "packagesPath": "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget", + "outputPath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\_fix\\ApiCheck\\obj\\", + "projectStyle": "PackageReference", + "configFilePaths": [ + "C:\\Users\\andre\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net8.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net8.0": { + "framework": "net8.0", + "targetAlias": "net8.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "10.0.300" + }, + "frameworks": { + "net8.0": { + "framework": "net8.0", + "targetAlias": "net8.0", + "dependencies": { + "Il2CppInterop.Common": { + "target": "Package", + "version": "[1.5.3, )" + }, + "Il2CppInterop.HarmonySupport": { + "target": "Package", + "version": "[1.5.3, )" + }, + "Il2CppInterop.Runtime": { + "target": "Package", + "version": "[1.5.3, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[8.0.28, 8.0.28]" + }, + { + "name": "Microsoft.NETCore.App.Host.win-x64", + "version": "[8.0.28, 8.0.28]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[8.0.28, 8.0.28]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[8.0.28, 8.0.28]" + } + ], + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.301/PortableRuntimeIdentifierGraph.json" + } + } + } +} \ No newline at end of file diff --git a/_fix/ApiCheck/obj/project.nuget.cache b/_fix/ApiCheck/obj/project.nuget.cache new file mode 100644 index 0000000..ddee6df --- /dev/null +++ b/_fix/ApiCheck/obj/project.nuget.cache @@ -0,0 +1,81 @@ +{ + "version": 2, + "dgSpecHash": "XX/HoZKMzqQ=", + "success": true, + "projectFilePath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\_fix\\ApiCheck\\ApiCheck.csproj", + "expectedPackageFiles": [ + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\harmonyx\\2.10.0\\harmonyx.2.10.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\iced\\1.17.0\\iced.1.17.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\il2cppinterop.common\\1.5.3\\il2cppinterop.common.1.5.3.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\il2cppinterop.harmonysupport\\1.5.3\\il2cppinterop.harmonysupport.1.5.3.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\il2cppinterop.runtime\\1.5.3\\il2cppinterop.runtime.1.5.3.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\microsoft.extensions.logging.abstractions\\6.0.1\\microsoft.extensions.logging.abstractions.6.0.1.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\microsoft.netcore.platforms\\1.1.1\\microsoft.netcore.platforms.1.1.1.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\microsoft.netcore.targets\\1.1.0\\microsoft.netcore.targets.1.1.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\mono.cecil\\0.11.4\\mono.cecil.0.11.4.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\monomod.runtimedetour\\22.3.23.4\\monomod.runtimedetour.22.3.23.4.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\monomod.utils\\22.3.23.4\\monomod.utils.22.3.23.4.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl\\4.3.2\\runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl.4.3.2.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl\\4.3.2\\runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.4.3.2.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl\\4.3.2\\runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.4.3.2.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\runtime.native.system\\4.3.0\\runtime.native.system.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\runtime.native.system.net.http\\4.3.0\\runtime.native.system.net.http.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\runtime.native.system.security.cryptography.apple\\4.3.0\\runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\runtime.native.system.security.cryptography.openssl\\4.3.2\\runtime.native.system.security.cryptography.openssl.4.3.2.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl\\4.3.2\\runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl.4.3.2.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl\\4.3.2\\runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl.4.3.2.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple\\4.3.0\\runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl\\4.3.2\\runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl.4.3.2.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl\\4.3.2\\runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.4.3.2.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl\\4.3.2\\runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl.4.3.2.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl\\4.3.2\\runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl.4.3.2.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl\\4.3.2\\runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.4.3.2.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.collections\\4.3.0\\system.collections.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.collections.concurrent\\4.3.0\\system.collections.concurrent.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.collections.nongeneric\\4.3.0\\system.collections.nongeneric.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.collections.specialized\\4.3.0\\system.collections.specialized.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.componentmodel\\4.3.0\\system.componentmodel.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.componentmodel.primitives\\4.3.0\\system.componentmodel.primitives.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.componentmodel.typeconverter\\4.3.0\\system.componentmodel.typeconverter.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.diagnostics.debug\\4.3.0\\system.diagnostics.debug.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.diagnostics.diagnosticsource\\4.3.0\\system.diagnostics.diagnosticsource.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.diagnostics.tracing\\4.3.0\\system.diagnostics.tracing.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.globalization\\4.3.0\\system.globalization.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.globalization.calendars\\4.3.0\\system.globalization.calendars.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.globalization.extensions\\4.3.0\\system.globalization.extensions.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.io\\4.3.0\\system.io.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.io.filesystem\\4.3.0\\system.io.filesystem.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.io.filesystem.primitives\\4.3.0\\system.io.filesystem.primitives.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.linq\\4.3.0\\system.linq.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.net.http\\4.3.4\\system.net.http.4.3.4.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.net.primitives\\4.3.0\\system.net.primitives.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.reflection\\4.3.0\\system.reflection.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.reflection.emit\\4.7.0\\system.reflection.emit.4.7.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.reflection.emit.ilgeneration\\4.7.0\\system.reflection.emit.ilgeneration.4.7.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.reflection.emit.lightweight\\4.7.0\\system.reflection.emit.lightweight.4.7.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.reflection.extensions\\4.3.0\\system.reflection.extensions.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.reflection.primitives\\4.3.0\\system.reflection.primitives.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.reflection.typeextensions\\4.7.0\\system.reflection.typeextensions.4.7.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.resources.resourcemanager\\4.3.0\\system.resources.resourcemanager.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.runtime\\4.3.0\\system.runtime.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.runtime.extensions\\4.3.0\\system.runtime.extensions.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.runtime.handles\\4.3.0\\system.runtime.handles.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.runtime.interopservices\\4.3.0\\system.runtime.interopservices.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.runtime.numerics\\4.3.0\\system.runtime.numerics.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.security.cryptography.algorithms\\4.3.0\\system.security.cryptography.algorithms.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.security.cryptography.cng\\4.3.0\\system.security.cryptography.cng.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.security.cryptography.csp\\4.3.0\\system.security.cryptography.csp.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.security.cryptography.encoding\\4.3.0\\system.security.cryptography.encoding.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.security.cryptography.openssl\\4.3.0\\system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.security.cryptography.primitives\\4.3.0\\system.security.cryptography.primitives.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.security.cryptography.x509certificates\\4.3.0\\system.security.cryptography.x509certificates.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.text.encoding\\4.3.0\\system.text.encoding.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.threading\\4.3.0\\system.threading.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.threading.tasks\\4.3.0\\system.threading.tasks.4.3.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\microsoft.aspnetcore.app.ref\\8.0.28\\microsoft.aspnetcore.app.ref.8.0.28.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\microsoft.netcore.app.host.win-x64\\8.0.28\\microsoft.netcore.app.host.win-x64.8.0.28.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\microsoft.netcore.app.ref\\8.0.28\\microsoft.netcore.app.ref.8.0.28.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\microsoft.windowsdesktop.app.ref\\8.0.28\\microsoft.windowsdesktop.app.ref.8.0.28.nupkg.sha512" + ], + "logs": [] +} \ No newline at end of file diff --git a/_fix/DumpUi/DumpUi.csproj b/_fix/DumpUi/DumpUi.csproj new file mode 100644 index 0000000..d5c37af --- /dev/null +++ b/_fix/DumpUi/DumpUi.csproj @@ -0,0 +1,11 @@ + + + Exe + net8.0 + enable + disable + + + + + diff --git a/_fix/DumpUi/Program.cs b/_fix/DumpUi/Program.cs new file mode 100644 index 0000000..8d791ad --- /dev/null +++ b/_fix/DumpUi/Program.cs @@ -0,0 +1,40 @@ +using System.Reflection; + +var interop = @"D:\SteamLibrary\steamapps\common\Skopje83\BepInEx\interop"; +var core = @"D:\SteamLibrary\steamapps\common\Skopje83\BepInEx\core"; +var runtime = System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory(); +var paths = new List(); +paths.AddRange(Directory.GetFiles(interop, "*.dll")); +paths.AddRange(Directory.GetFiles(core, "*.dll")); +paths.AddRange(Directory.GetFiles(runtime, "*.dll")); +using var mlc = new MetadataLoadContext(new PathAssemblyResolver(paths)); + +void Dump(string file, string typeName) +{ + var asm = mlc.LoadFromAssemblyPath(Path.Combine(interop, file)); + foreach (var type in asm.GetTypes()) + { + if (type.Name != typeName) continue; + Console.WriteLine("TYPE " + type.FullName); + foreach (var p in type.GetProperties()) + { + if (p.DeclaringType != type) continue; + var n = p.Name; + if (n.Contains("fill") || n.Contains("Fill") || n.Contains("sprite") || n.Contains("Sprite") || n == "color" || n == "type" || n == "material" || n == "font" || n == "text" || n == "fontSize" || n == "alignment" || n == "raycastTarget" || n == "fontSharedMaterial") + Console.WriteLine(" P " + p.PropertyType.Name + " " + n); + } + foreach (var nested in type.GetNestedTypes()) + Console.WriteLine(" NEST " + nested.Name + " " + (nested.IsEnum ? string.Join(",", EnumNames(nested)) : "")); + } +} + +static string EnumNames(Type t) => string.Join(",", t.GetEnumNames()); + +var skopje = mlc.LoadFromAssemblyPath(Path.Combine(interop, "SkopjeAssembly.dll")); +foreach (var type in skopje.GetTypes()) +{ + if (type.Name != "CompassViewController" && type.Name != "CompassView") continue; + Console.WriteLine("TYPE " + type.FullName + " : " + type.BaseType?.FullName); + foreach (var p in type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly)) + Console.WriteLine(" P " + p.PropertyType.Name + " " + p.Name); +} diff --git a/_fix/DumpUi/bin/Release/net8.0/DumpUi.deps.json b/_fix/DumpUi/bin/Release/net8.0/DumpUi.deps.json new file mode 100644 index 0000000..04ede6b --- /dev/null +++ b/_fix/DumpUi/bin/Release/net8.0/DumpUi.deps.json @@ -0,0 +1,41 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v8.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v8.0": { + "DumpUi/1.0.0": { + "dependencies": { + "System.Reflection.MetadataLoadContext": "8.0.0" + }, + "runtime": { + "DumpUi.dll": {} + } + }, + "System.Reflection.MetadataLoadContext/8.0.0": { + "runtime": { + "lib/net8.0/System.Reflection.MetadataLoadContext.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + } + } + }, + "libraries": { + "DumpUi/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "System.Reflection.MetadataLoadContext/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-SZxrQ4sQYnIcdwiO3G/lHZopbPYQ2lW0ioT4JezgccWUrKaKbHLJbAGZaDfkYjWcta1pWssAo3MOXLsR0ie4tQ==", + "path": "system.reflection.metadataloadcontext/8.0.0", + "hashPath": "system.reflection.metadataloadcontext.8.0.0.nupkg.sha512" + } + } +} \ No newline at end of file diff --git a/_fix/DumpUi/bin/Release/net8.0/DumpUi.dll b/_fix/DumpUi/bin/Release/net8.0/DumpUi.dll new file mode 100644 index 0000000..81d65b5 Binary files /dev/null and b/_fix/DumpUi/bin/Release/net8.0/DumpUi.dll differ diff --git a/_fix/DumpUi/bin/Release/net8.0/DumpUi.exe b/_fix/DumpUi/bin/Release/net8.0/DumpUi.exe new file mode 100644 index 0000000..773a7ae Binary files /dev/null and b/_fix/DumpUi/bin/Release/net8.0/DumpUi.exe differ diff --git a/_fix/DumpUi/bin/Release/net8.0/DumpUi.pdb b/_fix/DumpUi/bin/Release/net8.0/DumpUi.pdb new file mode 100644 index 0000000..d3722dd Binary files /dev/null and b/_fix/DumpUi/bin/Release/net8.0/DumpUi.pdb differ diff --git a/_fix/DumpUi/bin/Release/net8.0/DumpUi.runtimeconfig.json b/_fix/DumpUi/bin/Release/net8.0/DumpUi.runtimeconfig.json new file mode 100644 index 0000000..d784515 --- /dev/null +++ b/_fix/DumpUi/bin/Release/net8.0/DumpUi.runtimeconfig.json @@ -0,0 +1,13 @@ +{ + "runtimeOptions": { + "tfm": "net8.0", + "framework": { + "name": "Microsoft.NETCore.App", + "version": "8.0.0" + }, + "configProperties": { + "System.Reflection.Metadata.MetadataUpdater.IsSupported": false, + "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false + } + } +} \ No newline at end of file diff --git a/_fix/DumpUi/bin/Release/net8.0/System.Reflection.MetadataLoadContext.dll b/_fix/DumpUi/bin/Release/net8.0/System.Reflection.MetadataLoadContext.dll new file mode 100644 index 0000000..a54bbed Binary files /dev/null and b/_fix/DumpUi/bin/Release/net8.0/System.Reflection.MetadataLoadContext.dll differ diff --git a/_fix/DumpUi/obj/DumpUi.csproj.nuget.dgspec.json b/_fix/DumpUi/obj/DumpUi.csproj.nuget.dgspec.json new file mode 100644 index 0000000..d660c83 --- /dev/null +++ b/_fix/DumpUi/obj/DumpUi.csproj.nuget.dgspec.json @@ -0,0 +1,95 @@ +{ + "format": 1, + "restore": { + "c:\\Users\\andre\\Desktop\\SkopjeMods\\_fix\\DumpUi\\DumpUi.csproj": {} + }, + "projects": { + "c:\\Users\\andre\\Desktop\\SkopjeMods\\_fix\\DumpUi\\DumpUi.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "c:\\Users\\andre\\Desktop\\SkopjeMods\\_fix\\DumpUi\\DumpUi.csproj", + "projectName": "DumpUi", + "projectPath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\_fix\\DumpUi\\DumpUi.csproj", + "packagesPath": "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget", + "outputPath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\_fix\\DumpUi\\obj\\", + "projectStyle": "PackageReference", + "configFilePaths": [ + "C:\\Users\\andre\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net8.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net8.0": { + "framework": "net8.0", + "targetAlias": "net8.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "10.0.300" + }, + "frameworks": { + "net8.0": { + "framework": "net8.0", + "targetAlias": "net8.0", + "dependencies": { + "System.Reflection.MetadataLoadContext": { + "target": "Package", + "version": "[8.0.0, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[8.0.28, 8.0.28]" + }, + { + "name": "Microsoft.NETCore.App.Host.win-x64", + "version": "[8.0.28, 8.0.28]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[8.0.28, 8.0.28]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[8.0.28, 8.0.28]" + } + ], + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.301/PortableRuntimeIdentifierGraph.json" + } + } + } + } +} \ No newline at end of file diff --git a/_fix/DumpUi/obj/DumpUi.csproj.nuget.g.props b/_fix/DumpUi/obj/DumpUi.csproj.nuget.g.props new file mode 100644 index 0000000..ba0d2cb --- /dev/null +++ b/_fix/DumpUi/obj/DumpUi.csproj.nuget.g.props @@ -0,0 +1,15 @@ + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + $(UserProfile)\AppData\Local\Temp\cursor-sandbox-cache\a0404811fc6e51c4c5761fd11591789f\nuget + C:\Users\andre\AppData\Local\Temp\cursor-sandbox-cache\a0404811fc6e51c4c5761fd11591789f\nuget + PackageReference + 7.0.0 + + + + + \ No newline at end of file diff --git a/_fix/DumpUi/obj/DumpUi.csproj.nuget.g.targets b/_fix/DumpUi/obj/DumpUi.csproj.nuget.g.targets new file mode 100644 index 0000000..3dc06ef --- /dev/null +++ b/_fix/DumpUi/obj/DumpUi.csproj.nuget.g.targets @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/_fix/DumpUi/obj/Release/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs b/_fix/DumpUi/obj/Release/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs new file mode 100644 index 0000000..ed92695 --- /dev/null +++ b/_fix/DumpUi/obj/Release/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")] diff --git a/_fix/DumpUi/obj/Release/net6.0/DumpUi.AssemblyInfo.cs b/_fix/DumpUi/obj/Release/net6.0/DumpUi.AssemblyInfo.cs new file mode 100644 index 0000000..a6eab44 --- /dev/null +++ b/_fix/DumpUi/obj/Release/net6.0/DumpUi.AssemblyInfo.cs @@ -0,0 +1,22 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("DumpUi")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] +[assembly: System.Reflection.AssemblyProductAttribute("DumpUi")] +[assembly: System.Reflection.AssemblyTitleAttribute("DumpUi")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/_fix/DumpUi/obj/Release/net6.0/DumpUi.AssemblyInfoInputs.cache b/_fix/DumpUi/obj/Release/net6.0/DumpUi.AssemblyInfoInputs.cache new file mode 100644 index 0000000..933b0a3 --- /dev/null +++ b/_fix/DumpUi/obj/Release/net6.0/DumpUi.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +1bd7648d90d9d85fede4b666912953baba06df98a1e74e7105064e3c5fcbaae0 diff --git a/_fix/DumpUi/obj/Release/net6.0/DumpUi.GeneratedMSBuildEditorConfig.editorconfig b/_fix/DumpUi/obj/Release/net6.0/DumpUi.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..aa6ddaa --- /dev/null +++ b/_fix/DumpUi/obj/Release/net6.0/DumpUi.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,18 @@ +is_global = true +build_property.TargetFramework = net6.0 +build_property.TargetFrameworkIdentifier = .NETCoreApp +build_property.TargetFrameworkVersion = v6.0 +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property.EntryPointFilePath = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = DumpUi +build_property.ProjectDir = c:\Users\andre\Desktop\SkopjeMods\_fix\DumpUi\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.EffectiveAnalysisLevelStyle = 6.0 +build_property.EnableCodeStyleSeverity = diff --git a/_fix/DumpUi/obj/Release/net6.0/DumpUi.GlobalUsings.g.cs b/_fix/DumpUi/obj/Release/net6.0/DumpUi.GlobalUsings.g.cs new file mode 100644 index 0000000..d12bcbc --- /dev/null +++ b/_fix/DumpUi/obj/Release/net6.0/DumpUi.GlobalUsings.g.cs @@ -0,0 +1,8 @@ +// +global using System; +global using System.Collections.Generic; +global using System.IO; +global using System.Linq; +global using System.Net.Http; +global using System.Threading; +global using System.Threading.Tasks; diff --git a/_fix/DumpUi/obj/Release/net6.0/DumpUi.assets.cache b/_fix/DumpUi/obj/Release/net6.0/DumpUi.assets.cache new file mode 100644 index 0000000..2da3f8d Binary files /dev/null and b/_fix/DumpUi/obj/Release/net6.0/DumpUi.assets.cache differ diff --git a/_fix/DumpUi/obj/Release/net6.0/DumpUi.csproj.CoreCompileInputs.cache b/_fix/DumpUi/obj/Release/net6.0/DumpUi.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..016031a --- /dev/null +++ b/_fix/DumpUi/obj/Release/net6.0/DumpUi.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +0f2d7c06a9a56fa5864fc77eeefa6168abd296f73f4cfb84ca1a3ea7710a1a47 diff --git a/_fix/DumpUi/obj/Release/net6.0/DumpUi.csproj.FileListAbsolute.txt b/_fix/DumpUi/obj/Release/net6.0/DumpUi.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..30fdd81 --- /dev/null +++ b/_fix/DumpUi/obj/Release/net6.0/DumpUi.csproj.FileListAbsolute.txt @@ -0,0 +1,4 @@ +c:\Users\andre\Desktop\SkopjeMods\_fix\DumpUi\obj\Release\net6.0\DumpUi.GeneratedMSBuildEditorConfig.editorconfig +c:\Users\andre\Desktop\SkopjeMods\_fix\DumpUi\obj\Release\net6.0\DumpUi.AssemblyInfoInputs.cache +c:\Users\andre\Desktop\SkopjeMods\_fix\DumpUi\obj\Release\net6.0\DumpUi.AssemblyInfo.cs +c:\Users\andre\Desktop\SkopjeMods\_fix\DumpUi\obj\Release\net6.0\DumpUi.csproj.CoreCompileInputs.cache diff --git a/_fix/DumpUi/obj/Release/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs b/_fix/DumpUi/obj/Release/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs new file mode 100644 index 0000000..2217181 --- /dev/null +++ b/_fix/DumpUi/obj/Release/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")] diff --git a/_fix/DumpUi/obj/Release/net8.0/DumpUi.AssemblyInfo.cs b/_fix/DumpUi/obj/Release/net8.0/DumpUi.AssemblyInfo.cs new file mode 100644 index 0000000..a6eab44 --- /dev/null +++ b/_fix/DumpUi/obj/Release/net8.0/DumpUi.AssemblyInfo.cs @@ -0,0 +1,22 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("DumpUi")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] +[assembly: System.Reflection.AssemblyProductAttribute("DumpUi")] +[assembly: System.Reflection.AssemblyTitleAttribute("DumpUi")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/_fix/DumpUi/obj/Release/net8.0/DumpUi.AssemblyInfoInputs.cache b/_fix/DumpUi/obj/Release/net8.0/DumpUi.AssemblyInfoInputs.cache new file mode 100644 index 0000000..933b0a3 --- /dev/null +++ b/_fix/DumpUi/obj/Release/net8.0/DumpUi.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +1bd7648d90d9d85fede4b666912953baba06df98a1e74e7105064e3c5fcbaae0 diff --git a/_fix/DumpUi/obj/Release/net8.0/DumpUi.GeneratedMSBuildEditorConfig.editorconfig b/_fix/DumpUi/obj/Release/net8.0/DumpUi.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..8af633f --- /dev/null +++ b/_fix/DumpUi/obj/Release/net8.0/DumpUi.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,18 @@ +is_global = true +build_property.TargetFramework = net8.0 +build_property.TargetFrameworkIdentifier = .NETCoreApp +build_property.TargetFrameworkVersion = v8.0 +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property.EntryPointFilePath = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = DumpUi +build_property.ProjectDir = c:\Users\andre\Desktop\SkopjeMods\_fix\DumpUi\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.EffectiveAnalysisLevelStyle = 8.0 +build_property.EnableCodeStyleSeverity = diff --git a/_fix/DumpUi/obj/Release/net8.0/DumpUi.GlobalUsings.g.cs b/_fix/DumpUi/obj/Release/net8.0/DumpUi.GlobalUsings.g.cs new file mode 100644 index 0000000..d12bcbc --- /dev/null +++ b/_fix/DumpUi/obj/Release/net8.0/DumpUi.GlobalUsings.g.cs @@ -0,0 +1,8 @@ +// +global using System; +global using System.Collections.Generic; +global using System.IO; +global using System.Linq; +global using System.Net.Http; +global using System.Threading; +global using System.Threading.Tasks; diff --git a/_fix/DumpUi/obj/Release/net8.0/DumpUi.assets.cache b/_fix/DumpUi/obj/Release/net8.0/DumpUi.assets.cache new file mode 100644 index 0000000..f61d49c Binary files /dev/null and b/_fix/DumpUi/obj/Release/net8.0/DumpUi.assets.cache differ diff --git a/_fix/DumpUi/obj/Release/net8.0/DumpUi.csproj.AssemblyReference.cache b/_fix/DumpUi/obj/Release/net8.0/DumpUi.csproj.AssemblyReference.cache new file mode 100644 index 0000000..457a0ec Binary files /dev/null and b/_fix/DumpUi/obj/Release/net8.0/DumpUi.csproj.AssemblyReference.cache differ diff --git a/_fix/DumpUi/obj/Release/net8.0/DumpUi.csproj.CoreCompileInputs.cache b/_fix/DumpUi/obj/Release/net8.0/DumpUi.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..3824bd2 --- /dev/null +++ b/_fix/DumpUi/obj/Release/net8.0/DumpUi.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +1a457df08724170b668c96fd41e7c446c5eeab3bdb3334bacec392336fe4ff7f diff --git a/_fix/DumpUi/obj/Release/net8.0/DumpUi.csproj.FileListAbsolute.txt b/_fix/DumpUi/obj/Release/net8.0/DumpUi.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..dda9b8c --- /dev/null +++ b/_fix/DumpUi/obj/Release/net8.0/DumpUi.csproj.FileListAbsolute.txt @@ -0,0 +1,17 @@ +c:\Users\andre\Desktop\SkopjeMods\_fix\DumpUi\bin\Release\net8.0\DumpUi.exe +c:\Users\andre\Desktop\SkopjeMods\_fix\DumpUi\bin\Release\net8.0\DumpUi.deps.json +c:\Users\andre\Desktop\SkopjeMods\_fix\DumpUi\bin\Release\net8.0\DumpUi.runtimeconfig.json +c:\Users\andre\Desktop\SkopjeMods\_fix\DumpUi\bin\Release\net8.0\DumpUi.dll +c:\Users\andre\Desktop\SkopjeMods\_fix\DumpUi\bin\Release\net8.0\DumpUi.pdb +c:\Users\andre\Desktop\SkopjeMods\_fix\DumpUi\bin\Release\net8.0\System.Reflection.MetadataLoadContext.dll +c:\Users\andre\Desktop\SkopjeMods\_fix\DumpUi\obj\Release\net8.0\DumpUi.csproj.AssemblyReference.cache +c:\Users\andre\Desktop\SkopjeMods\_fix\DumpUi\obj\Release\net8.0\DumpUi.GeneratedMSBuildEditorConfig.editorconfig +c:\Users\andre\Desktop\SkopjeMods\_fix\DumpUi\obj\Release\net8.0\DumpUi.AssemblyInfoInputs.cache +c:\Users\andre\Desktop\SkopjeMods\_fix\DumpUi\obj\Release\net8.0\DumpUi.AssemblyInfo.cs +c:\Users\andre\Desktop\SkopjeMods\_fix\DumpUi\obj\Release\net8.0\DumpUi.csproj.CoreCompileInputs.cache +c:\Users\andre\Desktop\SkopjeMods\_fix\DumpUi\obj\Release\net8.0\DumpUi.csproj.Up2Date +c:\Users\andre\Desktop\SkopjeMods\_fix\DumpUi\obj\Release\net8.0\DumpUi.dll +c:\Users\andre\Desktop\SkopjeMods\_fix\DumpUi\obj\Release\net8.0\refint\DumpUi.dll +c:\Users\andre\Desktop\SkopjeMods\_fix\DumpUi\obj\Release\net8.0\DumpUi.pdb +c:\Users\andre\Desktop\SkopjeMods\_fix\DumpUi\obj\Release\net8.0\DumpUi.genruntimeconfig.cache +c:\Users\andre\Desktop\SkopjeMods\_fix\DumpUi\obj\Release\net8.0\ref\DumpUi.dll diff --git a/_fix/DumpUi/obj/Release/net8.0/DumpUi.csproj.Up2Date b/_fix/DumpUi/obj/Release/net8.0/DumpUi.csproj.Up2Date new file mode 100644 index 0000000..e69de29 diff --git a/_fix/DumpUi/obj/Release/net8.0/DumpUi.dll b/_fix/DumpUi/obj/Release/net8.0/DumpUi.dll new file mode 100644 index 0000000..81d65b5 Binary files /dev/null and b/_fix/DumpUi/obj/Release/net8.0/DumpUi.dll differ diff --git a/_fix/DumpUi/obj/Release/net8.0/DumpUi.genruntimeconfig.cache b/_fix/DumpUi/obj/Release/net8.0/DumpUi.genruntimeconfig.cache new file mode 100644 index 0000000..f0b9c26 --- /dev/null +++ b/_fix/DumpUi/obj/Release/net8.0/DumpUi.genruntimeconfig.cache @@ -0,0 +1 @@ +33d85c1b331f72dbdbd167ba21e55209f1462f6ed196a9a09d71a36abcd38923 diff --git a/_fix/DumpUi/obj/Release/net8.0/DumpUi.pdb b/_fix/DumpUi/obj/Release/net8.0/DumpUi.pdb new file mode 100644 index 0000000..d3722dd Binary files /dev/null and b/_fix/DumpUi/obj/Release/net8.0/DumpUi.pdb differ diff --git a/_fix/DumpUi/obj/Release/net8.0/apphost.exe b/_fix/DumpUi/obj/Release/net8.0/apphost.exe new file mode 100644 index 0000000..773a7ae Binary files /dev/null and b/_fix/DumpUi/obj/Release/net8.0/apphost.exe differ diff --git a/_fix/DumpUi/obj/Release/net8.0/ref/DumpUi.dll b/_fix/DumpUi/obj/Release/net8.0/ref/DumpUi.dll new file mode 100644 index 0000000..2c5fa42 Binary files /dev/null and b/_fix/DumpUi/obj/Release/net8.0/ref/DumpUi.dll differ diff --git a/_fix/DumpUi/obj/Release/net8.0/refint/DumpUi.dll b/_fix/DumpUi/obj/Release/net8.0/refint/DumpUi.dll new file mode 100644 index 0000000..2c5fa42 Binary files /dev/null and b/_fix/DumpUi/obj/Release/net8.0/refint/DumpUi.dll differ diff --git a/_fix/DumpUi/obj/project.assets.json b/_fix/DumpUi/obj/project.assets.json new file mode 100644 index 0000000..09bce12 --- /dev/null +++ b/_fix/DumpUi/obj/project.assets.json @@ -0,0 +1,249 @@ +{ + "version": 4, + "targets": { + "net8.0": { + "System.Collections.Immutable/8.0.0": { + "type": "package", + "compile": { + "lib/net8.0/System.Collections.Immutable.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/System.Collections.Immutable.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Reflection.Metadata/8.0.0": { + "type": "package", + "dependencies": { + "System.Collections.Immutable": "8.0.0" + }, + "compile": { + "lib/net8.0/System.Reflection.Metadata.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/System.Reflection.Metadata.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Reflection.MetadataLoadContext/8.0.0": { + "type": "package", + "dependencies": { + "System.Collections.Immutable": "8.0.0", + "System.Reflection.Metadata": "8.0.0" + }, + "compile": { + "lib/net8.0/System.Reflection.MetadataLoadContext.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/System.Reflection.MetadataLoadContext.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + } + } + }, + "libraries": { + "System.Collections.Immutable/8.0.0": { + "sha512": "AurL6Y5BA1WotzlEvVaIDpqzpIPvYnnldxru8oXJU2yFxFUy3+pNXjXd1ymO+RA0rq0+590Q8gaz2l3Sr7fmqg==", + "type": "package", + "path": "system.collections.immutable/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Collections.Immutable.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Collections.Immutable.targets", + "lib/net462/System.Collections.Immutable.dll", + "lib/net462/System.Collections.Immutable.xml", + "lib/net6.0/System.Collections.Immutable.dll", + "lib/net6.0/System.Collections.Immutable.xml", + "lib/net7.0/System.Collections.Immutable.dll", + "lib/net7.0/System.Collections.Immutable.xml", + "lib/net8.0/System.Collections.Immutable.dll", + "lib/net8.0/System.Collections.Immutable.xml", + "lib/netstandard2.0/System.Collections.Immutable.dll", + "lib/netstandard2.0/System.Collections.Immutable.xml", + "system.collections.immutable.8.0.0.nupkg.sha512", + "system.collections.immutable.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Reflection.Metadata/8.0.0": { + "sha512": "ptvgrFh7PvWI8bcVqG5rsA/weWM09EnthFHR5SCnS6IN+P4mj6rE1lBDC4U8HL9/57htKAqy4KQ3bBj84cfYyQ==", + "type": "package", + "path": "system.reflection.metadata/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Reflection.Metadata.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Reflection.Metadata.targets", + "lib/net462/System.Reflection.Metadata.dll", + "lib/net462/System.Reflection.Metadata.xml", + "lib/net6.0/System.Reflection.Metadata.dll", + "lib/net6.0/System.Reflection.Metadata.xml", + "lib/net7.0/System.Reflection.Metadata.dll", + "lib/net7.0/System.Reflection.Metadata.xml", + "lib/net8.0/System.Reflection.Metadata.dll", + "lib/net8.0/System.Reflection.Metadata.xml", + "lib/netstandard2.0/System.Reflection.Metadata.dll", + "lib/netstandard2.0/System.Reflection.Metadata.xml", + "system.reflection.metadata.8.0.0.nupkg.sha512", + "system.reflection.metadata.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Reflection.MetadataLoadContext/8.0.0": { + "sha512": "SZxrQ4sQYnIcdwiO3G/lHZopbPYQ2lW0ioT4JezgccWUrKaKbHLJbAGZaDfkYjWcta1pWssAo3MOXLsR0ie4tQ==", + "type": "package", + "path": "system.reflection.metadataloadcontext/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Reflection.MetadataLoadContext.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Reflection.MetadataLoadContext.targets", + "lib/net462/System.Reflection.MetadataLoadContext.dll", + "lib/net462/System.Reflection.MetadataLoadContext.xml", + "lib/net6.0/System.Reflection.MetadataLoadContext.dll", + "lib/net6.0/System.Reflection.MetadataLoadContext.xml", + "lib/net7.0/System.Reflection.MetadataLoadContext.dll", + "lib/net7.0/System.Reflection.MetadataLoadContext.xml", + "lib/net8.0/System.Reflection.MetadataLoadContext.dll", + "lib/net8.0/System.Reflection.MetadataLoadContext.xml", + "lib/netstandard2.0/System.Reflection.MetadataLoadContext.dll", + "lib/netstandard2.0/System.Reflection.MetadataLoadContext.xml", + "system.reflection.metadataloadcontext.8.0.0.nupkg.sha512", + "system.reflection.metadataloadcontext.nuspec", + "useSharedDesignerContext.txt" + ] + } + }, + "projectFileDependencyGroups": { + "net8.0": [ + "System.Reflection.MetadataLoadContext >= 8.0.0" + ] + }, + "packageFolders": { + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget": {} + }, + "project": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "c:\\Users\\andre\\Desktop\\SkopjeMods\\_fix\\DumpUi\\DumpUi.csproj", + "projectName": "DumpUi", + "projectPath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\_fix\\DumpUi\\DumpUi.csproj", + "packagesPath": "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget", + "outputPath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\_fix\\DumpUi\\obj\\", + "projectStyle": "PackageReference", + "configFilePaths": [ + "C:\\Users\\andre\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net8.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net8.0": { + "framework": "net8.0", + "targetAlias": "net8.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "10.0.300" + }, + "frameworks": { + "net8.0": { + "framework": "net8.0", + "targetAlias": "net8.0", + "dependencies": { + "System.Reflection.MetadataLoadContext": { + "target": "Package", + "version": "[8.0.0, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[8.0.28, 8.0.28]" + }, + { + "name": "Microsoft.NETCore.App.Host.win-x64", + "version": "[8.0.28, 8.0.28]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[8.0.28, 8.0.28]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[8.0.28, 8.0.28]" + } + ], + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.301/PortableRuntimeIdentifierGraph.json" + } + } + } +} \ No newline at end of file diff --git a/_fix/DumpUi/obj/project.nuget.cache b/_fix/DumpUi/obj/project.nuget.cache new file mode 100644 index 0000000..532d85b --- /dev/null +++ b/_fix/DumpUi/obj/project.nuget.cache @@ -0,0 +1,16 @@ +{ + "version": 2, + "dgSpecHash": "Df8VNHmrNZE=", + "success": true, + "projectFilePath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\_fix\\DumpUi\\DumpUi.csproj", + "expectedPackageFiles": [ + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.collections.immutable\\8.0.0\\system.collections.immutable.8.0.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.reflection.metadata\\8.0.0\\system.reflection.metadata.8.0.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\system.reflection.metadataloadcontext\\8.0.0\\system.reflection.metadataloadcontext.8.0.0.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\microsoft.netcore.app.ref\\8.0.28\\microsoft.netcore.app.ref.8.0.28.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\microsoft.windowsdesktop.app.ref\\8.0.28\\microsoft.windowsdesktop.app.ref.8.0.28.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\microsoft.aspnetcore.app.ref\\8.0.28\\microsoft.aspnetcore.app.ref.8.0.28.nupkg.sha512", + "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget\\microsoft.netcore.app.host.win-x64\\8.0.28\\microsoft.netcore.app.host.win-x64.8.0.28.nupkg.sha512" + ], + "logs": [] +} \ No newline at end of file diff --git a/_fix/Il2CppInterop b/_fix/Il2CppInterop new file mode 160000 index 0000000..dbda1cb --- /dev/null +++ b/_fix/Il2CppInterop @@ -0,0 +1 @@ +Subproject commit dbda1cb353b0f4253345dc45136d170b9e50a5a0 diff --git a/_issue1122.txt b/_issue1122.txt new file mode 100644 index 0000000..29b63e3 --- /dev/null +++ b/_issue1122.txt @@ -0,0 +1,56 @@ +--- a-l-e-k-k 2025-07-21T18:20:17Z +No it's not a simple as use bleeding edge. The native-hook layer inside Il2CppInterop.Runtime.dll still can’t locate two critical functions (Class::Init, GarbageCollector::RunFinalizer) in a v31 Unity binary. When the fallback stub executes it dereferences garbage and the process dies. + + +--- Delocca 2025-11-29T10:18:35Z +Another affected game: Lonely Mountains: Snow Riders + +Game: https://store.steampowered.com/app/2545360/Lonely_Mountains_Snow_Riders/ +Unity Version: 2022.3.62f2 (released October 3, 2025) +Platform: Windows (also tested via Proton on Linux — same result) +BepInEx Version: 6.0.0-be.752 + +Symptoms: + +Game crashes immediately during IL2CPP initialization. The doorstop hook loads successfully, but the process dies before BepInEx can write anything to the log. + +What I tried: + +- BepInEx BE 752 (latest at time of writing) → crash +- MelonLoader 0.7.1 → same crash +- Manually replacing Cpp2IL with version 2022.1.0-pre-release.20 (which includes "Fixed a bug in v31.0 (2021.3.40) support") → still crashes + +Conclusion: + +The Cpp2IL update alone doesn't seem to fix it. As mentioned by @a-l-e-k-k, the issue appears to be in Il2CppInterop.Runtime.dll which can't locate critical functions (Class::Init, GarbageCollector::RunFinalizer) in v31 binaries. + +This game uses a very recent Unity build (Oct 2025), so it would be a good test case for v31 support once a fix is available. + +--- +For any serious contributor willing to investigate this issue, I'm happy to gift the game on Steam. +The game is also available on Xbox Game Pass. + +--- ongandrew 2026-01-28T06:19:34Z +I was able to get this working with Atelier Resleriana (Unity 2022.3.62f2) but can't confirm if it's a general fix. + +It involves two parts: +1) `Logging.UnityLogListening` must be set to `false` in _BepInEx.cfg_. +2) Include this signature definition in _Il2CppInterop/Il2CppInterop.Runtime/Injection/InjectorHelpers.cs_ for + +``` + new MemoryUtils.SignatureDefinition + { + pattern = "\x48\x8B\xC4\x48\x89\x58\x00\x48\x89\x68\x00\x48\x89\x70\x00\x57\x41\x56\x41\x57\x48\x83\xEC\x00", + mask = "xxxxxx?xxx?xxx?xxxxxxxxx?", + xref = false + }, +``` + +This was obtained by tracing through Ghidra + Il2CppDumper through the following path: + +1. Locate exposed function il2cpp_runtime_class_init. It'll be a wrapper with a single JMP instruction. +2. Go to the location referenced by the JMP instruction, which is likely a thread-safe wrapper, and look for a CALL instruction that takes the class pointer. For this particular instance, it was the second CALL instruction. +3. Then in this next function being called (likely another wrapper), there were three CALL instructions, it was the second CALL instruciton again (the first and last seemed to just acquire and release locks). +4. Follow that CALL instruction - that turned out to be the Class::Init we were after. + +I don't have any other IL2CPP Unity games on hand with this version or above, so I'll leave it to those that come after to formally test it on a wider range and do a pull request!