<?xml version="1.0"?>
<rss version="2.0"><channel><title/><link>https://www.loverslab.com/blogs/blog/2200-nua-documentation/</link><description><![CDATA[<p>
	Stuff
</p>
]]></description><language>en</language><item><title>Licenses - API</title><link>https://www.loverslab.com/blogs/entry/21991-licenses-api/</link><description><![CDATA[<p>
	This documentation is only valid for versions 1.25 and above. <span>For integer mapping, definitions, and better formatting, view the bundled PDF.</span>
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	<strong>Mod Events (Vanilla; requires default vanilla parameter setup)</strong>
</p>

<p>
	ReporterLOSGain
</p>

<p>
	<em>This mod event is sent whenever an LPO Reporter—any proximity NPC tagged for LOS—sees the player. LPO catches OnGainLOS for SingleUpdate, but this event may nonetheless fire in quick succession.</em>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">RegisterForModEvent("BM-LPO_ReporterLOSGain", "LPO_OnReporterLOSGain")
Event LPO_OnReporterLOSGain(string eventName, string strArg, float numArg, Form sender)</span></pre>

<p>
	 
</p>

<p>
	ViolationCheck
</p>

<p>
	<em>This mod event is sent when LPO conducts a violation check.</em>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">RegisterForModEvent("BM-LPO_ViolationCheck", "LPO_OnViolationCheck")
Event LPO_OnViolationCheck(string eventName, string strArg, float numArg, Form sender)</span></pre>

<p>
	 
</p>

<p>
	ViolationFound
</p>

<p>
	<em>This mod event is sent when LPO finds a license violation and attempts to start the bounty quest. This event only fires after detected violations are collected for processing, not immediately when any one violation is detected.</em>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">RegisterForModEvent("BM-LPO_ViolationFound", "LPO_OnViolationFound")
Event LPO_OnViolationFound(string eventName, string strArg, float numArg, Form sender)</span></pre>

<p>
	 
</p>

<p>
	BountyStart
</p>

<p>
	<em>This mod event is sent when LPO's bounty quest successfully starts with LPO Enforcers filling its aliases.</em>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">RegisterForModEvent("BM-LPO_BountyStart", "LPO_OnBountyStart")
Event LPO_OnBountyStart(string eventName, string strArg, float numArg, Form sender)</span></pre>

<p>
	 
</p>

<p>
	BountyEnd
</p>

<p>
	<em>This mod event is sent under two scenarios: when the quest loses all valid aliases, and after LPO processes its post-confrontation sequence. This event always fires immediately before a quest Stop() call</em> and only ever after LPO_ConfrontationEnd if Enforcer engaged dialogue with the player.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">RegisterForModEvent("BM-LPO_BountyEnd", "LPO_OnBountyEnd")
Event LPO_OnBountyEnd(string eventName, string strArg, float numArg, Form sender)</span></pre>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	<strong>Mod Events (Custom)</strong>
</p>

<p>
	BM-LPO_ConfrontationStart
</p>

<p>
	<em>This mod event is sent when an LPO enforcer forcegreets the player.</em>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">RegisterForModEvent("BM-LPO_ConfrontationStart", "LPO_OnConfrontationStart")
Event LPO_OnConfrontationStart(Form akForm1)</span></pre>

<p>
	 
</p>

<p>
	BM-LPO_ConfrontationWalkaway
</p>

<p>
	<em>This mod event is sent when the player runs through the confrontation branch's walkaway topic.</em>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">RegisterForModEvent("BM-LPO_ConfrontationWalkaway", "LPO_OnConfrontationWalkaway")
Event LPO_OnConfrontationWalkaway(Form akForm1)</span></pre>

<p>
	 
</p>

<p>
	BM-LPO_ConfrontationEnd
</p>

<p>
	<em>This mod event is sent when LPO finishes its enforcer-player confrontation scene. End types: walkaway = -1, arrest = 0, normal = 1, lenient = 2</em>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">RegisterForModEvent("BM-LPO_ConfrontationEnd", "LPO_OnConfrontationEnd")
Event LPO_OnConfrontationEnd(int endType)</span></pre>

<p>
	 
</p>

<p>
	BM-LPO_LicenseAdded<br />
	<em>This mod event is sent when the player is given a license that passes an inventory event filter for OnItemAdded.</em>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">RegisterForModEvent("BM-LPO_LicenseAdded", "LPO_OnLicenseAdded")
Event LPO_OnLicenseAdded(int aiArg1)</span></pre>

<p>
	<br />
	BM-LPO_LicenseRemoved<br />
	<em>This mod event is sent when the player loses a license that passes an inventory event filter for OnItemRemoved.</em>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">RegisterForModEvent("BM-LPO_LicenseRemoved", "LPO_OnLicenseRemoved")
Event LPO_OnLicenseRemoved(int aiArg1)</span></pre>

<p>
	<br />
	BM-LPO_LicensePurchased<br />
	<em>This mod event is sent when the player purchases a license and adds the corresponding book item to the moderator's inventory event filter.</em>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">RegisterForModEvent("BM-LPO_LicenseRemoved", "LPO_OnLicenseRemoved")
Event LPO_OnLicenseRemoved(int aiArg1)</span></pre>

<p>
	<br />
	BM-LPO_LicenseExpired<br />
	<em>This mod event is sent when a license expires and removes its corresponding book item from the moderator's inventory event filter.</em>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">RegisterForModEvent("BM-LPO_LicenseExpired", "LPO_OnLicenseExpired")
Event LPO_OnLicenseExpired(int aiArg1)</span></pre>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	<strong>Functions</strong>
</p>

<p>
	GetModVersion - String
</p>

<p>
	<em>Returns a string in a semantic (x.x.x) format.</em>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">Function GetModVersion()</span></pre>

<p>
	 
</p>

<p>
	GetConfigVersion - Int<br />
	<i>Returns an integer indicating the version of the MCM config script. This value is primarily for SkyUI.</i>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">Function GetConfigVersion()</span></pre>

<p>
	<br />
	GetVersion - Int<br />
	<i>Returns a hexadecimal value read in this format: 0x01020304.</i>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">Function GetVersion()</span></pre>

<p>
	<br />
	GetModName - String<br />
	<i>Returns the string value currently used by the MCM script.</i>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">Function GetModName(bool cache = true)</span></pre>

<p>
	<br />
	GetModState - Float<br />
	<i>Returns a float value denoting the current state of the mod. 1 = active; 0 = inactive; -1 = mid-state.</i>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">Function GetModState()</span></pre>

<p>
	<br />
	GetUtility - BM_Licenses_Utility<br />
	<i>Returns the corresponding custom property.</i>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">Function GetUtility()</span></pre>

<p>
	<br />
	GetMCM - BM_Licenses_MCM<br />
	<i>Returns the corresponding custom property.</i>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">Function GetMCM()</span></pre>

<p>
	<br />
	GetLPO - BM_Licenses<br />
	<i>Returns the corresponding custom property.</i>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">Function GetLPO()</span></pre>

<p>
	 
</p>

<p>
	GetLicenseID - Int
</p>

<p>
	<em>Returns an integer corresponding to a given license prefix.</em>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">Function GetLicenseID(string LicensePrefix)</span></pre>

<p>
	 
</p>

<p>
	GetLicenseSID - String<br />
	<i>Finds a corresponding String ID from either a License Prefix or a given string’s integer representation.</i>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">Function GetLicenseSID(string inputID = “”)</span></pre>

<p>
	 
</p>

<p>
	GetLicenseTimeLeft - Float<br />
	<em>Returns a remaining time per in-game hours.</em>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">Function GetLicenseTimeLeft(int LicenseType)</span></pre>

<p>
	 
</p>

<p>
	FlagViolation - Bool
</p>

<p>
	<em>Marks a corresponding violation boolean as TRUE, and then pushes to assess active violations.</em>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">Function FlagViolation(int ViolationType, bool Push = true, bool CheckSafety = true)</span></pre>

<p>
	 
</p>

<p>
	ClearViolations - Bool
</p>

<p>
	<em>Removes any active and valid violations, optionally removing persistent violations as well.</em>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">Function ClearViolations(bool ClearPersistent = false, bool CheckSafety = true)</span></pre>

<p>
	 
</p>

<p>
	PurchaseLicense - Bool
</p>

<p>
	<em>Activates a corresponding license cycle.</em>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">Function PurchaseLicense(int LicenseType, bool SubtractGold = true, bool CheckSafety = true)</span></pre>

<p>
	 
</p>

<p>
	ExpireLicense - Bool
</p>

<p>
	<em>Terminates a corresponding license cycle.</em>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">Function ExpireLicense(int LicenseType, bool Push = true)</span></pre>

<p>
	 
</p>

<p>
	RemoveLicense - Bool
</p>

<p>
	<em>Removes a corresponding license Book Item from the player's inventory, optionally moving it to another container.</em>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">Function RemoveLicense(int LicenseType, int LicenseCount = 0, ObjectReference DestinationContainer = None, bool CheckSafety = true)</span></pre>

<p>
	<br />
	ToggleLicenseFeature - Bool<br />
	<i>Enables or disables a license feature based on a given license type and Boolean flag, thereafter refreshing variables where necessary.</i>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">Function ToggleLicenseFeature(int LicenseType, bool FeatureFlag, bool Push = true)</span></pre>

<p>
	 
</p>
]]></description><guid isPermaLink="false">21991</guid><pubDate>Sun, 14 Jul 2024 02:16:55 +0000</pubDate></item><item><title>Licenses - FAQ</title><link>https://www.loverslab.com/blogs/entry/21020-licenses-faq/</link><description><![CDATA[<ol>
	<li>
		<strong>Can we get different license rules for each Hold?</strong> Licenses places a centricity on literal license documents. Licenses verifies your permissions by checking for license books. If you needed a different Armor License for each hold, that would result in duplicates across the entire license system. On the other hand, if only the rules differed while a single Armor License satisfied the requirement across all of Skyrim, there would be a dissonance between narrative and mechanics. I also want to reduce the number of script checks that run every time you change location so to keep this mod as lightweight as possible. If you're still interested in this niche, you might want to check out a mod called "Sexy Adventures."
	</li>
	<li>
		<strong>Why did the guards arrest me if I've got nothing equipped?</strong> You likely provided a valid source for the Nullify Magicka curse. Un-cursed individuals are subject to fines and inventory checks.
	</li>
	<li>
		<strong>Why do I keep racking up a bounty?</strong> You likely enabled the Add Fine to Bounty option.
	</li>
	<li>
		<strong>How am I supposed to keep my items if I've got nowhere to store them, yet?</strong> Barring the obvious of guards arresting you for general license rule violations, guards will specifically only approach you for blatant and open item violations. That is, as long as you've got nothing rule-breaking in select equipment slots, the guards will have no reason to approach you. 
	</li>
	<li>
		<strong>What exactly is the reach of the Life Insurance feature?</strong> Only throughout Primary Licenses: Armor License, Bikini License, Clothing License, Magic License, and Weapon License. If the Insurance feature is enabled, you'll need to purchase a Life Insurance to enjoy the benefits of these valid licenses on-hand. Rest assured that this feature will not affect any Primary License types that are disabled.
	</li>
	<li>
		<strong>How does Licenses apply features from its integrations?</strong> Modern Arousal Frameworks such as OSL Aroused and SexLab Aroused NG are used to verify certain keywords that you may choose to use. SlaveTats is used to apply, lock, and remove body tattoos. Devious Devices is used for its lockable accessories. If these mods aren't available in your setup, you'll simply be locked from relevant features.
	</li>
	<li>
		<strong>Why isn't the guard removing my collar?</strong> You likely set the Nullify Magicka curse source as "collar" and do not yet have a collar exemption.
	</li>
	<li>
		<strong>Why isn't the guard removing my curse?</strong> You likely do not yet have a Life Insurance.
	</li>
	<li>
		<strong>Where can I retrieve my items after they are confiscated?</strong> City and Town Guards will allow you to access a pool of your confiscated items via a dialogue option at any time. If the Gift Menu appears empty, you lack the necessary license and/or insurance to retrieve your item(s).
	</li>
</ol>

<p>
	<br />
	Be sure to visit the <a href="https://www.loverslab.com/blogs/entry/20117-licenses-user-manual/" rel="">User Manual</a> before posting your question.
</p>
]]></description><guid isPermaLink="false">21020</guid><pubDate>Fri, 08 Mar 2024 22:40:33 +0000</pubDate></item><item><title>Licenses - Developer Notes</title><link>https://www.loverslab.com/blogs/entry/20894-licenses-developer-notes/</link><description><![CDATA[<p>
	First, a guide:
</p>

<ul>
	<li>
		BM_Licenses is the central script
	</li>
	<li>
		BM_Player is for Player Quest Alias and any Events that run with said alias
	</li>
	<li>
		BM_Licenses_Utility holds shared/common functions AND functions that external mods may wish to use
	</li>
	<li>
		Scripts prefixed with BM_ME indicate that they are Magic Effects linked to a spell or enchantment
	</li>
	<li>
		Scripts prefixed with BM_D indicate they are dialogue scripts holding start and end fragments
	</li>
	<li>
		Scripts prefixed with BM_Licenses indicate they are quest scripts
	</li>
</ul>

<p>
	<br />
	If there's a license you'd like to hook into, check the corresponding license variable. For example, checking Armor License validity is just a simple check of [hasArmorLicense] == true. Some notes on these license variables:
</p>

<ul>
	<li>
		If a license feature is disabled, the corresponding license variable is always true.
	</li>
	<li>
		If a license feature is enabled, the corresponding license validity is updated based on two conditions. Pseudocode for Armor License, which doesn't consider state of the license feature itself:
		<ul>
			<li>
				IF player has more than one of the corresponding license book item AND expiration time isn't -1
				<ul>
					<li>
						player has armor license
					</li>
				</ul>
			</li>
			<li>
				ELSE
				<ul>
					<li>
						player doesn't have armor license
					</li>
				</ul>
			</li>
		</ul>
	</li>
</ul>

<p>
	 
</p>

<p>
	To check whether a license feature is enabled/disabled, check the MCM variable. Ex. isArmorLicenseFeatureEnabled
</p>

<p>
	To check whether a license is in an active cycle, verify that the corresponding BM_Licenses variable != -1. Ex. armorLicenseExpirationTime != -1
</p>

<p>
	To check whether a license is in cooldown, verify that the corresponding BM_Licenses variable != -1. Ex. armorLicenseCooldownTime != -1
</p>

<p>
	 
</p>

<p>
	An alternative method that doesn't check internal values, thereby avoiding Licenses as a hard dependency, is to check StorageUtil Global variables.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">StorageUtil.GetIntValue(None, "LPO_ArmorLicense", Missing = -2)</span></pre>

<ul>
	<li>
		-2 : Missing variable / mod
	</li>
	<li>
		-1 : License feature is disabled
	</li>
	<li>
		0 : Player doesn't have the requested license
	</li>
	<li>
		1 : Player has the requested license
	</li>
</ul>

<p>
	 
</p>

<p>
	Current API function coverage only includes public utility functions under BM_Licenses_Utility. License documents can be purchased via manual script function calls under this script. Similarly, violations can be flagged and pushed to bounty quest under the same utility script.
</p>

<p>
	 
</p>

<p style="text-align:center;">
	---
</p>

<p>
	 
</p>

<p>
	"Licenses" is the name of this mod and its MCM menu; this is the name by which this mod should be referred to.
</p>

<p>
	 
</p>

<p>
	"LPO" is the internally-used identifier for Licenses with 1.16 onward. Log traces are prefixed with the "BM-LPO" identifier. The "BM_" keyword can be used to identify scripts. The "BM-L" keyword can be used to identify Licenses' debug outputs. Previous versions identified log traces with "BMLE", which is an acronym of "BananasManiac's Licenses - Enhanced."
</p>

<p>
	 
</p>

<p>
	Below are several additional names that Licenses may be, or may have been, referred to:
</p>

<p>
	- "Licenses (LPO)": Suitable for use in formality. Good as unique public identifier.
</p>

<p>
	- "Licenses - Player Oppression": Suitable for use in formality. Good as unique public identifier.
</p>

<p>
	- "BM Licenses": Suitable when comparing with alternative mods, or when referring to LPO's development or in informality. This name should be avoided in formality to help non-developers differentiate LPO from its BML predecessor.
</p>

<p>
	- "BM Licenses Enhanced": Suitable when comparing with alternative mods, or when referring to LPO's development or in informality. This name should be avoided in formality to help non-developers differentiate Licenses from pre-1.12 versions, which some people are definitely still using.
</p>
]]></description><guid isPermaLink="false">20894</guid><pubDate>Sat, 24 Feb 2024 09:36:31 +0000</pubDate></item><item><title>Licenses - User Manual</title><link>https://www.loverslab.com/blogs/entry/20117-licenses-user-manual/</link><description><![CDATA[<p>
	This documentation is only valid for versions 1.26.3 and above.
</p>

<p>
	 
</p>

<p>
	<strong>User Extensibility</strong><br />
	<br />
	Keyword Form
</p>

<ul>
	<li>
		BM_LicensesArmorItem - marks item as Armor; ex. Hide Chestplate
	</li>
	<li>
		BM_LicensesBikiniItem - marks item as Bikini; ex. Leather Bikini
	</li>
	<li>
		BM_LicensesClothingItem - marks item as Clothing; ex. Prisoner Rags
	</li>
	<li>
		BM_LicensesWeaponItem - marks item as Weapon; ex. Iron Sword
	</li>
	<li>
		BM_LicensesAmmoItem - marks item as Ammo/Arrow; ex. Iron Arrow
	</li>
	<li>
		BM_LicensesMagicItem - marks item as Magic item; ex. Tome of Fireball, Scroll of Fireball, Staff of Fireball
	</li>
	<li>
		BM_LicensesJewelryItem - marks item as Jewelry, possibly enchanted; ex. Circlet of Major Restoration
	</li>
	<li>
		BM_LicensesBarterItem - marks item as tradable even without a Trading License
	</li>
	<li>
		BM_LicensesIgnoreItem - marks item to be ignored
	</li>
	<li>
		BM_LicensesIgnoreLocation - marks location to be ignored
	</li>
</ul>

<p>
	note 1: LicensesJewelryItem is a single-purpose keyword and does not correspond to VendorItemJewelry per se; an item with LicensesJewelryItem is for detecting possible enchanted jewelry under the Magic License feature, and said item will not pass as Jewelry for Trade Validation with that keyword alone. To flag an item as a tradable jewelry, tag it with either VendorItemJewelry or LicensesBarterItem. For dual purpose Magic License and Trading License, VendorItemJewelry will again be satisfactory, but you can also opt to tag with both BarterItem and JewelryItem for an equivalent Trading License effect. BarterItem naturally considers items in addition to Jewelry, such as cooked and raw food items and any other miscellaneous items you would consider low value as well.
</p>

<p>
	 
</p>

<p>
	note 2: The above keywords are "override keywords" as your items, even if added via mods, are typically already tagged with a corresponding vanilla VendorItem keyword. These keywords are not equivalents of, and do not replace or ignore, corresponding VendorItem keywords. But they do follow the same filtering sequence/priority. The only keywords unique to Licenses, strictly in terms of functionality within this mod, are LicensesBikiniItem and LicensesIgnoreItem.
</p>

<p>
	<br />
	FormID List
</p>

<ul>
	<li>
		BM_LicensesIgnoreWorldspace - marks worldspace to be ignored
	</li>
	<li>
		BM_Cities - marks location as a City (cross-references with keyword count LocTypeCity)
	</li>
	<li>
		BM_Towns - marks location as a Town (cross-references with keyword count LocTypeTown)
	</li>
	<li>
		BM_Worldspaces - marks space as Worldspace
	</li>
	<li>
		BM_LicensesIgnoreSpell - marks spell to be ignored
	</li>
</ul>

<p>
	note: FormID Lists must be merged downward to retain changes that are otherwise lost by overwriting plugins.
</p>

<p>
	 
</p>

<p>
	---
</p>

<p>
	 
</p>

<p>
	<strong>Armor License</strong><br />
	Restricts items tagged with VendorItemArmor.<br />
	If enabled, the player cannot equip any armor unless they hold an Armor License. You can optionally configure the Armor License to also provide Clothing License privileges, allowing a single license to cover both item categories.<br />
	<br />
	<strong>Bikini License</strong><br />
	Restricts or permits the use of Bikini-tagged items depending on the mode selected.<br />
	This license supports two mutually exclusive configurations, Restriction and Exemption, each governing how Bikini items interact with the other licenses.
</p>

<ul>
	<li>
		<em>Mode: Bikini License (Restriction setting)</em><br />
		In this mode, the Bikini License functions as a minimal outfit allowance until more comprehensive licenses are acquired. If the player holds only a Bikini License and lacks both Armor and Clothing Licenses, they are permitted to wear items classified as Bikini. If the player later acquires an Armor or Clothing License, the restriction is lifted and they may wear any licensed item. Upgrade path logic: Bikini → Clothing → Armor
	</li>
	<li>
		<em>Mode: Bikini Exemption (Exemption setting)</em><br />
		In this mode, Bikini rules act as an overriding restriction. Even if the player holds Armor or Clothing Licenses, they are still limited to Bikini items unless they also hold a Bikini Exemption. If the Bikini Exemption is acquired, the player gains the ability to wear any clothing or armor item, as permitted by their other licenses. Upgrade path logic: Clothing → Armor → Bikini
	</li>
</ul>

<p>
	<em>Keyword Filtering Behavior</em><br />
	Items are identified as Bikini-compatible using keyword filters. The default keyword BM_LicensesBikiniItem is always active. Additional keywords—such as EroticArmor from SexLab Aroused—can be added in the MCM. These are matched using OR logic. Custom keyword lists can be created by separating entries with commas. Due to MCM text field limits, longer keyword lists should be added and imported via settings.json. LPO allows up to 32 keyword entries total (of which one slot is always occupied by BM_LicensesBikiniItem). Exceeding the MCM limit will not corrupt data unless the imported array is re-saved in-game through the text box. This keyword system defines what counts as a “Bikini item” under both Restriction and Exemption modes.<br />
	<br />
	<strong>Clothing License</strong><br />
	Restricts items tagged with VendorItemClothing.<br />
	If enabled, the player cannot equip any clothing unless they hold a Clothing License. This functions like a player-only nudity law. Most appropriately used with mods like kaxat’s SES or Corsec’s non-DD patches, where NPC behavior also reflects clothing logic. Less immersive if only the player is affected.
</p>

<p>
	 
</p>

<p>
	<strong>Magic License</strong>
</p>

<p>
	Restricts the following: wielding spells; casting spells; using dragon shouts; using or equipping enchanted items.
</p>

<p>
	Note that Enchanted Clothing qualifies as both a magic and clothing item. Vice versa for all the other applicable item types. A Nullify Magicka curse is available for you to enable. If no valid source is selected for the curse, guards will not fine individuals without the curse. If there is a valid source, however, the player will incur a fine unless they are cursed. The curse can be applied from either a collar or a spell. The former option requires Devious Devices. Since the enchantment is applied to a tangible object, the player is allowed the option to escape this curse while out-of-sight. LPO also integrates with SlaveTats to display tattoos while the player is cursed. The tattoos are not the curse itself; they simply act as indications of an active curse.
</p>

<p>
	 
</p>

<p>
	<strong>Weapon License</strong>
</p>

<p>
	Restricts items tagged with any valid vendor weapon keyword.
</p>

<p>
	Excludes staffs but covers ammo. Be sure to un-equip your ammo; Vanilla game auto-equips the player with ammo in some cases, so it's your own responsibility that you don't trigger another license violation should you already be fined for the first instance of ammo-related violation.
</p>

<p>
	 
</p>

<p>
	<strong>Crafting License</strong>
</p>

<p>
	Restricts use of all workbench furniture bar cooking pots.
</p>

<p>
	Checker runs once when you enter, once when you exit, and once every 10 seconds while you remain in-furniture without a license. If you find yourself getting caught all the time, try crafting outside settlement locations.
</p>

<p>
	 
</p>

<p>
	<strong>Trading License</strong>
</p>

<p>
	Restricts purchase of any items beyond food and jewelry.
</p>

<p>
	Items must not hold enchantments. Also prohibits the player from selling anything. Merchants will nonetheless do business with you, though they will flag you for violation. Likewise, dealing business within sight of town guards is an obvious no-no. Note that, even with a Trading License, players can't buy any equipment they don't also have a license for; players will incur a Trading Violation even if Trading License is disabled. You could try a fence or khajit caravan to trade with you free of restrictions. Equipment trading validation operates adjacent to the Trading License feature and can be disabled separately.
</p>

<p>
	 
</p>

<p>
	<strong>Curfew Exemption</strong>
</p>

<p>
	Restricts lollygagging after-hours.
</p>

<p>
	This feature ignores location filters. Curfew start and end times can be changed via the MCM. Internally, LPO waits about 10 seconds after violation detection before flagging you for an active bounty event. The delay helps guard against small player mistakes. Additionally, LPO provides a once-per-day Curfew Leniency pass - guards won't take your gold for the first Curfew Violation of each day. Regardless, once caught, you'll be sent to either the closest inn or the enforcing guard's jail if an inn couldn't be located within a suitable distance from your character. Location overhauls may add inn markers outside city worldspaces; if so, you'll want to disable "Differentiate Worldspaces" if you use the Travel Permit feature.
</p>

<p>
	 
</p>

<p>
	<strong>Travel Permit</strong>
</p>

<p>
	Restricts travel outside registered locations.
</p>

<p>
	If you enabled this feature while in Whiterun City, your recorded location is Whiterun City. If enabled in Riverwood, vice versa. This feature is only enforced with both City and Town locations, disregarding your locational filters. Purchasing a permit will allow you free travel out of your recorded location. Ultimately, what happens with this permit feature depends on the circumstances. 1) If you are found safe inside a town or city, or forfeited your permit for an early expiration, you will not incur a fine; 2) If you were discovered outside a settlement location but are confronted inside a settlement, you'll receive a fine while your current location becomes your recorded, enforced location; 3) If you are discovered and confronted outside a settlement location, you may be arrested and sent to Jail. Enforcement ignores locational filters. If enabled, followers will allow you immunity from Travel rules.
</p>

<p>
	 
</p>

<p>
	<strong>Life Insurance</strong>
</p>

<p>
	Restricts primary license privileges.
</p>

<p>
	Enabling the Insurance option causes guards to ignore primary license rules unless you also have an insurance on-hand. For example, guards will flag you for an Armor Violation even if you have an Armor License. However, if you do have an Insurance, you'll be protected from item confiscations regardless of your other license validities. Holding a Life Insurance along with an equipment license will allow you to resume standard privileges with applicable equipment. Beware that Insurance prices are variable by way of two modifiers. These multipliers cannot be disabled, and only the misbehavior modifier can be reset when disabling the mod as a whole.
</p>

<p>
	 
</p>

<p>
	<strong>Whore License</strong>
</p>

<p>
	Restricts prostitution.
</p>

<p>
	<em>Dummy feature. LPO mainly handles purchase and expiry. External scripts may optionally flag a Whore Violation for LPO to handle punishment. Check utility script for integration. The following are mods known to integrate with LPO for this feature: Autonomous Sex Framework by kaxat; Devious Interests by Taki17; Simple Player Prostitution by mort65; TDF Enhanced Prostitution by Horred.</em>
</p>

<p>
	 
</p>

<p>
	<strong>Collar Exemption</strong>
</p>

<p>
	Enforces collars.
</p>

<p>
	Enabling this feature will require you to wear a Devious Devices collar. LPO checks for items tagged with zad_DeviousCollar. Guards will automatically equip you with a collar should they catch you without one, regardless of if you've enabled the option to equip restraints on license violation. Guards will remove your collar after you purchase an exemption. However, if you've designated a collar as your Nullify Magicka curse source, guards will instead disenchant your collar.
</p>
]]></description><guid isPermaLink="false">20117</guid><pubDate>Sun, 29 Oct 2023 03:37:45 +0000</pubDate></item></channel></rss>
