File information
Last updated
Original upload
Created by
powerofthree-sasnikolUploaded by
powerofthreeVirus scan
Safe to use
Current section
About this mod
SKSE plugin that can be used to add spells/perks/items/shouts/packages/outfits/keywords/factions to every NPC in the game, using config files.
- Requirements
-
Nexus requirements
Mod name Notes Address Library for SKSE Plugins For Skyrim Special Edition users. Not required for VR and Anniversary Edition powerofthree's Tweaks Hard requirement Mods requiring this file
- Permissions and credits
-
Credits and distribution permission
- Other user's assets All the assets in this file belong to the author, or are from free-to-use modder's resources
- Upload permission You can upload this file to other sites but you must credit me as the creator of the file
- Modification permission You are allowed to modify my files and release bug fixes or improve on the features so long as you credit me as the original creator
- Conversion permission You are not allowed to convert this file to work on other games under any circumstances
- Asset use permission You are allowed to use the assets in this file without permission as long as you credit me
- Asset use permission in mods/files that are being sold You are not allowed to use assets from this file in any mods/files that are being sold, for money, on Steam Workshop or other platforms
- Asset use permission in mods/files that earn donation points You are allowed to earn Donation Points for your mods if they use my assets
Author notes
This author has not provided any additional notes regarding file permissions
File credits
This author has not credited anyone else in this file
Donation Points system
This mod is opted-in to receive Donation Points
- Changelogs
-
-
Version 6.6.1
- Fix bug where default NPC outfits would be unequipped if they had distributed items
-
Version 6.6.0
- Add leveled, player teammate filter traits
- Chance is now deterministic (persists across game sessions, NPCs will either get it or not)
- Fix string ALL filter not checking names or editorIDs
- Sort non-dependent keywords according to entry order (previously it was at random)
- Fix leveled items not being resolved during distribution
- Fix distributed items not showing up in barter menu
- Force outfit equip (twice) to hopefully fix unreplicatable naked NPC issue
- Lowered memory usage during form lookup
-
Version 6.5.2
- Fix naked "Starts Dead" NPCs (and hopefully other cases)
-
Version 6.5.1
- Fix bug where isolated keywords were skipped when resolving keyword dependencies
-
Version 6.5.0
- Distribution is now fully dynamic and triggers when the actor loads into a cell for the first time. This fixes several issues with previous static method, especially with distribution failing on leveled actors
- Distributed NPCs are tagged with "SPID_Processed" keyword.
- Outfits are automatically equipped by NPCs - no more "ResetInventory" console commands. Scripted outfit changes will still take priority.
- NPCs with distributed outfits are tagged with "SPID_ProcessedOutfit" keyword.
- Add Editor Location form filter.
- Improved keyword resolution and dependency sorting.
- Improved outfit/skin sorting.
- Performance improvements when looking up forms and actor distribution.
- Distribution (and outfit equipping) works on "Starts Dead" actors
- Fix Child filter not working if the IsChild race flag had been removed
- Fix several bugs with leveled distribution
- Fix distribution resetting on actors when reloading saves within the same cell
- Automatically sanitize 00012345 formIDs (copy pasted from xEdit) into valid 0x12345 format
- Tidied up SPID log
-
Version 6.4.0
- Add Skin form filter
- Outfit distribution now respects config entry order
- Fix sanitized configs not saving correctly
- Fix distribution failing on unique + templated npcs
- Fix distribution failing on NPC form filters
- Fix bug where entries without level filters would be discarded upon NPC levelup
- Fix crash caused by missing NPC class
-
Version 6.3.0
- Significant speed improvements to filter checks and form distribution - SPID 6.3.0 is now 4-5 times as fast compared with 6.2.0 (1900 SPID entries)
- All NPCs are now processed individually on actorbase init, rather than all at once.
- Removed [RESULTS] sections since it is no longer applicable (a better logging method will be available in the next SPID version; for now, use More Informative Console)
- Added NPC class skill weight filters
- Added performance profiling under [STATS] section to SPID log,
- Fixed bug where distribution could be applied to already processed NPCs, multiple times, in game - this caused the stutter/long load times seen in 6.20
- Fixed bug where some static/unique NPC distributions were wiped upon loading saves
- Fix crash caused if using outdated MergeMapper plugin
-
Version 6.2.0
- Add spells to filter list
- Removed duplicates in log, result count of affected NPCs for each entry is summed across all configs
- Fix bug where distribution failed for leveled actors with static actorbases
- Fix broken editorID, mod filters for leveled actors with dynamic actorbases
- Fix actor distribution upon starting a new game
- Fix keyword sorting in log
-
Version 6.1.0
- Fix issue where configs would not be evaluated according to insertion order
- Fix bug where entries distributed to Fox race would also apply to leveled NPCs based on it
- Fix keyword sorting for entries with level filters
- Fix several dynamic distribution bugs related to leveled NPCs
- Fix dynamic distribution changes not triggering immediately after level up (note. certain distribution like spells still require cell reload)
- Speedup dynamic distribution for users with multiple SPID configs + multiple added NPCs
- Include SPID config name when logging errors in SPID log
-
Version 6.0.3
- Discard broken entries that were causing SPID to fail, and log them
- Handle nonstandard saves with underscore+letters
-
Version 6.0.2
- Fix another crash when logging failed keywords
-
Version 6.0.1
- Fix crash when resolving keywords with empty editorIDs
- Log mods with these broken keywords
-
Version 6.0.0
- General
Support AE 1.6.629+
Dynamic distribution (in game)
1. Leveled NPCs
Records are distributed when NPCs are generated and spawned from leveled lists.
This fixes several issues (eg. entries not being properly added because their base race defaulted to FoxRace)
2. PC Level Mult NPCs and entries with actor/skill level filters.
Records are distributed on each player level up/down.
Failed entries (due to RNG) will not be re-distributed.
Stops once the NPC has reached their maximum possible level.
Handles reloading between saves/swapping characters.
The [Results] section in SPID log is hence no longer accurate (since distribution can happen anytime now after loading into the game). It is still valid for non-leveled NPCs and entries without actor/skill level filters.
Other features
Add sleep outfit distribution (no effect in game, requires an upcoming mod to enable sleep outfits)
Add skin armor distribution
Add package override list distribution (under Package)
Add option to specify package index for Packages
Add formlist filter support (each formlist item will be checked to see if it matches other filter types)
Add IsChild as a new trait
Changes
Configs are sorted alphabetically (A-Z)
Keywords are sorted based on dependancies (ie. keywords used by others will always be distributed first)
NPC level is now accurately calculated
Use cached editorIDs provided by powerofthree's Tweaks
Display local formID~modName under [Results] section
Several improvements to codebase
Other changes I forgot since last year
- General
-
Version 5.2.0
- Skip form distribution for entries with no valid filters
-
Version 5.1.1
- Support for Address Library AE
-
Version 5.1.0
- Support for Anniversary Edition (1.6.318)
- Added editorID lookup (requires powerofthree's Tweaks)
- Added faction distribution
- Added pattern matching for skill level
- Fixed erroneous sanitization
- Fixed crashes when logging records with skipped editorIDs
-
Version 5.0.4
- Added distribution support to all NPCs from a single mod.
- Added distribution by voice type.
- Invalid filters will be skipped instead of stopping the record from being distributed.
- SPID runs after Keyword Item Distributor (KID) if both are installed.
- Fixed bug with wildcard matching on names.
- Tentative fix for VR bug where DLC formIDs failed upon lookup.
-
Version 5.0.3
- Fixed VR version
- Fixed memory allocation issue with adding perks
- Reverted to pre 4.5.0 method of distribution
-
Version 5.0.2
- Fixed bug where keywords with special characters would be incorrectly parsed.
-
Version 5.0.1
- Fixed bug where multi-hyphenated names would be incorrectly parsed.
-
Version 5.0
- Changed SPID .ini format. Existing mods are compatible; files will be automatically upgraded to new format on game load.
- SPIDFormatter.exe can also be run from the Data directory to batch upgrade / downgrade existing INIs.
- INIs are sanitized and validated; extra spaces or commas won't trip up SPID anymore.
- (See stickied comment for format changes)
- Added support for mod-added formID filters (0x123~NewModFaction.esp, 0x123~NewModClass.esp)
- Replaced gender filter with traits (gender/unique/summonable)
- Actor level filter is skipped for NPCs that level with the player.
- Fixed regression where custom keywords created across multiple files would not be added
- Fixed crash when empty outfits were added to NPCs
-
Version 4.5.1
- Reverted plugin name to avoid breaking mods that use it to check whether SPID is installed.
-
Version 4.5
- Added string filter wildcards (*ActorType).
- Added string/formID requirements (ActorTypeVampire+ActorTypeCreature).
- Death Items now accept all item types (previously only leveled items). Can have multiple death items added on top of base death item.
- Outfit replaces base outfit record. Multiple outfits from different configs are merged into one dynamic outfit for each NPC.
- Added filtering by NPC formID.
- Cleaned up log. It should only show errors, and final output.
- Distribution is now done after SKSE's Data Loaded event (so other SKSE plugins can add their own records without conflict).
- Fixed bug where string filter would always evaluate as true, if the string didn't match with name or keyword.
- Fixed bug with leveled actors receiving multiple items each time their actorbase reset.
-
Version 4.4
- Added death item distribution
-
Version 4.2
- Added keyword distribution to NPCs. Keywords can either be normal formids, or custom keywords that can be checked using SKSE's GetKeywordString() function.
- Fixed incorrect distribution on leveled NPCs (most of them use FoxRace, so NPCs would be flagged as creatures)
- Fixed items not being distributed to leveled NPCs
- Removed NPC count from the SPID log since leveled actors get their spells/items distributed when their actorbase loads.
-
Version 1.0
- Initial Release
-
SPELL PERK ITEM DISTRIBUTOR

Requirements
SKSE64
Skyrim SE 1.5.39 onwards
meh's Address Library for SKSE Plugins
Description
SKSE utility plugin that allows modders to add spells/perks/items/shouts/packages/outfits/keywords to every NPC actorbase in the game, at startup.
How To Use
Note: konkeranto has graciously made xEdit scripts that automate all of this, check it out here :
Spell Perk Item Distributor xEdit Scripts
Distributed records should be written to an ini file containing the suffix "_DISTR", in the Data folder (for example, MyMod_DISTR.ini).
They should follow this general format:
Items and packages have their own specialized format:
RecordType
RecordID
esp is the name of the mod containing the record (MyMod.esp/esl/esm). This is not necessary for Skyrim and DLC records.
Filtering
Filters are for distributing to only specific groups of NPCs. Filters that you're not using can be marked as NONE or left blank.
NOTE: Combining multiple filters will progressively restrict the pool of NPCs that can be distributed to.
Distribute the same record multiple times to add it to different types of NPCs.
Actorbase names (eg. Balgruuf)
Actorbase editorIDs (eg. BalgruufTheGreater)
Multiple strings should be separated using a comma. All keyword strings, names and editorIDs (vanilla and modded) are supported.
List of valid filter form types
Multiple entries should be separated using a comma.
Mod added filter formIDs are supported (0x101~MyFactionMod.esp,0x223~MyRaceMod.esl)
EditorIDs can now be used in place of formIDs.
Pattern Matching
Level Filters
List of Skills
Traits
Traits can be combined (eg. M/U/S to get all male unique summonable NPCs)
Traits can be negated (eg. -U to get all non-unique NPCs)
Chance
Notes regarding distributable types
Items
Packages
(eg. a packageIdx of 1 will add the package after the 1st one)
1 - spectator override
2 - observe corpse override
3 - guard warn override
4 - enter combat override
Skin
Keywords
Keywords can either be distributed as normal, using formids from other mods, or you can assign your own custom keyword to NPCs
These keywords should be checked in-game using SKSE's HasKeywordString function.
Keywords will be applied first, so you could distribute a keyword to NPCs, and then check if it exists when distributing other things
Examples
Notes
Check po3_SpellPerkItemDistributor.log file in My Games/Skyrim Special Edition/SKSE, for more information about the process.
Installation
Credits


Requirements
SKSE64
Skyrim SE 1.5.39 onwards
meh's Address Library for SKSE Plugins
Description
SKSE utility plugin that allows modders to add spells/perks/items/shouts/packages/outfits/keywords to every NPC actorbase in the game, at startup.
How To Use
Note: konkeranto has graciously made xEdit scripts that automate all of this, check it out here :
Spell Perk Item Distributor xEdit Scripts
Distributed records should be written to an ini file containing the suffix "_DISTR", in the Data folder (for example, MyMod_DISTR.ini).
They should follow this general format:
RecordType = RecordID|StringFilters|FormFilters|LevelFilters|Traits|NONE|Chance
Items and packages have their own specialized format:
Item = RecordID|StringFilters|FormFilters|LevelFilters|Traits|ItemCount|Chance
Package = RecordID|StringFilters|FormFilters|LevelFilters|Traits|PackageIdx|Chance
RecordType
Spell
Perk
Item
Shout
LevSpell
Package
Outfit
Keyword
DeathItem
Faction
SleepOutfit
Skin
RecordID
- RecordID is the unique identifier of the record you want to distribute. Two versions are supported:
- FormID~esp
esp is the name of the mod containing the record (MyMod.esp/esl/esm). This is not necessary for Skyrim and DLC records.
- EditorID is the form editorID of the record displayed in CK or xEdit. This is generally preferred since formIDs can change when the mod is merged or converted into esl.
Filtering
Filters are for distributing to only specific groups of NPCs. Filters that you're not using can be marked as NONE or left blank.
NOTE: Combining multiple filters will progressively restrict the pool of NPCs that can be distributed to.
Distribute the same record multiple times to add it to different types of NPCs.
- String Filters
Actorbase names (eg. Balgruuf)
Actorbase editorIDs (eg. BalgruufTheGreater)
Multiple strings should be separated using a comma. All keyword strings, names and editorIDs (vanilla and modded) are supported.
- Form Filters
List of valid filter form types
Spoiler:
Faction
Class
CombatStyle
Race
Outfit
NPC
Spell
VoiceType
FormList
Editor Location
Show
Faction
Class
CombatStyle
Race
Outfit
NPC
Spell
VoiceType
FormList
Editor Location
Multiple entries should be separated using a comma.
Mod added filter formIDs are supported (0x101~MyFactionMod.esp,0x223~MyRaceMod.esl)
EditorIDs can now be used in place of formIDs.
Pattern Matching
Spoiler:
Show
Requirements [strings, formIDs] - require actor to have all keywords or filter forms, using + (eg. ActorTypeGhost+ActorTypeAnimal to get animal ghosts).
Exclusions [strings, formIDs] - exclude actors that have name/keyword/form, using - (eg. -Serana).
Wildcards [strings] - find all actors that have name, editorID or keyword containing wildcard, using * (eg. *Draugr to get Draugr/Draugr Death Lord/Draugr Mage).
Matches [strings, formIDs] - this is default setting. NPC has to match with any filter.
These are evaluated in the following order :
1.Requirements
2.Exclusions
3.Matches
3.Wildcards
Exclusions [strings, formIDs] - exclude actors that have name/keyword/form, using - (eg. -Serana).
Wildcards [strings] - find all actors that have name, editorID or keyword containing wildcard, using * (eg. *Draugr to get Draugr/Draugr Death Lord/Draugr Mage).
Matches [strings, formIDs] - this is default setting. NPC has to match with any filter.
These are evaluated in the following order :
1.Requirements
2.Exclusions
3.Matches
3.Wildcards
Level Filters
- Actor Level is minimum/maximum actor level. Records will be distributed to NPCs with levels within this range.
- Skill Level (OneHanded, Lockpicking, ect) range from 0 - 17, followed by the min and max Skill Level required. Supports pattern matching.
List of Skills
Spoiler:
OneHanded : 0
TwoHanded : 1
Marksman : 2
Block : 3
Smithing : 4
HeavyArmor : 5
LightArmor : 6
Pickpocket : 7
Lockpicking : 8
Sneak : 9
Alchemy : 10
Specchcraft : 11
Alteration : 12
Conjuration : 13
Destruction : 14
Illusion : 15
Restoration : 16
Enchanting : 17
Show
OneHanded : 0
TwoHanded : 1
Marksman : 2
Block : 3
Smithing : 4
HeavyArmor : 5
LightArmor : 6
Pickpocket : 7
Lockpicking : 8
Sneak : 9
Alchemy : 10
Specchcraft : 11
Alteration : 12
Conjuration : 13
Destruction : 14
Illusion : 15
Restoration : 16
Enchanting : 17
Traits
- Gender : M/F
- Unique : U
- Summonable : S
- Child : C
- Leveled : L
- Player Teammate : T
Traits can be combined (eg. M/U/S to get all male unique summonable NPCs)
Traits can be negated (eg. -U to get all non-unique NPCs)
Chance
- Percentage chance that records will be distributed to NPCs
Notes regarding distributable types
Items
- All carryable items (that can be added to NPC inventory) or leveled items are accepted.
- itemCount is the amount of items that should be added. Default is 1 if no count is specified
Packages
- Supports distributing packages AND formlists (as package overrides)
- If distributing packages :
(eg. a packageIdx of 1 will add the package after the 1st one)
- If distributing formlists
1 - spectator override
2 - observe corpse override
3 - guard warn override
4 - enter combat override
Skin
- Record should be of Armor formtype.
Keywords
Keywords can either be distributed as normal, using formids from other mods, or you can assign your own custom keyword to NPCs
Keyword = ActorTypeRich|Nazeem,Maven Black Briar
These keywords should be checked in-game using SKSE's HasKeywordString function.
Keywords will be applied first, so you could distribute a keyword to NPCs, and then check if it exists when distributing other things
Keyword = ActorTypeGhost|*Ghost
Spell = 0x123~SpookyGhostSpell.esp|ActorTypeGhost
Examples
;this will add 3000 gold to everyone except Nazeem
Item = 0xF~Skyrim.esm|ActorTypeNPC,-Nazeem|NONE|NONE|NONE|3000
;this has a 50% chance to add a perk from test.esp to all NPCs from Test faction
Perk = 0x9DE80~test.esp|NONE|0x1BCC0~test.esp|NONE|NONE|NONE|50
;this will add Flames to all female NPCs between actor levels 25 and 50
Spell = 0x12FCD~Skyrim.esm|NONE|NONE|25/50|F
;this will add Flames to all male unique NPCs who have a minimum Destruction skill of 10
Spell = 0x12FCD~Skyrim.esm|NONE|NONE|14(10)|M/U
;this will add Unrelenting Force to all NPCs that are vampire ghosts
Shout = 0x13E07~Skyrim.esm|ActorTypeGhost+Vampire
;this will add a custom keyword, ActorTypePoor to Brenuin
Keyword = ActorTypePoor|Brenuin
Notes
Check po3_SpellPerkItemDistributor.log file in My Games/Skyrim Special Edition/SKSE, for more information about the process.
Installation
- Install as normal with a mod manager.
Credits
- Ryan (SniffleMan) for CommonLibSSE
- sasnikol for their invaluable help in adding features and testing for SPID 6.0