diff --git a/CustomDomSkins/CustomDomSkinsPlugin.cs b/CustomDomSkins/CustomDomSkinsPlugin.cs new file mode 100644 index 0000000..a3ae9f5 --- /dev/null +++ b/CustomDomSkins/CustomDomSkinsPlugin.cs @@ -0,0 +1,469 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using BepInEx; +using BepInEx.Configuration; +using BepInEx.Logging; +using BepInEx.Unity.IL2CPP; +using Il2CppInterop.Runtime; +using Skopje.Modding; +using UnityEngine; + +namespace Skopje.CustomDomSkins +{ + [BepInPlugin(PluginGuid, PluginName, PluginVersion)] + public class CustomDomSkinsPlugin : BasePlugin + { + public const string PluginGuid = "com.skopje.customdomskins"; + public const string PluginName = "Skopje Custom DOM Skins"; + public const string PluginVersion = "1.0.0"; + + internal static ManualLogSource LogSource; + internal static ConfigEntry Enabled; + + static Il2CppSystem.Action _onGameModeStarted; + + public override void Load() + { + LogSource = Log; + Enabled = Config.Bind("Skin", "Enabled", true, "Replace the DOM bus exterior with the PNGs in the DomSkins folder next to this plugin."); + + _onGameModeStarted = DelegateSupport.ConvertDelegate>(new Action(OnGameModeStarted)); + ModAPI.add_OnGameModeStartedClient(_onGameModeStarted); + + LogSource.LogInfo($"{PluginName} {PluginVersion} loaded. Edit DomSkins/singleplayer.png and DomSkins/multiplayer.png. Those files are the dumped outer-shell textures. Interior, wheels, and lights are left alone."); + } + + public override bool Unload() + { + if (_onGameModeStarted != null) + ModAPI.remove_OnGameModeStartedClient(_onGameModeStarted); + DomSkinReplacer.Restore(); + return true; + } + + static void OnGameModeStarted(SkopjeGameMode gameMode) + { + if (gameMode == null) + return; + + SkopjeVehicle bus = null; + try + { + bus = gameMode.Bus; + } + catch (Exception ex) + { + LogSource.LogWarning("Could not read the DOM from the game mode: " + ex.Message); + return; + } + + if (bus == null) + { + LogSource.LogInfo("Game mode started without a DOM, so the exterior skin was not applied."); + return; + } + + DomSkinReplacer.Apply(bus); + } + } + + static class DomSkinReplacer + { + sealed class Shell + { + public string FileName; + public string DumpMaterial; + public string SourceTexture; + public string MaterialName; + public Texture2D Texture; + public DateTime WriteTimeUtc; + } + + // The two buses do not share a UV layout. Each file is that bus's outer shell only. + static readonly Shell[] Shells = + { + new Shell + { + FileName = "singleplayer.png", + DumpMaterial = "MAT_BusOutside", + SourceTexture = "DIF_DOM_OuterShell", + MaterialName = "MAT_BusOutside", + }, + new Shell + { + FileName = "multiplayer.png", + DumpMaterial = "MAT_DOMmp_Outside", + SourceTexture = "DIF_DOMmp_Outside", + MaterialName = "MAT_DOMmp_Outside", + }, + }; + + static readonly Dictionary _originals = new Dictionary(); + static readonly Dictionary _materials = new Dictionary(); + static readonly Dictionary _renderers = new Dictionary(); + static readonly MaterialPropertyBlock _block = new MaterialPropertyBlock(); + static float _nextFileCheck; + static bool _loggedApply; + static bool _applied; + + public static void Apply(SkopjeVehicle bus) + { + if (!CustomDomSkinsPlugin.Enabled.Value) + { + if (_applied) + { + RevertMaterials(); + ClearRendererOverrides(); + _applied = false; + _loggedApply = false; + } + return; + } + if (bus == null || !EnsureTextures(bus)) + return; + + int applied = ApplyUnder(bus.transform); + if (applied > 0) + { + _applied = true; + if (!_loggedApply) + { + _loggedApply = true; + CustomDomSkinsPlugin.LogSource.LogInfo($"Applied {applied} DOM exterior material{(applied == 1 ? "" : "s")} from DomSkins."); + } + } + } + + public static void Restore() + { + RevertMaterials(); + ClearRendererOverrides(); + _applied = false; + _originals.Clear(); + _materials.Clear(); + _renderers.Clear(); + for (int i = 0; i < Shells.Length; i++) + { + if (Shells[i].Texture == null) + continue; + UnityEngine.Object.Destroy(Shells[i].Texture); + Shells[i].Texture = null; + } + } + + static void RevertMaterials() + { + foreach (var pair in _materials) + { + Material material = pair.Value; + if (material != null && _originals.TryGetValue(pair.Key, out Texture original)) + material.SetTexture("_MainTex", original); + } + } + + static void ClearRendererOverrides() + { + foreach (var pair in _renderers) + { + Renderer renderer = pair.Value; + if (renderer == null) + continue; + Material[] materials = renderer.sharedMaterials; + if (materials == null) + continue; + for (int slot = 0; slot < materials.Length; slot++) + { + Material material = materials[slot]; + if (material == null || !_originals.TryGetValue(material.GetInstanceID(), out Texture original)) + continue; + renderer.GetPropertyBlock(_block, slot); + _block.SetTexture("_MainTex", original); + renderer.SetPropertyBlock(_block, slot); + } + } + } + + static int ApplyUnder(Transform root) + { + if (root == null) + return 0; + Renderer[] found = root.GetComponentsInChildren(true); + int applied = 0; + for (int i = 0; i < found.Length; i++) + applied += ApplyRenderer(found[i]); + return applied; + } + + static int ApplyRenderer(Renderer renderer) + { + if (renderer == null) + return 0; + Material[] materials = renderer.sharedMaterials; + if (materials == null) + return 0; + + int applied = 0; + for (int i = 0; i < materials.Length; i++) + { + Shell shell = Resolve(materials[i]); + if (shell == null) + continue; + applied += ApplyMaterial(materials[i]); + _renderers[renderer.GetInstanceID()] = renderer; + renderer.GetPropertyBlock(_block, i); + _block.SetTexture("_MainTex", shell.Texture); + renderer.SetPropertyBlock(_block, i); + } + return applied; + } + + static int ApplyMaterial(Material material) + { + Shell shell = Resolve(material); + if (shell == null) + return 0; + + int id = material.GetInstanceID(); + if (!_originals.ContainsKey(id)) + { + Texture current = material.GetTexture("_MainTex"); + _originals[id] = current; + _materials[id] = material; + CopySampling(shell.Texture, current); + } + + if (material.GetTexture("_MainTex") == shell.Texture) + return 0; + + material.SetTexture("_MainTex", shell.Texture); + return 1; + } + + static Shell Resolve(Material material) + { + if (material == null || !material.HasProperty("_MainTex")) + return null; + + string materialName = BaseName(material.name); + for (int i = 0; i < Shells.Length; i++) + { + Shell shell = Shells[i]; + if (shell.Texture == null) + continue; + if (materialName == shell.MaterialName) + return shell; + } + + Texture current = material.GetTexture("_MainTex"); + if (current == null) + return null; + for (int i = 0; i < Shells.Length; i++) + { + Shell shell = Shells[i]; + if (shell.Texture == null) + continue; + if (current == shell.Texture) + return shell; + if (BaseName(current.name) == shell.SourceTexture) + return shell; + } + return null; + } + + static string BaseName(string name) + { + if (string.IsNullOrEmpty(name)) + return name; + int cut = name.IndexOf(" (", StringComparison.Ordinal); + if (cut > 0) + return name.Substring(0, cut); + return name; + } + + static void CopySampling(Texture2D target, Texture source) + { + if (target == null || source == null) + return; + target.wrapMode = source.wrapMode; + target.filterMode = source.filterMode; + target.anisoLevel = source.anisoLevel; + } + + static bool EnsureTextures(Component source) + { + if (AnyLoaded() && Time.unscaledTime < _nextFileCheck) + return true; + _nextFileCheck = Time.unscaledTime + 1f; + + string directory = SkinsDirectory(); + int ready = 0; + for (int i = 0; i < Shells.Length; i++) + { + if (EnsureShell(Shells[i], directory, source)) + ready++; + } + + if (ready == 0) + { + CustomDomSkinsPlugin.LogSource.LogWarning("No DOM shell PNGs are ready in " + directory); + return false; + } + return true; + } + + static bool AnyLoaded() + { + for (int i = 0; i < Shells.Length; i++) + { + if (Shells[i].Texture != null) + return true; + } + return false; + } + + static bool EnsureShell(Shell shell, string directory, Component source) + { + string path = Path.Combine(directory, shell.FileName); + if (!File.Exists(path) && !TryDumpSample(shell, path, source)) + return shell.Texture != null; + + DateTime writeTime; + try { writeTime = File.GetLastWriteTimeUtc(path); } + catch (Exception ex) + { + CustomDomSkinsPlugin.LogSource.LogError("Could not read " + shell.FileName + ": " + ex.Message); + return shell.Texture != null; + } + + if (shell.Texture != null && shell.WriteTimeUtc == writeTime) + return true; + + byte[] bytes; + try { bytes = File.ReadAllBytes(path); } + catch (Exception ex) + { + CustomDomSkinsPlugin.LogSource.LogError("Could not read " + shell.FileName + ": " + ex.Message); + return shell.Texture != null; + } + + var texture = new Texture2D(2, 2, TextureFormat.RGBA32, true); + texture.name = "SkopjeCustomDomSkin_" + Path.GetFileNameWithoutExtension(shell.FileName); + texture.hideFlags = HideFlags.HideAndDontSave; + if (!ImageConversion.LoadImage(texture, bytes)) + { + UnityEngine.Object.Destroy(texture); + CustomDomSkinsPlugin.LogSource.LogError(shell.FileName + " is not a readable image: " + path); + return shell.Texture != null; + } + + if (shell.Texture != null) + UnityEngine.Object.Destroy(shell.Texture); + shell.Texture = texture; + shell.WriteTimeUtc = writeTime; + _loggedApply = false; + CustomDomSkinsPlugin.LogSource.LogInfo($"Loaded {shell.FileName} ({texture.width}x{texture.height})"); + return true; + } + + static Texture FindSourceTexture(Component root, string materialName, Texture replacement) + { + if (root == null || string.IsNullOrEmpty(materialName)) + return null; + + Renderer[] renderers = root.GetComponentsInChildren(true); + for (int i = 0; i < renderers.Length; i++) + { + Renderer renderer = renderers[i]; + if (renderer == null) + continue; + Material[] materials = renderer.sharedMaterials; + if (materials == null) + continue; + for (int slot = 0; slot < materials.Length; slot++) + { + Material material = materials[slot]; + if (material == null || BaseName(material.name) != materialName || !material.HasProperty("_MainTex")) + continue; + Texture current = material.GetTexture("_MainTex"); + if (_originals.TryGetValue(material.GetInstanceID(), out Texture original) && original != null) + current = original; + if (current == null || current == replacement) + continue; + return current; + } + } + return null; + } + + static bool TryDumpSample(Shell shell, string path, Component root) + { + Texture source = FindSourceTexture(root, shell.DumpMaterial, shell.Texture); + if (source == null) + return false; + + byte[] png = EncodePng(source); + if (png == null || png.Length == 0) + return false; + + try + { + Directory.CreateDirectory(Path.GetDirectoryName(path)); + File.WriteAllBytes(path, png); + CustomDomSkinsPlugin.LogSource.LogInfo("Dumped " + shell.FileName + " from the DOM outer shell into DomSkins."); + return true; + } + catch (Exception ex) + { + CustomDomSkinsPlugin.LogSource.LogError("Could not write " + shell.FileName + ": " + ex.Message); + return false; + } + } + + static byte[] EncodePng(Texture source) + { + var readable = source as Texture2D; + bool temporary = false; + RenderTexture rt = null; + RenderTexture previous = RenderTexture.active; + try + { + if (readable == null || !readable.isReadable) + { + rt = RenderTexture.GetTemporary(source.width, source.height, 0, RenderTextureFormat.ARGB32, RenderTextureReadWrite.sRGB); + Graphics.Blit(source, rt); + RenderTexture.active = rt; + readable = new Texture2D(source.width, source.height, TextureFormat.RGBA32, false); + readable.ReadPixels(new Rect(0, 0, source.width, source.height), 0, 0); + readable.Apply(); + temporary = true; + } + + var encoded = ImageConversion.EncodeToPNG(readable); + if (encoded == null) + return null; + var bytes = new byte[encoded.Length]; + for (int i = 0; i < encoded.Length; i++) + bytes[i] = encoded[i]; + return bytes; + } + finally + { + RenderTexture.active = previous; + if (rt != null) + RenderTexture.ReleaseTemporary(rt); + if (temporary && readable != null) + UnityEngine.Object.Destroy(readable); + } + } + + static string SkinsDirectory() + { + string dllDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); + if (!string.IsNullOrEmpty(dllDir)) + return Path.Combine(dllDir, "DomSkins"); + return Path.Combine(Paths.PluginPath, "DomSkins"); + } + } +} diff --git a/CustomDomSkins/CustomDomSkinsPlugin.csproj b/CustomDomSkins/CustomDomSkinsPlugin.csproj new file mode 100644 index 0000000..0ef64c1 --- /dev/null +++ b/CustomDomSkins/CustomDomSkinsPlugin.csproj @@ -0,0 +1,56 @@ + + + net6.0 + latest + disable + disable + true + Skopje.CustomDomSkins + Skopje.CustomDomSkins + 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\Archon.SwissArmyLib.dll + false + + + $(GameDir)\BepInEx\interop\UnityEngine.CoreModule.dll + false + + + $(GameDir)\BepInEx\interop\UnityEngine.ImageConversionModule.dll + false + + + + + + + diff --git a/CustomDomSkins/DomSkins/multiplayer.png b/CustomDomSkins/DomSkins/multiplayer.png new file mode 100644 index 0000000..cf03977 Binary files /dev/null and b/CustomDomSkins/DomSkins/multiplayer.png differ diff --git a/CustomDomSkins/DomSkins/singleplayer.png b/CustomDomSkins/DomSkins/singleplayer.png new file mode 100644 index 0000000..be0fcfb Binary files /dev/null and b/CustomDomSkins/DomSkins/singleplayer.png differ diff --git a/CustomDomSkins/bin/Debug/net6.0/DomSkins/multiplayer.png b/CustomDomSkins/bin/Debug/net6.0/DomSkins/multiplayer.png new file mode 100644 index 0000000..cf03977 Binary files /dev/null and b/CustomDomSkins/bin/Debug/net6.0/DomSkins/multiplayer.png differ diff --git a/CustomDomSkins/bin/Debug/net6.0/DomSkins/singleplayer.png b/CustomDomSkins/bin/Debug/net6.0/DomSkins/singleplayer.png new file mode 100644 index 0000000..be0fcfb Binary files /dev/null and b/CustomDomSkins/bin/Debug/net6.0/DomSkins/singleplayer.png differ diff --git a/CustomDomSkins/bin/Debug/net6.0/Skopje.CustomDomSkins.deps.json b/CustomDomSkins/bin/Debug/net6.0/Skopje.CustomDomSkins.deps.json new file mode 100644 index 0000000..26685e4 --- /dev/null +++ b/CustomDomSkins/bin/Debug/net6.0/Skopje.CustomDomSkins.deps.json @@ -0,0 +1,23 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v6.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v6.0": { + "Skopje.CustomDomSkins/1.0.0": { + "runtime": { + "Skopje.CustomDomSkins.dll": {} + } + } + } + }, + "libraries": { + "Skopje.CustomDomSkins/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + } + } +} \ No newline at end of file diff --git a/CustomDomSkins/bin/Debug/net6.0/Skopje.CustomDomSkins.dll b/CustomDomSkins/bin/Debug/net6.0/Skopje.CustomDomSkins.dll new file mode 100644 index 0000000..dc9371e Binary files /dev/null and b/CustomDomSkins/bin/Debug/net6.0/Skopje.CustomDomSkins.dll differ diff --git a/CustomDomSkins/bin/Debug/net6.0/Skopje.CustomDomSkins.pdb b/CustomDomSkins/bin/Debug/net6.0/Skopje.CustomDomSkins.pdb new file mode 100644 index 0000000..b35c64e Binary files /dev/null and b/CustomDomSkins/bin/Debug/net6.0/Skopje.CustomDomSkins.pdb differ diff --git a/CustomDomSkins/bin/Release/net6.0/DomSkins/multiplayer.png b/CustomDomSkins/bin/Release/net6.0/DomSkins/multiplayer.png new file mode 100644 index 0000000..cf03977 Binary files /dev/null and b/CustomDomSkins/bin/Release/net6.0/DomSkins/multiplayer.png differ diff --git a/CustomDomSkins/bin/Release/net6.0/DomSkins/singleplayer.png b/CustomDomSkins/bin/Release/net6.0/DomSkins/singleplayer.png new file mode 100644 index 0000000..be0fcfb Binary files /dev/null and b/CustomDomSkins/bin/Release/net6.0/DomSkins/singleplayer.png differ diff --git a/CustomDomSkins/bin/Release/net6.0/Skopje.CustomDomSkins.deps.json b/CustomDomSkins/bin/Release/net6.0/Skopje.CustomDomSkins.deps.json new file mode 100644 index 0000000..26685e4 --- /dev/null +++ b/CustomDomSkins/bin/Release/net6.0/Skopje.CustomDomSkins.deps.json @@ -0,0 +1,23 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v6.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v6.0": { + "Skopje.CustomDomSkins/1.0.0": { + "runtime": { + "Skopje.CustomDomSkins.dll": {} + } + } + } + }, + "libraries": { + "Skopje.CustomDomSkins/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + } + } +} \ No newline at end of file diff --git a/CustomDomSkins/bin/Release/net6.0/Skopje.CustomDomSkins.dll b/CustomDomSkins/bin/Release/net6.0/Skopje.CustomDomSkins.dll new file mode 100644 index 0000000..2234966 Binary files /dev/null and b/CustomDomSkins/bin/Release/net6.0/Skopje.CustomDomSkins.dll differ diff --git a/CustomDomSkins/bin/Release/net6.0/Skopje.CustomDomSkins.pdb b/CustomDomSkins/bin/Release/net6.0/Skopje.CustomDomSkins.pdb new file mode 100644 index 0000000..33c9cf2 Binary files /dev/null and b/CustomDomSkins/bin/Release/net6.0/Skopje.CustomDomSkins.pdb differ diff --git a/CustomDomSkins/obj/CustomDomSkinsPlugin.csproj.nuget.dgspec.json b/CustomDomSkins/obj/CustomDomSkinsPlugin.csproj.nuget.dgspec.json new file mode 100644 index 0000000..a50072e --- /dev/null +++ b/CustomDomSkins/obj/CustomDomSkinsPlugin.csproj.nuget.dgspec.json @@ -0,0 +1,85 @@ +{ + "format": 1, + "restore": { + "C:\\Users\\andre\\Desktop\\SkopjeMods\\CustomDomSkins\\CustomDomSkinsPlugin.csproj": {} + }, + "projects": { + "C:\\Users\\andre\\Desktop\\SkopjeMods\\CustomDomSkins\\CustomDomSkinsPlugin.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "C:\\Users\\andre\\Desktop\\SkopjeMods\\CustomDomSkins\\CustomDomSkinsPlugin.csproj", + "projectName": "Skopje.CustomDomSkins", + "projectPath": "C:\\Users\\andre\\Desktop\\SkopjeMods\\CustomDomSkins\\CustomDomSkinsPlugin.csproj", + "packagesPath": "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget", + "outputPath": "C:\\Users\\andre\\Desktop\\SkopjeMods\\CustomDomSkins\\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/CustomDomSkins/obj/CustomDomSkinsPlugin.csproj.nuget.g.props b/CustomDomSkins/obj/CustomDomSkinsPlugin.csproj.nuget.g.props new file mode 100644 index 0000000..ba0d2cb --- /dev/null +++ b/CustomDomSkins/obj/CustomDomSkinsPlugin.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/CustomDomSkins/obj/CustomDomSkinsPlugin.csproj.nuget.g.targets b/CustomDomSkins/obj/CustomDomSkinsPlugin.csproj.nuget.g.targets new file mode 100644 index 0000000..3dc06ef --- /dev/null +++ b/CustomDomSkins/obj/CustomDomSkinsPlugin.csproj.nuget.g.targets @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/CustomDomSkins/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs b/CustomDomSkins/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs new file mode 100644 index 0000000..ed92695 --- /dev/null +++ b/CustomDomSkins/obj/Debug/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/CustomDomSkins/obj/Debug/net6.0/CustomDomSkinsPlugin.AssemblyInfo.cs b/CustomDomSkins/obj/Debug/net6.0/CustomDomSkinsPlugin.AssemblyInfo.cs new file mode 100644 index 0000000..23f5266 --- /dev/null +++ b/CustomDomSkins/obj/Debug/net6.0/CustomDomSkinsPlugin.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.CustomDomSkins")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+a740fec7c87ba4b24aefb7faf991fc5b69c71bd4")] +[assembly: System.Reflection.AssemblyProductAttribute("Skopje.CustomDomSkins")] +[assembly: System.Reflection.AssemblyTitleAttribute("Skopje.CustomDomSkins")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/CustomDomSkins/obj/Debug/net6.0/CustomDomSkinsPlugin.AssemblyInfoInputs.cache b/CustomDomSkins/obj/Debug/net6.0/CustomDomSkinsPlugin.AssemblyInfoInputs.cache new file mode 100644 index 0000000..00313e2 --- /dev/null +++ b/CustomDomSkins/obj/Debug/net6.0/CustomDomSkinsPlugin.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +35970ee9e256e84e13ebc939b0a4d04c7c0da5edd0eaacbbff9656666dfabdff diff --git a/CustomDomSkins/obj/Debug/net6.0/CustomDomSkinsPlugin.GeneratedMSBuildEditorConfig.editorconfig b/CustomDomSkins/obj/Debug/net6.0/CustomDomSkinsPlugin.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..e4658cb --- /dev/null +++ b/CustomDomSkins/obj/Debug/net6.0/CustomDomSkinsPlugin.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.CustomDomSkins +build_property.ProjectDir = C:\Users\andre\Desktop\SkopjeMods\CustomDomSkins\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.EffectiveAnalysisLevelStyle = 6.0 +build_property.EnableCodeStyleSeverity = diff --git a/CustomDomSkins/obj/Debug/net6.0/CustomDomSkinsPlugin.assets.cache b/CustomDomSkins/obj/Debug/net6.0/CustomDomSkinsPlugin.assets.cache new file mode 100644 index 0000000..51e1613 Binary files /dev/null and b/CustomDomSkins/obj/Debug/net6.0/CustomDomSkinsPlugin.assets.cache differ diff --git a/CustomDomSkins/obj/Debug/net6.0/CustomDomSkinsPlugin.csproj.AssemblyReference.cache b/CustomDomSkins/obj/Debug/net6.0/CustomDomSkinsPlugin.csproj.AssemblyReference.cache new file mode 100644 index 0000000..a5b22d9 Binary files /dev/null and b/CustomDomSkins/obj/Debug/net6.0/CustomDomSkinsPlugin.csproj.AssemblyReference.cache differ diff --git a/CustomDomSkins/obj/Debug/net6.0/CustomDomSkinsPlugin.csproj.CoreCompileInputs.cache b/CustomDomSkins/obj/Debug/net6.0/CustomDomSkinsPlugin.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..9ae0dcd --- /dev/null +++ b/CustomDomSkins/obj/Debug/net6.0/CustomDomSkinsPlugin.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +b22e37a4f0cb4e115638d21fe4e91ddc55f8f775e49d88a66f2779f224ecccc3 diff --git a/CustomDomSkins/obj/Debug/net6.0/CustomDomSkinsPlugin.csproj.FileListAbsolute.txt b/CustomDomSkins/obj/Debug/net6.0/CustomDomSkinsPlugin.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..73399dc --- /dev/null +++ b/CustomDomSkins/obj/Debug/net6.0/CustomDomSkinsPlugin.csproj.FileListAbsolute.txt @@ -0,0 +1,14 @@ +C:\Users\andre\Desktop\SkopjeMods\CustomDomSkins\bin\Debug\net6.0\DomSkins\multiplayer.png +C:\Users\andre\Desktop\SkopjeMods\CustomDomSkins\bin\Debug\net6.0\DomSkins\singleplayer.png +C:\Users\andre\Desktop\SkopjeMods\CustomDomSkins\bin\Debug\net6.0\Skopje.CustomDomSkins.deps.json +C:\Users\andre\Desktop\SkopjeMods\CustomDomSkins\bin\Debug\net6.0\Skopje.CustomDomSkins.dll +C:\Users\andre\Desktop\SkopjeMods\CustomDomSkins\bin\Debug\net6.0\Skopje.CustomDomSkins.pdb +C:\Users\andre\Desktop\SkopjeMods\CustomDomSkins\obj\Debug\net6.0\CustomDomSkinsPlugin.csproj.AssemblyReference.cache +C:\Users\andre\Desktop\SkopjeMods\CustomDomSkins\obj\Debug\net6.0\CustomDomSkinsPlugin.GeneratedMSBuildEditorConfig.editorconfig +C:\Users\andre\Desktop\SkopjeMods\CustomDomSkins\obj\Debug\net6.0\CustomDomSkinsPlugin.AssemblyInfoInputs.cache +C:\Users\andre\Desktop\SkopjeMods\CustomDomSkins\obj\Debug\net6.0\CustomDomSkinsPlugin.AssemblyInfo.cs +C:\Users\andre\Desktop\SkopjeMods\CustomDomSkins\obj\Debug\net6.0\CustomDomSkinsPlugin.csproj.CoreCompileInputs.cache +C:\Users\andre\Desktop\SkopjeMods\CustomDomSkins\obj\Debug\net6.0\Skopje.CustomDomSkins.dll +C:\Users\andre\Desktop\SkopjeMods\CustomDomSkins\obj\Debug\net6.0\refint\Skopje.CustomDomSkins.dll +C:\Users\andre\Desktop\SkopjeMods\CustomDomSkins\obj\Debug\net6.0\Skopje.CustomDomSkins.pdb +C:\Users\andre\Desktop\SkopjeMods\CustomDomSkins\obj\Debug\net6.0\ref\Skopje.CustomDomSkins.dll diff --git a/CustomDomSkins/obj/Debug/net6.0/Skopje.CustomDomSkins.dll b/CustomDomSkins/obj/Debug/net6.0/Skopje.CustomDomSkins.dll new file mode 100644 index 0000000..dc9371e Binary files /dev/null and b/CustomDomSkins/obj/Debug/net6.0/Skopje.CustomDomSkins.dll differ diff --git a/CustomDomSkins/obj/Debug/net6.0/Skopje.CustomDomSkins.pdb b/CustomDomSkins/obj/Debug/net6.0/Skopje.CustomDomSkins.pdb new file mode 100644 index 0000000..b35c64e Binary files /dev/null and b/CustomDomSkins/obj/Debug/net6.0/Skopje.CustomDomSkins.pdb differ diff --git a/CustomDomSkins/obj/Debug/net6.0/ref/Skopje.CustomDomSkins.dll b/CustomDomSkins/obj/Debug/net6.0/ref/Skopje.CustomDomSkins.dll new file mode 100644 index 0000000..8703b34 Binary files /dev/null and b/CustomDomSkins/obj/Debug/net6.0/ref/Skopje.CustomDomSkins.dll differ diff --git a/CustomDomSkins/obj/Debug/net6.0/refint/Skopje.CustomDomSkins.dll b/CustomDomSkins/obj/Debug/net6.0/refint/Skopje.CustomDomSkins.dll new file mode 100644 index 0000000..8703b34 Binary files /dev/null and b/CustomDomSkins/obj/Debug/net6.0/refint/Skopje.CustomDomSkins.dll differ diff --git a/CustomDomSkins/obj/Release/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs b/CustomDomSkins/obj/Release/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs new file mode 100644 index 0000000..ed92695 --- /dev/null +++ b/CustomDomSkins/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/CustomDomSkins/obj/Release/net6.0/CustomDomSkinsPlugin.AssemblyInfo.cs b/CustomDomSkins/obj/Release/net6.0/CustomDomSkinsPlugin.AssemblyInfo.cs new file mode 100644 index 0000000..96c23f7 --- /dev/null +++ b/CustomDomSkins/obj/Release/net6.0/CustomDomSkinsPlugin.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.CustomDomSkins")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+a740fec7c87ba4b24aefb7faf991fc5b69c71bd4")] +[assembly: System.Reflection.AssemblyProductAttribute("Skopje.CustomDomSkins")] +[assembly: System.Reflection.AssemblyTitleAttribute("Skopje.CustomDomSkins")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/CustomDomSkins/obj/Release/net6.0/CustomDomSkinsPlugin.AssemblyInfoInputs.cache b/CustomDomSkins/obj/Release/net6.0/CustomDomSkinsPlugin.AssemblyInfoInputs.cache new file mode 100644 index 0000000..8699d8b --- /dev/null +++ b/CustomDomSkins/obj/Release/net6.0/CustomDomSkinsPlugin.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +311dc5b6a33b4aaf936db0ee34a8ca7409721fb87735f5b00e29f535d2b59505 diff --git a/CustomDomSkins/obj/Release/net6.0/CustomDomSkinsPlugin.GeneratedMSBuildEditorConfig.editorconfig b/CustomDomSkins/obj/Release/net6.0/CustomDomSkinsPlugin.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..e4658cb --- /dev/null +++ b/CustomDomSkins/obj/Release/net6.0/CustomDomSkinsPlugin.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.CustomDomSkins +build_property.ProjectDir = C:\Users\andre\Desktop\SkopjeMods\CustomDomSkins\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.EffectiveAnalysisLevelStyle = 6.0 +build_property.EnableCodeStyleSeverity = diff --git a/CustomDomSkins/obj/Release/net6.0/CustomDomSkinsPlugin.assets.cache b/CustomDomSkins/obj/Release/net6.0/CustomDomSkinsPlugin.assets.cache new file mode 100644 index 0000000..2640f59 Binary files /dev/null and b/CustomDomSkins/obj/Release/net6.0/CustomDomSkinsPlugin.assets.cache differ diff --git a/CustomDomSkins/obj/Release/net6.0/CustomDomSkinsPlugin.csproj.AssemblyReference.cache b/CustomDomSkins/obj/Release/net6.0/CustomDomSkinsPlugin.csproj.AssemblyReference.cache new file mode 100644 index 0000000..a5b22d9 Binary files /dev/null and b/CustomDomSkins/obj/Release/net6.0/CustomDomSkinsPlugin.csproj.AssemblyReference.cache differ diff --git a/CustomDomSkins/obj/Release/net6.0/CustomDomSkinsPlugin.csproj.CoreCompileInputs.cache b/CustomDomSkins/obj/Release/net6.0/CustomDomSkinsPlugin.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..e808393 --- /dev/null +++ b/CustomDomSkins/obj/Release/net6.0/CustomDomSkinsPlugin.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +ab411ce6cfd92c47406b1328966c523f48609c1c8b2ddc42fdefddba568a0a2e diff --git a/CustomDomSkins/obj/Release/net6.0/CustomDomSkinsPlugin.csproj.FileListAbsolute.txt b/CustomDomSkins/obj/Release/net6.0/CustomDomSkinsPlugin.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..846f67c --- /dev/null +++ b/CustomDomSkins/obj/Release/net6.0/CustomDomSkinsPlugin.csproj.FileListAbsolute.txt @@ -0,0 +1,14 @@ +C:\Users\andre\Desktop\SkopjeMods\CustomDomSkins\bin\Release\net6.0\DomSkins\multiplayer.png +C:\Users\andre\Desktop\SkopjeMods\CustomDomSkins\bin\Release\net6.0\DomSkins\singleplayer.png +C:\Users\andre\Desktop\SkopjeMods\CustomDomSkins\bin\Release\net6.0\Skopje.CustomDomSkins.deps.json +C:\Users\andre\Desktop\SkopjeMods\CustomDomSkins\bin\Release\net6.0\Skopje.CustomDomSkins.dll +C:\Users\andre\Desktop\SkopjeMods\CustomDomSkins\bin\Release\net6.0\Skopje.CustomDomSkins.pdb +C:\Users\andre\Desktop\SkopjeMods\CustomDomSkins\obj\Release\net6.0\CustomDomSkinsPlugin.csproj.AssemblyReference.cache +C:\Users\andre\Desktop\SkopjeMods\CustomDomSkins\obj\Release\net6.0\CustomDomSkinsPlugin.GeneratedMSBuildEditorConfig.editorconfig +C:\Users\andre\Desktop\SkopjeMods\CustomDomSkins\obj\Release\net6.0\CustomDomSkinsPlugin.AssemblyInfoInputs.cache +C:\Users\andre\Desktop\SkopjeMods\CustomDomSkins\obj\Release\net6.0\CustomDomSkinsPlugin.AssemblyInfo.cs +C:\Users\andre\Desktop\SkopjeMods\CustomDomSkins\obj\Release\net6.0\CustomDomSkinsPlugin.csproj.CoreCompileInputs.cache +C:\Users\andre\Desktop\SkopjeMods\CustomDomSkins\obj\Release\net6.0\Skopje.CustomDomSkins.dll +C:\Users\andre\Desktop\SkopjeMods\CustomDomSkins\obj\Release\net6.0\refint\Skopje.CustomDomSkins.dll +C:\Users\andre\Desktop\SkopjeMods\CustomDomSkins\obj\Release\net6.0\Skopje.CustomDomSkins.pdb +C:\Users\andre\Desktop\SkopjeMods\CustomDomSkins\obj\Release\net6.0\ref\Skopje.CustomDomSkins.dll diff --git a/CustomDomSkins/obj/Release/net6.0/Skopje.CustomDomSkins.dll b/CustomDomSkins/obj/Release/net6.0/Skopje.CustomDomSkins.dll new file mode 100644 index 0000000..2234966 Binary files /dev/null and b/CustomDomSkins/obj/Release/net6.0/Skopje.CustomDomSkins.dll differ diff --git a/CustomDomSkins/obj/Release/net6.0/Skopje.CustomDomSkins.pdb b/CustomDomSkins/obj/Release/net6.0/Skopje.CustomDomSkins.pdb new file mode 100644 index 0000000..33c9cf2 Binary files /dev/null and b/CustomDomSkins/obj/Release/net6.0/Skopje.CustomDomSkins.pdb differ diff --git a/CustomDomSkins/obj/Release/net6.0/ref/Skopje.CustomDomSkins.dll b/CustomDomSkins/obj/Release/net6.0/ref/Skopje.CustomDomSkins.dll new file mode 100644 index 0000000..dbf4356 Binary files /dev/null and b/CustomDomSkins/obj/Release/net6.0/ref/Skopje.CustomDomSkins.dll differ diff --git a/CustomDomSkins/obj/Release/net6.0/refint/Skopje.CustomDomSkins.dll b/CustomDomSkins/obj/Release/net6.0/refint/Skopje.CustomDomSkins.dll new file mode 100644 index 0000000..dbf4356 Binary files /dev/null and b/CustomDomSkins/obj/Release/net6.0/refint/Skopje.CustomDomSkins.dll differ diff --git a/CustomDomSkins/obj/project.assets.json b/CustomDomSkins/obj/project.assets.json new file mode 100644 index 0000000..e3d927f --- /dev/null +++ b/CustomDomSkins/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\\CustomDomSkins\\CustomDomSkinsPlugin.csproj", + "projectName": "Skopje.CustomDomSkins", + "projectPath": "C:\\Users\\andre\\Desktop\\SkopjeMods\\CustomDomSkins\\CustomDomSkinsPlugin.csproj", + "packagesPath": "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget", + "outputPath": "C:\\Users\\andre\\Desktop\\SkopjeMods\\CustomDomSkins\\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/CustomDomSkins/obj/project.nuget.cache b/CustomDomSkins/obj/project.nuget.cache new file mode 100644 index 0000000..c36929d --- /dev/null +++ b/CustomDomSkins/obj/project.nuget.cache @@ -0,0 +1,12 @@ +{ + "version": 2, + "dgSpecHash": "WumoaMRMnNg=", + "success": true, + "projectFilePath": "C:\\Users\\andre\\Desktop\\SkopjeMods\\CustomDomSkins\\CustomDomSkinsPlugin.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/CustomPlayerSkins/CustomPlayerSkinsPlugin.cs b/CustomPlayerSkins/CustomPlayerSkinsPlugin.cs index cd94b9a..75de9c8 100644 --- a/CustomPlayerSkins/CustomPlayerSkinsPlugin.cs +++ b/CustomPlayerSkins/CustomPlayerSkinsPlugin.cs @@ -11,6 +11,7 @@ using Il2CppInterop.Runtime; using Il2CppInterop.Runtime.InteropTypes.Arrays; using Skopje.Modding; using UnityEngine; +using UnityEngine.Rendering; namespace Skopje.CustomPlayerSkins { @@ -19,7 +20,7 @@ namespace Skopje.CustomPlayerSkins { public const string PluginGuid = "com.skopje.customplayerskins"; public const string PluginName = "Skopje Custom Player Skins"; - public const string PluginVersion = "1.0.0"; + public const string PluginVersion = "1.3.0"; internal static ManualLogSource LogSource; internal static ConfigEntry Enabled; @@ -33,6 +34,13 @@ namespace Skopje.CustomPlayerSkins Enabled = Config.Bind("Skin", "Enabled", true, "Replace each player outfit with its own PNG in the CustomSkins folder next to this plugin."); _harmony = new Harmony(PluginGuid); + var setTexture = AccessTools.Method(typeof(Material), "SetTexture", new[] { typeof(string), typeof(Texture) }); + if (setTexture != null) + _harmony.Patch(setTexture, prefix: new HarmonyMethod(typeof(SkinPatches), nameof(SkinPatches.BeforeSetTexture))); + var setTextureId = AccessTools.Method(typeof(Material), "SetTexture", new[] { typeof(int), typeof(Texture) }); + if (setTextureId != null) + _harmony.Patch(setTextureId, prefix: new HarmonyMethod(typeof(SkinPatches), nameof(SkinPatches.BeforeSetTextureId))); + var refresh = AccessTools.Method(typeof(SkopjePlayer), "RefreshActiveModels"); if (refresh == null) LogSource.LogWarning("SkopjePlayer.RefreshActiveModels was not found. The skins are applied when a player spawns."); @@ -42,13 +50,15 @@ namespace Skopje.CustomPlayerSkins _onPlayerStarted = DelegateSupport.ConvertDelegate>(new Action(SkinReplacer.ApplyPlayer)); ModAPI.add_OnPlayerStartedClient(_onPlayerStarted); - LogSource.LogInfo($"{PluginName} {PluginVersion} loaded. Edit the PNGs in CustomSkins: singleplayer, ranger, medic, engineer, and fighter (the Warrior class)."); + LogSource.LogInfo($"{PluginName} {PluginVersion} loaded. Edit the PNGs in CustomSkins: singleplayer, ranger, medic, engineer, fighter (Warrior), prp, and hands."); } public override bool Unload() { if (_harmony != null) _harmony.UnpatchSelf(); + if (_onPlayerStarted != null) + ModAPI.remove_OnPlayerStartedClient(_onPlayerStarted); SkinReplacer.Restore(); return true; } @@ -60,6 +70,18 @@ namespace Skopje.CustomPlayerSkins { SkinReplacer.ApplyPlayer(__instance); } + + public static void BeforeSetTexture(string name, ref Texture value) + { + if (name == "_MainTex") + SkinReplacer.Redirect(ref value); + } + + public static void BeforeSetTextureId(int nameID, ref Texture value) + { + if (nameID == Shader.PropertyToID("_MainTex")) + SkinReplacer.Redirect(ref value); + } } static class SkinReplacer @@ -68,6 +90,7 @@ namespace Skopje.CustomPlayerSkins { public string FileName; public string DumpMaterial; + public string SourceTexture; public string[] Materials; public Texture2D Texture; public DateTime WriteTimeUtc; @@ -80,72 +103,84 @@ namespace Skopje.CustomPlayerSkins { FileName = "singleplayer.png", DumpMaterial = "MAT_Pioneer_Default_Clothes", + SourceTexture = "DIF_Pioneer_Clothes_Default", Materials = new[] { "MAT_Pioneer_Default_Clothes", "MAT_Pioneer_Default_Clothes_FP" }, }, new Outfit { FileName = "ranger.png", DumpMaterial = "MAT_Pioneer_Ranger_Clothes", + SourceTexture = "DIF_Pioneer_Clothes_Ranger", Materials = new[] { "MAT_Pioneer_Ranger_Clothes", "MAT_Pioneer_Ranger_Clothes_FP" }, }, new Outfit { FileName = "medic.png", DumpMaterial = "MAT_Pioneer_Medic_Clothes", + SourceTexture = "DIF_Pioneer_Clothes_Medic", Materials = new[] { "MAT_Pioneer_Medic_Clothes", "MAT_Pioneer_Medic_Clothes_FP" }, }, new Outfit { FileName = "engineer.png", DumpMaterial = "MAT_Pioneer_Engi_Clothes", + SourceTexture = "DIF_Pioneer_Clothes_Engi", Materials = new[] { "MAT_Pioneer_Engi_Clothes", "MAT_Pioneer_Engi_Clothes_FP" }, }, new Outfit { FileName = "fighter.png", DumpMaterial = "MAT_Pioneer_Fighter_Clothes", + SourceTexture = "DIF_Pioneer_Clothes_Fighter", Materials = new[] { "MAT_Pioneer_Fighter_Clothes", "MAT_Pioneer_Fighter_Clothes_FP" }, }, + new Outfit + { + FileName = "prp.png", + DumpMaterial = "MAT_PRP", + SourceTexture = "DIF_PRP", + Materials = new[] { "MAT_PRP", "MAT_PRP_FP" }, + }, + new Outfit + { + FileName = "hands.png", + DumpMaterial = "MAT_Pioneer_Naked", + SourceTexture = "DIF_FPSHands_Naked", + Materials = new[] { "MAT_Pioneer_Naked" }, + }, }; static readonly Dictionary _originals = new Dictionary(); + static readonly Dictionary _materials = new Dictionary(); + static readonly Dictionary _renderers = new Dictionary(); + static readonly MaterialPropertyBlock _block = new MaterialPropertyBlock(); static float _nextFileCheck; - static bool _loggedMiss; + static bool _loggedApply; public static void ApplyPlayer(SkopjePlayer player) { if (!CustomPlayerSkinsPlugin.Enabled.Value) { - RevertMaterials(); + RevertLive(); return; } - if (!EnsureTextures()) + if (player == null || !EnsureTextures(player)) return; - int applied = ApplyLoadedMaterials(); - if (player != null) + int applied = ApplyPlayerRenderers(player); + if (applied > 0 && !_loggedApply) { - applied += ApplySkins(player.PlayerSkins); - applied += ApplyRenderer(player.FirstPersonRenderer); - applied += ApplyRenderer(player.ThirdPersonRenderer); - } - - if (applied == 0 && !_loggedMiss) - { - _loggedMiss = true; - CustomPlayerSkinsPlugin.LogSource.LogWarning("Custom skins are loaded, but the player clothes materials are not in memory yet."); - } - else if (applied > 0) - { - _loggedMiss = false; - CustomPlayerSkinsPlugin.LogSource.LogInfo($"Applied {applied} player clothes material{(applied == 1 ? "" : "s")} from CustomSkins."); + _loggedApply = true; + CustomPlayerSkinsPlugin.LogSource.LogInfo($"Applied {applied} player material{(applied == 1 ? "" : "s")} from CustomSkins."); } } public static void Restore() { - RevertMaterials(); + RevertLive(); _originals.Clear(); + _materials.Clear(); + _renderers.Clear(); for (int i = 0; i < Outfits.Length; i++) { if (Outfits[i].Texture == null) @@ -155,23 +190,42 @@ namespace Skopje.CustomPlayerSkins } } + static void RevertLive() + { + RevertMaterials(); + ClearRendererOverrides(); + } + static void RevertMaterials() { - foreach (var pair in _originals) + foreach (var pair in _materials) { - var material = FindMaterial(pair.Key); - if (material != null) - material.SetTexture("_MainTex", pair.Value); + Material material = pair.Value; + if (material != null && _originals.TryGetValue(pair.Key, out Texture original)) + material.SetTexture("_MainTex", original); } } - static int ApplyLoadedMaterials() + static void ClearRendererOverrides() { - int applied = 0; - var materials = Resources.FindObjectsOfTypeAll(); - for (int i = 0; i < materials.Length; i++) - applied += ApplyMaterial(materials[i]); - return applied; + foreach (var pair in _renderers) + { + Renderer renderer = pair.Value; + if (renderer == null) + continue; + Material[] materials = renderer.sharedMaterials; + if (materials == null) + continue; + for (int slot = 0; slot < materials.Length; slot++) + { + Material material = materials[slot]; + if (material == null || !_originals.TryGetValue(material.GetInstanceID(), out Texture original)) + continue; + renderer.GetPropertyBlock(_block, slot); + _block.SetTexture("_MainTex", original); + renderer.SetPropertyBlock(_block, slot); + } + } } static int ApplySkins(Il2CppReferenceArray skins) @@ -190,16 +244,103 @@ namespace Skopje.CustomPlayerSkins return applied; } + static int ApplyPlayerRenderers(SkopjePlayer player) + { + if (player == null) + return 0; + int applied = ApplySkins(player.PlayerSkins); + applied += ApplyRenderer(player.FirstPersonRenderer); + applied += ApplyRenderer(player.ThirdPersonRenderer); + applied += ApplyRenderer(player.ThirdPersonBackpackRenderer); + applied += ApplyOn(player.ThirdPerson); + applied += ApplyOn(player.FirstPerson); + if (player.SkopjeCharacterController != null) + applied += ApplyOn(player.SkopjeCharacterController.MeshRoot); + if (player.UtilityController != null) + applied += ApplyOn(player.UtilityController.FPSHolder); + if (player.WeaponsController != null) + applied += ApplyWeapons(player.WeaponsController); + return applied; + } + + static int ApplyWeapons(WeaponsController weapons) + { + if (weapons == null) + return 0; + int applied = 0; + applied += ApplyOn(weapons.Socket); + applied += ApplyOn(weapons.ThrowSocket); + applied += ApplyOn(weapons.PRPObject); + applied += ApplyOn(weapons.BrokenPRPObject); + applied += ApplyOn(weapons.KnifeObject); + var list = weapons.AvailableWeapons; + if (list == null) + return applied; + for (int i = 0; i < list.Count; i++) + { + Weapon weapon = list[i]; + if (weapon == null) + continue; + applied += ApplyOn(weapon.WeaponModel); + applied += ApplyOn(weapon.LeftHandWeaponModel); + applied += ApplyOn(weapon.PhysicsWeaponModel); + applied += ApplyOn(weapon.PhysicsLeftHandWeaponModel); + } + return applied; + } + + static int ApplyOn(GameObject root) + { + if (root == null) + return 0; + return ApplyUnder(root.transform); + } + + static int ApplyOn(Component root) + { + if (root == null) + return 0; + return ApplyUnder(root.transform); + } + + static int ApplyUnder(Transform root) + { + if (root == null) + return 0; + Renderer[] found = root.GetComponentsInChildren(true); + int applied = 0; + for (int i = 0; i < found.Length; i++) + applied += ApplyRenderer(found[i]); + return applied; + } + static int ApplyRenderer(Renderer renderer) { if (renderer == null) return 0; - var materials = renderer.sharedMaterials; + int applied = ApplyMaterialSlots(renderer, renderer.sharedMaterials, false); + applied += ApplyMaterialSlots(renderer, renderer.materials, true); + return applied; + } + + static int ApplyMaterialSlots(Renderer renderer, Material[] materials, bool propertyBlock) + { if (materials == null) return 0; int applied = 0; for (int i = 0; i < materials.Length; i++) + { + Outfit outfit = Resolve(materials[i]); + if (outfit == null) + continue; applied += ApplyMaterial(materials[i]); + _renderers[renderer.GetInstanceID()] = renderer; + if (!propertyBlock) + continue; + renderer.GetPropertyBlock(_block, i); + _block.SetTexture("_MainTex", outfit.Texture); + renderer.SetPropertyBlock(_block, i); + } return applied; } @@ -215,10 +356,8 @@ namespace Skopje.CustomPlayerSkins static int ApplyMaterial(Material material) { - if (material == null || !material.HasProperty("_MainTex")) - return 0; - Outfit outfit = FindOutfit(material.name); - if (outfit == null || outfit.Texture == null) + Outfit outfit = Resolve(material); + if (outfit == null) return 0; int id = material.GetInstanceID(); @@ -226,6 +365,7 @@ namespace Skopje.CustomPlayerSkins { var current = material.GetTexture("_MainTex"); _originals[id] = current; + _materials[id] = material; CopySampling(outfit.Texture, current); } @@ -236,6 +376,54 @@ namespace Skopje.CustomPlayerSkins return 1; } + static Outfit Resolve(Material material) + { + if (material == null || !material.HasProperty("_MainTex")) + return null; + Outfit byName = FindOutfit(material.name); + if (byName != null && byName.Texture != null) + return byName; + + Texture current = material.GetTexture("_MainTex"); + if (current == null) + return null; + for (int i = 0; i < Outfits.Length; i++) + { + Outfit outfit = Outfits[i]; + if (outfit.Texture == null) + continue; + if (current == outfit.Texture) + return outfit; + if (TextureNameMatches(current.name, outfit.SourceTexture)) + return outfit; + } + return null; + } + + public static void Redirect(ref Texture value) + { + if (value == null || !CustomPlayerSkinsPlugin.Enabled.Value) + return; + for (int i = 0; i < Outfits.Length; i++) + { + Outfit outfit = Outfits[i]; + if (outfit.Texture == null || value == outfit.Texture) + continue; + if (TextureNameMatches(value.name, outfit.SourceTexture)) + { + value = outfit.Texture; + return; + } + } + } + + static bool TextureNameMatches(string textureName, string sourceName) + { + if (string.IsNullOrEmpty(textureName) || string.IsNullOrEmpty(sourceName)) + return false; + return textureName == sourceName || textureName.StartsWith(sourceName + " ", StringComparison.Ordinal); + } + static Outfit FindOutfit(string materialName) { if (string.IsNullOrEmpty(materialName)) @@ -262,19 +450,7 @@ namespace Skopje.CustomPlayerSkins target.anisoLevel = source.anisoLevel; } - static Material FindMaterial(int instanceId) - { - var materials = Resources.FindObjectsOfTypeAll(); - for (int i = 0; i < materials.Length; i++) - { - Material material = materials[i]; - if (material != null && material.GetInstanceID() == instanceId) - return material; - } - return null; - } - - static bool EnsureTextures() + static bool EnsureTextures(Component source) { if (AnyLoaded() && Time.unscaledTime < _nextFileCheck) return true; @@ -284,7 +460,7 @@ namespace Skopje.CustomPlayerSkins int ready = 0; for (int i = 0; i < Outfits.Length; i++) { - if (EnsureOutfit(Outfits[i], directory)) + if (EnsureOutfit(Outfits[i], directory, source)) ready++; } @@ -306,12 +482,12 @@ namespace Skopje.CustomPlayerSkins return false; } - static bool EnsureOutfit(Outfit outfit, string directory) + static bool EnsureOutfit(Outfit outfit, string directory, Component source) { string path = Path.Combine(directory, outfit.FileName); if (!File.Exists(path)) { - if (!TryDumpSample(outfit, path)) + if (!TryDumpSample(outfit, path, source)) return outfit.Texture != null; } @@ -348,27 +524,48 @@ namespace Skopje.CustomPlayerSkins UnityEngine.Object.Destroy(outfit.Texture); outfit.Texture = texture; outfit.WriteTimeUtc = writeTime; - _loggedMiss = false; + _loggedApply = false; CustomPlayerSkinsPlugin.LogSource.LogInfo($"Loaded {outfit.FileName} ({texture.width}x{texture.height})"); return true; } - static bool TryDumpSample(Outfit outfit, string path) + static Texture FindSourceTexture(Component root, string materialName) { - Texture source = null; - var materials = Resources.FindObjectsOfTypeAll(); - for (int i = 0; i < materials.Length && source == null; i++) + if (root == null || string.IsNullOrEmpty(materialName)) + return null; + + Renderer[] renderers = root.GetComponentsInChildren(true); + for (int i = 0; i < renderers.Length; i++) { - Material material = materials[i]; - if (material == null || material.name != outfit.DumpMaterial) + Renderer renderer = renderers[i]; + if (renderer == null) continue; - if (!material.HasProperty("_MainTex")) + Material[] materials = renderer.sharedMaterials; + if (materials == null) continue; - Texture current = material.GetTexture("_MainTex"); - if (_originals.TryGetValue(material.GetInstanceID(), out Texture original)) - current = original; - source = current; + for (int slot = 0; slot < materials.Length; slot++) + { + Material material = materials[slot]; + if (material == null || !NameIs(material.name, materialName) || !material.HasProperty("_MainTex")) + continue; + Texture current = material.GetTexture("_MainTex"); + if (_originals.TryGetValue(material.GetInstanceID(), out Texture original) && original != null) + current = original; + if (current != null) + return current; + } } + return null; + } + + static bool NameIs(string materialName, string expected) + { + return materialName == expected || materialName.StartsWith(expected + " (", StringComparison.Ordinal); + } + + static bool TryDumpSample(Outfit outfit, string path, Component root) + { + Texture source = FindSourceTexture(root, outfit.DumpMaterial); if (source == null) return false; diff --git a/CustomPlayerSkins/CustomSkins/hands.png b/CustomPlayerSkins/CustomSkins/hands.png new file mode 100644 index 0000000..daf8123 Binary files /dev/null and b/CustomPlayerSkins/CustomSkins/hands.png differ diff --git a/CustomPlayerSkins/CustomSkins/prp.png b/CustomPlayerSkins/CustomSkins/prp.png new file mode 100644 index 0000000..5fb31c1 Binary files /dev/null and b/CustomPlayerSkins/CustomSkins/prp.png differ diff --git a/CustomPlayerSkins/bin/Debug/net6.0/CustomSkins/engineer.png b/CustomPlayerSkins/bin/Debug/net6.0/CustomSkins/engineer.png new file mode 100644 index 0000000..6666a90 Binary files /dev/null and b/CustomPlayerSkins/bin/Debug/net6.0/CustomSkins/engineer.png differ diff --git a/CustomPlayerSkins/bin/Debug/net6.0/CustomSkins/fighter.png b/CustomPlayerSkins/bin/Debug/net6.0/CustomSkins/fighter.png new file mode 100644 index 0000000..61dff42 Binary files /dev/null and b/CustomPlayerSkins/bin/Debug/net6.0/CustomSkins/fighter.png differ diff --git a/CustomPlayerSkins/bin/Debug/net6.0/CustomSkins/hands.png b/CustomPlayerSkins/bin/Debug/net6.0/CustomSkins/hands.png new file mode 100644 index 0000000..daf8123 Binary files /dev/null and b/CustomPlayerSkins/bin/Debug/net6.0/CustomSkins/hands.png differ diff --git a/CustomPlayerSkins/bin/Debug/net6.0/CustomSkins/medic.png b/CustomPlayerSkins/bin/Debug/net6.0/CustomSkins/medic.png new file mode 100644 index 0000000..f2de69c Binary files /dev/null and b/CustomPlayerSkins/bin/Debug/net6.0/CustomSkins/medic.png differ diff --git a/CustomPlayerSkins/bin/Debug/net6.0/CustomSkins/prp.png b/CustomPlayerSkins/bin/Debug/net6.0/CustomSkins/prp.png new file mode 100644 index 0000000..5fb31c1 Binary files /dev/null and b/CustomPlayerSkins/bin/Debug/net6.0/CustomSkins/prp.png differ diff --git a/CustomPlayerSkins/bin/Debug/net6.0/CustomSkins/ranger.png b/CustomPlayerSkins/bin/Debug/net6.0/CustomSkins/ranger.png new file mode 100644 index 0000000..410e766 Binary files /dev/null and b/CustomPlayerSkins/bin/Debug/net6.0/CustomSkins/ranger.png differ diff --git a/CustomPlayerSkins/bin/Debug/net6.0/CustomSkins/singleplayer.png b/CustomPlayerSkins/bin/Debug/net6.0/CustomSkins/singleplayer.png new file mode 100644 index 0000000..2ce4b0c Binary files /dev/null and b/CustomPlayerSkins/bin/Debug/net6.0/CustomSkins/singleplayer.png differ diff --git a/CustomPlayerSkins/bin/Debug/net6.0/Skopje.CustomPlayerSkins.deps.json b/CustomPlayerSkins/bin/Debug/net6.0/Skopje.CustomPlayerSkins.deps.json new file mode 100644 index 0000000..0f540b7 --- /dev/null +++ b/CustomPlayerSkins/bin/Debug/net6.0/Skopje.CustomPlayerSkins.deps.json @@ -0,0 +1,23 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v6.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v6.0": { + "Skopje.CustomPlayerSkins/1.0.0": { + "runtime": { + "Skopje.CustomPlayerSkins.dll": {} + } + } + } + }, + "libraries": { + "Skopje.CustomPlayerSkins/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + } + } +} \ No newline at end of file diff --git a/CustomPlayerSkins/bin/Debug/net6.0/Skopje.CustomPlayerSkins.dll b/CustomPlayerSkins/bin/Debug/net6.0/Skopje.CustomPlayerSkins.dll new file mode 100644 index 0000000..43f2cbe Binary files /dev/null and b/CustomPlayerSkins/bin/Debug/net6.0/Skopje.CustomPlayerSkins.dll differ diff --git a/CustomPlayerSkins/bin/Debug/net6.0/Skopje.CustomPlayerSkins.pdb b/CustomPlayerSkins/bin/Debug/net6.0/Skopje.CustomPlayerSkins.pdb new file mode 100644 index 0000000..3f42536 Binary files /dev/null and b/CustomPlayerSkins/bin/Debug/net6.0/Skopje.CustomPlayerSkins.pdb differ diff --git a/CustomPlayerSkins/bin/Release/net6.0/CustomSkins/hands.png b/CustomPlayerSkins/bin/Release/net6.0/CustomSkins/hands.png new file mode 100644 index 0000000..daf8123 Binary files /dev/null and b/CustomPlayerSkins/bin/Release/net6.0/CustomSkins/hands.png differ diff --git a/CustomPlayerSkins/bin/Release/net6.0/CustomSkins/prp.png b/CustomPlayerSkins/bin/Release/net6.0/CustomSkins/prp.png new file mode 100644 index 0000000..5fb31c1 Binary files /dev/null and b/CustomPlayerSkins/bin/Release/net6.0/CustomSkins/prp.png differ diff --git a/CustomPlayerSkins/bin/Release/net6.0/Skopje.CustomPlayerSkins.dll b/CustomPlayerSkins/bin/Release/net6.0/Skopje.CustomPlayerSkins.dll index cc0bb23..397a9a6 100644 Binary files a/CustomPlayerSkins/bin/Release/net6.0/Skopje.CustomPlayerSkins.dll and b/CustomPlayerSkins/bin/Release/net6.0/Skopje.CustomPlayerSkins.dll differ diff --git a/CustomPlayerSkins/bin/Release/net6.0/Skopje.CustomPlayerSkins.pdb b/CustomPlayerSkins/bin/Release/net6.0/Skopje.CustomPlayerSkins.pdb index 09c7ee2..dd383e5 100644 Binary files a/CustomPlayerSkins/bin/Release/net6.0/Skopje.CustomPlayerSkins.pdb and b/CustomPlayerSkins/bin/Release/net6.0/Skopje.CustomPlayerSkins.pdb differ diff --git a/CustomPlayerSkins/obj/CustomPlayerSkinsPlugin.csproj.nuget.dgspec.json b/CustomPlayerSkins/obj/CustomPlayerSkinsPlugin.csproj.nuget.dgspec.json index 918967d..d302e76 100644 --- a/CustomPlayerSkins/obj/CustomPlayerSkinsPlugin.csproj.nuget.dgspec.json +++ b/CustomPlayerSkins/obj/CustomPlayerSkinsPlugin.csproj.nuget.dgspec.json @@ -1,17 +1,17 @@ { "format": 1, "restore": { - "c:\\Users\\andre\\Desktop\\SkopjeMods\\CustomPlayerSkins\\CustomPlayerSkinsPlugin.csproj": {} + "C:\\Users\\andre\\Desktop\\SkopjeMods\\CustomPlayerSkins\\CustomPlayerSkinsPlugin.csproj": {} }, "projects": { - "c:\\Users\\andre\\Desktop\\SkopjeMods\\CustomPlayerSkins\\CustomPlayerSkinsPlugin.csproj": { + "C:\\Users\\andre\\Desktop\\SkopjeMods\\CustomPlayerSkins\\CustomPlayerSkinsPlugin.csproj": { "version": "1.0.0", "restore": { - "projectUniqueName": "c:\\Users\\andre\\Desktop\\SkopjeMods\\CustomPlayerSkins\\CustomPlayerSkinsPlugin.csproj", + "projectUniqueName": "C:\\Users\\andre\\Desktop\\SkopjeMods\\CustomPlayerSkins\\CustomPlayerSkinsPlugin.csproj", "projectName": "Skopje.CustomPlayerSkins", - "projectPath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\CustomPlayerSkins\\CustomPlayerSkinsPlugin.csproj", + "projectPath": "C:\\Users\\andre\\Desktop\\SkopjeMods\\CustomPlayerSkins\\CustomPlayerSkinsPlugin.csproj", "packagesPath": "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget", - "outputPath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\CustomPlayerSkins\\obj\\", + "outputPath": "C:\\Users\\andre\\Desktop\\SkopjeMods\\CustomPlayerSkins\\obj\\", "projectStyle": "PackageReference", "configFilePaths": [ "C:\\Users\\andre\\AppData\\Roaming\\NuGet\\NuGet.Config", diff --git a/CustomPlayerSkins/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs b/CustomPlayerSkins/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs new file mode 100644 index 0000000..ed92695 --- /dev/null +++ b/CustomPlayerSkins/obj/Debug/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/CustomPlayerSkins/obj/Debug/net6.0/CustomPlayerSkinsPlugin.AssemblyInfo.cs b/CustomPlayerSkins/obj/Debug/net6.0/CustomPlayerSkinsPlugin.AssemblyInfo.cs new file mode 100644 index 0000000..689af70 --- /dev/null +++ b/CustomPlayerSkins/obj/Debug/net6.0/CustomPlayerSkinsPlugin.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.CustomPlayerSkins")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+a740fec7c87ba4b24aefb7faf991fc5b69c71bd4")] +[assembly: System.Reflection.AssemblyProductAttribute("Skopje.CustomPlayerSkins")] +[assembly: System.Reflection.AssemblyTitleAttribute("Skopje.CustomPlayerSkins")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/CustomPlayerSkins/obj/Debug/net6.0/CustomPlayerSkinsPlugin.AssemblyInfoInputs.cache b/CustomPlayerSkins/obj/Debug/net6.0/CustomPlayerSkinsPlugin.AssemblyInfoInputs.cache new file mode 100644 index 0000000..5383422 --- /dev/null +++ b/CustomPlayerSkins/obj/Debug/net6.0/CustomPlayerSkinsPlugin.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +2bc044bb67784bf521f2d79f70353573c1c458dec677af07046aae05ab5a56f9 diff --git a/CustomPlayerSkins/obj/Debug/net6.0/CustomPlayerSkinsPlugin.GeneratedMSBuildEditorConfig.editorconfig b/CustomPlayerSkins/obj/Debug/net6.0/CustomPlayerSkinsPlugin.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..4538254 --- /dev/null +++ b/CustomPlayerSkins/obj/Debug/net6.0/CustomPlayerSkinsPlugin.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.CustomPlayerSkins +build_property.ProjectDir = C:\Users\andre\Desktop\SkopjeMods\CustomPlayerSkins\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.EffectiveAnalysisLevelStyle = 6.0 +build_property.EnableCodeStyleSeverity = diff --git a/CustomPlayerSkins/obj/Debug/net6.0/CustomPlayerSkinsPlugin.assets.cache b/CustomPlayerSkins/obj/Debug/net6.0/CustomPlayerSkinsPlugin.assets.cache new file mode 100644 index 0000000..c5b708f Binary files /dev/null and b/CustomPlayerSkins/obj/Debug/net6.0/CustomPlayerSkinsPlugin.assets.cache differ diff --git a/CustomPlayerSkins/obj/Debug/net6.0/CustomPlayerSkinsPlugin.csproj.AssemblyReference.cache b/CustomPlayerSkins/obj/Debug/net6.0/CustomPlayerSkinsPlugin.csproj.AssemblyReference.cache new file mode 100644 index 0000000..937d1fa Binary files /dev/null and b/CustomPlayerSkins/obj/Debug/net6.0/CustomPlayerSkinsPlugin.csproj.AssemblyReference.cache differ diff --git a/CustomPlayerSkins/obj/Debug/net6.0/CustomPlayerSkinsPlugin.csproj.CoreCompileInputs.cache b/CustomPlayerSkins/obj/Debug/net6.0/CustomPlayerSkinsPlugin.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..f468d38 --- /dev/null +++ b/CustomPlayerSkins/obj/Debug/net6.0/CustomPlayerSkinsPlugin.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +a4e5920d93c0578ae388d9ae5af84bfefa9392a9f32e963e525e98ca55621af9 diff --git a/CustomPlayerSkins/obj/Debug/net6.0/CustomPlayerSkinsPlugin.csproj.FileListAbsolute.txt b/CustomPlayerSkins/obj/Debug/net6.0/CustomPlayerSkinsPlugin.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..fd749e0 --- /dev/null +++ b/CustomPlayerSkins/obj/Debug/net6.0/CustomPlayerSkinsPlugin.csproj.FileListAbsolute.txt @@ -0,0 +1,19 @@ +C:\Users\andre\Desktop\SkopjeMods\CustomPlayerSkins\bin\Debug\net6.0\CustomSkins\engineer.png +C:\Users\andre\Desktop\SkopjeMods\CustomPlayerSkins\bin\Debug\net6.0\CustomSkins\fighter.png +C:\Users\andre\Desktop\SkopjeMods\CustomPlayerSkins\bin\Debug\net6.0\CustomSkins\hands.png +C:\Users\andre\Desktop\SkopjeMods\CustomPlayerSkins\bin\Debug\net6.0\CustomSkins\medic.png +C:\Users\andre\Desktop\SkopjeMods\CustomPlayerSkins\bin\Debug\net6.0\CustomSkins\prp.png +C:\Users\andre\Desktop\SkopjeMods\CustomPlayerSkins\bin\Debug\net6.0\CustomSkins\ranger.png +C:\Users\andre\Desktop\SkopjeMods\CustomPlayerSkins\bin\Debug\net6.0\CustomSkins\singleplayer.png +C:\Users\andre\Desktop\SkopjeMods\CustomPlayerSkins\bin\Debug\net6.0\Skopje.CustomPlayerSkins.deps.json +C:\Users\andre\Desktop\SkopjeMods\CustomPlayerSkins\bin\Debug\net6.0\Skopje.CustomPlayerSkins.dll +C:\Users\andre\Desktop\SkopjeMods\CustomPlayerSkins\bin\Debug\net6.0\Skopje.CustomPlayerSkins.pdb +C:\Users\andre\Desktop\SkopjeMods\CustomPlayerSkins\obj\Debug\net6.0\CustomPlayerSkinsPlugin.csproj.AssemblyReference.cache +C:\Users\andre\Desktop\SkopjeMods\CustomPlayerSkins\obj\Debug\net6.0\CustomPlayerSkinsPlugin.GeneratedMSBuildEditorConfig.editorconfig +C:\Users\andre\Desktop\SkopjeMods\CustomPlayerSkins\obj\Debug\net6.0\CustomPlayerSkinsPlugin.AssemblyInfoInputs.cache +C:\Users\andre\Desktop\SkopjeMods\CustomPlayerSkins\obj\Debug\net6.0\CustomPlayerSkinsPlugin.AssemblyInfo.cs +C:\Users\andre\Desktop\SkopjeMods\CustomPlayerSkins\obj\Debug\net6.0\CustomPlayerSkinsPlugin.csproj.CoreCompileInputs.cache +C:\Users\andre\Desktop\SkopjeMods\CustomPlayerSkins\obj\Debug\net6.0\Skopje.CustomPlayerSkins.dll +C:\Users\andre\Desktop\SkopjeMods\CustomPlayerSkins\obj\Debug\net6.0\refint\Skopje.CustomPlayerSkins.dll +C:\Users\andre\Desktop\SkopjeMods\CustomPlayerSkins\obj\Debug\net6.0\Skopje.CustomPlayerSkins.pdb +C:\Users\andre\Desktop\SkopjeMods\CustomPlayerSkins\obj\Debug\net6.0\ref\Skopje.CustomPlayerSkins.dll diff --git a/CustomPlayerSkins/obj/Debug/net6.0/Skopje.CustomPlayerSkins.dll b/CustomPlayerSkins/obj/Debug/net6.0/Skopje.CustomPlayerSkins.dll new file mode 100644 index 0000000..43f2cbe Binary files /dev/null and b/CustomPlayerSkins/obj/Debug/net6.0/Skopje.CustomPlayerSkins.dll differ diff --git a/CustomPlayerSkins/obj/Debug/net6.0/Skopje.CustomPlayerSkins.pdb b/CustomPlayerSkins/obj/Debug/net6.0/Skopje.CustomPlayerSkins.pdb new file mode 100644 index 0000000..3f42536 Binary files /dev/null and b/CustomPlayerSkins/obj/Debug/net6.0/Skopje.CustomPlayerSkins.pdb differ diff --git a/CustomPlayerSkins/obj/Debug/net6.0/ref/Skopje.CustomPlayerSkins.dll b/CustomPlayerSkins/obj/Debug/net6.0/ref/Skopje.CustomPlayerSkins.dll new file mode 100644 index 0000000..12a8922 Binary files /dev/null and b/CustomPlayerSkins/obj/Debug/net6.0/ref/Skopje.CustomPlayerSkins.dll differ diff --git a/CustomPlayerSkins/obj/Debug/net6.0/refint/Skopje.CustomPlayerSkins.dll b/CustomPlayerSkins/obj/Debug/net6.0/refint/Skopje.CustomPlayerSkins.dll new file mode 100644 index 0000000..12a8922 Binary files /dev/null and b/CustomPlayerSkins/obj/Debug/net6.0/refint/Skopje.CustomPlayerSkins.dll differ diff --git a/CustomPlayerSkins/obj/Release/net6.0/CustomPlayerSkinsPlugin.AssemblyInfo.cs b/CustomPlayerSkins/obj/Release/net6.0/CustomPlayerSkinsPlugin.AssemblyInfo.cs index 00d17b7..74af0f5 100644 --- a/CustomPlayerSkins/obj/Release/net6.0/CustomPlayerSkinsPlugin.AssemblyInfo.cs +++ b/CustomPlayerSkins/obj/Release/net6.0/CustomPlayerSkinsPlugin.AssemblyInfo.cs @@ -13,7 +13,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("Skopje.CustomPlayerSkins")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Release")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+9f4f8bf5235790c04718d7ca24b0f3f76e93b270")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+a740fec7c87ba4b24aefb7faf991fc5b69c71bd4")] [assembly: System.Reflection.AssemblyProductAttribute("Skopje.CustomPlayerSkins")] [assembly: System.Reflection.AssemblyTitleAttribute("Skopje.CustomPlayerSkins")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/CustomPlayerSkins/obj/Release/net6.0/CustomPlayerSkinsPlugin.AssemblyInfoInputs.cache b/CustomPlayerSkins/obj/Release/net6.0/CustomPlayerSkinsPlugin.AssemblyInfoInputs.cache index c224ac7..e8039c9 100644 --- a/CustomPlayerSkins/obj/Release/net6.0/CustomPlayerSkinsPlugin.AssemblyInfoInputs.cache +++ b/CustomPlayerSkins/obj/Release/net6.0/CustomPlayerSkinsPlugin.AssemblyInfoInputs.cache @@ -1 +1 @@ -2039bc0988efa0867d36e92385b47db55a3abd9b1b79233f9907b9909d2a0097 +b1a23811162af313e7a654eb6faf4da69b5eaa3caf2793482c0aa899d054f814 diff --git a/CustomPlayerSkins/obj/Release/net6.0/CustomPlayerSkinsPlugin.GeneratedMSBuildEditorConfig.editorconfig b/CustomPlayerSkins/obj/Release/net6.0/CustomPlayerSkinsPlugin.GeneratedMSBuildEditorConfig.editorconfig index 4c04389..4538254 100644 --- a/CustomPlayerSkins/obj/Release/net6.0/CustomPlayerSkinsPlugin.GeneratedMSBuildEditorConfig.editorconfig +++ b/CustomPlayerSkins/obj/Release/net6.0/CustomPlayerSkinsPlugin.GeneratedMSBuildEditorConfig.editorconfig @@ -11,7 +11,7 @@ build_property.EnforceExtendedAnalyzerRules = build_property.EntryPointFilePath = build_property._SupportedPlatformList = Linux,macOS,Windows build_property.RootNamespace = Skopje.CustomPlayerSkins -build_property.ProjectDir = c:\Users\andre\Desktop\SkopjeMods\CustomPlayerSkins\ +build_property.ProjectDir = C:\Users\andre\Desktop\SkopjeMods\CustomPlayerSkins\ build_property.EnableComHosting = build_property.EnableGeneratedComInterfaceComImportInterop = build_property.EffectiveAnalysisLevelStyle = 6.0 diff --git a/CustomPlayerSkins/obj/Release/net6.0/CustomPlayerSkinsPlugin.assets.cache b/CustomPlayerSkins/obj/Release/net6.0/CustomPlayerSkinsPlugin.assets.cache index 87adbd1..2be361b 100644 Binary files a/CustomPlayerSkins/obj/Release/net6.0/CustomPlayerSkinsPlugin.assets.cache and b/CustomPlayerSkins/obj/Release/net6.0/CustomPlayerSkinsPlugin.assets.cache differ diff --git a/CustomPlayerSkins/obj/Release/net6.0/CustomPlayerSkinsPlugin.csproj.FileListAbsolute.txt b/CustomPlayerSkins/obj/Release/net6.0/CustomPlayerSkinsPlugin.csproj.FileListAbsolute.txt index 1b57119..031da34 100644 --- a/CustomPlayerSkins/obj/Release/net6.0/CustomPlayerSkinsPlugin.csproj.FileListAbsolute.txt +++ b/CustomPlayerSkins/obj/Release/net6.0/CustomPlayerSkinsPlugin.csproj.FileListAbsolute.txt @@ -15,3 +15,5 @@ c:\Users\andre\Desktop\SkopjeMods\CustomPlayerSkins\bin\Release\net6.0\CustomSki c:\Users\andre\Desktop\SkopjeMods\CustomPlayerSkins\bin\Release\net6.0\CustomSkins\medic.png c:\Users\andre\Desktop\SkopjeMods\CustomPlayerSkins\bin\Release\net6.0\CustomSkins\ranger.png c:\Users\andre\Desktop\SkopjeMods\CustomPlayerSkins\bin\Release\net6.0\CustomSkins\singleplayer.png +c:\Users\andre\Desktop\SkopjeMods\CustomPlayerSkins\bin\Release\net6.0\CustomSkins\prp.png +C:\Users\andre\Desktop\SkopjeMods\CustomPlayerSkins\bin\Release\net6.0\CustomSkins\hands.png diff --git a/CustomPlayerSkins/obj/Release/net6.0/Skopje.CustomPlayerSkins.dll b/CustomPlayerSkins/obj/Release/net6.0/Skopje.CustomPlayerSkins.dll index cc0bb23..397a9a6 100644 Binary files a/CustomPlayerSkins/obj/Release/net6.0/Skopje.CustomPlayerSkins.dll and b/CustomPlayerSkins/obj/Release/net6.0/Skopje.CustomPlayerSkins.dll differ diff --git a/CustomPlayerSkins/obj/Release/net6.0/Skopje.CustomPlayerSkins.pdb b/CustomPlayerSkins/obj/Release/net6.0/Skopje.CustomPlayerSkins.pdb index 09c7ee2..dd383e5 100644 Binary files a/CustomPlayerSkins/obj/Release/net6.0/Skopje.CustomPlayerSkins.pdb and b/CustomPlayerSkins/obj/Release/net6.0/Skopje.CustomPlayerSkins.pdb differ diff --git a/CustomPlayerSkins/obj/Release/net6.0/ref/Skopje.CustomPlayerSkins.dll b/CustomPlayerSkins/obj/Release/net6.0/ref/Skopje.CustomPlayerSkins.dll index 8d7e450..5a55e4f 100644 Binary files a/CustomPlayerSkins/obj/Release/net6.0/ref/Skopje.CustomPlayerSkins.dll and b/CustomPlayerSkins/obj/Release/net6.0/ref/Skopje.CustomPlayerSkins.dll differ diff --git a/CustomPlayerSkins/obj/Release/net6.0/refint/Skopje.CustomPlayerSkins.dll b/CustomPlayerSkins/obj/Release/net6.0/refint/Skopje.CustomPlayerSkins.dll index 8d7e450..5a55e4f 100644 Binary files a/CustomPlayerSkins/obj/Release/net6.0/refint/Skopje.CustomPlayerSkins.dll and b/CustomPlayerSkins/obj/Release/net6.0/refint/Skopje.CustomPlayerSkins.dll differ diff --git a/CustomPlayerSkins/obj/project.nuget.cache b/CustomPlayerSkins/obj/project.nuget.cache index b8e0839..96966e2 100644 --- a/CustomPlayerSkins/obj/project.nuget.cache +++ b/CustomPlayerSkins/obj/project.nuget.cache @@ -1,8 +1,8 @@ { "version": 2, - "dgSpecHash": "7IEzcjI0wFM=", + "dgSpecHash": "zHwEQo8wyAU=", "success": true, - "projectFilePath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\CustomPlayerSkins\\CustomPlayerSkinsPlugin.csproj", + "projectFilePath": "C:\\Users\\andre\\Desktop\\SkopjeMods\\CustomPlayerSkins\\CustomPlayerSkinsPlugin.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", diff --git a/CustomWeaponSkins/CustomWeaponSkinsPlugin.cs b/CustomWeaponSkins/CustomWeaponSkinsPlugin.cs new file mode 100644 index 0000000..1fb18b9 --- /dev/null +++ b/CustomWeaponSkins/CustomWeaponSkinsPlugin.cs @@ -0,0 +1,718 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using BepInEx; +using BepInEx.Configuration; +using BepInEx.Logging; +using BepInEx.Unity.IL2CPP; +using HarmonyLib; +using Il2CppInterop.Runtime; +using Skopje.Modding; +using UnityEngine; + +namespace Skopje.CustomWeaponSkins +{ + [BepInPlugin(PluginGuid, PluginName, PluginVersion)] + public class CustomWeaponSkinsPlugin : BasePlugin + { + public const string PluginGuid = "com.skopje.customweaponskins"; + public const string PluginName = "Skopje Custom Weapon Skins"; + public const string PluginVersion = "1.1.0"; + + internal static ManualLogSource LogSource; + internal static ConfigEntry Enabled; + + static Harmony _harmony; + static Il2CppSystem.Action _onPlayerStarted; + + public override void Load() + { + LogSource = Log; + Enabled = Config.Bind("Skin", "Enabled", true, "Replace each player weapon with its own PNG in the WeaponSkins folder next to this plugin."); + + _harmony = new Harmony(PluginGuid); + var setTexture = AccessTools.Method(typeof(Material), "SetTexture", new[] { typeof(string), typeof(Texture) }); + if (setTexture != null) + _harmony.Patch(setTexture, prefix: new HarmonyMethod(typeof(WeaponSkinPatches), nameof(WeaponSkinPatches.BeforeSetTexture))); + var setTextureId = AccessTools.Method(typeof(Material), "SetTexture", new[] { typeof(int), typeof(Texture) }); + if (setTextureId != null) + _harmony.Patch(setTextureId, prefix: new HarmonyMethod(typeof(WeaponSkinPatches), nameof(WeaponSkinPatches.BeforeSetTextureId))); + + _onPlayerStarted = DelegateSupport.ConvertDelegate>(new Action(WeaponSkinReplacer.ApplyPlayer)); + ModAPI.add_OnPlayerStartedClient(_onPlayerStarted); + + LogSource.LogInfo($"{PluginName} {PluginVersion} loaded. Edit the PNGs in WeaponSkins. Each file is one weapon: kalash, m143, knife, lmg_heavy, lmg_medium, bozdogun, hammer, rusty_pipe, wrench, toxic_axe, electric_blade, udar, revolver, pupin, karab, osa, vector, gruev_shotgun, winko, skull, grom, snooper, spore_gun, tesla_gun, and frag_grenade."); + } + + public override bool Unload() + { + if (_harmony != null) + _harmony.UnpatchSelf(); + if (_onPlayerStarted != null) + ModAPI.remove_OnPlayerStartedClient(_onPlayerStarted); + WeaponSkinReplacer.Restore(); + return true; + } + } + + static class WeaponSkinPatches + { + public static void BeforeSetTexture(string name, ref Texture value) + { + if (name == "_MainTex") + WeaponSkinReplacer.Redirect(ref value); + } + + public static void BeforeSetTextureId(int nameID, ref Texture value) + { + if (nameID == Shader.PropertyToID("_MainTex")) + WeaponSkinReplacer.Redirect(ref value); + } + } + + static class WeaponSkinReplacer + { + sealed class WeaponSkin + { + public string FileName; + public string DumpMaterial; + public string SourceTexture; + public string[] Materials; + public Texture2D Texture; + public DateTime WriteTimeUtc; + } + + // One file per weapon. First-person, item, scope, and charged variants share that weapon's albedo. + static readonly WeaponSkin[] Weapons = + { + new WeaponSkin + { + FileName = "kalash.png", + DumpMaterial = "MAT_Weapon_Kalash", + SourceTexture = "DIF_Weapon_Kalash", + Materials = new[] { "MAT_Weapon_Kalash", "MAT_Weapon_Kalash_FP", "MAT_Weapon_Kalash_Item" }, + }, + new WeaponSkin + { + FileName = "m143.png", + DumpMaterial = "MAT_Weapon_M143", + SourceTexture = "DIF_Weapon_M143", + Materials = new[] { "MAT_Weapon_M143", "MAT_Weapon_M143_FP", "MAT_Weapon_M143_Item" }, + }, + new WeaponSkin + { + FileName = "knife.png", + DumpMaterial = "MAT_Knife_FP", + SourceTexture = "DIF_Knife", + Materials = new[] { "MAT_Knife_FP" }, + }, + new WeaponSkin + { + FileName = "lmg_heavy.png", + DumpMaterial = "MAT_Weapon_LMG_Heavy", + SourceTexture = "DIF_Weapon_LMG_Heavy", + Materials = new[] { "MAT_Weapon_LMG_Heavy", "MAT_Weapon_LMG_Heavy_FP", "MAT_Weapon_LMG_Heavy_Item" }, + }, + new WeaponSkin + { + FileName = "lmg_medium.png", + DumpMaterial = "MAT_Weapon_LMGMedium", + SourceTexture = "DIF_Weapon_LMGMedium", + Materials = new[] { "MAT_Weapon_LMGMedium", "MAT_Weapon_LMGMedium_FP", "MAT_Weapon_LMGMedium_Item" }, + }, + new WeaponSkin + { + FileName = "bozdogun.png", + DumpMaterial = "MAT_Weapon_Bozdogun", + SourceTexture = "DIF_Weapon_Bozdogun", + Materials = new[] { "MAT_Weapon_Bozdogun", "MAT_Weapon_Bozdogun_FP", "MAT_Weapon_Bozdogun_FP_Charged", "MAT_Weapon_Bozdogun_Item" }, + }, + new WeaponSkin + { + FileName = "hammer.png", + DumpMaterial = "MAT_Weapon_Hammer", + SourceTexture = "DIF_Weapon_Slab", + Materials = new[] { "MAT_Weapon_Hammer", "MAT_Weapon_Hammer_FP", "MAT_Weapon_Hammer_Item" }, + }, + new WeaponSkin + { + FileName = "rusty_pipe.png", + DumpMaterial = "MAT_Weapon_Rusty_Pipe", + SourceTexture = "DIF_Rusty_Pipe", + Materials = new[] { "MAT_Weapon_Rusty_Pipe", "MAT_Weapon_Rusty_Pipe_FP", "MAT_Weapon_Rusty_Pipe_Item" }, + }, + new WeaponSkin + { + FileName = "wrench.png", + DumpMaterial = "MAT_Weapon_Wrench", + SourceTexture = "DIF_Weapon_Wrench", + Materials = new[] { "MAT_Weapon_Wrench", "MAT_Weapon_Wrench_FP", "MAT_Weapon_Wrench_Item" }, + }, + new WeaponSkin + { + FileName = "toxic_axe.png", + DumpMaterial = "MAT_Weapon_Toxic_Axe", + SourceTexture = "DIF_Toxic_Axe", + Materials = new[] { "MAT_Weapon_Toxic_Axe", "MAT_Weapon_Toxic_Axe_FP" }, + }, + new WeaponSkin + { + FileName = "electric_blade.png", + DumpMaterial = "MAT_Weapon_Electric_Blade", + SourceTexture = "DIF_ElectricBlade", + Materials = new[] { "MAT_Weapon_Electric_Blade", "MAT_Weapon_Electric_Blade_FP", "MAT_Weapon_Electric_Blade_Item" }, + }, + new WeaponSkin + { + FileName = "udar.png", + DumpMaterial = "MAT_Weapon_UDAR", + SourceTexture = "DIF_Weapon_UDAR", + Materials = new[] { "MAT_Weapon_UDAR", "MAT_Weapon_UDAR_FP", "MAT_Weapon_UDAR_Item" }, + }, + new WeaponSkin + { + FileName = "revolver.png", + DumpMaterial = "MAT_Weapon_Revolver", + SourceTexture = "DIF_Weapon_Revolver", + Materials = new[] { "MAT_Weapon_Revolver", "MAT_Weapon_Revolver_FP", "MAT_Weapon_Revolver_Item" }, + }, + new WeaponSkin + { + FileName = "pupin.png", + DumpMaterial = "MAT_Pupin", + SourceTexture = "DIF_Weapon_Pupin", + Materials = new[] { "MAT_Pupin", "MAT_Pupin_FP", "MAT_Pupin_Item" }, + }, + new WeaponSkin + { + FileName = "karab.png", + DumpMaterial = "MAT_Karab", + SourceTexture = "DIF_Weapon_Karab", + Materials = new[] { "MAT_Karab", "MAT_Karab_FP", "MAT_Karab_Item" }, + }, + new WeaponSkin + { + FileName = "osa.png", + DumpMaterial = "MAT_Osa", + SourceTexture = "DIF_Weapon_Osa", + Materials = new[] { "MAT_Osa", "MAT_Osa_FP", "MAT_Osa_Item" }, + }, + new WeaponSkin + { + FileName = "vector.png", + DumpMaterial = "MAT_Weapon_Vector", + SourceTexture = "DIF_Weapon_Vector", + Materials = new[] { "MAT_Weapon_Vector", "MAT_Weapon_Vector_FP", "MAT_Weapon_Vector_Item" }, + }, + new WeaponSkin + { + FileName = "gruev_shotgun.png", + DumpMaterial = "MAT_GruevShotgun", + SourceTexture = "DIF_Weapon_Gruev_Shotgun", + Materials = new[] { "MAT_GruevShotgun", "MAT_GruevShotgun_FP", "MAT_GruevShotgun_Item" }, + }, + new WeaponSkin + { + FileName = "winko.png", + DumpMaterial = "MAT_Weapon_Winko", + SourceTexture = "DIF_Weapon_Winko", + Materials = new[] { "MAT_Weapon_Winko", "MAT_Weapon_Winko_FP", "MAT_Weapon_Winko_Item" }, + }, + new WeaponSkin + { + FileName = "skull.png", + DumpMaterial = "MAT_Weapon_Skull", + SourceTexture = "DIF_Weapon_Skull", + Materials = new[] { "MAT_Weapon_Skull", "MAT_Weapon_Skull_FP", "MAT_Weapon_Skull_Item", "MAT_Weapon_Skull_Empty" }, + }, + new WeaponSkin + { + FileName = "grom.png", + DumpMaterial = "MAT_Weapon_Grom", + SourceTexture = "DIF_Weapon_Grom", + Materials = new[] { "MAT_Weapon_Grom", "MAT_Weapon_Grom_FP", "MAT_Weapon_Grom_Item" }, + }, + new WeaponSkin + { + FileName = "snooper.png", + DumpMaterial = "MAT_Weapon_Snooper", + SourceTexture = "DIF_Weapon_Snooper", + Materials = new[] { "MAT_Weapon_Snooper", "MAT_Weapon_Snooper_FP", "MAT_Weapon_Snooper_Item", "MAT_Weapon_Snooper_Scope", "MAT_Weapon_Snooper_Scope_FP" }, + }, + new WeaponSkin + { + FileName = "spore_gun.png", + DumpMaterial = "MAT_Weapon_SporeGun", + SourceTexture = "DIF_Weapon_SporeGun", + Materials = new[] { "MAT_Weapon_SporeGun", "MAT_Weapon_SporeGun_FP", "MAT_Weapon_SporeGun_Item" }, + }, + new WeaponSkin + { + FileName = "tesla_gun.png", + DumpMaterial = "MAT_Weapon_TeslaGun", + SourceTexture = "DIF_Weapon_Teslagun", + Materials = new[] { "MAT_Weapon_TeslaGun", "MAT_Weapon_TeslaGun_FP", "MAT_Weapon_TeslaGun_Item" }, + }, + new WeaponSkin + { + FileName = "frag_grenade.png", + DumpMaterial = "MAT_FragGrenade", + SourceTexture = "DIF_FragGrenade", + Materials = new[] { "MAT_FragGrenade" }, + }, + }; + + static readonly Dictionary _originals = new Dictionary(); + static readonly Dictionary _materials = new Dictionary(); + static readonly Dictionary _renderers = new Dictionary(); + static readonly MaterialPropertyBlock _block = new MaterialPropertyBlock(); + static float _nextFileCheck; + static bool _loggedApply; + static bool _applied; + + public static void ApplyPlayer(SkopjePlayer player) + { + if (!CustomWeaponSkinsPlugin.Enabled.Value) + { + if (_applied) + { + RevertMaterials(); + ClearRendererOverrides(); + _applied = false; + _loggedApply = false; + } + return; + } + if (player == null || !EnsureTextures(player)) + return; + + int applied = ApplyPlayerWeapons(player); + if (applied > 0) + { + _applied = true; + if (!_loggedApply) + { + _loggedApply = true; + CustomWeaponSkinsPlugin.LogSource.LogInfo($"Applied {applied} weapon material{(applied == 1 ? "" : "s")} from WeaponSkins."); + } + } + } + + public static void Restore() + { + RevertMaterials(); + ClearRendererOverrides(); + _applied = false; + _originals.Clear(); + _materials.Clear(); + _renderers.Clear(); + for (int i = 0; i < Weapons.Length; i++) + { + if (Weapons[i].Texture == null) + continue; + UnityEngine.Object.Destroy(Weapons[i].Texture); + Weapons[i].Texture = null; + } + } + + public static void Redirect(ref Texture value) + { + if (value == null || !CustomWeaponSkinsPlugin.Enabled.Value) + return; + for (int i = 0; i < Weapons.Length; i++) + { + WeaponSkin weapon = Weapons[i]; + if (weapon.Texture == null || value == weapon.Texture) + continue; + if (TextureNameMatches(value.name, weapon.SourceTexture)) + { + value = weapon.Texture; + return; + } + } + } + + static void RevertMaterials() + { + foreach (var pair in _materials) + { + Material material = pair.Value; + if (material != null && _originals.TryGetValue(pair.Key, out Texture original)) + material.SetTexture("_MainTex", original); + } + } + + static void ClearRendererOverrides() + { + foreach (var pair in _renderers) + { + Renderer renderer = pair.Value; + if (renderer == null) + continue; + Material[] materials = renderer.sharedMaterials; + if (materials == null) + continue; + for (int slot = 0; slot < materials.Length; slot++) + { + Material material = materials[slot]; + if (material == null || !_originals.TryGetValue(material.GetInstanceID(), out Texture original)) + continue; + renderer.GetPropertyBlock(_block, slot); + _block.SetTexture("_MainTex", original); + renderer.SetPropertyBlock(_block, slot); + } + } + } + + static int ApplyPlayerWeapons(SkopjePlayer player) + { + WeaponsController weapons = player.WeaponsController; + if (weapons == null) + return 0; + + int applied = 0; + applied += ApplyOn(weapons.Socket); + applied += ApplyOn(weapons.ThrowSocket); + applied += ApplyOn(weapons.PRPObject); + applied += ApplyOn(weapons.BrokenPRPObject); + applied += ApplyOn(weapons.KnifeObject); + var list = weapons.AvailableWeapons; + if (list == null) + return applied; + for (int i = 0; i < list.Count; i++) + { + Weapon weapon = list[i]; + if (weapon == null) + continue; + applied += ApplyOn(weapon.WeaponModel); + applied += ApplyOn(weapon.LeftHandWeaponModel); + applied += ApplyOn(weapon.PhysicsWeaponModel); + applied += ApplyOn(weapon.PhysicsLeftHandWeaponModel); + } + return applied; + } + + static int ApplyOn(GameObject root) + { + if (root == null) + return 0; + return ApplyUnder(root.transform); + } + + static int ApplyOn(Component root) + { + if (root == null) + return 0; + return ApplyUnder(root.transform); + } + + static int ApplyUnder(Transform root) + { + if (root == null) + return 0; + Renderer[] found = root.GetComponentsInChildren(true); + int applied = 0; + for (int i = 0; i < found.Length; i++) + applied += ApplyRenderer(found[i]); + return applied; + } + + static int ApplyRenderer(Renderer renderer) + { + if (renderer == null) + return 0; + Material[] materials = renderer.sharedMaterials; + if (materials == null) + return 0; + + int applied = 0; + for (int i = 0; i < materials.Length; i++) + { + WeaponSkin weapon = Resolve(materials[i]); + if (weapon == null) + continue; + applied += ApplyMaterial(materials[i]); + _renderers[renderer.GetInstanceID()] = renderer; + renderer.GetPropertyBlock(_block, i); + _block.SetTexture("_MainTex", weapon.Texture); + renderer.SetPropertyBlock(_block, i); + } + return applied; + } + + static int ApplyMaterial(Material material) + { + WeaponSkin weapon = Resolve(material); + if (weapon == null) + return 0; + + int id = material.GetInstanceID(); + if (!_originals.ContainsKey(id)) + { + Texture current = material.GetTexture("_MainTex"); + _originals[id] = current; + _materials[id] = material; + CopySampling(weapon.Texture, current); + } + + if (material.GetTexture("_MainTex") == weapon.Texture) + return 0; + + material.SetTexture("_MainTex", weapon.Texture); + return 1; + } + + static WeaponSkin Resolve(Material material) + { + if (material == null || !material.HasProperty("_MainTex")) + return null; + WeaponSkin byName = FindWeapon(material.name); + if (byName != null && byName.Texture != null) + return byName; + + Texture current = material.GetTexture("_MainTex"); + if (current == null) + return null; + for (int i = 0; i < Weapons.Length; i++) + { + WeaponSkin weapon = Weapons[i]; + if (weapon.Texture == null) + continue; + if (current == weapon.Texture) + return weapon; + if (TextureNameMatches(current.name, weapon.SourceTexture)) + return weapon; + } + return null; + } + + static bool TextureNameMatches(string textureName, string sourceName) + { + if (string.IsNullOrEmpty(textureName) || string.IsNullOrEmpty(sourceName)) + return false; + return textureName == sourceName || textureName.StartsWith(sourceName + " ", StringComparison.Ordinal); + } + + static WeaponSkin FindWeapon(string materialName) + { + if (string.IsNullOrEmpty(materialName)) + return null; + for (int i = 0; i < Weapons.Length; i++) + { + string[] names = Weapons[i].Materials; + for (int n = 0; n < names.Length; n++) + { + string expected = names[n]; + if (materialName == expected || materialName.StartsWith(expected + " (", StringComparison.Ordinal)) + return Weapons[i]; + } + } + return null; + } + + static void CopySampling(Texture2D target, Texture source) + { + if (target == null || source == null) + return; + target.wrapMode = source.wrapMode; + target.filterMode = source.filterMode; + target.anisoLevel = source.anisoLevel; + } + + static bool EnsureTextures(Component source) + { + if (AnyLoaded() && Time.unscaledTime < _nextFileCheck) + return true; + _nextFileCheck = Time.unscaledTime + 1f; + + string directory = SkinsDirectory(); + int ready = 0; + for (int i = 0; i < Weapons.Length; i++) + { + if (EnsureWeapon(Weapons[i], directory, source)) + ready++; + } + + if (ready == 0) + { + CustomWeaponSkinsPlugin.LogSource.LogWarning("No weapon PNGs are ready in " + directory); + return false; + } + return true; + } + + static bool AnyLoaded() + { + for (int i = 0; i < Weapons.Length; i++) + { + if (Weapons[i].Texture != null) + return true; + } + return false; + } + + static bool EnsureWeapon(WeaponSkin weapon, string directory, Component source) + { + string path = Path.Combine(directory, weapon.FileName); + if (!File.Exists(path)) + { + if (!TryDumpSample(weapon, path, source)) + return weapon.Texture != null; + } + + DateTime writeTime; + try { writeTime = File.GetLastWriteTimeUtc(path); } + catch (Exception ex) + { + CustomWeaponSkinsPlugin.LogSource.LogError("Could not read " + weapon.FileName + ": " + ex.Message); + return weapon.Texture != null; + } + + if (weapon.Texture != null && weapon.WriteTimeUtc == writeTime) + return true; + + byte[] bytes; + try { bytes = File.ReadAllBytes(path); } + catch (Exception ex) + { + CustomWeaponSkinsPlugin.LogSource.LogError("Could not read " + weapon.FileName + ": " + ex.Message); + return weapon.Texture != null; + } + + var texture = new Texture2D(2, 2, TextureFormat.RGBA32, true); + texture.name = "SkopjeCustomWeaponSkin_" + Path.GetFileNameWithoutExtension(weapon.FileName); + texture.hideFlags = HideFlags.HideAndDontSave; + if (!ImageConversion.LoadImage(texture, bytes)) + { + UnityEngine.Object.Destroy(texture); + CustomWeaponSkinsPlugin.LogSource.LogError(weapon.FileName + " is not a readable image: " + path); + return weapon.Texture != null; + } + + if (weapon.Texture != null) + UnityEngine.Object.Destroy(weapon.Texture); + weapon.Texture = texture; + weapon.WriteTimeUtc = writeTime; + _loggedApply = false; + CustomWeaponSkinsPlugin.LogSource.LogInfo($"Loaded {weapon.FileName} ({texture.width}x{texture.height})"); + return true; + } + + static bool TryDumpSample(WeaponSkin weapon, string path, Component root) + { + Texture source = FindSourceTexture(root, weapon.DumpMaterial); + if (source == null || IsCustomTexture(source)) + return false; + + byte[] png = EncodePng(source); + if (png == null || png.Length == 0) + return false; + + try + { + Directory.CreateDirectory(Path.GetDirectoryName(path)); + File.WriteAllBytes(path, png); + CustomWeaponSkinsPlugin.LogSource.LogInfo("Dumped " + weapon.FileName + " from the game into WeaponSkins."); + return true; + } + catch (Exception ex) + { + CustomWeaponSkinsPlugin.LogSource.LogError("Could not write " + weapon.FileName + ": " + ex.Message); + return false; + } + } + + static Texture FindSourceTexture(Component root, string materialName) + { + if (root == null || string.IsNullOrEmpty(materialName)) + return null; + + Renderer[] renderers = root.GetComponentsInChildren(true); + for (int i = 0; i < renderers.Length; i++) + { + Renderer renderer = renderers[i]; + if (renderer == null) + continue; + Material[] materials = renderer.sharedMaterials; + if (materials == null) + continue; + for (int slot = 0; slot < materials.Length; slot++) + { + Material material = materials[slot]; + if (material == null || !NameIs(material.name, materialName) || !material.HasProperty("_MainTex")) + continue; + Texture current = material.GetTexture("_MainTex"); + if (_originals.TryGetValue(material.GetInstanceID(), out Texture original) && original != null && !IsCustomTexture(original)) + current = original; + if (current == null || IsCustomTexture(current)) + continue; + return current; + } + } + return null; + } + + static bool NameIs(string materialName, string expected) + { + return materialName == expected || materialName.StartsWith(expected + " (", StringComparison.Ordinal); + } + + static bool IsCustomTexture(Texture texture) + { + if (texture == null) + return false; + for (int i = 0; i < Weapons.Length; i++) + { + if (Weapons[i].Texture == texture) + return true; + } + return false; + } + + static byte[] EncodePng(Texture source) + { + var readable = source as Texture2D; + bool temporary = false; + RenderTexture rt = null; + RenderTexture previous = RenderTexture.active; + try + { + if (readable == null || !readable.isReadable) + { + rt = RenderTexture.GetTemporary(source.width, source.height, 0, RenderTextureFormat.ARGB32, RenderTextureReadWrite.sRGB); + Graphics.Blit(source, rt); + RenderTexture.active = rt; + readable = new Texture2D(source.width, source.height, TextureFormat.RGBA32, false); + readable.ReadPixels(new Rect(0, 0, source.width, source.height), 0, 0); + readable.Apply(); + temporary = true; + } + + var encoded = ImageConversion.EncodeToPNG(readable); + if (encoded == null) + return null; + var bytes = new byte[encoded.Length]; + for (int i = 0; i < encoded.Length; i++) + bytes[i] = encoded[i]; + return bytes; + } + finally + { + RenderTexture.active = previous; + if (rt != null) + RenderTexture.ReleaseTemporary(rt); + if (temporary && readable != null) + UnityEngine.Object.Destroy(readable); + } + } + + static string SkinsDirectory() + { + string dllDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); + if (!string.IsNullOrEmpty(dllDir)) + return Path.Combine(dllDir, "WeaponSkins"); + return Path.Combine(Paths.PluginPath, "WeaponSkins"); + } + } +} diff --git a/CustomWeaponSkins/CustomWeaponSkinsPlugin.csproj b/CustomWeaponSkins/CustomWeaponSkinsPlugin.csproj new file mode 100644 index 0000000..20a73a8 --- /dev/null +++ b/CustomWeaponSkins/CustomWeaponSkinsPlugin.csproj @@ -0,0 +1,60 @@ + + + net6.0 + latest + disable + disable + true + Skopje.CustomWeaponSkins + Skopje.CustomWeaponSkins + 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\Archon.SwissArmyLib.dll + false + + + $(GameDir)\BepInEx\interop\UnityEngine.CoreModule.dll + false + + + $(GameDir)\BepInEx\interop\UnityEngine.ImageConversionModule.dll + false + + + + + + + diff --git a/CustomWeaponSkins/WeaponSkins/bozdogun.png b/CustomWeaponSkins/WeaponSkins/bozdogun.png new file mode 100644 index 0000000..056cca6 Binary files /dev/null and b/CustomWeaponSkins/WeaponSkins/bozdogun.png differ diff --git a/CustomWeaponSkins/WeaponSkins/electric_blade.png b/CustomWeaponSkins/WeaponSkins/electric_blade.png new file mode 100644 index 0000000..260a73e Binary files /dev/null and b/CustomWeaponSkins/WeaponSkins/electric_blade.png differ diff --git a/CustomWeaponSkins/WeaponSkins/frag_grenade.png b/CustomWeaponSkins/WeaponSkins/frag_grenade.png new file mode 100644 index 0000000..f567f66 Binary files /dev/null and b/CustomWeaponSkins/WeaponSkins/frag_grenade.png differ diff --git a/CustomWeaponSkins/WeaponSkins/grom.png b/CustomWeaponSkins/WeaponSkins/grom.png new file mode 100644 index 0000000..9a1839a Binary files /dev/null and b/CustomWeaponSkins/WeaponSkins/grom.png differ diff --git a/CustomWeaponSkins/WeaponSkins/gruev_shotgun.png b/CustomWeaponSkins/WeaponSkins/gruev_shotgun.png new file mode 100644 index 0000000..52f2c2e Binary files /dev/null and b/CustomWeaponSkins/WeaponSkins/gruev_shotgun.png differ diff --git a/CustomWeaponSkins/WeaponSkins/hammer.png b/CustomWeaponSkins/WeaponSkins/hammer.png new file mode 100644 index 0000000..2b8d6ce Binary files /dev/null and b/CustomWeaponSkins/WeaponSkins/hammer.png differ diff --git a/CustomWeaponSkins/WeaponSkins/kalash.png b/CustomWeaponSkins/WeaponSkins/kalash.png new file mode 100644 index 0000000..94e9037 Binary files /dev/null and b/CustomWeaponSkins/WeaponSkins/kalash.png differ diff --git a/CustomWeaponSkins/WeaponSkins/karab.png b/CustomWeaponSkins/WeaponSkins/karab.png new file mode 100644 index 0000000..b46d6ee Binary files /dev/null and b/CustomWeaponSkins/WeaponSkins/karab.png differ diff --git a/CustomWeaponSkins/WeaponSkins/knife.png b/CustomWeaponSkins/WeaponSkins/knife.png new file mode 100644 index 0000000..e9ea50b Binary files /dev/null and b/CustomWeaponSkins/WeaponSkins/knife.png differ diff --git a/CustomWeaponSkins/WeaponSkins/lmg_heavy.png b/CustomWeaponSkins/WeaponSkins/lmg_heavy.png new file mode 100644 index 0000000..ba862d2 Binary files /dev/null and b/CustomWeaponSkins/WeaponSkins/lmg_heavy.png differ diff --git a/CustomWeaponSkins/WeaponSkins/lmg_medium.png b/CustomWeaponSkins/WeaponSkins/lmg_medium.png new file mode 100644 index 0000000..06a15ca Binary files /dev/null and b/CustomWeaponSkins/WeaponSkins/lmg_medium.png differ diff --git a/CustomWeaponSkins/WeaponSkins/m143.png b/CustomWeaponSkins/WeaponSkins/m143.png new file mode 100644 index 0000000..e2041db Binary files /dev/null and b/CustomWeaponSkins/WeaponSkins/m143.png differ diff --git a/CustomWeaponSkins/WeaponSkins/osa.png b/CustomWeaponSkins/WeaponSkins/osa.png new file mode 100644 index 0000000..f891862 Binary files /dev/null and b/CustomWeaponSkins/WeaponSkins/osa.png differ diff --git a/CustomWeaponSkins/WeaponSkins/pupin.png b/CustomWeaponSkins/WeaponSkins/pupin.png new file mode 100644 index 0000000..ecba341 Binary files /dev/null and b/CustomWeaponSkins/WeaponSkins/pupin.png differ diff --git a/CustomWeaponSkins/WeaponSkins/revolver.png b/CustomWeaponSkins/WeaponSkins/revolver.png new file mode 100644 index 0000000..48dde35 Binary files /dev/null and b/CustomWeaponSkins/WeaponSkins/revolver.png differ diff --git a/CustomWeaponSkins/WeaponSkins/rusty_pipe.png b/CustomWeaponSkins/WeaponSkins/rusty_pipe.png new file mode 100644 index 0000000..f99b1aa Binary files /dev/null and b/CustomWeaponSkins/WeaponSkins/rusty_pipe.png differ diff --git a/CustomWeaponSkins/WeaponSkins/skull.png b/CustomWeaponSkins/WeaponSkins/skull.png new file mode 100644 index 0000000..4c558e4 Binary files /dev/null and b/CustomWeaponSkins/WeaponSkins/skull.png differ diff --git a/CustomWeaponSkins/WeaponSkins/snooper.png b/CustomWeaponSkins/WeaponSkins/snooper.png new file mode 100644 index 0000000..6d04a60 Binary files /dev/null and b/CustomWeaponSkins/WeaponSkins/snooper.png differ diff --git a/CustomWeaponSkins/WeaponSkins/spore_gun.png b/CustomWeaponSkins/WeaponSkins/spore_gun.png new file mode 100644 index 0000000..e2ad160 Binary files /dev/null and b/CustomWeaponSkins/WeaponSkins/spore_gun.png differ diff --git a/CustomWeaponSkins/WeaponSkins/tesla_gun.png b/CustomWeaponSkins/WeaponSkins/tesla_gun.png new file mode 100644 index 0000000..81b5c44 Binary files /dev/null and b/CustomWeaponSkins/WeaponSkins/tesla_gun.png differ diff --git a/CustomWeaponSkins/WeaponSkins/toxic_axe.png b/CustomWeaponSkins/WeaponSkins/toxic_axe.png new file mode 100644 index 0000000..58a7349 Binary files /dev/null and b/CustomWeaponSkins/WeaponSkins/toxic_axe.png differ diff --git a/CustomWeaponSkins/WeaponSkins/udar.png b/CustomWeaponSkins/WeaponSkins/udar.png new file mode 100644 index 0000000..882e98d Binary files /dev/null and b/CustomWeaponSkins/WeaponSkins/udar.png differ diff --git a/CustomWeaponSkins/WeaponSkins/vector.png b/CustomWeaponSkins/WeaponSkins/vector.png new file mode 100644 index 0000000..cfa012e Binary files /dev/null and b/CustomWeaponSkins/WeaponSkins/vector.png differ diff --git a/CustomWeaponSkins/WeaponSkins/winko.png b/CustomWeaponSkins/WeaponSkins/winko.png new file mode 100644 index 0000000..7b71d2b Binary files /dev/null and b/CustomWeaponSkins/WeaponSkins/winko.png differ diff --git a/CustomWeaponSkins/WeaponSkins/wrench.png b/CustomWeaponSkins/WeaponSkins/wrench.png new file mode 100644 index 0000000..22761ab Binary files /dev/null and b/CustomWeaponSkins/WeaponSkins/wrench.png differ diff --git a/CustomWeaponSkins/bin/Debug/net6.0/Skopje.CustomWeaponSkins.deps.json b/CustomWeaponSkins/bin/Debug/net6.0/Skopje.CustomWeaponSkins.deps.json new file mode 100644 index 0000000..0993a6d --- /dev/null +++ b/CustomWeaponSkins/bin/Debug/net6.0/Skopje.CustomWeaponSkins.deps.json @@ -0,0 +1,23 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v6.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v6.0": { + "Skopje.CustomWeaponSkins/1.0.0": { + "runtime": { + "Skopje.CustomWeaponSkins.dll": {} + } + } + } + }, + "libraries": { + "Skopje.CustomWeaponSkins/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + } + } +} \ No newline at end of file diff --git a/CustomWeaponSkins/bin/Debug/net6.0/Skopje.CustomWeaponSkins.dll b/CustomWeaponSkins/bin/Debug/net6.0/Skopje.CustomWeaponSkins.dll new file mode 100644 index 0000000..192f049 Binary files /dev/null and b/CustomWeaponSkins/bin/Debug/net6.0/Skopje.CustomWeaponSkins.dll differ diff --git a/CustomWeaponSkins/bin/Debug/net6.0/Skopje.CustomWeaponSkins.pdb b/CustomWeaponSkins/bin/Debug/net6.0/Skopje.CustomWeaponSkins.pdb new file mode 100644 index 0000000..e8e9d73 Binary files /dev/null and b/CustomWeaponSkins/bin/Debug/net6.0/Skopje.CustomWeaponSkins.pdb differ diff --git a/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/bozdogun.png b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/bozdogun.png new file mode 100644 index 0000000..056cca6 Binary files /dev/null and b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/bozdogun.png differ diff --git a/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/electric_blade.png b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/electric_blade.png new file mode 100644 index 0000000..260a73e Binary files /dev/null and b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/electric_blade.png differ diff --git a/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/frag_grenade.png b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/frag_grenade.png new file mode 100644 index 0000000..f567f66 Binary files /dev/null and b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/frag_grenade.png differ diff --git a/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/grom.png b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/grom.png new file mode 100644 index 0000000..9a1839a Binary files /dev/null and b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/grom.png differ diff --git a/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/gruev_shotgun.png b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/gruev_shotgun.png new file mode 100644 index 0000000..52f2c2e Binary files /dev/null and b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/gruev_shotgun.png differ diff --git a/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/hammer.png b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/hammer.png new file mode 100644 index 0000000..2b8d6ce Binary files /dev/null and b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/hammer.png differ diff --git a/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/kalash.png b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/kalash.png new file mode 100644 index 0000000..94e9037 Binary files /dev/null and b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/kalash.png differ diff --git a/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/karab.png b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/karab.png new file mode 100644 index 0000000..b46d6ee Binary files /dev/null and b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/karab.png differ diff --git a/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/knife.png b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/knife.png new file mode 100644 index 0000000..e9ea50b Binary files /dev/null and b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/knife.png differ diff --git a/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/lmg_heavy.png b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/lmg_heavy.png new file mode 100644 index 0000000..ba862d2 Binary files /dev/null and b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/lmg_heavy.png differ diff --git a/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/lmg_medium.png b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/lmg_medium.png new file mode 100644 index 0000000..06a15ca Binary files /dev/null and b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/lmg_medium.png differ diff --git a/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/m143.png b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/m143.png new file mode 100644 index 0000000..e2041db Binary files /dev/null and b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/m143.png differ diff --git a/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/osa.png b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/osa.png new file mode 100644 index 0000000..f891862 Binary files /dev/null and b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/osa.png differ diff --git a/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/pupin.png b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/pupin.png new file mode 100644 index 0000000..ecba341 Binary files /dev/null and b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/pupin.png differ diff --git a/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/revolver.png b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/revolver.png new file mode 100644 index 0000000..48dde35 Binary files /dev/null and b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/revolver.png differ diff --git a/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/rusty_pipe.png b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/rusty_pipe.png new file mode 100644 index 0000000..f99b1aa Binary files /dev/null and b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/rusty_pipe.png differ diff --git a/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/skull.png b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/skull.png new file mode 100644 index 0000000..4c558e4 Binary files /dev/null and b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/skull.png differ diff --git a/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/snooper.png b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/snooper.png new file mode 100644 index 0000000..6d04a60 Binary files /dev/null and b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/snooper.png differ diff --git a/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/spore_gun.png b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/spore_gun.png new file mode 100644 index 0000000..e2ad160 Binary files /dev/null and b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/spore_gun.png differ diff --git a/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/tesla_gun.png b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/tesla_gun.png new file mode 100644 index 0000000..81b5c44 Binary files /dev/null and b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/tesla_gun.png differ diff --git a/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/toxic_axe.png b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/toxic_axe.png new file mode 100644 index 0000000..58a7349 Binary files /dev/null and b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/toxic_axe.png differ diff --git a/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/udar.png b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/udar.png new file mode 100644 index 0000000..882e98d Binary files /dev/null and b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/udar.png differ diff --git a/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/vector.png b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/vector.png new file mode 100644 index 0000000..cfa012e Binary files /dev/null and b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/vector.png differ diff --git a/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/winko.png b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/winko.png new file mode 100644 index 0000000..7b71d2b Binary files /dev/null and b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/winko.png differ diff --git a/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/wrench.png b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/wrench.png new file mode 100644 index 0000000..22761ab Binary files /dev/null and b/CustomWeaponSkins/bin/Debug/net6.0/WeaponSkins/wrench.png differ diff --git a/CustomWeaponSkins/bin/Release/net6.0/Skopje.CustomWeaponSkins.deps.json b/CustomWeaponSkins/bin/Release/net6.0/Skopje.CustomWeaponSkins.deps.json new file mode 100644 index 0000000..0993a6d --- /dev/null +++ b/CustomWeaponSkins/bin/Release/net6.0/Skopje.CustomWeaponSkins.deps.json @@ -0,0 +1,23 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v6.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v6.0": { + "Skopje.CustomWeaponSkins/1.0.0": { + "runtime": { + "Skopje.CustomWeaponSkins.dll": {} + } + } + } + }, + "libraries": { + "Skopje.CustomWeaponSkins/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + } + } +} \ No newline at end of file diff --git a/CustomWeaponSkins/bin/Release/net6.0/Skopje.CustomWeaponSkins.dll b/CustomWeaponSkins/bin/Release/net6.0/Skopje.CustomWeaponSkins.dll new file mode 100644 index 0000000..cfc55aa Binary files /dev/null and b/CustomWeaponSkins/bin/Release/net6.0/Skopje.CustomWeaponSkins.dll differ diff --git a/CustomWeaponSkins/bin/Release/net6.0/Skopje.CustomWeaponSkins.pdb b/CustomWeaponSkins/bin/Release/net6.0/Skopje.CustomWeaponSkins.pdb new file mode 100644 index 0000000..bab8c29 Binary files /dev/null and b/CustomWeaponSkins/bin/Release/net6.0/Skopje.CustomWeaponSkins.pdb differ diff --git a/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/bozdogun.png b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/bozdogun.png new file mode 100644 index 0000000..056cca6 Binary files /dev/null and b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/bozdogun.png differ diff --git a/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/electric_blade.png b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/electric_blade.png new file mode 100644 index 0000000..260a73e Binary files /dev/null and b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/electric_blade.png differ diff --git a/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/frag_grenade.png b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/frag_grenade.png new file mode 100644 index 0000000..f567f66 Binary files /dev/null and b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/frag_grenade.png differ diff --git a/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/grom.png b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/grom.png new file mode 100644 index 0000000..9a1839a Binary files /dev/null and b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/grom.png differ diff --git a/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/gruev_shotgun.png b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/gruev_shotgun.png new file mode 100644 index 0000000..52f2c2e Binary files /dev/null and b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/gruev_shotgun.png differ diff --git a/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/hammer.png b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/hammer.png new file mode 100644 index 0000000..2b8d6ce Binary files /dev/null and b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/hammer.png differ diff --git a/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/kalash.png b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/kalash.png new file mode 100644 index 0000000..94e9037 Binary files /dev/null and b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/kalash.png differ diff --git a/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/karab.png b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/karab.png new file mode 100644 index 0000000..b46d6ee Binary files /dev/null and b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/karab.png differ diff --git a/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/knife.png b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/knife.png new file mode 100644 index 0000000..e9ea50b Binary files /dev/null and b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/knife.png differ diff --git a/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/lmg_heavy.png b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/lmg_heavy.png new file mode 100644 index 0000000..ba862d2 Binary files /dev/null and b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/lmg_heavy.png differ diff --git a/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/lmg_medium.png b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/lmg_medium.png new file mode 100644 index 0000000..06a15ca Binary files /dev/null and b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/lmg_medium.png differ diff --git a/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/m143.png b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/m143.png new file mode 100644 index 0000000..e2041db Binary files /dev/null and b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/m143.png differ diff --git a/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/osa.png b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/osa.png new file mode 100644 index 0000000..f891862 Binary files /dev/null and b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/osa.png differ diff --git a/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/pupin.png b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/pupin.png new file mode 100644 index 0000000..ecba341 Binary files /dev/null and b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/pupin.png differ diff --git a/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/revolver.png b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/revolver.png new file mode 100644 index 0000000..48dde35 Binary files /dev/null and b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/revolver.png differ diff --git a/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/rusty_pipe.png b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/rusty_pipe.png new file mode 100644 index 0000000..f99b1aa Binary files /dev/null and b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/rusty_pipe.png differ diff --git a/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/skull.png b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/skull.png new file mode 100644 index 0000000..4c558e4 Binary files /dev/null and b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/skull.png differ diff --git a/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/snooper.png b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/snooper.png new file mode 100644 index 0000000..6d04a60 Binary files /dev/null and b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/snooper.png differ diff --git a/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/spore_gun.png b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/spore_gun.png new file mode 100644 index 0000000..e2ad160 Binary files /dev/null and b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/spore_gun.png differ diff --git a/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/tesla_gun.png b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/tesla_gun.png new file mode 100644 index 0000000..81b5c44 Binary files /dev/null and b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/tesla_gun.png differ diff --git a/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/toxic_axe.png b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/toxic_axe.png new file mode 100644 index 0000000..58a7349 Binary files /dev/null and b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/toxic_axe.png differ diff --git a/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/udar.png b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/udar.png new file mode 100644 index 0000000..882e98d Binary files /dev/null and b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/udar.png differ diff --git a/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/vector.png b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/vector.png new file mode 100644 index 0000000..cfa012e Binary files /dev/null and b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/vector.png differ diff --git a/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/winko.png b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/winko.png new file mode 100644 index 0000000..7b71d2b Binary files /dev/null and b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/winko.png differ diff --git a/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/wrench.png b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/wrench.png new file mode 100644 index 0000000..22761ab Binary files /dev/null and b/CustomWeaponSkins/bin/Release/net6.0/WeaponSkins/wrench.png differ diff --git a/CustomWeaponSkins/obj/CustomWeaponSkinsPlugin.csproj.nuget.dgspec.json b/CustomWeaponSkins/obj/CustomWeaponSkinsPlugin.csproj.nuget.dgspec.json new file mode 100644 index 0000000..0cdfded --- /dev/null +++ b/CustomWeaponSkins/obj/CustomWeaponSkinsPlugin.csproj.nuget.dgspec.json @@ -0,0 +1,85 @@ +{ + "format": 1, + "restore": { + "C:\\Users\\andre\\Desktop\\SkopjeMods\\CustomWeaponSkins\\CustomWeaponSkinsPlugin.csproj": {} + }, + "projects": { + "C:\\Users\\andre\\Desktop\\SkopjeMods\\CustomWeaponSkins\\CustomWeaponSkinsPlugin.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "C:\\Users\\andre\\Desktop\\SkopjeMods\\CustomWeaponSkins\\CustomWeaponSkinsPlugin.csproj", + "projectName": "Skopje.CustomWeaponSkins", + "projectPath": "C:\\Users\\andre\\Desktop\\SkopjeMods\\CustomWeaponSkins\\CustomWeaponSkinsPlugin.csproj", + "packagesPath": "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget", + "outputPath": "C:\\Users\\andre\\Desktop\\SkopjeMods\\CustomWeaponSkins\\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/CustomWeaponSkins/obj/CustomWeaponSkinsPlugin.csproj.nuget.g.props b/CustomWeaponSkins/obj/CustomWeaponSkinsPlugin.csproj.nuget.g.props new file mode 100644 index 0000000..ba0d2cb --- /dev/null +++ b/CustomWeaponSkins/obj/CustomWeaponSkinsPlugin.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/CustomWeaponSkins/obj/CustomWeaponSkinsPlugin.csproj.nuget.g.targets b/CustomWeaponSkins/obj/CustomWeaponSkinsPlugin.csproj.nuget.g.targets new file mode 100644 index 0000000..3dc06ef --- /dev/null +++ b/CustomWeaponSkins/obj/CustomWeaponSkinsPlugin.csproj.nuget.g.targets @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/CustomWeaponSkins/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs b/CustomWeaponSkins/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs new file mode 100644 index 0000000..ed92695 --- /dev/null +++ b/CustomWeaponSkins/obj/Debug/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/CustomWeaponSkins/obj/Debug/net6.0/CustomWeaponSkinsPlugin.AssemblyInfo.cs b/CustomWeaponSkins/obj/Debug/net6.0/CustomWeaponSkinsPlugin.AssemblyInfo.cs new file mode 100644 index 0000000..a442aab --- /dev/null +++ b/CustomWeaponSkins/obj/Debug/net6.0/CustomWeaponSkinsPlugin.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.CustomWeaponSkins")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+a740fec7c87ba4b24aefb7faf991fc5b69c71bd4")] +[assembly: System.Reflection.AssemblyProductAttribute("Skopje.CustomWeaponSkins")] +[assembly: System.Reflection.AssemblyTitleAttribute("Skopje.CustomWeaponSkins")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/CustomWeaponSkins/obj/Debug/net6.0/CustomWeaponSkinsPlugin.AssemblyInfoInputs.cache b/CustomWeaponSkins/obj/Debug/net6.0/CustomWeaponSkinsPlugin.AssemblyInfoInputs.cache new file mode 100644 index 0000000..3e4aad5 --- /dev/null +++ b/CustomWeaponSkins/obj/Debug/net6.0/CustomWeaponSkinsPlugin.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +36d09121cb5d4530ca12f414bbb23247c7af10858e54319c8200340c0c4ca350 diff --git a/CustomWeaponSkins/obj/Debug/net6.0/CustomWeaponSkinsPlugin.GeneratedMSBuildEditorConfig.editorconfig b/CustomWeaponSkins/obj/Debug/net6.0/CustomWeaponSkinsPlugin.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..af1d638 --- /dev/null +++ b/CustomWeaponSkins/obj/Debug/net6.0/CustomWeaponSkinsPlugin.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.CustomWeaponSkins +build_property.ProjectDir = C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.EffectiveAnalysisLevelStyle = 6.0 +build_property.EnableCodeStyleSeverity = diff --git a/CustomWeaponSkins/obj/Debug/net6.0/CustomWeaponSkinsPlugin.assets.cache b/CustomWeaponSkins/obj/Debug/net6.0/CustomWeaponSkinsPlugin.assets.cache new file mode 100644 index 0000000..c38bfbc Binary files /dev/null and b/CustomWeaponSkins/obj/Debug/net6.0/CustomWeaponSkinsPlugin.assets.cache differ diff --git a/CustomWeaponSkins/obj/Debug/net6.0/CustomWeaponSkinsPlugin.csproj.AssemblyReference.cache b/CustomWeaponSkins/obj/Debug/net6.0/CustomWeaponSkinsPlugin.csproj.AssemblyReference.cache new file mode 100644 index 0000000..937d1fa Binary files /dev/null and b/CustomWeaponSkins/obj/Debug/net6.0/CustomWeaponSkinsPlugin.csproj.AssemblyReference.cache differ diff --git a/CustomWeaponSkins/obj/Debug/net6.0/CustomWeaponSkinsPlugin.csproj.CoreCompileInputs.cache b/CustomWeaponSkins/obj/Debug/net6.0/CustomWeaponSkinsPlugin.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..d0c3311 --- /dev/null +++ b/CustomWeaponSkins/obj/Debug/net6.0/CustomWeaponSkinsPlugin.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +2597c2748074c64923e0e8f3f9bd2ff4d2ed7f89409f593f5c9a32a99831bb2c diff --git a/CustomWeaponSkins/obj/Debug/net6.0/CustomWeaponSkinsPlugin.csproj.FileListAbsolute.txt b/CustomWeaponSkins/obj/Debug/net6.0/CustomWeaponSkinsPlugin.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..65ea630 --- /dev/null +++ b/CustomWeaponSkins/obj/Debug/net6.0/CustomWeaponSkinsPlugin.csproj.FileListAbsolute.txt @@ -0,0 +1,37 @@ +C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Debug\net6.0\WeaponSkins\bozdogun.png +C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Debug\net6.0\WeaponSkins\electric_blade.png +C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Debug\net6.0\WeaponSkins\frag_grenade.png +C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Debug\net6.0\WeaponSkins\grom.png +C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Debug\net6.0\WeaponSkins\gruev_shotgun.png +C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Debug\net6.0\WeaponSkins\hammer.png +C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Debug\net6.0\WeaponSkins\kalash.png +C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Debug\net6.0\WeaponSkins\karab.png +C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Debug\net6.0\WeaponSkins\knife.png +C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Debug\net6.0\WeaponSkins\lmg_heavy.png +C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Debug\net6.0\WeaponSkins\lmg_medium.png +C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Debug\net6.0\WeaponSkins\m143.png +C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Debug\net6.0\WeaponSkins\osa.png +C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Debug\net6.0\WeaponSkins\pupin.png +C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Debug\net6.0\WeaponSkins\revolver.png +C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Debug\net6.0\WeaponSkins\rusty_pipe.png +C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Debug\net6.0\WeaponSkins\skull.png +C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Debug\net6.0\WeaponSkins\snooper.png +C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Debug\net6.0\WeaponSkins\spore_gun.png +C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Debug\net6.0\WeaponSkins\tesla_gun.png +C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Debug\net6.0\WeaponSkins\toxic_axe.png +C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Debug\net6.0\WeaponSkins\udar.png +C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Debug\net6.0\WeaponSkins\vector.png +C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Debug\net6.0\WeaponSkins\winko.png +C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Debug\net6.0\WeaponSkins\wrench.png +C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Debug\net6.0\Skopje.CustomWeaponSkins.deps.json +C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Debug\net6.0\Skopje.CustomWeaponSkins.dll +C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Debug\net6.0\Skopje.CustomWeaponSkins.pdb +C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\obj\Debug\net6.0\CustomWeaponSkinsPlugin.csproj.AssemblyReference.cache +C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\obj\Debug\net6.0\CustomWeaponSkinsPlugin.GeneratedMSBuildEditorConfig.editorconfig +C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\obj\Debug\net6.0\CustomWeaponSkinsPlugin.AssemblyInfoInputs.cache +C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\obj\Debug\net6.0\CustomWeaponSkinsPlugin.AssemblyInfo.cs +C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\obj\Debug\net6.0\CustomWeaponSkinsPlugin.csproj.CoreCompileInputs.cache +C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\obj\Debug\net6.0\Skopje.CustomWeaponSkins.dll +C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\obj\Debug\net6.0\refint\Skopje.CustomWeaponSkins.dll +C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\obj\Debug\net6.0\Skopje.CustomWeaponSkins.pdb +C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\obj\Debug\net6.0\ref\Skopje.CustomWeaponSkins.dll diff --git a/CustomWeaponSkins/obj/Debug/net6.0/Skopje.CustomWeaponSkins.dll b/CustomWeaponSkins/obj/Debug/net6.0/Skopje.CustomWeaponSkins.dll new file mode 100644 index 0000000..192f049 Binary files /dev/null and b/CustomWeaponSkins/obj/Debug/net6.0/Skopje.CustomWeaponSkins.dll differ diff --git a/CustomWeaponSkins/obj/Debug/net6.0/Skopje.CustomWeaponSkins.pdb b/CustomWeaponSkins/obj/Debug/net6.0/Skopje.CustomWeaponSkins.pdb new file mode 100644 index 0000000..e8e9d73 Binary files /dev/null and b/CustomWeaponSkins/obj/Debug/net6.0/Skopje.CustomWeaponSkins.pdb differ diff --git a/CustomWeaponSkins/obj/Debug/net6.0/ref/Skopje.CustomWeaponSkins.dll b/CustomWeaponSkins/obj/Debug/net6.0/ref/Skopje.CustomWeaponSkins.dll new file mode 100644 index 0000000..e7665f5 Binary files /dev/null and b/CustomWeaponSkins/obj/Debug/net6.0/ref/Skopje.CustomWeaponSkins.dll differ diff --git a/CustomWeaponSkins/obj/Debug/net6.0/refint/Skopje.CustomWeaponSkins.dll b/CustomWeaponSkins/obj/Debug/net6.0/refint/Skopje.CustomWeaponSkins.dll new file mode 100644 index 0000000..e7665f5 Binary files /dev/null and b/CustomWeaponSkins/obj/Debug/net6.0/refint/Skopje.CustomWeaponSkins.dll differ diff --git a/CustomWeaponSkins/obj/Release/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs b/CustomWeaponSkins/obj/Release/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs new file mode 100644 index 0000000..ed92695 --- /dev/null +++ b/CustomWeaponSkins/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/CustomWeaponSkins/obj/Release/net6.0/CustomWeaponSkinsPlugin.AssemblyInfo.cs b/CustomWeaponSkins/obj/Release/net6.0/CustomWeaponSkinsPlugin.AssemblyInfo.cs new file mode 100644 index 0000000..c40e655 --- /dev/null +++ b/CustomWeaponSkins/obj/Release/net6.0/CustomWeaponSkinsPlugin.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.CustomWeaponSkins")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+a740fec7c87ba4b24aefb7faf991fc5b69c71bd4")] +[assembly: System.Reflection.AssemblyProductAttribute("Skopje.CustomWeaponSkins")] +[assembly: System.Reflection.AssemblyTitleAttribute("Skopje.CustomWeaponSkins")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/CustomWeaponSkins/obj/Release/net6.0/CustomWeaponSkinsPlugin.AssemblyInfoInputs.cache b/CustomWeaponSkins/obj/Release/net6.0/CustomWeaponSkinsPlugin.AssemblyInfoInputs.cache new file mode 100644 index 0000000..423fdfb --- /dev/null +++ b/CustomWeaponSkins/obj/Release/net6.0/CustomWeaponSkinsPlugin.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +67165a1721f048ad8b212adf4d4bfc6d0299f48062ebb6fb27da30094ec6da77 diff --git a/CustomWeaponSkins/obj/Release/net6.0/CustomWeaponSkinsPlugin.GeneratedMSBuildEditorConfig.editorconfig b/CustomWeaponSkins/obj/Release/net6.0/CustomWeaponSkinsPlugin.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..af1d638 --- /dev/null +++ b/CustomWeaponSkins/obj/Release/net6.0/CustomWeaponSkinsPlugin.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.CustomWeaponSkins +build_property.ProjectDir = C:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.EffectiveAnalysisLevelStyle = 6.0 +build_property.EnableCodeStyleSeverity = diff --git a/CustomWeaponSkins/obj/Release/net6.0/CustomWeaponSkinsPlugin.assets.cache b/CustomWeaponSkins/obj/Release/net6.0/CustomWeaponSkinsPlugin.assets.cache new file mode 100644 index 0000000..de52d48 Binary files /dev/null and b/CustomWeaponSkins/obj/Release/net6.0/CustomWeaponSkinsPlugin.assets.cache differ diff --git a/CustomWeaponSkins/obj/Release/net6.0/CustomWeaponSkinsPlugin.csproj.AssemblyReference.cache b/CustomWeaponSkins/obj/Release/net6.0/CustomWeaponSkinsPlugin.csproj.AssemblyReference.cache new file mode 100644 index 0000000..937d1fa Binary files /dev/null and b/CustomWeaponSkins/obj/Release/net6.0/CustomWeaponSkinsPlugin.csproj.AssemblyReference.cache differ diff --git a/CustomWeaponSkins/obj/Release/net6.0/CustomWeaponSkinsPlugin.csproj.CoreCompileInputs.cache b/CustomWeaponSkins/obj/Release/net6.0/CustomWeaponSkinsPlugin.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..441a2b5 --- /dev/null +++ b/CustomWeaponSkins/obj/Release/net6.0/CustomWeaponSkinsPlugin.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +ccbfc66b74647d6236d0f639b01b5ecea4bd649173bfb2fc97ef009cc9fe67da diff --git a/CustomWeaponSkins/obj/Release/net6.0/CustomWeaponSkinsPlugin.csproj.FileListAbsolute.txt b/CustomWeaponSkins/obj/Release/net6.0/CustomWeaponSkinsPlugin.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..b497572 --- /dev/null +++ b/CustomWeaponSkins/obj/Release/net6.0/CustomWeaponSkinsPlugin.csproj.FileListAbsolute.txt @@ -0,0 +1,37 @@ +c:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Release\net6.0\Skopje.CustomWeaponSkins.deps.json +c:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Release\net6.0\Skopje.CustomWeaponSkins.dll +c:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Release\net6.0\Skopje.CustomWeaponSkins.pdb +c:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\obj\Release\net6.0\CustomWeaponSkinsPlugin.csproj.AssemblyReference.cache +c:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\obj\Release\net6.0\CustomWeaponSkinsPlugin.GeneratedMSBuildEditorConfig.editorconfig +c:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\obj\Release\net6.0\CustomWeaponSkinsPlugin.AssemblyInfoInputs.cache +c:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\obj\Release\net6.0\CustomWeaponSkinsPlugin.AssemblyInfo.cs +c:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\obj\Release\net6.0\CustomWeaponSkinsPlugin.csproj.CoreCompileInputs.cache +c:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\obj\Release\net6.0\Skopje.CustomWeaponSkins.dll +c:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\obj\Release\net6.0\refint\Skopje.CustomWeaponSkins.dll +c:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\obj\Release\net6.0\Skopje.CustomWeaponSkins.pdb +c:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\obj\Release\net6.0\ref\Skopje.CustomWeaponSkins.dll +c:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Release\net6.0\WeaponSkins\bozdogun.png +c:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Release\net6.0\WeaponSkins\electric_blade.png +c:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Release\net6.0\WeaponSkins\frag_grenade.png +c:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Release\net6.0\WeaponSkins\grom.png +c:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Release\net6.0\WeaponSkins\gruev_shotgun.png +c:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Release\net6.0\WeaponSkins\hammer.png +c:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Release\net6.0\WeaponSkins\kalash.png +c:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Release\net6.0\WeaponSkins\karab.png +c:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Release\net6.0\WeaponSkins\knife.png +c:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Release\net6.0\WeaponSkins\lmg_heavy.png +c:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Release\net6.0\WeaponSkins\lmg_medium.png +c:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Release\net6.0\WeaponSkins\m143.png +c:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Release\net6.0\WeaponSkins\osa.png +c:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Release\net6.0\WeaponSkins\pupin.png +c:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Release\net6.0\WeaponSkins\revolver.png +c:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Release\net6.0\WeaponSkins\rusty_pipe.png +c:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Release\net6.0\WeaponSkins\skull.png +c:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Release\net6.0\WeaponSkins\snooper.png +c:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Release\net6.0\WeaponSkins\spore_gun.png +c:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Release\net6.0\WeaponSkins\tesla_gun.png +c:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Release\net6.0\WeaponSkins\toxic_axe.png +c:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Release\net6.0\WeaponSkins\udar.png +c:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Release\net6.0\WeaponSkins\vector.png +c:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Release\net6.0\WeaponSkins\winko.png +c:\Users\andre\Desktop\SkopjeMods\CustomWeaponSkins\bin\Release\net6.0\WeaponSkins\wrench.png diff --git a/CustomWeaponSkins/obj/Release/net6.0/Skopje.CustomWeaponSkins.dll b/CustomWeaponSkins/obj/Release/net6.0/Skopje.CustomWeaponSkins.dll new file mode 100644 index 0000000..cfc55aa Binary files /dev/null and b/CustomWeaponSkins/obj/Release/net6.0/Skopje.CustomWeaponSkins.dll differ diff --git a/CustomWeaponSkins/obj/Release/net6.0/Skopje.CustomWeaponSkins.pdb b/CustomWeaponSkins/obj/Release/net6.0/Skopje.CustomWeaponSkins.pdb new file mode 100644 index 0000000..bab8c29 Binary files /dev/null and b/CustomWeaponSkins/obj/Release/net6.0/Skopje.CustomWeaponSkins.pdb differ diff --git a/CustomWeaponSkins/obj/Release/net6.0/ref/Skopje.CustomWeaponSkins.dll b/CustomWeaponSkins/obj/Release/net6.0/ref/Skopje.CustomWeaponSkins.dll new file mode 100644 index 0000000..40f16ea Binary files /dev/null and b/CustomWeaponSkins/obj/Release/net6.0/ref/Skopje.CustomWeaponSkins.dll differ diff --git a/CustomWeaponSkins/obj/Release/net6.0/refint/Skopje.CustomWeaponSkins.dll b/CustomWeaponSkins/obj/Release/net6.0/refint/Skopje.CustomWeaponSkins.dll new file mode 100644 index 0000000..40f16ea Binary files /dev/null and b/CustomWeaponSkins/obj/Release/net6.0/refint/Skopje.CustomWeaponSkins.dll differ diff --git a/CustomWeaponSkins/obj/project.assets.json b/CustomWeaponSkins/obj/project.assets.json new file mode 100644 index 0000000..3622915 --- /dev/null +++ b/CustomWeaponSkins/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\\CustomWeaponSkins\\CustomWeaponSkinsPlugin.csproj", + "projectName": "Skopje.CustomWeaponSkins", + "projectPath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\CustomWeaponSkins\\CustomWeaponSkinsPlugin.csproj", + "packagesPath": "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget", + "outputPath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\CustomWeaponSkins\\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/CustomWeaponSkins/obj/project.nuget.cache b/CustomWeaponSkins/obj/project.nuget.cache new file mode 100644 index 0000000..d6a97dc --- /dev/null +++ b/CustomWeaponSkins/obj/project.nuget.cache @@ -0,0 +1,12 @@ +{ + "version": 2, + "dgSpecHash": "bMZ2LTCPUqs=", + "success": true, + "projectFilePath": "C:\\Users\\andre\\Desktop\\SkopjeMods\\CustomWeaponSkins\\CustomWeaponSkinsPlugin.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 index cff397f..d65f817 100644 --- a/DamageNumbers/DamageNumbersPlugin.cs +++ b/DamageNumbers/DamageNumbersPlugin.cs @@ -217,8 +217,6 @@ namespace Skopje.DamageNumbers static PawnStatus LocalPawn() { - if (_localPlayer == null) - _localPlayer = FindLocalPlayer(); if (_localPlayer == null) return null; @@ -233,22 +231,6 @@ namespace Skopje.DamageNumbers } } - 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; diff --git a/DamageNumbers/bin/Debug/net6.0/Skopje.DamageNumbers.deps.json b/DamageNumbers/bin/Debug/net6.0/Skopje.DamageNumbers.deps.json new file mode 100644 index 0000000..bbb710d --- /dev/null +++ b/DamageNumbers/bin/Debug/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/Debug/net6.0/Skopje.DamageNumbers.dll b/DamageNumbers/bin/Debug/net6.0/Skopje.DamageNumbers.dll new file mode 100644 index 0000000..7900caf Binary files /dev/null and b/DamageNumbers/bin/Debug/net6.0/Skopje.DamageNumbers.dll differ diff --git a/DamageNumbers/bin/Debug/net6.0/Skopje.DamageNumbers.pdb b/DamageNumbers/bin/Debug/net6.0/Skopje.DamageNumbers.pdb new file mode 100644 index 0000000..cb1b1fc Binary files /dev/null and b/DamageNumbers/bin/Debug/net6.0/Skopje.DamageNumbers.pdb differ diff --git a/DamageNumbers/bin/Release/net6.0/Skopje.DamageNumbers.dll b/DamageNumbers/bin/Release/net6.0/Skopje.DamageNumbers.dll index 0613b1f..530c446 100644 Binary files a/DamageNumbers/bin/Release/net6.0/Skopje.DamageNumbers.dll 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 index 4fc0e7f..36df90f 100644 Binary files a/DamageNumbers/bin/Release/net6.0/Skopje.DamageNumbers.pdb 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 index c59d6b0..9e51e4d 100644 --- a/DamageNumbers/obj/DamageNumbersPlugin.csproj.nuget.dgspec.json +++ b/DamageNumbers/obj/DamageNumbersPlugin.csproj.nuget.dgspec.json @@ -1,17 +1,17 @@ { "format": 1, "restore": { - "c:\\Users\\andre\\Desktop\\SkopjeMods\\DamageNumbers\\DamageNumbersPlugin.csproj": {} + "C:\\Users\\andre\\Desktop\\SkopjeMods\\DamageNumbers\\DamageNumbersPlugin.csproj": {} }, "projects": { - "c:\\Users\\andre\\Desktop\\SkopjeMods\\DamageNumbers\\DamageNumbersPlugin.csproj": { + "C:\\Users\\andre\\Desktop\\SkopjeMods\\DamageNumbers\\DamageNumbersPlugin.csproj": { "version": "1.0.0", "restore": { - "projectUniqueName": "c:\\Users\\andre\\Desktop\\SkopjeMods\\DamageNumbers\\DamageNumbersPlugin.csproj", + "projectUniqueName": "C:\\Users\\andre\\Desktop\\SkopjeMods\\DamageNumbers\\DamageNumbersPlugin.csproj", "projectName": "Skopje.DamageNumbers", - "projectPath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\DamageNumbers\\DamageNumbersPlugin.csproj", + "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\\", + "outputPath": "C:\\Users\\andre\\Desktop\\SkopjeMods\\DamageNumbers\\obj\\", "projectStyle": "PackageReference", "configFilePaths": [ "C:\\Users\\andre\\AppData\\Roaming\\NuGet\\NuGet.Config", diff --git a/DamageNumbers/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs b/DamageNumbers/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs new file mode 100644 index 0000000..ed92695 --- /dev/null +++ b/DamageNumbers/obj/Debug/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/Debug/net6.0/DamageNumbersPlugin.AssemblyInfo.cs b/DamageNumbers/obj/Debug/net6.0/DamageNumbersPlugin.AssemblyInfo.cs new file mode 100644 index 0000000..778dcc1 --- /dev/null +++ b/DamageNumbers/obj/Debug/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("Debug")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+a740fec7c87ba4b24aefb7faf991fc5b69c71bd4")] +[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/Debug/net6.0/DamageNumbersPlugin.AssemblyInfoInputs.cache b/DamageNumbers/obj/Debug/net6.0/DamageNumbersPlugin.AssemblyInfoInputs.cache new file mode 100644 index 0000000..f69edfa --- /dev/null +++ b/DamageNumbers/obj/Debug/net6.0/DamageNumbersPlugin.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +d1377c0a15c63b93b7bc451ce6baa7570b37496c74c409c76e664392ba01a6d1 diff --git a/DamageNumbers/obj/Debug/net6.0/DamageNumbersPlugin.GeneratedMSBuildEditorConfig.editorconfig b/DamageNumbers/obj/Debug/net6.0/DamageNumbersPlugin.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..41b26e3 --- /dev/null +++ b/DamageNumbers/obj/Debug/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/Debug/net6.0/DamageNumbersPlugin.assets.cache b/DamageNumbers/obj/Debug/net6.0/DamageNumbersPlugin.assets.cache new file mode 100644 index 0000000..6f302d7 Binary files /dev/null and b/DamageNumbers/obj/Debug/net6.0/DamageNumbersPlugin.assets.cache differ diff --git a/DamageNumbers/obj/Debug/net6.0/DamageNumbersPlugin.csproj.AssemblyReference.cache b/DamageNumbers/obj/Debug/net6.0/DamageNumbersPlugin.csproj.AssemblyReference.cache new file mode 100644 index 0000000..e4d6795 Binary files /dev/null and b/DamageNumbers/obj/Debug/net6.0/DamageNumbersPlugin.csproj.AssemblyReference.cache differ diff --git a/DamageNumbers/obj/Debug/net6.0/DamageNumbersPlugin.csproj.CoreCompileInputs.cache b/DamageNumbers/obj/Debug/net6.0/DamageNumbersPlugin.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..0d57567 --- /dev/null +++ b/DamageNumbers/obj/Debug/net6.0/DamageNumbersPlugin.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +88b6e510c2a59219f618459aed60b40d0c70eb6c50fe5f43793a79e798b34894 diff --git a/DamageNumbers/obj/Debug/net6.0/DamageNumbersPlugin.csproj.FileListAbsolute.txt b/DamageNumbers/obj/Debug/net6.0/DamageNumbersPlugin.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..d1dfeca --- /dev/null +++ b/DamageNumbers/obj/Debug/net6.0/DamageNumbersPlugin.csproj.FileListAbsolute.txt @@ -0,0 +1,12 @@ +C:\Users\andre\Desktop\SkopjeMods\DamageNumbers\bin\Debug\net6.0\Skopje.DamageNumbers.deps.json +C:\Users\andre\Desktop\SkopjeMods\DamageNumbers\bin\Debug\net6.0\Skopje.DamageNumbers.dll +C:\Users\andre\Desktop\SkopjeMods\DamageNumbers\bin\Debug\net6.0\Skopje.DamageNumbers.pdb +C:\Users\andre\Desktop\SkopjeMods\DamageNumbers\obj\Debug\net6.0\DamageNumbersPlugin.csproj.AssemblyReference.cache +C:\Users\andre\Desktop\SkopjeMods\DamageNumbers\obj\Debug\net6.0\DamageNumbersPlugin.GeneratedMSBuildEditorConfig.editorconfig +C:\Users\andre\Desktop\SkopjeMods\DamageNumbers\obj\Debug\net6.0\DamageNumbersPlugin.AssemblyInfoInputs.cache +C:\Users\andre\Desktop\SkopjeMods\DamageNumbers\obj\Debug\net6.0\DamageNumbersPlugin.AssemblyInfo.cs +C:\Users\andre\Desktop\SkopjeMods\DamageNumbers\obj\Debug\net6.0\DamageNumbersPlugin.csproj.CoreCompileInputs.cache +C:\Users\andre\Desktop\SkopjeMods\DamageNumbers\obj\Debug\net6.0\Skopje.DamageNumbers.dll +C:\Users\andre\Desktop\SkopjeMods\DamageNumbers\obj\Debug\net6.0\refint\Skopje.DamageNumbers.dll +C:\Users\andre\Desktop\SkopjeMods\DamageNumbers\obj\Debug\net6.0\Skopje.DamageNumbers.pdb +C:\Users\andre\Desktop\SkopjeMods\DamageNumbers\obj\Debug\net6.0\ref\Skopje.DamageNumbers.dll diff --git a/DamageNumbers/obj/Debug/net6.0/Skopje.DamageNumbers.dll b/DamageNumbers/obj/Debug/net6.0/Skopje.DamageNumbers.dll new file mode 100644 index 0000000..7900caf Binary files /dev/null and b/DamageNumbers/obj/Debug/net6.0/Skopje.DamageNumbers.dll differ diff --git a/DamageNumbers/obj/Debug/net6.0/Skopje.DamageNumbers.pdb b/DamageNumbers/obj/Debug/net6.0/Skopje.DamageNumbers.pdb new file mode 100644 index 0000000..cb1b1fc Binary files /dev/null and b/DamageNumbers/obj/Debug/net6.0/Skopje.DamageNumbers.pdb differ diff --git a/DamageNumbers/obj/Debug/net6.0/ref/Skopje.DamageNumbers.dll b/DamageNumbers/obj/Debug/net6.0/ref/Skopje.DamageNumbers.dll new file mode 100644 index 0000000..015ef9d Binary files /dev/null and b/DamageNumbers/obj/Debug/net6.0/ref/Skopje.DamageNumbers.dll differ diff --git a/DamageNumbers/obj/Debug/net6.0/refint/Skopje.DamageNumbers.dll b/DamageNumbers/obj/Debug/net6.0/refint/Skopje.DamageNumbers.dll new file mode 100644 index 0000000..015ef9d Binary files /dev/null and b/DamageNumbers/obj/Debug/net6.0/refint/Skopje.DamageNumbers.dll differ diff --git a/DamageNumbers/obj/Release/net6.0/DamageNumbersPlugin.AssemblyInfo.cs b/DamageNumbers/obj/Release/net6.0/DamageNumbersPlugin.AssemblyInfo.cs index 32eb50d..36f1ec3 100644 --- a/DamageNumbers/obj/Release/net6.0/DamageNumbersPlugin.AssemblyInfo.cs +++ b/DamageNumbers/obj/Release/net6.0/DamageNumbersPlugin.AssemblyInfo.cs @@ -13,7 +13,7 @@ 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+9f4f8bf5235790c04718d7ca24b0f3f76e93b270")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+a740fec7c87ba4b24aefb7faf991fc5b69c71bd4")] [assembly: System.Reflection.AssemblyProductAttribute("Skopje.DamageNumbers")] [assembly: System.Reflection.AssemblyTitleAttribute("Skopje.DamageNumbers")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/DamageNumbers/obj/Release/net6.0/DamageNumbersPlugin.AssemblyInfoInputs.cache b/DamageNumbers/obj/Release/net6.0/DamageNumbersPlugin.AssemblyInfoInputs.cache index dbf7e50..ea97ff3 100644 --- a/DamageNumbers/obj/Release/net6.0/DamageNumbersPlugin.AssemblyInfoInputs.cache +++ b/DamageNumbers/obj/Release/net6.0/DamageNumbersPlugin.AssemblyInfoInputs.cache @@ -1 +1 @@ -dde6890729b61f58e466ea7b10c19cab8ad8b0c2df507a60a79c69f9ac5267e5 +e472e7edcd3316e41a101ccc49c7c28281e36b494b134499bea8ca52f6cbe388 diff --git a/DamageNumbers/obj/Release/net6.0/DamageNumbersPlugin.GeneratedMSBuildEditorConfig.editorconfig b/DamageNumbers/obj/Release/net6.0/DamageNumbersPlugin.GeneratedMSBuildEditorConfig.editorconfig index b6469cb..41b26e3 100644 --- a/DamageNumbers/obj/Release/net6.0/DamageNumbersPlugin.GeneratedMSBuildEditorConfig.editorconfig +++ b/DamageNumbers/obj/Release/net6.0/DamageNumbersPlugin.GeneratedMSBuildEditorConfig.editorconfig @@ -11,7 +11,7 @@ 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.ProjectDir = C:\Users\andre\Desktop\SkopjeMods\DamageNumbers\ build_property.EnableComHosting = build_property.EnableGeneratedComInterfaceComImportInterop = build_property.EffectiveAnalysisLevelStyle = 6.0 diff --git a/DamageNumbers/obj/Release/net6.0/DamageNumbersPlugin.assets.cache b/DamageNumbers/obj/Release/net6.0/DamageNumbersPlugin.assets.cache index ead7fdb..a7d2b26 100644 Binary files a/DamageNumbers/obj/Release/net6.0/DamageNumbersPlugin.assets.cache and b/DamageNumbers/obj/Release/net6.0/DamageNumbersPlugin.assets.cache differ diff --git a/DamageNumbers/obj/Release/net6.0/Skopje.DamageNumbers.dll b/DamageNumbers/obj/Release/net6.0/Skopje.DamageNumbers.dll index 0613b1f..530c446 100644 Binary files a/DamageNumbers/obj/Release/net6.0/Skopje.DamageNumbers.dll 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 index 4fc0e7f..36df90f 100644 Binary files a/DamageNumbers/obj/Release/net6.0/Skopje.DamageNumbers.pdb 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 index 850c2a1..823eef0 100644 Binary files a/DamageNumbers/obj/Release/net6.0/ref/Skopje.DamageNumbers.dll 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 index 850c2a1..823eef0 100644 Binary files a/DamageNumbers/obj/Release/net6.0/refint/Skopje.DamageNumbers.dll and b/DamageNumbers/obj/Release/net6.0/refint/Skopje.DamageNumbers.dll differ diff --git a/DamageNumbers/obj/project.nuget.cache b/DamageNumbers/obj/project.nuget.cache index 462d7d6..2aa924a 100644 --- a/DamageNumbers/obj/project.nuget.cache +++ b/DamageNumbers/obj/project.nuget.cache @@ -1,8 +1,8 @@ { "version": 2, - "dgSpecHash": "KG8aXDVuUAU=", + "dgSpecHash": "SPxp0mZY4HE=", "success": true, - "projectFilePath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\DamageNumbers\\DamageNumbersPlugin.csproj", + "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", diff --git a/DomRadio/DomRadioPlugin.cs b/DomRadio/DomRadioPlugin.cs index c07573c..93c4cf0 100644 --- a/DomRadio/DomRadioPlugin.cs +++ b/DomRadio/DomRadioPlugin.cs @@ -118,24 +118,7 @@ namespace Skopje.DomRadio internal static SkopjePlayer FindLocalPlayer() { - if (LocalPlayer != null) - return LocalPlayer; - - 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) - { - LocalPlayer = player; - return player; - } - } - - return null; + return LocalPlayer; } internal static float MusicLevel() diff --git a/DomRadio/bin/Debug/net6.0/Skopje.DomRadio.deps.json b/DomRadio/bin/Debug/net6.0/Skopje.DomRadio.deps.json new file mode 100644 index 0000000..f3df0bc --- /dev/null +++ b/DomRadio/bin/Debug/net6.0/Skopje.DomRadio.deps.json @@ -0,0 +1,23 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v6.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v6.0": { + "Skopje.DomRadio/1.0.0": { + "runtime": { + "Skopje.DomRadio.dll": {} + } + } + } + }, + "libraries": { + "Skopje.DomRadio/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + } + } +} \ No newline at end of file diff --git a/DomRadio/bin/Debug/net6.0/Skopje.DomRadio.dll b/DomRadio/bin/Debug/net6.0/Skopje.DomRadio.dll new file mode 100644 index 0000000..3ab9e03 Binary files /dev/null and b/DomRadio/bin/Debug/net6.0/Skopje.DomRadio.dll differ diff --git a/DomRadio/bin/Debug/net6.0/Skopje.DomRadio.pdb b/DomRadio/bin/Debug/net6.0/Skopje.DomRadio.pdb new file mode 100644 index 0000000..b037221 Binary files /dev/null and b/DomRadio/bin/Debug/net6.0/Skopje.DomRadio.pdb differ diff --git a/DomRadio/bin/Release/net6.0/Skopje.DomRadio.dll b/DomRadio/bin/Release/net6.0/Skopje.DomRadio.dll index 2a78d0f..85c181d 100644 Binary files a/DomRadio/bin/Release/net6.0/Skopje.DomRadio.dll and b/DomRadio/bin/Release/net6.0/Skopje.DomRadio.dll differ diff --git a/DomRadio/bin/Release/net6.0/Skopje.DomRadio.pdb b/DomRadio/bin/Release/net6.0/Skopje.DomRadio.pdb index 2089194..12129f7 100644 Binary files a/DomRadio/bin/Release/net6.0/Skopje.DomRadio.pdb and b/DomRadio/bin/Release/net6.0/Skopje.DomRadio.pdb differ diff --git a/DomRadio/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs b/DomRadio/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs new file mode 100644 index 0000000..ed92695 --- /dev/null +++ b/DomRadio/obj/Debug/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/DomRadio/obj/Debug/net6.0/DomRadioPlugin.AssemblyInfo.cs b/DomRadio/obj/Debug/net6.0/DomRadioPlugin.AssemblyInfo.cs new file mode 100644 index 0000000..6db49f2 --- /dev/null +++ b/DomRadio/obj/Debug/net6.0/DomRadioPlugin.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.DomRadio")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+a740fec7c87ba4b24aefb7faf991fc5b69c71bd4")] +[assembly: System.Reflection.AssemblyProductAttribute("Skopje.DomRadio")] +[assembly: System.Reflection.AssemblyTitleAttribute("Skopje.DomRadio")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/DomRadio/obj/Debug/net6.0/DomRadioPlugin.AssemblyInfoInputs.cache b/DomRadio/obj/Debug/net6.0/DomRadioPlugin.AssemblyInfoInputs.cache new file mode 100644 index 0000000..431bfe7 --- /dev/null +++ b/DomRadio/obj/Debug/net6.0/DomRadioPlugin.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +635eca68df81a3d057190628ca673e629437224a3235a2e59e73204ea21385d8 diff --git a/DomRadio/obj/Debug/net6.0/DomRadioPlugin.GeneratedMSBuildEditorConfig.editorconfig b/DomRadio/obj/Debug/net6.0/DomRadioPlugin.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..f74e8ed --- /dev/null +++ b/DomRadio/obj/Debug/net6.0/DomRadioPlugin.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.DomRadio +build_property.ProjectDir = C:\Users\andre\Desktop\SkopjeMods\DomRadio\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.EffectiveAnalysisLevelStyle = 6.0 +build_property.EnableCodeStyleSeverity = diff --git a/DomRadio/obj/Debug/net6.0/DomRadioPlugin.assets.cache b/DomRadio/obj/Debug/net6.0/DomRadioPlugin.assets.cache new file mode 100644 index 0000000..a0fe092 Binary files /dev/null and b/DomRadio/obj/Debug/net6.0/DomRadioPlugin.assets.cache differ diff --git a/DomRadio/obj/Debug/net6.0/DomRadioPlugin.csproj.AssemblyReference.cache b/DomRadio/obj/Debug/net6.0/DomRadioPlugin.csproj.AssemblyReference.cache new file mode 100644 index 0000000..7099058 Binary files /dev/null and b/DomRadio/obj/Debug/net6.0/DomRadioPlugin.csproj.AssemblyReference.cache differ diff --git a/DomRadio/obj/Debug/net6.0/DomRadioPlugin.csproj.CoreCompileInputs.cache b/DomRadio/obj/Debug/net6.0/DomRadioPlugin.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..b7b59c9 --- /dev/null +++ b/DomRadio/obj/Debug/net6.0/DomRadioPlugin.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +3de54ec46c98d14ee4fddb3eb4c92b51f10fd4a5be7031c8232b3d4f0f60b28d diff --git a/DomRadio/obj/Debug/net6.0/DomRadioPlugin.csproj.FileListAbsolute.txt b/DomRadio/obj/Debug/net6.0/DomRadioPlugin.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..8e0567a --- /dev/null +++ b/DomRadio/obj/Debug/net6.0/DomRadioPlugin.csproj.FileListAbsolute.txt @@ -0,0 +1,12 @@ +C:\Users\andre\Desktop\SkopjeMods\DomRadio\bin\Debug\net6.0\Skopje.DomRadio.deps.json +C:\Users\andre\Desktop\SkopjeMods\DomRadio\bin\Debug\net6.0\Skopje.DomRadio.dll +C:\Users\andre\Desktop\SkopjeMods\DomRadio\bin\Debug\net6.0\Skopje.DomRadio.pdb +C:\Users\andre\Desktop\SkopjeMods\DomRadio\obj\Debug\net6.0\DomRadioPlugin.csproj.AssemblyReference.cache +C:\Users\andre\Desktop\SkopjeMods\DomRadio\obj\Debug\net6.0\DomRadioPlugin.GeneratedMSBuildEditorConfig.editorconfig +C:\Users\andre\Desktop\SkopjeMods\DomRadio\obj\Debug\net6.0\DomRadioPlugin.AssemblyInfoInputs.cache +C:\Users\andre\Desktop\SkopjeMods\DomRadio\obj\Debug\net6.0\DomRadioPlugin.AssemblyInfo.cs +C:\Users\andre\Desktop\SkopjeMods\DomRadio\obj\Debug\net6.0\DomRadioPlugin.csproj.CoreCompileInputs.cache +C:\Users\andre\Desktop\SkopjeMods\DomRadio\obj\Debug\net6.0\Skopje.DomRadio.dll +C:\Users\andre\Desktop\SkopjeMods\DomRadio\obj\Debug\net6.0\refint\Skopje.DomRadio.dll +C:\Users\andre\Desktop\SkopjeMods\DomRadio\obj\Debug\net6.0\Skopje.DomRadio.pdb +C:\Users\andre\Desktop\SkopjeMods\DomRadio\obj\Debug\net6.0\ref\Skopje.DomRadio.dll diff --git a/DomRadio/obj/Debug/net6.0/Skopje.DomRadio.dll b/DomRadio/obj/Debug/net6.0/Skopje.DomRadio.dll new file mode 100644 index 0000000..3ab9e03 Binary files /dev/null and b/DomRadio/obj/Debug/net6.0/Skopje.DomRadio.dll differ diff --git a/DomRadio/obj/Debug/net6.0/Skopje.DomRadio.pdb b/DomRadio/obj/Debug/net6.0/Skopje.DomRadio.pdb new file mode 100644 index 0000000..b037221 Binary files /dev/null and b/DomRadio/obj/Debug/net6.0/Skopje.DomRadio.pdb differ diff --git a/DomRadio/obj/Debug/net6.0/ref/Skopje.DomRadio.dll b/DomRadio/obj/Debug/net6.0/ref/Skopje.DomRadio.dll new file mode 100644 index 0000000..08093cf Binary files /dev/null and b/DomRadio/obj/Debug/net6.0/ref/Skopje.DomRadio.dll differ diff --git a/DomRadio/obj/Debug/net6.0/refint/Skopje.DomRadio.dll b/DomRadio/obj/Debug/net6.0/refint/Skopje.DomRadio.dll new file mode 100644 index 0000000..08093cf Binary files /dev/null and b/DomRadio/obj/Debug/net6.0/refint/Skopje.DomRadio.dll differ diff --git a/DomRadio/obj/DomRadioPlugin.csproj.nuget.dgspec.json b/DomRadio/obj/DomRadioPlugin.csproj.nuget.dgspec.json index b9bb7ca..33d96ce 100644 --- a/DomRadio/obj/DomRadioPlugin.csproj.nuget.dgspec.json +++ b/DomRadio/obj/DomRadioPlugin.csproj.nuget.dgspec.json @@ -1,17 +1,17 @@ { "format": 1, "restore": { - "c:\\Users\\andre\\Desktop\\SkopjeMods\\DomRadio\\DomRadioPlugin.csproj": {} + "C:\\Users\\andre\\Desktop\\SkopjeMods\\DomRadio\\DomRadioPlugin.csproj": {} }, "projects": { - "c:\\Users\\andre\\Desktop\\SkopjeMods\\DomRadio\\DomRadioPlugin.csproj": { + "C:\\Users\\andre\\Desktop\\SkopjeMods\\DomRadio\\DomRadioPlugin.csproj": { "version": "1.0.0", "restore": { - "projectUniqueName": "c:\\Users\\andre\\Desktop\\SkopjeMods\\DomRadio\\DomRadioPlugin.csproj", + "projectUniqueName": "C:\\Users\\andre\\Desktop\\SkopjeMods\\DomRadio\\DomRadioPlugin.csproj", "projectName": "Skopje.DomRadio", - "projectPath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\DomRadio\\DomRadioPlugin.csproj", + "projectPath": "C:\\Users\\andre\\Desktop\\SkopjeMods\\DomRadio\\DomRadioPlugin.csproj", "packagesPath": "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget", - "outputPath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\DomRadio\\obj\\", + "outputPath": "C:\\Users\\andre\\Desktop\\SkopjeMods\\DomRadio\\obj\\", "projectStyle": "PackageReference", "configFilePaths": [ "C:\\Users\\andre\\AppData\\Roaming\\NuGet\\NuGet.Config", diff --git a/DomRadio/obj/Release/net6.0/DomRadioPlugin.AssemblyInfo.cs b/DomRadio/obj/Release/net6.0/DomRadioPlugin.AssemblyInfo.cs index dace733..b3e759b 100644 --- a/DomRadio/obj/Release/net6.0/DomRadioPlugin.AssemblyInfo.cs +++ b/DomRadio/obj/Release/net6.0/DomRadioPlugin.AssemblyInfo.cs @@ -13,7 +13,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("Skopje.DomRadio")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Release")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+9f4f8bf5235790c04718d7ca24b0f3f76e93b270")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+a740fec7c87ba4b24aefb7faf991fc5b69c71bd4")] [assembly: System.Reflection.AssemblyProductAttribute("Skopje.DomRadio")] [assembly: System.Reflection.AssemblyTitleAttribute("Skopje.DomRadio")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/DomRadio/obj/Release/net6.0/DomRadioPlugin.AssemblyInfoInputs.cache b/DomRadio/obj/Release/net6.0/DomRadioPlugin.AssemblyInfoInputs.cache index c598668..4e01382 100644 --- a/DomRadio/obj/Release/net6.0/DomRadioPlugin.AssemblyInfoInputs.cache +++ b/DomRadio/obj/Release/net6.0/DomRadioPlugin.AssemblyInfoInputs.cache @@ -1 +1 @@ -fb5aa0eaad5177616647c1fd58891f07eda98dfbaa1c7f1588f2c8bfe53d1402 +5379b0f52f7446c729de37af04aa43d34db9694c2efb197a427ad78ec0557a03 diff --git a/DomRadio/obj/Release/net6.0/DomRadioPlugin.GeneratedMSBuildEditorConfig.editorconfig b/DomRadio/obj/Release/net6.0/DomRadioPlugin.GeneratedMSBuildEditorConfig.editorconfig index 8389d14..f74e8ed 100644 --- a/DomRadio/obj/Release/net6.0/DomRadioPlugin.GeneratedMSBuildEditorConfig.editorconfig +++ b/DomRadio/obj/Release/net6.0/DomRadioPlugin.GeneratedMSBuildEditorConfig.editorconfig @@ -11,7 +11,7 @@ build_property.EnforceExtendedAnalyzerRules = build_property.EntryPointFilePath = build_property._SupportedPlatformList = Linux,macOS,Windows build_property.RootNamespace = Skopje.DomRadio -build_property.ProjectDir = c:\Users\andre\Desktop\SkopjeMods\DomRadio\ +build_property.ProjectDir = C:\Users\andre\Desktop\SkopjeMods\DomRadio\ build_property.EnableComHosting = build_property.EnableGeneratedComInterfaceComImportInterop = build_property.EffectiveAnalysisLevelStyle = 6.0 diff --git a/DomRadio/obj/Release/net6.0/DomRadioPlugin.assets.cache b/DomRadio/obj/Release/net6.0/DomRadioPlugin.assets.cache index ddab172..47c8422 100644 Binary files a/DomRadio/obj/Release/net6.0/DomRadioPlugin.assets.cache and b/DomRadio/obj/Release/net6.0/DomRadioPlugin.assets.cache differ diff --git a/DomRadio/obj/Release/net6.0/Skopje.DomRadio.dll b/DomRadio/obj/Release/net6.0/Skopje.DomRadio.dll index 2a78d0f..85c181d 100644 Binary files a/DomRadio/obj/Release/net6.0/Skopje.DomRadio.dll and b/DomRadio/obj/Release/net6.0/Skopje.DomRadio.dll differ diff --git a/DomRadio/obj/Release/net6.0/Skopje.DomRadio.pdb b/DomRadio/obj/Release/net6.0/Skopje.DomRadio.pdb index 2089194..12129f7 100644 Binary files a/DomRadio/obj/Release/net6.0/Skopje.DomRadio.pdb and b/DomRadio/obj/Release/net6.0/Skopje.DomRadio.pdb differ diff --git a/DomRadio/obj/Release/net6.0/ref/Skopje.DomRadio.dll b/DomRadio/obj/Release/net6.0/ref/Skopje.DomRadio.dll index 8f422b3..42c69f9 100644 Binary files a/DomRadio/obj/Release/net6.0/ref/Skopje.DomRadio.dll and b/DomRadio/obj/Release/net6.0/ref/Skopje.DomRadio.dll differ diff --git a/DomRadio/obj/Release/net6.0/refint/Skopje.DomRadio.dll b/DomRadio/obj/Release/net6.0/refint/Skopje.DomRadio.dll index 8f422b3..42c69f9 100644 Binary files a/DomRadio/obj/Release/net6.0/refint/Skopje.DomRadio.dll and b/DomRadio/obj/Release/net6.0/refint/Skopje.DomRadio.dll differ diff --git a/DomRadio/obj/project.nuget.cache b/DomRadio/obj/project.nuget.cache index 32c0ab8..641597e 100644 --- a/DomRadio/obj/project.nuget.cache +++ b/DomRadio/obj/project.nuget.cache @@ -1,8 +1,8 @@ { "version": 2, - "dgSpecHash": "3mbnNdPiqio=", + "dgSpecHash": "/nCubk+T0/o=", "success": true, - "projectFilePath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\DomRadio\\DomRadioPlugin.csproj", + "projectFilePath": "C:\\Users\\andre\\Desktop\\SkopjeMods\\DomRadio\\DomRadioPlugin.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", diff --git a/Minimap/MinimapPlugin.cs b/Minimap/MinimapPlugin.cs index 438cb0f..650b5ff 100644 --- a/Minimap/MinimapPlugin.cs +++ b/Minimap/MinimapPlugin.cs @@ -110,36 +110,7 @@ namespace Skopje.Minimap internal static SkopjePlayer FindLocalPlayer() { - if (LocalPlayer != null) - return LocalPlayer; - - var players = UnityEngine.Object.FindObjectsOfType(); - if (players == null) - return null; - - SkopjePlayer solo = null; - int count = 0; - for (int i = 0; i < players.Length; i++) - { - SkopjePlayer player = players[i]; - if (player == null) - continue; - count++; - solo = player; - if (player.IsOwner) - { - LocalPlayer = player; - return player; - } - } - - if (count == 1) - { - LocalPlayer = solo; - return solo; - } - - return null; + return LocalPlayer; } static Il2CppSystem.Action ToIl2Cpp(System.Action action) @@ -242,6 +213,13 @@ namespace Skopje.Minimap return; } + if (MinimapPlugin.LocalPlayer == null) + { + if (_root != null) + _root.gameObject.SetActive(false); + return; + } + float now = Time.unscaledTime; bool hudMissing = _hud == null || !_hud.gameObject.activeInHierarchy; if ((_time == null || hudMissing || _mapSprite == null || _bounds == null) && now >= _nextSearch) diff --git a/Minimap/bin/Debug/net6.0/Skopje.Minimap.deps.json b/Minimap/bin/Debug/net6.0/Skopje.Minimap.deps.json new file mode 100644 index 0000000..7f263df --- /dev/null +++ b/Minimap/bin/Debug/net6.0/Skopje.Minimap.deps.json @@ -0,0 +1,23 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v6.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v6.0": { + "Skopje.Minimap/1.0.0": { + "runtime": { + "Skopje.Minimap.dll": {} + } + } + } + }, + "libraries": { + "Skopje.Minimap/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + } + } +} \ No newline at end of file diff --git a/Minimap/bin/Debug/net6.0/Skopje.Minimap.dll b/Minimap/bin/Debug/net6.0/Skopje.Minimap.dll new file mode 100644 index 0000000..4768ebb Binary files /dev/null and b/Minimap/bin/Debug/net6.0/Skopje.Minimap.dll differ diff --git a/Minimap/bin/Debug/net6.0/Skopje.Minimap.pdb b/Minimap/bin/Debug/net6.0/Skopje.Minimap.pdb new file mode 100644 index 0000000..78c6acc Binary files /dev/null and b/Minimap/bin/Debug/net6.0/Skopje.Minimap.pdb differ diff --git a/Minimap/bin/Release/net6.0/Skopje.Minimap.dll b/Minimap/bin/Release/net6.0/Skopje.Minimap.dll index 6f37307..e1b8562 100644 Binary files a/Minimap/bin/Release/net6.0/Skopje.Minimap.dll and b/Minimap/bin/Release/net6.0/Skopje.Minimap.dll differ diff --git a/Minimap/bin/Release/net6.0/Skopje.Minimap.pdb b/Minimap/bin/Release/net6.0/Skopje.Minimap.pdb index 3ddc752..8b0a654 100644 Binary files a/Minimap/bin/Release/net6.0/Skopje.Minimap.pdb and b/Minimap/bin/Release/net6.0/Skopje.Minimap.pdb differ diff --git a/Minimap/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs b/Minimap/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs new file mode 100644 index 0000000..ed92695 --- /dev/null +++ b/Minimap/obj/Debug/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/Minimap/obj/Debug/net6.0/MinimapPlugin.AssemblyInfo.cs b/Minimap/obj/Debug/net6.0/MinimapPlugin.AssemblyInfo.cs new file mode 100644 index 0000000..a442424 --- /dev/null +++ b/Minimap/obj/Debug/net6.0/MinimapPlugin.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.Minimap")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+a740fec7c87ba4b24aefb7faf991fc5b69c71bd4")] +[assembly: System.Reflection.AssemblyProductAttribute("Skopje.Minimap")] +[assembly: System.Reflection.AssemblyTitleAttribute("Skopje.Minimap")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/Minimap/obj/Debug/net6.0/MinimapPlugin.AssemblyInfoInputs.cache b/Minimap/obj/Debug/net6.0/MinimapPlugin.AssemblyInfoInputs.cache new file mode 100644 index 0000000..8fdebf9 --- /dev/null +++ b/Minimap/obj/Debug/net6.0/MinimapPlugin.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +1a3826b3edac31083c738331354c0945067b0b26ba4e13a47b6d51e0c931fb5d diff --git a/Minimap/obj/Debug/net6.0/MinimapPlugin.GeneratedMSBuildEditorConfig.editorconfig b/Minimap/obj/Debug/net6.0/MinimapPlugin.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..8d60096 --- /dev/null +++ b/Minimap/obj/Debug/net6.0/MinimapPlugin.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.Minimap +build_property.ProjectDir = C:\Users\andre\Desktop\SkopjeMods\Minimap\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.EffectiveAnalysisLevelStyle = 6.0 +build_property.EnableCodeStyleSeverity = diff --git a/Minimap/obj/Debug/net6.0/MinimapPlugin.assets.cache b/Minimap/obj/Debug/net6.0/MinimapPlugin.assets.cache new file mode 100644 index 0000000..dc4c371 Binary files /dev/null and b/Minimap/obj/Debug/net6.0/MinimapPlugin.assets.cache differ diff --git a/Minimap/obj/Debug/net6.0/MinimapPlugin.csproj.AssemblyReference.cache b/Minimap/obj/Debug/net6.0/MinimapPlugin.csproj.AssemblyReference.cache new file mode 100644 index 0000000..3b62328 Binary files /dev/null and b/Minimap/obj/Debug/net6.0/MinimapPlugin.csproj.AssemblyReference.cache differ diff --git a/Minimap/obj/Debug/net6.0/MinimapPlugin.csproj.CoreCompileInputs.cache b/Minimap/obj/Debug/net6.0/MinimapPlugin.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..3260a92 --- /dev/null +++ b/Minimap/obj/Debug/net6.0/MinimapPlugin.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +87fc95a1f81af8c227cc6fa9bf1e249bfdd31961c02e4bbc825bbcdc214d5dc1 diff --git a/Minimap/obj/Debug/net6.0/MinimapPlugin.csproj.FileListAbsolute.txt b/Minimap/obj/Debug/net6.0/MinimapPlugin.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..76e2879 --- /dev/null +++ b/Minimap/obj/Debug/net6.0/MinimapPlugin.csproj.FileListAbsolute.txt @@ -0,0 +1,12 @@ +C:\Users\andre\Desktop\SkopjeMods\Minimap\bin\Debug\net6.0\Skopje.Minimap.deps.json +C:\Users\andre\Desktop\SkopjeMods\Minimap\bin\Debug\net6.0\Skopje.Minimap.dll +C:\Users\andre\Desktop\SkopjeMods\Minimap\bin\Debug\net6.0\Skopje.Minimap.pdb +C:\Users\andre\Desktop\SkopjeMods\Minimap\obj\Debug\net6.0\MinimapPlugin.csproj.AssemblyReference.cache +C:\Users\andre\Desktop\SkopjeMods\Minimap\obj\Debug\net6.0\MinimapPlugin.GeneratedMSBuildEditorConfig.editorconfig +C:\Users\andre\Desktop\SkopjeMods\Minimap\obj\Debug\net6.0\MinimapPlugin.AssemblyInfoInputs.cache +C:\Users\andre\Desktop\SkopjeMods\Minimap\obj\Debug\net6.0\MinimapPlugin.AssemblyInfo.cs +C:\Users\andre\Desktop\SkopjeMods\Minimap\obj\Debug\net6.0\MinimapPlugin.csproj.CoreCompileInputs.cache +C:\Users\andre\Desktop\SkopjeMods\Minimap\obj\Debug\net6.0\Skopje.Minimap.dll +C:\Users\andre\Desktop\SkopjeMods\Minimap\obj\Debug\net6.0\refint\Skopje.Minimap.dll +C:\Users\andre\Desktop\SkopjeMods\Minimap\obj\Debug\net6.0\Skopje.Minimap.pdb +C:\Users\andre\Desktop\SkopjeMods\Minimap\obj\Debug\net6.0\ref\Skopje.Minimap.dll diff --git a/Minimap/obj/Debug/net6.0/Skopje.Minimap.dll b/Minimap/obj/Debug/net6.0/Skopje.Minimap.dll new file mode 100644 index 0000000..4768ebb Binary files /dev/null and b/Minimap/obj/Debug/net6.0/Skopje.Minimap.dll differ diff --git a/Minimap/obj/Debug/net6.0/Skopje.Minimap.pdb b/Minimap/obj/Debug/net6.0/Skopje.Minimap.pdb new file mode 100644 index 0000000..78c6acc Binary files /dev/null and b/Minimap/obj/Debug/net6.0/Skopje.Minimap.pdb differ diff --git a/Minimap/obj/Debug/net6.0/ref/Skopje.Minimap.dll b/Minimap/obj/Debug/net6.0/ref/Skopje.Minimap.dll new file mode 100644 index 0000000..3939cda Binary files /dev/null and b/Minimap/obj/Debug/net6.0/ref/Skopje.Minimap.dll differ diff --git a/Minimap/obj/Debug/net6.0/refint/Skopje.Minimap.dll b/Minimap/obj/Debug/net6.0/refint/Skopje.Minimap.dll new file mode 100644 index 0000000..3939cda Binary files /dev/null and b/Minimap/obj/Debug/net6.0/refint/Skopje.Minimap.dll differ diff --git a/Minimap/obj/MinimapPlugin.csproj.nuget.dgspec.json b/Minimap/obj/MinimapPlugin.csproj.nuget.dgspec.json index 422958e..09d7818 100644 --- a/Minimap/obj/MinimapPlugin.csproj.nuget.dgspec.json +++ b/Minimap/obj/MinimapPlugin.csproj.nuget.dgspec.json @@ -1,17 +1,17 @@ { "format": 1, "restore": { - "c:\\Users\\andre\\Desktop\\SkopjeMods\\Minimap\\MinimapPlugin.csproj": {} + "C:\\Users\\andre\\Desktop\\SkopjeMods\\Minimap\\MinimapPlugin.csproj": {} }, "projects": { - "c:\\Users\\andre\\Desktop\\SkopjeMods\\Minimap\\MinimapPlugin.csproj": { + "C:\\Users\\andre\\Desktop\\SkopjeMods\\Minimap\\MinimapPlugin.csproj": { "version": "1.0.0", "restore": { - "projectUniqueName": "c:\\Users\\andre\\Desktop\\SkopjeMods\\Minimap\\MinimapPlugin.csproj", + "projectUniqueName": "C:\\Users\\andre\\Desktop\\SkopjeMods\\Minimap\\MinimapPlugin.csproj", "projectName": "Skopje.Minimap", - "projectPath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\Minimap\\MinimapPlugin.csproj", + "projectPath": "C:\\Users\\andre\\Desktop\\SkopjeMods\\Minimap\\MinimapPlugin.csproj", "packagesPath": "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget", - "outputPath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\Minimap\\obj\\", + "outputPath": "C:\\Users\\andre\\Desktop\\SkopjeMods\\Minimap\\obj\\", "projectStyle": "PackageReference", "configFilePaths": [ "C:\\Users\\andre\\AppData\\Roaming\\NuGet\\NuGet.Config", diff --git a/Minimap/obj/Release/net6.0/MinimapPlugin.AssemblyInfo.cs b/Minimap/obj/Release/net6.0/MinimapPlugin.AssemblyInfo.cs index 9674ae3..e5cadff 100644 --- a/Minimap/obj/Release/net6.0/MinimapPlugin.AssemblyInfo.cs +++ b/Minimap/obj/Release/net6.0/MinimapPlugin.AssemblyInfo.cs @@ -13,7 +13,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("Skopje.Minimap")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Release")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+9f4f8bf5235790c04718d7ca24b0f3f76e93b270")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+a740fec7c87ba4b24aefb7faf991fc5b69c71bd4")] [assembly: System.Reflection.AssemblyProductAttribute("Skopje.Minimap")] [assembly: System.Reflection.AssemblyTitleAttribute("Skopje.Minimap")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/Minimap/obj/Release/net6.0/MinimapPlugin.AssemblyInfoInputs.cache b/Minimap/obj/Release/net6.0/MinimapPlugin.AssemblyInfoInputs.cache index 9401367..dbcc491 100644 --- a/Minimap/obj/Release/net6.0/MinimapPlugin.AssemblyInfoInputs.cache +++ b/Minimap/obj/Release/net6.0/MinimapPlugin.AssemblyInfoInputs.cache @@ -1 +1 @@ -76a35bd1005e7595549b8f53ede6d7fe291948c74a3299c2ccd64bca53d35f29 +194a92a10a00112e22368e5636cd730ed66a5f0bff0b215eb552db8471ba8527 diff --git a/Minimap/obj/Release/net6.0/MinimapPlugin.GeneratedMSBuildEditorConfig.editorconfig b/Minimap/obj/Release/net6.0/MinimapPlugin.GeneratedMSBuildEditorConfig.editorconfig index 7a29a74..8d60096 100644 --- a/Minimap/obj/Release/net6.0/MinimapPlugin.GeneratedMSBuildEditorConfig.editorconfig +++ b/Minimap/obj/Release/net6.0/MinimapPlugin.GeneratedMSBuildEditorConfig.editorconfig @@ -11,7 +11,7 @@ build_property.EnforceExtendedAnalyzerRules = build_property.EntryPointFilePath = build_property._SupportedPlatformList = Linux,macOS,Windows build_property.RootNamespace = Skopje.Minimap -build_property.ProjectDir = c:\Users\andre\Desktop\SkopjeMods\Minimap\ +build_property.ProjectDir = C:\Users\andre\Desktop\SkopjeMods\Minimap\ build_property.EnableComHosting = build_property.EnableGeneratedComInterfaceComImportInterop = build_property.EffectiveAnalysisLevelStyle = 6.0 diff --git a/Minimap/obj/Release/net6.0/MinimapPlugin.assets.cache b/Minimap/obj/Release/net6.0/MinimapPlugin.assets.cache index fa32f5d..58daab6 100644 Binary files a/Minimap/obj/Release/net6.0/MinimapPlugin.assets.cache and b/Minimap/obj/Release/net6.0/MinimapPlugin.assets.cache differ diff --git a/Minimap/obj/Release/net6.0/Skopje.Minimap.dll b/Minimap/obj/Release/net6.0/Skopje.Minimap.dll index 6f37307..e1b8562 100644 Binary files a/Minimap/obj/Release/net6.0/Skopje.Minimap.dll and b/Minimap/obj/Release/net6.0/Skopje.Minimap.dll differ diff --git a/Minimap/obj/Release/net6.0/Skopje.Minimap.pdb b/Minimap/obj/Release/net6.0/Skopje.Minimap.pdb index 3ddc752..8b0a654 100644 Binary files a/Minimap/obj/Release/net6.0/Skopje.Minimap.pdb and b/Minimap/obj/Release/net6.0/Skopje.Minimap.pdb differ diff --git a/Minimap/obj/Release/net6.0/ref/Skopje.Minimap.dll b/Minimap/obj/Release/net6.0/ref/Skopje.Minimap.dll index aa6b76c..7bb9d91 100644 Binary files a/Minimap/obj/Release/net6.0/ref/Skopje.Minimap.dll and b/Minimap/obj/Release/net6.0/ref/Skopje.Minimap.dll differ diff --git a/Minimap/obj/Release/net6.0/refint/Skopje.Minimap.dll b/Minimap/obj/Release/net6.0/refint/Skopje.Minimap.dll index aa6b76c..7bb9d91 100644 Binary files a/Minimap/obj/Release/net6.0/refint/Skopje.Minimap.dll and b/Minimap/obj/Release/net6.0/refint/Skopje.Minimap.dll differ diff --git a/Minimap/obj/project.nuget.cache b/Minimap/obj/project.nuget.cache index c3789b8..7a55907 100644 --- a/Minimap/obj/project.nuget.cache +++ b/Minimap/obj/project.nuget.cache @@ -1,8 +1,8 @@ { "version": 2, - "dgSpecHash": "fEqRFu6N7Gw=", + "dgSpecHash": "nKRZ6cutJ3g=", "success": true, - "projectFilePath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\Minimap\\MinimapPlugin.csproj", + "projectFilePath": "C:\\Users\\andre\\Desktop\\SkopjeMods\\Minimap\\MinimapPlugin.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", diff --git a/PeePeeMod/PeePeeMod.csproj b/PeePeeMod/PeePeeMod.csproj new file mode 100644 index 0000000..3e550bf --- /dev/null +++ b/PeePeeMod/PeePeeMod.csproj @@ -0,0 +1,64 @@ + + + net6.0 + latest + disable + disable + true + PeePeeMod + PeePeeMod + 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\Archon.SwissArmyLib.dll + false + + + $(GameDir)\BepInEx\interop\Il2CppSystem.Core.dll + false + + + $(GameDir)\BepInEx\interop\UnityEngine.CoreModule.dll + false + + + $(GameDir)\BepInEx\interop\UnityEngine.PhysicsModule.dll + false + + + $(GameDir)\BepInEx\interop\UnityEngine.InputLegacyModule.dll + false + + + diff --git a/PeePeeMod/PeePeePlugin.cs b/PeePeeMod/PeePeePlugin.cs new file mode 100644 index 0000000..f1dcbb7 --- /dev/null +++ b/PeePeeMod/PeePeePlugin.cs @@ -0,0 +1,580 @@ +using System; +using System.Collections.Generic; +using BepInEx; +using BepInEx.Configuration; +using BepInEx.Logging; +using BepInEx.Unity.IL2CPP; +using FishNet; +using FishNet.Connection; +using FishNet.Managing.Client; +using FishNet.Managing.Server; +using FishNet.Object; +using FishNet.Serializing; +using FishNet.Transporting; +using HarmonyLib; +using Il2CppInterop.Runtime; +using Il2CppInterop.Runtime.Injection; +using Skopje.Modding; +using UnityEngine; + +namespace PeePeeMod +{ + [BepInPlugin(PluginGuid, PluginName, PluginVersion)] + public class PeePeePlugin : BasePlugin + { + public const string PluginGuid = "com.skopje.peepeemod"; + public const string PluginName = "PeePeeMod"; + public const string PluginVersion = "1.0.0"; + + internal static ManualLogSource LogSource; + internal static ConfigEntry Enabled; + internal static ConfigEntry Key; + internal static ConfigEntry Toggle; + + internal static GameObject Host; + + static Harmony _harmony; + static SkopjePlayer _local; + static bool _pissing; + static bool _latched; + static float _nextSend; + static int _errors; + static bool _loggedInput; + + 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("Pee", "Enabled", true, "Hold the key to piss. Everyone in the session sees the stream."); + Key = Config.Bind("Pee", "Key", KeyCode.P, "Button that starts pissing."); + Toggle = Config.Bind("Pee", "Toggle", false, "Press once to start and again to stop. Off means hold the key, like Postal."); + + ClassInjector.RegisterTypeInIl2Cpp(); + + _onClientStarted = DelegateSupport.ConvertDelegate(new Action(OnClientStarted)); + _onClientStopped = DelegateSupport.ConvertDelegate(new Action(OnClientStopped)); + _onPlayerStarted = DelegateSupport.ConvertDelegate>(new Action(OnPlayerStarted)); + _onPlayerStopped = DelegateSupport.ConvertDelegate>(new Action(OnPlayerStopped)); + _onGameOver = DelegateSupport.ConvertDelegate(new 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(ServerManager), "ParseBroadcast"), nameof(PeeNet.BeforeServerBroadcast)); + Patch(AccessTools.Method(typeof(ClientManager), "ParseBroadcast"), nameof(PeeNet.BeforeClientBroadcast)); + + Host = new GameObject("PeePeeMod"); + UnityEngine.Object.DontDestroyOnLoad(Host); + Host.hideFlags = HideFlags.HideAndDontSave; + Host.AddComponent(); + + LogSource.LogInfo($"{PluginName} {PluginVersion} loaded. Hold {Key.Value} to piss. The stream is a server RPC relayed to every client."); + } + + public override bool Unload() + { + _pissing = false; + _latched = false; + _local = null; + if (_harmony != null) + _harmony.UnpatchSelf(); + if (_onClientStarted != null) + ModAPI.remove_OnClientStarted(_onClientStarted); + if (_onClientStopped != null) + ModAPI.remove_OnClientStopped(_onClientStopped); + if (_onPlayerStarted != null) + ModAPI.remove_OnPlayerStartedClient(_onPlayerStarted); + if (_onPlayerStopped != null) + ModAPI.remove_OnPlayerStoppedClient(_onPlayerStopped); + if (_onGameOver != null) + ModAPI.remove_OnGameOver(_onGameOver); + PeeVisual.Clear(); + PeePlayers.Clear(); + if (Host != null) + { + UnityEngine.Object.Destroy(Host); + Host = null; + } + + return true; + } + + static void Patch(System.Reflection.MethodInfo method, string prefix) + { + if (method == null) + { + LogSource.LogWarning("Pee RPC hook was not found: " + prefix); + return; + } + + _harmony.Patch(method, prefix: new HarmonyMethod(typeof(PeeNet), prefix)); + } + + internal static void Fail(Exception ex) + { + if (_errors >= 8 || LogSource == null) + return; + _errors++; + LogSource.LogError("PeePeeMod failed: " + ex.Message); + } + + internal static void Tick() + { + SkopjePlayer player = FindLocal(); + bool want = WantPee(player); + Vector3 aim = player != null ? PeeVisual.AimOf(player) : Vector3.forward; + + if (want != _pissing) + { + _pissing = want; + _nextSend = Time.unscaledTime + 0.12f; + if (want && player != null) + PeeVisual.ShowLocal(player, aim); + else if (player != null) + PeeVisual.Hide(player.ObjectId); + if (player != null) + PeeNet.ServerRpc(player, want, aim, true); + } + else if (want && player != null) + { + PeeVisual.ShowLocal(player, aim); + if (Time.unscaledTime >= _nextSend) + { + _nextSend = Time.unscaledTime + 0.12f; + PeeNet.ServerRpc(player, true, aim, false); + } + } + + PeeVisual.Tick(); + } + + static bool WantPee(SkopjePlayer player) + { + if (Enabled == null || !Enabled.Value || player == null || !CanPee(player)) + { + _latched = false; + return false; + } + + KeyCode key = Key != null ? Key.Value : KeyCode.None; + if (Toggle != null && Toggle.Value) + { + if (Pressed(key)) + _latched = !_latched; + return _latched; + } + + return Held(key); + } + + static bool CanPee(SkopjePlayer player) + { + if (player.IsDead || player.IsFallen || player.IsSpectating || player.IsPaused || player.InInventory) + return false; + if (player.InsideVehicle != null) + return false; + return player.NetworkObject != null && player.NetworkObject.IsSpawned; + } + + static SkopjePlayer FindLocal() + { + return _local; + } + + static void OnClientStarted() + { + _pissing = false; + _latched = false; + } + + static void OnClientStopped() + { + _pissing = false; + _latched = false; + _local = null; + PeeVisual.Clear(); + PeePlayers.Clear(); + } + + static void OnPlayerStarted(SkopjePlayer player) + { + if (player != null && player.IsOwner) + _local = player; + PeePlayers.Remember(player); + } + + static void OnPlayerStopped(SkopjePlayer player) + { + if (player != null) + { + PeeVisual.Hide(player.ObjectId); + PeeVisual.Forget(player.ObjectId); + } + PeePlayers.Forget(player); + if (_local == player) + { + _local = null; + _pissing = false; + _latched = false; + } + } + + static void OnGameOver() + { + _pissing = false; + _latched = false; + PeeVisual.Clear(); + } + + static bool Pressed(KeyCode key) + { + if (key == KeyCode.None) + return false; + try + { + return Input.GetKeyDown(key); + } + catch (Exception ex) + { + if (!_loggedInput) + { + _loggedInput = true; + LogSource.LogWarning("Keyboard input is unavailable: " + ex.Message); + } + + return false; + } + } + + static bool Held(KeyCode key) + { + if (key == KeyCode.None) + return false; + try + { + return Input.GetKey(key); + } + catch (Exception ex) + { + if (!_loggedInput) + { + _loggedInput = true; + LogSource.LogWarning("Keyboard input is unavailable: " + ex.Message); + } + + return false; + } + } + } + + public class PeeDriver : MonoBehaviour + { + void Update() + { + try + { + PeePeePlugin.Tick(); + } + catch (Exception ex) + { + PeePeePlugin.Fail(ex); + } + } + } + + static class PeePlayers + { + static readonly Dictionary _players = new Dictionary(); + + public static void Remember(SkopjePlayer player) + { + if (player == null) + return; + try + { + if (player.NetworkObject == null) + return; + _players[player.ObjectId] = player; + } + catch (Exception) + { + } + } + + public static void Forget(SkopjePlayer player) + { + if (player == null) + return; + _players.Remove(player.ObjectId); + } + + public static void Clear() + { + _players.Clear(); + } + + public static SkopjePlayer Find(int objectId) + { + SkopjePlayer player; + if (_players.TryGetValue(objectId, out player)) + return player; + return null; + } + } + + static class PeeNet + { + const byte Magic = 0xA7; + static readonly ushort Key = Hash("Skopje.PeePeeMod.PeeBroadcast"); + + static ushort _seq = 1; + static readonly Dictionary _relayAt = new Dictionary(); + static bool _loggedRelay; + static bool _loggedSeen; + + public static void ServerRpc(SkopjePlayer player, bool active, Vector3 aim, bool reliable) + { + if (player == null || player.NetworkObject == null || !player.NetworkObject.IsSpawned) + return; + if (!InstanceFinder.IsClientStarted) + return; + + if (aim.sqrMagnitude < 0.0001f) + aim = Vector3.forward; + else + aim.Normalize(); + + ushort seq = _seq++; + if (_seq == 0) + _seq = 1; + + Send(true, reliable ? Channel.Reliable : Channel.Unreliable, player.ObjectId, active, aim, seq); + } + + public static bool BeforeServerBroadcast(PooledReader reader, NetworkConnection conn, Channel channel) + { + int start = reader != null ? reader.Position : 0; + int end; + int objectId; + bool active; + Vector3 aim; + ushort seq; + if (!TryRead(reader, start, out end, out objectId, out active, out aim, out seq)) + return true; + + try + { + Relay(conn, channel, objectId, active, aim, seq); + } + catch (Exception ex) + { + PeePeePlugin.Fail(ex); + } + + return false; + } + + public static bool BeforeClientBroadcast(PooledReader reader, Channel channel) + { + int start = reader != null ? reader.Position : 0; + int end; + int objectId; + bool active; + Vector3 aim; + ushort seq; + if (!TryRead(reader, start, out end, out objectId, out active, out aim, out seq)) + return true; + + try + { + ObserversRpc(objectId, active, aim, seq); + } + catch (Exception ex) + { + PeePeePlugin.Fail(ex); + } + + return false; + } + + static void Relay(NetworkConnection conn, Channel channel, int objectId, bool active, Vector3 aim, ushort seq) + { + if (conn == null || !conn.IsAuthenticated || !InstanceFinder.IsServerStarted) + return; + + SkopjePlayer player = PeePlayers.Find(objectId); + if (player == null || !Owns(player, conn)) + return; + if (active && !Allow(conn.ClientId)) + return; + + if (!_loggedRelay && PeePeePlugin.LogSource != null) + { + _loggedRelay = true; + PeePeePlugin.LogSource.LogInfo("Pee server RPC accepted. Relaying to observers."); + } + + Send(false, channel, objectId, active, aim, seq); + } + + static void ObserversRpc(int objectId, bool active, Vector3 aim, ushort seq) + { + SkopjePlayer player = PeePlayers.Find(objectId); + if (player == null || player.IsOwner) + return; + if (!PeeVisual.Accept(objectId, seq)) + return; + + if (!_loggedSeen && PeePeePlugin.LogSource != null) + { + _loggedSeen = true; + PeePeePlugin.LogSource.LogInfo("Pee observers RPC received."); + } + + if (active) + PeeVisual.ShowRemote(player, aim); + else + PeeVisual.Hide(objectId); + } + + static bool Owns(SkopjePlayer player, NetworkConnection conn) + { + if (player.Owner == conn) + return true; + return player.OwnerId == conn.ClientId; + } + + static bool Allow(int clientId) + { + float now = Time.unscaledTime; + float last; + if (_relayAt.TryGetValue(clientId, out last) && now - last < 0.05f) + return false; + _relayAt[clientId] = now; + return true; + } + + static void Send(bool toServer, Channel channel, int objectId, bool active, Vector3 aim, ushort seq) + { + var manager = InstanceFinder.NetworkManager; + if (manager == null || manager.TransportManager == null) + return; + if (toServer && !InstanceFinder.IsClientStarted) + return; + if (!toServer && !InstanceFinder.IsServerStarted) + return; + + PooledWriter data = WriterPool.Retrieve(); + PooledWriter writer = WriterPool.Retrieve(); + try + { + data.WriteByte(Magic); + data.WriteInt32(objectId); + data.WriteBoolean(active); + data.WriteUInt16(seq); + data.WriteSingle(aim.x); + data.WriteSingle(aim.y); + data.WriteSingle(aim.z); + + writer.WriteUInt16((ushort)PacketId.Broadcast); + writer.WriteUInt16(Key); + writer.WriteInt32(data.Length); + writer.WriteArraySegment(data.GetArraySegment()); + + var segment = writer.GetArraySegment(); + if (toServer) + manager.TransportManager.SendToServer((byte)channel, segment, true, DataOrderType.Default); + else + manager.TransportManager.SendToClients((byte)channel, segment, true); + } + finally + { + WriterPool.Store(data); + WriterPool.Store(writer); + } + } + + static bool TryRead(PooledReader reader, int start, out int end, out int objectId, out bool active, out Vector3 aim, out ushort seq) + { + end = start; + objectId = 0; + active = false; + aim = Vector3.forward; + seq = 0; + if (reader == null) + return false; + + try + { + if (reader.Remaining < 2) + return false; + + ushort key = reader.ReadUInt16(); + if (key != Key) + { + reader.Position = start; + return false; + } + + int length = reader.ReadInt32(); + int payload = reader.Position; + if (length < 1 || length > 128 || reader.Remaining < length) + { + reader.Position = start; + return false; + } + + end = payload + length; + if (reader.ReadByte() != Magic) + { + reader.Position = start; + return false; + } + + objectId = reader.ReadInt32(); + active = reader.ReadBoolean(); + seq = reader.ReadUInt16(); + aim = new Vector3(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle()); + reader.Position = end; + return true; + } + catch (Exception ex) + { + PeePeePlugin.Fail(ex); + try + { + reader.Position = start; + } + catch (Exception) + { + } + + return false; + } + } + + static ushort Hash(string text) + { + unchecked + { + uint hash = 2166136261; + for (int i = 0; i < text.Length; i++) + { + hash *= 16777619; + hash ^= text[i]; + } + + return (ushort)((hash >> 16) ^ hash); + } + } + } +} diff --git a/PeePeeMod/PeeVisual.cs b/PeePeeMod/PeeVisual.cs new file mode 100644 index 0000000..646b029 --- /dev/null +++ b/PeePeeMod/PeeVisual.cs @@ -0,0 +1,546 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Rendering; + +namespace PeePeeMod +{ + static class PeeVisual + { + const int Steps = 20; + const int Droplets = 10; + const float StepTime = 0.04f; + const float Speed = 7.5f; + const float SplatterLife = 0.25f; + static readonly Color PeeColor = new Color(1f, 0.92f, 0.05f, 1f); + + static readonly Dictionary _streams = new Dictionary(); + static readonly Dictionary _seq = new Dictionary(); + static readonly List _puddles = new List(); + static readonly List _dropIds = new List(); + static readonly Vector3[] _points = new Vector3[Steps]; + + static Mesh _sphere; + static Mesh _cube; + static Material _material; + static MaterialPropertyBlock _block; + + sealed class Stream + { + public int Id; + public SkopjePlayer Player; + public bool Local; + public Vector3 Aim; + public float Heard; + public Transform Hips; + public bool SearchedHips; + public GameObject Root; + public LineRenderer Line; + public Transform[] Drops; + public float[] Seeds; + } + + sealed class Puddle + { + public GameObject Object; + public float Born; + public Vector3 Scale; + } + + public static Vector3 AimOf(SkopjePlayer player) + { + if (player != null && player.IsOwner && player.SkopjeFPSCamera != null && player.SkopjeFPSCamera.mainCamera != null) + return player.SkopjeFPSCamera.mainCamera.transform.forward; + if (player != null && player.IsOwner && Camera.main != null) + return Camera.main.transform.forward; + + Transform body = Body(player); + if (body == null) + return Vector3.forward; + return (body.forward + Vector3.down * 0.45f).normalized; + } + + public static void ShowLocal(SkopjePlayer player, Vector3 aim) + { + Show(player, aim, true); + } + + public static void ShowRemote(SkopjePlayer player, Vector3 aim) + { + Show(player, aim, false); + } + + public static bool Accept(int objectId, ushort seq) + { + ushort last; + if (!_seq.TryGetValue(objectId, out last)) + { + _seq[objectId] = seq; + return true; + } + + ushort delta = (ushort)(seq - last); + if (delta == 0 || delta >= 32768) + return false; + + _seq[objectId] = seq; + return true; + } + + public static void Forget(int objectId) + { + _seq.Remove(objectId); + } + + public static void Hide(int objectId) + { + Stream stream; + if (!_streams.TryGetValue(objectId, out stream)) + return; + _streams.Remove(objectId); + DestroyStream(stream); + } + + public static void Clear() + { + foreach (Stream stream in _streams.Values) + DestroyStream(stream); + _streams.Clear(); + _seq.Clear(); + + for (int i = 0; i < _puddles.Count; i++) + { + if (_puddles[i].Object != null) + UnityEngine.Object.Destroy(_puddles[i].Object); + } + + _puddles.Clear(); + } + + public static void Tick() + { + float now = Time.unscaledTime; + _dropIds.Clear(); + foreach (KeyValuePair pair in _streams) + { + Stream stream = pair.Value; + if (stream.Player == null) + { + _dropIds.Add(pair.Key); + continue; + } + + if (!stream.Local && now - stream.Heard > 0.5f) + { + _dropIds.Add(pair.Key); + continue; + } + + Draw(stream); + } + + for (int i = 0; i < _dropIds.Count; i++) + Hide(_dropIds[i]); + + for (int i = _puddles.Count - 1; i >= 0; i--) + { + Puddle puddle = _puddles[i]; + if (puddle.Object == null) + { + _puddles.RemoveAt(i); + continue; + } + + float age = now - puddle.Born; + if (age >= SplatterLife) + { + UnityEngine.Object.Destroy(puddle.Object); + _puddles.RemoveAt(i); + continue; + } + + float shrink = 1f - (age / SplatterLife); + puddle.Object.transform.localScale = puddle.Scale * Mathf.Max(0.2f, shrink); + } + } + + static void Show(SkopjePlayer player, Vector3 aim, bool local) + { + if (player == null || player.NetworkObject == null || !player.NetworkObject.IsSpawned) + return; + if (aim.sqrMagnitude < 0.0001f) + aim = Vector3.forward; + else + aim.Normalize(); + + Stream stream; + if (!_streams.TryGetValue(player.ObjectId, out stream) || stream == null) + { + stream = Create(player); + _streams[player.ObjectId] = stream; + } + + stream.Player = player; + stream.Local = local; + stream.Aim = aim; + stream.Heard = Time.unscaledTime; + } + + static Stream Create(SkopjePlayer player) + { + EnsureArt(); + var stream = new Stream(); + stream.Id = player.ObjectId; + stream.Player = player; + stream.Root = new GameObject("PeeStream"); + if (PeePeePlugin.Host != null) + stream.Root.transform.SetParent(PeePeePlugin.Host.transform, false); + + var lineObject = new GameObject("Stream"); + lineObject.transform.SetParent(stream.Root.transform, false); + stream.Line = lineObject.AddComponent(); + stream.Line.positionCount = 0; + stream.Line.startWidth = 0.035f; + stream.Line.endWidth = 0.018f; + stream.Line.numCapVertices = 4; + stream.Line.numCornerVertices = 3; + stream.Line.useWorldSpace = true; + stream.Line.shadowCastingMode = ShadowCastingMode.Off; + stream.Line.receiveShadows = false; + stream.Line.lightProbeUsage = LightProbeUsage.Off; + stream.Line.reflectionProbeUsage = ReflectionProbeUsage.Off; + if (_material != null) + { + stream.Line.material = _material; + Paint(stream.Line.material); + } + stream.Line.startColor = PeeColor; + stream.Line.endColor = PeeColor; + Paint(stream.Line); + + stream.Drops = new Transform[Droplets]; + stream.Seeds = new float[Droplets]; + for (int i = 0; i < Droplets; i++) + { + stream.Drops[i] = MakeDrop(stream.Root.transform, 0.04f); + stream.Seeds[i] = i / (float)Droplets; + } + + return stream; + } + + static void Draw(Stream stream) + { + if (stream.Line == null) + return; + + Vector3 aim = stream.Aim.sqrMagnitude > 0.0001f ? stream.Aim.normalized : Vector3.forward; + Vector3 origin = Origin(stream, aim); + Vector3 velocity = aim * Speed; + Vector3 pos = origin; + int count = 0; + bool landed = false; + RaycastHit landing = default; + + for (int i = 0; i < Steps; i++) + { + Vector3 next = pos + velocity * StepTime + 0.5f * Physics.gravity * (StepTime * StepTime); + velocity += Physics.gravity * StepTime; + RaycastHit hit; + if (HitWorld(pos, next, stream.Player.transform, out hit)) + { + _points[i] = hit.point; + count = i + 1; + landed = true; + landing = hit; + break; + } + + _points[i] = next; + pos = next; + count = i + 1; + } + + if (count < 2) + return; + + stream.Line.positionCount = count; + for (int i = 0; i < count; i++) + stream.Line.SetPosition(i, _points[i]); + + float now = Time.time; + for (int i = 0; i < stream.Drops.Length; i++) + { + if (stream.Drops[i] == null) + continue; + float travel = Mathf.Repeat(now * 1.7f + stream.Seeds[i], 1f); + Vector3 at = Along(_points, count, travel); + Vector3 side = Vector3.Cross(aim, Vector3.up); + if (side.sqrMagnitude < 0.0001f) + side = Vector3.right; + side.Normalize(); + at += side * Mathf.Sin((now + stream.Seeds[i]) * 16f) * 0.015f; + stream.Drops[i].position = at; + float size = Mathf.Lerp(0.025f, 0.048f, travel); + stream.Drops[i].localScale = new Vector3(size, size, size); + } + + if (landed) + SpawnPuddle(landing); + } + + static Vector3 Origin(Stream stream, Vector3 aim) + { + SkopjePlayer player = stream.Player; + if (player != null && player.IsOwner && !BodyVisible(player)) + { + Camera cam = null; + if (player.SkopjeFPSCamera != null) + cam = player.SkopjeFPSCamera.mainCamera; + if (cam == null) + cam = Camera.main; + if (cam != null) + return cam.transform.position + cam.transform.forward * 0.55f - cam.transform.up * 0.28f; + } + + Transform hips = Hips(stream); + Vector3 at = hips != null ? hips.position : (player != null ? player.transform.position + Vector3.up * 0.85f : aim); + return at + aim * 0.16f + Vector3.down * 0.06f; + } + + static Transform Hips(Stream stream) + { + if (stream.SearchedHips) + return stream.Hips; + + stream.SearchedHips = true; + Transform body = Body(stream.Player); + if (body == null) + return null; + + Transform[] all = body.GetComponentsInChildren(true); + if (all == null) + return null; + + for (int i = 0; i < all.Length; i++) + { + string name = all[i].name; + if (name.IndexOf("hip", StringComparison.OrdinalIgnoreCase) >= 0 || name.IndexOf("pelvis", StringComparison.OrdinalIgnoreCase) >= 0) + { + stream.Hips = all[i]; + return stream.Hips; + } + } + + return null; + } + + static Transform Body(SkopjePlayer player) + { + if (player == null) + return null; + if (player.ThirdPerson != null) + return player.ThirdPerson.transform; + return player.transform; + } + + static bool BodyVisible(SkopjePlayer player) + { + Renderer renderer = player != null ? player.ThirdPersonRenderer : null; + return renderer != null && renderer.enabled && renderer.gameObject.activeInHierarchy; + } + + static bool HitWorld(Vector3 from, Vector3 to, Transform ignore, out RaycastHit closest) + { + closest = default; + Vector3 delta = to - from; + float dist = delta.magnitude; + if (dist < 0.001f) + return false; + + RaycastHit[] hits = Physics.RaycastAll(from, delta / dist, dist, Physics.DefaultRaycastLayers, QueryTriggerInteraction.Ignore); + if (hits == null || hits.Length == 0) + return false; + + float best = float.MaxValue; + bool found = false; + for (int i = 0; i < hits.Length; i++) + { + Collider collider = hits[i].collider; + if (collider == null) + continue; + Transform hit = collider.transform; + if (ignore != null && (hit == ignore || hit.IsChildOf(ignore))) + continue; + if (hits[i].distance < best) + { + best = hits[i].distance; + closest = hits[i]; + found = true; + } + } + + return found; + } + + static Vector3 Along(Vector3[] points, int count, float t) + { + if (count <= 1) + return points[0]; + + float total = 0f; + for (int i = 1; i < count; i++) + total += Vector3.Distance(points[i - 1], points[i]); + + float want = total * Mathf.Clamp01(t); + float walked = 0f; + for (int i = 1; i < count; i++) + { + float seg = Vector3.Distance(points[i - 1], points[i]); + if (walked + seg >= want) + { + float u = seg < 0.0001f ? 0f : (want - walked) / seg; + return Vector3.Lerp(points[i - 1], points[i], u); + } + + walked += seg; + } + + return points[count - 1]; + } + + static void SpawnPuddle(RaycastHit hit) + { + EnsureArt(); + if (_cube == null || _material == null) + return; + + var puddle = new GameObject("PeePuddle"); + var filter = puddle.AddComponent(); + filter.sharedMesh = _cube; + var renderer = puddle.AddComponent(); + renderer.sharedMaterial = _material; + renderer.shadowCastingMode = ShadowCastingMode.Off; + renderer.receiveShadows = false; + Paint(renderer); + + Vector3 normal = hit.normal.sqrMagnitude > 0.001f ? hit.normal : Vector3.up; + puddle.transform.position = hit.point + normal * 0.02f; + puddle.transform.rotation = Quaternion.FromToRotation(Vector3.up, normal) * Quaternion.Euler(0f, UnityEngine.Random.Range(0f, 360f), 0f); + float width = UnityEngine.Random.Range(0.16f, 0.3f); + puddle.transform.localScale = new Vector3(width, 0.012f, width * UnityEngine.Random.Range(0.75f, 1.15f)); + + _puddles.Add(new Puddle + { + Object = puddle, + Born = Time.unscaledTime, + Scale = puddle.transform.localScale, + }); + } + + static Transform MakeDrop(Transform parent, float size) + { + var drop = new GameObject("Drop"); + drop.transform.SetParent(parent, false); + drop.transform.localScale = Vector3.one * size; + var filter = drop.AddComponent(); + filter.sharedMesh = _sphere; + var renderer = drop.AddComponent(); + renderer.sharedMaterial = _material; + renderer.shadowCastingMode = ShadowCastingMode.Off; + renderer.receiveShadows = false; + Paint(renderer); + return drop.transform; + } + + static void Paint(Renderer renderer) + { + if (renderer == null || _material == null) + return; + if (_block == null) + _block = new MaterialPropertyBlock(); + _block.SetColor("_BaseColor", PeeColor); + _block.SetColor("_Color", PeeColor); + _block.SetColor("_EmissionColor", PeeColor); + renderer.SetPropertyBlock(_block); + } + + static void Paint(Material material) + { + if (material == null) + return; + if (material.HasProperty("_BaseColor")) + material.SetColor("_BaseColor", PeeColor); + if (material.HasProperty("_Color")) + material.SetColor("_Color", PeeColor); + material.color = PeeColor; + if (material.HasProperty("_EmissionColor")) + { + material.EnableKeyword("_EMISSION"); + material.SetColor("_EmissionColor", PeeColor * 1.4f); + } + } + + static Shader YellowShader() + { + Shader shader = Shader.Find("Universal Render Pipeline/Unlit"); + if (shader == null) + shader = Shader.Find("Universal Render Pipeline/Particles/Unlit"); + if (shader == null) + shader = Shader.Find("Unlit/Color"); + if (shader == null) + shader = Shader.Find("Sprites/Default"); + return shader; + } + + static void EnsureArt() + { + if (_material != null && _sphere != null && _cube != null) + return; + + if (_material == null) + { + Shader shader = YellowShader(); + if (shader != null) + { + _material = new Material(shader); + Paint(_material); + } + } + + if (_sphere == null) + { + var temp = GameObject.CreatePrimitive(PrimitiveType.Sphere); + var filter = temp.GetComponent(); + if (filter != null) + _sphere = filter.sharedMesh; + if (_material == null) + { + var renderer = temp.GetComponent(); + if (renderer != null && renderer.sharedMaterial != null) + { + _material = new Material(renderer.sharedMaterial); + Paint(_material); + } + } + + UnityEngine.Object.Destroy(temp); + } + + if (_cube == null) + { + var temp = GameObject.CreatePrimitive(PrimitiveType.Cube); + var filter = temp.GetComponent(); + if (filter != null) + _cube = filter.sharedMesh; + UnityEngine.Object.Destroy(temp); + } + } + + static void DestroyStream(Stream stream) + { + if (stream != null && stream.Root != null) + UnityEngine.Object.Destroy(stream.Root); + } + } +} diff --git a/PeePeeMod/bin/Debug/net6.0/PeePeeMod.deps.json b/PeePeeMod/bin/Debug/net6.0/PeePeeMod.deps.json new file mode 100644 index 0000000..1c629d5 --- /dev/null +++ b/PeePeeMod/bin/Debug/net6.0/PeePeeMod.deps.json @@ -0,0 +1,23 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v6.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v6.0": { + "PeePeeMod/1.0.0": { + "runtime": { + "PeePeeMod.dll": {} + } + } + } + }, + "libraries": { + "PeePeeMod/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + } + } +} \ No newline at end of file diff --git a/PeePeeMod/bin/Debug/net6.0/PeePeeMod.dll b/PeePeeMod/bin/Debug/net6.0/PeePeeMod.dll new file mode 100644 index 0000000..7c5ca7c Binary files /dev/null and b/PeePeeMod/bin/Debug/net6.0/PeePeeMod.dll differ diff --git a/PeePeeMod/bin/Debug/net6.0/PeePeeMod.pdb b/PeePeeMod/bin/Debug/net6.0/PeePeeMod.pdb new file mode 100644 index 0000000..6e39f83 Binary files /dev/null and b/PeePeeMod/bin/Debug/net6.0/PeePeeMod.pdb differ diff --git a/PeePeeMod/bin/Release/net6.0/PeePeeMod.deps.json b/PeePeeMod/bin/Release/net6.0/PeePeeMod.deps.json new file mode 100644 index 0000000..1c629d5 --- /dev/null +++ b/PeePeeMod/bin/Release/net6.0/PeePeeMod.deps.json @@ -0,0 +1,23 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v6.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v6.0": { + "PeePeeMod/1.0.0": { + "runtime": { + "PeePeeMod.dll": {} + } + } + } + }, + "libraries": { + "PeePeeMod/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + } + } +} \ No newline at end of file diff --git a/PeePeeMod/bin/Release/net6.0/PeePeeMod.dll b/PeePeeMod/bin/Release/net6.0/PeePeeMod.dll new file mode 100644 index 0000000..c15f001 Binary files /dev/null and b/PeePeeMod/bin/Release/net6.0/PeePeeMod.dll differ diff --git a/PeePeeMod/bin/Release/net6.0/PeePeeMod.pdb b/PeePeeMod/bin/Release/net6.0/PeePeeMod.pdb new file mode 100644 index 0000000..1b36fea Binary files /dev/null and b/PeePeeMod/bin/Release/net6.0/PeePeeMod.pdb differ diff --git a/PeePeeMod/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs b/PeePeeMod/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs new file mode 100644 index 0000000..ed92695 --- /dev/null +++ b/PeePeeMod/obj/Debug/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/PeePeeMod/obj/Debug/net6.0/PeePeeMod.AssemblyInfo.cs b/PeePeeMod/obj/Debug/net6.0/PeePeeMod.AssemblyInfo.cs new file mode 100644 index 0000000..5c4d2e0 --- /dev/null +++ b/PeePeeMod/obj/Debug/net6.0/PeePeeMod.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("PeePeeMod")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+a740fec7c87ba4b24aefb7faf991fc5b69c71bd4")] +[assembly: System.Reflection.AssemblyProductAttribute("PeePeeMod")] +[assembly: System.Reflection.AssemblyTitleAttribute("PeePeeMod")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/PeePeeMod/obj/Debug/net6.0/PeePeeMod.AssemblyInfoInputs.cache b/PeePeeMod/obj/Debug/net6.0/PeePeeMod.AssemblyInfoInputs.cache new file mode 100644 index 0000000..a76e5cb --- /dev/null +++ b/PeePeeMod/obj/Debug/net6.0/PeePeeMod.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +042143fd6e55d3b1da1d22ef48ebe9715cf4e7d7ac9bf7803b296a5ee63c4992 diff --git a/PeePeeMod/obj/Debug/net6.0/PeePeeMod.GeneratedMSBuildEditorConfig.editorconfig b/PeePeeMod/obj/Debug/net6.0/PeePeeMod.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..57e95df --- /dev/null +++ b/PeePeeMod/obj/Debug/net6.0/PeePeeMod.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 = PeePeeMod +build_property.ProjectDir = C:\Users\andre\Desktop\SkopjeMods\PeePeeMod\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.EffectiveAnalysisLevelStyle = 6.0 +build_property.EnableCodeStyleSeverity = diff --git a/PeePeeMod/obj/Debug/net6.0/PeePeeMod.assets.cache b/PeePeeMod/obj/Debug/net6.0/PeePeeMod.assets.cache new file mode 100644 index 0000000..bbfe893 Binary files /dev/null and b/PeePeeMod/obj/Debug/net6.0/PeePeeMod.assets.cache differ diff --git a/PeePeeMod/obj/Debug/net6.0/PeePeeMod.csproj.AssemblyReference.cache b/PeePeeMod/obj/Debug/net6.0/PeePeeMod.csproj.AssemblyReference.cache new file mode 100644 index 0000000..cc17f8e Binary files /dev/null and b/PeePeeMod/obj/Debug/net6.0/PeePeeMod.csproj.AssemblyReference.cache differ diff --git a/PeePeeMod/obj/Debug/net6.0/PeePeeMod.csproj.CoreCompileInputs.cache b/PeePeeMod/obj/Debug/net6.0/PeePeeMod.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..c6f4829 --- /dev/null +++ b/PeePeeMod/obj/Debug/net6.0/PeePeeMod.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +bf5a809bc5290d85ff4eaa6eb565029fadf1e296987627646bf69f559f7d6af7 diff --git a/PeePeeMod/obj/Debug/net6.0/PeePeeMod.csproj.FileListAbsolute.txt b/PeePeeMod/obj/Debug/net6.0/PeePeeMod.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..51216c3 --- /dev/null +++ b/PeePeeMod/obj/Debug/net6.0/PeePeeMod.csproj.FileListAbsolute.txt @@ -0,0 +1,12 @@ +C:\Users\andre\Desktop\SkopjeMods\PeePeeMod\bin\Debug\net6.0\PeePeeMod.deps.json +C:\Users\andre\Desktop\SkopjeMods\PeePeeMod\bin\Debug\net6.0\PeePeeMod.dll +C:\Users\andre\Desktop\SkopjeMods\PeePeeMod\bin\Debug\net6.0\PeePeeMod.pdb +C:\Users\andre\Desktop\SkopjeMods\PeePeeMod\obj\Debug\net6.0\PeePeeMod.csproj.AssemblyReference.cache +C:\Users\andre\Desktop\SkopjeMods\PeePeeMod\obj\Debug\net6.0\PeePeeMod.GeneratedMSBuildEditorConfig.editorconfig +C:\Users\andre\Desktop\SkopjeMods\PeePeeMod\obj\Debug\net6.0\PeePeeMod.AssemblyInfoInputs.cache +C:\Users\andre\Desktop\SkopjeMods\PeePeeMod\obj\Debug\net6.0\PeePeeMod.AssemblyInfo.cs +C:\Users\andre\Desktop\SkopjeMods\PeePeeMod\obj\Debug\net6.0\PeePeeMod.csproj.CoreCompileInputs.cache +C:\Users\andre\Desktop\SkopjeMods\PeePeeMod\obj\Debug\net6.0\PeePeeMod.dll +C:\Users\andre\Desktop\SkopjeMods\PeePeeMod\obj\Debug\net6.0\refint\PeePeeMod.dll +C:\Users\andre\Desktop\SkopjeMods\PeePeeMod\obj\Debug\net6.0\PeePeeMod.pdb +C:\Users\andre\Desktop\SkopjeMods\PeePeeMod\obj\Debug\net6.0\ref\PeePeeMod.dll diff --git a/PeePeeMod/obj/Debug/net6.0/PeePeeMod.dll b/PeePeeMod/obj/Debug/net6.0/PeePeeMod.dll new file mode 100644 index 0000000..7c5ca7c Binary files /dev/null and b/PeePeeMod/obj/Debug/net6.0/PeePeeMod.dll differ diff --git a/PeePeeMod/obj/Debug/net6.0/PeePeeMod.pdb b/PeePeeMod/obj/Debug/net6.0/PeePeeMod.pdb new file mode 100644 index 0000000..6e39f83 Binary files /dev/null and b/PeePeeMod/obj/Debug/net6.0/PeePeeMod.pdb differ diff --git a/PeePeeMod/obj/Debug/net6.0/ref/PeePeeMod.dll b/PeePeeMod/obj/Debug/net6.0/ref/PeePeeMod.dll new file mode 100644 index 0000000..da15477 Binary files /dev/null and b/PeePeeMod/obj/Debug/net6.0/ref/PeePeeMod.dll differ diff --git a/PeePeeMod/obj/Debug/net6.0/refint/PeePeeMod.dll b/PeePeeMod/obj/Debug/net6.0/refint/PeePeeMod.dll new file mode 100644 index 0000000..da15477 Binary files /dev/null and b/PeePeeMod/obj/Debug/net6.0/refint/PeePeeMod.dll differ diff --git a/PeePeeMod/obj/PeePeeMod.csproj.nuget.dgspec.json b/PeePeeMod/obj/PeePeeMod.csproj.nuget.dgspec.json new file mode 100644 index 0000000..9c3c734 --- /dev/null +++ b/PeePeeMod/obj/PeePeeMod.csproj.nuget.dgspec.json @@ -0,0 +1,85 @@ +{ + "format": 1, + "restore": { + "C:\\Users\\andre\\Desktop\\SkopjeMods\\PeePeeMod\\PeePeeMod.csproj": {} + }, + "projects": { + "C:\\Users\\andre\\Desktop\\SkopjeMods\\PeePeeMod\\PeePeeMod.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "C:\\Users\\andre\\Desktop\\SkopjeMods\\PeePeeMod\\PeePeeMod.csproj", + "projectName": "PeePeeMod", + "projectPath": "C:\\Users\\andre\\Desktop\\SkopjeMods\\PeePeeMod\\PeePeeMod.csproj", + "packagesPath": "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget", + "outputPath": "C:\\Users\\andre\\Desktop\\SkopjeMods\\PeePeeMod\\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/PeePeeMod/obj/PeePeeMod.csproj.nuget.g.props b/PeePeeMod/obj/PeePeeMod.csproj.nuget.g.props new file mode 100644 index 0000000..ba0d2cb --- /dev/null +++ b/PeePeeMod/obj/PeePeeMod.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/PeePeeMod/obj/PeePeeMod.csproj.nuget.g.targets b/PeePeeMod/obj/PeePeeMod.csproj.nuget.g.targets new file mode 100644 index 0000000..3dc06ef --- /dev/null +++ b/PeePeeMod/obj/PeePeeMod.csproj.nuget.g.targets @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/PeePeeMod/obj/Release/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs b/PeePeeMod/obj/Release/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs new file mode 100644 index 0000000..ed92695 --- /dev/null +++ b/PeePeeMod/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/PeePeeMod/obj/Release/net6.0/PeePeeMod.AssemblyInfo.cs b/PeePeeMod/obj/Release/net6.0/PeePeeMod.AssemblyInfo.cs new file mode 100644 index 0000000..618b348 --- /dev/null +++ b/PeePeeMod/obj/Release/net6.0/PeePeeMod.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("PeePeeMod")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+a740fec7c87ba4b24aefb7faf991fc5b69c71bd4")] +[assembly: System.Reflection.AssemblyProductAttribute("PeePeeMod")] +[assembly: System.Reflection.AssemblyTitleAttribute("PeePeeMod")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/PeePeeMod/obj/Release/net6.0/PeePeeMod.AssemblyInfoInputs.cache b/PeePeeMod/obj/Release/net6.0/PeePeeMod.AssemblyInfoInputs.cache new file mode 100644 index 0000000..8c824fb --- /dev/null +++ b/PeePeeMod/obj/Release/net6.0/PeePeeMod.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +28d4c1c7ae8943c05a1dedfb4700405538fa7546a623ddf92593e82cfa96b1f7 diff --git a/PeePeeMod/obj/Release/net6.0/PeePeeMod.GeneratedMSBuildEditorConfig.editorconfig b/PeePeeMod/obj/Release/net6.0/PeePeeMod.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..57e95df --- /dev/null +++ b/PeePeeMod/obj/Release/net6.0/PeePeeMod.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 = PeePeeMod +build_property.ProjectDir = C:\Users\andre\Desktop\SkopjeMods\PeePeeMod\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.EffectiveAnalysisLevelStyle = 6.0 +build_property.EnableCodeStyleSeverity = diff --git a/PeePeeMod/obj/Release/net6.0/PeePeeMod.assets.cache b/PeePeeMod/obj/Release/net6.0/PeePeeMod.assets.cache new file mode 100644 index 0000000..f965b50 Binary files /dev/null and b/PeePeeMod/obj/Release/net6.0/PeePeeMod.assets.cache differ diff --git a/PeePeeMod/obj/Release/net6.0/PeePeeMod.csproj.AssemblyReference.cache b/PeePeeMod/obj/Release/net6.0/PeePeeMod.csproj.AssemblyReference.cache new file mode 100644 index 0000000..b310740 Binary files /dev/null and b/PeePeeMod/obj/Release/net6.0/PeePeeMod.csproj.AssemblyReference.cache differ diff --git a/PeePeeMod/obj/Release/net6.0/PeePeeMod.csproj.CoreCompileInputs.cache b/PeePeeMod/obj/Release/net6.0/PeePeeMod.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..6649be5 --- /dev/null +++ b/PeePeeMod/obj/Release/net6.0/PeePeeMod.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +158ef05a991a20f52832317d92222c477cff0bb43c44738ef5ef154dfc745156 diff --git a/PeePeeMod/obj/Release/net6.0/PeePeeMod.csproj.FileListAbsolute.txt b/PeePeeMod/obj/Release/net6.0/PeePeeMod.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..1f8e1fd --- /dev/null +++ b/PeePeeMod/obj/Release/net6.0/PeePeeMod.csproj.FileListAbsolute.txt @@ -0,0 +1,12 @@ +c:\Users\andre\Desktop\SkopjeMods\PeePeeMod\obj\Release\net6.0\PeePeeMod.csproj.AssemblyReference.cache +c:\Users\andre\Desktop\SkopjeMods\PeePeeMod\obj\Release\net6.0\PeePeeMod.GeneratedMSBuildEditorConfig.editorconfig +c:\Users\andre\Desktop\SkopjeMods\PeePeeMod\obj\Release\net6.0\PeePeeMod.AssemblyInfoInputs.cache +c:\Users\andre\Desktop\SkopjeMods\PeePeeMod\obj\Release\net6.0\PeePeeMod.AssemblyInfo.cs +c:\Users\andre\Desktop\SkopjeMods\PeePeeMod\obj\Release\net6.0\PeePeeMod.csproj.CoreCompileInputs.cache +c:\Users\andre\Desktop\SkopjeMods\PeePeeMod\bin\Release\net6.0\PeePeeMod.deps.json +c:\Users\andre\Desktop\SkopjeMods\PeePeeMod\bin\Release\net6.0\PeePeeMod.dll +c:\Users\andre\Desktop\SkopjeMods\PeePeeMod\bin\Release\net6.0\PeePeeMod.pdb +c:\Users\andre\Desktop\SkopjeMods\PeePeeMod\obj\Release\net6.0\PeePeeMod.dll +c:\Users\andre\Desktop\SkopjeMods\PeePeeMod\obj\Release\net6.0\refint\PeePeeMod.dll +c:\Users\andre\Desktop\SkopjeMods\PeePeeMod\obj\Release\net6.0\PeePeeMod.pdb +c:\Users\andre\Desktop\SkopjeMods\PeePeeMod\obj\Release\net6.0\ref\PeePeeMod.dll diff --git a/PeePeeMod/obj/Release/net6.0/PeePeeMod.dll b/PeePeeMod/obj/Release/net6.0/PeePeeMod.dll new file mode 100644 index 0000000..c15f001 Binary files /dev/null and b/PeePeeMod/obj/Release/net6.0/PeePeeMod.dll differ diff --git a/PeePeeMod/obj/Release/net6.0/PeePeeMod.pdb b/PeePeeMod/obj/Release/net6.0/PeePeeMod.pdb new file mode 100644 index 0000000..1b36fea Binary files /dev/null and b/PeePeeMod/obj/Release/net6.0/PeePeeMod.pdb differ diff --git a/PeePeeMod/obj/Release/net6.0/ref/PeePeeMod.dll b/PeePeeMod/obj/Release/net6.0/ref/PeePeeMod.dll new file mode 100644 index 0000000..67346ea Binary files /dev/null and b/PeePeeMod/obj/Release/net6.0/ref/PeePeeMod.dll differ diff --git a/PeePeeMod/obj/Release/net6.0/refint/PeePeeMod.dll b/PeePeeMod/obj/Release/net6.0/refint/PeePeeMod.dll new file mode 100644 index 0000000..67346ea Binary files /dev/null and b/PeePeeMod/obj/Release/net6.0/refint/PeePeeMod.dll differ diff --git a/PeePeeMod/obj/project.assets.json b/PeePeeMod/obj/project.assets.json new file mode 100644 index 0000000..1901838 --- /dev/null +++ b/PeePeeMod/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\\PeePeeMod\\PeePeeMod.csproj", + "projectName": "PeePeeMod", + "projectPath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\PeePeeMod\\PeePeeMod.csproj", + "packagesPath": "C:\\Users\\andre\\AppData\\Local\\Temp\\cursor-sandbox-cache\\a0404811fc6e51c4c5761fd11591789f\\nuget", + "outputPath": "c:\\Users\\andre\\Desktop\\SkopjeMods\\PeePeeMod\\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/PeePeeMod/obj/project.nuget.cache b/PeePeeMod/obj/project.nuget.cache new file mode 100644 index 0000000..be45b8c --- /dev/null +++ b/PeePeeMod/obj/project.nuget.cache @@ -0,0 +1,12 @@ +{ + "version": 2, + "dgSpecHash": "KG8EvkIN5Ys=", + "success": true, + "projectFilePath": "C:\\Users\\andre\\Desktop\\SkopjeMods\\PeePeeMod\\PeePeeMod.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/README.md b/README.md index bbf1b90..8edfac3 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,9 @@ File: BepInEx-Unity.IL2CPP-win-x64-6.0.0-be.789+6cea286.zip | Boss Health | On-screen health bar for the current boss. | 1.0.0 | ![Working](https://img.shields.io/badge/Working-16a34a?style=flat-square) | | Horde | Multiplies enemy counts, health, and damage, globally or per zone. | 1.0.0 | ![Working](https://img.shields.io/badge/Working-16a34a?style=flat-square) | | Third Person | Over-the-shoulder camera that can orbit around the player. | 1.0.0 | ![Broken](https://img.shields.io/badge/Broken-dc2626?style=flat-square) | -| Custom Player Skins | Replaces each outfit from its own PNG in `CustomSkins`: singleplayer, ranger, medic, engineer, and fighter. | 1.0.0 | ![Untested](https://img.shields.io/badge/Untested-ca8a04?style=flat-square) | +| Custom Player Skins | Replaces each outfit from its own PNG in `CustomSkins`, including the PRP suit and the first-person hands. | 1.3.0 | ![Untested](https://img.shields.io/badge/Untested-ca8a04?style=flat-square) | +| Custom Weapon Skins | Replaces each player weapon from its own PNG in `WeaponSkins`. Each file starts as that weapon's in-game texture. | 1.1.0 | ![Untested](https://img.shields.io/badge/Untested-ca8a04?style=flat-square) | +| Custom DOM Skins | Replaces the DOM exterior from `DomSkins`: `singleplayer.png` and `multiplayer.png`. Interior, wheels, and lights stay stock. | 1.0.0 | ![Untested](https://img.shields.io/badge/Untested-ca8a04?style=flat-square) | | Minimap | Small map under the clock, using the in-game map. | 1.0.0 | ![Broken](https://img.shields.io/badge/Broken-dc2626?style=flat-square) | | DOM Radio | Plays your mp3 and wav files inside the Dom, and mutes its music while the radio is on. | 1.0.0 | ![Working](https://img.shields.io/badge/Working-16a34a?style=flat-square) | +| PeePeeMod | Hold a key to piss. The stream is sent with a server RPC so every player can see it. | 1.0.0 | ![Untested](https://img.shields.io/badge/Untested-ca8a04?style=flat-square) | diff --git a/ThirdPerson/ThirdPersonPlugin.cs b/ThirdPerson/ThirdPersonPlugin.cs index 6ed14ae..fd7f9a2 100644 --- a/ThirdPerson/ThirdPersonPlugin.cs +++ b/ThirdPerson/ThirdPersonPlugin.cs @@ -18,7 +18,7 @@ namespace Skopje.ThirdPerson { public const string PluginGuid = "com.skopje.thirdperson"; public const string PluginName = "Skopje Third Person"; - public const string PluginVersion = "1.2.0"; + public const string PluginVersion = "1.3.0"; internal static ManualLogSource LogSource; @@ -76,8 +76,6 @@ namespace Skopje.ThirdPerson Patch(AccessTools.Method(typeof(RenderPipelineManager), "BeginCameraRendering"), nameof(ThirdPersonPatches.AfterBeginCamera)); Patch(AccessTools.Method(typeof(RenderPipelineManager), "EndCameraRendering"), nameof(ThirdPersonPatches.AfterEndCamera)); Patch(AccessTools.Method(typeof(SkopjeCharacterController), "UpdateRotation"), nameof(ThirdPersonPatches.AfterBodyRotation), nameof(ThirdPersonPatches.BeforeBodyRotation)); - PatchInteract(AccessTools.Method(typeof(InteractController), "Update")); - PatchInteract(AccessTools.Method(typeof(InteractController), "LateUpdate")); LogSource.LogInfo($"{PluginName} {PluginVersion} loaded. Config: {Config.ConfigFilePath}"); } @@ -96,21 +94,6 @@ namespace Skopje.ThirdPerson return true; } - static void PatchInteract(MethodInfo method) - { - if (method == null) - { - LogSource.LogWarning("Third person hook was not found: InteractController"); - return; - } - - _harmony.Patch( - method, - prefix: new HarmonyMethod(typeof(ThirdPersonPatches), nameof(ThirdPersonPatches.BeforeInteract)), - postfix: new HarmonyMethod(typeof(ThirdPersonPatches), nameof(ThirdPersonPatches.AfterInteract)), - finalizer: new HarmonyMethod(typeof(ThirdPersonPatches), nameof(ThirdPersonPatches.RestoreInteract))); - } - static void Patch(MethodInfo method, string postfix, string prefix = null) { if (method == null) @@ -159,20 +142,5 @@ namespace Skopje.ThirdPerson ThirdPersonRig.HoldBodyFacing(__instance, ref currentRotation, deltaTime); } - public static void BeforeInteract() - { - ThirdPersonRig.HideBodiesFromInteract(); - } - - public static void AfterInteract() - { - ThirdPersonRig.RestoreInteractLayers(); - } - - public static Exception RestoreInteract(Exception __exception) - { - ThirdPersonRig.RestoreInteractLayers(); - return __exception; - } } } diff --git a/ThirdPerson/ThirdPersonRig.cs b/ThirdPerson/ThirdPersonRig.cs index c66e2a8..037a046 100644 --- a/ThirdPerson/ThirdPersonRig.cs +++ b/ThirdPerson/ThirdPersonRig.cs @@ -27,7 +27,6 @@ namespace Skopje.ThirdPerson static readonly List ArmRenderers = new List(); static readonly List ShadowOnly = new List(); static readonly List InteractColliders = new List(); - static readonly List InteractLayers = new List(); static readonly RaycastHit[] Hits = new RaycastHit[24]; static SkopjePlayer _player; @@ -64,8 +63,6 @@ namespace Skopje.ThirdPerson static Camera _viewCamera; static Vector3 _movePlanar; static float _turnSharpness; - static int _interactMask = -1; - static bool _layersShifted; static float _nextColliderScan; public static void OnClientStarted() @@ -111,11 +108,10 @@ namespace Skopje.ThirdPerson try { - CacheInteractMask(); if (Time.unscaledTime >= _nextColliderScan) { _nextColliderScan = Time.unscaledTime + 0.5f; - CacheInteractColliders(); + SilenceBodyColliders(); } Present(_player, null); @@ -492,102 +488,37 @@ namespace Skopje.ThirdPerson cam.cullingMask |= _bodyLayers; } - public static void HideBodiesFromInteract() + static void SilenceBodyColliders() { - RestoreInteractLayers(); - if (_interactMask == 0 || InteractColliders.Count == 0) + if (_player == null || _player.ThirdPerson == null) return; - int free = 2; - if ((_interactMask & (1 << free)) != 0) - { - free = -1; - for (int layer = 8; layer < 32; layer++) - { - if ((_interactMask & (1 << layer)) == 0) - { - free = layer; - break; - } - } - } - - if (free < 0) - return; - - for (int i = 0; i < InteractColliders.Count; i++) - { - Collider collider = InteractColliders[i]; - if (collider == null) - { - InteractLayers.Add(0); - continue; - } - - int layer = collider.gameObject.layer; - InteractLayers.Add(layer); - if ((_interactMask & (1 << layer)) != 0) - collider.gameObject.layer = free; - } - - _layersShifted = true; - } - - public static void RestoreInteractLayers() - { - if (!_layersShifted) - return; - - for (int i = InteractColliders.Count - 1; i >= 0; i--) - { - Collider collider = InteractColliders[i]; - if (collider != null && i < InteractLayers.Count) - collider.gameObject.layer = InteractLayers[i]; - } - - InteractLayers.Clear(); - _layersShifted = false; - } - - static void CacheInteractMask() - { - InteractController interact = _player.InteractController; - if (interact == null) - { - _interactMask = 0; - return; - } - - _interactMask = interact.BlockingLayers.value | interact.InteractLayers.value; - } - - static void CacheInteractColliders() - { - if (_layersShifted) - return; - - InteractColliders.Clear(); - SkopjePlayer[] players = UnityEngine.Object.FindObjectsOfType(); - for (int i = 0; i < players.Length; i++) - AddPlayerColliders(players[i]); - } - - static void AddPlayerColliders(SkopjePlayer player) - { - if (player == null || player.ThirdPerson == null) - return; - - Collider owner = player.OwnerCollider; - Collider[] found = player.ThirdPerson.GetComponentsInChildren(true); + Collider owner = _player.OwnerCollider; + Collider[] found = _player.ThirdPerson.GetComponentsInChildren(true); for (int i = 0; i < found.Length; i++) { Collider collider = found[i]; - if (collider == null || collider.isTrigger || collider == owner || InteractColliders.Contains(collider)) + if (collider == null || collider.isTrigger || collider == owner || !collider.enabled) continue; + if (InteractColliders.Contains(collider)) + continue; + + collider.enabled = false; InteractColliders.Add(collider); } } + static void RestoreBodyColliders() + { + for (int i = 0; i < InteractColliders.Count; i++) + { + if (InteractColliders[i] != null) + InteractColliders[i].enabled = true; + } + + InteractColliders.Clear(); + } + static void RestoreArms() { for (int i = 0; i < ArmRenderers.Count; i++) @@ -617,8 +548,7 @@ namespace Skopje.ThirdPerson if (_scaledThird && _thirdRoot != null) _thirdRoot.transform.localScale = _thirdScale; - RestoreInteractLayers(); - InteractColliders.Clear(); + RestoreBodyColliders(); RestoreArms(); BodyRenderers.Clear(); ArmRenderers.Clear(); diff --git a/ThirdPerson/bin/Release/net6.0/Skopje.ThirdPerson.dll b/ThirdPerson/bin/Release/net6.0/Skopje.ThirdPerson.dll index 8ae93fb..acefa04 100644 Binary files a/ThirdPerson/bin/Release/net6.0/Skopje.ThirdPerson.dll 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 index 872d883..ba92198 100644 Binary files a/ThirdPerson/bin/Release/net6.0/Skopje.ThirdPerson.pdb and b/ThirdPerson/bin/Release/net6.0/Skopje.ThirdPerson.pdb differ diff --git a/ThirdPerson/obj/Release/net6.0/Skopje.ThirdPerson.dll b/ThirdPerson/obj/Release/net6.0/Skopje.ThirdPerson.dll index 8ae93fb..acefa04 100644 Binary files a/ThirdPerson/obj/Release/net6.0/Skopje.ThirdPerson.dll 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 index 872d883..ba92198 100644 Binary files a/ThirdPerson/obj/Release/net6.0/Skopje.ThirdPerson.pdb 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 index fa3f346..485cc32 100644 --- a/ThirdPerson/obj/Release/net6.0/ThirdPersonPlugin.AssemblyInfo.cs +++ b/ThirdPerson/obj/Release/net6.0/ThirdPersonPlugin.AssemblyInfo.cs @@ -13,7 +13,7 @@ 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+9f4f8bf5235790c04718d7ca24b0f3f76e93b270")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+a740fec7c87ba4b24aefb7faf991fc5b69c71bd4")] [assembly: System.Reflection.AssemblyProductAttribute("Skopje.ThirdPerson")] [assembly: System.Reflection.AssemblyTitleAttribute("Skopje.ThirdPerson")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/ThirdPerson/obj/Release/net6.0/ThirdPersonPlugin.AssemblyInfoInputs.cache b/ThirdPerson/obj/Release/net6.0/ThirdPersonPlugin.AssemblyInfoInputs.cache index d72cd09..a4b41ab 100644 --- a/ThirdPerson/obj/Release/net6.0/ThirdPersonPlugin.AssemblyInfoInputs.cache +++ b/ThirdPerson/obj/Release/net6.0/ThirdPersonPlugin.AssemblyInfoInputs.cache @@ -1 +1 @@ -bc8b2b18196c3acb4bcc9f717e44bd539bfb6c46a1061eb8c275c7da7f6dfc9f +c2aed9ec173430136e51ebe3f7189291e0c0c925543d2de9dee8a01a4853eae8 diff --git a/ThirdPerson/obj/Release/net6.0/ref/Skopje.ThirdPerson.dll b/ThirdPerson/obj/Release/net6.0/ref/Skopje.ThirdPerson.dll index 0bf7c2e..823c18a 100644 Binary files a/ThirdPerson/obj/Release/net6.0/ref/Skopje.ThirdPerson.dll 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 index 0bf7c2e..823c18a 100644 Binary files a/ThirdPerson/obj/Release/net6.0/refint/Skopje.ThirdPerson.dll and b/ThirdPerson/obj/Release/net6.0/refint/Skopje.ThirdPerson.dll differ