namespace Harmony.TileEntityLootContainerAdditionRebirth { public class TileEntityLootContainerPatches { [HarmonyPatch(typeof(TileEntityLootContainer))] [HarmonyPatch("UpdateTick")] public class UpdateTickPatch { public static bool Prefix(TileEntityLootContainer __instance, World world) { if (RebirthVariables.customScenario == "purge") { return false; } return true; } } [HarmonyPatch(typeof(TileEntityLootContainer))] [HarmonyPatch("write")] public class WritePatch { public static bool Prefix(TileEntityLootContainer __instance, PooledBinaryWriter stream, TileEntity.StreamModeWrite _eStreamMode) { if (__instance.lootListName == "traderNPC") { if (!SingletonMonoBehaviour.Instance.IsServer) { //Log.Out("TileEntityLootContainerPatches-write __instance.EntityId: " + __instance.EntityId); SingletonMonoBehaviour.Instance.SendToServer(NetPackageManager.GetPackage().Setup(__instance.EntityId, __instance.items), false); } } return true; } } [HarmonyPatch(typeof(TileEntityLootContainer))] [HarmonyPatch("read")] public class ReadPatch { public static bool Prefix(TileEntityLootContainer __instance, PooledBinaryReader _br, TileEntity.StreamModeRead _eStreamMode) { if (_eStreamMode == TileEntity.StreamModeRead.Persistency) { __instance.readVersion = (int)_br.ReadUInt16(); __instance.localChunkPos = StreamUtils.ReadVector3i((BinaryReader)_br); __instance.entityId = _br.ReadInt32(); if (__instance.readVersion <= 1) return false; __instance.heapMapUpdateTime = _br.ReadUInt64(); __instance.heapMapLastTime = __instance.heapMapUpdateTime - AIDirector.GetActivityWorldTimeDelay(); } else { __instance.localChunkPos = StreamUtils.ReadVector3i((BinaryReader)_br); __instance.entityId = _br.ReadInt32(); } if (_eStreamMode == TileEntity.StreamModeRead.Persistency && __instance.readVersion <= 8) throw new Exception("Outdated loot data"); if (_br.ReadBoolean()) __instance.lootListName = _br.ReadString(); __instance.containerSize = new Vector2i(); __instance.containerSize.x = (int)_br.ReadUInt16(); __instance.containerSize.y = (int)_br.ReadUInt16(); __instance.bTouched = _br.ReadBoolean(); __instance.worldTimeTouched = (ulong)_br.ReadUInt32(); __instance.bPlayerBackpack = _br.ReadBoolean(); int num = Math.Min((int)_br.ReadInt16(), __instance.containerSize.x * __instance.containerSize.y); if (__instance.bUserAccessing) { ItemStack itemStack = ItemStack.Empty.Clone(); if (_eStreamMode == TileEntity.StreamModeRead.Persistency && __instance.readVersion < 3) { for (int index = 0; index < num; ++index) itemStack.ReadOld((BinaryReader)_br); } else { for (int index = 0; index < num; ++index) itemStack.Read((BinaryReader)_br); } } else { if (__instance.containerSize.x * __instance.containerSize.y != __instance.items.Length) __instance.items = ItemStack.CreateArray(__instance.containerSize.x * __instance.containerSize.y); if (_eStreamMode == TileEntity.StreamModeRead.Persistency && __instance.readVersion < 3) { for (int index = 0; index < num; ++index) { __instance.items[index].Clear(); __instance.items[index].ReadOld((BinaryReader)_br); } } else { for (int index = 0; index < num; ++index) { __instance.items[index].Clear(); __instance.items[index].Read((BinaryReader)_br); } } } __instance.bPlayerStorage = _br.ReadBoolean(); if (_eStreamMode == TileEntity.StreamModeRead.Persistency && __instance.readVersion <= 9 || !_br.ReadBoolean()) return false; __instance.preferences = new PreferenceTracker(-1); __instance.preferences.Read(_br); return false; } } } }