Jump to content

Recommended Posts

Posted
55 minutes ago, BlackBoxFun said:

Well, it just worx .... and frankly I do miss some negative effects that slim/weak arms and legs would do as also some strength degradation through waist training. But I haven't found any other image.thumb.png.40e843558fb75bb975c58241cc2d717b.pngmod that gives you a wasp waist over time. 

I also like the deformed feet. The slow down effect is not necessarily my piece of cake but the idea that after a year in high heels you can't wear normal footwear is neat. I personally would think getting a health damage especially when running/jumping with deformed feet would be more "immersive" .. but this mod is very customizable.  I will try the two mods in tandem and see what happens 👨‍⚕️

Devious Training springs to mind: 

 

Posted

Since this mod introduces lore friendly restraints would it be possible to create a SPID file to distribute some of the more prisoner-esk items to NPCs in the Crime Factions. For immersion reasons I was thinking you could add yokes/chains/cuffs/whatever to prisoners being escorted by guards, to jailed NPCs or to NPCs added through Skyrim's Dead.

 

Obviously a SPID file wouldn't add additional dialog or AI packages. Maybe down the line if a prisoner wearing said items tried to run away from the guards they would chase and attack them. Maybe you intervene and save the prisoner, you let tje, go and later down the line a courier brings you some AI written letter about how they thank you and gives you a small reward. Maybe after the fight you keep the prisoner for yourself and send them to PAH or DOM. Or maybe you just let nature take it's course and you watch the guards kill the prisoner as you scarf down your 3rd cheese wheel of the day.

 

Anyways, I'm not versed in SPID distributions but If I just distributed a Yoke to a prisoner would that call the appropriate animations/combat tactics/AI packages?

Posted (edited)
2 hours ago, Stained Atonement said:

would it be possible to create a SPID file

It would, but this mod is a resource and framework.

Using the assets has to be done by other mods - like Maria Eden.

Edited by zaira
Posted
20 hours ago, Talesien said:

Devious Training springs to mind: 

 

Jep, thank you. I did look into this once, but it's not what I want. I don't want boni for getting stuck in this "stuff" through traps and bad people but want an incentive to get rid of it quickly and then " recuperate " . 

A fun story would for example be to have to train down your waist to be able to equip certain clothing needed for entrance into the blue palace. Then having the problem that without the corset you can't carry anything anymore. ... Oh well, sorry, just rambling here and this doesn't belong into this thread in the first place. 

 

Never the less, thank you for your pointer!

Posted (edited)

Have you changed anything in the requirements between versions 1.1.1 to 2026-08-22 apart from the leash framework?

Edited by SimsSims111
Posted
15 minutes ago, SimsSims111 said:

Have you changed anything in the requirements

Not something I am aware of - but I only test with latest DD NG...

Posted
On 8/22/2026 at 12:10 AM, BlackBoxFun said:

I still use the FNIS .. and it got this error. Any help in cirumventing this ?

 

image_2026-08-22_001017507.png

 

THANK you for fixing it. just now found out because I was only looking here in the thread, 

  • 3 weeks later...
Posted


Can't seem to get the leash to trigger. I'm trying to create an Alternate Perspective start where the player is leashed to a wall ring in Castle Dour.

This isn't working.
 

  LFTLF.EquipLeash( Player, Sybille, "default", true )
  LFTLF.LeashToLeashAnchor( Player, LeashRing )

 

Posted (edited)
6 hours ago, jbezorg said:

Can't seem to get the leash to trigger.

 

Here are some examples how I use leashes (to static objects)

 

Spawning a leashpole in front of the player
 

Activator Property LFT_LeashPostStone Auto
Activator Property LFT_LeashPostStoneLong Auto
Activator Property LFT_LeashPostStoneShort Auto
Activator Property LFT_LeashPostWood Auto
Activator Property LFT_LeashPostWoodLong Auto
Activator Property LFT_LeashPostWoodShort Auto

; Spawn pole to leash actor to. Returns the pole reference.
; poleType: 0 = Stone, 1 = Wood
; leashLenght: 0 = short, 1 = medium, 2 = long
ObjectReference Function SpawnLeashPole(Actor victim, int poleType = 0, int leashLength = 1)
	if !victim
		return None
	endif
	
	float zAngle = victim.GetAngleZ()
	float startX = victim.GetPositionX() + (100.0 * Math.Sin(zAngle))
	float startY = victim.GetPositionY() + (100.0 * Math.Cos(zAngle))
	
	float targetZ = victim.GetPositionZ()
	float[] groundData = MESKSEUtils.GetGroundZAndNormal(victim.GetParentCell(), startX, startY, targetZ, zAngle)
	float groundZ = groundData[0]
	float pitchX = groundData[1]
	float rollY = groundData[2]
	
	ObjectReference hitRef = MESKSEUtils.GetRaycastHitRef(victim.GetParentCell(), startX, startY, targetZ)
	if hitRef && (hitRef.GetBaseObject() as Furniture)
		float visualZ = MESKSEUtils.GetVisualZHeight(hitRef, startX, startY, groundZ)
		if visualZ > groundZ
			groundZ = visualZ
			pitchX = 0.0
			rollY = 0.0
		endif
	endif

	Activator leashAnchorBase
	if poleType == 0 && leashLength == 1
		leashAnchorBase = LFT_LeashPostStone
	elseif poleType == 0 && leashLength == 2
		leashAnchorBase = LFT_LeashPostStoneLong
	elseif poleType == 0 && leashLength == 0
		leashAnchorBase = LFT_LeashPostStoneShort
	elseif poleType == 1 && leashLength == 1
		leashAnchorBase = LFT_LeashPostWood
	elseif poleType == 1 && leashLength == 2
		leashAnchorBase = LFT_LeashPostWoodLong
	elseif poleType == 1 && leashLength == 0
		leashAnchorBase = LFT_LeashPostWoodShort
	endif
	ObjectReference leashAnchor = victim.PlaceAtMe(leashAnchorBase, abInitiallyDisabled = true)
	leashAnchor.SetAngle(0.0, 0.0, zAngle)
	leashAnchor.SetPosition(startX, startY, groundZ - 16.0)
	leashAnchor.EnableNoWait()
	StorageUtil.SetFormValue(victim, "temporaryLeashAnchor", leashAnchor)
	return leashAnchor
endfunction


Leashing to a leash anchor:
 

Actor Property PlayerRef Auto
MariaRestraintsManager Property mrm Auto
MEP_LocationManager Property meplm Auto
FormList Property LFT_LeashAnchorList Auto
LoreFriendly_LeashFramework Property lftlfw Auto

function attach(Actor akActor)
    ObjectReference existingPole = Game.FindClosestReferenceOfAnyTypeInListFromRef(LFT_LeashAnchorList,PlayerRef, 300)
    if existingPole
        lftlfw.LeashToLeashAnchor(PlayerRef, existingPole)
        return
    endif
    int leashAnchorType = 0
    int locationType = meplm.MEPCurrentLocationType.GetValueInt()
    if locationType == meplm.LocationTypePampa \
        || locationType == meplm.LocationTypeHarbor \
        || (!Game.GetPlayer().IsInInterior() && (\
                locationType == meplm.LocationTypeUnknown \
             || locationType == meplm.LocationTypeBandits \
             || locationType == meplm.LocationTypeStables \
             || locationType == meplm.LocationTypeMilitary \
             || locationType == meplm.LocationTypeForsworn \
           ))
        leashAnchorType = 1
    endif
    LoreFriendly_LeashAnchorObject.Leash(PlayerRef,mrm.SpawnLeashPole(PlayerRef, leashAnchorType))
endfunction


The static object must be type of LoreFriendly_LeashAnchorObject

 

Leashing to an actor:

LoreFriendly_LeashFramework Property lftlfw Auto
Actor Property PlayerRef Auto

function leash(Actor leashHolder)
    lftlfw.EquipLeash(PlayerRef,leashHolder)
endfunction

 

There are traces in papyrus log that should show when something goes wrong - all with prefix "@@ LFTL :"

You can find the leash configurations in the folder
SKSE\Plugins\StorageUtilData\LoreFriendlyToys\Leashes
There is a README.md which explains the format of a leash configuration

Your call to LFTLF.EquipLeash( Player, Sybille, "default", true ) will equip the leash configured in:
SKSE\Plugins\StorageUtilData\LoreFriendlyToys\Leashes\Human\default.json
Every leash config file contains a download URL for the leash-resource - the leash mod.

If this resource is not installed, LFT tries to equip the fallback:
SKSE\Plugins\StorageUtilData\LoreFriendlyToys\Leashes\Fallback\default.json
 

I know that it sounds pretty complicated - but the leash part of LFT is designed as a highly customizable framework.

There is to much progress in the leash development yet and many existing leashes comes without a license or with a restricted license, so I am unable to bundle the all leashes in LFT.
This is the rationale behind the json based abstraction layer.

Edited by zaira
Posted
6 hours ago, zaira said:

 

Here are some examples how I use leashes (to static objects)

 

Spawning a leashpole in front of the player

...


This is the rationale behind the json based abstraction layer.



Thanks!

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...