diff --git a/src/Commands/Data/Buildings/BuildingUpdateFlagsCommand.cs b/src/Commands/Data/Buildings/BuildingUpdateFlagsCommand.cs
new file mode 100644
index 00000000..2143961c
--- /dev/null
+++ b/src/Commands/Data/Buildings/BuildingUpdateFlagsCommand.cs
@@ -0,0 +1,25 @@
+using ProtoBuf;
+
+namespace CSM.Commands.Data.Buildings
+{
+ ///
+ /// Called when any building needs to update its flags (Construction Status, Needs Status)
+ ///
+ /// Sent by:
+ /// - BuildingHandler
+ [ProtoContract]
+ public class BuildingUpdateFlagsCommand : CommandBase
+ {
+ ///
+ /// The id of the building that was rebuilt.
+ ///
+ [ProtoMember(1)]
+ public ushort Building { get; set; }
+
+ ///
+ /// The Mask of Flags that is passed to UpdateFlags function
+ ///
+ [ProtoMember(2)]
+ public Building.Flags ChangeMask { get; set; }
+ }
+}
diff --git a/src/Commands/Handler/Buildings/BuildingUpdateFlagsHandler.cs b/src/Commands/Handler/Buildings/BuildingUpdateFlagsHandler.cs
new file mode 100644
index 00000000..188af687
--- /dev/null
+++ b/src/Commands/Handler/Buildings/BuildingUpdateFlagsHandler.cs
@@ -0,0 +1,19 @@
+using System;
+using CSM.Commands.Data.Buildings;
+using CSM.Helpers;
+using CSM.Injections;
+
+namespace CSM.Commands.Handler.Buildings
+{
+ public class BuildingUpdateFlagsHandler : CommandHandler
+ {
+ protected override void Handle(BuildingUpdateFlagsCommand command)
+ {
+ IgnoreHelper.StartIgnore();
+
+ BuildingManager.instance.UpdateFlags(command.Building, command.ChangeMask);
+
+ IgnoreHelper.EndIgnore();
+ }
+ }
+}
diff --git a/src/Injections/BuildingHandler.cs b/src/Injections/BuildingHandler.cs
index 7491e261..837e8253 100644
--- a/src/Injections/BuildingHandler.cs
+++ b/src/Injections/BuildingHandler.cs
@@ -6,6 +6,7 @@
using CSM.Helpers;
using HarmonyLib;
using UnityEngine;
+using ColossalFramework;
namespace CSM.Injections
{
@@ -398,4 +399,39 @@ public static void Prefix(ushort buildingID, ref Building data, bool historical,
});
}
}
+
+ [HarmonyPatch(typeof(BuildingManager))]
+ [HarmonyPatch("UpdateFlags")]
+ public class UpgradeFlags
+ {
+ public static void Prefix(ushort building, ref Building.Flags changeMask, out bool __state)
+ {
+ if (IgnoreHelper.IsIgnored())
+ {
+ __state = false;
+ return;
+ }
+
+ __state = true;
+
+
+ ArrayHandler.StartCollecting();
+ IgnoreHelper.StartIgnore();
+ }
+
+ public static void Postfix(ushort building, ref Building.Flags changeMask, ref bool __state)
+ {
+ if (!__state)
+ return;
+
+ IgnoreHelper.EndIgnore();
+ ArrayHandler.StopCollecting();
+
+ Command.SendToAll(new BuildingUpdateFlagsCommand()
+ {
+ Building = building,
+ ChangeMask = changeMask
+ });
+ }
+ }
}