Stuff Patches
This commit is contained in:
@@ -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" />
|
||||
|
||||
60
BoneSync/Networking/Messages/GunSyncMessage.cs
Normal file
60
BoneSync/Networking/Messages/GunSyncMessage.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -17,5 +17,6 @@ namespace BoneSync.Networking
|
||||
ObjectOwnership = 6,
|
||||
DiscardSyncable = 7,
|
||||
MagazineSync = 8,
|
||||
GunSync = 9,
|
||||
}
|
||||
}
|
||||
|
||||
24
BoneSync/Patching/DebugPatches.cs
Normal file
24
BoneSync/Patching/DebugPatches.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
{
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user