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)
示例#2
0
 def get_predefined_guest_list(cls):
     guest_list = SituationGuestList(invite_only=True)
     grabbed_members = []
     for (
             job, member_info
     ) in cls.member_job_and_role_states.org_member_jobs_and_roles.items():
         members_sim_ids = cls.get_members_sim_infos(
             job, member_info, blacklist_sims=grabbed_members)
         grabbed_members.extend(members_sim_ids)
         for member_sim_id in members_sim_ids:
             guest_list.add_guest_info(
                 SituationGuestInfo(member_sim_id, job,
                                    RequestSpawningOption.DONT_CARE,
                                    BouncerRequestPriority.BACKGROUND_HIGH))
     filter_service = services.sim_filter_service()
     grabbed_non_members = []
     for (job, role_info
          ) in cls.non_member_job_and_role_states.jobs_and_roles.items():
         non_member_ids = filter_service.submit_matching_filter(
             sim_filter=job.filter,
             number_of_sims_to_find=role_info.number_of_sims_to_find,
             allow_yielding=False,
             blacklist_sim_ids={
                 sim_info.sim_id
                 for sim_info in services.active_household()
             })
         grabbed_non_members.extend(non_member_ids)
         for non_member_result in non_member_ids:
             guest_list.add_guest_info(
                 SituationGuestInfo(non_member_result.sim_info.id, job,
                                    RequestSpawningOption.DONT_CARE,
                                    BouncerRequestPriority.BACKGROUND_HIGH))
     return guest_list
示例#3
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
示例#4
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
示例#5
0
def travel_sims_to_zone(opt_sim_id:OptionalTargetParam, zone_id:int, *traveling_sim_ids, _connection=None):
    sim_or_sim_info = get_optional_target(opt_sim_id, _connection)
    if sim_or_sim_info is None:
        if opt_sim_id:
            sim_or_sim_info = services.sim_info_manager().get(opt_sim_id)
            if sim_or_sim_info is None:
                sims4.commands.output('Invalid Sim id: {} specified for travel.travel_sims_to_zone'.format(opt_sim_id), _connection)
                return False
        else:
            sims4.commands.output('No Sim id specified for travel.travel_sims_to_zone', _connection)
            return False
    zone_proto_buff = services.get_persistence_service().get_zone_proto_buff(zone_id)
    if zone_proto_buff is None:
        sims4.commands.output('Invalid Zone Id: {}. Zone does not exist.'.format(zone_id), _connection)
        return False
    situation_manager = services.get_zone_situation_manager()
    situation = situation_manager.DEFAULT_TRAVEL_SITUATION
    guest_list = situation.get_predefined_guest_list()
    if guest_list is None:
        guest_list = SituationGuestList(invite_only=True, host_sim_id=sim_or_sim_info.id)
        default_job = situation.default_job()
        sim_info_manager = services.sim_info_manager()
        roommate_service = services.get_roommate_service()
        if roommate_service is not None:
            traveling_sim_ids = tuple(itertools.chain(traveling_sim_ids, (sim_info.sim_id for sim_info in roommate_service.get_auto_invite_sim_infos(sim_or_sim_info, situation))))
        for sim_id in traveling_sim_ids:
            sim_id = int(sim_id)
            sim_info = sim_info_manager.get(sim_id)
            if sim_info is None:
                continue
            guest_info = SituationGuestInfo.construct_from_purpose(sim_id, default_job, SituationInvitationPurpose.INVITED)
            guest_list.add_guest_info(guest_info)
        guest_info = SituationGuestInfo.construct_from_purpose(sim_or_sim_info.id, default_job, SituationInvitationPurpose.INVITED)
        guest_list.add_guest_info(guest_info)
    situation_manager.create_situation(situation, guest_list=guest_list, user_facing=False, zone_id=zone_id)
 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
示例#7
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()
 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)
示例#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
 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
示例#11
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
示例#12
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
示例#13
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
 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)
示例#15
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
示例#16
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
示例#17
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
 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)
 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)
示例#21
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)
示例#22
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)
示例#23
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
示例#24
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 _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 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)
示例#27
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
 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)
 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)
 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)
示例#31
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
示例#32
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
 def _run_situation(self):
     host_sim_id = 0
     host_sim_info = None
     if self.host_sim_participant is not None:
         host_sim_info = self._get_resolver().get_participant(
             self.host_sim_participant)
         host_sim_id = host_sim_info.id
     guest_list = self.situation_to_run.get_predefined_guest_list()
     if guest_list is None:
         guest_list = SituationGuestList(invite_only=True,
                                         host_sim_id=host_sim_id)
     if self._sender_sim_info is not None and self.sender_sim_info_job is not None:
         guest_list.add_guest_info(
             SituationGuestInfo.construct_from_purpose(
                 self._sender_sim_info.id, self.sender_sim_info_job,
                 SituationInvitationPurpose.INVITED))
     if host_sim_info is not None and self.host_sim_info_job is not None:
         guest_list.add_guest_info(
             SituationGuestInfo.construct_from_purpose(
                 host_sim_info.id, self.host_sim_info_job,
                 SituationInvitationPurpose.HOSTING))
     zone_id = 0
     if self.lot is not None:
         lot_id = get_lot_id_from_instance_id(self.lot)
         zone_id = services.get_persistence_service(
         ).resolve_lot_id_into_zone_id(lot_id, ignore_neighborhood_id=True)
     situation_id = services.get_zone_situation_manager().create_situation(
         self.situation_to_run,
         guest_list=guest_list,
         spawn_sims_during_zone_spin_up=self.spawn_sims_during_zone_spin_up,
         user_facing=self.user_facing,
         zone_id=zone_id)
     if self.household_milestone and situation_id:
         active_household_milestone_tracker = services.active_household(
         ).household_milestone_tracker
         active_household_milestone_tracker.reset_milestone(
             self.household_milestone)
     if self.notification is not None:
         target_sim_id = self._sender_sim_info.id if self._sender_sim_info is not None else None
         dialog = self.notification(self._receiver_sim_info,
                                    DoubleSimResolver(
                                        self._sender_sim_info,
                                        self._receiver_sim_info),
                                    target_sim_id=target_sim_id)
         dialog.show_dialog()
     return True
 def get_predefined_guest_list(cls):
     active_sim_info = services.active_sim_info()
     neighbor_results = cls.get_filter_results_for_job()
     if not neighbor_results:
         return
     neighbor = random.choice(neighbor_results)
     guest_list = SituationGuestList(
         invite_only=True,
         host_sim_id=neighbor.sim_info.sim_id,
         filter_requesting_sim_id=active_sim_info.sim_id)
     guest_list.add_guest_info(
         SituationGuestInfo(neighbor.sim_info.sim_id,
                            cls.neighbor_job_and_default_role_state.job,
                            RequestSpawningOption.DONT_CARE,
                            BouncerRequestPriority.EVENT_VIP,
                            expectation_preference=True))
     return guest_list
示例#35
0
 def get_predefined_guest_list(cls):
     guest_list = SituationGuestList(invite_only=True)
     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 {};', cls)
         return guest_list
     for result in filter_results:
         job = cls.man_job_and_role.job if result.sim_info.is_male else cls.woman_job_and_role.job
         guest_list.add_guest_info(
             SituationGuestInfo(result.sim_info.sim_id, job,
                                RequestSpawningOption.DONT_CARE,
                                BouncerRequestPriority.BACKGROUND_MEDIUM))
     return guest_list
示例#36
0
 def _try_spawn_stan_situation_for_sim(self, stanned_sim):
     if self.stan_situation is None:
         return
     stan_results = services.sim_filter_service().submit_matching_filter(
         sim_filter=FanTuning.STAN_FILTER,
         number_of_sims_to_find=1,
         requesting_sim_info=stanned_sim.sim_info,
         allow_instanced_sims=True,
         allow_yielding=False,
         gsi_source_fn=lambda: 'FanSituationManager: Stan for {}'.format(
             str(stanned_sim)))
     if not stan_results:
         logger.warn('Could not create/find a stan for {}',
                     str(stanned_sim))
         return
     stan_sim_info = stan_results[0].sim_info
     stan_id = stan_sim_info.sim_id
     in_stan_home_zone = stan_sim_info.household.home_zone_id == services.current_zone_id(
     )
     if not in_stan_home_zone and FanTuning.STAN_DISABLING_BITS & set(
             services.relationship_service().get_all_bits(
                 stan_id, target_sim_id=stanned_sim.sim_id)):
         return
     duration_override = 0 if in_stan_home_zone else None
     situation_manager = services.get_zone_situation_manager()
     guest_list = SituationGuestList(invite_only=True,
                                     host_sim_id=stanned_sim.sim_id)
     guest_list.add_guest_info(
         SituationGuestInfo(stan_id, self.stan_situation.fan_job,
                            RequestSpawningOption.DONT_CARE,
                            BouncerRequestPriority.EVENT_VIP))
     situation_id = situation_manager.create_situation(
         self.stan_situation,
         guest_list=guest_list,
         user_facing=False,
         duration_override=duration_override,
         creation_source='FanSituationManager: Stan Situation targetting {}'
         .format(str(stanned_sim)))
     if situation_id is None:
         logger.error('Unable to create Stan situation')
         return
     self._stan_situation_ids.add(situation_id)
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)