Jump to content

Recommended Posts

Mod Tweaks

View File

A compilation of various edits for various mods.

 

Some edits are applied to script files. These patches should not be installed while the relevant script is running. If in doubt, stop the event and save in a quiet interior cell.

 

Other attached plugins are edits with an emphasis on making up for mod deficiencies in vocabulary and grammar. Most edits were done to the plugin itself, rather than applied as a patch, to simplify editing and installation process. However, future updates (if any) will likely come as patches. Plugin replacers are preferred if the mod 1) isn't broken; 2) has very few dialogue lines; and/or 3) will not undergo any more updates.

 

All plugin replacers and patches here require the original mod.

 

Expand a spoiler to see justification, credits, and other details.

 

Plugins and patches will be removed if the relevant changes are applied to the mod or a continuation of that mod, or if they are re-hosted on your listing. You don't need to credit me tbh. If you're a mod author and are adamant that parts of your mod should not be re-hosted, even if altered, simply request its removal from this listing. 

 

SexLab Solutions Revisited 1.1.5 by janbui, conversion by nomkaz

Spoiler

Patch

Justification: Carries over dialogue edits from USSEP. Using SexLab Solutions as is will lose you USSEP dialogue edits. Only guaranteed to sync with USSEP 4.2.9a (USSEP for Skyrim AE/1.6).

Requires USSEP. May be used with non-1.6 USSEP and Skyrim versions.

 

Made with help from Corsec.

 

Body Search 20190814 by Suzutsuki

Spoiler

Plugin Replacer

Justification: Dialogue patch required consistency to better fit alongside Skyrim's vanilla dialogue. Furthermore, the patch contained multiple sentences that sounded better read than said. Thus, the justified patch doubles as preparation for any xVAsynth and other voice add-ons.


This is a summary of changes made:

- Carried over conditional in dialogue Form which was missing in the original dialogue patch, just in case

- Enforced consistency in use of period and reduces use of ellipses

- Changed Guard use of we/we're to I/I'm for specificity

- Improve forcefulness of dialogue

- Increased use of apostrophe for contractions. Makes dialogue sound more natural

And some other changes.

Dialogue edits are based on WandererZero's edits. Satisfactory lines were obviously preserved rather than re-done or changed. My revised plugin should not be overwritten by their dialogue patch.

 

Patch: Devious Devices Patch

Justification: Disables ForceGreet package if PC has anal plugs, chastity belt, or heavy bondage equipped.

Requires Devious Devices SE

 

Sexist Guards 2.91 by JimmyJimJim, conversion by Sarevok - Status: Partial

Spoiler

Plugin Replacer

Justification: This is a major and thorough correction of dialogue lines. Maintained British English consistency. Plugin required massive overhaul of dialogue to improve readability.

 

The following changes were made:

- Removed overuse of ellipses. Replaced with periods or em-dashes where appropriate

- Enforced grammar, style, and capitalization consistency

- Fixed misspellings

- Improved natural-ness of dialogue

Due to the implemented changes, xVAsynth voices based on the original plugin won't be compatible with this dialogue-patched plugin. Well, you could use them together, but will it work? Even if it works, what you hear won't be what is said.

Revised up to 03005543. 

Are you adept with English and a program that can edit .ESPs? Or, are you someone that believes that narration and self-dialogue is better suited as present-tense rather than past-tense? You might be interested in my other working plugin. I wouldn't recommend it for anyone who wants tense consistency notwithstanding my plugin's incomplete revision status.

 

Slap da Butt SE 2.0.0 beta 1 by ballsy and Suzutsuki, conversion by MajorArc

Spoiler

Patch

Description: This patch helps with actor alignments by preventing interference from Precision's character bumper. Otherwise, the NPC actor just bounces around, and you'd have to manually disable the character bumper each time the animation plays.

 

Precision_Utility.ToggleDisableActor(akRef, true)
Precision_Utility.ToggleDisableActor(PlayerRef, true)

Precision_Utility.ToggleDisableActor(akRef, false)
Precision_Utility.ToggleDisableActor(PlayerRef, false)

 

Requires Precision (actually a soft requirement, but why else would you use this patch?)

Recommended: Slap da Butt patch by kapo001 to improve event conditionals.

 

SexLab by Ashal, SLGP by alex77r4

Spoiler

Patch 01

Allows SLGP's script to also enable and disable Precision's character bumper mesh where appropriate. Also updates original SLGP script base from SexLab 1.63 to 1.66. 

Requirement: Precision

 

Patch 02

In addition to the above changes, forward's BarnJoey's changes for SexLab compatibility with Improved Camera.

Requirement: Improved CameraPrecision

 

HDT Ahegao Tongues by Throwaway4Nexus

Spoiler

Fixes some script spam in HDT Ahegao Tongues 1.3.1. Compiled on top of krzp's Slot 40 patch. Comes bundled with krzp's patch.

 

No extra requirements necessary besides HDT Ahegao Tongues 1.3.1.

 

Dirt and Blood by jayserpa + SexLab Cum Overlays Extended by PonziPyramid

Spoiler

Patches for the bathing script. There are three different variations, each with their own different requirements. I provide these script as is.

 

1. Patch 01 requires the following: Dirt and Blood, Dirt and Blood and Cum, Dirt and Blood Expanded, and Dirt and Blood Expanded Animation Patch. Make sure you have the correct DBC (Dirt and Blood and Cum) patches where available and applicable.

2. Patch 02 requires the following: Dirt and Blood, Dirt and Blood Expanded, and Dirt and Blood Expanded Animation Patch.

3. Patch 03 requires the following: Dirt and Blood, Dirt and Blood Animation Patch.

 

Relevant Links:

Dirt & Blood & Cum

Dirt and Blood Expanded

Dirt and Blood (Expanded) animation patch

 

Other modifications

Gunslicer Animation Replacer OAR version (with fixes by BluebirdXVO)

Download in thread comment

 

Gunslicer Human + Creature SLAL behavior.hkx patch

Download in thread comment

 

---

Permissions:

Please avoid verbatim re-uploads in consideration of any possible confusion by your fellow site users. You are otherwise free to use these files for any personal intent or improve these files and share those improvements. In particular for plugins: If you've altered or improved a plugin, or otherwise done so in such a way that renders my plugin unnecessary, please let me know so I can either upload it here or take my version down. No credits necessary should you upload your plugin changes as I don't need oversight over your actions. Your permissions to use these files are not from me but rather (must be) derived from their respective original authors; Only contact me if my files have been superseded.


  • Submitter
  • Submitted
    08/28/2023
  • Category
  • Requires
    Variable. Check page for details.
  • Regular Edition Compatible
    Not Applicable

 

Link to comment
11 hours ago, yencrown12 said:

Question: Will this affect dialogue which are voice generated.

Yes. Someone correct me if I'm wrong, but I believe the voice file will play, but you will experience a mismatch between what you hear and what is said according to the subtitle.

Link to comment
3 hours ago, Gyra said:

Yes. Someone correct me if I'm wrong, but I believe the voice file will play, but you will experience a mismatch between what you hear and what is said according to the subtitle.

 

That's what I'd expect to happen. Also, the lip syncing will be based on the original dialogue and not the edited dialogue. If you want to keep lip sync as close as possible then you'd probably need to preserve the syllable count. I doubt it's important though, if people are using your patches then they are probably reading the subtitles and ignoring the NPCs face. If people are watching the face and ignoring the subtitles, then why even download your mod because they won't notice your edits to the subtitles lol.

Link to comment
  • 3 weeks later...

20230917-2

BM Licenses

- Resolved None object errors and malfunctioning location check function. Added BM_Player as script property for BM_Licenses + a bunch of other small fixes that I can't be assed to remember.

- Removed location check functions from OnCellLoad and OnLocationChange. They'll only activate to stop the Bounty Quest.

- Changed default License Seller Faction value from 0 to 1 so to mirror base BM Licenses 1.1.0 seller default.

 

With apologies to the 11 or so people who downloaded 20230917-1 file with an incorrectly processed script that skipped some CK steps.

Link to comment

A short and hastily written manual for my BM Licenses Patch:

 

Whore License:

Dummy feature. This mod only handles purchase and MCM tracking of expiry - validity decay. As such, this mod does not enforce the Whore License. TDF Enhanced Prostitution may hook into this feature later in the future. We'll see.

 

Travel Permit:

"Women shouldn't travel beyond city and town borders. My Jarl, perhaps we should restrict our women's freedom of movement."

This feature prevents you from leaving the location which you were first registered with. 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. If your permit expires, make your way to a City or Town. If you *were* noticed outside a City or Town with an invalid or missing permit, you'll incur a fine. Ultimately, what happens with this permit feature depends on the circumstances. 1) If you are found safe inside a town or city, you will not incur a fine; 2) If you are 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.

 

Collar Exemption:

"Our lands are filled with strife, and there is no woman who is free but she who pays for her own illusion."

This feature ignores but does not entirely negate your DD-on-violation settings. Enabling this feature requires that your player character wear a strictly Devious Devices collar lest they incur a fine. Guards (enforcers) will automatically equip you with a collar should they catch you without one, regardless if you've enabled the option to equip DD on license violation. Purchasing this exemption will prevent you from getting a fine without a collar, but the guards won't unequip it for you should you be wearing one. Take it off by yourself, you lazy ass.

 

Insurance:

"Women are livestock to be bred. Their lives must be insured so that the Hold may recoup their loss should any one of them die. Who else to insure a woman but herself?"

Think SLS's option for guards to ignore your held licenses while you're in town. Enabling the Insurance option causes guards to ignore license rules unless you also have an insurance on-hand. In effect, the Insurance is a catch-all second condition that must be satisfied in addition to the other individual licenses. If locational filters are disabled, Insurance acts more so as a second tax that the player has to pay. If locational filters are enabled, Insurance becomes more of a roleplay element that impedes use of equipment within settlements while being more lenient on rules while player is outside settlements. Best to use this feature with Slaverun Standsalone or one of Corsec's non-DD patches for vanilla female NPCs. Purchasing insurance will allow you to resume standard privileges with your other on-hand equipment licenses.

Beware that, from 1.1.0-0.10 onwards, Insurance prices are variable by way of two modifiers. These multipliers cannot be disabled, and only the misbehaviour modifier can be reset when disabling the mod as a whole.

Edited by Gyra
Link to comment

Updated from BMLicenses_Archive_20230919 to BMLicenses_Archive_20230922 mid-save.

Enabled Travel License while in Whiterun, run outside and got the notification that I was detected away from town. Also a few NPCs commented that I am not allowed to leave without a travel permit.

However upon returning to Whiterun guards did not approached me, and even when greeting them no bounty was present. Equipping forbidden spells also did not occurred an approach.

 

Will have to test some more.

Link to comment
5 hours ago, Someone92 said:

Also a few NPCs commented that I am not allowed to leave without a travel permit.

Wait, even non-Guard NPCs are making a comment? The NPC gender/sex check must be borked.

 

You may have found a logic error, in which case lmk the exact settings you’ve enabled after your further tests.

 

I installed 0922 over 0919, enabled the permit, traveled to Whiterun Watchtower, tp’d back to Whiterun, and was arrested by the inner gate guard right after my game loaded.

Link to comment
7 hours ago, Someone92 said:

However upon returning to Whiterun guards did not approached me, and even when greeting them no bounty was present. Equipping forbidden spells also did not occurred an approach.

With 0922-2, guards should now approach you if you have a travel violation during any interval check or loc/cell change. But guards still aren't really responsive, especially in the case of travel violations. I'll see if I can manage to incorporate a proximity detection poll by assigning a certain number of guards in a location as 'observers' rather than active bounty enforcers.

 

As for the latter, spells should cause violation when you "equip" them without a magic license. I'll need more info on the issue's conditions and context.

Edited by Gyra
Link to comment

Newest version registers violations again. Haven'T tested the travel permit yet.

Noticed a bug with clothing, and possible armor license. Foot armor is not removed.

Dunno if bug, but if you run away from a guard long enough it loses interest, and as long as you do not equip clothing / armor / weapons / spells you can just continue ignoring the license you had previously broken.

 

2 hours ago, Gyra said:

Wait, even non-Guard NPCs are making a comment? The NPC gender/sex check must be borked.

Oh, it was not an intended feature?

I found it a nice addition that random citizen comment on that. ?

 

I think it were NPCs from Travellers of Skyrim - Travelers SSE

https://www.nexusmods.com/skyrimspecialedition/mods/1973?tab=description 

Link to comment
On 9/22/2023 at 12:03 PM, Someone92 said:

Noticed a bug with clothing, and possible armor license. Foot armor is not removed.

Fixed. Will be in the next update. 

 

On 9/22/2023 at 12:03 PM, Someone92 said:

Dunno if bug, but if you run away from a guard long enough it loses interest, and as long as you do not equip clothing / armor / weapons / spells you can just continue ignoring the license you had previously broken.

Not a bug. BananasManiac had setup the bounty quest to auto-stop after 30 seconds, but the quest should be called again after the next check should you still be in violation of a license rule. It's better this way since we only designate a single chaser/enforcer NPC for performance reasons. If the NPC can't get to you, you win and get a break for a short while. If the NPC gets stuck, the quest stops after 30 seconds anyway so that it may choose another NPC close to you.

 

On 9/22/2023 at 12:03 PM, Someone92 said:

Oh, it was not an intended feature?

I found it a nice addition that random citizen comment on that. ?

Lol it'd be better if that feature is incorporated with a separate mod for modularity reasons. It'd be nice if that was intended, but it's not, so it is a tad worrying should it interfere with something else down the road. Can you give me the exact line that NPC said? In the meantime, I'll add a secondary dialogue conditional check that I'm assuming is the cause of your issue.

 

 

Edited by Gyra
Link to comment

With the latest version of BM_Licenses (i.e. BMLicenses_Archive_20230922-2.zip) as soon as I move more then 3 steps or so I'm getting some notification spam. (Periodic checks is disabled and the frequency is higher then the 45 sec. set there anywway) only standing completely still somewhere avoids that problem:
calling checkForViolations() from BM_Player
transferred from checkforviolations


There are also some papyrus warnings:

 

Spoiler
[09/23/2023 - 04:08:14PM] Error: Cannot call IsSameLocation() on a None object, aborting function call
stack:
	[alias Player on quest BM_Licenses (FE092D62)].BM_Player.checkIsInCity() - "BM_Player.psc" Line 257
	[BM_Licenses (FE092D62)].BM_Licenses.OnUpdate() - "BM_Licenses.psc" Line 71
[09/23/2023 - 04:08:14PM] WARNING: Assigning None to a non-object variable named "::temp41"
stack:
	[alias Player on quest BM_Licenses (FE092D62)].BM_Player.checkIsInCity() - "BM_Player.psc" Line 257
	[BM_Licenses (FE092D62)].BM_Licenses.OnUpdate() - "BM_Licenses.psc" Line 71
[09/23/2023 - 04:08:14PM] Error: Cannot call IsSameLocation() on a None object, aborting function call
stack:
	[alias Player on quest BM_Licenses (FE092D62)].BM_Player.checkIsInCity() - "BM_Player.psc" Line 257
	[BM_Licenses (FE092D62)].BM_Licenses.OnUpdate() - "BM_Licenses.psc" Line 71
[09/23/2023 - 04:08:14PM] WARNING: Assigning None to a non-object variable named "::temp41"
stack:
	[alias Player on quest BM_Licenses (FE092D62)].BM_Player.checkIsInCity() - "BM_Player.psc" Line 257
	[BM_Licenses (FE092D62)].BM_Licenses.OnUpdate() - "BM_Licenses.psc" Line 71
[09/23/2023 - 04:08:14PM] Error: Cannot call IsSameLocation() on a None object, aborting function call
stack:
	[alias Player on quest BM_Licenses (FE092D62)].BM_Player.checkIsInCity() - "BM_Player.psc" Line 257
	[BM_Licenses (FE092D62)].BM_Licenses.OnUpdate() - "BM_Licenses.psc" Line 71
[09/23/2023 - 04:08:14PM] WARNING: Assigning None to a non-object variable named "::temp41"
stack:
	[alias Player on quest BM_Licenses (FE092D62)].BM_Player.checkIsInCity() - "BM_Player.psc" Line 257
	[BM_Licenses (FE092D62)].BM_Licenses.OnUpdate() - "BM_Licenses.psc" Line 71
[09/23/2023 - 04:08:14PM] Error: Cannot call IsSameLocation() on a None object, aborting function call
stack:
	[alias Player on quest BM_Licenses (FE092D62)].BM_Player.checkIsInCity() - "BM_Player.psc" Line 257
	[BM_Licenses (FE092D62)].BM_Licenses.OnUpdate() - "BM_Licenses.psc" Line 71
[09/23/2023 - 04:08:14PM] WARNING: Assigning None to a non-object variable named "::temp41"
stack:
	[alias Player on quest BM_Licenses (FE092D62)].BM_Player.checkIsInCity() - "BM_Player.psc" Line 257
	[BM_Licenses (FE092D62)].BM_Licenses.OnUpdate() - "BM_Licenses.psc" Line 71
[09/23/2023 - 04:08:14PM] Error: Cannot call IsSameLocation() on a None object, aborting function call
stack:
	[alias Player on quest BM_Licenses (FE092D62)].BM_Player.checkIsInCity() - "BM_Player.psc" Line 257
	[BM_Licenses (FE092D62)].BM_Licenses.OnUpdate() - "BM_Licenses.psc" Line 71
[09/23/2023 - 04:08:14PM] WARNING: Assigning None to a non-object variable named "::temp41"
stack:
	[alias Player on quest BM_Licenses (FE092D62)].BM_Player.checkIsInCity() - "BM_Player.psc" Line 257
	[BM_Licenses (FE092D62)].BM_Licenses.OnUpdate() - "BM_Licenses.psc" Line 71
[09/23/2023 - 04:08:14PM] Error: Cannot call IsSameLocation() on a None object, aborting function call
stack:
	[alias Player on quest BM_Licenses (FE092D62)].BM_Player.checkIsInCity() - "BM_Player.psc" Line 257
	[BM_Licenses (FE092D62)].BM_Licenses.OnUpdate() - "BM_Licenses.psc" Line 71
[09/23/2023 - 04:08:14PM] WARNING: Assigning None to a non-object variable named "::temp41"
stack:
	[alias Player on quest BM_Licenses (FE092D62)].BM_Player.checkIsInCity() - "BM_Player.psc" Line 257
	[BM_Licenses (FE092D62)].BM_Licenses.OnUpdate() - "BM_Licenses.psc" Line 71
[09/23/2023 - 04:08:14PM] Error: Cannot call IsSameLocation() on a None object, aborting function call
stack:
	[alias Player on quest BM_Licenses (FE092D62)].BM_Player.checkIsInCity() - "BM_Player.psc" Line 257
	[BM_Licenses (FE092D62)].BM_Licenses.OnUpdate() - "BM_Licenses.psc" Line 71
[09/23/2023 - 04:08:14PM] WARNING: Assigning None to a non-object variable named "::temp41"
stack:
	[alias Player on quest BM_Licenses (FE092D62)].BM_Player.checkIsInCity() - "BM_Player.psc" Line 257
	[BM_Licenses (FE092D62)].BM_Licenses.OnUpdate() - "BM_Licenses.psc" Line 71
[09/23/2023 - 04:08:14PM] Error: Cannot call IsSameLocation() on a None object, aborting function call
stack:
	[alias Player on quest BM_Licenses (FE092D62)].BM_Player.checkIsInCity() - "BM_Player.psc" Line 257
	[BM_Licenses (FE092D62)].BM_Licenses.OnUpdate() - "BM_Licenses.psc" Line 71
[09/23/2023 - 04:08:14PM] WARNING: Assigning None to a non-object variable named "::temp41"
stack:
	[alias Player on quest BM_Licenses (FE092D62)].BM_Player.checkIsInCity() - "BM_Player.psc" Line 257
	[BM_Licenses (FE092D62)].BM_Licenses.OnUpdate() - "BM_Licenses.psc" Line 71
[09/23/2023 - 04:08:14PM] Error: Cannot call IsSameLocation() on a None object, aborting function call
stack:
	[alias Player on quest BM_Licenses (FE092D62)].BM_Player.checkIsInCity() - "BM_Player.psc" Line 257
	[BM_Licenses (FE092D62)].BM_Licenses.OnUpdate() - "BM_Licenses.psc" Line 71
[09/23/2023 - 04:08:14PM] WARNING: Assigning None to a non-object variable named "::temp41"
stack:
	[alias Player on quest BM_Licenses (FE092D62)].BM_Player.checkIsInCity() - "BM_Player.psc" Line 257
	[BM_Licenses (FE092D62)].BM_Licenses.OnUpdate() - "BM_Licenses.psc" Line 71
[09/23/2023 - 04:08:14PM] Error: Cannot call IsSameLocation() on a None object, aborting function call
stack:
	[alias Player on quest BM_Licenses (FE092D62)].BM_Player.checkIsInCity() - "BM_Player.psc" Line 257
	[BM_Licenses (FE092D62)].BM_Licenses.OnUpdate() - "BM_Licenses.psc" Line 71
[09/23/2023 - 04:08:14PM] WARNING: Assigning None to a non-object variable named "::temp41"
stack:
	[alias Player on quest BM_Licenses (FE092D62)].BM_Player.checkIsInCity() - "BM_Player.psc" Line 257
	[BM_Licenses (FE092D62)].BM_Licenses.OnUpdate() - "BM_Licenses.psc" Line 71
[09/23/2023 - 04:08:14PM] Error: Cannot call IsSameLocation() on a None object, aborting function call
stack:
	[alias Player on quest BM_Licenses (FE092D62)].BM_Player.checkIsInTown() - "BM_Player.psc" Line 269
	[BM_Licenses (FE092D62)].BM_Licenses.OnUpdate() - "BM_Licenses.psc" Line 72
[09/23/2023 - 04:08:14PM] WARNING: Assigning None to a non-object variable named "::temp48"
stack:
	[alias Player on quest BM_Licenses (FE092D62)].BM_Player.checkIsInTown() - "BM_Player.psc" Line 269
	[BM_Licenses (FE092D62)].BM_Licenses.OnUpdate() - "BM_Licenses.psc" Line 72
[09/23/2023 - 04:08:14PM] Error: Cannot call IsSameLocation() on a None object, aborting function call
stack:
	[alias Player on quest BM_Licenses (FE092D62)].BM_Player.checkIsInTown() - "BM_Player.psc" Line 269
	[BM_Licenses (FE092D62)].BM_Licenses.OnUpdate() - "BM_Licenses.psc" Line 72
[09/23/2023 - 04:08:14PM] WARNING: Assigning None to a non-object variable named "::temp48"
stack:
	[alias Player on quest BM_Licenses (FE092D62)].BM_Player.checkIsInTown() - "BM_Player.psc" Line 269
	[BM_Licenses (FE092D62)].BM_Licenses.OnUpdate() - "BM_Licenses.psc" Line 72
[09/23/2023 - 04:08:14PM] Error: Cannot call IsSameLocation() on a None object, aborting function call
stack:
	[alias Player on quest BM_Licenses (FE092D62)].BM_Player.checkIsInTown() - "BM_Player.psc" Line 269
	[BM_Licenses (FE092D62)].BM_Licenses.OnUpdate() - "BM_Licenses.psc" Line 72
[09/23/2023 - 04:08:14PM] WARNING: Assigning None to a non-object variable named "::temp48"
stack:
	[alias Player on quest BM_Licenses (FE092D62)].BM_Player.checkIsInTown() - "BM_Player.psc" Line 269
	[BM_Licenses (FE092D62)].BM_Licenses.OnUpdate() - "BM_Licenses.psc" Line 72
[09/23/2023 - 04:08:14PM] Error: Cannot call IsSameLocation() on a None object, aborting function call
stack:
	[alias Player on quest BM_Licenses (FE092D62)].BM_Player.checkIsInTown() - "BM_Player.psc" Line 269
	[BM_Licenses (FE092D62)].BM_Licenses.OnUpdate() - "BM_Licenses.psc" Line 72
[09/23/2023 - 04:08:14PM] WARNING: Assigning None to a non-object variable named "::temp48"
stack:
	[alias Player on quest BM_Licenses (FE092D62)].BM_Player.checkIsInTown() - "BM_Player.psc" Line 269
	[BM_Licenses (FE092D62)].BM_Licenses.OnUpdate() - "BM_Licenses.psc" Line 72
[09/23/2023 - 04:08:14PM] Error: Cannot call IsSameLocation() on a None object, aborting function call
stack:
	[alias Player on quest BM_Licenses (FE092D62)].BM_Player.checkIsInTown() - "BM_Player.psc" Line 269
	[BM_Licenses (FE092D62)].BM_Licenses.OnUpdate() - "BM_Licenses.psc" Line 72
[09/23/2023 - 04:08:14PM] WARNING: Assigning None to a non-object variable named "::temp48"
stack:
	[alias Player on quest BM_Licenses (FE092D62)].BM_Player.checkIsInTown() - "BM_Player.psc" Line 269
	[BM_Licenses (FE092D62)].BM_Licenses.OnUpdate() - "BM_Licenses.psc" Line 72
[09/23/2023 - 04:08:14PM] Error: Cannot call IsSameLocation() on a None object, aborting function call
stack:
	[alias Player on quest BM_Licenses (FE092D62)].BM_Player.checkIsInTown() - "BM_Player.psc" Line 269
	[BM_Licenses (FE092D62)].BM_Licenses.OnUpdate() - "BM_Licenses.psc" Line 72
[09/23/2023 - 04:08:14PM] WARNING: Assigning None to a non-object variable named "::temp48"
stack:
	[alias Player on quest BM_Licenses (FE092D62)].BM_Player.checkIsInTown() - "BM_Player.psc" Line 269
	[BM_Licenses (FE092D62)].BM_Licenses.OnUpdate() - "BM_Licenses.psc" Line 72
[09/23/2023 - 04:08:14PM] Error: Cannot call IsSameLocation() on a None object, aborting function call
stack:
	[alias Player on quest BM_Licenses (FE092D62)].BM_Player.checkIsInTown() - "BM_Player.psc" Line 269
	[BM_Licenses (FE092D62)].BM_Licenses.OnUpdate() - "BM_Licenses.psc" Line 72
[09/23/2023 - 04:08:14PM] WARNING: Assigning None to a non-object variable named "::temp48"
stack:
	[alias Player on quest BM_Licenses (FE092D62)].BM_Player.checkIsInTown() - "BM_Player.psc" Line 269
	[BM_Licenses (FE092D62)].BM_Licenses.OnUpdate() - "BM_Licenses.psc" Line 72
[09/23/2023 - 04:08:14PM] Error: Cannot call IsSameLocation() on a None object, aborting function call
stack:
	[alias Player on quest BM_Licenses (FE092D62)].BM_Player.checkIsInTown() - "BM_Player.psc" Line 269
	[BM_Licenses (FE092D62)].BM_Licenses.OnUpdate() - "BM_Licenses.psc" Line 72
[09/23/2023 - 04:08:14PM] WARNING: Assigning None to a non-object variable named "::temp48"
stack:
	[alias Player on quest BM_Licenses (FE092D62)].BM_Player.checkIsInTown() - "BM_Player.psc" Line 269
	[BM_Licenses (FE092D62)].BM_Licenses.OnUpdate() - "BM_Licenses.psc" Line 72

 

 

Link to comment
4 hours ago, Talesien said:

With the latest version of BM_Licenses (i.e. BMLicenses_Archive_20230922-2.zip) as soon as I move more then 3 steps or so I'm getting some notification spam. (Periodic checks is disabled and the frequency is higher then the 45 sec. set there anywway) only standing completely still somewhere avoids that problem:
calling checkForViolations() from BM_Player
transferred from checkforviolations

3 seconds is very abnormal. That is an exceedingly short time span, which I can only assume, without more context, is because you're moving across or between cells or locations at too fast of a pace.

What you did help me realize is that the Interval Check MCM option doesn't properly unregister itself when disabled, so I've fixed that part. With the new update, check for the frequency of the "Running Check" notification and let me know how often that occurs.

 

On that note, JIC the notifications you're referring to are benign and just there to help me debug. I've removed some of them, now.

 

4 hours ago, Talesien said:

There are also some papyrus warnings:

I'd appreciate it if you could re-test with the new version as well.

Link to comment

TYSM for fixing the dialogue in SL approach!  I have installed the lastest version of that mod and immediately noted the improvement! So glad your fix got incorporated into that update. I had stopped using that mod previously because of the wonky English dialogue.

Link to comment
On 9/22/2023 at 10:10 PM, Gyra said:

Lol it'd be better if that feature is incorporated with a separate mod for modularity reasons

Yeah, my first thoughts when I encountered that were "Wow, that's nice" and "Feature creep!".

 

The newest version gives message notifications. Such as "Running Check" and "Starting Bounty Quest".

Link to comment
3 hours ago, Someone92 said:

The newest version gives message notifications. Such as "Running Check" and "Starting Bounty Quest".

Purely for debug purposes since Talesian said they were getting a Violation Check every 3 seconds. Most if not all of these notifications should be removed in 1.1.0-0.11.

Link to comment

Insurance modifier behaviours, if anyone is interested:

 

On License Violations:

Spoiler
Float Function insuranceModifierViolation()
    ; Define weights for each infraction (adjust as needed)
    Float weightArmor = 0.3 * (licenses.isArmorViolation as float)
    Float weightMagic = 0.2 * (licenses.isMagicViolation as float)
    Float weightWeapon = 0.2 * (licenses.isWeaponViolation as float)
    Float weightTravel = 0.1 * (licenses.isTravelViolation as float)
    Float weightCollar = 0.2 * (licenses.isCollarViolation as float)
    Float weightUninsured = 0.1 * (licenses.isUninsuredViolation as float)

    Float modifier = weightArmor + weightMagic + weightWeapon + weightTravel + weightCollar + weightUninsured

    modifier = Clamp(modifier, 0.0, 1.0)

    Return modifier
EndFunction

 

 

On being imprisoned:

Spoiler
Float Function insuranceModifierJail(int aiCrimeGold)
    ; reference values: 1000 for murder, 10 for stealing
    int lowestBounty = 0
    int highestBounty = 2500

    ; data points for the modifier curve
    Float x0 = 0
    Float y0 = 0.1
    Float x1 = 500
    Float y1 = 0.3
    Float x2 = 1000
    Float y2 = 0.6
    Float x3 = 2000
    Float y3 = 1.0

    ; Clamp the aiCrimeGold just in case
    aiCrimeGold = Clamp(aiCrimeGold, lowestBounty, highestBounty)

    ; Linear interpolation
    Float modifier

    If aiCrimeGold < x0
        modifier = y0
    ElseIf aiCrimeGold >= x0 && aiCrimeGold < x1
        modifier = y0 + (y1 - y0) * (aiCrimeGold - x0) / (x1 - x0)
    ElseIf aiCrimeGold >= x1 && aiCrimeGold < x2
        modifier = y1 + (y2 - y1) * (aiCrimeGold - x1) / (x2 - x1)
    ElseIf aiCrimeGold >= x2 && aiCrimeGold < x3
        modifier = y2 + (y3 - y2) * (aiCrimeGold - x2) / (x3 - x2)
    Else
        modifier = y3
    EndIf

    Return modifier
EndFunction

 

 

On accruing fame:

Spoiler
Float Function insuranceModifierFame()
    Quest[] fame = new Quest[4]
    fame[0] = Game.GetFormFromFile(0x02610C, "Skyrim.esm") as Quest; dragonborn
    fame[1] = Game.GetFormFromFile(0x01CEF6, "Skyrim.esm") as Quest; harbinger
    fame[2] = Game.GetFormFromFile(0x01F258, "Skyrim.esm") as Quest; arch-mage
    fame[3] = Game.GetFormFromFile(0x096E71, "Skyrim.esm") as Quest; Civil War: Siege any City, radiant quest
    float fameCount = 0.0
    int i = 0
    while i < fame.Length
        if fame[i].IsCompleted()
            fameCount += 1.0
        endIf
        i += 1
    EndWhile
    return (fameCount / fame.Length)
EndFunction

 

 

Modifiers based on crime gold and license violations are multiplicative; if you commit too many crimes, you'll find that the insurance premiums that the Hold is making you pay for yourself will skyrocket. Modifiers based on fame cap at 2.0x, updates depending on which quest you've finished.

Edited by Gyra
Link to comment
On 9/23/2023 at 11:18 PM, Gyra said:

3 seconds is very abnormal. That is an exceedingly short time span, which I can only assume, without more context, is because you're moving across or between cells or locations at too fast of a pace.

What you did help me realize is that the Interval Check MCM option doesn't properly unregister itself when disabled, so I've fixed that part. With the new update, check for the frequency of the "Running Check" notification and let me know how often that occurs.

 

On that note, JIC the notifications you're referring to are benign and just there to help me debug. I've removed some of them, now.

 

I'd appreciate it if you could re-test with the new version as well.

Seems to have fixed both problems. There is still a periodic 'Running checks' notification, but its nowhere as frequent anymore. Personally, I would like an MCM option to disable those completely, but it's not too annoying anymore. Thank you for your diligent work, you certainly improved the licenses mod notably. ^^

Link to comment
5 hours ago, Gyra said:

Modifiers based on crime gold and license violations are multiplicative; if you commit too many crimes, you'll find that the insurance premiums that the Hold is making you pay for yourself will skyrocket. Modifiers based on fame cap at 2.0x, updates depending on which quest you've finished.

Honestly, I think I would like an option where fame and titles actually decreases the cost. Misogyny or not, the powerful and famous always seem to get "special deals".

Link to comment
31 minutes ago, Talesien said:

Honestly, I think I would like an option where fame and titles actually decreases the cost. Misogyny or not, the powerful and famous always seem to get "special deals".

 

Maybe if the PC gets a lower gold cost, but at the cost of increased guard harassment? The guards would be more eager to harass a woman if she is famous. But that would imply an integration with fame mods, which might be more than Gyra intends. A simplfied version could maybe set some extra dialogue with conditions for vanilla quest completion (MQ and thane).

Link to comment
7 minutes ago, Corsec said:

 

Maybe if the PC gets a lower gold cost, but at the cost of increased guard harassment? The guards would be more eager to harass a woman if she is famous. But that would imply an integration with fame mods, which might be more than Gyra intends. A simplfied version could maybe set some extra dialogue with conditions for vanilla quest completion (MQ and thane).

With fame I did not imply SLSF or something similar, I've been referring to this script he posted:
 

Float Function insuranceModifierFame()
    Quest[] fame = new Quest[4]
    fame[0] = Game.GetFormFromFile(0x02610C, "Skyrim.esm") as Quest; dragonborn
    fame[1] = Game.GetFormFromFile(0x01CEF6, "Skyrim.esm") as Quest; harbinger
    fame[2] = Game.GetFormFromFile(0x01F258, "Skyrim.esm") as Quest; arch-mage
    fame[3] = Game.GetFormFromFile(0x096E71, "Skyrim.esm") as Quest; Civil War: Siege any City, radiant quest
    float fameCount = 0.0
    int i = 0
    while i < fame.Length
        if fame[i].IsCompleted()
            fameCount += 1.0
        endIf
        i += 1
    EndWhile
    return (fameCount / fame.Length)
EndFunction

So instead of insurance going up if you are DB, Archmage, etc. it would go down, as the high and mighty like to cozy up with the other high and mighty and reducing or waving "tarifs" is one way to do so, no?

Link to comment
3 hours ago, Talesien said:

Seems to have fixed both problems. There is still a periodic 'Running checks' notification, but its nowhere as frequent anymore. Personally, I would like an MCM option to disable those completely, but it's not too annoying anymore. Thank you for your diligent work, you certainly improved the licenses mod notably. ^^

Well, again so to clarify, the debug notifications you're seeing are specifically for debugging. Further, where this notification makes it more complicated, is that what you're specifically referring to indicates the Violation Check being called but not necessarily it passing the conditional. So, I wasn't sure whether you were referring to the check itself being called too frequently or were just asking for less frequent or no debug messages at all.

 

In either case, since you're still seeing the "Running Checks" notification, you're still on 1.1.0-0.10. I released 1.1.0-0.11 before your reply, which removes most if not all debug notifications that I'd been using to test my patch, so you should download the newest version.

 

2 hours ago, Talesien said:

Honestly, I think I would like an option where fame and titles actually decreases the cost. Misogyny or not, the powerful and famous always seem to get "special deals".

 

It's certainly possible to implement this. All this would be is a simple inversion of the actual cost modification formula from using multiplication to division

ex. base cost * modifier -> base cost / modifier

Edited by Gyra
Link to comment

Testing degradation rate of misbehaviour modifier. 

 

Function insuranceRateDegradation(float timeElapsed)
    if licenses.insuranceMisbehaviourMultiplier > 1.0
        licenses.insuranceMisbehaviourMultiplier -= 0.00225 * (licenses.bmlmcm.BM_InsurCost.GetValue() / licenses.bmlmcm.BM_InsurCostBase) * timeElapsed
    endIf

    if licenses.insuranceMisbehaviourMultiplier < 1.0
        licenses.insuranceMisbehaviourMultiplier = 1.0
    endIf
EndFunction

What this is meant to be is an exponential decay with coefficient 0.00225. Decay is modified by the ratio of insurance actual cost to insurance base cost, with decay being larger with a larger cost difference and growing smaller as actual cost nears base cost. The difference between actual cost and base cost should not grow smaller at a linear rate.

 

Testing with ChatGPT

Spoiler

For Person A:

Initial Modifier: 2.0

Actual Cost: 7000

Base Cost: 3500

 

For Person B:

Initial Modifier: 1.6

Actual Cost: 5600

Base Cost: 3500

 

We'll start the timer at t=0, and we'll iterate through the insuranceRateDegradation function for both Person A and Person B, calculating the new modifier at each time step. We'll stop the iteration for each person when their modifier reaches 1.0.

 

Let's calculate the time it takes for each person:

Person A (Modifier 2.0 to 1.0):

Initial Modifier: 2.0

Actual Cost: 7000

Base Cost: 3500

 

Person B (Modifier 1.6 to 1.0):

Initial Modifier: 1.6

Actual Cost: 5600

Base Cost: 3500

 

Let's calculate Person A's time first:

Person A:

Initial Modifier: 2.0

Actual Cost: 7000

Base Cost: 3500

Time Elapsed (tA): To be calculated

Using the insuranceRateDegradation function:

tA = 0 (start)

tA = 1 (Modifier 1.97375)

tA = 2 (Modifier 1.9495)

tA = 3 (Modifier 1.92525)

...

tA = 29 (Modifier 1.00625)

tA = 30 (Modifier 1.0)

So, it takes approximately 30 hours for Person A to reach a modifier of 1.0.

 

Now, let's calculate Person B's time:

Person B:

Initial Modifier: 1.6

Actual Cost: 5600

Base Cost: 3500

Time Elapsed (tB): To be calculated

Using the insuranceRateDegradation function:

tB = 0 (start)

tB = 1 (Modifier 1.596)

tB = 2 (Modifier 1.592)

tB = 3 (Modifier 1.588)

...

tB = 18 (Modifier 1.009)

tB = 19 (Modifier 1.004)

tB = 20 (Modifier 1.0)

 

So, it takes approximately 20 hours for Person B to reach a modifier of 1.0.

 

Edited by Gyra
Link to comment

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

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more information, see our Privacy Policy & Terms of Use