def create_situation(self, situation_type, guest_list=None, user_facing=True, duration_override=None, custom_init_writer=None, zone_id=0, scoring_enabled=True, spawn_sims_during_zone_spin_up=False): if guest_list is None: guest_list = SituationGuestList() hire_cost = guest_list.get_hire_cost() reserved_funds = None if guest_list.host_sim is not None: reserved_funds = guest_list.host_sim.family_funds.try_remove( situation_type.cost() + hire_cost, Consts_pb2.TELEMETRY_EVENT_COST, guest_list.host_sim) if reserved_funds is None: return reserved_funds.apply() situation_id = id_generator.generate_object_id() self._send_create_situation_telemetry(situation_type, situation_id, guest_list, hire_cost, zone_id) if zone_id != 0 and services.current_zone().id != zone_id: return self._create_departing_seed_and_travel( situation_type, situation_id, guest_list, user_facing, duration_override, custom_init_writer, zone_id, scoring_enabled=scoring_enabled) situation_seed = SituationSeed( situation_type, SeedPurpose.NORMAL, situation_id, guest_list, user_facing=user_facing, duration_override=duration_override, scoring_enabled=scoring_enabled, spawn_sims_during_zone_spin_up=spawn_sims_during_zone_spin_up) if custom_init_writer is not None: situation_seed.setup_for_custom_init_params(custom_init_writer) return self.create_situation_from_seed(situation_seed)
def create_situation(self, situation_type, guest_list=None, user_facing=True, duration_override=None, custom_init_writer=None, zone_id=0, scoring_enabled=True, spawn_sims_during_zone_spin_up=False, creation_source=None, travel_request_kwargs=frozendict(), linked_sim_id=GLOBAL_SITUATION_LINKED_SIM_ID, scheduled_time=None, **extra_kwargs): zone = services.current_zone() if zone.is_zone_shutting_down: return current_zone_id = services.current_zone_id() situation_type = services.narrative_service( ).get_possible_replacement_situation(situation_type) if services.get_zone_modifier_service().is_situation_prohibited( zone_id if zone_id else current_zone_id, situation_type): return if guest_list is None: guest_list = SituationGuestList() hire_cost = guest_list.get_hire_cost() host_sim_info = guest_list.host_sim_info if host_sim_info is not None and not host_sim_info.household.funds.try_remove( situation_type.cost() + hire_cost, Consts_pb2.TELEMETRY_EVENT_COST, host_sim_info): return situation_id = id_generator.generate_object_id() self._send_create_situation_telemetry(situation_type, situation_id, guest_list, hire_cost, zone_id) if zone_id and zone_id != current_zone_id and scheduled_time is None: return self._create_situation_and_travel( situation_type, situation_id, guest_list, user_facing, duration_override, custom_init_writer, zone_id, scoring_enabled=scoring_enabled, creation_source=creation_source, linked_sim_id=linked_sim_id, travel_request_kwargs=travel_request_kwargs) situation_seed = SituationSeed( situation_type, SeedPurpose.NORMAL, situation_id, guest_list, user_facing=user_facing, duration_override=duration_override, zone_id=zone_id, scoring_enabled=scoring_enabled, spawn_sims_during_zone_spin_up=spawn_sims_during_zone_spin_up, creation_source=creation_source, linked_sim_id=linked_sim_id, **extra_kwargs) if custom_init_writer is not None: situation_seed.setup_for_custom_init_params(custom_init_writer) return_id = None if scheduled_time is not None: uid = services.drama_scheduler_service().schedule_node( self.DEFAULT_PLAYER_PLANNED_DRAMA_NODE, SingleSimResolver(guest_list.host_sim.sim_info), specific_time=scheduled_time, situation_seed=situation_seed) return_id = situation_id if uid is not None else None else: return_id = self.create_situation_from_seed(situation_seed) return return_id