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)
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 _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)
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
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
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): 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
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)
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 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)
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 _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 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
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)
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)
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 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)
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)
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 _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 _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)
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)
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))
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
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)