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)
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
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()
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)
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())
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)
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
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
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])
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
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)
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)
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
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)
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)
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
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
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
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)
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)
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)