generated from Stick_Mods/stick.plugins.tmpl
Compare commits
4 Commits
91331fe210
...
f2631109fd
| Author | SHA1 | Date | |
|---|---|---|---|
| f2631109fd | |||
| f5464a3673 | |||
| ed9505af0f | |||
| 13a2886a76 |
63
.gitattributes
vendored
Normal file
63
.gitattributes
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
###############################################################################
|
||||
# Set default behavior to automatically normalize line endings.
|
||||
###############################################################################
|
||||
* text=auto
|
||||
|
||||
###############################################################################
|
||||
# Set default behavior for command prompt diff.
|
||||
#
|
||||
# This is need for earlier builds of msysgit that does not have it on by
|
||||
# default for csharp files.
|
||||
# Note: This is only used by command line
|
||||
###############################################################################
|
||||
#*.cs diff=csharp
|
||||
|
||||
###############################################################################
|
||||
# Set the merge driver for project and solution files
|
||||
#
|
||||
# Merging from the command prompt will add diff markers to the files if there
|
||||
# are conflicts (Merging from VS is not affected by the settings below, in VS
|
||||
# the diff markers are never inserted). Diff markers may cause the following
|
||||
# file extensions to fail to load in VS. An alternative would be to treat
|
||||
# these files as binary and thus will always conflict and require user
|
||||
# intervention with every merge. To do so, just uncomment the entries below
|
||||
###############################################################################
|
||||
#*.sln merge=binary
|
||||
#*.csproj merge=binary
|
||||
#*.vbproj merge=binary
|
||||
#*.vcxproj merge=binary
|
||||
#*.vcproj merge=binary
|
||||
#*.dbproj merge=binary
|
||||
#*.fsproj merge=binary
|
||||
#*.lsproj merge=binary
|
||||
#*.wixproj merge=binary
|
||||
#*.modelproj merge=binary
|
||||
#*.sqlproj merge=binary
|
||||
#*.wwaproj merge=binary
|
||||
|
||||
###############################################################################
|
||||
# behavior for image files
|
||||
#
|
||||
# image files are treated as binary by default.
|
||||
###############################################################################
|
||||
#*.jpg binary
|
||||
#*.png binary
|
||||
#*.gif binary
|
||||
|
||||
###############################################################################
|
||||
# diff behavior for common document formats
|
||||
#
|
||||
# Convert binary document formats to text before diffing them. This feature
|
||||
# is only available from the command line. Turn it on by uncommenting the
|
||||
# entries below.
|
||||
###############################################################################
|
||||
#*.doc diff=astextplain
|
||||
#*.DOC diff=astextplain
|
||||
#*.docx diff=astextplain
|
||||
#*.DOCX diff=astextplain
|
||||
#*.dot diff=astextplain
|
||||
#*.DOT diff=astextplain
|
||||
#*.pdf diff=astextplain
|
||||
#*.PDF diff=astextplain
|
||||
#*.rtf diff=astextplain
|
||||
#*.RTF diff=astextplain
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -33,6 +33,7 @@ x86/
|
||||
bld/
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
[Oo]ut/
|
||||
[Ll]og/
|
||||
[Ll]ogs/
|
||||
|
||||
|
||||
25
FixLocalForce.sln
Normal file
25
FixLocalForce.sln
Normal file
@@ -0,0 +1,25 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.14.36915.13 d17.14
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FixLocalForce", "FixLocalForce\FixLocalForce.csproj", "{098EA556-4E9C-C66B-5038-1C6A942CB02D}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{098EA556-4E9C-C66B-5038-1C6A942CB02D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{098EA556-4E9C-C66B-5038-1C6A942CB02D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{098EA556-4E9C-C66B-5038-1C6A942CB02D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{098EA556-4E9C-C66B-5038-1C6A942CB02D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {65403CFC-3D5E-420E-A241-5915A8C036DB}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
59
FixLocalForce/FixLocalForce.csproj
Normal file
59
FixLocalForce/FixLocalForce.csproj
Normal file
@@ -0,0 +1,59 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net35</TargetFramework>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<AssemblyName>FixLocalForce</AssemblyName>
|
||||
<RootNamespace>FixLocalForce</RootNamespace>
|
||||
<Authors>z7572</Authors>
|
||||
<Version>0.0.1</Version>
|
||||
<Product></Product>
|
||||
<Description>A BepInEx mod for Stick Fight: The Game</Description>
|
||||
<AssemblyVersion></AssemblyVersion>
|
||||
<FileVersion></FileVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="BepInEx.Analyzers" Version="1.*" PrivateAssets="all" />
|
||||
<PackageReference Include="BepInEx.Core" Version="5.*" />
|
||||
<PackageReference Include="BepInEx.PluginInfoProps" Version="1.*" />
|
||||
<PackageReference Include="UnityEngine.Modules" Version="5.6.3" IncludeAssets="compile" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(TargetFramework.TrimEnd(`0123456789`))' == 'net'">
|
||||
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.2" PrivateAssets="all" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="Assembly-CSharp">
|
||||
<HintPath>..\..\..\..\StickFight_Data\Managed\Assembly-CSharp.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Assembly-CSharp-firstpass">
|
||||
<HintPath>..\..\..\..\StickFight_Data\Managed\Assembly-CSharp-firstpass.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Lidgren.Network">
|
||||
<HintPath>..\..\..\..\StickFight_Data\Managed\Lidgren.Network.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Mono.Security">
|
||||
<HintPath>..\..\..\..\StickFight_Data\Managed\Mono.Security.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="TextMeshPro-1.0.55.56.0b9">
|
||||
<HintPath>..\..\..\..\StickFight_Data\Managed\TextMeshPro-1.0.55.56.0b9.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine">
|
||||
<HintPath>..\..\..\..\StickFight_Data\Managed\UnityEngine.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.Analytics">
|
||||
<HintPath>..\..\..\..\StickFight_Data\Managed\UnityEngine.Analytics.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.Networking">
|
||||
<HintPath>..\..\..\..\StickFight_Data\Managed\UnityEngine.Networking.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.UI">
|
||||
<HintPath>..\..\..\..\StickFight_Data\Managed\UnityEngine.UI.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
|
||||
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
|
||||
<Exec Command="copy /Y $(TargetPath) $(ProjectDir)\..\..\..\..\BepInEx\plugins\$(TargetFileName)" />
|
||||
</Target>
|
||||
</Project>
|
||||
50
FixLocalForce/Logger.cs
Normal file
50
FixLocalForce/Logger.cs
Normal file
@@ -0,0 +1,50 @@
|
||||
global using static FixLocalForce.Logger;
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
|
||||
namespace FixLocalForce;
|
||||
|
||||
public static class Logger
|
||||
{
|
||||
public static void LogInfo(params object[] obj)
|
||||
{
|
||||
Plugin.Logger.LogInfo(string.Join(" ", obj.Select(o => o?.ToString() ?? "null").ToArray()));
|
||||
}
|
||||
|
||||
public static void LogMessage(params object[] obj)
|
||||
{
|
||||
Plugin.Logger.LogMessage(string.Join(" ", obj.Select(o => o?.ToString() ?? "null").ToArray()));
|
||||
}
|
||||
|
||||
public static void LogWarning(params object[] obj)
|
||||
{
|
||||
Plugin.Logger.LogWarning(string.Join(" ", obj.Select(o => o?.ToString() ?? "null").ToArray()));
|
||||
}
|
||||
|
||||
public static void LogError(params object[] obj)
|
||||
{
|
||||
Plugin.Logger.LogError(string.Join(" ", obj.Select(o => o?.ToString() ?? "null").ToArray()));
|
||||
}
|
||||
|
||||
public static void LogDebug(params object[] obj)
|
||||
{
|
||||
Plugin.Logger.LogDebug(GetPrefix() + string.Join(" ", obj.Select(o => o?.ToString() ?? "null").ToArray()));
|
||||
}
|
||||
|
||||
private static string GetPrefix()
|
||||
{
|
||||
var callerMethod = new StackFrame(2).GetMethod();
|
||||
var callerType = callerMethod?.DeclaringType;
|
||||
if (callerType is not null)
|
||||
{
|
||||
// string ns = callerType.Namespace??"";
|
||||
// int i = ns.LastIndexOf('.');
|
||||
// string substr = ns.Substring(i >= 0 ? i : 0);
|
||||
return $"[{callerType.Name}.{callerMethod.Name}] ";
|
||||
}
|
||||
|
||||
return "[Unknown method] ";
|
||||
}
|
||||
}
|
||||
32
FixLocalForce/PLugin.cs
Normal file
32
FixLocalForce/PLugin.cs
Normal file
@@ -0,0 +1,32 @@
|
||||
using System;
|
||||
using System.Reflection;
|
||||
using BepInEx;
|
||||
using BepInEx.Logging;
|
||||
using HarmonyLib;
|
||||
|
||||
namespace FixLocalForce;
|
||||
|
||||
|
||||
[BepInPlugin(PLUGIN_GUID, PLUGIN_NAME, PLUGIN_VERSION)]
|
||||
public class Plugin : BaseUnityPlugin
|
||||
{
|
||||
public const string PLUGIN_GUID = "stick.plugins.fixlocalforce";
|
||||
public const string PLUGIN_NAME = "FixLocalForce";
|
||||
public const string PLUGIN_VERSION = "0.0.1";
|
||||
|
||||
internal new static ManualLogSource Logger;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
Logger = base.Logger;
|
||||
LogMessage("FixLocalForce is loaded!");
|
||||
try
|
||||
{
|
||||
Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly());
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LogError(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
50
FixLocalForce/Patches/Patches.cs
Normal file
50
FixLocalForce/Patches/Patches.cs
Normal file
@@ -0,0 +1,50 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using System.Reflection.Emit;
|
||||
using HarmonyLib;
|
||||
using UnityEngine;
|
||||
|
||||
namespace FixLocalForce.Patches;
|
||||
|
||||
internal static class Patches
|
||||
{
|
||||
[HarmonyPatch(typeof(ProjectileCollision))]
|
||||
private static class ProjectileCollisionPatch
|
||||
{
|
||||
[HarmonyPatch("AddForce")]
|
||||
[HarmonyTranspiler]
|
||||
public static IEnumerable<CodeInstruction> AddForceTranspiler(IEnumerable<CodeInstruction> instructions)
|
||||
{
|
||||
return new CodeMatcher(instructions)
|
||||
.MatchForward(false,
|
||||
new CodeMatch(OpCodes.Call, AccessTools.Method(typeof(Vector3), "op_Multiply", [typeof(Vector3), typeof(float)])),
|
||||
new CodeMatch(OpCodes.Ldc_I4_1),
|
||||
new CodeMatch(OpCodes.Callvirt, AccessTools.Method(typeof(Rigidbody), "AddForce", [typeof(Vector3), typeof(ForceMode)]))
|
||||
)
|
||||
.Repeat(matcher =>
|
||||
{
|
||||
// 此时栈顶是计算完毕的 (a * d * damageScale) 或 (a2 * damageScale)
|
||||
// 光标在 Call op_Multiply 上,我们往下移一步,来到 ldc.i4.1 之前
|
||||
matcher.Advance(1);
|
||||
|
||||
// 插入:加载局部变量 a,并调用我们的 Helper 方法
|
||||
matcher.InsertAndAdvance(
|
||||
new CodeInstruction(OpCodes.Ldloc_0), // 将最原始的力 `a` (发给网络的那个包的数据) 压入栈
|
||||
new CodeInstruction(OpCodes.Call, AccessTools.Method(typeof(ProjectileCollisionPatch), nameof(GetAdjustedForce))) // 拦截替换
|
||||
);
|
||||
})
|
||||
.InstructionEnumeration();
|
||||
}
|
||||
|
||||
public static Vector3 GetAdjustedForce(Vector3 calculatedForce, Vector3 rawPacketForce)
|
||||
{
|
||||
// 在线模式不改变原始逻辑。
|
||||
if (MatchmakingHandler.IsNetworkMatch) return calculatedForce;
|
||||
|
||||
// 本地模式,复刻线上的 Bug
|
||||
// 直接返回未经衰减的 `a`,包括 Torso 那里错误复制粘贴的 `a`。
|
||||
return rawPacketForce;
|
||||
}
|
||||
}
|
||||
}
|
||||
9
FixLocalForce/Properties/launchSettings.json
Normal file
9
FixLocalForce/Properties/launchSettings.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"profiles": {
|
||||
"FixLocalForce": {
|
||||
"commandName": "Executable",
|
||||
"executablePath": "C:\\Windows\\System32\\cmd.exe",
|
||||
"commandLineArgs": "/c \"start steam://rungameid/674940\""
|
||||
}
|
||||
}
|
||||
}
|
||||
6
NuGet.config
Normal file
6
NuGet.config
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<packageSources>
|
||||
<add key="BepInEx" value="https://nuget.bepinex.dev/v3/index.json" />
|
||||
</packageSources>
|
||||
</configuration>
|
||||
Reference in New Issue
Block a user