public bool PackupVehicles(Sim sim, bool onlyMine) { if (sim == null) { return(false); } AddTry("Packup Vehicles"); if (sim.LotHome == null) { IncStat("Packup: Homeless"); return(false); } List <Vehicle> vehicles = GetLotVehicles(sim.LotHome); foreach (Vehicle vehicle in vehicles) { if (onlyMine) { IOwnableVehicle ownable = vehicle as IOwnableVehicle; if (ownable == null) { continue; } if (ownable != sim.GetPreferredVehicle()) { continue; } } if (Inventories.TryToMove(vehicle, sim)) { IncStat("Packup: Packed " + vehicle.GetLocalizedName()); } else { IncStat("Packup: Fail " + vehicle.GetLocalizedName()); } } ClearWorth(sim.Household); return(true); }
public static Vehicle GetOwnedAndUsableVehicle(Sim ths, Lot lot, bool bAddPending, bool bAllowBikes, bool bIgnoreCanDrive, bool allowUFO) { if (ths.IsPet) { return(null); } Vehicle vehicleForCurrentInteraction = ths.GetVehicleForCurrentInteraction(); if (vehicleForCurrentInteraction != null) { return(vehicleForCurrentInteraction); } /* * if (GameUtils.IsInstalled(ProductVersion.EP2)) * { * ActiveFireFighter occupation = ths.Occupation as ActiveFireFighter; * if (occupation != null) * { * Car vehicle = occupation.GetVehicle(bAddPending); * if (vehicle != null) * { * return vehicle; * } * } * } */ Vehicle reservedVehicle = ths.GetReservedVehicle(); if ((reservedVehicle != null) && (bAllowBikes || (!(reservedVehicle is Bicycle) && !(reservedVehicle is MagicBroom)))) { IOwnableVehicle vehicle3 = reservedVehicle as IOwnableVehicle; if (vehicle3 == null) { return(reservedVehicle); } if (ths.CanUseVehicleRightNow(vehicle3, true, true)) { if (bAddPending) { vehicle3.PendingUse = true; } return(reservedVehicle); } } /* * if (ths.OccupationAsPerformanceCareer != null) * { * Car car2 = ths.OccupationAsPerformanceCareer.GetCareerCar(); * if (car2 != null) * { * return car2; * } * } * else if (ths.CareerManager.OccupationAsCareer != null) * { * FortuneTellerCareer career = ths.CareerManager.Occupation as FortuneTellerCareer; * if (((career != null) && (career.CurLevelBranchName == "ScamArtist")) && (career.Level >= FortuneTellerCareer.kLevelNeededForLimoRide)) * { * Car car3 = GlobalFunctions.CreateObjectOutOfWorld("CarLimo") as Car; * car3.DestroyOnRelease = true; * return car3; * } * } */ IOwnableVehicle preferredVehicle = ths.GetPreferredVehicle(); if (ths.CanUseVehicleRightNow(preferredVehicle, true, bIgnoreCanDrive) && (bAllowBikes || (!(reservedVehicle is Bicycle) && !(reservedVehicle is MagicBroom)))) { if (bAddPending) { preferredVehicle.PendingUse = true; } return(preferredVehicle as Vehicle); } if (bAllowBikes && ths.HasTrait(TraitNames.Rebellious)) { IOwnableVehicle motorcycleIfAvailable = ths.GetMotorcycleIfAvailable(bAddPending, bIgnoreCanDrive); if (motorcycleIfAvailable != null) { return(motorcycleIfAvailable as Vehicle); } } if (bAllowBikes && ths.HasTrait(TraitNames.EnvironmentallyConscious)) { IOwnableVehicle bikeIfAvailable = ths.GetBikeIfAvailable(bAddPending, bIgnoreCanDrive); if (bikeIfAvailable != null) { return(bikeIfAvailable as Vehicle); } } // Custom List <IOwnableVehicle> vehicles = Inventories.QuickDuoFind <IOwnableVehicle, Vehicle>(ths.Inventory); IOwnableVehicle vehicle = ths.GetBroomOrMostExpensiveUsableVehicle(vehicles, bAllowBikes, bAddPending, bIgnoreCanDrive, allowUFO, false); if (vehicle != null) { return(vehicle as Vehicle); } vehicles.Clear(); vehicle = ths.GetMostExpensiveUsableParkedVehicle(lot, bAllowBikes, bAddPending, bIgnoreCanDrive, allowUFO); if (vehicle != null) { return(vehicle as Vehicle); } if (lot != ths.LotHome) { vehicle = ths.GetMostExpensiveUsableParkedVehicle(ths.LotHome, bAllowBikes, bAddPending, bIgnoreCanDrive, allowUFO); if (vehicle != null) { return(vehicle as Vehicle); } } /* * Car careerCar = ths.GetCareerCar(); * if (careerCar != null) * { * IOwnableVehicle vehicle8 = careerCar as IOwnableVehicle; * if (bAddPending && (vehicle8 != null)) * { * vehicle8.PendingUse = true; * } * return careerCar; * } */ return(null); }
protected override void PrivatePerformAction(bool prompt) { Overwatch.Log(Name); Dictionary <IGameObject, bool> outOfWorldObjects = new Dictionary <IGameObject, bool>(); Dictionary <ObjectGuid, bool> reservedObjects = new Dictionary <ObjectGuid, bool>(); foreach (ParkingSpace space in Sims3.Gameplay.Queries.GetObjects <ParkingSpace>()) { Vehicle vehicle = space.GetContainedVehicle(); if (vehicle == null && space.ReservedVehicle != null) { space.mReservedVehicle = null; } if (vehicle == null) { continue; } if (!RetainOnLot(space)) { continue; } reservedObjects[vehicle.ObjectId] = true; } foreach (MooringPost post in Sims3.Gameplay.Queries.GetObjects <MooringPost>()) { Vehicle vehicle = post.GetContainedVehicle(); if (vehicle == null) { continue; } if (!RetainOnLot(post)) { continue; } reservedObjects[vehicle.ObjectId] = true; } foreach (BikeRack rack in Sims3.Gameplay.Queries.GetObjects <BikeRack>()) { if (!RetainOnLot(rack)) { continue; } foreach (Bicycle bike in rack.GetContainedBikes()) { reservedObjects[bike.ObjectId] = true; } } foreach (SimDescription sim in SimListing.GetResidents(false).Values) { if (sim.BoardingSchool != null) { AddOutOfWorldObjects(outOfWorldObjects, sim.BoardingSchool.mInventoryItems); } if (sim.mInventoryItemsWhileInPassport != null) { AddOutOfWorldObjects(outOfWorldObjects, sim.mInventoryItemsWhileInPassport); } Sim createdSim = sim.CreatedSim; if (createdSim != null) { PoliceStation.GoToJail interaction = createdSim.CurrentInteraction as PoliceStation.GoToJail; if ((interaction != null) && (interaction.mInmatesObjects != null)) { foreach (IGameObject obj in interaction.mInmatesObjects) { outOfWorldObjects[obj] = true; } } Vehicle reserved = createdSim.GetReservedVehicle(); if (reserved != null) { reservedObjects[reserved.ObjectId] = true; } } ObjectGuid preferred = sim.mPreferredVehicleGuid; if (preferred != ObjectGuid.InvalidObjectGuid) { reservedObjects[preferred] = true; } } if (ParentsLeavingTownSituation.sAdultsInventories != null) { foreach (List <InventoryItem> list in ParentsLeavingTownSituation.sAdultsInventories.Values) { AddOutOfWorldObjects(outOfWorldObjects, list); } } int count = 0; foreach (Vehicle vehicle in Sims3.Gameplay.Queries.GetObjects <Vehicle>()) { if (outOfWorldObjects.ContainsKey(vehicle)) { continue; } if (vehicle.HasFlags(GameObject.FlagField.IsStolen)) { continue; } if (reservedObjects.ContainsKey(vehicle.ObjectId)) { continue; } if ((!vehicle.InInventory) && (vehicle.Driver != null) && (!vehicle.Driver.HasBeenDestroyed)) { if (vehicle.Driver.LotCurrent == vehicle.LotCurrent) { continue; } if (vehicle.Driver.IsPerformingAService) { continue; } } // Temporary until further review can be done if (vehicle is CarUFO) { continue; } if (vehicle is WindSurfboard) { // These vehicles can be placed on the ground, so don't require a parent continue; } if (vehicle is MagicBroom) { if (vehicle.InInventory) { continue; } if (vehicle.Parent is BroomStand) { continue; } } else { IOwnableVehicle ownableVehicle = vehicle as IOwnableVehicle; if (ownableVehicle != null) { if (ownableVehicle.PendingUse) { continue; } CarOwnable carOwnable = vehicle as CarOwnable; if (carOwnable != null) { if (!carOwnable.GeneratedOwnableForNpc) { continue; } } else { BoatOwnable boatOwnable = vehicle as BoatOwnable; if (boatOwnable != null) { if (!boatOwnable.GeneratedOwnableForNpc) { continue; } } else { if (ownableVehicle.InInventory) { continue; } } } } if ((vehicle is FoodTruckBase) || (vehicle is CarService)) { if (vehicle.InWorld) { continue; } } } if ((vehicle.InWorld) && (vehicle.InUse)) { bool found = false; foreach (Sim sim in vehicle.ActorsUsingMe) { if (!sim.HasBeenDestroyed) { found = true; break; } } if (found) { continue; } } string parentSpace = null; if (vehicle.Parent != null) { parentSpace = vehicle.Parent.GetType().ToString(); if (parentSpace.Contains("GalleryShopParkingSpace") || parentSpace.Contains("StoreSetParkingSpace")) { continue; } } { string catalogName = vehicle.CatalogName; bool inInventory = vehicle.InInventory; vehicle.UnParent(); IUsesParkingSpace parker = vehicle as IUsesParkingSpace; if (parker != null) { ParkingSpace space = vehicle.Parent as ParkingSpace; if (space != null) { space.UnReserveSpot(parker); } else { MooringPost post = vehicle.Parent as MooringPost; if (post != null) { post.UnReserveSpot(parker as Boat); } } } vehicle.Destroy(); if (!(vehicle is LightweightTaxi)) { count++; Overwatch.Log("Towed " + catalogName); if (inInventory) { Overwatch.Log(" Was InInventory"); } if (!string.IsNullOrEmpty(parentSpace)) { Overwatch.Log(" Space: " + parentSpace); } } } } if ((count > 0) || (prompt)) { Overwatch.AlarmNotify(Common.Localize("CleanupVehicles:Complete", false, new object[] { count })); } }
protected override bool Allow(SimDescription sim) { if (!base.Allow(sim)) { return(false); } if ((sim.CreatedSim.LotCurrent == null) || (sim.CreatedSim.LotCurrent.IsWorldLot)) { IncStat("In Transit"); return(false); } else if (!Households.AllowGuardian(sim)) { IncStat("Too Young"); return(false); } else if (sim.GetPreferredVehicle() != null) { IncStat("Preferred"); return(false); } else { bool found = false; List <IOwnableVehicle> vehicles = Inventories.InventoryDuoFindAll <IOwnableVehicle, Vehicle>(sim); IOwnableVehicle choice = sim.CreatedSim.GetOwnedAndUsableVehicle(sim.CreatedSim.LotCurrent) as IOwnableVehicle; if (choice != null) { vehicles.Add(choice); } IOwnableVehicle reserved = sim.CreatedSim.GetReservedVehicle() as IOwnableVehicle; if (reserved != null) { if (!vehicles.Contains(reserved)) { vehicles.Add(reserved); } } IOwnableVehicle preferred = sim.CreatedSim.GetPreferredVehicle(); if (preferred != null) { if (!vehicles.Contains(preferred)) { vehicles.Add(preferred); } } AddStat("Vehicles", vehicles.Count); foreach (IOwnableVehicle existing in vehicles) { CarOwnable car = existing as CarOwnable; if ((car != null) && (car.GeneratedOwnableForNpc)) { continue; } T vehicle = existing as T; if ((vehicle != null) && (!Test(vehicle))) { IncStat("Has Other Type"); return(false); } found = true; } if (found) { if (AddScoring("ReplaceVehicle", sim) <= 0) { IncStat("Replace Score Fail"); return(false); } } } return(true); }