0
0
mirror of https://github.com/sp-tarkov/modules.git synced 2025-02-12 16:50:43 -05:00

Added 2 missing patches

This commit is contained in:
Dev 2023-06-30 19:29:56 +01:00
parent 4fd2a48972
commit a62df7c9be
4 changed files with 101 additions and 1 deletions

View File

@ -7,7 +7,7 @@
<PropertyGroup>
<Company>Aki</Company>
<Copyright>Copyright @ Aki 2022</Copyright>
<Copyright>Copyright @ Aki 2023</Copyright>
</PropertyGroup>
<ItemGroup>
@ -17,6 +17,9 @@
<Reference Include="ItemComponent.Types" HintPath="..\Shared\Managed\ItemComponent.Types.dll" Private="False" />
<Reference Include="Comfort" HintPath="..\Shared\Managed\Comfort.dll" Private="False" />
<Reference Include="UnityEngine" HintPath="..\Shared\Managed\UnityEngine.dll" Private="False" />
<Reference Include="UnityEngine.AudioModule">
<HintPath>..\Shared\Managed\UnityEngine.AudioModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.CoreModule" HintPath="..\Shared\Managed\UnityEngine.CoreModule.dll" Private="False" />
</ItemGroup>

View File

@ -47,6 +47,8 @@ namespace Aki.SinglePlayer
new LighthouseBridgePatch().Enable();
new LighthouseTransmitterPatch().Enable();
new EmptyInfilFixPatch().Enable();
new SmokeGrenadeFuseSoundFixPatch().Enable();
new PlayerToggleSoundFixPatch().Enable();
}
catch (Exception ex)
{

View File

@ -0,0 +1,37 @@
using System.Reflection;
using Aki.Reflection.Patching;
using Comfort.Common;
using EFT;
using UnityEngine;
namespace Aki.SinglePlayer.Patches.RaidFix
{
/// <summary>
/// Fixes an issue with the visor toggle sound not following the player in offline raids
/// </summary>
public class PlayerToggleSoundFixPatch : ModulePatch
{
protected override MethodBase GetTargetMethod()
{
return typeof(Player).GetMethod("PlayToggleSound", BindingFlags.Instance | BindingFlags.NonPublic);
}
[PatchPrefix]
private static bool PatchPrefix(ref bool previousState, bool isOn, AudioClip toggleOn, AudioClip toggleOff, Player __instance)
{
// Don't change anything and execute original method if it's not the player that triggers the method
if (!__instance.IsYourPlayer)
{
return true;
}
if (previousState != isOn)
{
Singleton<BetterAudio>.Instance.PlayNonspatial(isOn ? toggleOn : toggleOff, BetterAudio.AudioSourceGroupType.Character);
}
previousState = isOn;
return false;
}
}
}

View File

@ -0,0 +1,58 @@
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Reflection.Emit;
using Aki.Reflection.CodeWrapper;
using Aki.Reflection.Patching;
using HarmonyLib;
using UnityEngine;
namespace Aki.SinglePlayer.Patches.RaidFix
{
/// <summary>
/// Fixes an issue with smoke grenades not playing the fuse popping sound when thrown
/// </summary>
public class SmokeGrenadeFuseSoundFixPatch : ModulePatch
{
protected override MethodBase GetTargetMethod()
{
return typeof(GrenadeEmission).GetMethod(nameof(GrenadeEmission.StartEmission));
}
[PatchTranspiler]
private static IEnumerable<CodeInstruction> PatchTranspile(IEnumerable<CodeInstruction> instructions)
{
var codes = new List<CodeInstruction>(instructions);
var searchCode = new CodeInstruction(OpCodes.Callvirt, AccessTools.Method(typeof(AudioClip), "get_length"));
var searchIndex = -1;
for (var i = 0; i < codes.Count; i++)
{
if (codes[i].opcode == searchCode.opcode && codes[i].operand == searchCode.operand)
{
searchIndex = i;
break;
}
}
if (searchIndex == -1)
{
Logger.LogError($"{nameof(SmokeGrenadeFuseSoundFixPatch)} failed: Could not find reference code.");
return instructions;
}
var newCodes = CodeGenerator.GenerateInstructions(new List<Code>
{
new Code(OpCodes.Ldarg_0),
new Code(OpCodes.Ldfld, typeof(GrenadeEmission), "betterSource_0"),
new Code(OpCodes.Ldfld, typeof(BetterSource), "source1"),
new Code(OpCodes.Callvirt, typeof(AudioSource), "Play")
});
searchIndex -= 4;
codes.InsertRange(searchIndex, newCodes);
return codes.AsEnumerable();
}
}
}