more gun sync stuff

This commit is contained in:
Aaro Varis
2025-03-08 00:16:26 +02:00
parent 0030f68f99
commit c0e912be87
3 changed files with 30 additions and 9 deletions

View File

@@ -38,6 +38,7 @@ namespace BoneSync.Networking.Messages
byteEncoder.WriteByte((byte)gunSyncInfo.messageType); byteEncoder.WriteByte((byte)gunSyncInfo.messageType);
byteEncoder.WriteByte((byte)gunSyncInfo.hammerState); byteEncoder.WriteByte((byte)gunSyncInfo.hammerState);
byteEncoder.WriteByte((byte)gunSyncInfo.cartridgeState); byteEncoder.WriteByte((byte)gunSyncInfo.cartridgeState);
byteEncoder.WriteBool(gunSyncInfo.bulletObject != null);
byteEncoder.WriteAmmoVariables(gunSyncInfo.bulletObject.ammoVariables); byteEncoder.WriteAmmoVariables(gunSyncInfo.bulletObject.ammoVariables);
} }
@@ -48,14 +49,19 @@ namespace BoneSync.Networking.Messages
gunSyncInfo.messageType = (GunSyncMessageType)byteEncoder.ReadByte(); gunSyncInfo.messageType = (GunSyncMessageType)byteEncoder.ReadByte();
gunSyncInfo.hammerState = (Gun.HammerStates)byteEncoder.ReadByte(); gunSyncInfo.hammerState = (Gun.HammerStates)byteEncoder.ReadByte();
gunSyncInfo.cartridgeState = (Gun.CartridgeStates)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() public override void Execute()
{ {
Syncable syncable = ObjectSyncCache.GetSyncable(gunSyncInfo.syncId); Syncable syncable = ObjectSyncCache.GetSyncable(gunSyncInfo.syncId);
if (syncable == null) return; 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); syncable.OnWeaponSyncData(gunSyncInfo);
} }
} }

View File

@@ -24,15 +24,14 @@ namespace BoneSync.Patching
[HarmonyPatch(nameof(Gun.OnFire)), HarmonyPrefix] [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); MelonLoader.MelonLogger.Msg("Gun.OnFire: " + __instance.name);
if (!BoneSync.lobby.IsConnected()) return true; if (!BoneSync.lobby.IsConnected()) return;
Syncable syncable = ObjectSync.MakeOrGetSyncable(__instance.gameObject); Syncable syncable = ObjectSync.MakeOrGetSyncable(__instance.gameObject);
if (syncable == null) return true; if (syncable == null) return;
if (!syncable.Registered) return true; if (!syncable.Registered) return;
if (syncable.isOwner) if (syncable.isOwner)
{ {
MelonLogger.Msg("Gun.OnFire: " + __instance.name + " is owner"); MelonLogger.Msg("Gun.OnFire: " + __instance.name + " is owner");
@@ -49,7 +48,7 @@ namespace BoneSync.Patching
gunSyncMessage.Broadcast(); gunSyncMessage.Broadcast();
MelonLogger.Msg("Gun.OnFire: " + __instance.name + " sent message"); MelonLogger.Msg("Gun.OnFire: " + __instance.name + " sent message");
} }
return true; return;
} }
} }

View File

@@ -1,6 +1,7 @@
using BoneSync.Networking.Messages; using BoneSync.Networking.Messages;
using BoneSync.Patching; using BoneSync.Patching;
using StressLevelZero.Combat; using StressLevelZero.Combat;
using StressLevelZero.Pool;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@@ -13,6 +14,12 @@ namespace BoneSync.Sync.Components
public partial class Syncable : MonoBehaviour public partial class Syncable : MonoBehaviour
{ {
private void StripDamage(ref BulletObject bulletObject)
{
AmmoVariables ammoVariables = bulletObject.ammoVariables;
ammoVariables.AttackDamage = 0f;
bulletObject.ammoVariables = ammoVariables;
}
private void _SendAttributeSync() private void _SendAttributeSync()
{ {
if (!isOwner) return; if (!isOwner) return;
@@ -55,7 +62,16 @@ namespace BoneSync.Sync.Components
if (gunSyncInfo.messageType == GunSyncMessageType.Fire) 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);
} }
} }
} }