예제 #1
0
 def get_predefined_guest_list(cls):
     active_sim_info = services.active_sim_info()
     door_knocker_results = services.sim_filter_service().submit_filter(cls._door_knocker_situation_job.filter, callback=None, requesting_sim_info=active_sim_info, allow_yielding=False, gsi_source_fn=cls.get_sim_filter_gsi_name)
     if not door_knocker_results:
         return
     door_knocker = random.choice(door_knocker_results)
     guest_list = SituationGuestList(invite_only=True, host_sim_id=door_knocker.sim_info.sim_id, filter_requesting_sim_id=active_sim_info.sim_id)
     guest_list.add_guest_info(SituationGuestInfo(door_knocker.sim_info.sim_id, cls._door_knocker_situation_job, RequestSpawningOption.DONT_CARE, BouncerRequestPriority.EVENT_VIP, expectation_preference=True))
     blacklist = set()
     blacklist.add(door_knocker.sim_info.sim_id)
     kava_carrier_results = services.sim_filter_service().submit_filter(cls._fruitcake_bearer_situation_job.filter, callback=None, requesting_sim_info=active_sim_info, allow_yielding=False, blacklist_sim_ids=blacklist, gsi_source_fn=cls.get_sim_filter_gsi_name)
     if not kava_carrier_results:
         return
     kava_carrier = random.choice(kava_carrier_results)
     guest_list.add_guest_info(SituationGuestInfo(kava_carrier.sim_info.sim_id, cls._fruitcake_bearer_situation_job, RequestSpawningOption.DONT_CARE, BouncerRequestPriority.EVENT_VIP, expectation_preference=True))
     blacklist.add(kava_carrier.sim_info.sim_id)
     lei_carrier_results = services.sim_filter_service().submit_filter(cls._lei_carrier_situation_job.filter, callback=None, requesting_sim_info=active_sim_info, allow_yielding=False, blacklist_sim_ids=blacklist, gsi_source_fn=cls.get_sim_filter_gsi_name)
     if not lei_carrier_results:
         return
     lei_carrier = random.choice(lei_carrier_results)
     guest_list.add_guest_info(SituationGuestInfo(lei_carrier.sim_info.sim_id, cls._lei_carrier_situation_job, RequestSpawningOption.DONT_CARE, BouncerRequestPriority.EVENT_VIP, expectation_preference=True))
     blacklist.add(lei_carrier.sim_info.sim_id)
     other_neighbors_results = services.sim_filter_service().submit_filter(cls._other_neighbors_job.filter, callback=None, requesting_sim_info=active_sim_info, allow_yielding=False, blacklist_sim_ids=blacklist, gsi_source_fn=cls.get_sim_filter_gsi_name)
     if not other_neighbors_results:
         return guest_list
     if len(other_neighbors_results) > cls._number_of_neighbors:
         neighbors = random.sample(other_neighbors_results, cls._number_of_neighbors)
     else:
         neighbors = other_neighbors_results
     for neighbor in neighbors:
         guest_list.add_guest_info(SituationGuestInfo(neighbor.sim_info.sim_id, cls._other_neighbors_job, RequestSpawningOption.DONT_CARE, BouncerRequestPriority.EVENT_VIP, expectation_preference=True))
     return guest_list
 def _on_set_sim_job(self, sim, job_type):
     super()._on_set_sim_job(sim, job_type)
     situation_manager = services.get_zone_situation_manager()
     guest_list = SituationGuestList(invite_only=True)
     guest_info = SituationGuestInfo(sim.sim_info.id, self.cafe_generic_customer_situation.default_job(), RequestSpawningOption.DONT_CARE, BouncerRequestPriority.BACKGROUND_MEDIUM)
     guest_list.add_guest_info(guest_info)
     situation_manager.create_situation(self.cafe_generic_customer_situation, guest_list=guest_list, user_facing=False)
예제 #3
0
 def _start_scorable_situation_from_tuning(self):
     if self._scorable_situation_id is not None:
         return
     logger.assert_raise(
         self._career_events,
         'Spinning up career event manger with no career events. Manager: {}',
         self)
     career_event = self._career_events[0]
     if career_event.scorable_situation is None:
         return
     situation = career_event.scorable_situation.situation
     if situation is None:
         return
     guest_info = SituationGuestInfo.construct_from_purpose(
         self._career.sim_info.sim_id, situation.default_job(),
         SituationInvitationPurpose.CAREER)
     guest_list = SituationGuestList(
         invite_only=True,
         filter_requesting_sim_id=self._career.sim_info.sim_id)
     guest_list.add_guest_info(guest_info)
     situation_manager = services.get_zone_situation_manager()
     duration = self._career.time_until_end_of_work().in_minutes()
     self._scorable_situation_id = situation_manager.create_situation(
         situation, guest_list=guest_list, duration_override=duration)
     self._scorable_situation_setup()
예제 #4
0
 def _run_interaction_gen(self, timeline):
     logger.assert_raise(
         self.situation is not None,
         'No situation tuned on RunSituationSuperInteraction: {}'.format(
             self),
         owner='rez')
     situation_manager = services.get_zone_situation_manager()
     host_sim_id = 0
     if self.host_sim is not None:
         host_sim = self.get_participant(self.host_sim)
         if host_sim is not None:
             host_sim_id = host_sim.sim_id
     guest_list = SituationGuestList(invite_only=self.invite_only,
                                     host_sim_id=host_sim_id)
     if self.job_mapping:
         for (participant_type, job) in self.job_mapping.items():
             sim = self.get_participant(participant_type)
             if sim is not None:
                 if sim.is_sim:
                     guest_info = SituationGuestInfo.construct_from_purpose(
                         sim.sim_id, job,
                         SituationInvitationPurpose.INVITED)
                     guest_list.add_guest_info(guest_info)
     user_facing = False
     scoring_enabled = True
     if self.ui_options is not None:
         user_facing = True
         scoring_enabled = self.ui_options.scoring_enabled
     situation_manager.create_situation(self.situation,
                                        guest_list=guest_list,
                                        user_facing=user_facing,
                                        interaction=self,
                                        scoring_enabled=scoring_enabled)
     return event_testing.results.ExecuteResult.NONE
     yield
 def _send_service_npc(self, scheduler, alarm_data, situation_creation_params):
     household = situation_creation_params.hiring_household
     service_npc_type = situation_creation_params.service_npc_type
     if not self._auto_scheduled_services_enabled and service_npc_type.auto_schedule_on_client_connect():
         return
     service_record = household.get_service_npc_record(service_npc_type.guid64)
     preferred_sim_id = service_record.get_preferred_sim_id()
     situation_type = service_npc_type.situation
     user_specified_data_id = situation_creation_params.user_specified_data_id
     now = services.time_service().sim_now
     if service_record.time_last_started_service is not None and alarm_data.start_time is not None:
         alarm_start_time_absolute = date_and_time_from_week_time(now.week(), alarm_data.start_time)
         if service_record.time_last_started_service >= alarm_start_time_absolute:
             return
     service_record.time_last_started_service = now
     service_record.time_last_finished_service = None
     duration = alarm_data.end_time - now.time_since_beginning_of_week()
     min_duration = service_npc_type.min_duration_left_for_arrival_on_lot()
     if duration < min_duration:
         service_npc_type.fake_perform(household)
         return
     min_duration = service_npc_type.min_work_duration()
     max_duration = service_npc_type.max_work_duration()
     duration = clamp(min_duration, duration.in_minutes(), max_duration)
     guest_list = SituationGuestList(True)
     if preferred_sim_id is not None:
         guest_list.add_guest_info(SituationGuestInfo.construct_from_purpose(preferred_sim_id, situation_type.default_job(), SituationInvitationPurpose.PREFERRED))
     situation_creation_params_writer = PropertyStreamWriter()
     situation_creation_params_writer.write_uint64('household_id', household.id)
     situation_creation_params_writer.write_uint64('service_npc_type_id', service_npc_type.guid64)
     if user_specified_data_id is not None:
         situation_creation_params_writer.write_uint64('user_specified_data_id', user_specified_data_id)
     situation_creation_params_writer.write_bool('is_recurring', situation_creation_params.is_recurring)
     self._situation_id = services.get_zone_situation_manager().create_situation(situation_type, guest_list, user_facing=False, duration_override=duration, custom_init_writer=situation_creation_params_writer)
 def create_situations_during_zone_spin_up(self):
     situation_manager = services.get_zone_situation_manager()
     self._npc_contestant_sitaution_ids = self._prune_stale_situations(
         self._npc_contestant_sitaution_ids)
     while len(self._npc_contestant_sitaution_ids
               ) < self.npc_contestant_count:
         guest_list = SituationGuestList(invite_only=True)
         situation_id = situation_manager.create_situation(
             self.npc_contestant_situation,
             guest_list=guest_list,
             user_facing=False,
             scoring_enabled=False,
             spawn_sims_during_zone_spin_up=True)
         self._npc_contestant_sitaution_ids.append(situation_id)
     if situation_manager.get_situation_by_type(
             self.bartender_situation) is None:
         guest_list = SituationGuestList(invite_only=True)
         situation_manager.create_situation(
             self.bartender_situation,
             guest_list=guest_list,
             user_facing=False,
             scoring_enabled=False,
             spawn_sims_during_zone_spin_up=True)
     guest_list = SituationGuestList(invite_only=True)
     situation_manager.create_situation(self.player_controller_situation,
                                        guest_list=guest_list,
                                        user_facing=False,
                                        scoring_enabled=False)
예제 #7
0
 def _create_standard_ambient_guest_list(self, situation_type, *, sim_info):
     guest_list = SituationGuestList(invite_only=True)
     guest_list.add_guest_info(
         SituationGuestInfo(sim_info.sim_id, situation_type.default_job(),
                            RequestSpawningOption.MUST_SPAWN,
                            BouncerRequestPriority.BACKGROUND_LOW))
     return guest_list
예제 #8
0
 def get_predefined_guest_list(cls):
     guest_list = SituationGuestList(invite_only=True)
     situation_manager = services.get_zone_situation_manager()
     worker_filter = cls.group_filter if cls.group_filter is not None else cls.default_job(
     ).filter
     instanced_sim_ids = [
         sim.sim_info.id
         for sim in services.sim_info_manager().instanced_sims_gen()
     ]
     household_sim_ids = [
         sim_info.id
         for sim_info in services.active_household().sim_info_gen()
     ]
     auto_fill_blacklist = situation_manager.get_auto_fill_blacklist(
         sim_job=cls.blacklist_job)
     situation_sims = set()
     for situation in situation_manager.get_situations_by_tags(cls.tags):
         situation_sims.update(situation.invited_sim_ids)
     blacklist_sim_ids = set(
         itertools.chain(situation_sims, instanced_sim_ids,
                         household_sim_ids, auto_fill_blacklist))
     filter_results = services.sim_filter_service().submit_matching_filter(
         sim_filter=worker_filter,
         allow_yielding=False,
         blacklist_sim_ids=blacklist_sim_ids,
         gsi_source_fn=cls.get_sim_filter_gsi_name)
     if not filter_results:
         return
     for result in filter_results:
         job = cls.situation_job_mapping.get(result.tag, cls.default_job())
         guest_list.add_guest_info(
             SituationGuestInfo(result.sim_info.sim_id, job,
                                RequestSpawningOption.DONT_CARE,
                                BouncerRequestPriority.BACKGROUND_HIGH))
     return guest_list
예제 #9
0
 def get_predefined_guest_list(cls):
     active_sim_info = services.active_sim_info()
     fire_brigade_volunteers = services.sim_filter_service().submit_matching_filter(number_of_sims_to_find=cls.number_of_volunteers, sim_filter=cls.fire_brigade_job.filter, requesting_sim_info=active_sim_info, allow_yielding=False, blacklist_sim_ids={sim_info.sim_id for sim_info in services.active_household()}, gsi_source_fn=cls.get_sim_filter_gsi_name)
     if len(fire_brigade_volunteers) < cls.number_of_volunteers:
         return
     guest_list = SituationGuestList(invite_only=True, host_sim_id=fire_brigade_volunteers[0].sim_info.sim_id, filter_requesting_sim_id=active_sim_info.sim_id)
     for volunteer in fire_brigade_volunteers:
         guest_list.add_guest_info(SituationGuestInfo(volunteer.sim_info.sim_id, cls.fire_brigade_job, RequestSpawningOption.DONT_CARE, BouncerRequestPriority.EVENT_VIP, expectation_preference=True))
     return guest_list
예제 #10
0
 def get_predefined_guest_list(cls):
     if not cls.force_patient_on_active_career_sim:
         return
     career = services.get_career_service().get_career_in_career_event()
     if career is None:
         return
     guest_list = SituationGuestList(invite_only=True)
     guest_list.add_guest_info(SituationGuestInfo(career.sim_info.sim_id, cls.default_job(), RequestSpawningOption.CANNOT_SPAWN, BouncerRequestPriority.EVENT_VIP))
     return guest_list
예제 #11
0
 def get_predefined_guest_list(cls):
     guest_list = SituationGuestList(invite_only=True)
     members_sim_ids = cls.get_members_sim_infos()
     for member_sim_id in members_sim_ids:
         guest_list.add_guest_info(
             SituationGuestInfo(member_sim_id, cls.job_and_role_state.job,
                                RequestSpawningOption.DONT_CARE,
                                BouncerRequestPriority.BACKGROUND_HIGH))
     return guest_list
 def get_predefined_guest_list(cls):
     guest_list = SituationGuestList(True)
     worker_filter = cls.default_job().filter
     sim_infos = services.sim_filter_service().submit_filter(worker_filter, None, allow_yielding=False)
     if sim_infos:
         guest_list.add_guest_info(SituationGuestInfo(sim_infos[0].sim_info.sim_id, cls.default_job(), RequestSpawningOption.DONT_CARE, None))
     else:
         guest_list.add_guest_info(SituationGuestInfo(0, cls.default_job(), RequestSpawningOption.DONT_CARE, None))
     return guest_list
 def create_arrival_situation_for_sim(self, sim_info, situation_type=DEFAULT, during_spin_up=False):
     if situation_type is DEFAULT:
         situation_type = self.user_sim_arrival_situation
     situation_manager = services.get_zone_situation_manager()
     if during_spin_up and self._sim_info_already_in_arrival_situation(sim_info, situation_manager):
         return
     guest_list = SituationGuestList(invite_only=True)
     guest_info = SituationGuestInfo.construct_from_purpose(sim_info.id, situation_type.default_job(), SituationInvitationPurpose.INVITED)
     guest_list.add_guest_info(guest_info)
     self.create_arrival_situation(situation_type, guest_list, situation_manager)
예제 #14
0
 def _create_fire_situation_on_sim(self, sim, situation_manager=None):
     if sim.id in self._situation_ids:
         return
     if situation_manager is None:
         situation_manager = services.current_zone().situation_manager
     guest_list = SituationGuestList(invite_only=True)
     guest_info = SituationGuestInfo.construct_from_purpose(sim.sim_id, self.FIRE_JOB, SituationInvitationPurpose.INVITED)
     guest_list.add_guest_info(guest_info)
     situation_id = situation_manager.create_situation(self.FIRE_SITUATION, guest_list=guest_list, user_facing=False)
     self._situation_ids[sim.id] = situation_id
예제 #15
0
 def start_situation(interaction, situation, user_facing):
     situation_manager = services.get_zone_situation_manager()
     guest_list = situation.get_predefined_guest_list()
     if guest_list is None:
         sim = interaction.sim
         guest_list = SituationGuestList(invite_only=True, host_sim_id=sim.id)
         if situation.targeted_situation is not None:
             target_sim = interaction.get_participant(ParticipantType.PickedSim)
             if target_sim is None:
                 target_sim = interaction.get_participant(ParticipantType.TargetSim)
             target_sim_id = target_sim.id if target_sim is not None else None
             job_assignments = situation.get_prepopulated_job_for_sims(sim, target_sim_id)
             for (sim_id, job_type_id) in job_assignments:
                 job_type = services.situation_job_manager().get(job_type_id)
                 guest_info = SituationGuestInfo.construct_from_purpose(sim_id, job_type, SituationInvitationPurpose.INVITED)
                 guest_list.add_guest_info(guest_info)
         else:
             default_job = situation.default_job()
             target_sims = interaction.get_participants(ParticipantType.PickedSim)
             if target_sims:
                 for sim_or_sim_info in target_sims:
                     guest_info = SituationGuestInfo.construct_from_purpose(sim_or_sim_info.sim_id, default_job, SituationInvitationPurpose.INVITED)
                     guest_list.add_guest_info(guest_info)
             else:
                 target_sim = interaction.get_participant(ParticipantType.TargetSim)
                 if target_sim is not None:
                     guest_info = SituationGuestInfo.construct_from_purpose(target_sim.sim_id, default_job, SituationInvitationPurpose.INVITED)
                     guest_list.add_guest_info(guest_info)
             guest_info = SituationGuestInfo.construct_from_purpose(sim.sim_id, default_job, SituationInvitationPurpose.INVITED)
             guest_list.add_guest_info(guest_info)
     zone_id = interaction.get_participant(ParticipantType.PickedZoneId) or 0
     situation_manager.create_situation(situation, guest_list=guest_list, user_facing=user_facing, zone_id=zone_id)
 def _create_situation(self, additional_sims_to_bring=()):
     guest_list = self._situation_to_run.get_predefined_guest_list()
     if guest_list is None:
         if self._require_predefined_guest_list:
             return
         host_sim_info = self._get_host(additional_sims_to_bring)
         if host_sim_info is None:
             return
         guest_list = SituationGuestList(invite_only=True, host_sim_id=host_sim_info.id)
     else:
         host_sim_info = self._get_host(additional_sims_to_bring)
         if host_sim_info is None:
             return
     if self._NPC_hosted_situation_player_job is not None:
         guest_list.add_guest_info(SituationGuestInfo.construct_from_purpose(self._receiver_sim_info.id, self._NPC_hosted_situation_player_job, SituationInvitationPurpose.INVITED))
     if self._NPC_host_job is not None:
         guest_list.add_guest_info(SituationGuestInfo.construct_from_purpose(host_sim_info.id, self._NPC_host_job, SituationInvitationPurpose.INVITED))
     if additional_sims_to_bring:
         additional_sims_job = self._chosen_dialog.bring_other_sims.situation_job
         for sim_info in additional_sims_to_bring:
             guest_list.add_guest_info(SituationGuestInfo.construct_from_purpose(sim_info.id, additional_sims_job, SituationInvitationPurpose.INVITED))
     if self._NPC_hosted_situation_use_player_sim_as_filter_requester:
         guest_list.filter_requesting_sim_id = self._receiver_sim_info.id
     services.get_zone_situation_manager().create_situation(self._situation_to_run, guest_list=guest_list, zone_id=self._get_zone_id(), scoring_enabled=self._NPC_hosted_situation_scoring_enabled, user_facing=self._user_facing)
     with telemetry_helper.begin_hook(telemetry_writer, TELEMETRY_HOOK_SITUATION_ACCEPTED, sim_info=self._receiver_sim_info) as hook:
         hook.write_guid(TELEMETRY_SITUATION_TYPE_ID, self._situation_to_run.guid64)
         hook.write_int(TELEMETRY_GUEST_COUNT, len(additional_sims_to_bring))
 def _on_set_sim_job(self, sim, job_type):
     super()._on_set_sim_job(sim, job_type)
     situation_manager = services.get_zone_situation_manager()
     guest_list = SituationGuestList(invite_only=True)
     guest_info = SituationGuestInfo.construct_from_purpose(
         sim.sim_info.id, self.party_goer_situation.default_job(),
         SituationInvitationPurpose.INVITED)
     guest_list.add_guest_info(guest_info)
     situation_manager.create_situation(self.party_goer_situation,
                                        guest_list=guest_list,
                                        user_facing=False)
예제 #18
0
 def __call__(self, interaction, picked_sim_ids):
     guest_list = SituationGuestList(invite_only=True)
     adoption_service = services.get_adoption_service()
     for sim_id in picked_sim_ids:
         replacement_sim_info = adoption_service.convert_base_sim_info_to_full(sim_id)
         if replacement_sim_info is None:
             sim_id_to_adopt = sim_id
         else:
             sim_id_to_adopt = replacement_sim_info.sim_id
         guest_list.add_guest_info(SituationGuestInfo(sim_id_to_adopt, self.adoptee_situation_job, RequestSpawningOption.DONT_CARE, BouncerRequestPriority.EVENT_VIP, reservation=True))
     services.get_zone_situation_manager().create_situation(self.situation_type, guest_list=guest_list, user_facing=False)
 def get_all_sim_arrival_guest_list(self, situation_manager, during_spin_up=False):
     sim_infos = [sim_info for sim_info in self.get_user_controlled_sim_infos()]
     if self.place_travel_companion_in_same_arrival_situation:
         sim_infos.extend(self._traveled_sim_infos)
     guest_list = SituationGuestList(invite_only=True)
     for sim_info in sim_infos:
         if during_spin_up and self._sim_info_already_in_arrival_situation(sim_info, situation_manager):
             continue
         guest_info = SituationGuestInfo.construct_from_purpose(sim_info.id, self.user_sim_arrival_situation.default_job(), SituationInvitationPurpose.INVITED)
         guest_list.add_guest_info(guest_info)
     return guest_list
예제 #20
0
 def _start_special_event(dialog):
     guest_list = None
     if dialog.accepted:
         start_user_facing = True
         guest_list = SituationGuestList()
         guest_info = SituationGuestInfo.construct_from_purpose(invited_sim.id, situation.venue_situation_player_job, SituationInvitationPurpose.INVITED)
         guest_list.add_guest_info(guest_info)
     else:
         start_user_facing = False
     situation_id = situation_manager.create_situation(situation, guest_list=guest_list, user_facing=start_user_facing)
     self._active_special_event_id = situation_id
예제 #21
0
 def get_predefined_guest_list(cls):
     active_sim_info = services.active_sim_info()
     guest_list = SituationGuestList(invite_only=True, host_sim_id=active_sim_info.id)
     worker_filter = cls.group_filter if cls.group_filter is not None else cls.default_job().filter
     filter_results = services.sim_filter_service().submit_matching_filter(sim_filter=worker_filter, allow_yielding=False, gsi_source_fn=cls.get_sim_filter_gsi_name)
     if not filter_results:
         logger.error('Failed to find/create any sims for {}; using defaults in ambient service', cls, owner='rez')
         return guest_list
     for result in filter_results:
         guest_list.add_guest_info(SituationGuestInfo(result.sim_info.sim_id, cls.default_job(), RequestSpawningOption.MUST_SPAWN, BouncerRequestPriority.BACKGROUND_LOW))
     return guest_list
예제 #22
0
 def _create_situation(sim_infos):
     guest_list = SituationGuestList(invite_only=True,
                                     host_sim_id=host_sim_id)
     for sim_info in sim_infos:
         guest_info = situation_guest_list.SituationGuestInfo.construct_from_purpose(
             sim_info.sim_id, situation_job,
             situation_guest_list.SituationInvitationPurpose.INVITED)
         guest_list.add_guest_info(guest_info)
     services.get_zone_situation_manager().create_situation(
         self.situation_to_create,
         guest_list=guest_list,
         user_facing=False)
예제 #23
0
 def start_career_situation(self):
     if self._career_situation is not None:
         guest_info = SituationGuestInfo.construct_from_purpose(self._sim_info.sim_id, self._career_situation.job, SituationInvitationPurpose.CAREER)
         guest_list = SituationGuestList()
         guest_list.add_guest_info(guest_info)
         situation_manager = services.get_zone_situation_manager()
         situation = self._career_situation.situation
         if not situation.has_venue_location():
             logger.error("Tried starting a career event, career:{}  level:{}, and couldn't find a valid venue. There should ALWAYS be a Maxis Lot tuned for every venue type. - trevorlindsey", self, self.level)
             return False
         zone_id = situation.get_venue_location()
         self._career_situation_id = situation_manager.create_situation(self._career_situation.situation, guest_list=guest_list, zone_id=zone_id)
예제 #24
0
 def start_situation(interaction, situation, user_facing):
     situation_manager = services.get_zone_situation_manager()
     guest_list = situation.get_predefined_guest_list()
     if guest_list is None:
         sim = interaction.sim
         guest_list = SituationGuestList(invite_only=True,
                                         host_sim_id=sim.id)
         if situation.targeted_situation is not None:
             target_sim = interaction.get_participant(
                 ParticipantType.PickedSim)
             if target_sim is None:
                 target_sim = interaction.get_participant(
                     ParticipantType.TargetSim)
             target_sim_id = target_sim.id if target_sim is not None else None
             job_assignments = situation.get_prepopulated_job_for_sims(
                 sim, target_sim_id)
             for (sim_id, job_type_id) in job_assignments:
                 job_type = services.situation_job_manager().get(
                     job_type_id)
                 guest_info = SituationGuestInfo.construct_from_purpose(
                     sim_id, job_type,
                     SituationInvitationPurpose.INVITED)
                 guest_list.add_guest_info(guest_info)
         else:
             default_job = situation.default_job()
             target_sims = interaction.get_participants(
                 ParticipantType.PickedSim)
             if target_sims:
                 for sim_or_sim_info in target_sims:
                     guest_info = SituationGuestInfo.construct_from_purpose(
                         sim_or_sim_info.sim_id, default_job,
                         SituationInvitationPurpose.INVITED)
                     guest_list.add_guest_info(guest_info)
             else:
                 target_sim = interaction.get_participant(
                     ParticipantType.TargetSim)
                 if target_sim is not None:
                     guest_info = SituationGuestInfo.construct_from_purpose(
                         target_sim.sim_id, default_job,
                         SituationInvitationPurpose.INVITED)
                     guest_list.add_guest_info(guest_info)
             guest_info = SituationGuestInfo.construct_from_purpose(
                 sim.sim_id, default_job,
                 SituationInvitationPurpose.INVITED)
             guest_list.add_guest_info(guest_info)
     zone_id = interaction.get_participant(
         ParticipantType.PickedZoneId) or 0
     situation_manager.create_situation(situation,
                                        guest_list=guest_list,
                                        user_facing=user_facing,
                                        zone_id=zone_id)
예제 #25
0
 def get_predefined_guest_list(cls):
     active_sim_info = services.active_sim_info()
     neighbor_sim_id = cls._get_neighbor()
     guest_list = SituationGuestList(
         invite_only=True,
         host_sim_id=neighbor_sim_id,
         filter_requesting_sim_id=active_sim_info.sim_id)
     guest_list.add_guest_info(
         SituationGuestInfo(neighbor_sim_id,
                            cls.neighbor_job_and_role_state.job,
                            RequestSpawningOption.DONT_CARE,
                            BouncerRequestPriority.BACKGROUND_MEDIUM,
                            expectation_preference=True))
     return guest_list
 def _create_NPC_hosted_situation(dialog):
     if not dialog.accepted:
         with telemetry_helper.begin_hook(writer, TELEMETRY_HOOK_SITUATION_REJECTED, sim=player_sim) as hook:
             hook.write_guid('type', chosen_situation.guid64)
         return
     guest_list = SituationGuestList(host_sim_id=NPC_sim_id)
     if chosen_situation.NPC_hosted_situation_use_player_sim_as_filter_requester:
         guest_list.filter_requesting_sim_id = player_sim.id
     guest_list.add_guest_info(SituationGuestInfo.construct_from_purpose(player_sim.id, chosen_situation.NPC_hosted_situation_player_job, SituationInvitationPurpose.INVITED))
     chosen_zone_id = chosen_situation.get_venue_location()
     services.get_zone_situation_manager().create_situation(chosen_situation, guest_list=guest_list, zone_id=chosen_zone_id)
     self.add_cooldown(self._cooldown)
     with telemetry_helper.begin_hook(writer, TELEMETRY_HOOK_SITUATION_ACCEPTED, sim=player_sim) as hook:
         hook.write_guid('type', chosen_situation.guid64)
 def request_player_turn(self, sim_info):
     guest_list = SituationGuestList(invite_only=True)
     guest_list.add_guest_info(
         SituationGuestInfo(sim_info.sim_id,
                            self.player_contestant_situation.contestant_job,
                            RequestSpawningOption.CANNOT_SPAWN,
                            BouncerRequestPriority.EVENT_VIP))
     situation_id = services.get_zone_situation_manager().create_situation(
         self.player_contestant_situation,
         guest_list=guest_list,
         user_facing=False,
         scoring_enabled=False)
     if situation_id is None:
         return
     self._player_contestant_situation_ids.append(situation_id)
예제 #28
0
def force_career_event(career_situation_type, opt_sim:OptionalTargetParam=None, _connection=None):
    sim = get_optional_target(opt_sim, _connection)
    if not sim:
        sims4.commands.output('Invalid Sim ID: {}'.format(opt_sim), _connection)
        return
    guest_info = SituationGuestInfo.construct_from_purpose(sim.id, career_situation_type.job, SituationInvitationPurpose.CAREER)
    guest_list = SituationGuestList()
    guest_list.add_guest_info(guest_info)
    situation_manager = services.get_zone_situation_manager()
    situation = career_situation_type.situation
    if not situation.has_venue_location():
        logger.error("Tried forcing a career event:{} and couldn't find a valid venue.", career_situation_type)
        return False
    zone_id = situation.get_venue_location()
    situation_manager.create_situation(situation, guest_list=guest_list, zone_id=zone_id)
예제 #29
0
 def _create_holiday_situation(self, sim_info, holiday_goals):
     guest_list = SituationGuestList(invite_only=True,
                                     host_sim_id=sim_info.id)
     guest_list.add_guest_info(
         SituationGuestInfo(sim_info.id, HolidayTuning.HOLIDAY_JOB,
                            RequestSpawningOption.DONT_CARE,
                            BouncerRequestPriority.EVENT_VIP))
     situation_id = services.get_zone_situation_manager().create_situation(
         HolidayTuning.HOLIDAY_SITUATION,
         guest_list=guest_list,
         linked_sim_id=sim_info.id,
         dynamic_goals=holiday_goals)
     if situation_id:
         self._situation_ids.append(situation_id)
     return situation_id
예제 #30
0
 def _on_set_sim_role_state(self, sim, job_type, role_state_type,
                            role_affordance_target):
     super()._on_set_sim_role_state(sim, job_type, role_state_type,
                                    role_affordance_target)
     if self.lock_doors_situation is not None:
         guest_list = SituationGuestList(invite_only=True)
         guest_list.add_guest_info(
             SituationGuestInfo(
                 sim.sim_id, self.lock_doors_situation.get_lock_out_job(),
                 RequestSpawningOption.CANNOT_SPAWN,
                 BouncerRequestPriority.EVENT_DEFAULT_JOB))
         self._lock_out_situation_id = services.get_zone_situation_manager(
         ).create_situation(self.lock_doors_situation,
                            user_facing=False,
                            guest_list=guest_list)
예제 #31
0
 def _start_possession_situation(self, animate_possession_override=None):
     guest_list = SituationGuestList(invite_only=True, host_sim_id=self.sim_id)
     animate_possession = services.current_zone().is_zone_running
     if animate_possession:
         if animate_possession_override is not None:
             animate_possession = animate_possession_override
     self._create_sub_situation(self.possessed_situation, guest_list=guest_list, user_facing=False, animate_possession=animate_possession)
 def __call__(self, situation_state):
     situation_state.owner._self_destruct()
     guest_list = self.new_situation.get_predefined_guest_list()
     if guest_list is None:
         guest_list = SituationGuestList(invite_only=True)
     services.get_zone_situation_manager().create_situation(
         self.new_situation, guest_list=guest_list, user_facing=False)
예제 #33
0
 def _request_background_situations(self):
     situation_manager = services.get_zone_situation_manager()
     existing = [
         situation_manager.get(uid)
         for uid in self._background_situation_ids
         if uid in situation_manager
     ]
     existing.sort(key=lambda s: s.guid64)
     requested_types = list(self.background_situations)
     requested_types.sort(key=lambda s: s.guid64)
     self._background_situation_ids.clear()
     for requested_type in reversed(requested_types):
         while existing:
             while existing[-1].guid64 > requested_type.guid64:
                 existing.pop()
         if existing and existing[-1].guid64 == requested_type.guid64:
             situation = existing.pop()
             self._background_situation_ids.append(situation.id)
         else:
             guest_list = SituationGuestList(invite_only=True,
                                             filter_requesting_sim_id=self.
                                             _career_event.sim_info.sim_id)
             situation_id = situation_manager.create_situation(
                 requested_type,
                 guest_list=guest_list,
                 spawn_sims_during_zone_spin_up=True,
                 user_facing=False,
                 creation_source=self.instance_name)
             self._background_situation_ids.append(situation_id)
 def _on_set_sim_job(self, sim, job_type):
     super()._on_set_sim_job(sim, job_type)
     situation_manager = services.get_zone_situation_manager()
     guest_list = SituationGuestList(invite_only=True)
     guest_list.add_guest_info(
         SituationGuestInfo(sim.sim_id,
                            self.sub_situation.job_and_role_state.job,
                            RequestSpawningOption.DONT_CARE,
                            BouncerRequestPriority.EVENT_VIP))
     sub_situation_id = situation_manager.create_situation(
         self.sub_situation,
         guest_list=guest_list,
         background_situation_id=self.id,
         user_facing=False)
     self._guest_sub_situation_dict[sim.id] = sub_situation_id
     self.gathering_sim_ids.add(sim.id)
예제 #35
0
 def on_state_activated(self, reader=None, preroll_time_override=None):
     super().on_state_activated(reader=reader,
                                preroll_time_override=preroll_time_override)
     if reader is not None:
         self._contest_situation_ids = reader.read_uint64s(
             CONTEST_TOKENS, None)
     if self._contest_situation_ids is None:
         self._contest_situation_ids = []
         situation_manager = services.get_zone_situation_manager()
         max_contests = self._number_of_contests.upper_bound
         min_contests = self._number_of_contests.lower_bound
         if max_contests is None:
             max_contests = len(self._possible_contests)
         else:
             max_contests = min(len(self._possible_contests), max_contests)
         if min_contests is None:
             min_contests = len(self._possible_contests)
         min_contests = min(min_contests, max_contests)
         contest_count = random.random.randint(min_contests, max_contests)
         possible_situations = [
             (possible_contest.weight, possible_contest.situation)
             for possible_contest in self._possible_contests
         ]
         while contest_count:
             contest_count -= 1
             chosen_situation = random.pop_weighted(possible_situations)
             guest_list = SituationGuestList(invite_only=True)
             self._contest_situation_ids.append(
                 situation_manager.create_situation(chosen_situation,
                                                    guest_list=guest_list,
                                                    user_facing=False))
예제 #36
0
 def _run_interaction_gen(self, timeline):
     logger.assert_raise(self.situation is not None, 'No situation tuned on RunSituationSuperInteraction: {}'.format(self), owner='rez')
     situation_manager = services.get_zone_situation_manager()
     host_sim_id = 0
     host_sim = self.get_participant(self.host_sim)
     if host_sim is not None:
         host_sim_id = host_sim.sim_id
     guest_list = SituationGuestList(host_sim_id=host_sim_id)
     if self.job_mapping:
         for (participant_type, job) in self.job_mapping.items():
             sim = self.get_participant(participant_type)
             while sim is not None and sim.is_sim:
                 guest_info = SituationGuestInfo.construct_from_purpose(sim.sim_id, job, SituationInvitationPurpose.INVITED)
                 guest_list.add_guest_info(guest_info)
     situation_manager.create_situation(self.situation, guest_list=guest_list, user_facing=False)
     return event_testing.results.ExecuteResult.NONE
def create_situation_with_guest_list(situation_type, scoring_enabled, zone_id:int=0, *args, _connection=None):
    if len(args) % 3 != 0:
        sims4.commands.output('Invalid guest list, its length must be a multiple of 3', _connection)
        return False
    situation_manager = services.get_zone_situation_manager()
    client = services.client_manager().get(_connection)
    if client.active_sim is not None:
        host_sim_id = client.active_sim.id
        client.active_sim.household.set_situation_scoring(scoring_enabled)
    else:
        host_sim_id = 0
    guest_list = SituationGuestList(situation_type.force_invite_only, host_sim_id)
    guest_list_is_good = True
    for (job_name_or_key, sim_id_or_name, purpose_name) in zip(args[0::3], args[1::3], args[2::3]):
        job_type = services.situation_job_manager().get(job_name_or_key)
        if job_type is None:
            sims4.commands.output('Invalid job name or key: {}'.format(job_name_or_key), _connection)
            guest_list_is_good = False
        try:
            purpose = SituationInvitationPurpose(purpose_name)
        except ValueError:
            sims4.commands.output('Invalid Purpose: {}. Use INVITED, HIRED, or PREFERRED'.format(purpose_name), _connection)
            guest_list_is_good = False
            continue
        try:
            sim_id = int(sim_id_or_name)
        except (ValueError, TypeError):
            sims4.commands.output('Incorrectly formatted sim_id {}'.format(sim_id_or_name), _connection)
            guest_list_is_good = False
            continue
        guest_info = SituationGuestInfo.construct_from_purpose(sim_id, job_type, purpose)
        guest_list.add_guest_info(guest_info)
    if not guest_list_is_good:
        sims4.commands.output('FAILURE: bad guest list {}.'.format(situation_type), _connection)
        return False
    situation_id = situation_manager.create_situation(situation_type, guest_list=guest_list, zone_id=zone_id, scoring_enabled=scoring_enabled)
    if situation_id is not None:
        sims4.commands.output('Successfully created situation: {}.'.format(situation_id), _connection)
    else:
        sims4.commands.output('Insufficient funds to create situation', _connection)
    return True
예제 #38
0
 def _create_situation(sim_infos):
     guest_list = SituationGuestList(invite_only=True, host_sim_id=host_sim_id)
     for sim_info in sim_infos:
         guest_info = situation_guest_list.SituationGuestInfo.construct_from_purpose(sim_info.sim_id, situation_job, situation_guest_list.SituationInvitationPurpose.INVITED)
         guest_list.add_guest_info(guest_info)
     services.get_zone_situation_manager().create_situation(self.situation_to_create, guest_list=guest_list, user_facing=False)