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)
Example #2
0
 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