More Networking stuff

This commit is contained in:
2025-02-28 12:20:55 +02:00
parent ff70bad234
commit 1dce1960f6
8 changed files with 92 additions and 43 deletions

View File

@@ -116,6 +116,7 @@
<Compile Include="Networking\Messages\ObjectDamageMessage.cs" />
<Compile Include="Networking\Messages\ObjectSyncMessage.cs" />
<Compile Include="Networking\Messages\RegisterSyncableMessage.cs" />
<Compile Include="Patching\CallPatchedMethod.cs" />
<Compile Include="Patching\InteractableHostPatches.cs" />
<Compile Include="Patching\ObjectHealthPatches.cs" />
<Compile Include="Sync\Components\SyncableBase.cs" />

View File

@@ -194,5 +194,23 @@ namespace BoneSync.Networking
WriteEnum(attack.attackType);
WriteFloat(attack.damage);
}
public void WriteMatrix4x4(UnityEngine.Matrix4x4 matrix)
{
for (int i = 0; i < 16; i++)
{
WriteFloat(matrix[i]);
}
}
public UnityEngine.Matrix4x4 ReadMatrix4x4()
{
UnityEngine.Matrix4x4 matrix = new UnityEngine.Matrix4x4();
for (int i = 0; i < 16; i++)
{
matrix[i] = ReadFloat();
}
return matrix;
}
}
}

View File

@@ -0,0 +1,42 @@
using StressLevelZero.Combat;
using StressLevelZero.Pool;
using StressLevelZero.Props;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
namespace BoneSync.Patching
{
public static class CallPatchedMethods
{
public static bool allowPatchedMethodCall
{
private set;
get;
}
public static void TakeDamage(ObjectDestructable __instance, ref Vector3 normal, ref float damage, ref bool crit, ref AttackType attackType)
{
allowPatchedMethodCall = true;
__instance.TakeDamage(normal, damage, crit, attackType);
allowPatchedMethodCall = false;
}
public static void TakeDamage(Prop_Health __instance, ref float damage, ref bool crit, ref AttackType attackType)
{
allowPatchedMethodCall = true;
__instance.TAKEDAMAGE(damage, crit, attackType);
allowPatchedMethodCall = false;
}
public static GameObject PoolSpawn(Pool __instance, ref Vector3 position, ref Quaternion rotation, ref Il2CppSystem.Nullable<Vector3> scale, ref Il2CppSystem.Nullable<bool> autoEnable)
{
allowPatchedMethodCall = true;
GameObject result = __instance.Spawn(position, rotation, scale, autoEnable);
allowPatchedMethodCall = false;
return result;
}
}
}

View File

@@ -14,28 +14,6 @@ using UnityEngine;
namespace BoneSync.Patching
{
public static class CallPatchedMethods
{
public static bool allowDamageMethodCall
{
private set;
get;
}
public static void TakeDamage(ObjectDestructable __instance, ref Vector3 normal, ref float damage, ref bool crit, ref AttackType attackType)
{
allowDamageMethodCall = true;
__instance.TakeDamage(normal, damage, crit, attackType);
allowDamageMethodCall = false;
}
public static void TakeDamage(Prop_Health __instance, ref float damage, ref bool crit, ref AttackType attackType)
{
allowDamageMethodCall = true;
__instance.TAKEDAMAGE(damage, crit, attackType);
allowDamageMethodCall = false;
}
}
[HarmonyPatch(typeof(ObjectDestructable))]
public class ObjectDestructablePatches
{
@@ -43,7 +21,7 @@ namespace BoneSync.Patching
[HarmonyPrefix]
private static bool TakeDamagePatch(ObjectDestructable __instance, ref Vector3 normal, ref float damage, ref bool crit, ref AttackType attackType)
{
if (CallPatchedMethods.allowDamageMethodCall) return true;
if (CallPatchedMethods.allowPatchedMethodCall) return true;
MelonLoader.MelonLogger.Msg("ObjectDestructable.TakeDamage: " + damage);
Syncable syncable = ObjectSync.GetSyncableFromCache(__instance.gameObject);
if (syncable != null)
@@ -67,7 +45,7 @@ namespace BoneSync.Patching
[HarmonyPrefix]
private static bool TakeDamagePatch(Prop_Health __instance, ref float damage, ref bool crit, ref AttackType attackType)
{
if (CallPatchedMethods.allowDamageMethodCall) return true;
if (CallPatchedMethods.allowPatchedMethodCall) return true;
MelonLoader.MelonLogger.Msg("Prop_Health.TAKEDAMAGE: " + damage);
Syncable syncable = ObjectSync.GetSyncableFromCache(__instance.gameObject);
if (syncable != null)

View File

@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using HarmonyLib;
@@ -11,31 +12,31 @@ using UnityEngine;
namespace BoneSync.Patching
{
/*
[HarmonyPatch(typeof(Pool))]
internal class PoolPatches
{
[HarmonyPatch(nameof(Pool.Spawn))]
[HarmonyPostfix]
private static void SpawnPatch(Pool __instance, ref GameObject __result)
private static void SpawnPatchPost(Pool __instance, ref GameObject __result)
{
MelonLogger.Msg("Spawned object: " + __result.name);
//MelonLogger.Msg("Spawned object: " + __result.name);
}
[HarmonyPatch(nameof(Pool.FlagPooleeForRespawn))]
[HarmonyPostfix]
private static void FlagPooleeForRespawnPatch(Pool __instance, ref GameObject p)
[HarmonyPatch(nameof(Pool.Spawn))]
[HarmonyPrefix]
private static bool SpawnPatchPre(Pool __instance, ref Vector3 position, ref Quaternion rotation, ref Il2CppSystem.Nullable<Vector3> scale, ref Il2CppSystem.Nullable<bool> autoEnable)
{
MelonLogger.Msg("Flagged object for respawn: " + p.name);
if (CallPatchedMethods.allowPatchedMethodCall) return true;
if (BoneSync.lobby.IsConnected())
{
MelonLogger.Msg("Patched Spawning object in pool: " + __instance.name);
return false;
}
[HarmonyPatch(nameof(Pool.InstantiatePoolee))]
[HarmonyPostfix]
private static void InstantiatePooleePatch(Pool __instance, ref Poolee __result)
{
MelonLogger.Msg("Instantiated object: " + __result.name);
return true;
}
}*/
}
}

View File

@@ -15,6 +15,9 @@ using System.Collections;
using StressLevelZero.Props;
using BoneSync.Patching;
using StressLevelZero.Props.Weapons;
using StressLevelZero.AI;
using PuppetMasta;
using UnityEngine.SceneManagement;
namespace BoneSync.Sync.Components
@@ -105,14 +108,13 @@ namespace BoneSync.Sync.Components
private Plug[] plugs;
private AIBrain aiBrain;
private PuppetMaster puppetMaster;
public void OnEnable()
{
FindComponents();
MelonLogger.Msg("Syncable enabled: " + transform.GetPath());
}
public string GetSyncableWorldPath()

View File

@@ -73,7 +73,8 @@ namespace BoneSync.Sync.Components
private void UpdateTransformList()
{
Rigidbody[] rbs = UpdateRigidbodyList();
// get non-null rigidbodies
Rigidbody[] rbs = UpdateRigidbodyList().Where(rb => rb != null).ToArray();
rigidbodies = rbs;
_transforms = rbs.Select(rb => rb.transform).ToArray();
}
@@ -82,5 +83,7 @@ namespace BoneSync.Sync.Components
{
SetKinematic(_ownerId != BoneSync.lobby.GetLocalId() && Registered);
}
// on collision
}
}

View File

@@ -9,6 +9,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.SceneManagement;
namespace BoneSync.Sync
{
@@ -87,6 +88,9 @@ namespace BoneSync.Sync
}
private static Syncable _MakeOrGetSyncable(GameObject gameObject, bool deleteSubSyncabled = true)
{
//Scene scene = gameObject.scene;
//MelonLogger.Msg("Making or getting syncable for: " + gameObject.name + " in scene: " + scene.name);
Syncable[] subSyncables = gameObject.GetComponentsInChildren<Syncable>();
Syncable syncable = gameObject.GetComponent<Syncable>();