Example #1
0
        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;
                            }
                        }
                    }
                }
            }
        }