-
Announcements
-
SITE MOVED - IN READ ONLY MODE 12/08/2015
Please use http://www.loverslab.com moving forward. Site has been restored to a previous version, and this one placed into a read-only mode. This is available for a limited time so users may reference/copy content that has been lost in the transition. This will no longer be accessible by December 22nd, 2015.
-
-
Content count
2,406 -
Joined
-
Last visited
8 files
-
Devious Devices - Gags+
About
Normally a Devious Device gag will block dialog. Gags+ allows the player to open dialog with a NPC at their normal speech level of ability if they have in their possession a writing set that consists of at least one of each of the following items:
Quill
Inkwell
Roll of paper
Alternatively, the player may also use the following writing set with a debuff to their speech ability.
Charcoal
Roll of paper
In both cases one item from the set that is in use is consumed when dialog with the NPC is closed.
If the player is in possession of both types of writing sets then the set without the debuff is used first.
Required
Devious Devices - Integration v2.6.6
Note
If the player is already wearing a gag when Gags+ is installed you must restart the Devious Devices - Integration Gag's quest in console for this mod to start functioning.
stopquest zadgagqueststartquest zadgagquestBONUS: Masque of Clavicus Vile.esp
Did you really think you'd come out ahead making a deal with Clavicus Vile? The Daedric Prince of twisted wishes and eldritch deals?
11,347 downloads
Updated
-
Quest Versioning SDK
By jbezorg in Modders Resources
If the Mod lists this as a requirement and you are not a Modder:
Then all you need to do is install this.
If you are a Modder and you want to use this as a resource
This is a conceptual copy of SkyUI's version control with some minor changes.
Versioned quest scripts must extend questVersioning.
Under the Quest Aliases tab, add a new reference alias pointing to the Specific Reference, Cell any, Ref PlayerRef. Then add the questVersioningPlayerAlias script
function qvGetVersion
int Function qvGetVersion()
Returns the static version number of the script.
function qvUpdate
function qvUpdate( int aiCurrentVersion )
Called on every game load. In addition to version control it can be used to register mod events.
param int aiCurrentVersion - This is the current running version of the quest at the time of game load. The running version is updated to the value returned by qvGetVersion() after this function is called.
property qvCurrentVersion
The current running version of the quest script.
GIT
https://github.com/jbezorg/questVersioning
16,543 downloads
Updated
-
SexLab RND
By jbezorg in Sex Effects
NOTE: If you are upgrading from Weight RND, You need to:
Stop Realistic Need and Diseases in MCM
Uninstall Weight RND.
Save. Restart & load your save. Then save.
Install SexLab RND
Restart Realistic Need and Diseases in MCM
WHAT DOES THIS MOD DO?
This is an addon to Realistic Needs and Diseases (RND) by perseid9. Obviously you will need RND installed for this to work. It will change the player's body weight based on their eating habits and activities.
You will also need SexLab. It will make the player a little tired after sex as well as count as an activity that will make the player lose weight. In addition, Oral sex will provide some "water" for the player.
HOW DOES IT WORK?
This mod will start when RND starts and stop when it is stopped.
The player's weight is restored to it's original value when it's stopped.
No configuration menu is added by this mod.
Weight Change RND monitors the hunger magic effects placed on the player by RND. It will also monitor how often the player is in combat, sprinting, and if the player is over encumbered. ( Player's inventory weight greater than max carry weight and the player is forced to walk ).
Generally:
Gluttony will shift the player's weight up
Satiated & Peckish shift the player's weight towards their original weight.
Hungry will not shift the player's weight ( by itself. other activities will most likely shift weight down ).
Very Hungry & Starving will shift the player's weight down
Sex makes the player tired. Tiredness from sex scales with it's duration. Aggressive sex applies a multiplier.
Other factors the influence weight gain/loss besides eating.
sex, combat, sprinting, and being over encumbered all contribute to shifting the player's weight down.
sleeping, sitting, will contribute to shifting the player's weight up.
Weight adjustments are calculated and applied at the end of the day and is the sum of all the player's actions. e.g. If the player spends half a day with the RND Gluttony effect applied and then spends the other half with RND Starving Effect applied, the net result would be no weight change.
SOME THINGS TO KEEP IN MIND
The weight change is limited to the in game limit of 0 to 100 of SetWeight().
The visual body changes are currently limited to the player's chosen body mesh.
REQUIREMENTS
SexLab v1.3
Realistic Needs and Diseases (RND) by perseid9
Quest Versioning SDK
UPDATING
Just replace the old files with the new. Then stop and restart RND in it's MCM menu. You'll be prompted to reset the character to it's original weight. Select yes/no depending on your preference.
If you want to put things back to the way they were before the update you can use the following console commands to set the target weight the player shifts to when peckish or satiated and the player's current appearance.
setpqv rndweight fOrigPlayerWeight {target value}
player.setnpcweight {target value}
CONFLICTS
None verified
8,855 downloads
Updated
-
Papyrus Utilities
By jbezorg in Modders Resources
This is just a simple script to manipulate Papyrus error logging.
This is the script.
Scriptname Papyrus Hidden; silence the Papyrus log =====================================================bool[] function getDebugLogState() global bool[] bDebugState = new bool[3] bDebugState[0] = Utility.GetINIBool("bLoadDebugInformation:Papyrus") bDebugState[1] = Utility.GetINIBool("bEnableTrace:Papyrus") bDebugState[2] = Utility.GetINIBool("bEnableLogging:Papyrus") return bDebugStateendFunctionbool[] function getDebugLogSilent() global bool[] bDebugState = new bool[3] bDebugState[0] = false bDebugState[1] = false bDebugState[2] = false return bDebugStateendFunctionfunction setDebugLogState( bool[] bDebugState ) global Utility.SetINIBool("bLoadDebugInformation:Papyrus", bDebugState[0]) Utility.SetINIBool("bEnableTrace:Papyrus", bDebugState[1]) Utility.SetINIBool("bEnableLogging:Papyrus", bDebugState[2])endFunction
In the following example function the animation var "FNISflags" has not been defined.
; call FNIS.GetFlag( ([mymod] as FNIS ).ISBETA )Bool function GetFlag( int aiFlag ) global bool ret = Math.LogicalAnd(Game.GetPlayer().GetAnimationVariableInt("FNISflags"), aiFlag) as Bool return retendFunction
This will generate an error in the Papryus Log. e.g.:
[09/14/2013 - 10:34:37PM] Error: (00000014): cannot fetch variable named FNISflags of type int, returning 0.stack: [ (00000014)].Actor.GetAnimationVariableInt() - "<native>" Line ? <unknown self>.fnis.GetFlag() - "FNIS.psc" Line 59 [zzEstrusChaurusMCM (9200EF8A)].zzestruschaurusmcmscript.registerMyAnimation() - "zzEstrusChaurusMCMScript.psc" Line 30 [zzEstrusChaurusMCM (9200EF8A)].zzestruschaurusmcmscript.OnVersionUpdate() - "zzEstrusChaurusMCMScript.psc" Line 145 [zzEstrusChaurusMCM (9200EF8A)].zzestruschaurusmcmscript.CheckVersion() - "SKI_QuestBase.psc" Line 17 [zzEstrusChaurusMCM (9200EF8A)].zzestruschaurusmcmscript.OnGameReload() - "SKI_ConfigBase.psc" Line 119 [alias Player on quest zzEstrusChaurusMCM (9200EF8A)].SKI_PlayerLoadGameAlias.OnPlayerLoadGame() - "SKI_PlayerLoadGameAlias.psc" Line 6
If you as a modder do not care about this noise in the Logs because a failure is sometimes expected you can silence Papryus error logging with these utilities. e.g.
; call FNIS.GetFlag( ([mymod] as FNIS ).ISBETA )Bool function GetFlag( int aiFlag, bool abFailSilent = true ) global bool[] bDebugOff = Papyrus.getDebugLogSilent() bool[] bDebugState = Papyrus.getDebugLogState() if abFailSilent Papyrus.setDebugLogState( bDebugOff ) endIf bool ret = Math.LogicalAnd(Game.GetPlayer().GetAnimationVariableInt("FNISflags"), aiFlag) as Bool if abFailSilent Papyrus.setDebugLogState( bDebugState ) endIf return retendFunction
786 downloads
Updated
-
Actor Events Framework
By jbezorg in Modders Resources
What is this?
This is a modders resource. As more and more mods trigger events when actor values reach specified values there are conflicts as they compete to start up their events. This mod is a framework to manage those events.
Who Should Use It?
Modders who want to trigger events when monitored actor values enters a specific value range. Gamers who install a mod and the mod author lists this as a required mod.
Modders who want to use Actor Events in their mods should download the Github copy (Wiki is a WIP).
Everyone Else should download the mod from loverslab.com.
Files
actorEvents.esm & .bsa: the framework files
How does it work?
Actor value changes trigger the activation and deactivation of magic effects attached to an ability added to the actor. This activation/deactivation triggers scans a list of registered mods to see if they are watching that value and if the value being monitored falls within their selected range. Mods competing for the same event are chosen by a prioritized random selection set by the user in MCM.
The selected mod event then gets it's custom event sent appended with "_start". The actor is flagged as being within an event associated with the monitored actor value ( other actor values can still receive events ) by adding a hidden spell "ae_marker_{value}" (e.g. "ae_marker_health"). The actor must not already have the spell for an event to be sent.
When the actor value moves out of range of the selected mod event, the custom event is sent again appended with "_end" At this time the spell is removed and the actor value can again trigger mod events.
Monitor an Actor
Parameters
Actor akActor: the actor to enable/disable monitoring for.
Bool abMonitor: enable (abMonitor = true) or disable (abMonitor = false) actor event monitoring.
Returns
Bool: Success/Failure.
function monitor(Actor akActor, Bool abMonitor = true)
Events Assocated with the monitoring an actor.
SendModEvent("ae_monitor", "add", akActor.GetFormID() as float)SendModEvent("ae_monitor", "clear", akActor.GetFormID() as float)
Monitored Actor is Ragdolling?
Parameters
Actor akActor: the actor to test.
Returns
Bool: Is/Is not ragdolling.
Bool function isRagdolling(Actor akActor)
Get Last Attacker on Monitored Actor
Parameters
Actor akActor: the actor to test.
Returns
ObjectReference: akAggressor returned by the OnHit event.
ObjectReference function GetLastAttacker(Actor akActor)
Get Mod Index By Name
Through the customOwner property you can access other mods functions by casting the ref to _ae_mod_base. e.g.:
(ae.customOwner[N] as _ae_mod_base).qualifyActor(kTarget, stat)
Parameters
String asName: The name of a registered owner of an event.
Returns
Int: The index of the named mod or -1 if not found.
Int function GetModIndexByName(String asName)
Register a callback to watch for actor events.
The block's associated with an event can be edited within MCM. A mod event can also be disabled.
Parameters
Quest akOwner: Any refid within the mod that's using the framework. It cannot evaluate to none when the save is loaded or the registration is removed. The scripting must extent "_ae_mod_base".
Int aiStatBlockHi: Valid range is 0-9 representing 0% to 99% in 10% increments. 100%+ remains clear so the 90% - 99% block can send a exit request when the actor is 100%
Int aiStatBlockLo: Valid range is 0-9. A registered event cannot span more than 4 10% blocks (inclusive)*.0 = Less than 10%
1 = Greater than or equal to 10%, less than 20%
2 = Greater than or equal to 20%, less than 30%
3 = Greater than or equal to 30%, less than 40%
4 = Greater than or equal to 40%, less than 50%
5 = Greater than or equal to 50%, less than 60%
6 = Greater than or equal to 60%, less than 70%
7 = Greater than or equal to 70%, less than 80%
8 = Greater than or equal to 80%, less than 90%
9 = Greater than or equal to 90%, less than 100%
[*]String asCallback: The custom ModEvent that will get sent.
[*]String asStat: The actor value. Currently available are Health, Magicka, Stamina
Returns
Int: The registered callback's index.
* This may be increased but there must always be some uncovered range so the event can clear and allow other event to happen.
int function register(Quest akOwner, Int aiStatBlockHi, Int aiStatBlockLo, String asCallback, String asStat)
The format of the custom event:
akActor.SendModEvent(asCallback + "_start", asStat, akActor.GetActorValuePercentage(asStat))akActor.SendModEvent(asCallback + "_end", asStat, akActor.GetActorValuePercentage(asStat))
Events Assocated with the callback index.
Purge: sent when Actor Events cannot resolve the callback owner's RefID.
ae.SendModEvent("ae_update", "purge", idx as float)
Disable/Enable: Sent when the user enables/disables the callback in MCM.
ae.SendModEvent("ae_update", "disable", idx as float)ae.SendModEvent("ae_update", "enable", idx as float)
Remove: Sent when the player removes a mod event in MCM
ae.SendModEvent("ae_update", "remove", idx as float)
Unregisters a mod event
Parameters
Quest akOwner: The refid used to register.
Returns
Bool: Success/Failure.
bool function unRegister(Quest akOwner)
Animation Mod Events
This animation event is sent when the animation event "RemoveCharacterControllerFromWorld" is triggered. The actor is flagged as ragdolling by adding a hidden spell "ae_marker_ragdoll" with the effect keyword "ae_ragdoll". The actor must not already have the spell for the event to be sent.
kActor.SendModEvent("ae_anim_start", "ragdoll", Utility.GetCurrentRealTime())
This animation event is sent with the animation event "GetUpEnd" while the actor has the hidden spell "ae_marker_ragdoll". At that time the spell is removed allowing ragdoll events to be sent again.
kActor.SendModEvent("ae_anim_end", "ragdoll", Utility.GetCurrentRealTime())
Scripting
The event owner must be a quest now and extend the _ae_mod_base script. Within your quest script you must define the following functions.
Functions
Bool function qualifyActor(Actor akActor = none, String asStat = "")
This will be called during the mod selection process to see if the actor in question qualifies for your event. If this function returns false then your mod will be skipped. If it is not defined in your mod then your mod events will not be triggered.
function aeRegisterMod()
This may be called during AE's cleanup process. Possibly due to a refid change. It will reregister the mod with AE.
function aeUninstallMod()
This function will be called when the user permanently disables the mod through the AE MCM menu. It's suggested that you do not use this function as a method to reinstall/update the mod. Use this as an alternative for uninstalling your mod.
int function aeGetVersion()
This functions exactly as and has the same purpose as the SkyUI function GetVersion(). It returns the static version of the AE script.
function aeUpdate( int aiVersion )
This functions similarly and has the same purpose as the SkyUI OnVersionUpdate() event. Called when a version update of this script has been detected. The parameter aiVersion is the old version number of the script.
Properties
_ae_framework Property ae Auto
Required: This has to point to _ae_base
String Property myEvent Auto
Required: This is the base name for your mod's AE events
String Property myCallback Auto
Required: This is the base name for your mod's AE event callback
Actor[] Property myActorsList Auto
Required: This has to point to a form list containing actors your Mod monitors.
String[] Property publicModEvents Auto
Optional: This is registry of public mod events sent out by your mod. see: http://www.creationkit.com/RegisterForModEvent_-_Form
Aliases
Much like SkyUI, each AE quest runs maintenance code when the game is reloaded.
In the quest you created, select the Quest Aliases tab and add a new reference alias. Name it PlayerAlias.
For Fill Type, select the player reference (Specific Reference, Cell any, Ref PlayerRef).
In the Scripts list, add _ae_PlayerLoadGameAlias.
65,907 downloads
Updated
