Stuff Patches
This commit is contained in:
@@ -88,12 +88,14 @@
|
|||||||
<Compile Include="Data\SpawnableManager.cs" />
|
<Compile Include="Data\SpawnableManager.cs" />
|
||||||
<Compile Include="Data\Structs.cs" />
|
<Compile Include="Data\Structs.cs" />
|
||||||
<Compile Include="Networking\Messages\DiscardSyncableMessage.cs" />
|
<Compile Include="Networking\Messages\DiscardSyncableMessage.cs" />
|
||||||
|
<Compile Include="Networking\Messages\GunSyncMessage.cs" />
|
||||||
<Compile Include="Networking\Messages\MagazineSyncMessage.cs" />
|
<Compile Include="Networking\Messages\MagazineSyncMessage.cs" />
|
||||||
<Compile Include="Networking\Messages\ObjectDamageMessage.cs" />
|
<Compile Include="Networking\Messages\ObjectDamageMessage.cs" />
|
||||||
<Compile Include="Networking\Messages\ObjectSyncMessage.cs" />
|
<Compile Include="Networking\Messages\ObjectSyncMessage.cs" />
|
||||||
<Compile Include="Networking\Messages\OwnershipTransferMessage.cs" />
|
<Compile Include="Networking\Messages\OwnershipTransferMessage.cs" />
|
||||||
<Compile Include="Networking\Messages\RegisterSyncableMessage.cs" />
|
<Compile Include="Networking\Messages\RegisterSyncableMessage.cs" />
|
||||||
<Compile Include="Patching\CallPatchedMethod.cs" />
|
<Compile Include="Patching\CallPatchedMethod.cs" />
|
||||||
|
<Compile Include="Patching\DebugPatches.cs" />
|
||||||
<Compile Include="Patching\GripPatches.cs" />
|
<Compile Include="Patching\GripPatches.cs" />
|
||||||
<Compile Include="Patching\GunPatches.cs" />
|
<Compile Include="Patching\GunPatches.cs" />
|
||||||
<Compile Include="Patching\InteractableHostPatches.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,
|
ObjectOwnership = 6,
|
||||||
DiscardSyncable = 7,
|
DiscardSyncable = 7,
|
||||||
MagazineSync = 8,
|
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.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using BoneSync.Networking.Messages;
|
||||||
|
using BoneSync.Sync;
|
||||||
|
using BoneSync.Sync.Components;
|
||||||
using HarmonyLib;
|
using HarmonyLib;
|
||||||
using StressLevelZero.Props.Weapons;
|
using StressLevelZero.Props.Weapons;
|
||||||
|
|
||||||
@@ -12,10 +15,46 @@ namespace BoneSync.Patching
|
|||||||
[HarmonyPatch(typeof(Gun))]
|
[HarmonyPatch(typeof(Gun))]
|
||||||
public class GunPatches
|
public class GunPatches
|
||||||
{
|
{
|
||||||
[HarmonyPatch(nameof(Gun.Fire)), HarmonyPostfix]
|
[HarmonyPatch(nameof(Gun.Fire)), HarmonyPrefix]
|
||||||
public static void FirePatch(Gun __instance)
|
public static bool FirePatch(Gun __instance)
|
||||||
{
|
{
|
||||||
|
if (CallPatchedMethods.allowPatchedMethodCall) return true;
|
||||||
MelonLoader.MelonLogger.Msg("Gun fired: " + __instance.name);
|
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 BoneSync.Sync.Components;
|
||||||
using HarmonyLib;
|
using HarmonyLib;
|
||||||
using MelonLoader;
|
using MelonLoader;
|
||||||
|
using StressLevelZero.Pool;
|
||||||
using StressLevelZero.Zones;
|
using StressLevelZero.Zones;
|
||||||
|
|
||||||
namespace BoneSync.Patching
|
namespace BoneSync.Patching
|
||||||
|
|||||||
@@ -113,6 +113,8 @@ namespace BoneSync.Sync.Components
|
|||||||
private AIBrain aiBrain;
|
private AIBrain aiBrain;
|
||||||
private PuppetMaster puppetMaster;
|
private PuppetMaster puppetMaster;
|
||||||
|
|
||||||
|
private PullDevice pullDevice;
|
||||||
|
|
||||||
private SpawnFragment spawnFragment;
|
private SpawnFragment spawnFragment;
|
||||||
|
|
||||||
private void CheckAutoSync()
|
private void CheckAutoSync()
|
||||||
@@ -170,6 +172,7 @@ namespace BoneSync.Sync.Components
|
|||||||
{
|
{
|
||||||
ObjectSyncCache.RemoveSyncable(this);
|
ObjectSyncCache.RemoveSyncable(this);
|
||||||
|
|
||||||
|
pullDevice = GetComponent<PullDevice>();
|
||||||
interactableManager = GetComponent<InteractableHostManager>();
|
interactableManager = GetComponent<InteractableHostManager>();
|
||||||
interactableHost = GetComponent<InteractableHost>();
|
interactableHost = GetComponent<InteractableHost>();
|
||||||
poolee = GetComponent<Poolee>();
|
poolee = GetComponent<Poolee>();
|
||||||
@@ -243,11 +246,6 @@ namespace BoneSync.Sync.Components
|
|||||||
if (despawn) MelonCoroutines.Start(DespawnSyncable());
|
if (despawn) MelonCoroutines.Start(DespawnSyncable());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnRegister()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void OnDestroy()
|
public void OnDestroy()
|
||||||
{
|
{
|
||||||
if (Registered)
|
if (Registered)
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
using BoneSync.Networking;
|
using BoneSync.Networking;
|
||||||
using BoneSync.Networking.Messages;
|
using BoneSync.Networking.Messages;
|
||||||
using BoneSync.Patching;
|
using BoneSync.Patching;
|
||||||
|
using Facepunch.Steamworks;
|
||||||
using MelonLoader;
|
using MelonLoader;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@@ -9,10 +10,23 @@ using System.Linq;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
using UnityEngine.Events;
|
||||||
namespace BoneSync.Sync.Components
|
namespace BoneSync.Sync.Components
|
||||||
{
|
{
|
||||||
public partial class Syncable : MonoBehaviour
|
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()
|
public bool AllRigidbodiesSleeping()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -43,5 +43,19 @@ namespace BoneSync.Sync.Components
|
|||||||
MagazineSyncMessage message = new MagazineSyncMessage(data);
|
MagazineSyncMessage message = new MagazineSyncMessage(data);
|
||||||
message.Broadcast();
|
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