def get_sims_for_job(session_id, sim_id, situation_type, job_type, *job_assignments, _connection=None):
    sim = get_optional_target(sim_id, _connection)
    situation_start_time = services.time_service().sim_now
    duration = situation_type.duration
    if duration > 0:
        situation_end_time = situation_start_time + date_and_time.create_time_span(0, 0, duration)
    else:
        situation_start_time = date_and_time.INVALID_DATE_AND_TIME
        situation_end_time = date_and_time.INVALID_DATE_AND_TIME
    results = services.sim_filter_service().submit_filter(job_type.filter, None, requesting_sim_info=sim.sim_info, start_time=situation_start_time, end_time=situation_end_time, allow_yielding=False)
    if job_type.additional_filter_for_user_selection:
        sim_constraints = {result.sim_info.id for result in results}
        results = services.sim_filter_service().submit_filter(job_type.additional_filter_for_user_selection, None, requesting_sim_info=sim.sim_info, start_time=situation_start_time, end_time=situation_end_time, sim_constraints=sim_constraints, allow_yielding=False)
    msg = Situations_pb2.SituationJobSims()
    msg.situation_session_id = session_id
    msg.job_resource_id = job_type.guid
    msg.requirements = job_type.requirement_text
    results.sort(key=lambda x: (x.sim_info.is_npc, x.sim_info.last_name))
    for result in results:
        msg.sim_ids.append(result.sim_info.id)
        with ProtocolBufferRollback(msg.sims) as situation_job_sim:
            situation_job_sim.sim_id = result.sim_info.id
            if result.sim_info.household.id == services.active_household_id():
                situation_job_sim.account_id = result.sim_info.account_id
            while result.conflicting_career_track_id:
                situation_job_sim.career_track_id = result.conflicting_career_track_id
    shared_messages.add_message_if_selectable(services.object_manager().get(sim.id), Consts_pb2.MSG_SITUATION_JOB_SIMS, msg, True)
 def send_quality_update(self, liabilty_release=False):
     crafting_process = self._crafting_process
     sim = crafting_process.crafter
     if sim is not None:
         liability_data = Sims_pb2.CraftingLiabilityUpdate()
         liability_data.core_data.type = Sims_pb2.InteractionLiabilityUpdate.CRAFTING_QUALITY
         liability_data.core_data.sim_id = crafting_process.crafter_sim_id
         liability_data.core_data.liabilty_release = liabilty_release
         if not liabilty_release:
             quality_value = crafting_process.crafting_quality
             liability_data.quality_statistic_value = int(quality_value)
             quality_state = CraftingTuning.get_quality_state_value(CraftingTuning.QUALITY_STATISTIC, liability_data.quality_statistic_value)
             if quality_state is not None:
                 liability_data.crafting_item_name = quality_state.state_string(crafting_process.recipe.get_recipe_name(crafting_process.crafter))
                 liability_data.crafting_quality = quality_state.state_star_number
             else:
                 liability_data.crafting_item_name = crafting_process.recipe.get_recipe_name(crafting_process.crafter)
             phase = crafting_process.phase
             if phase is not None and phase.is_visible:
                 if phase.phase_display_name is not None:
                     liability_data.phase_name = phase.phase_display_name
                 liability_data.phase_index = crafting_process.phase_index
                 liability_data.total_phases = crafting_process.recipe.total_visible_phases
                 liability_data.turn_index = crafting_process.get_progress()
                 liability_data.total_turns = crafting_process.get_turns_in_current_phase()
         add_message_if_selectable(sim, Consts_pb2.MSG_SIM_CRAFTING_LIABILITY_UPDATE, liability_data, False)
def send_interaction_queue_view_add_msg(sim, super_interactions, immediate=False):
    logger.debug('send_interaction_queue_view_add_msg({}, immediate={}', sim.id, immediate)
    msg = Sims_pb2.InteractionQueueViewAdd()
    if _build_interaction_queue_view_add_msg(sim, super_interactions, msg):
        logger.debug('    SENDING')
        add_message_if_selectable(sim, MSG_SIM_INTERACTION_QUEUE_VIEW_ADD, msg, immediate)
    else:
        logger.debug('    NOT_SENDING')
def send_interaction_replace_message(sim, old_interaction_id, new_interaction_info, immediate=False):
    logger.debug('send_interaction_replace_message({}), old_id={}, new_id={}, immediate={})', sim.id, old_interaction_id, new_interaction_info.interaction_id, immediate)
    msg = Sims_pb2.InteractionReplace()
    msg.sim_id = sim.id
    msg.old_interaction_id = old_interaction_id
    _build_interaction_msg(new_interaction_info, msg.new_interaction)
    logger.debug('    SENDING')
    add_message_if_selectable(sim, MSG_SIM_INTERACTION_REPLACE, msg, immediate)
def send_interactions_update_msg(sim, super_interactions, immediate=False):
    logger.debug('send_interactions_update_msg({}), immediate={}', sim.id, immediate)
    msg = Sims_pb2.InteractionsUpdate()
    if _build_interactions_update_msg(sim, super_interactions, msg):
        logger.debug('    SENDING')
        add_message_if_selectable(sim, MSG_SIM_INTERACTIONS_UPDATE, msg, immediate)
    else:
        logger.debug('    NOT_SENDING')
def send_interactions_remove_msg(sim, interactions, immediate=False):
    logger.debug('send_interactions_remove_msg({}), immediate={}', sim.id, immediate)
    msg = Sims_pb2.InteractionsRemove()
    if _build_interactions_remove_msg(sim, msg, interactions):
        logger.debug('    SENDING')
        add_message_if_selectable(sim, MSG_SIM_INTERACTIONS_REMOVE, msg, immediate)
    else:
        logger.debug('    NOT_SENDING')
def send_interactions_update_msg(sim, super_interactions, immediate=False):
    logger.debug('send_interactions_update_msg({}), immediate={}', sim.id,
                 immediate)
    msg = Sims_pb2.InteractionsUpdate()
    if _build_interactions_update_msg(sim, super_interactions, msg):
        logger.debug('    SENDING')
        add_message_if_selectable(sim, MSG_SIM_INTERACTIONS_UPDATE, msg,
                                  immediate)
    else:
        logger.debug('    NOT_SENDING')
def send_interactions_remove_msg(sim, interactions, immediate=False):
    logger.debug('send_interactions_remove_msg({}), immediate={}', sim.id,
                 immediate)
    msg = Sims_pb2.InteractionsRemove()
    if _build_interactions_remove_msg(sim, msg, interactions):
        logger.debug('    SENDING')
        add_message_if_selectable(sim, MSG_SIM_INTERACTIONS_REMOVE, msg,
                                  immediate)
    else:
        logger.debug('    NOT_SENDING')
def send_interactions_removeall_msg(sim, immediate=False):
    if sim is None:
        return
    logger.debug('send_interactions_removeall_msg({}, immediate={})', sim.id, immediate)
    msg = Sims_pb2.InteractionsRemove()
    if _build_interactions_removeall_msg(sim, msg):
        logger.debug('    SENDING')
        add_message_if_selectable(sim, MSG_SIM_INTERACTIONS_REMOVE_ALL, msg, immediate)
    else:
        logger.debug('    NOT_SENDING')
def get_situation_ids(session_id: int = 0,
                      sim_id: OptionalTargetParam = None,
                      opt_target_id: int = None,
                      *situation_ids,
                      _connection=None):
    sim = get_optional_target(sim_id, _connection)
    if opt_target_id is None or opt_target_id == 0:
        target_sim_id = 0
    else:
        target_sim_id = opt_target_id
    household = sim.household
    instance_manager = services.get_instance_manager(
        sims4.resources.Types.SITUATION)
    situation_batch_msg = Situations_pb2.SituationIDBatch()
    situation_batch_msg.situation_session_id = session_id
    situation_batch_msg.scoring_enabled = household.situation_scoring_enabled
    valid_situations = []
    for situation_id in situation_ids:
        instance = instance_manager.get(situation_id)
        (result, mtx_id) = should_display_situation(instance, sim,
                                                    target_sim_id)
        while result or result.tooltip is not None:
            valid_situations.append((instance, mtx_id, result.tooltip))
    if not valid_situations:
        for instance in instance_manager.types.values():
            if instance.guid64 in situation_ids:
                pass
            (result,
             mtx_id) = should_display_situation(instance, sim, target_sim_id)
            while result or result.tooltip is not None:
                valid_situations.append((instance, mtx_id, result.tooltip))
    for (instance, mtx_id, tooltip) in valid_situations:
        highest_medal_earned = household.get_highest_medal_for_situation(
            instance.guid64)
        situation_batch_msg.highest_medal_earned.append(highest_medal_earned)
        situation_batch_msg.situation_resource_id.append(instance.guid64)
        situation_batch_msg.mtx_id.append(mtx_id)
        if tooltip is not None:
            tooltip = tooltip()
            situation_batch_msg.tooltip.append(tooltip)
        else:
            tooltip = Localization_pb2.LocalizedString()
            tooltip.hash = 0
            situation_batch_msg.tooltip.append(tooltip)
        situation_batch_msg.category_id.append(instance.category)
        try:
            situation_batch_msg.situation_name.extend([instance._display_name])
        except:
            del situation_batch_msg.situation_name[
                len(situation_batch_msg.situation_name) - 1]
            del situation_batch_msg.situation_resource_id[
                len(situation_batch_msg.situation_resource_id) - 1]
    shared_messages.add_message_if_selectable(
        sim, Consts_pb2.MSG_SITUATION_ID_BATCH, situation_batch_msg, True)
Beispiel #11
0
def send_memory_trigger_update(sim,
                               trigger_memory=False,
                               timeout_time=0.0,
                               memory_uid=0):
    memory_msg = Sims_pb2.MemoryTriggerUpdate()
    memory_msg.sim_id = sim.id if sim is not None else 0
    memory_msg.trigger_memory = trigger_memory
    memory_msg.timeout = timeout_time
    memory_msg.memory_id = memory_uid
    add_message_if_selectable(sim, MSG_SIM_MEMORY_TRIGGER_UPDATE, memory_msg,
                              False)
Beispiel #12
0
def send_memory_trigger_update(sim,
                               trigger_memory=False,
                               timeout_time=0.0,
                               memory_uid=0):
    memory_msg = Sims_pb2.MemoryTriggerUpdate()
    memory_msg.sim_id = sim.id if sim is not None else 0
    memory_msg.trigger_memory = trigger_memory
    memory_msg.timeout = timeout_time
    memory_msg.memory_id = memory_uid
    add_message_if_selectable(sim, MSG_SIM_MEMORY_TRIGGER_UPDATE, memory_msg,
                              False)
def send_interactions_removeall_msg(sim, immediate=False):
    if sim is None:
        return
    logger.debug('send_interactions_removeall_msg({}, immediate={})', sim.id,
                 immediate)
    msg = Sims_pb2.InteractionsRemove()
    if _build_interactions_removeall_msg(sim, msg):
        logger.debug('    SENDING')
        add_message_if_selectable(sim, MSG_SIM_INTERACTIONS_REMOVE_ALL, msg,
                                  immediate)
    else:
        logger.debug('    NOT_SENDING')
def send_interaction_queue_view_add_msg(sim,
                                        super_interactions,
                                        immediate=False):
    logger.debug('send_interaction_queue_view_add_msg({}, immediate={}',
                 sim.id, immediate)
    msg = Sims_pb2.InteractionQueueViewAdd()
    if _build_interaction_queue_view_add_msg(sim, super_interactions, msg):
        logger.debug('    SENDING')
        add_message_if_selectable(sim, MSG_SIM_INTERACTION_QUEUE_VIEW_ADD, msg,
                                  immediate)
    else:
        logger.debug('    NOT_SENDING')
def send_interaction_replace_message(sim,
                                     old_interaction_id,
                                     new_interaction_info,
                                     immediate=False):
    logger.debug(
        'send_interaction_replace_message({}), old_id={}, new_id={}, immediate={})',
        sim.id, old_interaction_id, new_interaction_info.interaction_id,
        immediate)
    msg = Sims_pb2.InteractionReplace()
    msg.sim_id = sim.id
    msg.old_interaction_id = old_interaction_id
    _build_interaction_msg(new_interaction_info, msg.new_interaction)
    logger.debug('    SENDING')
    add_message_if_selectable(sim, MSG_SIM_INTERACTION_REPLACE, msg, immediate)
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)
def get_sims_for_job(session_id,
                     sim_id,
                     situation_type,
                     job_type,
                     *job_assignments,
                     _connection=None):
    sim = get_optional_target(sim_id, _connection)
    situation_start_time = services.time_service().sim_now
    duration = situation_type.duration
    if duration > 0:
        situation_end_time = situation_start_time + date_and_time.create_time_span(
            0, 0, duration)
    else:
        situation_start_time = date_and_time.INVALID_DATE_AND_TIME
        situation_end_time = date_and_time.INVALID_DATE_AND_TIME
    results = services.sim_filter_service().submit_filter(
        job_type.filter,
        None,
        requesting_sim_info=sim.sim_info,
        start_time=situation_start_time,
        end_time=situation_end_time,
        allow_yielding=False)
    if job_type.additional_filter_for_user_selection:
        sim_constraints = {result.sim_info.id for result in results}
        results = services.sim_filter_service().submit_filter(
            job_type.additional_filter_for_user_selection,
            None,
            requesting_sim_info=sim.sim_info,
            start_time=situation_start_time,
            end_time=situation_end_time,
            sim_constraints=sim_constraints,
            allow_yielding=False)
    msg = Situations_pb2.SituationJobSims()
    msg.situation_session_id = session_id
    msg.job_resource_id = job_type.guid
    msg.requirements = job_type.requirement_text
    results.sort(key=lambda x: (x.sim_info.is_npc, x.sim_info.last_name))
    for result in results:
        msg.sim_ids.append(result.sim_info.id)
        with ProtocolBufferRollback(msg.sims) as situation_job_sim:
            situation_job_sim.sim_id = result.sim_info.id
            if result.sim_info.household.id == services.active_household_id():
                situation_job_sim.account_id = result.sim_info.account_id
            while result.conflicting_career_track_id:
                situation_job_sim.career_track_id = result.conflicting_career_track_id
    shared_messages.add_message_if_selectable(
        services.object_manager().get(sim.id),
        Consts_pb2.MSG_SITUATION_JOB_SIMS, msg, True)
Beispiel #18
0
 def craft_situation(interaction, targeted_situation_participant, situations_available):
     msg = Situations_pb2.SituationPrepare()
     msg.situation_session_id = services.get_zone_situation_manager().get_new_situation_creation_session()
     msg.sim_id = interaction.sim.id
     if targeted_situation_participant is not None:
         target = interaction.get_participant(targeted_situation_participant)
         if target is not None:
             msg.is_targeted = True
             msg.target_id = target.id
         else:
             logger.error('None participant for: {} on interaction: {}'.format(targeted_situation_participant, interaction), owner='rmccord')
     if situations_available is not None:
         for situation in situations_available:
             msg.situation_resource_id.append(situation.guid64)
     shared_messages.add_message_if_selectable(interaction.sim, Consts_pb2.MSG_SITUATION_PREPARE, msg, True)
     return True
Beispiel #19
0
 def send_situation_start_ui(self,
                             actor,
                             target=None,
                             situations_available=None,
                             creation_time=None):
     msg = Situations_pb2.SituationPrepare()
     msg.situation_session_id = self.get_new_situation_creation_session()
     msg.creation_time = creation_time if creation_time is not None else 0
     msg.sim_id = actor.id
     if target is not None:
         msg.is_targeted = True
         msg.target_id = target.id
     if situations_available is not None:
         for situation in situations_available:
             msg.situation_resource_id.append(situation.guid64)
     shared_messages.add_message_if_selectable(
         actor, Consts_pb2.MSG_SITUATION_PREPARE, msg, True)
def get_situation_ids(session_id:int=0, sim_id:OptionalTargetParam=None, opt_target_id:int=None, *situation_ids, _connection=None):
    sim = get_optional_target(sim_id, _connection)
    if opt_target_id is None or opt_target_id == 0:
        target_sim_id = 0
    else:
        target_sim_id = opt_target_id
    household = sim.household
    instance_manager = services.get_instance_manager(sims4.resources.Types.SITUATION)
    situation_batch_msg = Situations_pb2.SituationIDBatch()
    situation_batch_msg.situation_session_id = session_id
    situation_batch_msg.scoring_enabled = household.situation_scoring_enabled
    valid_situations = []
    for situation_id in situation_ids:
        instance = instance_manager.get(situation_id)
        (result, mtx_id) = should_display_situation(instance, sim, target_sim_id)
        while result or result.tooltip is not None:
            valid_situations.append((instance, mtx_id, result.tooltip))
    if not valid_situations:
        for instance in instance_manager.types.values():
            if instance.guid64 in situation_ids:
                pass
            (result, mtx_id) = should_display_situation(instance, sim, target_sim_id)
            while result or result.tooltip is not None:
                valid_situations.append((instance, mtx_id, result.tooltip))
    for (instance, mtx_id, tooltip) in valid_situations:
        highest_medal_earned = household.get_highest_medal_for_situation(instance.guid64)
        situation_batch_msg.highest_medal_earned.append(highest_medal_earned)
        situation_batch_msg.situation_resource_id.append(instance.guid64)
        situation_batch_msg.mtx_id.append(mtx_id)
        if tooltip is not None:
            tooltip = tooltip()
            situation_batch_msg.tooltip.append(tooltip)
        else:
            tooltip = Localization_pb2.LocalizedString()
            tooltip.hash = 0
            situation_batch_msg.tooltip.append(tooltip)
        situation_batch_msg.category_id.append(instance.category)
        try:
            situation_batch_msg.situation_name.extend([instance._display_name])
        except:
            del situation_batch_msg.situation_name[len(situation_batch_msg.situation_name) - 1]
            del situation_batch_msg.situation_resource_id[len(situation_batch_msg.situation_resource_id) - 1]
    shared_messages.add_message_if_selectable(sim, Consts_pb2.MSG_SITUATION_ID_BATCH, situation_batch_msg, True)
Beispiel #21
0
 def craft_situation(interaction, targeted_situation_participant,
                     situations_available):
     msg = Situations_pb2.SituationPrepare()
     msg.situation_session_id = services.get_zone_situation_manager(
     ).get_new_situation_creation_session()
     msg.sim_id = interaction.sim.id
     if targeted_situation_participant is not None:
         target = interaction.get_participant(
             targeted_situation_participant)
         if target is not None:
             msg.is_targeted = True
             msg.target_id = target.id
         else:
             logger.error(
                 'None participant for: {} on interaction: {}'.format(
                     targeted_situation_participant, interaction),
                 owner='rmccord')
     if situations_available is not None:
         for situation in situations_available:
             msg.situation_resource_id.append(situation.guid64)
     shared_messages.add_message_if_selectable(
         interaction.sim, Consts_pb2.MSG_SITUATION_PREPARE, msg, True)
     return True
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)