From 08b23041563bcbf912f202ac8b1deaa43988e3c4 Mon Sep 17 00:00:00 2001 From: starfish <50672801+starfi5h@users.noreply.github.com> Date: Tue, 29 Sep 2026 10:44:43 +0800 Subject: [PATCH] Fix for game version 0.10.35.29088 --- .../Foundation/FoundationBuildUpdatePacket.cs | 2 + .../FoundationBuildUpdateProcessor.cs | 63 ++++++++++++------- .../Patches/Dynamic/PlanetFactory_Patch.cs | 12 ++++ .../Remote/RemotePlayerMovement.cs | 2 +- NebulaWorld/SimulatedWorld.cs | 3 +- 5 files changed, 55 insertions(+), 27 deletions(-) diff --git a/NebulaModel/Packets/Factory/Foundation/FoundationBuildUpdatePacket.cs b/NebulaModel/Packets/Factory/Foundation/FoundationBuildUpdatePacket.cs index efdfdcdcd..a653a3f94 100644 --- a/NebulaModel/Packets/Factory/Foundation/FoundationBuildUpdatePacket.cs +++ b/NebulaModel/Packets/Factory/Foundation/FoundationBuildUpdatePacket.cs @@ -21,6 +21,7 @@ public FoundationBuildUpdatePacket(Vector3 center, float radius, int reformSize, var btr = GameMain.mainPlayer.controller.actionBuild.reformTool; ReformType = btr?.brushType ?? -1; ReformColor = btr?.brushColor ?? -1; + ReformMode = btr?.reformMode ?? 0; PlanetId = GameMain.mainPlayer.planetId; GroundTestPos = new Float3(btr?.castGroundPos ?? Vector3.zero); if (center != btr?.reformCenterPoint) //Pit (circle) @@ -40,6 +41,7 @@ public FoundationBuildUpdatePacket(Vector3 center, float radius, int reformSize, } public float Radius { get; set; } + public int ReformMode { get; set; } public int ReformSize { get; set; } public bool VeinBuried { get; set; } public float Fade0 { get; set; } diff --git a/NebulaNetwork/PacketProcessors/Factory/Foundation/FoundationBuildUpdateProcessor.cs b/NebulaNetwork/PacketProcessors/Factory/Foundation/FoundationBuildUpdateProcessor.cs index fd2ca01d2..cf1be5c9a 100644 --- a/NebulaNetwork/PacketProcessors/Factory/Foundation/FoundationBuildUpdateProcessor.cs +++ b/NebulaNetwork/PacketProcessors/Factory/Foundation/FoundationBuildUpdateProcessor.cs @@ -47,37 +47,52 @@ protected override void ProcessPacket(FoundationBuildUpdatePacket packet, Nebula var area = packet.CirclePointCount; var costSandCount = 0; // dummy value, won't use var getSandCount = 0; // dummy value, won't use - if (!packet.IsCircle) //Normal reform + if (packet.ReformMode == 1) // Restore terrain { - var reformPointsCount = factory.planet.aux.ReformSnap(packet.GroundTestPos.ToVector3(), packet.ReformSize, - packet.ReformType, packet.ReformColor, reformPoints, packet.ReformIndices, factory.platformSystem, + var pointCount = factory.planet.aux.ReformSnap(packet.GroundTestPos.ToVector3(), packet.ReformMode, + packet.ReformSize, 0, 0, reformPoints, packet.ReformIndices, factory.platformSystem, out var reformCenterPoint); - factory.ComputeFlattenTerrainReform(reformPoints, reformCenterPoint, packet.Radius, reformPointsCount, ref costSandCount, ref getSandCount); - center = reformCenterPoint; - area = packet.ReformSize * packet.ReformSize; - } - else //Remove pit - { - factory.ComputeFlattenTerrainReform(reformPoints, center, packet.Radius, packet.CirclePointCount, ref costSandCount, ref getSandCount, 3f, 1f); - } - using (Multiplayer.Session.Factories.IsIncomingRequest.On()) - { - factory.FlattenTerrainReform(center, packet.Radius, packet.ReformSize, packet.VeinBuried); + factory.ComputeRestoreTerrainReform(reformPoints, reformCenterPoint, packet.Radius, pointCount, + ref costSandCount, ref getSandCount); + using (Multiplayer.Session.Factories.IsIncomingRequest.On()) + { + factory.RestoreTerrainReform(reformCenterPoint, packet.Radius, packet.ReformSize, packet.VeinBuried); + } } - var platformSystem = factory.platformSystem; - for (var i = 0; i < area; i++) + else { - var index = packet.ReformIndices[i]; - if (index < 0) + if (!packet.IsCircle) //Normal reform + { + var reformPointsCount = factory.planet.aux.ReformSnap(packet.GroundTestPos.ToVector3(), packet.ReformMode, packet.ReformSize, + packet.ReformType, packet.ReformColor, reformPoints, packet.ReformIndices, factory.platformSystem, + out var reformCenterPoint); + factory.ComputeFlattenTerrainReform(reformPoints, reformCenterPoint, packet.Radius, reformPointsCount, ref costSandCount, ref getSandCount); + center = reformCenterPoint; + area = packet.ReformSize * packet.ReformSize; + } + else //Remove pit + { + factory.ComputeFlattenTerrainReform(reformPoints, center, packet.Radius, packet.CirclePointCount, ref costSandCount, ref getSandCount, 3f, 1f); + } + using (Multiplayer.Session.Factories.IsIncomingRequest.On()) { - continue; + factory.FlattenTerrainReform(center, packet.Radius, packet.ReformSize, packet.VeinBuried); } - var type = platformSystem.GetReformType(index); - var color = platformSystem.GetReformColor(index); - if (type != packet.ReformType || color != packet.ReformColor) + var platformSystem = factory.platformSystem; + for (var i = 0; i < area; i++) { - factory.platformSystem.SetReformType(index, packet.ReformType); - factory.platformSystem.SetReformColor(index, packet.ReformColor); + var index = packet.ReformIndices[i]; + if (index < 0) + { + continue; + } + var type = platformSystem.GetReformType(index); + var color = platformSystem.GetReformColor(index); + if (type != packet.ReformType || color != packet.ReformColor) + { + factory.platformSystem.SetReformType(index, packet.ReformType); + factory.platformSystem.SetReformColor(index, packet.ReformColor); + } } } } diff --git a/NebulaPatcher/Patches/Dynamic/PlanetFactory_Patch.cs b/NebulaPatcher/Patches/Dynamic/PlanetFactory_Patch.cs index 854a8b703..0ed7dc766 100644 --- a/NebulaPatcher/Patches/Dynamic/PlanetFactory_Patch.cs +++ b/NebulaPatcher/Patches/Dynamic/PlanetFactory_Patch.cs @@ -146,6 +146,18 @@ public static void FlattenTerrainReform_Prefix(Vector3 center, float radius, int } } + [HarmonyPrefix] + [HarmonyPatch(nameof(PlanetFactory.RestoreTerrainReform))] + public static void RestoreTerrainReform_Prefix(Vector3 center, float radius, int reformSize, + bool veinBuried, float fade0) + { + if (Multiplayer.IsActive && !Multiplayer.Session.Factories.IsIncomingRequest.Value) + { + Multiplayer.Session.Network.SendPacketToLocalStar( + new FoundationBuildUpdatePacket(center, radius, reformSize, veinBuried, fade0)); + } + } + [HarmonyPrefix] [HarmonyPatch(nameof(PlanetFactory.PlanetReformAll))] public static void PlanetReformAll_Prefix(PlanetFactory __instance, int type, int color, bool bury) diff --git a/NebulaWorld/MonoBehaviours/Remote/RemotePlayerMovement.cs b/NebulaWorld/MonoBehaviours/Remote/RemotePlayerMovement.cs index a2e8d9fda..e1e40e259 100644 --- a/NebulaWorld/MonoBehaviours/Remote/RemotePlayerMovement.cs +++ b/NebulaWorld/MonoBehaviours/Remote/RemotePlayerMovement.cs @@ -154,7 +154,7 @@ private void OnEnable() var meshRenderer = playerName.GetComponent(); playerName.AddComponent(); - meshRenderer.sharedMaterial = uiSailIndicator_targetText.gameObject.GetComponent().sharedMaterial; + meshRenderer.sharedMaterial = uiSailIndicator_targetText.font.material; playerName.SetActive(true); } diff --git a/NebulaWorld/SimulatedWorld.cs b/NebulaWorld/SimulatedWorld.cs index 5068469b9..14657d000 100644 --- a/NebulaWorld/SimulatedWorld.cs +++ b/NebulaWorld/SimulatedWorld.cs @@ -497,8 +497,7 @@ public void RenderPlayerNameTagsInGame() go.transform.SetParent(playerModel.PlayerTransform, false); // Add a meshrenderer and textmesh component to show the text with a different font var meshRenderer = go.AddComponent(); - meshRenderer.sharedMaterial = - uiSailIndicator_targetText.gameObject.GetComponent().sharedMaterial; + meshRenderer.sharedMaterial = uiSailIndicator_targetText.font.material; var textMesh = go.AddComponent(); // Set the text to be their name