public static void Postfix(ref Building buildingData, ExtractingFacilityAI __instance, ref ushort __state) { int cargoDiff; if (Mod.IsIndustriesBuilding(__instance)) { // Output cargoDiff = Convert.ToInt32((buildingData.m_customBuffer1 - __state) / RI_Data.GetFactorCargo(__instance.m_outputResource)); //DebugLog.LogToFileOnly($"ID:{buildingID}={(ushort)Mathf.Clamp(__state + cargoDiff, 0, 64000)} ({__state + cargoDiff}), state:{__state}, buff:{buildingData.m_customBuffer1}, diff:{cargoDiff}"); buildingData.m_customBuffer1 = (ushort)Mathf.Clamp(__state + cargoDiff, 0, 64000); } else { DebugLog.LogToFileOnly($"Unknown EF instance {__instance.name} ({__instance.GetType()})"); } }
public static void Postfix(ushort buildingID, ref Building buildingData, ProcessingFacilityAI __instance, ref ushort[] __state) { if (Mod.IsIndustriesBuilding(__instance)) { if (RealCityEconomyExtension.Can16timesUpdate(buildingID)) { int allInputRate = 0; float reduceInputRate = 1f; if (__instance.m_inputResource1 != TransferManager.TransferReason.None) { allInputRate += __instance.m_inputRate1; } if (__instance.m_inputResource2 != TransferManager.TransferReason.None) { allInputRate += __instance.m_inputRate2; } if (__instance.m_inputResource3 != TransferManager.TransferReason.None) { allInputRate += __instance.m_inputRate3; } if (__instance.m_inputResource4 != TransferManager.TransferReason.None) { allInputRate += __instance.m_inputRate4; } if (allInputRate != 0) { reduceInputRate = (float)allInputRate / __instance.m_outputRate; } int cargoDiff; // Input if (__instance.m_inputResource1 != TransferManager.TransferReason.None) { cargoDiff = Convert.ToInt32((__state[1] - buildingData.m_customBuffer2) / RI_Data.GetFactorCargo(__instance.m_inputResource1)); buildingData.m_customBuffer2 = (ushort)Mathf.Clamp(__state[1] - (cargoDiff << 4), 0, 64000); } if (__instance.m_inputResource2 != TransferManager.TransferReason.None) { cargoDiff = Convert.ToInt32((__state[2] - Mod.CombineBytes(buildingData.m_teens, buildingData.m_youngs)) / RI_Data.GetFactorCargo(__instance.m_inputResource2)); Mod.SplitBytes((ushort)Mathf.Clamp(__state[2] - (cargoDiff << 4), 0, 64000), ref buildingData.m_teens, ref buildingData.m_youngs); } if (__instance.m_inputResource3 != TransferManager.TransferReason.None) { cargoDiff = Convert.ToInt32((__state[3] - Mod.CombineBytes(buildingData.m_adults, buildingData.m_seniors)) / RI_Data.GetFactorCargo(__instance.m_inputResource3)); Mod.SplitBytes((ushort)Mathf.Clamp(__state[3] - (cargoDiff << 4), 0, 64000), ref buildingData.m_adults, ref buildingData.m_seniors); } if (__instance.m_inputResource4 != TransferManager.TransferReason.None) { cargoDiff = Convert.ToInt32((__state[4] - Mod.CombineBytes(buildingData.m_education1, buildingData.m_education2)) / RI_Data.GetFactorCargo(__instance.m_inputResource4)); Mod.SplitBytes((ushort)Mathf.Clamp(__state[4] - (cargoDiff << 4), 0, 64000), ref buildingData.m_education1, ref buildingData.m_education2); } // Output (materials being produced) if (__instance.m_outputResource != TransferManager.TransferReason.None) { cargoDiff = Convert.ToInt32((buildingData.m_customBuffer1 - __state[0]) * reduceInputRate / RI_Data.GetFactorCargo(__instance.m_outputResource)); buildingData.m_customBuffer1 = (ushort)Mathf.Clamp(__state[0] + (cargoDiff << 4), 0, 64000); } } else { buildingData.m_customBuffer2 = (ushort)Mathf.Clamp(__state[1], 0, 64000); Mod.SplitBytes((ushort)Mathf.Clamp(__state[2], 0, 64000), ref buildingData.m_teens, ref buildingData.m_youngs); Mod.SplitBytes((ushort)Mathf.Clamp(__state[3], 0, 64000), ref buildingData.m_adults, ref buildingData.m_seniors); Mod.SplitBytes((ushort)Mathf.Clamp(__state[4], 0, 64000), ref buildingData.m_education1, ref buildingData.m_education2); buildingData.m_customBuffer1 = (ushort)Mathf.Clamp(__state[0], 0, 64000); } } }
public static void Postfix(ref InstanceID ___m_InstanceID, ref UILabel ___m_expenses) { ushort id = ___m_InstanceID.Building; Building building = Singleton <BuildingManager> .instance.m_buildings.m_buffer[id]; UniqueFactoryAI ai = (UniqueFactoryAI)building.Info.m_buildingAI; int volume; byte health = Singleton <BuildingManager> .instance.m_buildings.m_buffer[id].m_health; volume = health * ai.m_inputRate1 * 16 / 100; long input1 = volume * IndustryBuildingAI.GetResourcePrice(ai.m_inputResource1) / (long)RI_Data.GetFactorCargo(ai.m_inputResource1) / 10000; volume = health * ai.m_inputRate2 * 16 / 100; long input2 = volume * IndustryBuildingAI.GetResourcePrice(ai.m_inputResource2) / (long)RI_Data.GetFactorCargo(ai.m_inputResource2) / 10000; volume = health * ai.m_inputRate3 * 16 / 100; long input3 = volume * IndustryBuildingAI.GetResourcePrice(ai.m_inputResource3) / (long)RI_Data.GetFactorCargo(ai.m_inputResource3) / 10000; volume = health * ai.m_inputRate4 * 16 / 100; long input4 = volume * IndustryBuildingAI.GetResourcePrice(ai.m_inputResource4) / (long)RI_Data.GetFactorCargo(ai.m_inputResource4) / 10000; ___m_expenses.text = (input1 + input2 + input3 + input4).ToString(Settings.moneyFormatNoCents, LocaleManager.cultureInfo); }