def clear_sim_sex_extra_data(sim_identifier,
                             only_active_data=False,
                             only_pre_active_data=False):
    sim_info = TurboManagerUtil.Sim.get_sim_info(sim_identifier)
    if only_pre_active_data is False:
        sim_ev(sim_info).is_playing_sex = False
        sim_ev(sim_info).active_sex_handler_identifier = '-1'
        sim_ev(sim_info).active_sex_handler = None
        sim_ev(sim_info).sim_sex_state_snapshot = dict()
        sim_ev(sim_info).sim_immutable_sex_state_snapshot = dict()
        set_sim_statistic_value(sim_info, 0, SimCommodity.WW_READY_TO_CLIMAX)
        if is_main_debug_flag_enabled():
            display_notification(text='Cleared Sim Active Sex Data',
                                 title='Sex Extra Data Clear',
                                 secondary_icon=sim_info)
    if only_active_data is False:
        sim_ev(sim_info).has_setup_sex = False
        sim_ev(sim_info).active_pre_sex_handler = None
        sim_ev(sim_info).is_ready_to_sex = False
        sim_ev(sim_info).is_in_process_to_sex = False
        sim_ev(sim_info).in_sex_process_interaction = None
        set_sim_statistic_value(sim_info, 0, SimCommodity.WW_IS_SIM_IN_SEX)
        if is_main_debug_flag_enabled():
            display_notification(text='Cleared Sim Pre Sex Data',
                                 title='Sex Extra Data Clear',
                                 secondary_icon=sim_info)
예제 #2
0
 def on_interaction_asm_setup(cls, interaction_instance, interaction_asm):
     sim = TurboInteractionUtil.get_interaction_sim(interaction_instance)
     active_sex_handler = sim_ev(sim).active_sex_handler
     if active_sex_handler is None:
         cls.cancel_interaction(
             interaction_instance,
             finishing_type=TurboInteractionUtil.FinishingType.NATURAL)
         display_notification(text='Missing Active Sex Handler Instance!',
                              title='WickedWhims Error',
                              secondary_icon=sim,
                              is_safe=True)
         return False
     if TurboManagerUtil.Sim.get_sim_id(
             sim) != active_sex_handler.get_creator_sim_id():
         return True
     game_object_target = TurboObjectUtil.GameObject.get_object_with_id(
         active_sex_handler.get_game_object_id())
     actors_list = active_sex_handler.get_sims_list()
     for i in range(len(actors_list)):
         actor_id = actors_list[i][0]
         actor_sim = TurboManagerUtil.Sim.get_sim_instance(
             actors_list[i][1])
         interaction_asm.set_parameter(
             'animation_name_a' + str(i),
             active_sex_handler.get_actor_animation_clip_name(actor_id))
         interaction_asm.set_actor('a' + str(i), actor_sim)
     if game_object_target is not None:
         interaction_asm.set_parameter(
             'object_animation_name',
             active_sex_handler.get_animation_instance().
             get_object_animation_clip_name())
         interaction_asm.set_actor('o', game_object_target)
     interaction_asm.enter()
     return True
예제 #3
0
def _test_for_broken_sex_interaction(sim_identifier):
    sim = TurboManagerUtil.Sim.get_sim_instance(sim_identifier)
    if sim_ev(sim).active_sex_handler is None:
        return
    if sim_ev(sim).active_sex_handler.is_playing is True and not TurboSimUtil.Interaction.is_running_interaction(sim, SimInteraction.WW_SEX_ANIMATION_DEFAULT) and not TurboSimUtil.Interaction.has_queued_interaction(sim, SimInteraction.WW_SEX_ANIMATION_DEFAULT):
        if sim_ev(sim).active_sex_handler.one_second_counter > 3:
            display_notification(text=2431239863)
        sim_ev(sim).active_sex_handler.reset()
예제 #4
0
 def _wickedwhims_debug_interaction_run_event(interaction_instance):
     sim = TurboInteractionUtil.get_interaction_sim(interaction_instance)
     interaction_guid = TurboResourceUtil.Resource.get_guid64(
         interaction_instance)
     display_notification(text='ID: ' + str(interaction_guid) + '\nData: ' +
                          interaction_instance.__class__.__name__.lower(),
                          title='Interaction Run',
                          secondary_icon=sim)
def _wickedwhims_command_list_sims_underwear():
    for sim_info in TurboManagerUtil.Sim.get_all_sim_info_gen(humans=True,
                                                              pets=False):
        underwear_info_list = ''
        for (outfit_id, underwear_data
             ) in sim_ev(sim_info).underwear_outfits_parts.items():
            underwear_info_list += str(outfit_id) + ' > ' + str(
                underwear_data) + '\n'
        display_notification(text=underwear_info_list, secondary_icon=sim_info)
예제 #6
0
def display_not_allowed_message(sex_denial_reason):
    if sex_denial_reason:
        return
    if sex_denial_reason.get_reason(
    ) == SexDenialReasonType.NO_PROTECTION_HATES_CHILDREN:
        display_notification(text=866800069,
                             text_tokens=(sex_denial_reason.get_sim_info(), ),
                             title=2175203501,
                             secondary_icon=sex_denial_reason.get_sim_info())
예제 #7
0
 def stop(self,
          soft_stop=False,
          hard_stop=False,
          no_teleport=False,
          is_joining_stop=False,
          is_end=False,
          stop_reason=None):
     if self._is_restarting is True and hard_stop is False and is_end is False:
         return
     if stop_reason is not None and is_main_debug_flag_enabled():
         display_notification(text=str(stop_reason),
                              title='Sex Stop Reason')
     queue_unregister_active_sex_handler(self)
     sims_list = self.get_sims_list()
     active_angle = random.randint(0, 359)
     angle_section = 360 / max(1, self.get_actors_amount())
     if is_joining_stop is False:
         apply_after_sex_functions(self, sims_list, is_ending=is_end)
     apply_after_sex_relationship(self, sims_list)
     for (_, sim_info) in sims_list:
         if sim_info is None:
             continue
         clear_sim_sex_extra_data(sim_info,
                                  only_active_data=is_joining_stop)
         unprepare_npc_sim_from_sex(sim_info)
         TurboSimUtil.Interaction.unlock_queue(sim_info)
         update_sim_body_flags(sim_info)
         update_sim_underwear_data(sim_info)
         if soft_stop is False and no_teleport is False and self.get_object_identifier(
         )[0] == 'FLOOR':
             active_angle = (active_angle + angle_section) % 360
             new_location = TurboMathUtil.Location.apply_offset(
                 self.get_location(),
                 x_offset=cos(active_angle) * 0.4,
                 z_offset=sin(active_angle) * 0.4,
                 orientation_offset=random.randint(0, 360))
             new_location = TurboWorldUtil.Zone.find_good_location(
                 new_location)
             sim = TurboManagerUtil.Sim.get_sim_instance(sim_info)
             if sim is not None:
                 TurboWorldUtil.Location.move_object_to(sim, new_location)
         TurboSimUtil.Sim.reset_sim(sim_info, hard_reset_on_exception=True)
         TurboSimUtil.Interaction.push_affordance(
             sim_info,
             SimInteraction.SIM_STAND,
             interaction_context=TurboInteractionUtil.InteractionContext.
             SOURCE_POSTURE_GRAPH,
             insert_strategy=TurboInteractionUtil.QueueInsertStrategy.FIRST,
             must_run_next=True,
             priority=TurboInteractionUtil.Priority.Critical,
             run_priority=TurboInteractionUtil.Priority.Critical,
             skip_if_running=True)
     location_game_object = TurboObjectUtil.GameObject.get_object_with_id(
         self.get_game_object_id())
     if location_game_object is not None:
         TurboObjectUtil.GameObject.reset(location_game_object)
예제 #8
0
def _is_mod_safe_to_run():
    if not _is_file_existing('TURBODRIVER_WickedWhims_Tuning.package'):
        display_notification(
            text=
            "FATAL ERROR!\n\nEssential 'TURBODRIVER_WickedWhims_Tuning.package' file is missing!\n\nAll WickedWhims files have to be locked in one folder!\n\nRe-Installation is required for WickedWhims to work correctly!\n\nAlways keep all of the WickedWhims files in one place!",
            title='WickedWhims',
            urgency=TurboUIUtil.Notification.UiDialogNotificationUrgency.URGENT
        )
        return False
    return True
예제 #9
0
 def get_actors_sim_info_gen(self):
     for sim_id in self._actors_list.values():
         sim_info = TurboManagerUtil.Sim.get_sim_info(sim_id)
         if sim_info is None:
             display_notification(text='Failed to identify sim with id ' +
                                  str(sim_id) +
                                  ' to properly receive its data!',
                                  title='WickedWhims Error',
                                  is_safe=True)
         yield sim_info
예제 #10
0
 def get_sims_list(self):
     sims_list = list()
     for (actor_id, sim_id) in self._actors_list.items():
         sim_info = TurboManagerUtil.Sim.get_sim_info(sim_id)
         if sim_info is None:
             display_notification(text='Failed to identify sim with id ' +
                                  str(sim_id) +
                                  ' to properly return sims list!',
                                  title='WickedWhims Error',
                                  is_safe=True)
             return ()
         sims_list.append((actor_id, sim_info))
     return sorted(sims_list, key=lambda x: x[0])
예제 #11
0
def try_to_take_and_use_condoms(sim_identifier, silent_failure=False):
    sim_info = TurboManagerUtil.Sim.get_sim_info(sim_identifier)
    (result, amount) = _try_to_take_and_use_condoms(sim_info)
    if sim_ev(sim_info).active_sex_handler is not None and not sim_ev(
            sim_info).active_sex_handler.is_npc_only():
        if result:
            if amount == 1:
                display_notification(text=4082674743,
                                     text_tokens=(sim_info, ),
                                     title=1873179704,
                                     secondary_icon=sim_info)
            else:
                display_notification(text=2429963938,
                                     text_tokens=(str(amount), sim_info),
                                     title=1873179704,
                                     secondary_icon=sim_info)
                if silent_failure is False:
                    display_notification(text=3990632821,
                                         title=1873179704,
                                         secondary_icon=sim_info)
        elif silent_failure is False:
            display_notification(text=3990632821,
                                 title=1873179704,
                                 secondary_icon=sim_info)
    return result
예제 #12
0
def _display_hello_notification():
    hello_ids = (2039141334, 2218897178, 4271772397, 370121153, 586158561,
                 790896663, 1213235168, 4108001505, 2704450329, 756630283,
                 3828663345, 1988030031, 3829989166, 3162323884, 3658047458,
                 1430591040, 2867073748, 1349634794)
    current_mod_version = get_mod_version_str()
    loaded_animations_count = str(len(get_available_sex_animations()))
    unique_animations_authors = get_unique_sex_animations_authors()
    display_notification(
        text=3265194817,
        text_tokens=(random.choice(hello_ids), current_mod_version,
                     loaded_animations_count, unique_animations_authors),
        title='WickedWhims',
        visual_type=TurboUIUtil.Notification.UiDialogNotificationVisualType.
        SPECIAL_MOMENT)
예제 #13
0
def _wickedwhims_zone_update():
    global UNREGISTER_GAME_UPDATE_FUNCTIONS, EXTR_N
    if UNREGISTER_GAME_UPDATE_FUNCTIONS:
        for method_name in UNREGISTER_GAME_UPDATE_FUNCTIONS:
            for update_tracker in GAME_UPDATE_FUNCTIONS:
                while update_tracker.get_update_method_name() == method_name:
                    GAME_UPDATE_FUNCTIONS.remove(update_tracker)
                    break
        UNREGISTER_GAME_UPDATE_FUNCTIONS = list()
    diff_ticks = get_current_diff_ticks()
    if EXTR_N < 21000:
        EXTR_N += diff_ticks
        if EXTR_N >= 21000:
            display_notification(text='Mod WickedWhims by TURBODRIVER\n\nhttp://wickedwhimsmod.com\nhttp://wickedwhims.tumblr.com\nhttps://patreon.com/wickedwoohoo\n\nMake sure to stay updated on the sites listed above!', information_level=TurboUIUtil.Notification.UiDialogNotificationLevel.PLAYER)
    for update_tracker in GAME_UPDATE_FUNCTIONS:
        update_tracker.update(diff_ticks)
예제 #14
0
 def on_interaction_start(cls, interaction_instance):
     sim = cls.get_interaction_sim(interaction_instance)
     household = TurboSimUtil.Household.get_household(sim)
     if household is None:
         return False
     if not TurboWorldUtil.Household.subtract_funds(household, 1500):
         return False
     sim_info = TurboManagerUtil.Sim.get_sim_info(sim)
     TurboSimUtil.Pregnancy.clear_pregnancy(sim_info)
     if has_sim_trait(sim_info, SimTrait.HATESCHILDREN):
         add_sim_buff(sim_info, SimBuff.WW_PREGNANCY_TERMINATION_HAPPY, reason=3441893392)
     else:
         add_sim_buff(sim_info, SimBuff.WW_PREGNANCY_TERMINATION_SAD, reason=3441893392)
     display_notification(text=3344178125, text_tokens=(sim_info,), title=2364600527, secondary_icon=sim_info)
     increase_sim_ww_statistic(sim_info, 'times_terminated_pregnancy')
     TurboSimUtil.Interaction.push_affordance(sim, SimInteraction.WW_GO_HOME, interaction_context=TurboInteractionUtil.InteractionContext.SOURCE_SCRIPT, insert_strategy=TurboInteractionUtil.QueueInsertStrategy.NEXT, must_run_next=True, priority=TurboInteractionUtil.Priority.Critical, run_priority=TurboInteractionUtil.Priority.Critical)
     return True
예제 #15
0
 def on_interaction_start(cls, interaction_instance):
     sim = cls.get_interaction_target(interaction_instance)
     sex_debug_info = ''
     sex_debug_info += '\nSex Data:\n'
     sex_debug_info += '  Is Playing Sex: ' + str(
         sim_ev(sim).is_playing_sex) + '\n'
     sex_debug_info += '  Active Sex Handler Id: ' + str(
         sim_ev(sim).active_sex_handler_identifier) + '\n'
     sex_debug_info += '\n  Has Setup Sex: ' + str(
         sim_ev(sim).has_setup_sex) + '\n'
     sex_debug_info += '  Is Ready To Sex: ' + str(
         sim_ev(sim).is_ready_to_sex) + '\n'
     sex_debug_info += '  Is In Process To Sex: ' + str(
         sim_ev(sim).is_in_process_to_sex) + '\n'
     sex_debug_info += '  Has Sex Process Insteraction: ' + str(
         sim_ev(sim).in_sex_process_interaction is not None) + '\n'
     sex_debug_info += '\n  Cum Apply Time: ' + str(
         sim_ev(sim).cum_apply_time) + '\n'
     sex_debug_info += '\n  Is Stapon Allowed: ' + str(
         sim_ev(sim).is_strapon_allowed) + '\n'
     sex_debug_info += '  Strapon Part Id: ' + str(
         sim_ev(sim).strapon_part_id) + '\n'
     sex_debug_info += '  Sex Reaction Cooldown: ' + str(
         sim_ev(sim).sex_reaction_cooldown) + '\n'
     sex_debug_info += '  Sex Reaction Skip Handlers: ' + str(
         sim_ev(sim).sex_reaction_handlers_list) + '\n'
     sex_debug_info += '  Sim State Snapshot: ' + str([
         str(key) + ': ' + str(value)
         for (key, value) in sim_ev(sim).sim_sex_state_snapshot.items()
     ]) + '\n'
     sex_debug_info += '  Immutable Sim State Snapshot: ' + str([
         str(key) + ': ' + str(value)
         for (key, value
              ) in sim_ev(sim).sim_immutable_sex_state_snapshot.items()
     ]) + '\n'
     sex_debug_info += '\n  Pre Sex Handler: ' + (str(
         sim_ev(sim).active_pre_sex_handler.get_string_data()) if sim_ev(
             sim).active_pre_sex_handler is not None else str(None)) + '\n'
     sex_debug_info += '  Active Sex Handler: ' + (
         str(sim_ev(sim).active_sex_handler.get_string_data()) if
         sim_ev(sim).active_sex_handler is not None else str(None)) + '\n'
     display_notification(text=sex_debug_info,
                          title=str(TurboSimUtil.Name.get_name(sim)[0]) +
                          ' ' + str(TurboSimUtil.Name.get_name(sim)[1]) +
                          ' Sex Debug',
                          secondary_icon=sim)
def _try_trigger_sim_miscarriage(sim_identifier):
    if not get_sex_setting(SexSetting.MISCARRIAGE_SWITCH, variable_type=bool):
        return False
    if not TurboSimUtil.Pregnancy.is_pregnant(sim_identifier):
        return False
    if has_sim_buffs(sim_identifier, MISCARRIAGE_DISALLOWED_PREGNANCY_BUFFS):
        return False
    if not has_sim_buffs(sim_identifier, MISCARRIAGE_ALLOWED_PREGNANCY_BUFFS):
        return False
    pregnancy_days = get_sex_setting(SexSetting.PREGNANCY_DURATION,
                                     variable_type=int)
    miscarriage_potential_pregnancy_hours = 0.72 * pregnancy_days * 24
    miscarriage_chance = sim_ev(
        sim_identifier
    ).miscarriage_potential / 3.8 / miscarriage_potential_pregnancy_hours
    if random.uniform(0, 1) >= miscarriage_chance:
        return False
    if remove_sim_pregnancy(sim_identifier):
        add_sim_buff(sim_identifier,
                     SimBuff.WW_PREGNANCY_MISCARRIAGE,
                     reason=3245985980)
        TurboSimUtil.Interaction.push_affordance(
            sim_identifier,
            SimInteraction.WW_PREGNANCY_MISCARRIAGE,
            interaction_context=TurboInteractionUtil.InteractionContext.
            SOURCE_SCRIPT,
            insert_strategy=TurboInteractionUtil.QueueInsertStrategy.NEXT,
            must_run_next=True,
            priority=TurboInteractionUtil.Priority.Critical,
            run_priority=TurboInteractionUtil.Priority.Critical)
        miscarriage_puddle_object = TurboObjectUtil.GameObject.create_object(
            12327982570318338407)
        if miscarriage_puddle_object:
            TurboObjectUtil.Puddle.place_puddle(miscarriage_puddle_object,
                                                sim_identifier)
        TurboWorldUtil.Time.set_current_time_speed(
            TurboWorldUtil.Time.ClockSpeedMode.NORMAL)
        display_notification(text=1234477375,
                             text_tokens=(sim_identifier, ),
                             title=971885236,
                             visual_type=TurboUIUtil.Notification.
                             UiDialogNotificationVisualType.SPECIAL_MOMENT,
                             secondary_icon=sim_identifier)
        TurboUIUtil.Camera.move_to_sim(sim_identifier)
        _sim_miscarriage_reaction(sim_identifier)
예제 #17
0
 def reassign_actors(self):
     current_actors_list_copy = self._actors_list.copy()
     sims_sex_gender = list()
     for sim_info in self.get_actors_sim_info_gen():
         sims_sex_gender.append((TurboManagerUtil.Sim.get_sim_id(sim_info),
                                 get_sim_sex_gender(sim_info)))
     self._populate_actors_list(force_populate=True)
     for (sim_id, sim_gender) in sims_sex_gender:
         if not self.assign_actor(sim_id, sim_gender):
             display_notification(
                 text=
                 'Tried to assign an actor on actors reassigning and failed!',
                 title='WickedWhims Error',
                 is_safe=True)
             self._actors_list = current_actors_list_copy
             self.stop(hard_stop=True,
                       is_end=True,
                       stop_reason='Failed to reassign actors.')
             break
def trigger_sex_autonomy_interaction(
    sims_pair,
    sex_location,
    sex_category_types=(SexCategoryType.ORALJOB, SexCategoryType.VAGINAL,
                        SexCategoryType.ANAL, SexCategoryType.HANDJOB,
                        SexCategoryType.FOOTJOB, SexCategoryType.TEASING)):
    object_identifier = SexInteractionLocationType.get_location_identifier(
        sex_location)
    genders = list()
    for sim in sims_pair:
        genders.append(get_sim_sex_gender(sim))
    animation_instance = None
    for sex_category_type in sex_category_types:
        if not is_sim_allowed_for_animation(sims_pair, sex_category_type):
            continue
        animation_instance = get_random_animation_of_type(
            sex_category_type,
            object_identifier,
            genders,
            ignore_animations=get_autonomy_disabled_sex_animations())
        if animation_instance is not None:
            break
    if animation_instance is None:
        return False
    if is_main_debug_flag_enabled():
        for sim in sims_pair:
            sim_name = TurboSimUtil.Name.get_name(sim)
            display_notification(title='Autonomy Triggered',
                                 text=str(sim_name[0]) + ' ' +
                                 str(sim_name[1]),
                                 secondary_icon=sim)
        if TurboTypesUtil.Objects.is_game_object(sex_location):
            display_notification(title='Autonomy Triggered',
                                 text=str(
                                     animation_instance.get_sex_category()),
                                 secondary_icon=sex_location)
        TurboWorldUtil.Time.set_current_time_speed(
            TurboWorldUtil.Time.ClockSpeedMode.PAUSED)
    return start_new_direct_sex_interaction(sims_pair,
                                            sex_location,
                                            animation_instance,
                                            is_autonomy=True)
예제 #19
0
 def get_tag(self):
     genders = list()
     for sim_info in self.sex_handler.get_actors_sim_info_gen():
         genders.append(get_sim_sex_gender(sim_info))
     current_animation = self.sex_handler.get_animation_instance()
     random_animation = get_random_animation_of_type(
         self.sex_category_type,
         self.object_identifier if self.object_identifier is not None else
         self.sex_handler.get_object_identifier(),
         genders,
         ignore_animations_ids=(-1 if current_animation is None else
                                current_animation.get_animation_id(), ))
     if random_animation is None:
         display_notification(
             text=1395546180,
             title=1890248379,
             secondary_icon=TurboManagerUtil.Sim.get_sim_info(
                 self.sex_handler.get_creator_sim_id()))
         return
     return random_animation
예제 #20
0
 def on_interaction_start(cls, interaction_instance):
     sim = cls.get_interaction_sim(interaction_instance)
     if get_sex_setting(
             SexSetting.PREGNANCY_MODE,
             variable_type=int) == PregnancyModeSetting.MENSTRUAL_CYCLE:
         pregnancy_chance = int(
             get_sim_current_menstrual_pregnancy_chance(sim) * 100)
         days_till_ovulation = get_sim_days_till_ovulation(sim)
         display_notification(text=2475884372,
                              text_tokens=(sim, str(pregnancy_chance),
                                           str(days_till_ovulation)),
                              title=2800719885,
                              secondary_icon=sim)
     else:
         pregnancy_chance = int(get_sim_current_pregnancy_chance(sim) * 100)
         display_notification(text=72538425,
                              text_tokens=(sim, str(pregnancy_chance)),
                              title=2800719885,
                              secondary_icon=sim)
     return True
예제 #21
0
 def on_interaction_start(cls, interaction_instance):
     sim = cls.get_interaction_target(interaction_instance)
     underwear_debug_info = ''
     underwear_debug_info += '\nUnderwear Flags:\n'
     underwear_debug_info += '  Top: ' + str(
         sim_ev(sim).underwear_flags['top']) + ' (stat: ' + str(
             get_sim_statistic_value(
                 sim, SimCommodity.WW_NUDITY_IS_TOP_UNDERWEAR)) + ')\n'
     underwear_debug_info += '  Bottom: ' + str(
         sim_ev(sim).underwear_flags['bottom']) + ' (stat: ' + str(
             get_sim_statistic_value(
                 sim, SimCommodity.WW_NUDITY_IS_BOTTOM_UNDERWEAR)) + ')\n'
     underwear_debug_info += '\nUnderwear Matrix:\n'
     for (outfit_id,
          underwear_data) in sim_ev(sim).underwear_outfits_parts.items():
         underwear_debug_info += str(outfit_id) + ' > ' + str(
             underwear_data) + '\n'
     display_notification(text=underwear_debug_info,
                          title=str(TurboSimUtil.Name.get_name(sim)[0]) +
                          ' ' + str(TurboSimUtil.Name.get_name(sim)[1]) +
                          ' Underwear Debug',
                          secondary_icon=sim)
def set_sim_pregnancy_discovery(sim_identifier, state):
    sim_info = TurboManagerUtil.Sim.get_sim_info(sim_identifier)
    statistic_instance = TurboResourceUtil.Services.get_instance(
        TurboResourceUtil.ResourceTypes.STATISTIC,
        SimCommodity.PREGNANCYDISCOVERY)
    if statistic_instance is None:
        return False
    if state is True:
        if get_sex_setting(
                SexSetting.PREGNENCY_NOTIFICATIONS_STATE,
                variable_type=bool) and TurboSimUtil.Sim.is_player(sim_info):
            display_notification(text=332111907,
                                 text_tokens=(sim_info, ),
                                 title=2364600527,
                                 secondary_icon=sim_info)
        TurboSimUtil.Statistic.set_statistic_value(
            sim_info, statistic_instance,
            TurboSimUtil.Statistic.get_statistic_max_value(statistic_instance))
    else:
        TurboSimUtil.Statistic.set_statistic_value(
            sim_info, statistic_instance,
            TurboSimUtil.Statistic.get_statistic_min_value(statistic_instance))
    return True
 def on_interaction_start(cls, interaction_instance):
     sim = cls.get_interaction_sim(interaction_instance)
     household = TurboSimUtil.Household.get_household(sim)
     if household is None:
         return False
     if not TurboWorldUtil.Household.subtract_funds(household, 950):
         return False
     sim_info = TurboManagerUtil.Sim.get_sim_info(sim)
     apply_pregnancy_boost_data(sim_info)
     display_notification(text=2518175852,
                          text_tokens=(sim_info, ),
                          title=518027626,
                          secondary_icon=sim_info)
     TurboSimUtil.Interaction.push_affordance(
         sim,
         SimInteraction.WW_GO_HOME,
         interaction_context=TurboInteractionUtil.InteractionContext.
         SOURCE_SCRIPT,
         insert_strategy=TurboInteractionUtil.QueueInsertStrategy.NEXT,
         must_run_next=True,
         priority=TurboInteractionUtil.Priority.Critical,
         run_priority=TurboInteractionUtil.Priority.Critical)
     return True
예제 #24
0
 def on_interaction_start(cls, interaction_instance):
     sim = cls.get_interaction_sim(interaction_instance)
     target = cls.get_interaction_target(interaction_instance)
     relationship_debug_info = ''
     relationship_debug_info += 'Desire Data:\n'
     relationship_debug_info += '  Master Desire Level: ' + str(
         get_sim_statistic_value(target,
                                 SimCommodity.WW_SEX_MASTER_DESIRE)) + '\n'
     if sim is not target:
         relationship_debug_info += '\n' + str(
             TurboSimUtil.Name.get_name(sim)[0]) + ' ' + str(
                 TurboSimUtil.Name.get_name(sim)[1]) + ' and ' + str(
                     TurboSimUtil.Name.get_name(target)[0]) + ' ' + str(
                         TurboSimUtil.Name.get_name(target)[1]) + ':'
         rel_score_a = get_relationship_score(sim, target)
         rel_score_b = get_relationship_score(target, sim)
         relationship_debug_info += '\n  Relationship Score: ' + str(
             rel_score_a) + ' / ' + str(rel_score_b) + ' / ' + str(
                 get_sex_pair_score(sim, target))
     display_notification(text=relationship_debug_info,
                          title=str(TurboSimUtil.Name.get_name(target)[0]) +
                          ' ' + str(TurboSimUtil.Name.get_name(target)[1]) +
                          ' Relationship Debug',
                          secondary_icon=target)
예제 #25
0
def take_birth_control_pill(sim_identifier, no_inventory=False):
    if no_inventory is False:
        sim = TurboManagerUtil.Sim.get_sim_instance(sim_identifier)
        if sim is None:
            return False
        if get_object_amount_in_sim_inventory(
                sim, BIRTH_CONTROL_PILL_OBJECT_ID) <= 0:
            return False
        if not remove_object_from_sim_inventory(
                sim, BIRTH_CONTROL_PILL_OBJECT_ID, 1):
            return False
    sim_info = TurboManagerUtil.Sim.get_sim_info(sim_identifier)
    sim_ev(
        sim_info
    ).day_used_birth_control_pills = TurboWorldUtil.Time.get_absolute_days()
    sim_ev(sim_info).birth_control_pill_power = 1
    update_sim_birth_control_status_buff(sim_info)
    increase_sim_ww_statistic(sim_info, 'times_used_contraception')
    if TurboSimUtil.Sim.is_player(sim_info):
        display_notification(text=949418969,
                             text_tokens=(sim_info, ),
                             title=1873179704,
                             secondary_icon=sim_info)
    return True
def nudity_notification(text=None,
                        text_tokens=(),
                        title=None,
                        title_tokens=(),
                        icon=None,
                        sims=(),
                        is_autonomy=False,
                        force_display=False,
                        **kwargs):
    if force_display is False:
        notifications_visibility_type = get_nudity_setting(
            NuditySetting.NOTIFICATIONS_VISBILITY_TYPE, variable_type=int)
        if notifications_visibility_type == NudityNotificationsTypeSetting.DISABLED:
            return
        if notifications_visibility_type == NudityNotificationsTypeSetting.AUTONOMY and is_autonomy is False:
            return
        if get_nudity_setting(
                NuditySetting.NOTIFICATIONS_HOUSEHOLD_LIMIT_STATE,
                variable_type=bool):
            while True:
                for included_sim_info in sims:
                    while TurboSimUtil.Sim.is_npc(included_sim_info):
                        return
    if title is None:
        if not sims:
            title = 3145721892
        elif has_sim_trait(sims[0], SimTrait.WW_EXHIBITIONIST):
            title = 4111426025
        else:
            title = 3476801842
    display_notification(text=text,
                         text_tokens=text_tokens,
                         title=title,
                         title_tokens=title_tokens,
                         secondary_icon=icon,
                         **kwargs)
예제 #27
0
def open_underwear_mannequin(sim=None):
    global UNDERWEAR_MANNEQUIN_IN_USE, UNDERWEAR_MANNEQUIN_SIM_ID, UNDERWEAR_MANNEQUIN_OBJECT_ID
    if sim is None:
        sim = TurboManagerUtil.Sim.get_active_sim()
    sim_is_child = TurboSimUtil.Age.get_age(sim) is TurboSimUtil.Age.CHILD
    if sim_is_child:
        if TurboSimUtil.Gender.is_male(sim):
            mannequin = TurboObjectUtil.GameObject.create_object(
                11608346933607860892,
                location=TurboSimUtil.Location.get_location(sim))
        else:
            mannequin = TurboObjectUtil.GameObject.create_object(
                16793401209133712026,
                location=TurboSimUtil.Location.get_location(sim))
    else:
        if TurboSimUtil.Gender.is_male(sim):
            mannequin = TurboObjectUtil.GameObject.create_object(
                15785160026562278628,
                location=TurboSimUtil.Location.get_location(sim))
        else:
            mannequin = TurboObjectUtil.GameObject.create_object(
                14110242915816833432,
                location=TurboSimUtil.Location.get_location(sim))
    mannequin_id = TurboResourceUtil.Resource.get_id(mannequin)
    mannequin_component = TurboObjectUtil.Mannequin.get_component(mannequin)
    mannequin_sim_info = TurboObjectUtil.Mannequin.get_mannequin_component_sim_info(
        mannequin_component)
    TurboObjectUtil.Mannequin.remove_mannequin_protocol_buffer(mannequin)
    for outfit_category in (TurboCASUtil.OutfitCategory.EVERYDAY,
                            TurboCASUtil.OutfitCategory.FORMAL,
                            TurboCASUtil.OutfitCategory.ATHLETIC,
                            TurboCASUtil.OutfitCategory.SLEEP,
                            TurboCASUtil.OutfitCategory.PARTY,
                            TurboCASUtil.OutfitCategory.SWIMWEAR,
                            TurboCASUtil.OutfitCategory.HOTWEATHER,
                            TurboCASUtil.OutfitCategory.COLDWEATHER):
        for outfit_index in range(
                TurboCASUtil.OutfitCategory.
                get_maximum_outfits_for_outfit_category(outfit_category)):
            if TurboSimUtil.CAS.has_outfit(sim,
                                           (outfit_category, outfit_index)):
                underwear_parts = get_sim_underwear_data(
                    sim, (outfit_category, outfit_index))
                if sim_is_child:
                    if TurboSimUtil.Gender.is_male(sim):
                        top_body_part = get_default_nude_cas_part_id(
                            sim, TurboCASUtil.BodyType.UPPER_BODY)
                        bottom_body_part = underwear_parts[
                            1] if outfit_category != TurboCASUtil.OutfitCategory.SLEEP and outfit_category != TurboCASUtil.OutfitCategory.SWIMWEAR else get_default_nude_cas_part_id(
                                sim, TurboCASUtil.BodyType.LOWER_BODY)
                        TurboSimUtil.CAS.set_outfit_parts(
                            mannequin_sim_info,
                            (outfit_category, outfit_index), {
                                TurboCASUtil.BodyType.HAIR:
                                12348270534692886420,
                                TurboCASUtil.BodyType.HEAD:
                                12348270534692886420,
                                TurboCASUtil.BodyType.UPPER_BODY:
                                top_body_part,
                                TurboCASUtil.BodyType.LOWER_BODY:
                                bottom_body_part,
                                TurboCASUtil.BodyType.SHOES: 22018
                            })
                    else:
                        top_body_part = underwear_parts[
                            0] if outfit_category != TurboCASUtil.OutfitCategory.SLEEP and outfit_category != TurboCASUtil.OutfitCategory.SWIMWEAR else get_default_nude_cas_part_id(
                                sim, 6)
                        bottom_body_part = underwear_parts[
                            1] if outfit_category != TurboCASUtil.OutfitCategory.SLEEP and outfit_category != TurboCASUtil.OutfitCategory.SWIMWEAR else get_default_nude_cas_part_id(
                                sim, 7)
                        TurboSimUtil.CAS.set_outfit_parts(
                            mannequin_sim_info,
                            (outfit_category, outfit_index), {
                                TurboCASUtil.BodyType.HAIR:
                                12348270534692886420,
                                TurboCASUtil.BodyType.HEAD:
                                12348270534692886420,
                                TurboCASUtil.BodyType.UPPER_BODY:
                                top_body_part,
                                TurboCASUtil.BodyType.LOWER_BODY:
                                bottom_body_part,
                                TurboCASUtil.BodyType.SHOES: 22018
                            })
                else:
                    if TurboSimUtil.Gender.is_male(sim):
                        top_body_part = get_default_nude_cas_part_id(
                            sim, TurboCASUtil.BodyType.UPPER_BODY)
                        bottom_body_part = underwear_parts[
                            1] if outfit_category != TurboCASUtil.OutfitCategory.SLEEP and outfit_category != TurboCASUtil.OutfitCategory.SWIMWEAR else get_default_nude_cas_part_id(
                                sim, TurboCASUtil.BodyType.LOWER_BODY)
                        TurboSimUtil.CAS.set_outfit_parts(
                            mannequin_sim_info,
                            (outfit_category, outfit_index), {
                                TurboCASUtil.BodyType.HAIR:
                                16045584265534180326,
                                TurboCASUtil.BodyType.HEAD:
                                16045584265534180326,
                                TurboCASUtil.BodyType.UPPER_BODY:
                                top_body_part,
                                TurboCASUtil.BodyType.LOWER_BODY:
                                bottom_body_part,
                                TurboCASUtil.BodyType.SHOES: 6563
                            })
                    else:
                        top_body_part = underwear_parts[
                            0] if outfit_category != TurboCASUtil.OutfitCategory.SLEEP and outfit_category != TurboCASUtil.OutfitCategory.SWIMWEAR else get_default_nude_cas_part_id(
                                sim, 6)
                        bottom_body_part = underwear_parts[
                            1] if outfit_category != TurboCASUtil.OutfitCategory.SLEEP and outfit_category != TurboCASUtil.OutfitCategory.SWIMWEAR else get_default_nude_cas_part_id(
                                sim, 7)
                        TurboSimUtil.CAS.set_outfit_parts(
                            mannequin_sim_info,
                            (outfit_category, outfit_index), {
                                TurboCASUtil.BodyType.HAIR:
                                16045584265534180326,
                                TurboCASUtil.BodyType.HEAD:
                                16045584265534180326,
                                TurboCASUtil.BodyType.UPPER_BODY:
                                top_body_part,
                                TurboCASUtil.BodyType.LOWER_BODY:
                                bottom_body_part,
                                TurboCASUtil.BodyType.SHOES: 6543
                            })
    TurboObjectUtil.Mannequin.populate_mannequin_protocol_buffer(
        mannequin_component)
    TurboSimUtil.CAS.set_current_outfit(
        mannequin_sim_info, TurboSimUtil.CAS.get_current_outfit(sim))
    display_notification(text=2196543455,
                         title=712099301,
                         information_level=TurboUIUtil.Notification.
                         UiDialogNotificationLevel.PLAYER)
    UNDERWEAR_MANNEQUIN_IN_USE = True
    UNDERWEAR_MANNEQUIN_SIM_ID = TurboManagerUtil.Sim.get_sim_id(sim)
    UNDERWEAR_MANNEQUIN_OBJECT_ID = mannequin_id
    dress_up_outfit(sim)
    TurboCommandUtil.invoke_command('sims.exit2caswithmannequinid {}'.format(
        mannequin_id, ''))
def create_sim_visit_situation(sim_identifier):
    sim = TurboManagerUtil.Sim.get_sim_instance(sim_identifier)
    if sim is None:
        display_notification(text='Failed to get sim instance on creating a visit situation!', title='WickedWhims Error', is_safe=True)
        return
    TurboSimUtil.Situation.create_visit_situation(sim)