From 0ae54973c53d93ec72f4ca9144ff0aec877f6aee Mon Sep 17 00:00:00 2001 From: Sakura_TA Date: Wed, 26 Feb 2025 15:26:20 +0800 Subject: [PATCH 1/7] Fix VFE issue syncing Command_SetItemsToSpawn Should fix VFE-Faction Machanoid_ FishTrapper being able to set products The issue is that Command_SetItemsToSpawn is actualing using a ThingComp as param instead of Thing, witch can't be synced as Thing. Added function for command with comp_building. --- Source/Mods/VanillaExpandedFramework.cs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/Source/Mods/VanillaExpandedFramework.cs b/Source/Mods/VanillaExpandedFramework.cs index b147edc..c354f14 100644 --- a/Source/Mods/VanillaExpandedFramework.cs +++ b/Source/Mods/VanillaExpandedFramework.cs @@ -2,6 +2,7 @@ using System.Collections; using System.Collections.Generic; using System.Linq; +using System.Net.NetworkInformation; using System.Reflection; using System.Reflection.Emit; using System.Runtime.Serialization; @@ -93,6 +94,16 @@ private static void SyncCommandWithBuilding(SyncWorker sync, ref Command command else building.SetValue(sync.Read()); } + private static void SyncCommandWithCompBuilding(SyncWorker sync, ref Command command) + { + var traverse = Traverse.Create(command); + var building = traverse.Field("building"); + + if (sync.isWriting) + sync.Write(building.GetValue() as ThingComp); + else + building.SetValue(sync.Read()); + } #endregion @@ -634,7 +645,7 @@ private static void PatchVanillaFurnitureExpanded() var type = AccessTools.TypeByName("VanillaFurnitureExpanded.Command_SetItemsToSpawn"); MpCompat.RegisterLambdaDelegate(type, "ProcessInput", 1); - MP.RegisterSyncWorker(SyncCommandWithBuilding, type, shouldConstruct: true); + MP.RegisterSyncWorker(SyncCommandWithCompBuilding, type, shouldConstruct: true); MpCompat.RegisterLambdaMethod("VanillaFurnitureExpanded.CompRockSpawner", "CompGetGizmosExtra", 0); From b0e7c64adc21b36b77e7d7973f5e53b36510c5c8 Mon Sep 17 00:00:00 2001 From: Sakura_TA Date: Fri, 28 Feb 2025 15:51:08 +0800 Subject: [PATCH 2/7] Replace VFE CommandSetStoneType to use shared sync worker --- Source/Mods/VanillaExpandedFramework.cs | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/Source/Mods/VanillaExpandedFramework.cs b/Source/Mods/VanillaExpandedFramework.cs index c354f14..d5481e9 100644 --- a/Source/Mods/VanillaExpandedFramework.cs +++ b/Source/Mods/VanillaExpandedFramework.cs @@ -2,7 +2,6 @@ using System.Collections; using System.Collections.Generic; using System.Linq; -using System.Net.NetworkInformation; using System.Reflection; using System.Reflection.Emit; using System.Runtime.Serialization; @@ -630,7 +629,6 @@ private static void SyncHireable(SyncWorker sync, ref object obj) #region Vanilla Furniture Expanded // Vanilla Furniture Expanded - private static AccessTools.FieldRef setStoneBuildingField; private static Type randomBuildingGraphicCompType; private static FastInvokeHandler randomBuildingGraphicCompChangeGraphicMethod; @@ -650,9 +648,7 @@ private static void PatchVanillaFurnitureExpanded() MpCompat.RegisterLambdaMethod("VanillaFurnitureExpanded.CompRockSpawner", "CompGetGizmosExtra", 0); type = AccessTools.TypeByName("VanillaFurnitureExpanded.Command_SetStoneType"); - setStoneBuildingField = AccessTools.FieldRefAccess(type, "building"); - MpCompat.RegisterLambdaMethod(type, "ProcessInput", 0); - MP.RegisterSyncWorker(SyncSetStoneTypeCommand, type, shouldConstruct: true); + MP.RegisterSyncWorker(SyncCommandWithCompBuilding, type, shouldConstruct: true); MpCompat.RegisterLambdaDelegate(type, "ProcessInput", 1); type = randomBuildingGraphicCompType = AccessTools.TypeByName("VanillaFurnitureExpanded.CompRandomBuildingGraphic"); @@ -690,14 +686,6 @@ private static void PatchVanillaFurnitureExpanded() MP.RegisterSyncWorker(SyncCompGlower); } - private static void SyncSetStoneTypeCommand(SyncWorker sync, ref Command obj) - { - if (sync.isWriting) - sync.Write(setStoneBuildingField(obj)); - else - setStoneBuildingField(obj) = sync.Read(); - } - private static bool Dialog_ChooseGraphic_ReplacementButton(Rect butRect, bool doMouseoverSound, Thing thingToChange, int index, Window window) { var result = Widgets.ButtonInvisible(butRect, doMouseoverSound); From c778247da4aa43ebe50edb0e717dcb90c862de12 Mon Sep 17 00:00:00 2001 From: Sakura_TA Date: Wed, 5 Mar 2025 23:42:28 +0800 Subject: [PATCH 3/7] Added support for EccentricTech.DefenseGrid by Aelanna --- References/EccentricDefenseGrid.dll | Bin 0 -> 167424 bytes References/EccentricDefenseGrid.txt | 1 + Source_Referenced/EccentricDefenseGrid.cs | 231 ++++++++++++++++++++++ 3 files changed, 232 insertions(+) create mode 100644 References/EccentricDefenseGrid.dll create mode 100644 References/EccentricDefenseGrid.txt create mode 100644 Source_Referenced/EccentricDefenseGrid.cs diff --git a/References/EccentricDefenseGrid.dll b/References/EccentricDefenseGrid.dll new file mode 100644 index 0000000000000000000000000000000000000000..bbafd52e7713a9bbfcdf3121d4867e94fbf14a21 GIT binary patch literal 167424 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 literal 0 HcmV?d00001 diff --git a/References/EccentricDefenseGrid.txt b/References/EccentricDefenseGrid.txt new file mode 100644 index 0000000..bf7be85 --- /dev/null +++ b/References/EccentricDefenseGrid.txt @@ -0,0 +1 @@ +2CAF9AB8B7DE9F0347A53E1F688395533DA5B163 \ No newline at end of file diff --git a/Source_Referenced/EccentricDefenseGrid.cs b/Source_Referenced/EccentricDefenseGrid.cs new file mode 100644 index 0000000..e4c7da7 --- /dev/null +++ b/Source_Referenced/EccentricDefenseGrid.cs @@ -0,0 +1,231 @@ +using HarmonyLib; +using Multiplayer.API; +using RimWorld; +using Verse; +using EccentricDefenseGrid; +using System.Linq; +using Steamworks; +using System; + +namespace Multiplayer.Compat +{ + /// EccentricTech.DefenseGrid by Aelanna + /// + [MpCompatFor("Aelanna.EccentricTech.DefenseGrid")] + internal class EccentricTechDefenseGrid + // + { + private static ISyncField autoReload; + private static ISyncField slots; + //private static SyncType ordnanceSlot; + private static Type compArtilleryMissileLauncherType; + private static CompArtilleryMissileLauncher parentCompArtilleryMissileLauncher; + public EccentricTechDefenseGrid(ModContentPack mod) + { + // RNG + { + } + + // Gizmos + { + var type = AccessTools.TypeByName("EccentricDefenseGrid.CompArtilleryDesignator"); + MP.RegisterSyncMethod(type, "NextDesignationMode"); + MP.RegisterSyncMethod(type, "SetDesignationMode"); + MP.RegisterSyncMethod(type, "SetOrdnanceIndex"); + // This delegate set field `ordnanceDef` & call `DoArtilleryDesignation` + MpCompat.RegisterLambdaDelegate(type, "DoArtilleryTargeting", 0); + + type = AccessTools.TypeByName("EccentricDefenseGrid.DefenseGridNetwork"); + MP.RegisterSyncMethod(type, "NextDesignationMode"); + MP.RegisterSyncMethod(type, "SetDesignationMode"); + MP.RegisterSyncMethod(type, "SetSelectedOrdnance"); + MpCompat.RegisterLambdaDelegate(type, "DoArtilleryTargeting", 0); + + MP.RegisterSyncWorker(SyncDefenseGridNetwork, type); + type = AccessTools.TypeByName("EccentricDefenseGrid.OrdnanceCount"); + MP.RegisterSyncWorker(SyncOrdnanceCount, type, shouldConstruct: true); + + + + type = AccessTools.TypeByName("EccentricDefenseGrid.DefenseGridMapComponent"); + + MP.RegisterSyncMethod(type, "RecountOrdnance"); + + type = compArtilleryMissileLauncherType = AccessTools.TypeByName("EccentricDefenseGrid.CompArtilleryMissileLauncher"); + MpCompat.RegisterLambdaMethod(type, "CompGetGizmosExtra", 0, 1); + + + type = AccessTools.TypeByName("EccentricDefenseGrid.CompDefenseProjector"); + //called from gizmo + MP.RegisterSyncMethod(type, "ApplyRadius").SetContext(SyncContext.MapSelected); + MP.RegisterSyncMethod(type, "ApplyColor").SetContext(SyncContext.MapSelected); + MpCompat.RegisterLambdaMethod(type, "CompGetGizmosExtra", 1).SetDebugOnly(); + + type = AccessTools.TypeByName("EccentricDefenseGrid.CompDefenseGenerator"); + MpCompat.RegisterLambdaMethod(type, "CompGetGizmosExtra", 2, 4, 6, 8, 10, 11, 12).TakeLast(2).SetDebugOnly(); + + type = AccessTools.TypeByName("EccentricDefenseGrid.CompDefenseHeatsink"); + MpCompat.RegisterLambdaMethod(type, "CompGetGizmosExtra", 0, 1, 2).SetDebugOnly(); + + + } + { + var type = AccessTools.TypeByName("EccentricDefenseGrid.OrdnanceSlot"); + //ordnanceSlot.expose = true; + + MP.RegisterSyncWorker(SyncOrdnanceSlot, type); + } + // ITab + { + + var type = AccessTools.TypeByName("EccentricDefenseGrid.ITab_OrdnanceStorage"); + + + MpCompat.harmony.Patch(AccessTools.Method(type, "FillTab"), + prefix: new HarmonyMethod(typeof(EccentricTechDefenseGrid), nameof(PreFillTab)), + postfix: new HarmonyMethod(typeof(EccentricTechDefenseGrid), nameof(PostFillTab))); + + + MpCompat.RegisterLambdaDelegate(type, "DrawOrdnance_GenerateMenu", 0, 1).SetContext(SyncContext.MapSelected); + + + + type = AccessTools.TypeByName("EccentricDefenseGrid.OrdnanceSlot"); + autoReload = MP.RegisterSyncField(type, "autoReload"); + type = AccessTools.TypeByName("EccentricDefenseGrid.CompArtilleryMissileLauncher"); + slots = MP.RegisterSyncField(type, "slots"); + + MP.RegisterSyncWorker(SyncCompArtilleryMissileLauncher, type); + } + + } + + private static void PreFillTab(ITab __instance) + { + if (!MP.IsInMultiplayer) + { + return; + } + Building building = __instance.SelThing as Building; + parentCompArtilleryMissileLauncher = building.GetComp(); + + MP.WatchBegin(); + //slots.Watch(parentCompArtilleryMissileLauncher); + parentCompArtilleryMissileLauncher.slots.ForEach((slot) => autoReload.Watch(slot)); + } + private static void PostFillTab() + { + if (!MP.IsInMultiplayer) + return; + parentCompArtilleryMissileLauncher = null; + MP.WatchEnd(); + } + private static void SyncOrdnanceSlot(SyncWorker sync, ref OrdnanceSlot obj) + { + if (sync.isWriting) + { + sync.Write(obj is null); + if (obj is null) + return; + + + } + else + { + // is null + // does exist as method `DrawOrdnance_GenerateMenu` could be called with this param null + if (sync.Read()) + { + obj = null; + return; + } + } + + CompArtilleryMissileLauncher compArtilleryMissileLauncher = Find.Selector.SingleSelectedThing?.TryGetComp(); + if (compArtilleryMissileLauncher != null) + { + if (sync.isWriting) + { + sync.Write(compArtilleryMissileLauncher.slots.IndexOf(obj)); + return; + } + else + { + int index = sync.Read(); + if (index != -1) + { + obj = compArtilleryMissileLauncher.slots[index]; + return; + + } + else + { + // to normal + } + } + + } + + // normally copied by exposeFields + //sync.Bind(ref obj, ordnanceSlot); + if (sync.isWriting) + { + + sync.Write(obj.autoReload); + sync.Write(obj.ordnance as ThingWithComps); + sync.Write(obj.def.defName); + } + else + { + + + obj.autoReload = sync.Read(); + obj.ordnance = sync.Read() as Ordnance; + obj.def = DefDatabase.GetNamed(sync.Read()); + + } + } + private static void SyncOrdnanceCount(SyncWorker sync, ref object ordnanceCount) + { + OrdnanceCount _oc = ordnanceCount as OrdnanceCount; + if (sync.isWriting) + { + sync.Write(_oc.def.defName); + sync.Write(_oc.count); + } + else + { + _oc.def = DefDatabase.GetNamed(sync.Read()); + _oc.count = sync.Read(); + } + } + private static void SyncDefenseGridNetwork(SyncWorker sync, ref object network) + { + DefenseGridNetwork _net = network as DefenseGridNetwork; + if (sync.isWriting) + { + sync.Write(_net.mapComponent.map); + sync.Write(_net.id); + } + else + { + Map map = sync.Read(); + int id = sync.Read(); + network = map.GetComponent().networks.Find((net) => net.id == id); + } + } + + private static void SyncCompArtilleryMissileLauncher(SyncWorker sync, ref CompArtilleryMissileLauncher compArtilleryMissileLauncher) + { + if (sync.isWriting) + { + sync.Write(compArtilleryMissileLauncher.parent as ThingWithComps); + } + else + { + compArtilleryMissileLauncher = sync.Read().GetComp(); + } + } + + } +} From 574d57499ad4068364f10f3f3b37aa98703283c4 Mon Sep 17 00:00:00 2001 From: Sakura_TA Date: Thu, 6 Mar 2025 10:53:24 +0800 Subject: [PATCH 4/7] Remove unused stuffs --- Source_Referenced/EccentricDefenseGrid.cs | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/Source_Referenced/EccentricDefenseGrid.cs b/Source_Referenced/EccentricDefenseGrid.cs index e4c7da7..d46b785 100644 --- a/Source_Referenced/EccentricDefenseGrid.cs +++ b/Source_Referenced/EccentricDefenseGrid.cs @@ -4,7 +4,6 @@ using Verse; using EccentricDefenseGrid; using System.Linq; -using Steamworks; using System; namespace Multiplayer.Compat @@ -16,9 +15,6 @@ internal class EccentricTechDefenseGrid // { private static ISyncField autoReload; - private static ISyncField slots; - //private static SyncType ordnanceSlot; - private static Type compArtilleryMissileLauncherType; private static CompArtilleryMissileLauncher parentCompArtilleryMissileLauncher; public EccentricTechDefenseGrid(ModContentPack mod) { @@ -51,7 +47,7 @@ public EccentricTechDefenseGrid(ModContentPack mod) MP.RegisterSyncMethod(type, "RecountOrdnance"); - type = compArtilleryMissileLauncherType = AccessTools.TypeByName("EccentricDefenseGrid.CompArtilleryMissileLauncher"); + type = AccessTools.TypeByName("EccentricDefenseGrid.CompArtilleryMissileLauncher"); MpCompat.RegisterLambdaMethod(type, "CompGetGizmosExtra", 0, 1); @@ -71,7 +67,6 @@ public EccentricTechDefenseGrid(ModContentPack mod) } { var type = AccessTools.TypeByName("EccentricDefenseGrid.OrdnanceSlot"); - //ordnanceSlot.expose = true; MP.RegisterSyncWorker(SyncOrdnanceSlot, type); } @@ -93,7 +88,6 @@ public EccentricTechDefenseGrid(ModContentPack mod) type = AccessTools.TypeByName("EccentricDefenseGrid.OrdnanceSlot"); autoReload = MP.RegisterSyncField(type, "autoReload"); type = AccessTools.TypeByName("EccentricDefenseGrid.CompArtilleryMissileLauncher"); - slots = MP.RegisterSyncField(type, "slots"); MP.RegisterSyncWorker(SyncCompArtilleryMissileLauncher, type); } From 220d7e15cfa8dc184efcc11d3e18a64ab613dc7a Mon Sep 17 00:00:00 2001 From: Sakura_TA Date: Thu, 6 Mar 2025 11:12:28 +0800 Subject: [PATCH 5/7] Patch visual effects with pushpopRand --- Source_Referenced/EccentricDefenseGrid.cs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Source_Referenced/EccentricDefenseGrid.cs b/Source_Referenced/EccentricDefenseGrid.cs index d46b785..28dea76 100644 --- a/Source_Referenced/EccentricDefenseGrid.cs +++ b/Source_Referenced/EccentricDefenseGrid.cs @@ -4,7 +4,6 @@ using Verse; using EccentricDefenseGrid; using System.Linq; -using System; namespace Multiplayer.Compat { @@ -20,6 +19,15 @@ public EccentricTechDefenseGrid(ModContentPack mod) { // RNG { + // patch this or every effect + // Seems all effcts go through this class and many of them contains rand + var type = AccessTools.TypeByName("EccentricProjectiles.EffectMapComponent"); + var methods = new[] + { + AccessTools.Method(type, "MapComponentTick"), + AccessTools.Method(type,"CreateEffect") + }; + PatchingUtilities.PatchPushPopRand(methods); } // Gizmos @@ -104,7 +112,6 @@ private static void PreFillTab(ITab __instance) parentCompArtilleryMissileLauncher = building.GetComp(); MP.WatchBegin(); - //slots.Watch(parentCompArtilleryMissileLauncher); parentCompArtilleryMissileLauncher.slots.ForEach((slot) => autoReload.Watch(slot)); } private static void PostFillTab() From 152aa85512420c2bfc5d3e1354dedf39c3116a43 Mon Sep 17 00:00:00 2001 From: Sakura_TA Date: Thu, 6 Mar 2025 16:53:25 +0800 Subject: [PATCH 6/7] Added support for Eccentric Extras - Flares by Aelanna --- Source/Mods/EccentricTechFlares.cs | 73 ++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 Source/Mods/EccentricTechFlares.cs diff --git a/Source/Mods/EccentricTechFlares.cs b/Source/Mods/EccentricTechFlares.cs new file mode 100644 index 0000000..9153d0d --- /dev/null +++ b/Source/Mods/EccentricTechFlares.cs @@ -0,0 +1,73 @@ +using System.Linq; +using HarmonyLib; +using Multiplayer.API; +using Verse; +using System.Reflection; +using System; +namespace Multiplayer.Compat +{ + /// Eccentric Extras - Flares by Aelanna + /// + [MpCompatFor("Aelanna.EccentricTech.Flares2")] + internal class EccentricTechFlares + { + + private static ConstructorInfo commandThrowIlluminatorConstructor; + private static Type compIlluminatorPackType; + public EccentricTechFlares(ModContentPack mod) + { + // RNG + { + } + + // Gizmos + { + var commandThrowIlluminatorType = AccessTools.TypeByName("EccentricFlares.Command_ThrowIlluminator"); + compIlluminatorPackType = AccessTools.TypeByName("EccentricFlares.CompIlluminatorPack"); + + commandThrowIlluminatorConstructor = AccessTools.DeclaredConstructor(commandThrowIlluminatorType, [compIlluminatorPackType]); + + MP.RegisterSyncWorker(SyncCommandThrowIlluminator, commandThrowIlluminatorType); + //MP.RegisterSyncWorker(SyncCompIlluminatorPack, compIlluminatorPackType); + MP.RegisterSyncMethod(commandThrowIlluminatorType, "SelectOption"); + + + + LongEventHandler.ExecuteWhenFinished(LatePatch); + } + + } + public static void LatePatch() + { + var type = AccessTools.TypeByName("EccentricFlares.CompIlluminatorPack"); + + MP.RegisterSyncMethod(compIlluminatorPackType, "DoStartThrow"); + MpCompat.RegisterLambdaMethod(type, "CompGetWornGizmosExtra", 1); + } + + private static void SyncCommandThrowIlluminator(SyncWorker sync, ref object command) + { + + if (sync.isWriting) + { + Traverse traverse = Traverse.Create(command); + ThingComp comp = traverse.Field("pack").GetValue(); + sync.Write(comp); + } + else + { + command = commandThrowIlluminatorConstructor.Invoke([sync.Read()]); + } + } + private static void SyncCompIlluminatorPack(SyncWorker sync, ref ThingComp comp) + { + if(sync.isWriting) + { + sync.Write(comp.parent as Thing); + } else + { + comp = sync.Read().AllComps.Find(_comp => _comp.GetType() == compIlluminatorPackType); + } + } + } +} From 1b65f0566dc6581939e87aef428f35988d89fc35 Mon Sep 17 00:00:00 2001 From: Sakura_TA Date: Thu, 6 Mar 2025 16:54:31 +0800 Subject: [PATCH 7/7] Remove unused stuffs --- Source/Mods/EccentricTechFlares.cs | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/Source/Mods/EccentricTechFlares.cs b/Source/Mods/EccentricTechFlares.cs index 9153d0d..a9a6d62 100644 --- a/Source/Mods/EccentricTechFlares.cs +++ b/Source/Mods/EccentricTechFlares.cs @@ -1,5 +1,4 @@ -using System.Linq; -using HarmonyLib; +using HarmonyLib; using Multiplayer.API; using Verse; using System.Reflection; @@ -28,7 +27,6 @@ public EccentricTechFlares(ModContentPack mod) commandThrowIlluminatorConstructor = AccessTools.DeclaredConstructor(commandThrowIlluminatorType, [compIlluminatorPackType]); MP.RegisterSyncWorker(SyncCommandThrowIlluminator, commandThrowIlluminatorType); - //MP.RegisterSyncWorker(SyncCompIlluminatorPack, compIlluminatorPackType); MP.RegisterSyncMethod(commandThrowIlluminatorType, "SelectOption"); @@ -59,15 +57,5 @@ private static void SyncCommandThrowIlluminator(SyncWorker sync, ref object comm command = commandThrowIlluminatorConstructor.Invoke([sync.Read()]); } } - private static void SyncCompIlluminatorPack(SyncWorker sync, ref ThingComp comp) - { - if(sync.isWriting) - { - sync.Write(comp.parent as Thing); - } else - { - comp = sync.Read().AllComps.Find(_comp => _comp.GetType() == compIlluminatorPackType); - } - } } }