public override void OnLevelLoaded(LoadMode mode) { base.OnLevelLoaded(mode); if (mode == LoadMode.LoadGame || mode == LoadMode.NewGame) { ReplacePathManager(); CustomCarAI.RedirectCalls(m_redirectionStates); CustomPassengerCarAI.RedirectCalls(m_redirectionStates); CustomCargoTruckAI.RedirectCalls(m_redirectionStates); if (Instance == null) { Instance = this; } UI = ToolsModifierControl.toolController.gameObject.AddComponent <UIBase>(); TrafficPriority.leftHandDrive = Singleton <SimulationManager> .instance.m_metaData.m_invertTraffic == SimulationMetaData.MetaBool.True; RoadCustomizerTool = AddTool <CSL_Traffic.RoadCustomizerTool>(ToolsModifierControl.toolController); ToolsModifierControl.SetTool <DefaultTool>(); } }
public static bool Prefix(ref CargoTruckAI __instance, ushort vehicleID, ref Vehicle data, ushort targetBuilding) { if ((data.m_transferType == 127) || (data.m_transferType == 126)) { data.m_targetBuilding = targetBuilding; if (!CustomCargoTruckAI.CustomStartPathFind(vehicleID, ref data)) { data.m_transferType = MainDataStore.preTranferReason[vehicleID]; data.m_targetBuilding = 0; __instance.SetTarget(vehicleID, ref data, 0); if (MainDataStore.finalVehicleForFuelCount[MainDataStore.TargetGasBuilding[vehicleID]] > 0) { MainDataStore.finalVehicleForFuelCount[MainDataStore.TargetGasBuilding[vehicleID]]--; } MainDataStore.TargetGasBuilding[vehicleID] = 0; data.Unspawn(vehicleID); } return(false); } return(true); }
public static void StartSpecialBuildingTransfer(ushort buildingID, ref Building data, TransferManager.TransferReason material, TransferManager.TransferOffer offer) { VehicleInfo vehicleInfo = null; if (material == (TransferManager.TransferReason) 124) { vehicleInfo = Singleton <VehicleManager> .instance.GetRandomVehicleInfo(ref Singleton <SimulationManager> .instance.m_randomizer, ItemClass.Service.Industrial, ItemClass.SubService.IndustrialForestry, ItemClass.Level.Level1); } else if (material == (TransferManager.TransferReason) 125) { vehicleInfo = Singleton <VehicleManager> .instance.GetRandomVehicleInfo(ref Singleton <SimulationManager> .instance.m_randomizer, ItemClass.Service.Industrial, ItemClass.SubService.IndustrialFarming, ItemClass.Level.Level1); } if (vehicleInfo != null) { Array16 <Vehicle> vehicles = Singleton <VehicleManager> .instance.m_vehicles; if (Singleton <VehicleManager> .instance.CreateVehicle(out ushort vehicleID, ref Singleton <SimulationManager> .instance.m_randomizer, vehicleInfo, data.m_position, material, false, true)) { vehicleInfo.m_vehicleAI.SetSource(vehicleID, ref vehicles.m_buffer[vehicleID], buildingID); if (vehicleInfo.m_vehicleAI is CargoTruckAI) { CargoTruckAI AI = vehicleInfo.m_vehicleAI as CargoTruckAI; CustomCargoTruckAI.CargoTruckAISetSourceForRealConstruction(vehicleID, ref vehicles.m_buffer[vehicleID], buildingID); vehicles.m_buffer[(int)vehicleID].m_transferSize = (ushort)AI.m_cargoCapacity; } else { DebugLog.LogToFileOnly("Error: vehicleInfo is not cargoTruckAI " + vehicleInfo.m_vehicleAI.ToString()); } vehicleInfo.m_vehicleAI.StartTransfer(vehicleID, ref vehicles.m_buffer[vehicleID], material, offer); ushort building4 = offer.Building; if (building4 != 0) { vehicleInfo.m_vehicleAI.GetSize(vehicleID, ref vehicles.m_buffer[vehicleID], out int _, out int _); } } } }
public static bool Prefix(ref CargoTruckAI __instance, ushort vehicleID, ref Vehicle data, ushort targetBuilding) { if ((data.m_transferType == 127) || (data.m_transferType == 126)) { if (targetBuilding == data.m_targetBuilding) { return(true); } else { data.m_flags &= ~Vehicle.Flags.WaitingTarget; data.m_waitCounter = 0; ushort tempTargetBuilding = data.m_targetBuilding; data.m_targetBuilding = MainDataStore.TargetGasBuilding[vehicleID]; bool success = CustomCargoTruckAI.CustomStartPathFind(vehicleID, ref data); data.m_targetBuilding = tempTargetBuilding; if (!success) { data.m_transferType = MainDataStore.preTranferReason[vehicleID]; PathManager instance = Singleton <PathManager> .instance; if (data.m_path != 0u) { instance.ReleasePath(data.m_path); data.m_path = 0; } __instance.SetTarget(vehicleID, ref data, data.m_targetBuilding); if (MainDataStore.finalVehicleForFuelCount[MainDataStore.TargetGasBuilding[vehicleID]] > 0) { MainDataStore.finalVehicleForFuelCount[MainDataStore.TargetGasBuilding[vehicleID]]--; } MainDataStore.TargetGasBuilding[vehicleID] = 0; } return(false); } } return(true); }
public static void CargoTruckAIArriveAtTargetForRealConstruction(ushort vehicleID, ref Vehicle vehicleData) { BuildingManager instance = Singleton <BuildingManager> .instance; if (vehicleData.m_targetBuilding != 0) { Building buildingData = instance.m_buildings.m_buffer[vehicleData.m_targetBuilding]; if (!(buildingData.Info.m_buildingAI is OutsideConnectionAI)) { if (buildingData.m_flags.IsFlagSet(Building.Flags.Created) && (!buildingData.m_flags.IsFlagSet(Building.Flags.Completed)) && (!buildingData.m_flags.IsFlagSet(Building.Flags.Deleted))) { if (vehicleData.m_transferType == 124) { vehicleData.m_transferSize = 0; MainDataStore.constructionResourceBuffer[vehicleData.m_targetBuilding] = 8000; } } else { if (ResourceBuildingAI.IsSpecialBuilding(vehicleData.m_targetBuilding) == true) { switch ((TransferManager.TransferReason)vehicleData.m_transferType) { case TransferManager.TransferReason.Food: if (MainDataStore.foodBuffer[vehicleData.m_targetBuilding] < 57000) { MainDataStore.foodBuffer[vehicleData.m_targetBuilding] += vehicleData.m_transferSize; } if (Loader.isRealCityRunning) { float productionValue1 = vehicleData.m_transferSize * CustomCargoTruckAI.GetResourcePrice((TransferManager.TransferReason)vehicleData.m_transferType); Singleton <EconomyManager> .instance.FetchResource(EconomyManager.Resource.ResourcePrice, (int)productionValue1, ItemClass.Service.PlayerIndustry, ItemClass.SubService.PlayerIndustryFarming, ItemClass.Level.Level1); } vehicleData.m_transferSize = 0; break; case TransferManager.TransferReason.Lumber: if (MainDataStore.lumberBuffer[vehicleData.m_targetBuilding] < 57000) { MainDataStore.lumberBuffer[vehicleData.m_targetBuilding] += vehicleData.m_transferSize; } if (Loader.isRealCityRunning) { float productionValue1 = vehicleData.m_transferSize * CustomCargoTruckAI.GetResourcePrice((TransferManager.TransferReason)vehicleData.m_transferType); Singleton <EconomyManager> .instance.FetchResource(EconomyManager.Resource.ResourcePrice, (int)productionValue1, ItemClass.Service.PlayerIndustry, ItemClass.SubService.PlayerIndustryForestry, ItemClass.Level.Level1); } vehicleData.m_transferSize = 0; break; case TransferManager.TransferReason.Coal: if (MainDataStore.coalBuffer[vehicleData.m_targetBuilding] < 57000) { MainDataStore.coalBuffer[vehicleData.m_targetBuilding] += vehicleData.m_transferSize; } if (Loader.isRealCityRunning) { float productionValue1 = vehicleData.m_transferSize * CustomCargoTruckAI.GetResourcePrice((TransferManager.TransferReason)vehicleData.m_transferType); Singleton <EconomyManager> .instance.FetchResource(EconomyManager.Resource.ResourcePrice, (int)productionValue1, ItemClass.Service.PlayerIndustry, ItemClass.SubService.PlayerIndustryOre, ItemClass.Level.Level1); } vehicleData.m_transferSize = 0; break; case TransferManager.TransferReason.Petrol: if (MainDataStore.petrolBuffer[vehicleData.m_targetBuilding] < 57000) { MainDataStore.petrolBuffer[vehicleData.m_targetBuilding] += vehicleData.m_transferSize; } if (Loader.isRealCityRunning) { float productionValue1 = vehicleData.m_transferSize * CustomCargoTruckAI.GetResourcePrice((TransferManager.TransferReason)vehicleData.m_transferType); Singleton <EconomyManager> .instance.FetchResource(EconomyManager.Resource.ResourcePrice, (int)productionValue1, ItemClass.Service.PlayerIndustry, ItemClass.SubService.PlayerIndustryOil, ItemClass.Level.Level1); } vehicleData.m_transferSize = 0; break; default: //DebugLog.LogToFileOnly("Error: Unknow m_transferType in realconstruction = " + vehicleData.m_transferType.ToString()); break; } } else { if (vehicleData.m_transferType == 125) { vehicleData.m_transferSize = 0; MainDataStore.operationResourceBuffer[vehicleData.m_targetBuilding] += 8000; } } } } } }