diff --git a/BoneSync/Networking/Messages/GunSyncMessage.cs b/BoneSync/Networking/Messages/GunSyncMessage.cs index df19d02..877873f 100644 --- a/BoneSync/Networking/Messages/GunSyncMessage.cs +++ b/BoneSync/Networking/Messages/GunSyncMessage.cs @@ -38,6 +38,7 @@ namespace BoneSync.Networking.Messages byteEncoder.WriteByte((byte)gunSyncInfo.messageType); byteEncoder.WriteByte((byte)gunSyncInfo.hammerState); byteEncoder.WriteByte((byte)gunSyncInfo.cartridgeState); + byteEncoder.WriteBool(gunSyncInfo.bulletObject != null); byteEncoder.WriteAmmoVariables(gunSyncInfo.bulletObject.ammoVariables); } @@ -48,14 +49,19 @@ namespace BoneSync.Networking.Messages gunSyncInfo.messageType = (GunSyncMessageType)byteEncoder.ReadByte(); gunSyncInfo.hammerState = (Gun.HammerStates)byteEncoder.ReadByte(); gunSyncInfo.cartridgeState = (Gun.CartridgeStates)byteEncoder.ReadByte(); - gunSyncInfo.bulletObject.ammoVariables = byteEncoder.ReadAmmoVariables(); + if (byteEncoder.ReadBool()) { // If bulletObject is not null + gunSyncInfo.bulletObject = new BulletObject() + { + ammoVariables = byteEncoder.ReadAmmoVariables() + }; + } } public override void Execute() { Syncable syncable = ObjectSyncCache.GetSyncable(gunSyncInfo.syncId); if (syncable == null) return; - MelonLogger.Msg("GunSyncMessage.Execute: " + gunSyncInfo.syncId + ":" + syncable.name); + MelonLogger.Msg("GunSyncMessage.Execute: " + gunSyncInfo.syncId + ":" + syncable.name + " hasBulletObject: " + (gunSyncInfo.bulletObject != null)); syncable.OnWeaponSyncData(gunSyncInfo); } } diff --git a/BoneSync/Patching/GunPatches.cs b/BoneSync/Patching/GunPatches.cs index 354bff7..78b3dd0 100644 --- a/BoneSync/Patching/GunPatches.cs +++ b/BoneSync/Patching/GunPatches.cs @@ -24,15 +24,14 @@ namespace BoneSync.Patching [HarmonyPatch(nameof(Gun.OnFire)), HarmonyPrefix] - public static bool OnFirePatch(Gun __instance) + public static void OnFirePatch(Gun __instance) { - if (CallPatchedMethods.allowPatchedMethodCall) return true; // this patch should always be called MelonLoader.MelonLogger.Msg("Gun.OnFire: " + __instance.name); - if (!BoneSync.lobby.IsConnected()) return true; + if (!BoneSync.lobby.IsConnected()) return; Syncable syncable = ObjectSync.MakeOrGetSyncable(__instance.gameObject); - if (syncable == null) return true; - if (!syncable.Registered) return true; + if (syncable == null) return; + if (!syncable.Registered) return; if (syncable.isOwner) { MelonLogger.Msg("Gun.OnFire: " + __instance.name + " is owner"); @@ -49,7 +48,7 @@ namespace BoneSync.Patching gunSyncMessage.Broadcast(); MelonLogger.Msg("Gun.OnFire: " + __instance.name + " sent message"); } - return true; + return; } } diff --git a/BoneSync/Sync/Components/SyncableProperties.cs b/BoneSync/Sync/Components/SyncableProperties.cs index 7628d26..953cf4a 100644 --- a/BoneSync/Sync/Components/SyncableProperties.cs +++ b/BoneSync/Sync/Components/SyncableProperties.cs @@ -1,6 +1,7 @@ using BoneSync.Networking.Messages; using BoneSync.Patching; using StressLevelZero.Combat; +using StressLevelZero.Pool; using System; using System.Collections.Generic; using System.Linq; @@ -13,6 +14,12 @@ namespace BoneSync.Sync.Components public partial class Syncable : MonoBehaviour { + private void StripDamage(ref BulletObject bulletObject) + { + AmmoVariables ammoVariables = bulletObject.ammoVariables; + ammoVariables.AttackDamage = 0f; + bulletObject.ammoVariables = ammoVariables; + } private void _SendAttributeSync() { if (!isOwner) return; @@ -55,7 +62,16 @@ namespace BoneSync.Sync.Components if (gunSyncInfo.messageType == GunSyncMessageType.Fire) { - CallPatchedMethods.FireGun(gun); + gun.gunSFX?.GunShot(); + Transform firepointTransform = gun.firePointTransform; + Vector3 position = firepointTransform.position; + Quaternion rotation = firepointTransform.rotation; + BulletObject bulletObject = gunSyncInfo.bulletObject; + StripDamage(ref bulletObject); + gun.EjectCartridge(); + //PoolSpawner.SpawnProjectile(position, rotation, gunSyncInfo.bulletObject, "1911", null); + PoolSpawner.SpawnMuzzleFlare(position, rotation, PoolSpawner.MuzzleFlareType.Default); + } } }