Jump to content

Recommended Posts

Posted (edited)

Very cool mod! You could release it also on Nexus Mods. It would fit there much better and also get much more recognition than this perverted site lol

 

Also, a hotkey to toggle the mod on/off would be nice

Edited by BoobaMaster69
Posted
On 9/17/2026 at 1:43 AM, myhouseatl said:

Can you do the opposite?  EG: Dialogue that asks if you want to sit on my lap?  Giving the PC the ability to sit on NPC lap.  For female players...

this is exactly what Immersive lap sitting does. in this mod, i will not do the same thing.

Posted
Spoiler
Steps to reproduce:
1. Have at least one follower, "sit with player" enabled in MCM.
2. Sit or lie on any furniture in a location with no other valid sit furniture in search
   radius (e.g., a crypt interior). OnEnterFurniture fires, GetAllFurniture() returns an
   empty array.
3. Check Logs/Script/Papyrus.0.log.

Observed behavior (endless spam, index increments by 1 each line):
error: Array index 411705055 is out of range (0-4294967295)
stack:
        [Active effect 28 on  (00000014)].swm_FurnitureCheckerScript.FillChairAliases() - "..." Line ?
        [Active effect 28 on  (00000014)].swm_FurnitureCheckerScript.OnEnterFurniture() - "..." Line ?

Root cause — in FillChairAliases():
    While (actors_to_sit_remaining > 0)
        If (free_spaces_on_furniture[furniture_index])        ; out of bounds when array is empty
            ...
            If (all_furniture.Length < furniture_index || SitPlaceAliases.Length < alias_index || total_free_spaces <= 0)
                actors_to_sit_remaining = 0
            EndIf
        EndIf
        furniture_index += 1
    EndWhile

The loop's exit condition is INSIDE the If block, which only runs on a successful (in-bounds)
array access. When the furniture/free-spaces array is empty, the bounds check is never reached
and the loop never terminates. Papyrus silently returns 0 for out-of-bounds reads, so the loop
spins until the counter overflows. Note: "all_furniture.Length < furniture_index" is also
off by one — should be "<=".

A similar unbounded index exists in ActorToSitPlaceAllocator(): when trailing furniture has
0 free spaces, current_furniture_index is incremented and then used to read
free_spaces_on_furniture[current_furniture_index] with no bounds check, so it also runs
past the end of the array.

Suggested fix:
1. Move the bounds check into the While condition:
    While (actors_to_sit_remaining > 0 && furniture_index < free_spaces_on_furniture.Length)

2. Early exit in OnEnterFurniture when nobody needs a seat:
    If (validated_followers.Length == 0)
        return
    EndIf

3. Guard the index in ActorToSitPlaceAllocator after incrementing:
    current_furniture_index += 1
    If (current_furniture_index >= free_spaces_on_furniture.Length)
        debug.Notification("Followers didn't find enough space to sit: " + (followers.Length - total_followers_allocated))
        return
    EndIf
    spaces_remaining = free_spaces_on_furniture[current_furniture_index]

The mod otherwise works great — hope this helps. Thanks for the mod!

 

When the player enters ANY furniture while "sit with player" is enabled and there is no
valid sit furniture found nearby, swm_FurnitureCheckerScript.FillChairAliases() enters an
unbounded While loop. Papyrus writes an "Array index out of range" error on EVERY iteration,
producing millions of log lines per minute. In my case Papyrus.0.log reached ~28 GB in a
single session (older rotated logs: 12–34 GB each). Total disk space lost: ~200 GB.
A fresh 4 GB log accumulates within a few minutes of play.

 

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...