Exemple #1
0
def reset_mod_on_update():
    if HAS_UPDATED_THE_MOD is False:
        return
    display_notification(text=4037785225,
                         text_tokens=(get_mod_version_str(), ),
                         title='WickedWhims',
                         information_level=TurboUIUtil.Notification.
                         UiDialogNotificationLevel.PLAYER,
                         is_safe=True)
    reset_active_sex_handlers()
    from wickedwhims.sex.sex_operators.general_sex_handlers_operator import clear_sim_sex_extra_data
    for sim_info in TurboManagerUtil.Sim.get_all_sim_info_gen(humans=True,
                                                              pets=False):
        pre_sex_handler = sim_ev(sim_info).active_pre_sex_handler
        active_sex_handler = sim_ev(sim_info).active_sex_handler
        clear_sim_sex_extra_data(sim_info)
        try:
            while active_sex_handler is not None:
                active_sex_handler.stop(hard_stop=True,
                                        is_end=True,
                                        stop_reason='On stop sex command.')
        except:
            pass
        while pre_sex_handler is not None or active_sex_handler is not None:
            if not TurboSimUtil.CAS.has_outfit(
                    sim_info, (TurboCASUtil.OutfitCategory.EVERYDAY, 0)):
                TurboSimUtil.CAS.generate_outfit(
                    sim_info, (TurboCASUtil.OutfitCategory.EVERYDAY, 0))
                TurboSimUtil.CAS.set_current_outfit(
                    sim_info, (TurboCASUtil.OutfitCategory.EVERYDAY, 0))
                TurboSimUtil.CAS.update_previous_outfit(sim_info)
            TurboSimUtil.Sim.reset_sim(sim_info)
def join_sex_interaction_from_pre_sex_handler(pre_sex_handler,
                                              join_sims_list,
                                              ask_player_to_join=False,
                                              ignore_relationship_check=False,
                                              flip_relationship_check=False):
    creator_sim_info = TurboManagerUtil.Sim.get_sim_info(
        pre_sex_handler.get_creator_sim_id())
    can_sims_join = True
    for join_sim in join_sims_list:
        is_sex_allowed = is_sim_allowed_for_animation(
            tuple(pre_sex_handler.get_actors_sim_info_gen()),
            pre_sex_handler.get_interaction_type(),
            is_joining=True)
        if not is_sex_allowed:
            display_not_allowed_message(is_sex_allowed)
            can_sims_join = False
            break
        while ignore_relationship_check is False:
            relationship_score = get_test_relationship_score(
                (creator_sim_info, join_sim))
            if relationship_score < get_relationship_sex_acceptance_threshold(
            ):
                if flip_relationship_check is True:
                    apply_asking_for_woohoo_relations(join_sim,
                                                      creator_sim_info, False)
                else:
                    apply_asking_for_woohoo_relations(creator_sim_info,
                                                      join_sim, False)
                can_sims_join = False
                break
    if can_sims_join is False:
        for join_sim in join_sims_list:
            clear_sim_sex_extra_data(join_sim, only_pre_active_data=True)
        return
    if ask_player_to_join is True:

        def ask_for_sex_callback(dialog):
            if TurboUIUtil.DramaDialog.get_response_result(dialog):
                _join_sex_interaction_from_pre_handler(pre_sex_handler,
                                                       join_sims_list)
            else:
                active_sex_handler = sim_ev(
                    pre_sex_handler.get_creator_sim_id()).active_sex_handler
                for sim in join_sims_list:
                    clear_sim_sex_extra_data(sim)
                    sim_id = TurboManagerUtil.Sim.get_sim_id(sim)
                    while sim_id not in active_sex_handler.ignore_autonomy_join_sims:
                        active_sex_handler.ignore_autonomy_join_sims.append(
                            sim_id)
            return True

        display_drama_dialog(creator_sim_info,
                             join_sims_list[0],
                             text=3899042444,
                             text_tokens=(join_sims_list[0], creator_sim_info),
                             ok_text=3398494028,
                             cancel_text=3364226930,
                             callback=ask_for_sex_callback)
        return
    _join_sex_interaction_from_pre_handler(pre_sex_handler, join_sims_list)
Exemple #3
0
 def on_interaction_cancel(cls, interaction_instance, interaction_finishing_type):
     if interaction_finishing_type == TurboInteractionUtil.FinishingType.USER_CANCEL or interaction_instance.has_attempted_asking_for_sex_autonomy is False:
         pre_sex_handler = sim_ev(cls.get_interaction_sim(interaction_instance)).active_pre_sex_handler
         if pre_sex_handler is not None:
             while True:
                 for sim_info in pre_sex_handler.get_actors_sim_info_gen():
                     clear_sim_sex_extra_data(sim_info)
 def on_interaction_start(cls, interaction_instance):
     sim = cls.get_interaction_sim(interaction_instance)
     target = cls.get_interaction_target(interaction_instance)
     pre_sex_handler = sim_ev(sim).active_pre_sex_handler
     if pre_sex_handler is None or target is None:
         clear_sim_sex_extra_data(sim)
         if target is not None:
             clear_sim_sex_extra_data(target)
         return False
     apply_asking_for_woohoo_relations(sim, target, True)
     for actor_sim in pre_sex_handler.get_actors_sim_instance_gen():
         sim_ev(actor_sim).is_in_process_to_sex = True
         sim_ev(actor_sim).active_pre_sex_handler = pre_sex_handler
         prepare_npc_sim_to_sex(actor_sim)
         TurboSimUtil.Routing.refresh_portals(actor_sim)
         TurboSimUtil.Interaction.unlock_queue(actor_sim)
         result = TurboSimUtil.Interaction.push_affordance(
             actor_sim,
             SimInteraction.WW_ROUTE_TO_SEX_LOCATION,
             insert_strategy=TurboInteractionUtil.QueueInsertStrategy.FIRST,
             priority=TurboInteractionUtil.Priority.Critical,
             run_priority=TurboInteractionUtil.Priority.Critical)
         while result:
             sim_ev(
                 actor_sim
             ).in_sex_process_interaction = TurboInteractionUtil.get_interaction_from_enqueue_result(
                 result)
     return True
 def on_interaction_start(cls, interaction_instance):
     sim = cls.get_interaction_sim(interaction_instance)
     pre_sex_handler = sim_ev(sim).active_pre_sex_handler
     sim_ev(sim).is_ready_to_sex = True
     if pre_sex_handler is None:
         clear_sim_sex_extra_data(sim, only_pre_active_data=True)
         unprepare_npc_sim_from_sex(sim)
         return False
     if not _attempt_sex_init(pre_sex_handler):
         result = TurboSimUtil.Interaction.push_affordance(
             sim,
             SimInteraction.WW_WAIT_FOR_SEX_PARTNER,
             insert_strategy=TurboInteractionUtil.QueueInsertStrategy.FIRST,
             run_priority=TurboInteractionUtil.Priority.Critical,
             priority=TurboInteractionUtil.Priority.Critical,
             skip_if_running=True)
         if result:
             sim_ev(
                 sim
             ).in_sex_process_interaction = TurboInteractionUtil.get_interaction_from_enqueue_result(
                 result)
         cls.cancel_interaction(
             interaction_instance,
             finishing_type=TurboInteractionUtil.FinishingType.NATURAL)
     else:
         interaction_instance.has_proceeded = True
def _start_solo_sex_interaction(pre_sex_handler):
    creator_sim = TurboManagerUtil.Sim.get_sim_instance(
        pre_sex_handler.get_creator_sim_id())
    if creator_sim is None:
        clear_sim_sex_extra_data(
            TurboManagerUtil.Sim.get_sim_info(
                pre_sex_handler.get_creator_sim_id()))
        return False
    sim_ev(creator_sim).is_in_process_to_sex = True
    for interaction_id in TurboSimUtil.Interaction.get_queued_interactions_ids(
            creator_sim):
        TurboSimUtil.Interaction.cancel_queued_interaction(
            creator_sim, interaction_id)
    TurboSimUtil.Interaction.unlock_queue(creator_sim)
    TurboSimUtil.Routing.refresh_portals(creator_sim)
    result = TurboSimUtil.Interaction.push_affordance(
        creator_sim,
        SimInteraction.WW_ROUTE_TO_SEX_LOCATION,
        insert_strategy=TurboInteractionUtil.QueueInsertStrategy.FIRST,
        run_priority=TurboInteractionUtil.Priority.Critical,
        priority=TurboInteractionUtil.Priority.Critical)
    if result:
        sim_ev(
            creator_sim
        ).in_sex_process_interaction = TurboInteractionUtil.get_interaction_from_enqueue_result(
            result)
    return bool(result)
 def ask_for_sex_callback(dialog):
     if TurboUIUtil.DramaDialog.get_response_result(dialog):
         _start_group_sex_interaction(pre_sex_handler,
                                      ask_player_to_start=False)
     else:
         for pre_sim_info in pre_sex_handler.get_actors_sim_info_gen():
             clear_sim_sex_extra_data(pre_sim_info)
     return True
 def on_interaction_start(cls, interaction_instance):
     sim = cls.get_interaction_sim(interaction_instance)
     target = cls.get_interaction_target(interaction_instance)
     clear_sim_sex_extra_data(sim)
     if target is not None:
         clear_sim_sex_extra_data(target)
     apply_asking_for_woohoo_relations(sim, target, False)
     return True
Exemple #9
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)
Exemple #10
0
def _wickedwhims_neutralize_sims_active_sex_data_on_zone_move():
    if not has_game_loaded():
        return
    for sex_handler in ACTIVE_SEX_HANDLERS_LIST:
        for sim_info in sex_handler.get_actors_sim_info_gen():
            if sim_info is None:
                pass
            clear_sim_sex_extra_data(sim_info)
            dress_up_outfit(sim_info)
    reset_active_sex_handlers()
 def ask_for_sex_callback(dialog):
     if TurboUIUtil.DramaDialog.get_response_result(dialog):
         _join_sex_interaction_from_pre_handler(pre_sex_handler,
                                                join_sims_list)
     else:
         active_sex_handler = sim_ev(
             pre_sex_handler.get_creator_sim_id()).active_sex_handler
         for sim in join_sims_list:
             clear_sim_sex_extra_data(sim)
             sim_id = TurboManagerUtil.Sim.get_sim_id(sim)
             while sim_id not in active_sex_handler.ignore_autonomy_join_sims:
                 active_sex_handler.ignore_autonomy_join_sims.append(
                     sim_id)
     return True
def start_sex_interaction_from_pre_sex_handler(pre_sex_handler):
    is_instant = get_sex_setting(
        SexSetting.ALWAYS_ACCEPT_STATE,
        variable_type=bool) and get_sex_setting(
            SexSetting.SEX_INITIATION_TYPE,
            variable_type=int) == SexInitiationTypeSetting.INSTANT_TELEPORT
    if pre_sex_handler.get_sims_amount() == 1:
        if is_instant is True:
            return _start_instant_solo_sex_interaction(pre_sex_handler)
        return _start_solo_sex_interaction(pre_sex_handler)
    else:
        creator_sim = TurboManagerUtil.Sim.get_sim_instance(
            pre_sex_handler.get_creator_sim_id())
        target_sim = TurboManagerUtil.Sim.get_sim_instance(
            pre_sex_handler.get_second_sim_id())
        if creator_sim is None or target_sim is None:
            clear_sim_sex_extra_data(
                TurboManagerUtil.Sim.get_sim_info(
                    pre_sex_handler.get_creator_sim_id()))
            clear_sim_sex_extra_data(
                TurboManagerUtil.Sim.get_sim_info(
                    pre_sex_handler.get_second_sim_id()))
            return False
        ask_player_to_start = False
        if get_sex_setting(SexSetting.AUTONOMY_PLAYER_ASK_PLAYER_DIALOG_STATE,
                           variable_type=bool) and (
                               pre_sex_handler.is_autonomy_sex()
                               and TurboSimUtil.Sim.is_player(creator_sim)
                           ) and TurboSimUtil.Sim.is_player(target_sim):
            ask_player_to_start = True
        elif get_sex_setting(
                SexSetting.AUTONOMY_NPC_ASK_PLAYER_DIALOG_STATE,
                variable_type=bool) and TurboSimUtil.Sim.is_npc(
                    creator_sim) and TurboSimUtil.Sim.is_player(target_sim):
            ask_player_to_start = True
        elif get_sex_setting(SexSetting.AUTONOMY_PLAYER_ASK_NPC_DIALOG_STATE,
                             variable_type=bool) and (
                                 pre_sex_handler.is_autonomy_sex()
                                 and TurboSimUtil.Sim.is_player(creator_sim)
                             ) and TurboSimUtil.Sim.is_npc(target_sim):
            ask_player_to_start = True
        if is_instant is True:
            return _start_instant_group_sex_interaction(
                pre_sex_handler, ask_player_to_start=ask_player_to_start)
        return _start_group_sex_interaction(
            pre_sex_handler, ask_player_to_start=ask_player_to_start)
 def start_sex_interaction(self):
     active_sex_handler = self._get_active_sex_handler()
     for sim_info in self.get_actors_sim_info_gen():
         if active_sex_handler is None:
             clear_sim_sex_extra_data(sim_info)
         sim_ev(
             sim_info
         ).active_sex_handler_identifier = active_sex_handler.get_identifier(
         )
         sim_ev(sim_info).active_sex_handler = active_sex_handler
         if self.is_autonomy_sex():
             sim_ev(
                 sim_info
             ).last_sex_autonomy = TurboWorldUtil.Time.get_absolute_ticks()
         clear_sim_sex_extra_data(sim_info, only_pre_active_data=True)
         TurboSimUtil.Sim.reset_sim(sim_info)
         sim_ev(sim_info).has_setup_sex = True
         active_sex_handler.play_if_everyone_ready()
 def on_interaction_cancel(cls, interaction_instance, finishing_type):
     if interaction_instance.has_proceeded is True:
         return
     if finishing_type == TurboInteractionUtil.FinishingType.USER_CANCEL:
         sim = cls.get_interaction_sim(interaction_instance)
         pre_sex_handler = sim_ev(sim).active_pre_sex_handler
         clear_sim_sex_extra_data(sim, only_pre_active_data=True)
         unprepare_npc_sim_from_sex(sim)
         if pre_sex_handler is None:
             return
         for actor_sim_info in pre_sex_handler.get_actors_sim_info_gen():
             if sim_ev(
                     actor_sim_info).in_sex_process_interaction is not None:
                 cls.kill_interaction(
                     sim_ev(actor_sim_info).in_sex_process_interaction)
             clear_sim_sex_extra_data(actor_sim_info,
                                      only_pre_active_data=True)
             while sim_ev(actor_sim_info).active_sex_handler is None:
                 unprepare_npc_sim_from_sex(actor_sim_info)
def _wickedwhims_command_stop_all_sex(output=None):
    for sim_info in TurboManagerUtil.Sim.get_all_sim_info_gen(humans=True,
                                                              pets=False):
        pre_sex_handler = sim_ev(sim_info).active_pre_sex_handler
        active_sex_handler = sim_ev(sim_info).active_sex_handler
        clear_sim_sex_extra_data(sim_info)
        if pre_sex_handler is not None:
            for sim in pre_sex_handler.get_actors_sim_instance_gen():
                if sim is None:
                    pass
                TurboSimUtil.Interaction.unlock_queue(sim)
                TurboSimUtil.Sim.reset_sim(sim, hard_reset_on_exception=True)
        try:
            while active_sex_handler is not None:
                active_sex_handler.stop(hard_stop=True,
                                        is_end=True,
                                        stop_reason='On stop sex command.')
        except:
            pass
    output('Sex was stopped. Sad.')
Exemple #16
0
    def on_interaction_start(cls, interaction_instance):
        sim = cls.get_interaction_sim(interaction_instance)
        target = cls.get_interaction_target(interaction_instance)
        pre_sex_handler = sim_ev(sim).active_pre_sex_handler
        if pre_sex_handler is None or target is None:
            clear_sim_sex_extra_data(sim)
            if target is not None:
                clear_sim_sex_extra_data(target)
            return False

        def _ask_for_sex_callback(dialog):
            if not TurboUIUtil.DramaDialog.get_response_result(dialog):
                pre_sex_handler.set_as_failure()
            else:
                pre_sex_handler.set_as_success()
            TurboSimUtil.Interaction.push_affordance(sim, SimInteraction.WW_TRIGGER_SOCIAL_ASK_FOR_SEX_DEFAULT, target=target, skip_if_running=True)
            return True

        display_drama_dialog(target, sim, text=1638454846, text_tokens=(sim, target), ok_text=3398494028, cancel_text=3364226930, callback=_ask_for_sex_callback)
        return True
def _attempt_sex_init(pre_sex_handler):
    if pre_sex_handler.get_sims_amount() == 1:
        pre_sex_handler.start_sex_interaction()
        return True
    if pre_sex_handler.are_all_sims_ready():
        if pre_sex_handler.is_joining_sex():
            creator_sim = TurboManagerUtil.Sim.get_sim_info(
                pre_sex_handler.get_creator_sim_id())
            active_sex_handler = sim_ev(creator_sim).active_sex_handler
            if active_sex_handler is not None:
                active_sex_handler.stop(hard_stop=True,
                                        no_teleport=True,
                                        is_joining_stop=True,
                                        stop_reason='Joining To Sex!')
                pre_sex_handler.start_sex_interaction()
                return True
            for sim_info in pre_sex_handler.get_actors_sim_info_gen():
                clear_sim_sex_extra_data(sim_info, only_pre_active_data=True)
                while sim_ev(sim_info).is_playing_sex is True:
                    unprepare_npc_sim_from_sex(sim_info)
        pre_sex_handler.start_sex_interaction()
        return True
    return False
def update_sim_to_route_for_sex(sim):
    if sim_ev(sim).is_in_process_to_sex is True:
        if sim_ev(sim).active_pre_sex_handler is not None:
            TurboSimUtil.Interaction.unlock_queue(sim)
            TurboSimUtil.Routing.refresh_portals(sim)
            result = TurboSimUtil.Interaction.push_affordance(
                sim,
                SimInteraction.WW_ROUTE_TO_SEX_LOCATION,
                insert_strategy=TurboInteractionUtil.QueueInsertStrategy.FIRST,
                priority=TurboInteractionUtil.Priority.Critical,
                run_priority=TurboInteractionUtil.Priority.Critical,
                skip_if_running=True)
            if result:
                sim_ev(
                    sim
                ).in_sex_process_interaction = TurboInteractionUtil.get_interaction_from_enqueue_result(
                    result)
            else:
                clear_sim_sex_extra_data(sim, only_pre_active_data=True)
                unprepare_npc_sim_from_sex(sim)
        else:
            clear_sim_sex_extra_data(sim, only_pre_active_data=True)
            unprepare_npc_sim_from_sex(sim)
Exemple #19
0
def apply_active_sex_handler_to_sim(sim_identifier):
    sim_info = TurboManagerUtil.Sim.get_sim_info(sim_identifier)
    sex_handler_identifier = sim_ev(sim_info).active_sex_handler_identifier
    if not sex_handler_identifier or sex_handler_identifier == '-1':
        clear_sim_sex_extra_data(sim_info)
        return
    active_sex_handler = None
    for sex_handler in ACTIVE_SEX_HANDLERS_LIST:
        while sex_handler.get_identifier() == sex_handler_identifier:
            active_sex_handler = sex_handler
            break
    if active_sex_handler is None:
        clear_sim_sex_extra_data(sim_info)
        return
    if TurboWorldUtil.Lot.get_active_lot_id() != active_sex_handler.get_lot_id(
    ):
        clear_sim_sex_extra_data(sim_info)
        return
    sim_ev(sim_info).active_sex_handler = active_sex_handler