Stuff Patches

This commit is contained in:
2025-03-04 21:01:46 +02:00
parent 03127bd810
commit 8c887ae0e4
9 changed files with 160 additions and 7 deletions

View File

@@ -88,12 +88,14 @@
<Compile Include="Data\SpawnableManager.cs" />
<Compile Include="Data\Structs.cs" />
<Compile Include="Networking\Messages\DiscardSyncableMessage.cs" />
<Compile Include="Networking\Messages\GunSyncMessage.cs" />
<Compile Include="Networking\Messages\MagazineSyncMessage.cs" />
<Compile Include="Networking\Messages\ObjectDamageMessage.cs" />
<Compile Include="Networking\Messages\ObjectSyncMessage.cs" />
<Compile Include="Networking\Messages\OwnershipTransferMessage.cs" />
<Compile Include="Networking\Messages\RegisterSyncableMessage.cs" />
<Compile Include="Patching\CallPatchedMethod.cs" />
<Compile Include="Patching\DebugPatches.cs" />
<Compile Include="Patching\GripPatches.cs" />
<Compile Include="Patching\GunPatches.cs" />
<Compile Include="Patching\InteractableHostPatches.cs" />

View File

@@ -0,0 +1,60 @@
using BoneSync.Sync;
using BoneSync.Sync.Components;
using StressLevelZero.Combat;
using StressLevelZero.Props.Weapons;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BoneSync.Networking.Messages
{
public enum GunSyncMessageType
{
StateUpdate = 0,
Fire = 1,
}
public struct GunSyncInfo
{
public ushort syncId;
public BulletObject bulletObject;
public GunSyncMessageType messageType;
public Gun.HammerStates hammerState;
public Gun.CartridgeStates cartridgeState;
}
[PacketType(PacketType.GunSync)]
public class GunSyncMessage : NetworkMessage
{
GunSyncInfo gunSyncInfo;
public GunSyncMessage(GunSyncInfo gunSyncInfo)
{
this.gunSyncInfo = gunSyncInfo;
byteEncoder.WriteUShort(gunSyncInfo.syncId);
byteEncoder.WriteByte((byte)gunSyncInfo.messageType);
byteEncoder.WriteByte((byte)gunSyncInfo.hammerState);
byteEncoder.WriteByte((byte)gunSyncInfo.cartridgeState);
byteEncoder.WriteAmmoVariables(gunSyncInfo.bulletObject.ammoVariables);
}
public GunSyncMessage(Packet packet) {
byteEncoder.WriteBytes(packet.Data);
gunSyncInfo.syncId = byteEncoder.ReadUShort();
gunSyncInfo.messageType = (GunSyncMessageType)byteEncoder.ReadByte();
gunSyncInfo.hammerState = (Gun.HammerStates)byteEncoder.ReadByte();
gunSyncInfo.cartridgeState = (Gun.CartridgeStates)byteEncoder.ReadByte();
gunSyncInfo.bulletObject.ammoVariables = byteEncoder.ReadAmmoVariables();
}
public override void Execute()
{
Syncable syncable = ObjectSyncCache.GetSyncable(gunSyncInfo.syncId);
if (syncable == null) return;
syncable.OnWeaponSyncData(gunSyncInfo);
}
}
}

View File

@@ -17,5 +17,6 @@ namespace BoneSync.Networking
ObjectOwnership = 6,
DiscardSyncable = 7,
MagazineSync = 8,
GunSync = 9,
}
}

View File

@@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using HarmonyLib;
using StressLevelZero.AI;
using StressLevelZero.Combat;
using StressLevelZero.Pool;
using UnityEngine;
namespace BoneSync.Patching
{
[HarmonyPatch(typeof(PoolSpawner))]
internal class DebugPatches
{
// patch the static method "PoolSpawner.SpawnProjectile"
[HarmonyPatch(nameof(PoolSpawner.SpawnProjectile)), HarmonyPrefix]
private static void SpawnProjectilePrefix(Vector3 position, Quaternion rotation, BulletObject bulletObject, string weaponName, TriggerRefProxy proxy)
{
MelonLoader.MelonLogger.Msg("PoolSpawner.SpawnProjectile " + weaponName);
}
}
}

View File

@@ -3,6 +3,9 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using BoneSync.Networking.Messages;
using BoneSync.Sync;
using BoneSync.Sync.Components;
using HarmonyLib;
using StressLevelZero.Props.Weapons;
@@ -12,10 +15,46 @@ namespace BoneSync.Patching
[HarmonyPatch(typeof(Gun))]
public class GunPatches
{
[HarmonyPatch(nameof(Gun.Fire)), HarmonyPostfix]
public static void FirePatch(Gun __instance)
[HarmonyPatch(nameof(Gun.Fire)), HarmonyPrefix]
public static bool FirePatch(Gun __instance)
{
if (CallPatchedMethods.allowPatchedMethodCall) return true;
MelonLoader.MelonLogger.Msg("Gun fired: " + __instance.name);
if (!BoneSync.lobby.IsConnected()) return true;
Syncable syncable = ObjectSync.MakeOrGetSyncable(__instance.gameObject);
if (syncable == null) return true;
if (!syncable.Registered) return true;
if (syncable.isOwner)
{
GunSyncInfo gunSyncInfo = new GunSyncInfo()
{
cartridgeState = __instance.cartridgeState,
hammerState = __instance.hammerState,
syncId = syncable.GetSyncId(),
messageType = GunSyncMessageType.Fire,
};
GunSyncMessage gunSyncMessage = new GunSyncMessage(gunSyncInfo);
gunSyncMessage.Broadcast();
}
return true;
}
[HarmonyPatch(nameof(Gun.OnFire)), HarmonyPrefix]
public static bool OnFirePatch(Gun __instance)
{
if (CallPatchedMethods.allowPatchedMethodCall) return true;
MelonLoader.MelonLogger.Msg("Gun.OnFire: " + __instance.name);
if (!BoneSync.lobby.IsConnected()) return true;
Syncable syncable = ObjectSync.MakeOrGetSyncable(__instance.gameObject);
if (syncable == null) return true;
if (!syncable.Registered) return true;
return syncable.isOwner; // only allow owner to fire
}
}

View File

@@ -6,6 +6,7 @@ using System.Threading.Tasks;
using BoneSync.Sync.Components;
using HarmonyLib;
using MelonLoader;
using StressLevelZero.Pool;
using StressLevelZero.Zones;
namespace BoneSync.Patching

View File

@@ -113,6 +113,8 @@ namespace BoneSync.Sync.Components
private AIBrain aiBrain;
private PuppetMaster puppetMaster;
private PullDevice pullDevice;
private SpawnFragment spawnFragment;
private void CheckAutoSync()
@@ -170,6 +172,7 @@ namespace BoneSync.Sync.Components
{
ObjectSyncCache.RemoveSyncable(this);
pullDevice = GetComponent<PullDevice>();
interactableManager = GetComponent<InteractableHostManager>();
interactableHost = GetComponent<InteractableHost>();
poolee = GetComponent<Poolee>();
@@ -243,11 +246,6 @@ namespace BoneSync.Sync.Components
if (despawn) MelonCoroutines.Start(DespawnSyncable());
}
private void OnRegister()
{
}
public void OnDestroy()
{
if (Registered)

View File

@@ -2,6 +2,7 @@
using BoneSync.Networking;
using BoneSync.Networking.Messages;
using BoneSync.Patching;
using Facepunch.Steamworks;
using MelonLoader;
using System;
using System.Collections.Generic;
@@ -9,10 +10,23 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.Events;
namespace BoneSync.Sync.Components
{
public partial class Syncable : MonoBehaviour
{
private bool pullDevicePatched = false;
void OnPull()
{
MelonLogger.Msg("OnPull");
}
private void _TryPatchPullDevice()
{
if (pullDevicePatched) return;
if (!pullDevice) return;
pullDevice.OnHandlePull.AddListener((UnityAction)OnPull);
}
public bool AllRigidbodiesSleeping()
{

View File

@@ -43,5 +43,19 @@ namespace BoneSync.Sync.Components
MagazineSyncMessage message = new MagazineSyncMessage(data);
message.Broadcast();
}
public void OnWeaponSyncData(GunSyncInfo gunSyncInfo)
{
if (!gun) return;
gun.chamberedCartridge = gunSyncInfo.bulletObject;
gun.cartridgeState = gunSyncInfo.cartridgeState;
gun.hammerState = gunSyncInfo.hammerState;
if (gunSyncInfo.messageType == GunSyncMessageType.Fire)
{
gun.Fire();
}
}
}
}