public void conductTarget(CityEvent thisEvent) { happiness += thisEvent.favor; battleReady += thisEvent.mongering; relations[thisEvent.perpetrator] += thisEvent.gratitude; checkDependencies(); }
public void conductPerpetrator(CityEvent thisEvent) { happiness += thisEvent.content; battleReady += thisEvent.warmup; relations[thisEvent.target] += thisEvent.sympathy; checkDependencies(); }
private CityEvent GetEventData(dynamic @event) { var data = new CityEvent(); data.Name = (string)@event.name; data.ExternalId = (string)@event.id; data.StartTime = GetStartTime(@event); data.EndTime = GetEndTime(@event); IEnumerable <Classification> classifs = GetClassifications(@event); data.Segment = classifs.FirstOrDefault(c => c.Type == ClassificationType.Segment); data.Genre = classifs.FirstOrDefault(c => c.Type == ClassificationType.Genre); data.SubGenre = classifs.FirstOrDefault(c => c.Type == ClassificationType.Subgenre); if (@event.images != null) { foreach (var image in @event.images) { if (image.width > MINIMUM_IMAGE_WIDTH) { data.ImagePath = image.url; } } } return(string.IsNullOrEmpty(data.ImagePath) ? null : data); }
private void UpdateEventBlocks() { _lastTime = CityEventManager.CITY_TIME; FastList <CityEvent> eventsInDay = CityEventManager.instance.EventsThatStartWithin(24D, true); FastList <EventData> gameEventsInDay = CityEventManager.instance.GameEventsThatStartWithin(24D, true); ClearEventBlocks(); for (int index = 0; index < eventsInDay.m_size; ++index) { CityEvent _event = eventsInDay.m_buffer[index]; CreateEvent(_event.m_eventData, new Color32(255, 230, 115, 255)); } for (int index = 0; index < gameEventsInDay.m_size; ++index) { EventData _event = gameEventsInDay.m_buffer[index]; Color32 eventColour = new Color32(220, 220, 220, 255); if (Experiments.ExperimentsToggle.TeamColourOnBar) { eventColour = _event.m_color; } CreateEvent(_event, eventColour); } }
public void AddToFavourites(int id, bool isAdd) { CityEvent myEvent = ctx.CityEvents.Where(a => a.CityEventID == id).FirstOrDefault(); if (isAdd == false) { myEvent.CityEventFavourite = false; } else { myEvent.CityEventFavourite = true; } ctx.SaveChanges(); }
private void LoadEventData() { CityEventManager eventManager = CityEventManager.instance; byte[] deserialisedEventData = serializableDataManager.LoadData(CimTools.CimToolsHandler.CimToolBase.ModSettings.ModName + "EventData"); if (deserialisedEventData != null) { MemoryStream memoryStream = new MemoryStream(); memoryStream.Write(deserialisedEventData, 0, deserialisedEventData.Length); memoryStream.Position = 0; BinaryFormatter binaryFormatter = new BinaryFormatter(); try { CityEventData[] eventData = binaryFormatter.Deserialize(memoryStream) as CityEventData[]; if (eventData != null) { foreach (CityEventData cityEvent in eventData) { CityEvent foundEvent = CityEventBuildings.instance.GetEventFromData(cityEvent); if (foundEvent != null) { LoggingWrapper.Log("Found event - starts: " + foundEvent.m_eventData.m_eventStartTime.ToShortDateString() + ", finishes: " + foundEvent.m_eventData.m_eventFinishTime.ToShortDateString() + ". " + foundEvent.m_eventData.m_registeredCitizens + "/" + foundEvent.GetCapacity() + " registered"); Debug.Log("Adding event"); eventManager.m_nextEvents.Add(foundEvent); } } } } catch (Exception ex) { Debug.Log("Failed to load events"); Debug.LogException(ex); } finally { memoryStream.Close(); } } }
public void Setup() { MockForms.Init(); selectedCityEvent = new CityEvent() { CityEventID = 1, CityEventName = "CityEventTestName", CityEventStartDate = 19318 , CityEventEndDate = 19332 , CityEventCost = "5 EUR" , NeighbourhoodID = 1, ChildDetail = "CheckChildDetail", CityEventAddress = "CheckAddressForEvent", CityEventCategoryID = 1, CityEventDescription = "CheckEventDescription" , CityEventImageURL = @"http://wwww.cloudtest.com/test.jpg" , TransportID = 1 , CityEventMapCoordinates = "40.369102, -3.684451" , DisabilityDetail = "CheckDetailForDisability" , CityEventWebSite = "WebSiteURL" , CityEventTelephone = "12345" , CityEventSubtext = "CheckSubtextForEvent" }; Mock <INavigation> mockNav = new Mock <INavigation>(); CityEventsListViewModel mylv = new CityEventsListViewModel(mockNav.Object); cityVM = new CityEventViewModel(mockNav.Object, true); cityVM.SetDetails(selectedCityEvent); }
private async Task InsertAllEventsAsync() { foreach (dynamic @event in _events) { CityEvent info = GetEventData(@event); if (info.Genre == null || info.SubGenre == null || info.Segment == null) { Console.WriteLine($"+++ Skipped {@event.name} (no segment or genre or subgenre)"); } else { EventVenue venue = GetVenue(@event); if (venue != null) { if (IsNewCityEvent(info)) { info.Venue = venue; _db.Events.Add(info); Console.WriteLine($"+++ Added {@event.name} in db AND docdb"); } else { Console.WriteLine($"+++ Skipped {@event.name} (already exists)"); } } else { Console.WriteLine($"+++ Skipped {@event.name} because has not venue"); } } try { await _db.SaveChangesAsync(); } catch (Exception ex) { Console.WriteLine($"+++ Error saving {@event.name}: {ex.Message}"); } } }
static public void CityUpdate(int time) { UpdateCrime(); if (time == 0) { return; } foreach (CityEvent listed in CityLife) { listed.UpdateEvent(); } CityEvent tempEvent = new CityEvent(); CityLife.Add(tempEvent); GameLog.Add(new Notification(tempEvent)); time--; lifetime++; CityUpdate(time); }
public void SetDetails(CityEvent city) { CityEventID = city.CityEventID; CityEventName = city.CityEventName; CityEventSubtext = city.CityEventSubtext; CityEventCost = city.CityEventCost; CityEventAddress = city.CityEventAddress; CityEventWebSite = city.CityEventWebSite; CityEventStartDate = city.CityEventStartDate; CityEventTelephone = city.CityEventTelephone; CityEventCategoryID = city.CityEventCategoryID; CityEventDescription = city.CityEventDescription; CityEventMapCoordinates = city.CityEventMapCoordinates; DisabilityAccess = city.DisabilityAccess; ChildFriendly = city.ChildFriendly; ChildDetail = city.ChildDetail; DisabilityDetail = city.DisabilityDetail; DisabilityAccess = city.DisabilityAccess; CityEventEndDate = city.CityEventEndDate; CityEventImageURL = city.CityEventImageURL; CityEventFavourite = city.CityEventFavourite; NeighbourhoodID = city.NeighbourhoodID; TransportID = city.TransportID; }
public static bool ProcessHome(ref ResidentAI thisAI, uint citizenID, ref Citizen person) { CitizenManager _citizenManager = Singleton <CitizenManager> .instance; SimulationManager _simulation = Singleton <SimulationManager> .instance; if ((person.m_flags & Citizen.Flags.MovingIn) != Citizen.Flags.None) { _citizenManager.ReleaseCitizen(citizenID); } else if (ProcessGenerics(ref thisAI, citizenID, ref person)) { if ((person.m_flags & Citizen.Flags.NeedGoods) != Citizen.Flags.None && (!Chances.WorkDay(ref person) || _simulation.m_currentDayTimeHour > Chances.m_startWorkHour)) //Wants to go shopping { if (person.m_homeBuilding != 0 && person.m_instance == 0 && person.m_vehicle == 0) //Person isn't already out and about { if (_simulation.m_isNightTime) { uint chance = _simulation.m_randomizer.UInt32(1000); if (chance < Chances.GoOutAtNight(person.Age) && NewResidentAI.DoRandomMove(thisAI)) { //Only go locally to find a shop at night FindCloseVisitPlace(ref thisAI, citizenID, ref person, person.m_homeBuilding, 1000f); return(true); } } else if (NewResidentAI.DoRandomMove(thisAI)) { uint chance = _simulation.m_randomizer.UInt32(100); if (chance < 10) { uint localChance = _simulation.m_randomizer.UInt32(100); ushort localVisitPlace = 0; if (ExperimentsToggle.AllowLocalBuildingSearch && localChance < ExperimentsToggle.LocalBuildingPercentage) { LoggingWrapper.Log("Citizen " + citizenID + " trying to find a local commercial building."); localVisitPlace = FindCloseVisitPlace(ref thisAI, citizenID, ref person, person.m_homeBuilding, 1000f); } if (localVisitPlace == 0) { LoggingWrapper.Log("Citizen " + citizenID + " going to a random commercial building."); NewResidentAI.FindVisitPlace(thisAI, citizenID, person.m_homeBuilding, NewResidentAI.GetShoppingReason(thisAI)); } return(true); } } } } else if (person.m_homeBuilding != 0 && person.m_instance != 0 && person.m_vehicle == 0 || NewResidentAI.DoRandomMove(thisAI)) //If the person is already out and about, or can move (based on entities already visible) { int eventId = CityEventManager.instance.EventStartsWithin(citizenID, ref person, StartMovingToEventTime); if (eventId != -1) { CityEvent _cityEvent = CityEventManager.instance.m_nextEvents[eventId]; if (_cityEvent.EventStartsWithin(StartMovingToEventTime) && !_cityEvent.EventStartsWithin(MaxMoveToEventTime)) { if ((person.m_instance != 0 || NewResidentAI.DoRandomMove(thisAI)) && _cityEvent.Register(citizenID, ref person)) { NewResidentAI.StartMoving(thisAI, citizenID, ref person, person.m_homeBuilding, _cityEvent.m_eventData.m_eventBuilding); person.SetVisitplace(citizenID, _cityEvent.m_eventData.m_eventBuilding, 0U); person.m_visitBuilding = _cityEvent.m_eventData.m_eventBuilding; return(true); } } } else { if (person.m_workBuilding != 0 && !_simulation.m_isNightTime && !Chances.ShouldReturnFromWork(ref person)) { if (Chances.ShouldGoToWork(ref person)) { NewResidentAI.StartMoving(thisAI, citizenID, ref person, person.m_homeBuilding, person.m_workBuilding); return(true); } } else { if (Chances.ShouldGoFindEntertainment(ref person)) { if (_simulation.m_isNightTime) { FindLeisure(ref thisAI, citizenID, ref person, person.m_homeBuilding); } else { NewResidentAI.FindVisitPlace(thisAI, citizenID, person.m_homeBuilding, NewResidentAI.GetEntertainmentReason(thisAI)); } return(true); } } } } } return(false); }
public static bool ProcessVisit(ref ResidentAI thisAI, uint citizenID, ref Citizen person) { if (ProcessGenerics(ref thisAI, citizenID, ref person)) { SimulationManager _simulation = Singleton <SimulationManager> .instance; WeatherManager _weatherManager = Singleton <WeatherManager> .instance; BuildingManager _buildingManager = Singleton <BuildingManager> .instance; ItemClass.Service service = ItemClass.Service.None; if (person.m_visitBuilding != 0) { service = _buildingManager.m_buildings.m_buffer[person.m_visitBuilding].Info.m_class.m_service; } if (service == ItemClass.Service.PoliceDepartment || service == ItemClass.Service.HealthCare) { if (person.m_homeBuilding != 0 && person.m_instance == 0 && person.m_vehicle == 0) { NewResidentAI.StartMoving(thisAI, citizenID, ref person, person.m_visitBuilding, person.m_homeBuilding); person.SetVisitplace(citizenID, 0, 0U); return(true); } } if (service == ItemClass.Service.Disaster) { if (_buildingManager.m_buildings.m_buffer[person.m_visitBuilding].m_flags.IsFlagSet(Building.Flags.Downgrading) && person.m_homeBuilding != 0 && person.m_vehicle == 0) { NewResidentAI.StartMoving(thisAI, citizenID, ref person, person.m_visitBuilding, person.m_homeBuilding); person.SetVisitplace(citizenID, 0, 0U); } } else if (!GameEventHelpers.EventTakingPlace(person.m_visitBuilding) && !CityEventManager.instance.EventTakingPlace(person.m_visitBuilding) && !CityEventManager.instance.EventStartsWithin(person.m_visitBuilding, 2D)) { int eventId = CityEventManager.instance.EventStartsWithin(citizenID, ref person, StartMovingToEventTime); bool eventOn = false; if (eventId != -1) { CityEvent _cityEvent = CityEventManager.instance.m_nextEvents[eventId]; if (_cityEvent.EventStartsWithin(StartMovingToEventTime) && !_cityEvent.EventStartsWithin(MaxMoveToEventTime)) { if ((person.m_instance != 0 || NewResidentAI.DoRandomMove(thisAI)) && _cityEvent.Register(citizenID, ref person)) { NewResidentAI.StartMoving(thisAI, citizenID, ref person, person.m_visitBuilding, _cityEvent.m_eventData.m_eventBuilding); person.SetVisitplace(citizenID, _cityEvent.m_eventData.m_eventBuilding, 0U); person.m_visitBuilding = _cityEvent.m_eventData.m_eventBuilding; eventOn = true; } } } if (!eventOn) { if (person.m_instance != 0 && _weatherManager.m_currentRain > 0 && _simulation.m_randomizer.Int32(0, 10) <= (_weatherManager.m_currentRain * 10)) { //It's raining, we're outside, and we need to go somewhere dry! if (person.m_workBuilding != 0 && !_simulation.m_isNightTime && !Chances.ShouldReturnFromWork(ref person)) { NewResidentAI.StartMoving(thisAI, citizenID, ref person, person.m_visitBuilding, person.m_workBuilding); LoggingWrapper.Log("Rain! Citizen " + citizenID + " is getting wet, and has decided to go back to work."); } else { NewResidentAI.StartMoving(thisAI, citizenID, ref person, person.m_visitBuilding, person.m_homeBuilding); LoggingWrapper.Log("Rain! Citizen " + citizenID + " is getting wet, and has decided to go home."); } person.SetVisitplace(citizenID, 0, 0U); } else if (person.m_workBuilding != 0 && (Chances.ShouldGoToWork(ref person) || ((Chances.LunchHour() || Chances.HoursSinceLunchHour(1.5f)) && Chances.ShouldGoToWork(ref person, true)))) { NewResidentAI.StartMoving(thisAI, citizenID, ref person, person.m_visitBuilding, person.m_workBuilding); person.SetVisitplace(citizenID, 0, 0U); LoggingWrapper.Log("Citizen " + citizenID + " was out and about but should've been at work. Going there now."); } else if ((person.m_flags & Citizen.Flags.NeedGoods) != Citizen.Flags.None) { if (person.m_visitBuilding == 0) { person.CurrentLocation = Citizen.Location.Home; } else { BuildingManager instance = Singleton <BuildingManager> .instance; BuildingInfo info = instance.m_buildings.m_buffer[person.m_visitBuilding].Info; int amountDelta = -100; info.m_buildingAI.ModifyMaterialBuffer(person.m_visitBuilding, ref instance.m_buildings.m_buffer[person.m_visitBuilding], TransferManager.TransferReason.Shopping, ref amountDelta); } return(true); } else if ((person.m_instance != 0 || NewResidentAI.DoRandomMove(thisAI)) && person.m_homeBuilding != 0 && person.m_vehicle == 0) { uint shouldStayPercent = 2; if (Chances.CanStayOut(ref person) && _simulation.m_randomizer.UInt32(100) < shouldStayPercent) { if (Chances.ShouldGoFindEntertainment(ref person)) { if (_simulation.m_isNightTime) { FindLeisure(ref thisAI, citizenID, ref person, person.m_visitBuilding); } else { NewResidentAI.FindVisitPlace(thisAI, citizenID, person.m_visitBuilding, NewResidentAI.GetEntertainmentReason(thisAI)); } return(true); } } else { NewResidentAI.StartMoving(thisAI, citizenID, ref person, person.m_visitBuilding, person.m_homeBuilding); person.SetVisitplace(citizenID, 0, 0U); return(true); } } } } } person.m_flags &= Citizen.Flags.Unemployed | Citizen.Flags.Wealth | Citizen.Flags.Location | Citizen.Flags.NoElectricity | Citizen.Flags.NoWater | Citizen.Flags.NoSewage | Citizen.Flags.BadHealth | Citizen.Flags.Created | Citizen.Flags.Tourist | Citizen.Flags.Sick | Citizen.Flags.Dead | Citizen.Flags.Student | Citizen.Flags.MovingIn | Citizen.Flags.DummyTraffic | Citizen.Flags.Criminal | Citizen.Flags.Arrested | Citizen.Flags.Evacuating | Citizen.Flags.Collapsed | Citizen.Flags.Education1 | Citizen.Flags.Education2 | Citizen.Flags.Education3 | Citizen.Flags.Original | Citizen.Flags.CustomName; return(false); }
public static bool ProcessWork(ref ResidentAI thisAI, uint citizenID, ref Citizen person) { CitizenManager _citizenManager = Singleton <CitizenManager> .instance; BuildingManager _buildingManager = Singleton <BuildingManager> .instance; SimulationManager _simulation = Singleton <SimulationManager> .instance; if (ProcessGenerics(ref thisAI, citizenID, ref person)) { if (person.m_instance != 0 || NewResidentAI.DoRandomMove(thisAI)) //If the person is already out and about, or can move (based on entities already visible) { if (Chances.ShouldReturnFromWork(ref person)) { int eventId = CityEventManager.instance.EventStartsWithin(citizenID, ref person, StartMovingToEventTime); if (eventId != -1) { CityEvent _cityEvent = CityEventManager.instance.m_nextEvents[eventId]; if (_cityEvent.EventStartsWithin(StartMovingToEventTime) && !_cityEvent.EventStartsWithin(MaxMoveToEventTime)) { if ((person.m_instance != 0 || NewResidentAI.DoRandomMove(thisAI)) && _cityEvent.Register(citizenID, ref person)) { NewResidentAI.StartMoving(thisAI, citizenID, ref person, person.m_workBuilding, _cityEvent.m_eventData.m_eventBuilding); person.SetVisitplace(citizenID, _cityEvent.m_eventData.m_eventBuilding, 0U); person.m_visitBuilding = _cityEvent.m_eventData.m_eventBuilding; } } } else { if (Chances.ShouldGoFindEntertainment(ref person)) { uint localChance = _simulation.m_randomizer.UInt32(100); ushort localVisitPlace = 0; if (ExperimentsToggle.AllowLocalBuildingSearch && localChance < ExperimentsToggle.LocalBuildingPercentage) { LoggingWrapper.Log("Citizen " + citizenID + " trying to find a local commercial building."); localVisitPlace = FindCloseVisitPlace(ref thisAI, citizenID, ref person, person.m_workBuilding, 1000f); } if (localVisitPlace == 0) { LoggingWrapper.Log("Citizen " + citizenID + " going to a random commercial building."); NewResidentAI.FindVisitPlace(thisAI, citizenID, person.m_workBuilding, NewResidentAI.GetEntertainmentReason(thisAI)); } return(true); } else { if ((person.m_flags & Citizen.Flags.NeedGoods) != Citizen.Flags.None) //Wants to go shopping { if (person.m_workBuilding != 0 && person.m_instance == 0 && person.m_vehicle == 0) //Person isn't already out and about { uint localChance = _simulation.m_randomizer.UInt32(100); ushort localVisitPlace = 0; if (ExperimentsToggle.AllowLocalBuildingSearch && localChance < ExperimentsToggle.LocalBuildingPercentage) { LoggingWrapper.Log("Citizen " + citizenID + " trying to find a local commercial building."); localVisitPlace = FindCloseVisitPlace(ref thisAI, citizenID, ref person, person.m_workBuilding, 1000f); } if (localVisitPlace == 0) { LoggingWrapper.Log("Citizen " + citizenID + " going to a random commercial building."); NewResidentAI.FindVisitPlace(thisAI, citizenID, person.m_workBuilding, NewResidentAI.GetShoppingReason(thisAI)); } } return(true); } else { NewResidentAI.StartMoving(thisAI, citizenID, ref person, person.m_workBuilding, person.m_homeBuilding); return(true); } } } } else if (Chances.ShouldGoToLunch(ref person) && person.m_workBuilding != 0) { //Try find somewhere close to eat ushort foundLunchPlace = FindCloseVisitPlace(ref thisAI, citizenID, ref person, person.m_workBuilding, 200f); if (foundLunchPlace != 0) { LoggingWrapper.Log("Citizen " + citizenID + " is heading out to eat for lunch at " + CityEventManager.CITY_TIME.ToShortTimeString() + "."); return(true); } else { LoggingWrapper.Log("Citizen " + citizenID + " wanted to head out for lunch, but there were no buildings close enough."); } } } } return(false); }
private bool IsNewCityEvent(CityEvent info) { return(!_db.Events.Any(e => e.ExternalId == info.ExternalId)); }
/// <summary> /// whether the city had a specific event in this turn /// </summary> /// <param name="cityEvent">the event</param> /// <returns>true if event occurred, false if not</returns> public bool HadEvent__Turn(CityEvent cityEvent) { return((address[7] & (1 << (int)cityEvent)) != 0); }
public Notification(CityEvent thisEvent) { text = StringValues.eventNotification(thisEvent); notifiedEvent = thisEvent; fresh = true; }
public static void UpdateLocation(TouristAI thisAI, uint citizenID, ref Citizen person) { if (person.m_homeBuilding == 0 && person.m_workBuilding == 0 && (person.m_visitBuilding == 0 && person.m_instance == 0)) { Singleton <CitizenManager> .instance.ReleaseCitizen(citizenID); } else { switch (person.CurrentLocation) { case Citizen.Location.Home: Singleton <CitizenManager> .instance.ReleaseCitizen(citizenID); break; case Citizen.Location.Work: Singleton <CitizenManager> .instance.ReleaseCitizen(citizenID); break; case Citizen.Location.Visit: if (person.Dead || person.Sick || (int)person.m_visitBuilding == 0) { Singleton <CitizenManager> .instance.ReleaseCitizen(citizenID); break; } if (!person.Collapsed) { SimulationManager _simulationManager = Singleton <SimulationManager> .instance; BuildingManager _buildingManager = Singleton <BuildingManager> .instance; Building _currentBuilding = _buildingManager.m_buildings.m_buffer[person.m_visitBuilding]; BuildingInfo _buildingInfo = _currentBuilding.Info; float time = _simulationManager.m_currentDayTimeHour; bool visitingHours = time > _simulationManager.m_randomizer.Int32(6, 8) && time < _simulationManager.m_randomizer.Int32(18, 23); int reduceAmount = -100; if (_currentBuilding.Info.m_class.m_service != ItemClass.Service.Disaster || !_currentBuilding.m_flags.IsFlagSet(Building.Flags.Downgrading)) { if (_currentBuilding.m_flags.IsFlagSet(Building.Flags.Evacuating)) { FindEvacuationPlace(thisAI, citizenID, person.m_visitBuilding, GetEvacuationReason(thisAI, person.m_visitBuilding)); } else if (!GameEventHelpers.EventTakingPlace(person.m_visitBuilding) && !CityEventManager.instance.EventTakingPlace(person.m_visitBuilding) && !CityEventManager.instance.EventStartsWithin(person.m_visitBuilding, 2D)) { int eventId = CityEventManager.instance.EventStartsWithin(citizenID, ref person, ResidentLocationHandler.StartMovingToEventTime); if (eventId != -1) { CityEvent _cityEvent = CityEventManager.instance.m_nextEvents[eventId]; if (_cityEvent.EventStartsWithin(ResidentLocationHandler.StartMovingToEventTime) && !_cityEvent.EventStartsWithin(ResidentLocationHandler.MaxMoveToEventTime)) { if ((person.m_instance != 0 || DoRandomMove(thisAI)) && _cityEvent.Register(citizenID, ref person)) { StartMoving(thisAI, citizenID, ref person, person.m_visitBuilding, _cityEvent.m_eventData.m_eventBuilding); person.SetVisitplace(citizenID, _cityEvent.m_eventData.m_eventBuilding, 0U); person.m_visitBuilding = _cityEvent.m_eventData.m_eventBuilding; } } } else if (visitingHours) { int chance = _simulationManager.m_randomizer.Int32(10U); if (chance == 0 && (person.m_instance != 0 || DoRandomMove(thisAI))) { FindVisitPlace(thisAI, citizenID, person.m_visitBuilding, GetLeavingReason(thisAI, citizenID, ref person)); } else if (chance > 7) { break; } else if (chance > 5) { if (person.m_instance != 0 || DoRandomMove(thisAI)) { FindVisitPlace(thisAI, citizenID, person.m_visitBuilding, GetShoppingReason(thisAI)); } _buildingInfo.m_buildingAI.ModifyMaterialBuffer(person.m_visitBuilding, ref _buildingManager.m_buildings.m_buffer[person.m_visitBuilding], TransferManager.TransferReason.Shopping, ref reduceAmount); AddTouristVisit(thisAI, citizenID, person.m_visitBuilding); } else if (chance > 3) { if (person.m_instance != 0 || DoRandomMove(thisAI)) { FindVisitPlace(thisAI, citizenID, person.m_visitBuilding, GetEntertainmentReason(thisAI)); } } else { _buildingInfo.m_buildingAI.ModifyMaterialBuffer(person.m_visitBuilding, ref _buildingManager.m_buildings.m_buffer[person.m_visitBuilding], TransferManager.TransferReason.Shopping, ref reduceAmount); AddTouristVisit(thisAI, citizenID, person.m_visitBuilding); } } else if (_buildingInfo.m_class.m_subService != ItemClass.SubService.CommercialTourist) //Not in a hotel { if (person.m_instance != 0 || DoRandomMove(thisAI)) { //Try find a hotel ushort foundHotel = _buildingManager.FindBuilding(_currentBuilding.m_position, 1000f, ItemClass.Service.Commercial, ItemClass.SubService.CommercialTourist, Building.Flags.Created | Building.Flags.Active, Building.Flags.Deleted); if (foundHotel != 0) { if (_simulationManager.m_randomizer.Int32(0, 10) > 2) { thisAI.StartMoving(citizenID, ref person, person.m_visitBuilding, foundHotel); person.SetVisitplace(citizenID, foundHotel, 0U); person.m_visitBuilding = foundHotel; AddTouristVisit(thisAI, citizenID, foundHotel); LoggingWrapper.Log("Tourist " + citizenID + " found hotel."); } else { LoggingWrapper.Log("Tourist " + citizenID + " found a hotel, but instead chose to go home."); FindVisitPlace(thisAI, citizenID, person.m_visitBuilding, GetLeavingReason(thisAI, citizenID, ref person)); } } else { LoggingWrapper.Log("Tourist " + citizenID + " couldn't find a hotel, so is heading home instead."); FindVisitPlace(thisAI, citizenID, person.m_visitBuilding, GetLeavingReason(thisAI, citizenID, ref person)); } } } } } } break; case Citizen.Location.Moving: if (person.Dead || person.Sick) { Singleton <CitizenManager> .instance.ReleaseCitizen(citizenID); break; } if ((int)person.m_vehicle != 0 || (int)person.m_instance != 0) { break; } Singleton <CitizenManager> .instance.ReleaseCitizen(citizenID); break; } } }