예제 #1
0
 /// <summary>
 /// Copied from original game code at game version 1.2.2 f3.
 /// </summary>
 /// <param name="hearseAI">The hearse AI.</param>
 /// <param name="vehicleID">The vehicle identifier.</param>
 /// <param name="data">The data.</param>
 /// <returns>True if vehicle should return to source.</returns>
 private static bool HearseAI_ShouldReturnToSource_Original(HearseAI hearseAI, ushort vehicleID, ref Vehicle data)
 {
     if ((int)data.m_sourceBuilding != 0)
     {
         BuildingManager instance = Singleton <BuildingManager> .instance;
         if ((instance.m_buildings.m_buffer[(int)data.m_sourceBuilding].m_flags & (Building.Flags.Active | Building.Flags.Downgrading)) != Building.Flags.Active && (int)instance.m_buildings.m_buffer[(int)data.m_sourceBuilding].m_fireIntensity == 0)
         {
             return(true);
         }
     }
     return(false);
 }
        public static bool Prefix(ref HearseAI __instance, ushort vehicleID, ref Vehicle data, ref bool __result)
        {
            if (data.m_targetBuilding == 0)
            {
                Singleton <VehicleManager> .instance.ReleaseVehicle(vehicleID);

                __result = true;
                return(false);
            }
            if (data.m_transferType == 42)
            {
                int num = 0;
                if ((data.m_flags & Vehicle.Flags.TransferToTarget) != (Vehicle.Flags) 0)
                {
                    num = (int)data.m_transferSize;
                }
                if ((data.m_flags & Vehicle.Flags.TransferToSource) != (Vehicle.Flags) 0)
                {
                    num = Mathf.Min(0, (int)data.m_transferSize - __instance.m_corpseCapacity);
                }
                BuildingManager instance = Singleton <BuildingManager> .instance;
                BuildingInfo    info     = instance.m_buildings.m_buffer[(int)data.m_targetBuilding].Info;
                info.m_buildingAI.ModifyMaterialBuffer(data.m_targetBuilding, ref instance.m_buildings.m_buffer[(int)data.m_targetBuilding], (TransferManager.TransferReason)data.m_transferType, ref num);
                ProcessDeadmoveIncomeArriveAtTarget(ref data, num);
                if ((data.m_flags & Vehicle.Flags.TransferToTarget) != (Vehicle.Flags) 0)
                {
                    data.m_transferSize = (ushort)Mathf.Clamp((int)data.m_transferSize - num, 0, (int)data.m_transferSize);
                }
                if ((data.m_flags & Vehicle.Flags.TransferToSource) != (Vehicle.Flags) 0)
                {
                    data.m_transferSize += (ushort)Mathf.Max(0, -num);
                }
                if (data.m_sourceBuilding != 0 && (instance.m_buildings.m_buffer[(int)data.m_sourceBuilding].m_flags & Building.Flags.IncomingOutgoing) == Building.Flags.Outgoing)
                {
                    BuildingInfo info2 = instance.m_buildings.m_buffer[(int)data.m_sourceBuilding].Info;
                    ushort       num2  = instance.FindBuilding(instance.m_buildings.m_buffer[(int)data.m_sourceBuilding].m_position, 200f, info2.m_class.m_service, info2.m_class.m_subService, Building.Flags.Incoming, Building.Flags.Outgoing);
                    if (num2 != 0)
                    {
                        instance.m_buildings.m_buffer[(int)data.m_sourceBuilding].RemoveOwnVehicle(vehicleID, ref data);
                        data.m_sourceBuilding = num2;
                        instance.m_buildings.m_buffer[(int)data.m_sourceBuilding].AddOwnVehicle(vehicleID, ref data);
                    }
                }
                __instance.SetTarget(vehicleID, ref data, 0);
                __result = false;
                return(false);
            }
            return(true);
        }
예제 #3
0
        /// <summary>
        /// Vehicles with no target should always return to source.
        /// </summary>
        /// <param name="hearseAI">The hearse AI.</param>
        /// <param name="vehicleId">The vehicle identifier.</param>
        /// <param name="vehicle">The vehicle.</param>
        /// <returns>True if vehicle should return to source.</returns>
        private static bool HearseAI_ShouldReturnToSource_Override(HearseAI hearseAI, ushort vehicleId, ref Vehicle vehicle)
        {
            Calls++;
            if (vehicle.m_sourceBuilding == 0)
            {
                return(false);
            }

            if (vehicle.m_targetBuilding == 0 && (vehicle.m_flags & Vehicle.Flags.TransferToTarget) == ~VehicleHelper.VehicleAll)
            {
                BuildingManager instance = Singleton <BuildingManager> .instance;
                if (instance.m_buildings.m_buffer[vehicle.m_sourceBuilding].m_fireIntensity == 0)
                {
                    return(true);
                }
            }

            return(HearseAI_ShouldReturnToSource_Original(hearseAI, vehicleId, ref vehicle));
        }
        /// <summary>
        /// Vehicles with no target should always return to source.
        /// </summary>
        /// <param name="hearseAI">The hearse AI.</param>
        /// <param name="vehicleId">The vehicle identifier.</param>
        /// <param name="vehicle">The vehicle.</param>
        /// <returns>True if vehicle should return to source.</returns>
        private static bool HearseAI_ShouldReturnToSource_Override(HearseAI hearseAI, ushort vehicleId, ref Vehicle vehicle)
        {
            Calls++;
            if (vehicle.m_sourceBuilding == 0)
            {
                return false;
            }

            if (vehicle.m_targetBuilding == 0 && (vehicle.m_flags & Vehicle.Flags.TransferToTarget) == ~Vehicle.Flags.All)
            {
                BuildingManager instance = Singleton<BuildingManager>.instance;
                if (instance.m_buildings.m_buffer[vehicle.m_sourceBuilding].m_fireIntensity == 0)
                {
                    return true;
                }
            }

            return HearseAI_ShouldReturnToSource_Original(hearseAI, vehicleId, ref vehicle);
        }
 /// <summary>
 /// Copied from original game code at game version 1.2.2 f3.
 /// </summary>
 /// <param name="hearseAI">The hearse AI.</param>
 /// <param name="vehicleID">The vehicle identifier.</param>
 /// <param name="data">The data.</param>
 /// <returns>True if vehicle should return to source.</returns>
 private static bool HearseAI_ShouldReturnToSource_Original(HearseAI hearseAI, ushort vehicleID, ref Vehicle data)
 {
     if ((int)data.m_sourceBuilding != 0)
     {
         BuildingManager instance = Singleton<BuildingManager>.instance;
         if ((instance.m_buildings.m_buffer[(int)data.m_sourceBuilding].m_flags & (Building.Flags.Active | Building.Flags.Downgrading)) != Building.Flags.Active && (int)instance.m_buildings.m_buffer[(int)data.m_sourceBuilding].m_fireIntensity == 0)
             return true;
     }
     return false;
 }