diff --git a/SellDoor/Helpers/BarricadeHelper.cs b/SellDoor/Helpers/BarricadeHelper.cs index d849a47..a72e12f 100644 --- a/SellDoor/Helpers/BarricadeHelper.cs +++ b/SellDoor/Helpers/BarricadeHelper.cs @@ -1,4 +1,5 @@ using SDG.Unturned; +using Steamworks; using System; using System.Collections.Generic; using System.Linq; @@ -20,12 +21,18 @@ public static BarricadeDrop FindBarricadeDrop(Guid assetGuid, Vector3 point) foreach (Transform result in results) { - BarricadeDrop barricadeDrop = BarricadeManager.FindBarricadeByRootTransform(result); - BarricadeData barricadeData = barricadeDrop.GetServersideData(); - - if (barricadeData.point == point && barricadeDrop.asset.GUID == assetGuid) + NetId netId = NetIdRegistry.GetTransformNetId(result); + if (netId == NetId.INVALID) + continue; + netId.id--; + BarricadeDrop drop = NetIdRegistry.Get(netId); + if (drop == null) + continue; + + BarricadeData barricadeData = drop.GetServersideData(); + if (barricadeData.point == point && drop.asset.GUID == assetGuid) { - return barricadeDrop; + return drop; } } @@ -41,7 +48,11 @@ public static BarricadeDrop ForceDropBarricade(ItemBarricadeAsset asset, Vector3 Transform transform = BarricadeManager.dropNonPlantedBarricade(barricade, point, rotation, owner, group); - return BarricadeManager.FindBarricadeByRootTransform(transform); + NetId netId = NetIdRegistry.GetTransformNetId(transform); + if (netId == NetId.INVALID) + return null; + netId.id--; + return NetIdRegistry.Get(netId); } } } diff --git a/SellDoor/Helpers/RaycastHelper.cs b/SellDoor/Helpers/RaycastHelper.cs index b6d0896..495c5e6 100644 --- a/SellDoor/Helpers/RaycastHelper.cs +++ b/SellDoor/Helpers/RaycastHelper.cs @@ -1,4 +1,5 @@ using SDG.Unturned; +using Steamworks; using System.Collections.Generic; using UnityEngine; @@ -22,7 +23,12 @@ public static Transform GetBarricadeTransform(Player player, out BarricadeData b transform = door.transform; } - drop = BarricadeManager.FindBarricadeByRootTransform(transform); + NetId netId = NetIdRegistry.GetTransformNetId(transform); + if (netId == NetId.INVALID) + return null; + netId.id--; + drop = NetIdRegistry.Get(netId); + if (drop != null) { barricadeData = drop.GetServersideData(); @@ -40,7 +46,11 @@ public static Transform GetStructureTransform(Player player, out StructureData s Ray ray = new Ray(player.look.aim.position, player.look.aim.forward); if (Physics.Raycast(ray, out hit, 3, RayMasks.STRUCTURE_INTERACT)) { - StructureDrop drop = StructureManager.FindStructureByRootTransform(hit.transform); + NetId netId = NetIdRegistry.GetTransformNetId(hit.transform); + if (netId == NetId.INVALID) + return null; + netId.id--; + StructureDrop drop = NetIdRegistry.Get(netId); if (drop != null) { structureData = drop.GetServersideData(); @@ -62,7 +72,13 @@ public static Transform GetBarricadeTransform(Vector3 position) { if (transform.position == position) { - return BarricadeManager.FindBarricadeByRootTransform(transform)?.model ?? null; + NetId netId = NetIdRegistry.GetTransformNetId(transform); + if (netId == NetId.INVALID) + continue; + netId.id--; + BarricadeDrop drop = NetIdRegistry.Get(netId); + if (drop != null) + return drop.model; } } return null; @@ -79,7 +95,13 @@ public static Transform GetStructureTransform(Vector3 position) { if (transform.position == position) { - return StructureManager.FindStructureByRootTransform(transform)?.model ?? null; + NetId netId = NetIdRegistry.GetTransformNetId(transform); + if (netId == NetId.INVALID) + continue; + netId.id--; + StructureDrop drop = NetIdRegistry.Get(netId); + if (drop != null) + return drop.model; } } diff --git a/SellDoor/Helpers/StructureHelper.cs b/SellDoor/Helpers/StructureHelper.cs index e7fe7d1..1f263f8 100644 --- a/SellDoor/Helpers/StructureHelper.cs +++ b/SellDoor/Helpers/StructureHelper.cs @@ -1,34 +1,10 @@ -using SDG.Unturned; -using System; -using System.Collections.Generic; +using SDG.Unturned; using UnityEngine; namespace RestoreMonarchy.SellDoor.Helpers { public class StructureHelper { - public static StructureDrop FindStructureDropByPosition(Guid assetGuid, Vector3 point) - { - List regions = new(); - Regions.getRegionsInRadius(point, 0.1f, regions); - - List results = new(); - StructureManager.getStructuresInRadius(point, 0.1f, regions, results); - - foreach (Transform result in results) - { - StructureDrop structureDrop = StructureManager.FindStructureByRootTransform(result); - StructureData structureData = structureDrop.GetServersideData(); - - if (structureData.point == point && structureDrop.asset.GUID == assetGuid) - { - return structureDrop; - } - } - - return null; - } - public static StructureDrop ForceDropStructure(ItemStructureAsset asset, Vector3 point, Vector3 angle, ulong owner, ulong group) { Structure structure = new(asset, asset.health); @@ -36,7 +12,9 @@ public static StructureDrop ForceDropStructure(ItemStructureAsset asset, Vector3 StructureManager.dropReplicatedStructure(structure, point, rotation, owner, group); - return FindStructureDropByPosition(asset.GUID, point); + // dropReplicatedStructure goes through ClaimBlock(2u): drop is at counter-1, transform at counter. + NetId dropNetId = new NetId(NetIdRegistry.counter - 1); + return NetIdRegistry.Get(dropNetId); } } } diff --git a/SellDoor/Models/Door.cs b/SellDoor/Models/Door.cs index 642fefe..beff061 100644 --- a/SellDoor/Models/Door.cs +++ b/SellDoor/Models/Door.cs @@ -39,7 +39,11 @@ public bool TryGetDoorOwners(out CSteamID steamID, out CSteamID groupID) { steamID = CSteamID.Nil; groupID = CSteamID.Nil; - BarricadeDrop drop = BarricadeManager.FindBarricadeByRootTransform(Transform); + NetId netId = NetIdRegistry.GetTransformNetId(Transform); + if (netId == NetId.INVALID) + return false; + netId.id--; + BarricadeDrop drop = NetIdRegistry.Get(netId); if (drop == null) { return false; diff --git a/SellDoor/Models/DoorItem.cs b/SellDoor/Models/DoorItem.cs index 2ec7b32..ed05014 100644 --- a/SellDoor/Models/DoorItem.cs +++ b/SellDoor/Models/DoorItem.cs @@ -1,5 +1,6 @@ using SDG.Unturned; using Steamworks; +using UnityEngine; namespace RestoreMonarchy.SellDoor.Models { @@ -29,7 +30,11 @@ public void UpdateSign(string text) return; } - BarricadeDrop drop = BarricadeManager.FindBarricadeByRootTransform(Transform); + NetId netId = NetIdRegistry.GetTransformNetId(Transform); + if (netId == NetId.INVALID) + return; + netId.id--; + BarricadeDrop drop = NetIdRegistry.Get(netId); if (drop == null) { return; diff --git a/SellDoor/Models/TransformBase.cs b/SellDoor/Models/TransformBase.cs index 3708323..0897de5 100644 --- a/SellDoor/Models/TransformBase.cs +++ b/SellDoor/Models/TransformBase.cs @@ -25,19 +25,24 @@ public void UpdatePosition() if (AssetId == null) { - BarricadeDrop drop = BarricadeManager.FindBarricadeByRootTransform(Transform); - if (drop != null) + NetId netId = NetIdRegistry.GetTransformNetId(Transform); + if (netId != NetId.INVALID) { - AssetId = drop.asset.GUID; - AssetName = drop.asset.itemName; - } - else - { - StructureDrop structureDrop = StructureManager.FindStructureByRootTransform(Transform); + netId.id--; + BarricadeDrop drop = NetIdRegistry.Get(netId); if (drop != null) { - AssetId = structureDrop.asset.GUID; - AssetName = structureDrop.asset.itemName; + AssetId = drop.asset.GUID; + AssetName = drop.asset.itemName; + } + else + { + StructureDrop structureDrop = NetIdRegistry.Get(netId); + if (structureDrop != null) + { + AssetId = structureDrop.asset.GUID; + AssetName = structureDrop.asset.itemName; + } } } } diff --git a/SellDoor/SellDoor.csproj b/SellDoor/SellDoor.csproj index 1a6339e..1fa365c 100644 --- a/SellDoor/SellDoor.csproj +++ b/SellDoor/SellDoor.csproj @@ -8,8 +8,13 @@ + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + +