def update_naturism_buffs(sim_info, category_and_index): if TurboSimUtil.Age.is_younger_than(sim_info, TurboSimUtil.Age.CHILD): return has_naturist_buff = has_sim_buff( sim_info, SimBuff.WW_NATURISM_SKILL_LEVEL_2) or ( has_sim_buff(sim_info, SimBuff.WW_NATURISM_SKILL_LEVEL_3) or (has_sim_buff(sim_info, SimBuff.WW_NATURISM_SKILL_LEVEL_4) or has_sim_buff(sim_info, SimBuff.WW_NATURISM_SKILL_LEVEL_5))) sim_outfit_level = get_sim_outfit_level( sim_info, outfit_category_and_index=category_and_index) is_sim_allowed_for_buff = (sim_outfit_level == OutfitLevel.NUDE or sim_outfit_level == OutfitLevel.BATHING ) and is_sim_naturist(sim_info) if has_naturist_buff is False and is_sim_allowed_for_buff is True: nudity_skill_level = get_sim_nudity_skill_level(sim_info) naturism_buff = None if nudity_skill_level <= 1: naturism_buff = SimBuff.WW_NATURISM_SKILL_LEVEL_1 elif nudity_skill_level == 2: naturism_buff = SimBuff.WW_NATURISM_SKILL_LEVEL_2 elif nudity_skill_level == 3: naturism_buff = SimBuff.WW_NATURISM_SKILL_LEVEL_3 elif nudity_skill_level == 4: naturism_buff = SimBuff.WW_NATURISM_SKILL_LEVEL_4 elif nudity_skill_level >= 5: naturism_buff = SimBuff.WW_NATURISM_SKILL_LEVEL_5 if naturism_buff is not None: add_sim_buff(sim_info, naturism_buff) if has_naturist_buff is True and is_sim_allowed_for_buff is False: remove_sim_buff(sim_info, SimBuff.WW_NATURISM_SKILL_LEVEL_2) remove_sim_buff(sim_info, SimBuff.WW_NATURISM_SKILL_LEVEL_3) remove_sim_buff(sim_info, SimBuff.WW_NATURISM_SKILL_LEVEL_4) remove_sim_buff(sim_info, SimBuff.WW_NATURISM_SKILL_LEVEL_5)
def _update_sim_condom_status_buff(sim_identifier): sim_info = TurboManagerUtil.Sim.get_sim_info(sim_identifier) if sim_ev(sim_info).has_condom_on is True: if not has_sim_buff(sim_info, SimBuff.WW_PREGNANCY_IS_WEARING_CONDOM): add_sim_buff(sim_info, SimBuff.WW_PREGNANCY_IS_WEARING_CONDOM) elif has_sim_buff(sim_info, SimBuff.WW_PREGNANCY_IS_WEARING_CONDOM): remove_sim_buff(sim_info, SimBuff.WW_PREGNANCY_IS_WEARING_CONDOM)
def _reaction_to_pregnancy(sim, target): si_result = TurboSimUtil.Interaction.push_affordance(sim, SimInteraction.WW_TEEN_PREGNANCY_REACTION, target=target, interaction_context=TurboInteractionUtil.InteractionContext.SOURCE_SCRIPT, insert_strategy=TurboInteractionUtil.QueueInsertStrategy.NEXT, priority=TurboInteractionUtil.Priority.Critical, run_priority=TurboInteractionUtil.Priority.Critical) if si_result: add_relationsip_bit_with_sim(sim, target, SimRelationshipBit.WW_KNOWS_ABOUT_TEEN_PREGNANCY) add_sim_buff(sim, SimBuff.WW_ANGRY_AT_TEEN_PREGNANCY) return True return False
def update_sim_birth_control_status_buff(sim_identifier): sim_info = TurboManagerUtil.Sim.get_sim_info(sim_identifier) if sim_ev( sim_info ).day_used_birth_control_pills == TurboWorldUtil.Time.get_absolute_days(): if not has_sim_buff(sim_info, SimBuff.WW_PREGNANCY_IS_ON_BIRTH_CONTROL): add_sim_buff(sim_info, SimBuff.WW_PREGNANCY_IS_ON_BIRTH_CONTROL) elif has_sim_buff(sim_info, SimBuff.WW_PREGNANCY_IS_ON_BIRTH_CONTROL): remove_sim_buff(sim_info, SimBuff.WW_PREGNANCY_IS_ON_BIRTH_CONTROL)
def _nudity_reaction(sim, target, only_mixer=False, force=False): increase_sim_ww_statistic(sim, 'times_reacted_to_nudity') increase_sim_ww_statistic(target, 'times_been_seen_nude') if _is_positive_to_sim_nudity(sim, target): positive_reaction_affordance = random.choice( (SimInteraction.WW_NUDITY_REACTION_POSITIVE_1, SimInteraction.WW_NUDITY_REACTION_POSITIVE_2, SimInteraction.WW_NUDITY_REACTION_POSITIVE_3)) si_result = TurboSimUtil.Interaction.push_affordance( sim, positive_reaction_affordance, target=target, interaction_context=TurboInteractionUtil.InteractionContext. SOURCE_SCRIPT, insert_strategy=TurboInteractionUtil.QueueInsertStrategy.NEXT if force is False else TurboInteractionUtil.QueueInsertStrategy.FIRST, priority=TurboInteractionUtil.Priority.High if force is False else TurboInteractionUtil.Priority.Critical, run_priority=TurboInteractionUtil.Priority.High if force is False else TurboInteractionUtil.Priority.Critical ) if only_mixer is False else None else: si_result = TurboSimUtil.Interaction.push_affordance( sim, SimInteraction.WW_NUDITY_REACTION_SHOCK, target=target, interaction_context=TurboInteractionUtil.InteractionContext. SOURCE_SCRIPT, insert_strategy=TurboInteractionUtil.QueueInsertStrategy.NEXT if force is False else TurboInteractionUtil.QueueInsertStrategy.FIRST, priority=TurboInteractionUtil.Priority.High if force is False else TurboInteractionUtil.Priority.Critical, run_priority=TurboInteractionUtil.Priority.High if force is False else TurboInteractionUtil.Priority.Critical ) if only_mixer is False else None if not si_result and ( si_result is None or TurboInteractionUtil.can_interaction_fallback_to_mixer_interaction( sim, si_result.execute_result.interaction)): si_result = TurboSimUtil.Interaction.push_affordance( sim, SimInteraction.WW_NUDITY_REACTION_MIXER, target=target, interaction_context=TurboInteractionUtil.InteractionContext. SOURCE_REACTION, insert_strategy=TurboInteractionUtil.QueueInsertStrategy.NEXT) if si_result: if TurboSimUtil.Age.get_age(sim) == TurboSimUtil.Age.CHILD: add_sim_buff(sim, SimBuff.PRIVACY_EMBARRASSED) cooldown_offset = random.randint(-1, 2) sim_ev(sim).full_nudity_reaction_cooldown = 12 + cooldown_offset sim_ev(sim).inner_nudity_reaction_cooldown = 6 + cooldown_offset set_sim_penis_state(sim, True, 8, set_if_nude=True) return True return False
def _after_sex_buffs(sims_list): if len(sims_list) > 1: for (_, sim_info) in sims_list: add_sim_trait(sim_info, SimTrait.HIDDEN_HADWOOHOO) while not TurboSimUtil.Occult.is_ghost(sim_info): while True: for (_, target_sim_info) in sims_list: while sim_info is not target_sim_info and TurboSimUtil.Occult.is_ghost( target_sim_info): add_sim_buff(sim_info, SimBuff.WOOHOO_WITH_GHOST) break
def test_sex_satifaction_moodlets(output=None): sim = TurboManagerUtil.Sim.get_active_sim() for buff_id in SEX_SATISFACTION_BUFFS.values(): if set_buff_timeout(buff_id, 60): add_sim_buff(sim, buff_id, reason=4052013031) set_buff_timeout(buff_id, 600) for buff_id in SEX_UNSATISFACTION_BUFFS.values(): if set_buff_timeout(buff_id, 60): add_sim_buff(sim, buff_id, reason=4052013031) set_buff_timeout(buff_id, 600) output('Sex Satisfaction moodlets applied.')
def _update_sim_desire_effects(sim_identifier): sim_info = TurboManagerUtil.Sim.get_sim_info(sim_identifier) master_desire_level = get_sim_statistic_value( sim_info, SimCommodity.WW_SEX_MASTER_DESIRE) if master_desire_level >= 85: if not has_sim_buff(sim_info, SimBuff.WW_DESIRE_NEGATIVE): remove_sim_buff(sim_info, SimBuff.WW_DESIRE_POSITIVE) add_sim_buff(sim_info, SimBuff.WW_DESIRE_NEGATIVE, reason=2404119453) elif not (master_desire_level >= 50 and has_sim_buff(sim_info, SimBuff.WW_DESIRE_POSITIVE)): add_sim_buff(sim_info, SimBuff.WW_DESIRE_POSITIVE, reason=2404119453)
def _flash_sim_result(sim, target): sim_ev(sim).is_flashing = True increase_sim_nudity_skill(sim, get_nudity_skill_points_modifier( NuditySkillIncreaseReason.FLASHING_BODY), extra_fatigue=5.0) is_prefered_gender = TurboSimUtil.Gender.get_gender( sim) in get_sim_preferenced_genders(target) if is_prefered_gender is True: apply_nudity_skill_influence(target, 0.05, overall_limit=6.5) change_sim_desire_level(target, 10) change_sim_desire_level(sim, 4.5) if not has_sim_buff(sim, SimBuff.WW_NUDITY_HAS_FLASHED): add_sim_buff(sim, SimBuff.WW_NUDITY_HAS_FLASHED)
def _update_nudity_buffs(sim_info, category_and_index): if TurboSimUtil.Age.is_younger_than(sim_info, TurboSimUtil.Age.CHILD): return if not is_sim_naturist( sim_info) or get_sim_nudity_skill_level(sim_info) < 2: return has_nudity_buff = has_sim_buff(sim_info, SimBuff.WW_NUDITY_IS_NAKED_HIGH) sim_outfit_level = get_sim_outfit_level( sim_info, outfit_category_and_index=category_and_index) is_sim_nude = sim_outfit_level == OutfitLevel.NUDE or sim_outfit_level == OutfitLevel.BATHING if has_nudity_buff is False and is_sim_nude is True: add_sim_buff(sim_info, SimBuff.WW_NUDITY_IS_NAKED_HIGH) if has_nudity_buff is True and is_sim_nude is False: remove_sim_buff(sim_info, SimBuff.WW_NUDITY_IS_NAKED_HIGH)
def _apply_sim_sex_satisfaction_moodlet(sim_info, satisfaction_type, satisfaction_level): satisfaction_moodlet_timeout = 60 * max(1, satisfaction_level) satisfaction_moodlet = None if satisfaction_level <= 0: if satisfaction_type in SEX_UNSATISFACTION_BUFFS: satisfaction_moodlet = SEX_UNSATISFACTION_BUFFS[satisfaction_type] elif satisfaction_type in SEX_SATISFACTION_BUFFS: satisfaction_moodlet = SEX_SATISFACTION_BUFFS[satisfaction_type] if satisfaction_moodlet is None: return clear_all_satifaction_data(sim_info) if set_buff_timeout(satisfaction_moodlet, satisfaction_moodlet_timeout): add_sim_buff(sim_info, satisfaction_moodlet, reason=4052013031) set_buff_timeout(satisfaction_moodlet, 600)
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 _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 update_cum_buffs(sim_info, outfit_category_and_index=None): if TurboSimUtil.Age.is_younger_than(sim_info, TurboSimUtil.Age.CHILD): return has_positive_buff = has_sim_buff(sim_info, SimBuff.WW_CUM_ON_BODY_POSITIVE) has_negative_buff = has_sim_buff(sim_info, SimBuff.WW_CUM_ON_BODY_NEGATIVE) if has_sim_cas_part_id(sim_info, (CUM_FACE_LAYER, CUM_CHEST_LAYER, CUM_BACK_LAYER, CUM_VAGINA_LAYER, CUM_BUTT_LAYER, CUM_FEET_LAYER), outfit_category_and_index=outfit_category_and_index): if has_positive_buff is False and has_negative_buff is False: if has_sim_trait(sim_info, SimTrait.WW_CUMSLUT) or has_sim_trait(sim_info, SimTrait.ROMANTIC): add_sim_buff(sim_info, SimBuff.WW_CUM_ON_BODY_POSITIVE) elif has_sim_trait(sim_info, SimTrait.HATESCHILDREN): return else: add_sim_buff(sim_info, SimBuff.WW_CUM_ON_BODY_NEGATIVE) return if has_positive_buff is True: remove_sim_buff(sim_info, SimBuff.WW_CUM_ON_BODY_POSITIVE) if has_negative_buff is True: remove_sim_buff(sim_info, SimBuff.WW_CUM_ON_BODY_NEGATIVE)
def apply_period_related_buffs(sim_identifier): sim_info = TurboManagerUtil.Sim.get_sim_info(sim_identifier) sim_id = TurboManagerUtil.Sim.get_sim_id(sim_info) menstrual_cycle_days = get_sim_menstrual_cycle_days(sim_info) absolute_days = TurboWorldUtil.Time.get_absolute_days( ) + ABSOLUTE_DAYS_OFFSET cycle_day = absolute_days % menstrual_cycle_days + 1 cycle_number = max(1, int(absolute_days / menstrual_cycle_days)) random_inst = random.Random(sim_id / cycle_number) (_, _, cramps_duration, period_duration) = get_cycle_durations() is_on_birth_control = sim_ev( sim_info ).day_used_birth_control_pills == TurboWorldUtil.Time.get_absolute_days() if is_on_birth_control is True: period_duration = 0 else: period_duration = random_inst.randint(*period_duration) if period_duration > 0 and cycle_day <= period_duration: if has_sim_trait(sim_info, SimTrait.OCCULTVAMPIRE): period_buff = SimBuff.WW_PREGNANCY_PERIOD_VAMPIRE_UNCOMFORTABLE else: period_buff = random_inst.choice( (SimBuff.WW_PREGNANCY_PERIOD_FINE, SimBuff.WW_PREGNANCY_PERIOD_FLIRTY, SimBuff.WW_PREGNANCY_PERIOD_DAZED, SimBuff.WW_PREGNANCY_PERIOD_SAD, SimBuff.WW_PREGNANCY_PERIOD_TENSE, SimBuff.WW_PREGNANCY_PERIOD_UNCOMFORTABLE)) add_sim_buff(sim_info, period_buff) is_using_weed = is_basemental_drugs_installed() and ( has_sim_buff(sim_info, SimBuff.BASEMENTAL_WEED_HIGH_ON_AK47) or (has_sim_buff(sim_info, SimBuff.BASEMENTAL_WEED_HIGH_ON_OG_KUSH) or has_sim_buff(sim_info, SimBuff.BASEMENTAL_WEED_HIGH_ON_PURPLE_HAZE))) if is_on_birth_control is True or is_using_weed is True: cramps_duration = 0 else: cramps_duration = random_inst.randint( *cramps_duration) if random_inst.uniform(0, 1) <= 0.5 else 0 if cramps_duration > 0 and cycle_day > menstrual_cycle_days - cramps_duration: add_sim_buff(sim_info, random_inst.choice((SimBuff.WW_PREGNANCY_CRAMPS_LOW, SimBuff.WW_PREGNANCY_CRAMPS_MEDIUM, SimBuff.WW_PREGNANCY_CRAMPS_HIGH)), reason=2061236478)
def _wickedwhims_undress_swimwear_on_jumping_to_water(interaction_instance): if not get_nudity_setting(NuditySetting.NUDITY_SWITCH_STATE, variable_type=bool): return interaction_guid = TurboResourceUtil.Resource.get_guid64( interaction_instance) if interaction_guid not in JUMPING_INTERACTIONS: return sim_info = TurboManagerUtil.Sim.get_sim_info( TurboInteractionUtil.get_interaction_sim(interaction_instance)) if TurboSimUtil.Age.is_younger_than(sim_info, TurboSimUtil.Age.CHILD): return if get_modified_outfit( sim_info)[0] != TurboCASUtil.OutfitCategory.SWIMWEAR: return if is_sim_outfit_fullbody(sim_info): return if random.uniform(0, 1) > 0.1: return has_stripped = False if TurboSimUtil.Gender.is_male(sim_info): if get_sim_body_state(sim_info, 7) != BodyState.OUTFIT: return strip_result = strip_outfit(sim_info, strip_type_bottom=StripType.NUDE) if strip_result is True: set_sim_bottom_naked_state(sim_info, True) has_stripped = True else: can_undress_top = get_sim_body_state(sim_info, 6) == BodyState.OUTFIT can_undress_bottom = get_sim_body_state(sim_info, 7) == BodyState.OUTFIT undress_top = False undress_bottom = False if can_undress_top is True and can_undress_bottom is True: if bool(random.getrandbits(1)): undress_top = True else: undress_bottom = True elif can_undress_top is True: undress_top = True elif can_undress_bottom is True: undress_bottom = True if undress_top is False and undress_bottom is False: return if undress_top is True: strip_result = strip_outfit(sim_info, strip_type_top=StripType.NUDE) if strip_result is True: set_sim_top_naked_state(sim_info, True) has_stripped = True elif undress_bottom is True: strip_result = strip_outfit(sim_info, strip_type_bottom=StripType.NUDE) if strip_result is True: set_sim_bottom_naked_state(sim_info, True) has_stripped = True if has_stripped is True: display_notification(text=267480274, text_tokens=(sim_info, ), secondary_icon=sim_info) if not has_sim_permission_for_nudity(sim_info)[0]: add_sim_buff(sim_info, SimBuff.OBJECT_JUMPSTAND_SWIMSUITMALFUNCTION) if random.uniform(0, 1) <= 0.45: add_sim_buff(sim_info, SimBuff.WW_NUDITY_TEMPORARY_BRAVE)
def _jealousy_from_sex_reaction(sim, sex_handler): if not get_relationship_setting(RelationshipSetting.JEALOUSY_STATE, variable_type=bool): return False if sex_handler.get_actors_amount() <= 1: return False if TurboSimUtil.Age.is_younger_than(sim, TurboSimUtil.Age.CHILD): return False if has_sim_trait(sim, SimTrait.WW_POLYAMOROUS) or has_sim_trait( sim, SimTrait.WW_CUCKOLD): return False (found_lovers, found_non_lovers) = _get_jealousy_sims_from_sex_handler(sim, sex_handler) if found_lovers and found_non_lovers: for target in found_non_lovers: relationship_amount_modifier = -3 if not has_sim_trait( sim, SimTrait.JEALOUS) else -6 change_relationship_with_sim(sim, target, RelationshipTrackType.FRIENDSHIP, relationship_amount_modifier) if get_relationship_with_sim(sim, target, RelationshipTrackType.ROMANCE) > 0: change_relationship_with_sim(sim, target, RelationshipTrackType.ROMANCE, relationship_amount_modifier) for target in found_lovers: jealousy_success = False for jealousy_interaction in JEALOUSY_WOOHOO_REACTION_LIST: result = TurboSimUtil.Interaction.push_affordance( sim, jealousy_interaction, target=target, interaction_context=TurboInteractionUtil. InteractionContext.SOURCE_SCRIPT, insert_strategy=TurboInteractionUtil.QueueInsertStrategy. NEXT, must_run_next=True, priority=TurboInteractionUtil.Priority.High, run_priority=TurboInteractionUtil.Priority.High) if result: jealousy_success = True break if has_sim_buff(sim, SimBuff.JEALOUSY_CHEATER): current_romance_rel_amount = get_relationship_with_sim( sim, target, RelationshipTrackType.ROMANCE) if current_romance_rel_amount >= 30 and has_relationship_bit_with_sim( sim, target, SimRelationshipBit.ROMANTIC_ENGAGED) or ( has_relationship_bit_with_sim( sim, target, SimRelationshipBit.ROMANTIC_MARRIED) or has_relationship_bit_with_sim( sim, target, SimRelationshipBit.ROMANTIC_GETTINGMARRIED) ) or has_relationship_bit_with_sim( sim, target, SimRelationshipBit.ROMANTIC_SIGNIFICANT_OTHER): add_sim_buff(sim, SimBuff.JEALOUSY_HIDDEN_WITNESSEDCHEATING) if jealousy_success is True: sim_ev(sim).sex_reaction_cooldown = 5 return True return False
def _general_sex_reaction(sim, sex_handler): skip_reaction = False if sex_handler.get_actors_amount( ) == 1 and sex_handler.get_animation_instance().get_sex_category( ) == SexCategoryType.TEASING: target = next(iter(sex_handler.get_actors_sim_instance_gen())) if target is not None: skip_reaction = True if TurboSimUtil.Gender.is_female( target) and get_sim_actual_body_state( target, 6) == BodyState.NUDE or get_sim_actual_body_state( target, 7) == BodyState.NUDE: skip_reaction = False if skip_reaction is True: return False sex_creator_sim = TurboManagerUtil.Sim.get_sim_instance( sex_handler.get_creator_sim_id()) if sex_creator_sim is None: return False (sex_reaction_data, sex_reaction_should_left, sex_reaction_target_override) = get_reaction_type(sim, sex_handler) if not get_sex_setting(SexSetting.PRIVACY_STATE, variable_type=bool): sex_reaction_should_left = False sim_id = TurboManagerUtil.Sim.get_sim_id(sim) if sex_reaction_should_left is True: if sim_id in sex_handler.go_away_sims_list: go_away_reaction_result = TurboSimUtil.Interaction.push_affordance( sim, SimInteraction.WW_GO_AWAY_FROM_SEX, target=sex_creator_sim, interaction_context=TurboInteractionUtil.InteractionContext. SOURCE_SCRIPT, insert_strategy=TurboInteractionUtil.QueueInsertStrategy.NEXT, must_run_next=True, priority=TurboInteractionUtil.Priority.High, run_priority=TurboInteractionUtil.Priority.High) return bool(go_away_reaction_result) sex_handler.go_away_sims_list.add(sim_id) else: sim_ev(sim).sex_reaction_handlers_list.append( sex_handler.get_identifier()) if sim_id in sex_handler.has_reacted_sims_list: reaction_result = TurboSimUtil.Interaction.push_affordance( sim, sex_reaction_data[1], target=sex_reaction_target_override if sex_reaction_target_override is not None else sex_creator_sim, insert_strategy=TurboInteractionUtil.QueueInsertStrategy.NEXT, priority=TurboInteractionUtil.Priority.High, run_priority=TurboInteractionUtil.Priority.High, skip_if_running=True) else: reaction_result = TurboSimUtil.Interaction.push_affordance( sim, sex_reaction_data[1], target=sex_reaction_target_override if sex_reaction_target_override is not None else sex_creator_sim, insert_strategy=TurboInteractionUtil.QueueInsertStrategy.FIRST, must_run_next=True, priority=TurboInteractionUtil.Priority.Critical, run_priority=TurboInteractionUtil.Priority.Critical, skip_if_running=True) if reaction_result: increase_sim_ww_statistic(sim, 'times_reacted_to_sex') increase_sim_ww_statistic(sex_creator_sim, 'times_been_seen_in_sex') if sex_reaction_data[2] is not None: add_sim_buff(sim, sex_reaction_data[2]) if sex_reaction_should_left is True: sim_ev(sim).sex_reaction_attempt_cooldown = 0 sex_handler.has_reacted_sims_list.add(sim_id) return True return False
def apply_asking_for_woohoo_relations(sim_identifier, target_sim_identifier, status, display_message=True): sim_info = TurboManagerUtil.Sim.get_sim_info(sim_identifier) target_sim_info = TurboManagerUtil.Sim.get_sim_info(target_sim_identifier) if sim_info is None or target_sim_info is None: return set_sim_motive_value(sim_info, SimMotive.SOCIAL, get_sim_motive_value(sim_info, SimMotive.SOCIAL) + 8, skip_disabled=True) set_sim_motive_value( target_sim_info, SimMotive.SOCIAL, get_sim_motive_value(target_sim_info, SimMotive.SOCIAL) + 8, skip_disabled=True) if has_sim_trait(sim_info, SimTrait.EVIL) and has_sim_trait( sim_info, SimTrait.GOOD) or has_sim_trait( sim_info, SimTrait.GOOD) and has_sim_trait( sim_info, SimTrait.EVIL): if random.uniform(0, 1) <= 0.05: add_sim_buff(sim_info, SimBuff.GOODVSEVIL_ANGRY) if random.uniform(0, 1) <= 0.05: add_sim_buff(target_sim_info, SimBuff.GOODVSEVIL_ANGRY) if random.uniform(0, 1) <= 0.05: add_sim_buff(sim_info, SimBuff.GOODVSEVIL_SAD) if random.uniform(0, 1) <= 0.05: add_sim_buff(target_sim_info, SimBuff.GOODVSEVIL_SAD) change_sim_statistic_value(sim_info, 50, SimCommodity.TRAIT_ROMANTIC_AFFECTION) if status is True: TurboSimUtil.Gender.set_gender_preference( sim_info, TurboSimUtil.Gender.get_gender(target_sim_info), TurboSimUtil.Gender.get_gender_preference( sim_info, TurboSimUtil.Gender.get_gender(target_sim_info)) + 10) change_sim_statistic_value(sim_info, 10, SimCommodity.BUFF_SOCIAL_FLIRTYCONVERSATION) change_sim_statistic_value(target_sim_info, 10, SimCommodity.BUFF_SOCIAL_FLIRTYCONVERSATION) change_sim_statistic_value(sim_info, -10, SimCommodity.BUFF_SOCIAL_ANGRYCONVERSATION) change_sim_statistic_value(target_sim_info, -10, SimCommodity.BUFF_SOCIAL_ANGRYCONVERSATION) change_sim_statistic_value( sim_info, -10, SimCommodity.BUFF_SOCIAL_EMBARRASSINGCONVERSATION) change_sim_statistic_value( target_sim_info, -10, SimCommodity.BUFF_SOCIAL_EMBARRASSINGCONVERSATION) change_sim_statistic_value(sim_info, -10, SimCommodity.BUFF_SOCIAL_BORINGCONVERSATION) change_sim_statistic_value(target_sim_info, -10, SimCommodity.BUFF_SOCIAL_BORINGCONVERSATION) change_sim_statistic_value(sim_info, -10, SimCommodity.BUFF_SOCIAL_HAPPYCONVERSATION) change_sim_statistic_value(target_sim_info, -10, SimCommodity.BUFF_SOCIAL_HAPPYCONVERSATION) change_sim_statistic_value( sim_info, -10, SimCommodity.BUFF_SOCIAL_PLAYFULCONVERSATION) change_sim_statistic_value( target_sim_info, -10, SimCommodity.BUFF_SOCIAL_PLAYFULCONVERSATION) change_relationship_with_sim(sim_info, target_sim_info, ShortTermRelationshipTrackType.ROMANCE, 5) change_relationship_with_sim(target_sim_info, sim_info, ShortTermRelationshipTrackType.ROMANCE, 5) current_fun_short_rel_amount = get_relationship_with_sim( sim_info, target_sim_info, ShortTermRelationshipTrackType.FUN) short_fun_rel_gain_amount = 0 if -100 <= current_fun_short_rel_amount <= -50: short_fun_rel_gain_amount += 20 elif -50 <= current_fun_short_rel_amount <= -15: short_fun_rel_gain_amount += 10 elif 15 <= current_fun_short_rel_amount <= 50: short_fun_rel_gain_amount += -10 elif 50 <= current_fun_short_rel_amount <= 100: short_fun_rel_gain_amount += -20 change_relationship_with_sim(sim_info, target_sim_info, ShortTermRelationshipTrackType.FUN, short_fun_rel_gain_amount) change_relationship_with_sim(target_sim_info, sim_info, ShortTermRelationshipTrackType.FUN, short_fun_rel_gain_amount) current_friendship_short_rel_amount = get_relationship_with_sim( sim_info, target_sim_info, ShortTermRelationshipTrackType.FRIENDSHIP) short_friendship_rel_gain_amount = 0 if -100 <= current_friendship_short_rel_amount <= -50: short_friendship_rel_gain_amount += 20 elif -50 <= current_friendship_short_rel_amount <= -15: short_friendship_rel_gain_amount += 10 elif 15 <= current_friendship_short_rel_amount <= 50: short_friendship_rel_gain_amount += 5 change_relationship_with_sim(sim_info, target_sim_info, ShortTermRelationshipTrackType.FRIENDSHIP, short_friendship_rel_gain_amount) change_relationship_with_sim(target_sim_info, sim_info, ShortTermRelationshipTrackType.FRIENDSHIP, short_friendship_rel_gain_amount) current_awkwardness_short_rel_amount = get_relationship_with_sim( sim_info, target_sim_info, ShortTermRelationshipTrackType.AWKWARDNESS) short_awkwardness_rel_gain_amount = 0 if -100 <= current_awkwardness_short_rel_amount <= -50: short_awkwardness_rel_gain_amount += 20 elif -50 <= current_awkwardness_short_rel_amount <= -15: short_awkwardness_rel_gain_amount += 10 change_relationship_with_sim( sim_info, target_sim_info, ShortTermRelationshipTrackType.AWKWARDNESS, short_friendship_rel_gain_amount) change_relationship_with_sim( target_sim_info, sim_info, ShortTermRelationshipTrackType.AWKWARDNESS, short_friendship_rel_gain_amount) increase_sim_ww_statistic(sim_info, 'times_sex_got_accepted') else: change_relationship_with_sim( sim_info, target_sim_info, ShortTermRelationshipTrackType.AWKWARDNESS, -10) change_relationship_with_sim( target_sim_info, sim_info, ShortTermRelationshipTrackType.AWKWARDNESS, -10) current_romance_short_rel_amount = get_relationship_with_sim( sim_info, target_sim_info, ShortTermRelationshipTrackType.ROMANCE) short_romance_rel_gain_amount = 0 if -100 <= current_romance_short_rel_amount <= -50: short_romance_rel_gain_amount += 20 elif -50 <= current_romance_short_rel_amount <= -15: short_romance_rel_gain_amount += 10 elif 15 <= current_romance_short_rel_amount <= 50: short_romance_rel_gain_amount += -10 elif 50 <= current_romance_short_rel_amount <= 100: short_romance_rel_gain_amount += -20 change_relationship_with_sim(sim_info, target_sim_info, ShortTermRelationshipTrackType.ROMANCE, short_romance_rel_gain_amount) change_relationship_with_sim(target_sim_info, sim_info, ShortTermRelationshipTrackType.ROMANCE, short_romance_rel_gain_amount) current_friendship_short_rel_amount = get_relationship_with_sim( sim_info, target_sim_info, ShortTermRelationshipTrackType.FRIENDSHIP) short_friendship_rel_gain_amount = 0 if -100 <= current_friendship_short_rel_amount <= -50: short_friendship_rel_gain_amount += 20 elif -50 <= current_friendship_short_rel_amount <= -15: short_friendship_rel_gain_amount += 10 elif 15 <= current_friendship_short_rel_amount <= 50: short_friendship_rel_gain_amount += -10 elif 50 <= current_friendship_short_rel_amount <= 100: short_friendship_rel_gain_amount += -20 change_relationship_with_sim(sim_info, target_sim_info, ShortTermRelationshipTrackType.FRIENDSHIP, short_friendship_rel_gain_amount) change_relationship_with_sim(target_sim_info, sim_info, ShortTermRelationshipTrackType.FRIENDSHIP, short_friendship_rel_gain_amount) current_fun_short_rel_amount = get_relationship_with_sim( sim_info, target_sim_info, ShortTermRelationshipTrackType.FUN) short_fun_rel_gain_amount = 0 if -50 <= current_fun_short_rel_amount <= -15: short_fun_rel_gain_amount += 10 if 15 <= current_fun_short_rel_amount <= 50: short_fun_rel_gain_amount += -10 elif 50 <= current_fun_short_rel_amount <= 100: short_fun_rel_gain_amount += -20 change_relationship_with_sim(sim_info, target_sim_info, ShortTermRelationshipTrackType.FUN, short_fun_rel_gain_amount) change_relationship_with_sim(target_sim_info, sim_info, ShortTermRelationshipTrackType.FUN, short_fun_rel_gain_amount) current_friendship_rel_amount = get_relationship_with_sim( sim_info, target_sim_info, RelationshipTrackType.FRIENDSHIP) friendship_rel_gain_amount = 0 if -100 <= current_friendship_rel_amount <= -40: friendship_rel_gain_amount += -2 elif -40 <= current_friendship_rel_amount <= 0: friendship_rel_gain_amount += -2 elif 0 <= current_friendship_rel_amount <= 20: friendship_rel_gain_amount += -2 elif 20 <= current_friendship_rel_amount <= 40: friendship_rel_gain_amount += -2 elif 40 <= current_friendship_rel_amount <= 80: friendship_rel_gain_amount += -3 elif 80 <= current_friendship_rel_amount <= 100: friendship_rel_gain_amount += -4 if has_sim_trait(sim_info, SimTrait.LONER) and sim_ev( sim_info).active_sex_handler is None and random.uniform( 0, 1) <= 0.2: add_sim_buff(sim_info, SimBuff.EMBARRASSED_LONER) current_romance_rel_amount = get_relationship_with_sim( sim_info, target_sim_info, RelationshipTrackType.ROMANCE) romance_rel_gain_amount = 0 if -100 <= current_romance_rel_amount <= -40: romance_rel_gain_amount += -2 elif -40 <= current_romance_rel_amount <= 0: romance_rel_gain_amount += -2 elif 0 <= current_romance_rel_amount <= 20: romance_rel_gain_amount += -2 elif 20 <= current_romance_rel_amount <= 40: romance_rel_gain_amount += -2 elif 40 <= current_romance_rel_amount <= 80: romance_rel_gain_amount += -2 elif 80 <= current_romance_rel_amount <= 100: romance_rel_gain_amount += -2 change_sim_statistic_value(sim_info, -20, SimCommodity.BUFF_SOCIAL_FLIRTYCONVERSATION) change_sim_statistic_value(target_sim_info, -20, SimCommodity.BUFF_SOCIAL_FLIRTYCONVERSATION) change_sim_statistic_value(sim_info, -20, SimCommodity.BUFF_SOCIAL_ANGRYCONVERSATION) change_sim_statistic_value(target_sim_info, -20, SimCommodity.BUFF_SOCIAL_ANGRYCONVERSATION) if has_sim_trait(sim_info, SimTrait.LONER): embarrassing_conversation_commodity_amount = 40 else: embarrassing_conversation_commodity_amount = 20 if sim_ev(sim_info).active_sex_handler is None: change_sim_statistic_value( sim_info, embarrassing_conversation_commodity_amount, SimCommodity.BUFF_SOCIAL_EMBARRASSINGCONVERSATION) change_sim_statistic_value(sim_info, -20, SimCommodity.BUFF_SOCIAL_BORINGCONVERSATION) change_sim_statistic_value(target_sim_info, -20, SimCommodity.BUFF_SOCIAL_BORINGCONVERSATION) change_sim_statistic_value(sim_info, -20, SimCommodity.BUFF_SOCIAL_HAPPYCONVERSATION) change_sim_statistic_value(target_sim_info, -20, SimCommodity.BUFF_SOCIAL_HAPPYCONVERSATION) change_sim_statistic_value( sim_info, -20, SimCommodity.BUFF_SOCIAL_PLAYFULCONVERSATION) change_sim_statistic_value( target_sim_info, -20, SimCommodity.BUFF_SOCIAL_PLAYFULCONVERSATION) add_relationsip_bit_with_sim( sim_info, target_sim_info, SimRelationshipBit.SHORTTERM_RECENTNEGATIVESOCIAL) if display_message is True and ( TurboSimUtil.Sim.is_player(sim_info) or TurboSimUtil.Sim.is_player(target_sim_info)): display_notification(text=215847180, text_tokens=(target_sim_info, sim_info), title=0, secondary_icon=target_sim_info) increase_sim_ww_statistic(sim_info, 'times_sex_got_rejected')