コード例 #1
0
        public static void CarAIPathfindFailurePostFix(ushort vehicleID, ref Vehicle data)
        {
            ushort i = vehicleID;

            if ((data.m_transferType == 112) || (data.m_transferType == 113))
            {
                if (data.Info.m_vehicleAI is CargoTruckAI && (data.m_targetBuilding != 0))
                {
                    CargoTruckAI AI = (CargoTruckAI)data.Info.m_vehicleAI;
#if DEBUG
                    DebugLog.LogToFileOnly("PathFind not success " + i.ToString() + "transferType = " + vehicle.m_transferType.ToString() + "And MainDataStore.TargetGasBuilding[vehicleID] = " + MainDataStore.TargetGasBuilding[i].ToString() + "data.m_targetBuilding = " + vehicle.m_targetBuilding.ToString());
#endif
                    AI.SetTarget((ushort)i, ref data, data.m_targetBuilding);
#if DEBUG
                    DebugLog.LogToFileOnly("Reroute to target " + i.ToString() + "vehicle.m_path = " + vehicle.m_path.ToString() + vehicle.m_flags.ToString());
#endif
                    data.m_transferType = MainDataStore.preTranferReason[i];
                    MainDataStore.TargetGasBuilding[i] = 0;
                    return;
                }
                else if (data.Info.m_vehicleAI is PassengerCarAI && data.Info.m_class.m_subService == ItemClass.SubService.ResidentialLow)
                {
                    PassengerCarAI AI = (PassengerCarAI)data.Info.m_vehicleAI;
                    AI.SetTarget((ushort)i, ref data, 0);
                    data.m_transferType = MainDataStore.preTranferReason[i];
                    MainDataStore.TargetGasBuilding[i] = 0;
                    return;
                }
            }
        }
コード例 #2
0
        public static void CargoTruckAIArriveAtSourceForRealGasStationPre(ref CargoTruckAI __instance, ushort vehicleID, ref Vehicle data)
        {
            var distance = Vector3.Distance(data.GetLastFramePosition(), Singleton <BuildingManager> .instance.m_buildings.m_buffer[MainDataStore.TargetGasBuilding[vehicleID]].m_position);

            if (distance < 80f)
            {
                if (MainDataStore.petrolBuffer[MainDataStore.TargetGasBuilding[vehicleID]] > 400)
                {
                    MainDataStore.petrolBuffer[MainDataStore.TargetGasBuilding[vehicleID]] -= 400;
                }
            }
            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;

            if (distance < 80f)
            {
                if (Loader.isRealCityRunning)
                {
                    int money = (int)(400f * RealCityUtil.GetResourcePrice(TransferManager.TransferReason.Petrol) + 1000);
                    if (data.m_flags.IsFlagSet(Vehicle.Flags.DummyTraffic))
                    {
                        Singleton <EconomyManager> .instance.AddResource(EconomyManager.Resource.PublicIncome, money, ItemClass.Service.Vehicles, ItemClass.SubService.PlayerIndustryOil, ItemClass.Level.Level2);
                    }
                    else
                    {
                        Singleton <EconomyManager> .instance.AddResource(EconomyManager.Resource.PublicIncome, money, ItemClass.Service.Vehicles, ItemClass.SubService.None, ItemClass.Level.Level2);
                    }
                }
            }
        }
コード例 #3
0
 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);
 }
コード例 #4
0
 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);
 }
コード例 #5
0
 public static void StartGasTransfer(ushort vehicleID, ref Vehicle data, TransferManager.TransferReason material, TransferManager.TransferOffer offer)
 {
     if ((material == (TransferManager.TransferReason) 113) || (material == (TransferManager.TransferReason) 112))
     {
         if (data.Info.m_vehicleAI is CargoTruckAI)
         {
             CargoTruckAI AI = (CargoTruckAI)data.Info.m_vehicleAI;
             MainDataStore.preTranferReason[vehicleID]  = data.m_transferType;
             MainDataStore.TargetGasBuilding[vehicleID] = offer.Building;
             data.m_transferType = 113;
             if (offer.Building == data.m_targetBuilding)
             {
                 DebugLog.LogToFileOnly("Error: Transfer fuel cargotruck do not need fuel");
             }
             if (data.m_flags.IsFlagSet(Vehicle.Flags.Created) && !data.m_flags.IsFlagSet(Vehicle.Flags.Deleted) && !data.m_flags.IsFlagSet(Vehicle.Flags.Arriving) && (data.m_cargoParent == 0) && data.m_flags.IsFlagSet(Vehicle.Flags.Spawned) && !data.m_flags.IsFlagSet(Vehicle.Flags.GoingBack) && data.m_targetBuilding != 0 && !data.m_flags.IsFlagSet(Vehicle.Flags.Parking))
             {
                 if ((Vector3.Distance(data.GetLastFramePosition(), Singleton <BuildingManager> .instance.m_buildings.m_buffer[data.m_targetBuilding].m_position) > CanNotStartGasTransferDistance) && (FindCargoStation(data.GetLastFramePosition(), ItemClass.Service.PublicTransport, ItemClass.SubService.PublicTransportShip) == 0) && (FindCargoStation(data.GetLastFramePosition(), ItemClass.Service.PublicTransport, ItemClass.SubService.PublicTransportPlane) == 0) && (FindCargoStation(data.GetLastFramePosition(), ItemClass.Service.PublicTransport, ItemClass.SubService.PublicTransportTrain) == 0))
                 {
                     AI.SetTarget(vehicleID, ref data, offer.Building);
                 }
                 //else
                 //{
                 //DebugLog.LogToFileOnly("Info: Cargo is near target position, do not go to gas station now.");
                 //}
             }
             //else
             //{
             //    DebugLog.LogToFileOnly("Warning: Not a valid CargoTruckAI");
             //}
         }
         else if (data.Info.m_vehicleAI is PassengerCarAI)
         {
             PassengerCarAI AI = (PassengerCarAI)data.Info.m_vehicleAI;
             MainDataStore.preTranferReason[vehicleID] = data.m_transferType;
             if (data.m_targetBuilding == 0)
             {
                 MainDataStore.TargetGasBuilding[vehicleID] = offer.Building;
                 data.m_transferType = 112;
                 if (data.m_flags.IsFlagSet(Vehicle.Flags.Created) && !data.m_flags.IsFlagSet(Vehicle.Flags.Deleted) && !data.m_flags.IsFlagSet(Vehicle.Flags.Arriving) && (data.m_cargoParent == 0) && data.m_flags.IsFlagSet(Vehicle.Flags.Spawned) && !data.m_flags.IsFlagSet(Vehicle.Flags.GoingBack) && !data.m_flags.IsFlagSet(Vehicle.Flags.Parking))
                 {
                     ushort citizen = CustomCarAI.GetDriverInstance(vehicleID, ref data);
                     if (Singleton <CitizenManager> .instance.m_instances.m_buffer[citizen].m_targetBuilding != 0)
                     {
                         if ((Vector3.Distance(data.GetLastFramePosition(), Singleton <BuildingManager> .instance.m_buildings.m_buffer[Singleton <CitizenManager> .instance.m_instances.m_buffer[citizen].m_targetBuilding].m_position) > CanNotStartGasTransferDistance) && (FindCargoStation(data.GetLastFramePosition(), ItemClass.Service.PublicTransport, ItemClass.SubService.PublicTransportShip) == 0) && (FindCargoStation(data.GetLastFramePosition(), ItemClass.Service.PublicTransport, ItemClass.SubService.PublicTransportPlane) == 0) && (FindCargoStation(data.GetLastFramePosition(), ItemClass.Service.PublicTransport, ItemClass.SubService.PublicTransportTrain) == 0))
                         {
                             AI.SetTarget(vehicleID, ref data, offer.Building);
                         }
                         //else
                         //{
                         //DebugLog.LogToFileOnly("Info: PassengerCar is near target position, do not go to gas station now.");
                         //}
                     }
                     //else
                     //{
                     //    DebugLog.LogToFileOnly("Warning: No targetBuilding for citizen");
                     //}
                 }
                 //else
                 //{
                 //    DebugLog.LogToFileOnly("Warning: Not a valid PassengerCarAI");
                 //}
             }
             //else
             //{
             //    DebugLog.LogToFileOnly("Error: PassengerCarAI should not have targetBuilding");
             //}
         }
     }
 }