def _build_interaction_msg(interaction_info, msg):
    if not interaction_info:
        logger.debug('Why am I here with no interaction info???')
    logger.debug('  _build_interaction_msg({0})', interaction_info.interaction_id)
    msg.interaction_id = interaction_info.interaction_id
    msg.insert_after_id = interaction_info.insert_after_id
    msg.super_id = interaction_info.super_id
    if interaction_info.icon_info:
        build_icon_info_msg(interaction_info.icon_info, interaction_info.display_name, msg.icon_info)
    if interaction_info.target is not None and interaction_info.target.id is not None:
        msg.target_manager_object_id.object_id = interaction_info.target.id
    if interaction_info.target is not None:
        msg.target_manager_object_id.manager_id = interaction_info.target.manager_id
    for participant in interaction_info.participants:
        while participant is not None:
            with ProtocolBufferRollback(msg.participant_manager_object_ids) as participant_msg:
                participant_msg.manager_id = participant.manager_id
                participant_msg.object_id = participant.id
    msg.canceled = interaction_info.canceled
    msg.cancelable = interaction_info.user_cancelable
    msg.visual_type = interaction_info.ui_visual_type
    msg.queue_ui_state = interaction_info.ui_state
    (super_name, super_icon_info) = interaction_info.get_super_icon_info()
    if super_name is not None:
        build_icon_info_msg(super_icon_info, super_name, msg.super_icon_info)
    for si_id in interaction_info.interactions_to_be_canceled:
        msg.interactions_to_be_canceled.append(si_id)
    if interaction_info.mood_list is not None:
        for mood in interaction_info.mood_list:
            msg.mood_list.append(mood.guid64)
def _build_interaction_msg(interaction_info, msg):
    if not interaction_info:
        logger.debug('Why am I here with no interaction info???')
    logger.debug('  _build_interaction_msg({0})',
                 interaction_info.interaction_id)
    msg.interaction_id = interaction_info.interaction_id
    msg.insert_after_id = interaction_info.insert_after_id
    msg.super_id = interaction_info.super_id
    if interaction_info.icon_info:
        build_icon_info_msg(interaction_info.icon_info,
                            interaction_info.display_name, msg.icon_info)
    if interaction_info.target is not None and interaction_info.target.id is not None:
        msg.target_manager_object_id.object_id = interaction_info.target.id
    if interaction_info.target is not None:
        msg.target_manager_object_id.manager_id = interaction_info.target.manager_id
    for participant in interaction_info.participants:
        while participant is not None:
            with ProtocolBufferRollback(
                    msg.participant_manager_object_ids) as participant_msg:
                participant_msg.manager_id = participant.manager_id
                participant_msg.object_id = participant.id
    msg.canceled = interaction_info.canceled
    msg.cancelable = interaction_info.user_cancelable
    msg.visual_type = interaction_info.ui_visual_type
    msg.queue_ui_state = interaction_info.ui_state
    (super_name, super_icon_info) = interaction_info.get_super_icon_info()
    if super_name is not None:
        build_icon_info_msg(super_icon_info, super_name, msg.super_icon_info)
    for si_id in interaction_info.interactions_to_be_canceled:
        msg.interactions_to_be_canceled.append(si_id)
    if interaction_info.mood_list is not None:
        for mood in interaction_info.mood_list:
            msg.mood_list.append(mood.guid64)
 def _send_relationship_data(self, sim_id):
     if self.relationship_track_visual is None:
         return
     relationship_to_send = self._get_relationship(sim_id)
     if not relationship_to_send:
         return
     sim_info = services.sim_info_manager().get(sim_id)
     if sim_info is None:
         return
     msg = commodity_protocol.RelationshipUpdate()
     msg.actor_sim_id = sim_id
     (msg.target_id.object_id,
      msg.target_id.manager_id) = self.owner.icon_info
     msg.target_instance_id = self.owner.id
     if self.icon_override is not None:
         build_icon_info_msg(IconInfoData(icon_resource=self.icon_override),
                             None, msg.target_icon_override)
     with ProtocolBufferRollback(msg.tracks) as relationship_track_update:
         relationship_value = relationship_to_send.get_value()
         relationship_track_update.track_score = relationship_value
         relationship_track_update.track_bit_id = self.relationship_track_visual.relationship_track.get_bit_at_relationship_value(
             relationship_value).guid64
         relationship_track_update.track_id = self.relationship_track_visual.relationship_track.guid64
         relationship_track_update.track_popup_priority = self.relationship_track_visual.relationship_track.display_popup_priority
         relationship_track_update.visible_in_relationship_panel = self.relationship_track_visual.visible_in_relationship_panel
     send_relationship_op(sim_info, msg)
     if self._object_social_mixin is not None:
         self._object_social_mixin.send_social_update_message()
Exemplo n.º 4
0
 def build_gig_msg(cls, msg, sim, gig_time=None, gig_customer=None):
     msg.gig_type = cls.guid64
     msg.gig_name = cls.display_name(sim)
     (pay_lower, pay_upper) = cls._get_base_pay_for_gig_owner(sim)
     msg.min_pay = pay_lower
     msg.max_pay = pay_upper
     msg.gig_icon = ResourceKey()
     msg.gig_icon.instance = cls.display_icon.instance
     msg.gig_icon.group = cls.display_icon.group
     msg.gig_icon.type = cls.display_icon.type
     if cls.odd_job_tuning is not None and cls.odd_job_tuning.use_customer_description_as_gig_description and gig_customer is not None:
         customer_sim_info = services.sim_info_manager().get(gig_customer)
         if customer_sim_info is not None:
             msg.gig_description = cls.odd_job_tuning.customer_description(
                 customer_sim_info)
     else:
         msg.gig_description = cls.display_description(sim)
     if gig_time is not None:
         msg.gig_time = gig_time
     if gig_customer is not None:
         msg.customer_id = gig_customer
     if cls.tip is not None:
         msg.tip_title = cls.tip.tip_title()
         if cls.tip.tip_icon is not None or cls.tip.tip_text is not None:
             build_icon_info_msg(
                 IconInfoData(icon_resource=cls.tip.tip_icon),
                 None,
                 msg.tip_icon,
                 desc=cls.tip.tip_text())
Exemplo n.º 5
0
 def create_calendar_alert(self):
     calendar_alert = super().create_calendar_alert()
     if self.ui_display_data:
         build_icon_info_msg(
             IconInfoData(icon_resource=self.ui_display_data.icon),
             self.ui_display_data.name, calendar_alert.calendar_icon)
     return calendar_alert
Exemplo n.º 6
0
 def send_icon_update_to_client(self):
     msg = Situations_pb2.SituationIconUpdate()
     msg.situation_id = self.id
     build_icon_info_msg(self.get_pet().get_icon_info_data(), None,
                         msg.icon_info)
     msg.icon_info.control_id = ICON_CONTROL_ID
     op = distributor.ops.SituationIconUpdateOp(msg)
     Distributor.instance().add_op(self, op)
Exemplo n.º 7
0
 def create_calendar_entry(self):
     calendar_entry = super().create_calendar_entry()
     situation_type = self._situation_seed.situation_type
     calendar_entry.zone_id = self._situation_seed.zone_id
     build_icon_info_msg(
         IconInfoData(icon_resource=situation_type.calendar_icon),
         situation_type.display_name, calendar_entry.icon_info)
     calendar_entry.scoring_enabled = self._situation_seed.scoring_enabled
     return calendar_entry
 def _build_customize_picker(self, picker_data):
     for category in self.filter_categories:
         with ProtocolBufferRollback(
                 picker_data.filter_data) as category_data:
             category_data.tag_type = category.decoration_category
             build_icon_info_msg(category.icon(None), None,
                                 category_data.icon_info)
             category_data.description = category.category_name
     super()._build_customize_picker(picker_data)
 def create_calendar_entry(self):
     calendar_entry = super().create_calendar_entry()
     calendar_entry.zone_id = self._zone_id
     build_icon_info_msg(
         IconInfoData(
             icon_resource=self._display_data.instance_display_icon),
         self._display_data.instance_display_name, calendar_entry.icon_info)
     calendar_entry.scoring_enabled = False
     return calendar_entry
Exemplo n.º 10
0
 def push_inventory_item_update_msg(self, object_updated):
     update_data = UI_pb2.DynamicInventoryItemData()
     update_data.count = object_updated.stack_count()
     update_data.sort_order = object_updated.get_stack_sort_order()
     update_data.new_object_id = object_updated.id
     update_data.is_new = object_updated.new_in_inventory
     icon_info = object_updated.get_icon_info_data()
     build_icon_info_msg(icon_info, None, update_data.icon_info)
     self._updated_ui_update(object_updated, object_updated.id, update_data)
Exemplo n.º 11
0
 def _obj_stacked(self, new_object, old_obj_id):
     update_data = UI_pb2.DynamicInventoryItemData()
     update_data.count = new_object.stack_count()
     update_data.sort_order = new_object.get_stack_sort_order()
     update_data.new_object_id = new_object.id
     update_data.is_new = new_object.new_in_inventory
     icon_info = new_object.get_icon_info_data()
     build_icon_info_msg(icon_info, None, update_data.icon_info)
     self._updated_ui_update(new_object, old_obj_id, update_data)
Exemplo n.º 12
0
 def build_situation_start_message(self):
     msg = super().build_situation_start_message()
     with ProtocolBufferRollback(msg.meter_data) as meter_data_msg:
         self.mother_plant_meter_settings.build_data_message(meter_data_msg)
     with ProtocolBufferRollback(msg.meter_data) as meter_data_msg:
         self.player_health_meter_settings.build_data_message(
             meter_data_msg)
     build_icon_info_msg(IconInfoData(icon_resource=self.mother_plant_icon),
                         None, msg.icon_info)
     return msg
 def _build_customize_picker(self, picker_data) -> None:
     for category in self.object_categories:
         with ProtocolBufferRollback(
                 picker_data.filter_data) as category_data:
             category_data.tag_type = abs(hash(
                 category.object_category)) % (10**8)
             build_icon_info_msg(category.icon(None), None,
                                 category_data.icon_info)
             category_data.description = category.category_name
     super()._build_customize_picker(picker_data)
Exemplo n.º 14
0
 def create_calendar_alert(self):
     calendar_alert = super().create_calendar_alert()
     situation_type = self._situation_seed.situation_type
     calendar_alert.zone_id = self._situation_seed.zone_id
     if self._situation_seed.situation_type.calendar_alert_description is not None:
         calendar_alert.description = situation_type.calendar_alert_description
     build_icon_info_msg(
         IconInfoData(icon_resource=situation_type.calendar_icon),
         situation_type.display_name, calendar_alert.calendar_icon)
     return calendar_alert
Exemplo n.º 15
0
 def _build_customize_picker(self, picker_data):
     picker_data.shop_picker_data.object_id = self.object_id
     picker_data.shop_picker_data.show_description = self.show_description
     picker_data.shop_picker_data.mailman_purchase = self.mailman_purchase
     for category in self.categories:
         category_data = picker_data.shop_picker_data.categories.add()
         category_data.tag_type = category.tag
         build_icon_info_msg((category.icon, None), None, category_data.icon_info)
         category_data.description = category.tooltip
     for row in self.picker_rows:
         row_data = picker_data.shop_picker_data.row_data.add()
         row.populate_protocol_buffer(row_data)
Exemplo n.º 16
0
 def _build_customize_picker(self, picker_data):
     picker_data.shop_picker_data.object_id = self.object_id
     picker_data.shop_picker_data.show_description = self.show_description
     picker_data.shop_picker_data.mailman_purchase = self.mailman_purchase
     for category in self.categories:
         category_data = picker_data.shop_picker_data.categories.add()
         category_data.tag_type = category.tag
         build_icon_info_msg((category.icon, None), None,
                             category_data.icon_info)
         category_data.description = category.tooltip
     for row in self.picker_rows:
         row_data = picker_data.shop_picker_data.row_data.add()
         row.populate_protocol_buffer(row_data)
Exemplo n.º 17
0
 def build_msg(self, additional_tokens=(), icon_override=DEFAULT, secondary_icon_override=DEFAULT, **kwargs):
     msg = Dialog_pb2.UiDialogMessage()
     msg.dialog_id = self.dialog_id
     msg.owner_id = self.owner.id
     msg.dialog_type = Dialog_pb2.UiDialogMessage.DEFAULT
     if self.title is not None:
         msg.title = self._build_localized_string_msg(self.title, *additional_tokens)
     msg.text = self._build_localized_string_msg(self.text, *additional_tokens)
     if icon_override is DEFAULT:
         if self.icon is not None:
             icon_info = self.icon(self._resolver)
             key = icon_info[0]
             if key is not None:
                 msg.icon.type = key.type
                 msg.icon.group = key.group
                 msg.icon.instance = key.instance
             build_icon_info_msg(icon_info, None, msg.icon_info)
     elif icon_override is not None:
         build_icon_info_msg(icon_override, None, msg.icon_info)
     if secondary_icon_override is DEFAULT:
         if self.secondary_icon is not None:
             icon_info = self.secondary_icon(self._resolver)
             build_icon_info_msg(icon_info, None, msg.secondary_icon_info)
     elif secondary_icon_override is not None:
         build_icon_info_msg(secondary_icon_override, None, msg.secondary_icon_info)
     msg.dialog_options = self.dialog_options
     responses = []
     responses.extend(self._get_responses_gen())
     responses.sort(key=lambda response: response.sort_order)
     for response in responses:
         response_msg = msg.choices.add()
         self._build_response_arg(response, response_msg, additional_tokens=additional_tokens, **kwargs)
     return msg
Exemplo n.º 18
0
def _build_interaction_msg(interaction_info, msg):
    if not interaction_info:
        logger.debug('Why am I here with no interaction info???')
    logger.debug('  _build_interaction_msg({0})',
                 interaction_info.interaction_id)
    msg.interaction_id = interaction_info.interaction_id
    msg.insert_after_id = interaction_info.insert_after_id
    if interaction_info.ui_visual_type != Sims_pb2.Interaction.SIMPLE:
        msg.super_id = interaction_info.super_id
        (super_name,
         super_icon_info_data) = interaction_info.get_super_icon_info()
        if super_name is not None:
            build_icon_info_msg(super_icon_info_data, super_name,
                                msg.super_icon_info)
    else:
        msg.super_id = 0
    if interaction_info.icon_info:
        icon_info = interaction_info.icon_info
        if not issubclass(type(icon_info), _IconInfoData):
            logger.warn(
                'All icon_info data types should be converted to the type IconInfoData. The tuple format found in interaction {} is no longer supported.',
                interaction_info,
                owner='shipark')
            icon_info_data = IconInfoData(icon_resource=icon_info[0],
                                          obj_instance=icon_info[1])
        else:
            icon_info_data = icon_info
        build_icon_info_msg(icon_info_data, interaction_info.display_name,
                            msg.icon_info)
    if interaction_info.target is not None:
        if interaction_info.target.id is not None:
            msg.target_manager_object_id.object_id = interaction_info.target.id
    if interaction_info.target is not None:
        msg.target_manager_object_id.manager_id = interaction_info.target.manager_id
    for participant in interaction_info.participants:
        if participant is not None:
            with ProtocolBufferRollback(
                    msg.participant_manager_object_ids) as participant_msg:
                participant_msg.manager_id = participant.manager_id
                participant_msg.object_id = participant.id
    msg.canceled = interaction_info.canceled
    msg.cancelable = interaction_info.user_cancelable
    msg.visual_type = interaction_info.ui_visual_type
    msg.queue_ui_state = interaction_info.ui_state
    for si_id in interaction_info.interactions_to_be_canceled:
        msg.interactions_to_be_canceled.append(si_id)
    if interaction_info.mood_list is not None:
        for mood in interaction_info.mood_list:
            msg.mood_list.append(mood.guid64)
def get_situation_data(session_id: int = 0,
                       sim_id: OptionalTargetParam = None,
                       *situation_ids,
                       _connection=None):
    sim = get_optional_target(sim_id, _connection)
    instance_manager = services.situation_manager()
    situation_batch_msg = Situations_pb2.SituationDataBatch()
    situation_batch_msg.situation_session_id = session_id
    for situation_id in situation_ids:
        with ProtocolBufferRollback(
                situation_batch_msg.situations) as situation_data:
            instance = instance_manager.get(situation_id)
            while instance is not None:
                shared_messages.build_icon_info_msg((instance._icon, None),
                                                    instance._display_name,
                                                    situation_data.icon_info)
                situation_data.icon_info.desc = instance.situation_description
                situation_data.cost = instance._cost
                situation_data.max_participants = instance.max_participants
                for medal in SituationMedal:
                    with ProtocolBufferRollback(
                            situation_data.rewards) as reward_msg:
                        level = instance.get_level_data(medal)
                        reward_msg.level = int(medal)
                        while level is not None and level.reward is not None:
                            reward_msg.display_name.extend(
                                [level.reward.reward_description])
                jobs = list(instance.get_tuned_jobs())
                jobs.sort(key=lambda job: job.guid64)
                if instance.job_display_ordering is not None:
                    for ordered_job in reversed(instance.job_display_ordering):
                        while ordered_job in jobs:
                            jobs.remove(ordered_job)
                            jobs.insert(0, ordered_job)
                for job in jobs:
                    while job.sim_count.upper_bound > 0:
                        with ProtocolBufferRollback(
                                situation_data.jobs) as job_msg:
                            job_msg.job_resource_id = job.guid64
                            shared_messages.build_icon_info_msg(
                                (job.icon, None), job.display_name,
                                job_msg.icon_info)
                            job_msg.icon_info.desc = job.job_description
                            job_msg.is_hireable = job.can_be_hired
                            job_msg.min_required = job.sim_count.lower_bound
                            job_msg.max_allowed = job.sim_count.upper_bound
                            job_msg.hire_cost = job.hire_cost
    shared_messages.add_message_if_selectable(
        sim, Consts_pb2.MSG_SITUATION_DATA_BATCH, situation_batch_msg, True)
Exemplo n.º 20
0
 def create_calendar_entry(self):
     calendar_entry = super().create_calendar_entry()
     active_household = services.active_household()
     if active_household is not None:
         holiday_service = services.holiday_service()
         build_icon_info_msg(
             IconInfoData(icon_resource=holiday_service.
                          get_holiday_display_icon(self.holiday_id)),
             holiday_service.get_holiday_display_name(self.holiday_id),
             calendar_entry.icon_info)
         calendar_entry.holiday_id = self.holiday_id
         for tradition in holiday_service.get_holiday_traditions(
                 self.holiday_id):
             calendar_entry.tradition_ids.append(tradition.guid64)
     return calendar_entry
Exemplo n.º 21
0
 def _send_career_ui_update(self, is_add=True):
     audition_update_msg = DistributorOps_pb2.AuditionUpdate()
     if is_add:
         self.gig.build_gig_msg(
             audition_update_msg.audition_info,
             self._receiver_sim_info,
             gig_time=self._calculated_gig_time,
             audition_time=self._calculated_audition_time)
     op = GenericProtocolBufferOp(Operation.AUDITION_UPDATE,
                                  audition_update_msg)
     build_icon_info_msg(
         IconInfoData(icon_resource=self.audition_prep_icon),
         self.audition_prep_recommendation(),
         audition_update_msg.recommended_task)
     Distributor.instance().add_op(self._receiver_sim_info, op)
Exemplo n.º 22
0
 def populate_protocol_buffer(self, base_row_data, name_override=DEFAULT):
     base_row_data.option_id = self.option_id
     base_row_data.is_enable = bool(self.is_enable)
     if name_override is DEFAULT:
         name_override = self.name
     if name_override is not None:
         base_row_data.name = name_override
     if self.icon is not None:
         base_row_data.icon.type = self.icon.type
         base_row_data.icon.group = self.icon.group
         base_row_data.icon.instance = self.icon.instance
     if self.icon_info is not None:
         build_icon_info_msg(self.icon_info, None, base_row_data.icon_info)
     if self.row_description is not None:
         base_row_data.description = self.row_description
     if self.row_tooltip:
         base_row_data.tooltip = self.row_tooltip()
Exemplo n.º 23
0
 def populate_protocol_buffer(self, base_row_data, name_override=DEFAULT):
     base_row_data.option_id = self.option_id
     base_row_data.is_enable = bool(self.is_enable)
     if name_override is DEFAULT:
         name_override = self.name
     if name_override is not None:
         base_row_data.name = name_override
     if self.icon is not None:
         base_row_data.icon.type = self.icon.type
         base_row_data.icon.group = self.icon.group
         base_row_data.icon.instance = self.icon.instance
     if self.icon_info is not None:
         build_icon_info_msg(self.icon_info, None, base_row_data.icon_info)
     if self.row_description is not None:
         base_row_data.description = self.row_description
     if self.row_tooltip:
         base_row_data.tooltip = self.row_tooltip()
Exemplo n.º 24
0
 def _send_icon_update_to_client(self, sim):
     display_name = sim.household.holiday_tracker.get_active_holiday_display_name(
     )
     holiday_icon = sim.household.holiday_tracker.get_active_holiday_display_icon(
     )
     msg = Situations_pb2.SituationIconUpdate()
     msg.situation_id = self.id
     end_time = HolidayTuning.MAIN_HOLIDAY_START_TIME + HolidayTuning.HOLIDAY_DURATION(
     )
     build_icon_info_msg(
         IconInfoData(icon_resource=holiday_icon),
         display_name,
         msg.icon_info,
         desc=LocalizationHelperTuning.get_start_time_to_end_time(
             HolidayTuning.MAIN_HOLIDAY_START_TIME, end_time))
     msg.icon_info.control_id = 0
     op = distributor.ops.SituationIconUpdateOp(msg)
     Distributor.instance().add_op(self, op)
Exemplo n.º 25
0
 def create_calendar_alert(self):
     if self.ui_display_type == DramaNodeUiDisplayType.POP_UP_HOLIDAY:
         return
     holiday_service = services.holiday_service()
     calendar_alert = super().create_calendar_alert()
     calendar_alart_description = holiday_service.get_holiday_calendar_alert_notification(
         self.holiday_id)
     if calendar_alart_description is not None:
         calendar_alert.description = calendar_alart_description(
             holiday_service.get_holiday_display_name(self.holiday_id))
     build_icon_info_msg(
         IconInfoData(icon_resource=holiday_service.
                      get_holiday_display_icon(self.holiday_id)),
         holiday_service.get_holiday_display_name(self.holiday_id),
         calendar_alert.calendar_icon)
     for tradition in holiday_service.get_holiday_traditions(
             self.holiday_id):
         calendar_alert.tradition_ids.append(tradition.guid64)
     return calendar_alert
Exemplo n.º 26
0
 def _build_object_relationship_update_proto(self,
                                             actor_sim_info,
                                             member_obj_def_id,
                                             deltas=None,
                                             name_override=None):
     msg = commodity_protocol.RelationshipUpdate()
     actor_sim_id = actor_sim_info.sim_id
     msg.actor_sim_id = actor_sim_id
     if name_override is not None:
         loc_custom_name = LocalizationHelperTuning.get_raw_text(
             name_override)
         build_icon_info_msg(IconInfoData(), loc_custom_name,
                             msg.target_icon_override)
     if self._target_object_id == 0:
         target_object = None
         tag_set = services.relationship_service().get_mapped_tag_set_of_id(
             member_obj_def_id)
         definition_ids = services.relationship_service(
         ).get_ids_of_tag_set(tag_set)
         for definition_id in definition_ids:
             for obj in services.object_manager().objects:
                 if definition_id == obj.definition.id:
                     target_object = obj
                     break
         if target_object is None:
             logger.error(
                 'Failed to find an object with requested object tag set in the world,                             so the initial object type relationship creation for sim {} will not complete.',
                 actor_sim_info)
             return
         (msg.target_id.object_id,
          msg.target_id.manager_id) = target_object.icon_info
         msg.target_instance_id = target_object.id
         self._target_object_id = msg.target_id.object_id
         self._target_object_manager_id = msg.target_id.manager_id
         self._target_object_instance_id = msg.target_instance_id
     else:
         msg.target_id.object_id = self._target_object_id
         msg.target_id.manager_id = self._target_object_manager_id
         msg.target_instance_id = self._target_object_instance_id
     msg.last_update_time = self._last_update_time
     track_bits = self._build_relationship_track_proto(msg)
     self._build_relationship_bit_proto(actor_sim_id, track_bits, msg)
     return msg
Exemplo n.º 27
0
 def build_msg(self, zone_id=None, **kwargs):
     msg = super().build_msg(**kwargs)
     if zone_id is None:
         return msg
     persistence_service = services.get_persistence_service()
     zone_data = persistence_service.get_zone_proto_buff(zone_id)
     if zone_data is None:
         return msg
     venue_tuning_id = build_buy.get_current_venue(zone_id)
     venue_manager = services.get_instance_manager(
         sims4.resources.Types.VENUE)
     venue_tuning = venue_manager.get(venue_tuning_id)
     if venue_tuning is None:
         return msg
     msg.lot_title = self.zone_title(venue_tuning.display_name,
                                     zone_data.name)
     build_icon_info_msg(
         IconInfoData(icon_resource=venue_tuning.venue_icon),
         venue_tuning.display_name, msg.venue_icon)
     return msg
Exemplo n.º 28
0
 def _build_goal_message(self, goal_msg, goal):
     goal_msg.goal_id = goal.id
     goal_name = goal.get_display_name()
     if goal_name is not None:
         goal_msg.goal_name = goal_name
     goal_msg.max_iterations = goal.max_iterations
     if goal.completed_time is None:
         goal_msg.current_iterations = goal.completed_iterations
     else:
         goal_msg.current_iterations = goal.max_iterations
     goal_tooltip = goal.get_display_tooltip()
     if goal_tooltip is not None:
         goal_msg.goal_tooltip = goal_tooltip
     if goal.audio_sting_on_complete is not None:
         goal_msg.audio_sting.type = goal.audio_sting_on_complete.type
         goal_msg.audio_sting.group = goal.audio_sting_on_complete.group
         goal_msg.audio_sting.instance = goal.audio_sting_on_complete.instance
     build_icon_info_msg(IconInfoData(icon_resource=goal.display_icon),
                         goal_name, goal_msg.icon_info)
     goal_msg.display_type = goal.display_type.value
Exemplo n.º 29
0
 def _get_add_to_client_msg(self, obj):
     msg = UI_pb2.InventoryItemUpdate()
     msg.type = UI_pb2.InventoryItemUpdate.TYPE_ADD
     msg.inventory_id = self._get_inventory_id()
     msg.inventory_type = self._get_inventory_ui_type()
     msg.stack_id = obj.inventoryitem_component.get_stack_id()
     msg.object_id = obj.id
     add_data = UI_pb2.InventoryItemData()
     add_data.definition_id = obj.definition.id
     dynamic_data = UI_pb2.DynamicInventoryItemData()
     dynamic_data.value = obj.current_value
     dynamic_data.locked = False
     dynamic_data.in_use = False
     dynamic_data.count = obj.stack_count()
     dynamic_data.is_new = obj.new_in_inventory
     dynamic_data.sort_order = obj.get_stack_sort_order()
     icon_info = obj.get_icon_info_data()
     build_icon_info_msg(icon_info, None, dynamic_data.icon_info)
     add_data.dynamic_data = dynamic_data
     msg.add_data = add_data
     return msg
Exemplo n.º 30
0
 def build_situation_start_message(self):
     msg = super().build_situation_start_message()
     with ProtocolBufferRollback(msg.meter_data) as meter_data_msg:
         self._progress_meter_settings.build_data_message(meter_data_msg)
     msg.situation_id = self.id
     end_time = HolidayTuning.MAIN_HOLIDAY_START_TIME + HolidayTuning.HOLIDAY_DURATION(
     )
     sim_info = self._get_situation_sim()
     display_name = sim_info.household.holiday_tracker.get_active_holiday_display_name(
     )
     holiday_icon = sim_info.household.holiday_tracker.get_active_holiday_display_icon(
     )
     build_icon_info_msg(
         IconInfoData(icon_resource=holiday_icon),
         display_name,
         msg.icon_info,
         desc=LocalizationHelperTuning.get_start_time_to_end_time(
             HolidayTuning.MAIN_HOLIDAY_START_TIME, end_time))
     msg.icon_info.control_id = 0
     msg.display_delay = HolidayTuning.HOLIDAY_DISPLAY_DELAY().in_ticks()
     return msg
Exemplo n.º 31
0
	def build_msg (self, additional_tokens = (), icon_override = DEFAULT, secondary_icon_override = DEFAULT, text_override = DEFAULT, **kwargs):
		msg = Dialog_pb2.UiDialogMessage()
		msg.dialog_id = self.dialog_id
		msg.owner_id = self.owner.id if self.owner is not None else 0
		msg.dialog_type = Dialog_pb2.UiDialogMessage.DEFAULT
		msg.dialog_style = self.dialog_style
		msg.dialog_bg_style = self.dialog_bg_style
		if self._target_sim_id is not None:
			msg.target_id = self._target_sim_id
		if self.title is not None:
			msg.title = self._build_localized_string_msg(self.title, *additional_tokens)
		if text_override is DEFAULT:
			msg.text = self._build_localized_string_msg(self.text, *additional_tokens)
		else:
			msg.text = self._build_localized_string_msg(text_override, *additional_tokens)
		if self.timeout_duration is not None:
			msg.timeout_duration = self.timeout_duration
		if icon_override is DEFAULT:
			if self.icon is not None:
				icon_info = self.icon(self._resolver)
				key = icon_info[0]
				if key is not None:
					msg.icon.type = key.type
					msg.icon.group = key.group
					msg.icon.instance = key.instance
				build_icon_info_msg(icon_info, None, msg.icon_info)
		elif icon_override is not None:
			build_icon_info_msg(icon_override, None, msg.icon_info)
		if secondary_icon_override is DEFAULT:
			if self.secondary_icon is not None:
				icon_info = self.secondary_icon(self._resolver)
				build_icon_info_msg(icon_info, None, msg.secondary_icon_info)
		elif secondary_icon_override is not None:
			build_icon_info_msg(secondary_icon_override, None, msg.secondary_icon_info)
		if self.icon_override_participant is not None:
			msg.override_sim_icon_id = self._resolver.get_participants(self.icon_override_participant)[0].id
		msg.dialog_options = self.dialog_options
		msg.anonymous_target_sim = self.anonymous_target_sim
		responses = []
		responses.extend(self._get_responses_gen())
		responses.sort(key = lambda response: response.sort_order)
		for response in responses:
			response_msg = msg.choices.add()
			self._build_response_arg(response, response_msg, additional_tokens = additional_tokens, **kwargs)
		if self.additional_texts:
			for additional_text in self.additional_texts:
				msg.additional_texts.append(self._build_localized_string_msg(additional_text, *additional_tokens))
		return msg
Exemplo n.º 32
0
def get_situation_data(session_id:int=0, sim_id:OptionalTargetParam=None, *situation_ids, _connection=None):
    sim = get_optional_target(sim_id, _connection)
    instance_manager = services.situation_manager()
    situation_batch_msg = Situations_pb2.SituationDataBatch()
    situation_batch_msg.situation_session_id = session_id
    for situation_id in situation_ids:
        with ProtocolBufferRollback(situation_batch_msg.situations) as situation_data:
            instance = instance_manager.get(situation_id)
            while instance is not None:
                shared_messages.build_icon_info_msg((instance._icon, None), instance._display_name, situation_data.icon_info)
                situation_data.icon_info.desc = instance.situation_description
                situation_data.cost = instance._cost
                situation_data.max_participants = instance.max_participants
                for medal in SituationMedal:
                    with ProtocolBufferRollback(situation_data.rewards) as reward_msg:
                        level = instance.get_level_data(medal)
                        reward_msg.level = int(medal)
                        while level is not None and level.reward is not None:
                            reward_msg.display_name.extend([level.reward.reward_description])
                jobs = list(instance.get_tuned_jobs())
                jobs.sort(key=lambda job: job.guid64)
                if instance.job_display_ordering is not None:
                    for ordered_job in reversed(instance.job_display_ordering):
                        while ordered_job in jobs:
                            jobs.remove(ordered_job)
                            jobs.insert(0, ordered_job)
                for job in jobs:
                    while job.sim_count.upper_bound > 0:
                        with ProtocolBufferRollback(situation_data.jobs) as job_msg:
                            job_msg.job_resource_id = job.guid64
                            shared_messages.build_icon_info_msg((job.icon, None), job.display_name, job_msg.icon_info)
                            job_msg.icon_info.desc = job.job_description
                            job_msg.is_hireable = job.can_be_hired
                            job_msg.min_required = job.sim_count.lower_bound
                            job_msg.max_allowed = job.sim_count.upper_bound
                            job_msg.hire_cost = job.hire_cost
    shared_messages.add_message_if_selectable(sim, Consts_pb2.MSG_SITUATION_DATA_BATCH, situation_batch_msg, True)
Exemplo n.º 33
0
 def build_msg(self,
               additional_tokens=(),
               icon_override=DEFAULT,
               secondary_icon_override=DEFAULT,
               **kwargs):
     msg = Dialog_pb2.UiDialogMessage()
     msg.dialog_id = self.dialog_id
     msg.owner_id = self.owner.id
     msg.dialog_type = Dialog_pb2.UiDialogMessage.DEFAULT
     if self.title is not None:
         msg.title = self._build_localized_string_msg(
             self.title, *additional_tokens)
     msg.text = self._build_localized_string_msg(self.text,
                                                 *additional_tokens)
     if icon_override is DEFAULT:
         if self.icon is not None:
             icon_info = self.icon(self._resolver)
             key = icon_info[0]
             if key is not None:
                 msg.icon.type = key.type
                 msg.icon.group = key.group
                 msg.icon.instance = key.instance
             build_icon_info_msg(icon_info, None, msg.icon_info)
     elif icon_override is not None:
         build_icon_info_msg(icon_override, None, msg.icon_info)
     if secondary_icon_override is DEFAULT:
         if self.secondary_icon is not None:
             icon_info = self.secondary_icon(self._resolver)
             build_icon_info_msg(icon_info, None, msg.secondary_icon_info)
     elif secondary_icon_override is not None:
         build_icon_info_msg(secondary_icon_override, None,
                             msg.secondary_icon_info)
     msg.dialog_options = self.dialog_options
     responses = []
     responses.extend(self._get_responses_gen())
     responses.sort(key=lambda response: response.sort_order)
     for response in responses:
         response_msg = msg.choices.add()
         self._build_response_arg(response,
                                  response_msg,
                                  additional_tokens=additional_tokens,
                                  **kwargs)
     return msg
Exemplo n.º 34
0
 def _get_inventory_update_message(self,
                                   update_type,
                                   obj,
                                   obj_id=None,
                                   allow_while_zone_not_running=False):
     if not self._allow_ui:
         return
     if not services.current_zone(
     ).is_zone_running and not allow_while_zone_not_running:
         return
     if services.current_zone().is_zone_shutting_down:
         return
     msg = UI_pb2.InventoryItemUpdate()
     msg.type = update_type
     msg.inventory_id = self._get_inventory_id()
     msg.inventory_type = self._get_inventory_ui_type()
     msg.stack_id = obj.inventoryitem_component.get_stack_id()
     if obj_id is None:
         msg.object_id = obj.id
     else:
         msg.object_id = obj_id
     if update_type == UI_pb2.InventoryItemUpdate.TYPE_ADD:
         add_data = UI_pb2.InventoryItemData()
         add_data.definition_id = obj.definition.id
         msg.add_data = add_data
     if update_type == UI_pb2.InventoryItemUpdate.TYPE_ADD or update_type == UI_pb2.InventoryItemUpdate.TYPE_UPDATE:
         dynamic_data = UI_pb2.DynamicInventoryItemData()
         dynamic_data.value = obj.current_value
         dynamic_data.count = obj.stack_count()
         dynamic_data.new_object_id = obj.id
         dynamic_data.is_new = obj.new_in_inventory
         dynamic_data.sort_order = obj.get_stack_sort_order()
         icon_info = obj.get_icon_info_data()
         build_icon_info_msg(icon_info, None, dynamic_data.icon_info)
         recipe_name = obj.get_tooltip_field(
             TooltipFieldsComplete.recipe_name
         ) or obj.get_craftable_property(GameObjectProperty.RECIPE_NAME)
         if recipe_name is not None:
             dynamic_data.recipe_name = recipe_name
         if obj.custom_name is not None:
             dynamic_data.custom_name = obj.custom_name
         if InventoryStorage.UI_SORT_TYPES:
             sort_type = 0
             for sort_type_data in InventoryStorage.UI_SORT_TYPES:
                 value = None
                 try:
                     abs_value = None
                     state_component = obj.state_component
                     if state_component is None:
                         continue
                     for state in sort_type_data.object_data:
                         if state_component.has_state(state):
                             test_value = float(
                                 state_component.get_state(state).value)
                             abs_test_value = abs(test_value)
                             if value is None:
                                 value = test_value
                             elif abs_value < abs_test_value:
                                 value = test_value
                                 abs_value = abs_test_value
                 except TypeError:
                     pass
                 if value is not None:
                     sort_data_item = UI_pb2.InventoryItemSortData()
                     sort_data_item.type = sort_type
                     sort_data_item.value = value
                     dynamic_data.sort_data.append(sort_data_item)
                 sort_type += 1
         if update_type == UI_pb2.InventoryItemUpdate.TYPE_ADD:
             msg.add_data.dynamic_data = dynamic_data
         else:
             msg.update_data = dynamic_data
     if update_type == UI_pb2.InventoryItemUpdate.TYPE_SET_STACK_OPTION:
         dynamic_data = UI_pb2.DynamicInventoryItemData()
         if obj.inventoryitem_component.has_stack_option:
             obj.inventoryitem_component.populate_stack_icon_info_data(
                 dynamic_data.icon_info)
         obj_owner = obj.inventoryitem_component.get_inventory().owner
         if obj_owner.is_sim:
             favorites_tracker = obj_owner.sim_info.favorites_tracker
             if favorites_tracker is not None:
                 if favorites_tracker.is_favorite_stack(obj):
                     dynamic_data.is_favorite = True
         msg.update_data = dynamic_data
     return msg