SPID: The Complete Reference
as of SPID 7.2.0

Everything you need to know to start creating SPID mods.


Changelog

Spoiler:  
Show

  • 09.06.25
  • Updated for SPID 7.2.
  • 17.04.24 
  • Removed section about special Outfits ordering. The reverse ordering was removed in SPID 6.5.0


Table of Contents
Spoiler:  
Show

  • General Distribution Info
  • How does SPID load configs?
  • When distribution happens?
  • In what order forms are distributed?
  • Syntax
  • Form Type
  • Type Inferring
  • Distributable Form
  • Filtering
  • String Filters
  • Supported Strings
  • String Expression Modifiers
  • Form Filters
  • Supported Filterable Forms
  • Form Expression Modifiers
  • Level Filters
  • Supported Values
  • Ranges Syntax
  • Leveled Distribution
  • Traits Filters
  • Supported Traits
  • Trait Expression Modifier
  • Note on Templated NPCs
  • Count or Package Index
  • Item Count
  • Package Index
  • Package List Type
  • Chance


General Distribution Info

SPID distributes all configured forms at runtime, it doesn't have effect on either loaded plugins nor on save. SPID distributes everything from scratch each time you launch the game. You can think of SPID distribution as a "virtual plugin" that applies changes last in your load order. This makes any SPID-based mods safe to install/uninstall at any time, as they don't leave a trace.

  • How does SPID load configs? (Order)

  • At startup SPID looks into Skyrim's Data/ folder and finds all ini files that have a _DISTR suffix in their name.
  • Then it orders them alphabetically from A to Z and loads in that order.
  • Each file is read from top to bottom, preserving relative order of each type of forms (this order is used later during distribution. (each type of forms is guaranteed to be distributed in the same order as they appear in the file as well as the global order of files).

  • When Distribution happens?

Distribution is performed "lazily": when NPCs are loaded into the world (typically, on cell load).

  • In what order forms are distributed?

SPID distribution processes forms of each type separately.
The exact order at which form types are processed is:
Spoiler:  
Show

  • Keywords
  • Factions
  • Perks
  • Spells
  • Shouts
  • Packages
  • Items
  • Skins
  • Outfits

Within each type forms are distributed in the same order that they were loaded with an exception:

  • Keywords are additionally sorted to make sure that keywords that depend on other keywords will be distributed later than their dependencies. This allows you to freely use keywords as requirements for other keywords without manually ordering them.


Syntax

General syntax for a distributable form looks like this:

FormType = FormOrEditorID|StringFilters|FormFilters|LevelFilters|TraitFilters|CountOrPackageIndex|Chance
      required                           required                             optional                              optional                      optional                      optional                                           optional                               optional
                    Default: Index=0; Count=1            Default: 100

Optional sections can be either left blank or marked as NONE.

Example:
Spoiler:  
Show
So both
Item = MyItem|||||5
and 
Item = MyItem|NONE|NONE|NONE|NONE|5
are valid.


Form Type
Type of a distributable form that you want to configure.

Here is a list of all supported Distributable Forms that you can specify in FormType:

    Form type       Signature
  • Spell               [SPEL, LVSP]
  • Perk                [PERK]
  • Item                 [ALCH, AMMO, ARMO, BOOK, INGR, KEYM, LVLI, MISC, SCRL, SLGM, WEAP]*
  • Shout             [SHOU]
  • Package        [PACK, FLST*]
  • Keyword*      [KYWD]
  • Outfit             [OTFT]
  • SleepOutfit   [OTFT]
  • Faction          [FACT]
  • Skin               [ARMO]
Basically, any carriable items. Let me know if I missed some.
* When distributing FormList it must contain only Packages, otherwise game most likely will crash.
SPID can also create Keywords dynamically, so you can distribute custom keywords.
Example:
Spoiler:  
Show
This will create a new keyword and distribute it to NPCs
Keyword = MyVerySpecialKeyword


Type Inferring

You can also specify Form as a generic Form Type and let SPID work out proper Form Type based on provided Distributable Form.
IMPORTANT
Keep in mind that SleepOutfit and Skin can't be inferred,
because they use the same forms as Outfit and Item respectively, so the latter will always be detected first.
Example:
Spoiler:  
Show
Form = SteelSword
Form = DefaultOutfit
is the same as
Item = SteelSword
Outfit = DefaultOutfit


Distributable Form
A unique identifier of the Form to be distributed.

Form must be one of the supported types listed in Form Type section.

A form can be identified by using one of the following IDs:

  • FormID - a hexadecimal number (0x12345) with a plugin name as a suffix (e.g 0x12345~MyPlugin.esp). Read FormIDs and You for more details on how this ID is formed.
  • EditorID - a text identifier of the Form as seen in Creation Kit or xEdit. (e.g. ElvenMace or ImperialBow).

Generally, EditorID is considered to be a more stable way of referencing a Form since, unlike FormID, it will remain the same when the mod is merged, converted to esl or compacted.

Filtering

Distributable Form can be restricted to a group of NPCs that match specific criteria. These criteria are configured by a handful of filtering sections, that we'll talk about in a moment.

All Filters sections are multiplicative (combined using logical AND operation), while expressions within the same section are additive (combined using logical OR operation).

Example:
Spoiler:  
Show
So the entry
Form = 0x12345|A,B|0x12,0x34
can be read as "give a form 0x12345 when NPC has (A OR B) AND (0x12 OR 0x34)".


TIP
Use multiple entries for the same distributable forms to target different groups of NPCs.
Example:
Spoiler:  
Show

Keyword = FemaleBandits||BanditFaction||F
will give the keyword only to NPCs that are both Female AND part of Bandit Faction. But
Keyword = FemaleOrBandits||BanditFaction
Keyword = FemaleOrBandits||||F
will give the keyword to all members of Bandit Faction as well as all Females in the game.

String Filters

A list of comma-separated textual expressions that allows you to filter eligible NPCs by their textual properties, such as a name.

Form = 0x12345|StringExpression1,StringExpression2,...

Supported Strings
String Filters allow you to match NPCs by the following criteria:

  • NPC's Name (e.g. Balgruuf).
  • NPC's EditorID (e.g. BalgruufTheGreater).
  • NPC Templates* EditorID. This allows you to target all descendants of a template.
  • NPC's Keywords (e.g. ActorTypeNPC). This also includes Keywords distributed by SPID.
  • NPC Race's Keywords (e.g. ActorTypeAnimal).
This allows you to target all descendants of the same template. See Note on Templated NPCs below.

Example:
Spoiler:  
Show
Give a form to all Whiterun Guards
Form = 0x12345|Whiterun Guard

Give a form to NPC with ActorTypeNPC OR ActorTypeDragon

Form = 0x12345|ActorTypeNPC,ActorTypeDragon

String Expression Modifiers
By default, String Expression looks for the exact match of the specified term, but this behavior can be changed with several modifiers.

  • Exclusion modifier (-). Placed in front of a term. This will invert the expression and make it only match NPCs who does NOT have the exact term. 
Example:
Spoiler:  
Show
Give a form to every NPC except specifically "Balgruuf" (so "Balgruuf Junior" would still be allowed)
Form = 0x12345|-Balgruuf

  • Partial match modifier (*). Placed in front of a term. This will make the expression allow partial matches of the term. (e.g. "Guard" in "Whiterun Guard")
Example:
Spoiler:  
Show
Give form to every guard, this will match all "Whiterun Guard", "Falkreath Guard", "Markarth Guard", etc. Note that this will also match NPCs like "Guardian" or "Bodyguard".
Form = 0x12345|*Guard

  • Combining modifier (+). Placed between multiple terms you want to combine. This will make the expression only match NPCs who have ALL of the exact terms.
Example:
Spoiler:  
Show
Give a form to NPCs who are simultaneously ActorTypeNPC, Bandit and ActorTypeGhost
Form = 0x12345|ActorTypeNPC+Bandit+ActorTypeGhost

IMPORTANT
Only one modifier can be used in a single expression.
Example:
Spoiler:  
Show
None of these are valid:
Form = 0x12345|-*Guard
Form = 0x12345|-Guard+ActorTypeNPC
Form = 0x12345|ActorTypeNPC-Guard
Form = 0x12345|*Guard+ActoryTypeNPC


Form Filters
A list of comma-separated expressions containing FormOrEditorIDs that allows you to filter eligible NPCs by their form properties, such as Race, Class, etc.

Form = 0x12345||FormExpression1,FormExpression2,...

Supported Filterable Forms

Form Filters allow you to match NPCs by the following criteria:

        Form type            Signature       NPC's Record in xEdit
  • Combat Style[CSTY]          ZNAM - Combat Style    
  • Class              [CLAS]          CNAM - Class
  • Faction          [FACT]           Factions
  • Race               [RACE]          RNAM - Race
  • Outfit             [OTFT]           DOFT - Default outfit
  • Perk[PERK]           Perks
  • Specific NPC [NPC_]          FormID, EDID - Editor ID
  • NPC's Template*  [NPC_]  FormID, EDID - Editor ID
  • Voice Type            [VTYP]           VTCK - Voice
  • Known Spell          [SPEL]           Actor Effects
  • Skin                       [ARMO]          WNAM - Worn Armor
  • Editor Location*   [LCTN]           XLCN - Persistent Location (of ActorRef)
  • FormList*              [FLST]           Recursively looks for any form from the list.
This allows you to target all descendants of the same template. See Note on Templated NPCs below.
* This is the location where NPC is placed in the Editor, NOT the location where NPC is right now.
* List can contain any of the forms from this table, including another nested FormList.

Example:
Spoiler:  
Show
Give a form to all Nords (NordRace "Nord" [RACE:00013746])
Form = 0x12345||NordRace

Give a form to NPCs that are located in Whiterun (WhiterunLocation "Whiterun" [LCTN:00018A56]) OR report crimes in Whiterun Hold (CrimeFactionWhiterun "Whiterun" [FACT:000267EA]).
Form = 0x12345||WhiterunLocation,CrimeFactionWhiterun

Additionally, here you can specify only name of the plugin where NPC is defined. This will match only NPCs from given plugin.
Example:
Spoiler:  
Show
Give a form only to NPCs from CoolNPCs.esp plugin
Form = 0x12345||CoolNPCs.esp


Form Expression Modifiers
By default, Form Expression checks whether an NPC has the specified form, but this behavior can be changed with several modifiers.

  • Exclusion modifier (-). Placed in front of a form. This will invert the expression and make it only match NPCs who does NOT have the form. 
Example:
Spoiler:  
Show
Give a form to every NPC except Nords (NordRace "Nord" [RACE:00013746])
Form = 0x12345||-NordRace

  • Combining modifier (+). Placed between multiple forms you want to combine. This will make the expression only match NPCs who have ALL of the forms.
Example:
Spoiler:  
Show
Give a form to NPCs who are simultaneously Nords (NordRace "Nord" [RACE:00013746]), Report Crime in Whiterun (CrimeFactionWhiterun "Whiterun" [FACT:000267EA]) and know Stoneflesh spell (StonefleshLeftHand "Stoneflesh" [SPEL:00072316])
Form = 0x12345||NordRace+CrimeFactionWhiterun+StonefleshLeftHand

IMPORTANT
Only one modifier can be used in a single expression.
Example:
Spoiler:  
Show
None of these are valid:
Form = 0x12345|-NordRace+WhiterunLocation
Form = 0x12345|CrimeFactionWhiterun-NordRace

Level Filters
A list of comma-separated expressions with numeric ranges that allows you to filter eligible NPCs by their leveled properties, such as level or skill.

Form = 0x12345|||LevelExpression,SkillExpression1,SkillExpression2,...

IMPORTANT
Only one Level Expression can be specified.
Providing multiple Level Expression will cause SPID to only recognize the last one.
Example:
Spoiler:  
Show
In the entry
Form = 0x12345|||5/10,7/12
only 7/12 levels will be stored. 5/10 will be discarded.


Supported Values
Level Filters allow you to match NPCs by the following criteria:

        Value                 Expression
  • Level                 min/max
  • Skill Level        skillIndex*(min/max)
  • Skill Weight     Same as Skill but prefixed with letter w.
* skillIndex is a number corresponding to one of the 17 skills:
Spoiler:  
Show
  #  Skill
  0. One-Handed
  1. Two-Handed
  2. Archery
  3. Block
  4. Smithing
  5. Heavy Armor
  6. Light Armor
  7. Pickpocket
  8. Lockpicking
  9. Sneak
10. Alchemy
11. Speech
12. Alteration
13. Conjuration
14. Destruction
15. Illusion
16. Restoration
17. Enchanting


Ranges Syntax

  • Closed range (min/max). Match values between min and max, including min and max.
  • Half-open range (min or min/). Matches values starting from min and to infinity :)
  • Exact value (value/value). Matches exact value.
Example:
Spoiler:  
Show
Give a form to NPCs who are at least level 5
Form = 0x12345|||5

Give a form to NPCs who has 50 in Destruction skill level
Form = 0x12345|||14(50/50)

Give a form to NPCs who level up their Two-Handed skill slightly more actively than other skills. (controlled by Skill Weight)
Form = 0x12345|||w2(2/3)


Leveled Distribution

Whenever a Distributable Form defines a Level Filter it becomes a part of the Leveled Distribution. Unlike regular distribution, Leveled Distribution checks levels and/or skills of all loaded auto-leveled NPCs and checks whether they've met requirements of the Level Filter. This happens unless either other filters discard the NPC or a random chance check would fail.


Trait Filters
A single expression that allows you to filter eligible NPCs by traits, such as gender or teammate.

Form = 0x12345||||TraitExpression

Supported Traits

  • Female
  • Male
  • Unique
  • Summonable
  • Child
  • Leveled (Is PC Level Mult)
  • Player's Teammate
  • Dead (both NPCs who died and those that Start Dead)

Example:
Spoiler:  
Show
Give a form to females
Form = 0x12345||||F


Trait Expression Modifier
By default, Trait Expression checks whether an NPC has given Trait, but this behavior can be changed with several modifiers.

  • Exclusion modifier (-). Placed in front of a trait. This will invert the trait and make it only match NPCs who does NOT have that trait. 
Example:
Spoiler:  
Show
Give a form only to not unique NPC
Form = 0x12345||||-U

  • Combining modifier (/). Placed between multiple traits you want to combine. This will make the expression only match NPCs who have ALL of the traits.
Example:
Spoiler:  
Show
Give a form to all non unique male NPCs who are also adults
Form = 0x12345||||-U/M/-C



TIP
Note that, unlike other filters, Traits actually support mixing of expression modifiers.
Example:
Spoiler:  
Show
So you can do this
Form = 0x12345||||F/-U/L/-S


Note on Templated NPCs

Templated NPCs are those that inherit their attributes from another NPC, that is referred to as a base template. Filters always check the final NPC that is created after merging attributes from NPC and its base template.

Additionally, String Filters and Form Filters allow you to target specific NPCs using EditorID or FormID, including IDs of templates that they derive from. However, when template hierarchy includes multiple templated NPC, SPID can only reach specific templates. In such cases the following templates can be specified:

For not leveled NPCs:

  • Final NPC. This is the resolved NPC that will inherit attributes from its template.
  • Base template. This is the immediate parent Template of the final NPC. 
Example:
Spoiler:  
Show

DLC2SV01DragonPriestBoss [NPC_:0401CAD5] => EncDragonPriestFire [NPC_:0002025A] => EncDragonPriest [NPC_:00023A93]
Final NPC                                                                             Base template                                                                          Further template in hierarchy
                         Reachable                                                                                                        Reachable                                                                                      Unreachable



For leveled NPCs:

  • Original NPC. This is the top-level NPC that was used to create the final NPC.
  • Base leveled NPC. This is the Leveled NPC that is the closest to Original NPC in the hierarchy of templates that was used to pick a random NPC.
  • Base template. This is a random NPC that was picked from Leveled NPC and will be used as a template for Original NPC.
Example:
Spoiler:  
Show

[NPC_:FF000D45] => LvlDraugrAmbushMelee2HMale [NPC_:0004A04E] => LCharDraugrMelee2HMale [LVLN:0001E772] => 
 Dynamic Final NPC                                            Original NPC                                                                                              Base leveled NPC
      Unreachable                                                    Reachable                                                                                                               Reachable

SubCharDraugr02Melee2HM [LVLN:00023BFF] => EncDraugr02Melee2HHeadM05 [NPC_:0001FF2C] => EncDraugr02Template2H [NPC_:0005B753]
     Nested leveled NPC                                                                                       Base template                                                                                               Further template in hierarchy
          Unreachable                                                                                                             
Reachable                                                                                                               Unreachable



Count or Package Index
A numeric value that is interpreted based on associated Distributable Form.

Item Count

When Distributable Form is an Item, this section is interpreted as a number of items that should be added.
If this section is empty or absent Default count is 1.

You can also specify a numeric range as a Count and let SPID pick a Random Item Count to distribute from this range.

Example:
Spoiler:  
Show
Give a single bow (default count 1)
Form = ImperialBow

Give 3 swords
Form = IronSword|||||3

Give somewhere between 10 and 20 arrows
Item = SteelArrow|||||10-20


Package Index

When Distributable Form is a Package, this section is interpreted as an index where given Package should be inserted.
If this section is empty or absent Default index is 0.

Note that Package Index is zero-based, so the first Package has index 0.

Example:
Spoiler:  
Show
Set Patrol package (Patrol [PACK:00017723]) as the second package
Package = Patrol|||||1

Set Travel package (Travel [PACK:00016FAA]) as the first package (default index 0)
Package = Travel


Package List Type

When Distributable Form is a FormList, this section is interpreted as a type of the Package List that should be overwritten.
If this section is empty or absent Default type is 0.

Type can be one of the following:
#              Type                                       NPC's Record in xEdit
0. Default Package List                  DPLT - Default Package List
1. Spectator Override                     SPOR - Spectator override package list
2. Observe Corpse Override          OCOR - Observe dead body override package list
3. Guard Warn Override                 GWOR - Guard warn override package list
4. Enter Combat Override              ECOR - Combat override package list
Example:
Spoiler:  
Show
Set default package list
Package = DefaultPackageListLinkedPatrol|||||0

or, since default type is 0, we can simply write
Package = DefaultPackageListLinkedPatrol


Chance
A percentage value that sets a chance of given Distributable Form to be distributed.

Chance is a decimal value from 0 to 100. There is no limit on how small you want the chance to be (good luck hitting those 0.0001% chances though :D)
If this section is absent Default chance is 100 (e.g. guaranteed).

Example:
Spoiler:  
Show
Give a form with a 60% chance
Form = 0x12345||||||60

Give a form with a 0.01% chance
Form = 0x12345||||||0.01

Article information

Added on

Edited on

Written by

sasnikol

469 comments

  1. sasnikol
    sasnikol
    • premium
    • 503 kudos
    Locked
    Sticky
    Please comment here only if you have specific questions about developing DISTR files
    all general questions about SPID and/or issues with it, should be asked on the Posts section of the mod page itself.
    This will make it easier for people who are looking for a particular type of help to search for answers in the comments.
    Thanks!
  2. JaworJW
    JaworJW
    • member
    • 0 kudos
    I'm making a DISTR for a mod that adds a spell that, upon reading the tome, allows the player to craft certain types of armor (Dwarven for example).
    I was wanting to give this spell to all Blacksmiths so it wouldn't restrict what they can craft when using Honed Metal.

    I made the following and it doesn't seem to work.
    ;Dwarven Styles
    Spell = 0x00000810 - Forgemaster.esp | ActorTypeNPC | JobBlacksmithFaction | 1 | NONE | NONE | 100

    The spell only targets "Self" in SSEEdit but would that mean giving it to NPCs render no effect?
  3. Cruasan96
    Cruasan96
    • member
    • 1 kudos
    Have a question

    Is there any way to exclude distribution of spell for actors with another distributed spell
    i mean:
    for example im distributing spell equiping black cloak to npc
    and want to distribute another spell equiping white cloak, but dont whant to distribute it to npc with spell equiping black cloak

    i already tried something like:

    Spell = 0x802~DNPCsWinterIsComing.esp|ActorTypeNPC+isRegionFreezing+NUDE_CommonNPC||NONE|NONE|NONE|100
    Spell = 0x805~DNPCsWinterIsComing.esp|ActorTypeNPC+isRegionFreezing+NUDE_CommonNPC|-0x802~DNPCsWinterIsComing.esp|NONE|NONE|NONE|100

    but its not working - npc has both spells on them

    or its to complicated and im asking too much?
  4. TrumanAE
    TrumanAE
    • premium
    • 96 kudos
    sorry i see i commented in the wrong spot recommenting again as nexus sent me a notif that you replied but i  cant see it. 
    EDIT : NVM i seen your comment it was still loading cheers! 
  5. accretia00
    accretia00
    • member
    • 4 kudos
    i have downloaded various armors and i want to give necromancers the armors i want, then for vampires, alik'r, etc. can someone give me an example of how to do it?
    can you also give me an example to distribute based on skill level(novice, etc)?
    1. sasnikol
      sasnikol
      • premium
      • 503 kudos
      The examples are right in the article:
      Give a form to NPCs who are at least level 5Form = 0x12345|||5

      Give a form to NPCs who has 50 in Destruction skill level
      Form = 0x12345|||14(50/50)

      Give a form to NPCs who level up their Two-Handed skill slightly more actively than other skills. (controlled by Skill Weight)
      Form = 0x12345|||w2(2/3)

      For vampires you gonna need to look into how Skyim has them configured to find the common criteria. For example, I think all vampires have special Races that look like NordVampireRace, or something similar. You'll need to look into xEdit for specifics.
    2. accretia00
      accretia00
      • member
      • 4 kudos
      if i add 5-6 armors for vampires, etc what's the best chance number to get these armors instead of vanilla?
    3. sasnikol
      sasnikol
      • premium
      • 503 kudos
      Well, depends on how often you want to see them and whether you want to see them.

      Here are chanced for equal distribution of 6 outfits that completely replace Vanilla: 16.6, 20, 25, 33.3, 50, 100.
      The formula is Oi = 100/(N-i) where:

      • Oi is the chance of i-th outfit,
      • N is total number of Outfits you want to distribute,

      •  i is index of the current outfit starting from 0 (e.g. Outfit 1 has I=0)
    4. Huzbi
      Huzbi
      • member
      • 0 kudos
      Hey, can you tell me how does the N variable work? Like, is this similar to the count? If that is the case, how would we know how many outfits to distribute, or if that depends on the user?

      I have an armor mod that contains 3 color variants and I want to distribute them to a certain race so that it replaces the vanilla outfits, how would the N be defined then?
    5. cavy8
      cavy8
      • premium
      • 30 kudos
      N would be 3 in that case - one for each variation.
  6. AzureFailure
    AzureFailure
    • premium
    • 55 kudos
    Spoiler:  
    Show
    Hi, I have this line:
    Spoiler:  
    Show
    Keyword = ActorTypeMaster|*Master
    This distributes the ActorTypeMaster keyword to Daumbra from There is No Umbra III (and potentially other NPCs, I haven't checked around too much).
    Is this because it is checking against existing keywords? Daumbra also has a "isMasterTwoHanded" keyword from another mod (not sure if that one is SPID or KID though).
    Edit3: I discovered (through simply reading the documentation again...) the answer to be "yes, it's because of the existing keyword"
    Spoiler:  
    Show
    Edit: Additionally, this line from KCF seems to be affecting the Gauldur Blackblade:
    Spoiler:  
    Show
    Keyword = 0x80B~kcf.esm|Weapon|*Gun,*Rifle,*Pistol
    It does not have any keywords with 'gun' in the name
    Edit2: The editor ID has "folgunthur" in the name
  7. Tyrthemis
    Tyrthemis
    • premium
    • 59 kudos
    I'm trying to distribute an outfit that has different colors to ice mages, fire mages, and storm mages separately.  I'm having difficulty with it.  I've read the notes on templated NPCs and am still confused.  I'm testing at Fort Amol so I run into at least a couple of the types of mages.

    Ive tried:
    ;Ice mages
    Outfit = FrostwardenOutfitBlue|ActorTypeNPC+*Ice|0x13179|NONE|F/-U|NONE|100  That does not distribute to anything

    Ive tried:
    ;Novice Fire Mages
    Outfit = FrostwardenOutfitRed|ActorTypeNPC|0x44CD7|NONE|F/-U|NONE|100
    ;Apprentice Fire Mages
    Outfit = FrostwardenOutfitRed|ActorTypeNPC|0x45C5F|NONE|F/-U|NONE|100
    ;Fire Mage Adepts
    Outfit = FrostwardenOutfitRed|ActorTypeNPC|0x45C7A|NONE|F/-U|NONE|100
    ;Fire Mages
    Outfit = FrostwardenOutfitRed|ActorTypeNPC|0x45CA0|NONE|F/-U|NONE|100
    ;Fire Wizards
    Outfit = FrostwardenOutfitRed|ActorTypeNPC|0x45CBB|NONE|F/-U|NONE|100
    ;Pyromancer
    Outfit = FrostwardenOutfitRed|ActorTypeNPC|0x45CBE|NONE|F/-U|NONE|100
     That does not seem to work either

    FIGURED IT OUT:
    ;Fire Mages
    Outfit = FrostwardenOutfitRed|Novice Fire Mage,Apprentice Fire Mage,Fire Mage Adept,Fire Mage,Fire Wizard,Pyromancer|NONE|NONE|F/-U|NONE|6

    so simple in Hindsight, I do love SPID
  8. rob89391
    rob89391
    • supporter
    • 0 kudos
    I've been playing around with this, and want to distribute an armour mod to 100% of female bandits. I tried various configurations and couldn't for the life of me get it to work.

    To test, I distributed it to ALL NPCs, and sure enough walking around Riverwood the women had the correct outfit on which I set up in SSEdit, and the men were just floating heads as it's a female only armour. 

    I fast travelled to numerous locations with bandits, and none of them had the armour on, they were just using their vanilla hide and iron. Am I missing something? The outfit and SPID is definitely working as it changed everyone in Riverwood. But bandits don't seem to be effected.

    Unfortunately on my phone right now so can paste the config.
    1. sasnikol
      sasnikol
      • premium
      • 503 kudos
      You need to use 7.2 version. Outfits are not equipped by SPID in 7.1.3, so it's kind of undefined behavior, NPCs may or may not equip what you gave them. By using 7.2 you can eliminate this ambiguity. If that won't produce desired result, then share the configs and we'll figure this out
    2. rob89391
      rob89391
      • supporter
      • 0 kudos
      Oh amazing, thanks for the quick response. Can I be nosey and ask what the reason for this is?
    3. sasnikol
      sasnikol
      • premium
      • 503 kudos
      Reason why 7.1.3 doesn’t have this feature? It because 6.8.2 that had it was also causing a bug where NPCs would end up naked. There were dozens of attempts to fix it, but still problems were there. In the end, po3 decided to disable the feature for good. It was 6.8.5, while I was working on all additions in SPID 7+. After that the demand for this feature was high, so I started working on outfits from scratch.
  9. averagejoe3x
    averagejoe3x
    • member
    • 17 kudos
    Is there a way to target NPCs that have no name? i.e. the NPC's Name field is blank
    1. sasnikol
      sasnikol
      • premium
      • 503 kudos
      Oh, you mean only those who have empty name? I'm afraid no. You'll need to find something they have in common other than blank name, or target them one by one with FormID/EditorID
    2. averagejoe3x
      averagejoe3x
      • member
      • 17 kudos
      Yeah I thought that might be the case. Thanks for the reply though!
    3. sasnikol
      sasnikol
      • premium
      • 503 kudos
      On the bright side, your inquiry made the push for me to consider largely expanding capabilities of what can be written for SPID SPID 8 sounds cool!
    4. averagejoe3x
      averagejoe3x
      • member
      • 17 kudos
      Haha. Happy to help
  10. Eflat63
    Eflat63
    • member
    • 16 kudos
    I did not see a example but I assume something like:

    Faction = 0x10A~MyMod.esp|ActorTypeNPC|0x13BAB~Skyrim.esm|NONE|NONE|NONE|100


    Would add a faction at Form ID 10A in MyMod.esp to an npc - in this sample Ysolda and will not remove or override factions already there correct? Least would hope so.
    1. sasnikol
      sasnikol
      • premium
      • 503 kudos
      Yes, that's what it would do if 0x13BAB is NPC's FormID, you don't need to specify ActorTypeNPC. In fact the minimal entry that will do what you have in your example is:
      Faction = 0x10A~MyMod.esp||0x13BAB
      note, that you also don't need to add ~Skyrim.esm
    2. Arkston
      Arkston
      • member
      • 0 kudos
      How would you go about distributing a specific rank for a faction?
    3. sasnikol
      sasnikol
      • premium
      • 503 kudos
      You can't, at the moment.
  11. Maxsssnake
    Maxsssnake
    • member
    • 5 kudos
    I'm trying to assign an outfit to jarl elisif, but don't work it.

    Outfit = 0xD65~DOA_Gem_Bikini_Softbody.esp|Elisif

    What I'm doing wrong?

    I'm using SPID v7.1.3.0
    powerofthree's Tweaks 1.13.1


    Edit: Solved. Now I'm using this,
    Outfit = 0xD65~DOA_Gem_Bikini_Softbody.esp||0x1326a