Skyrim Special Edition

Another one of my ancient Tutorials, thanks to Matthiaswag for keeping it online, and Jac for refining it. While I can find both of the other Tutorials on the old Beth forum, I can not get access to the FF Tutorial. Also forgot my log in data, and searching 598 sites, is not what I'm planing for the rest of my life. I'll just tag in quotes:

This tutorial will guide you through creating a custom follower, on a separate framework than the vanilla one. This will stop your follower from being automatically managed by a mod like EFF, or AFT. You can also add more features to your follower easily, as well as the framework being more flexible.
This tutorial assumes a basic knowledge of the Creation Kit, and how to set up scripts. No need to write them, but you should be able to edit a few names and such to fit your follower. This could be used for a framework but the tutorial is set up for a single follower.

This is a redesigned tutorial based off of Mofakin's original one, by Jac. Morte is Jac's custom follower, a proof of concept and fully voiced follower. 
Ignore particular names for this tutorial. They're just examples and taken from two mods, not necessary to be the exact same and ignore if they change. Also, certain pictures may not exactly match up to the amount of properties, as some properties were removed through optimization as they were unnecessary. Otherwise, they are accurate, but don't worry if you don't see a property in your script that's in the picture.

The vanilla system uses a global variable to limit the player to one NPC and one animal follower. Setting up a variable for this system is not required, but if you also want to limit your framework to one NPC/animal, create a new global variable (Figure 1).



After you’ve created the variable, create a new quest and set it up as shown in Figure 2. Note: you will need to click OK after you’ve set up the first tab and re-open the quest before you’ll be able to proceed with adding the other parts to the quest.



The Object Window Filter JacMorteDialogQuest\ means that this quest will appear under Character->Quest->JacMorteDialogQuest. It’s a good idea to group all of your follower’s quests together because while this quest will handle most of your follower’s dialog, you may want to create separate ones for different occasions. For example, Morte has a separate quest for when the player first meets him because he force greets the player. He also has different quests for various conversations he has with female followers. But the bulk of his dialog is contained in the JacMorteDialogQuest shown in image 2.

The Quest Name doesn't matter as the player will be unable to see it.

After you’ve closed and re-opened your quest, click on the scripts tab and create a new script. You can use the following as a template, adjusting to fit your mod as necessary.

If you don't want the follower to dismiss after 3 days, remove the line that RegisterForSingleUpdateGameTime()s in the Function FollowerWait().

Scriptname JacJasmineDialogQuestScript extends Quest

Actor Property PlayerREF Auto
ReferenceAlias Property FollowerAlias Auto
Faction Property DismissedFollowerFaction Auto
Faction Property CurrentHireling Auto
Message Property  FollowerDismissMessage Auto
Message Property  FollowerDismissMessageWedding Auto
Message Property  FollowerDismissMessageCompanions Auto
Message Property  FollowerDismissMessageCompanionsMale Auto
Message Property  FollowerDismissMessageCompanionsFemale Auto
Message Property  FollowerDismissMessageWait Auto
SetHirelingRehire Property HirelingRehireScript Auto

;Property to tell follower to say dismissal line
Int Property iFollowerDismiss Auto Conditional

Function SetFollower(ObjectReference FollowerRef)
     actor FollowerActor = FollowerRef as Actor
     FollowerActor.RemoveFromFaction(DismissedFollowerFaction)
     If FollowerActor.GetRelationshipRank(PlayerREF) <3 && FollowerActor.GetRelationshipRank(PlayerREF) >= 0
          FollowerActor.SetRelationshipRank(PlayerREF, 3)
     EndIf
     FollowerActor.SetPlayerTeammate()
     ;FollowerActor.SetActorValue("Morality", 0)
     FollowerAlias.ForceRefTo(FollowerActor)
     FollowerActor.EvaluatePackage()
EndFunction
 
Function FollowerWait()
     actor FollowerActor = FollowerAlias.GetActorRef() as Actor
     FollowerActor.SetActorValue("WaitingForPlayer", 1)
     SetObjectiveDisplayed(10, abforce = true)
     ;follower will wait 3 days
     FollowerAlias.RegisterForSingleUpdateGameTime(72) 
EndFunction
 
Function FollowerFollow()
     actor FollowerActor = FollowerAlias.GetActorRef() as Actor
     FollowerActor.SetActorValue("WaitingForPlayer", 0)
     SetObjectiveDisplayed(10, abdisplayed = false)
     FollowerActor.EvaluatePackage()
EndFunction
 
Function DismissFollower(Int iMessage = 0, Int iSayLine = 1)
     If FollowerAlias && FollowerAlias.GetActorReference().IsDead() == False
          If iMessage == 0
               FollowerDismissMessage.Show()
          ElseIf iMessage == 1
               FollowerDismissMessageWedding.Show()
          ElseIf iMessage == 2
               FollowerDismissMessageCompanions.Show()
          ElseIf iMessage == 3
               FollowerDismissMessageCompanionsMale.Show()
          ElseIf iMessage == 4
               FollowerDismissMessageCompanionsFemale.Show()
          ElseIf iMessage == 5
               FollowerDismissMessageWait.Show()
          Else
              ;failsafe
              FollowerDismissMessage.Show()
          EndIf
          actor DismissedFollowerActor = FollowerAlias.GetActorRef() as Actor
          DismissedFollowerActor.StopCombatAlarm()
          DismissedFollowerActor.AddToFaction(DismissedFollowerFaction)
          DismissedFollowerActor.SetPlayerTeammate(false)
          DismissedFollowerActor.RemoveFromFaction(CurrentHireling)
          DismissedFollowerActor.SetActorValue("WaitingForPlayer", 0)
          ;hireling rehire function
          HirelingRehireScript.DismissHireling(DismissedFollowerActor.GetActorBase())
          If iSayLine == 1
               iFollowerDismiss = 1
              DismissedFollowerActor.EvaluatePackage()
             ;Wait for follower to say line
             Utility.Wait(2)
          EndIf
             FollowerAlias.Clear()
             iFollowerDismiss = 0
             ;don't set count to 0 if Companions have replaced follower
          If iMessage == 2
               ;do nothing
          EndIf
     EndIf
EndFunction


Most of the quest properties should auto fill, but some, like the HirelingRehireScript, won't. You’ll want to edit the quest properties and auto-fill what you can and manually fill in those that won’t auto fill. HirelingRehireScript only has one option from the dropdown, and you should select that one. When you’re done, you should have something that looks like Figure 3. (Note: the follower alias will be set up later. Ignore that it's not there yet - as soon as we create our alias, you should go back and fill the property with our follower alias.) 



Now it’s time to create a new alias for the follower (this is the Foll.owerAlias property I just mentioned). Click on the Alias tab and create a new reference alias. Set it up as shown in Figure 4. The packages must be in exactly that order or you will have issues.

Ignore the script name, and the alias name. Give the alias the name of your follower. The Specific Reference should be set to NONE, NOT TO THE ACTUAL NPC AS BELOW. If it is set to the specific ref, then your NPC will be following you from the start.



After your alias has been setup, create a new script and use the following as a template (a new script on the alias).

If you don't want the waiting dismissal part, remove all code between and including Event OnUpdateGameTime and EndEvent for OnUnload.

Scriptname JacJasmineDialogQuestAliasScript extends ReferenceAlias  

Faction Property CurrentHireling Auto
Message Property FollowerDismissMessage  Auto
Actor Property PlayerREF Auto

Event OnUpdateGameTime()
     ;kill the update if the follower isn't waiting anymore
     If Self.GetActorRef().GetActorValue("WaitingforPlayer") == 1
          ; debug.trace(self + "Dismissing the follower because he is waiting and 3 days have passed.")
          (GetOwningQuest() as JacJasmineDialogQuestScript).DismissFollower(0,0)
     EndIf
EndEvent

Event OnUnload()
     ;if follower unloads while waiting for the player, wait three days then dismiss him.
     If Self.GetActorReference().GetActorValue("WaitingforPlayer") == 1
          (GetOwningQuest() as JacJasmineDialogQuestScript).FollowerWait()
     EndIf
EndEvent

Event OnCombatStateChanged(Actor akTarget, int aeCombatState)
     If (akTarget == PlayerREF)
          ; debug.trace(self + "Dismissing follower because he is now attacking the player")
          (GetOwningQuest() as JacJasmineDialogQuestScript).DismissFollower(0, 0)
     EndIf
EndEvent

Event OnDeath(Actor akKiller)
     ; debug.trace(self + "Clearing the follower because the player killed him.")
     Self.GetActorRef().RemoveFromFaction(CurrentHireling)
     Self.Clear()
EndEvent


As with the quest script, auto-fill every property possible and manually fill in those that are necessary (Figure 5).

The properties will not look the same as this picture, as the picture is before a change I made to optimize the script. You will have PlayerREF instead of the Dialog quest. That is perfectly fine, just fill the property (PlayerREF can autofill).



After everything is filled in, click OK and go to the quest objectives tab and set up an objective as shown in Figure 6. This is what tells the game that your follower is waiting and tells the follower script to dismiss the follower after three days of waiting. Replace Follower with the name of the alias you created earlier.

If you don't want the follower to be dismissed after 3 days, skip this step.



Now it’s time to create your follower’s functionality. To have them (re)join you on your adventures, create a new dialog branch & topic in the player dialog tab and use this fragment in the End fragment:
(GetOwningQuest() as JacJasmineDialogQuestScript).SetFollower(akSpeaker)
Add the condition GetInFaction DismissedFollowerFaction == 1 on Subject for this Dialogue.
(Figures 7 & 8). Be sure to change the property/variable names to match your mod's.





Now you'll begin to create other dialog branches for the other functionalities, and their responses. Each functionality is just a dialog branch with a prompt (player dialog), and response that matches, as well as an end fragment to actually execute the effect. We've already set up the functions to do all this stuff, now we just need to hook it up. Be sure to replace all variable/property names with the one that matches your mod.

To have the follower wait, the fragment is:

(GetOwningQuest() as JacJasmineDialogQuestScript).FollowerWait()

You will need the condition GetInFaction CurrentFollowerFaction == 1 on Subject.

For dismissal, it’s:

(GetOwningQuest() as JacJasmineDialogQuestScript).DismissFollower(0,0)

Be sure to have the dialogue condition GetInFaction CurrentFollowerFaction == 1 on Subject. for this dialogue as well. 

For following after having them wait, it’s:

(GetOwningQuest() as JacJasmineDialogQuestScript).FollowerFollow()

Be sure to have GetActorValue WaitingForPlayer == 1 on Subject for this dialogue. You will also need the condition GetInFaction CurrentFollowerFaction == 1 on Subject.

To make your follower do something, like chop wood, attack a target, etc. it’s:

akspeaker.SetDoingFavor()

You will need the condition GetInFaction CurrentFollowerFaction == 1 on Subject.

To open their inventory, it’s:

akspeaker.OpenInventory()

You will need the condition GetInFaction CurrentFollowerFaction == 1 on Subject.

If you do not want your follower to have inventory access, do not add that line and have them say something to that effect. 

//Edit: 8.29.16 

Be sure to add your follower's Actor form - not the alias, but the Actor itself - to both PotentialFollowerFaction and DismissedFollowerFaction. You can do this by going to the Factions tab, right clicking in the list and choosing Add, then filtering for the aforementioned factions. Put them in PotentialFollowerFaction at the value of 1 and DismissedFollowerFaction at the value of 0 or 1. This means that they are in the faction where they have been "dismissed", and this will match the condition in your "Follow me, I need your help" dialogue, so that will properly show up. 

​And that’s it. You now have a custom follower that uses a custom framework. Check out Deck 16’s voiced follower tutorial if you want to add a custom voice to your follower.

Article information

Added on

Written by

CrEaToXx

13 comments

  1. DaddyDude757
    DaddyDude757
    • member
    • 0 kudos
    Upon adding a new script for my follower quest, I receive a Papyrus Error message saying this...
    Starting 1 compile threads for 1 files...
    Compiling "PR01PathicusController7"...
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\Location.psc(7,50): unknown type locationreftype
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\Location.psc(10,49): unknown type locationreftype
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\Location.psc(16,41): unknown type locationreftype
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\Actor.psc(27,49): unknown type globalvariable
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\Actor.psc(28,34): globalvariable is not a known user-defined type
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\Actor.psc(28,1): type mismatch on parameter 1 (did you forget a cast?)
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\ActorBase.psc(4,15): unknown type class
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\LeveledItem.psc(13,24): unknown type globalvariable
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\LeveledItem.psc(14,40): unknown type globalvariable
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\MagicEffect.psc(48,15): unknown type light
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\MagicEffect.psc(49,24): unknown type light
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\MagicEffect.psc(51,22): unknown type effectshader
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\MagicEffect.psc(52,35): unknown type effectshader
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\MagicEffect.psc(54,22): unknown type effectshader
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\MagicEffect.psc(55,39): unknown type effectshader
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\MagicEffect.psc(57,20): unknown type projectile
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\MagicEffect.psc(58,34): unknown type projectile
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\MagicEffect.psc(60,19): unknown type explosion
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\MagicEffect.psc(61,32): unknown type explosion
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\MagicEffect.psc(72,23): unknown type impactdataset
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\MagicEffect.psc(73,40): unknown type impactdataset
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\MagicEffect.psc(78,28): unknown type imagespacemodifier
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\MagicEffect.psc(79,45): unknown type imagespacemodifier
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\Race.psc(20,19): unknown type voicetype
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\Race.psc(23,52): unknown type voicetype
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\ActorBase.psc(55,24): unknown type class
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\ActorBase.psc(104,19): unknown type voicetype
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\ActorBase.psc(105,32): unknown type voicetype
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\Shout.psc(4,21): unknown type wordofpower
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\Shout.psc(8,46): unknown type wordofpower
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\Actor.psc(187,17): unknown type package
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\Ammo.psc(9,20): unknown type projectile
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\Weapon.psc(54,16): unknown type static
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\Weapon.psc(55,33): unknown type static
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\Actor.psc(307,45): unknown type associationtype
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\Actor.psc(471,28): unknown type idle
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\Actor.psc(474,38): unknown type idle
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\Actor.psc(760,29): unknown type package
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\Actor.psc(764,30): unknown type package
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\Actor.psc(768,27): unknown type package
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\Game.psc(176,41): unknown type wordofpower
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\Game.psc(251,57): unknown type imagespacemodifier
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\Game.psc(257,31): unknown type wordofpower
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\Game.psc(263,32): unknown type wordofpower
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\ObjectReference.psc(110,5): unknown type key
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\ObjectReference.psc(112,5): type mismatch on parameter 1 (did you forget a cast?)
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\ObjectReference.psc(112,29): cannot compare a none to a int (cast missing or types unrelated)
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\ObjectReference.psc(113,3): type mismatch on parameter 1 (did you forget a cast?)
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\ObjectReference.psc(245,15): unknown type scene
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\ObjectReference.psc(269,13): unknown type key
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\ObjectReference.psc(368,19): unknown type voicetype
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\ObjectReference.psc(374,20): unknown type worldspace
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\ObjectReference.psc(388,41): unknown type locationreftype
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\ObjectReference.psc(465,90): unknown type encounterzone
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\ObjectReference.psc(477,45): unknown type impactdataset
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\ObjectReference.psc(517,19): unknown type topic
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\ObjectReference.psc(665,67): unknown type projectile
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\ObjectReference.psc(822,24): unknown type referencealias
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\ObjectReference.psc(834,26): unknown type referencealias[]
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\Quest.psc(12,66): unknown type globalvariable
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\Quest.psc(13,12): globalvariable is not a known user-defined type
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\Quest.psc(18,34): globalvariable is not a known user-defined type
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\Quest.psc(18,40): cannot compare a none to a float (cast missing or types unrelated)
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\Quest.psc(18,40): cannot relatively compare variables to None
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\Quest.psc(18,90): globalvariable is not a known user-defined type
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\Quest.psc(18,96): cannot compare a none to a float (cast missing or types unrelated)
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\Quest.psc(18,96): cannot relatively compare variables to None
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\Quest.psc(135,58): unknown type globalvariable
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\temp\PR01PathicusController7.psc(7,24): unknown type referencealias
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\temp\PR01PathicusController7.psc(13,18): unknown type message
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\temp\PR01PathicusController7.psc(15,18): unknown type message
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\temp\PR01PathicusController7.psc(17,18): unknown type message
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\temp\PR01PathicusController7.psc(19,18): unknown type message
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\temp\PR01PathicusController7.psc(21,18): unknown type message
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\temp\PR01PathicusController7.psc(23,18): unknown type message
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\temp\PR01PathicusController7.psc(25,27): unknown type sethirelingrehire
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\temp\PR01PathicusController7.psc(27,24): unknown type globalvariable
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\temp\PR01PathicusController7.psc(47,19): referencealias is not a known user-defined type
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\temp\PR01PathicusController7.psc(51,23): globalvariable is not a known user-defined type
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\temp\PR01PathicusController7.psc(59,41): referencealias is not a known user-defined type
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\temp\PR01PathicusController7.psc(59,55): cannot cast a none to a actor, types are incompatible
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\temp\PR01PathicusController7.psc(71,41): referencealias is not a known user-defined type
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\temp\PR01PathicusController7.psc(71,55): cannot cast a none to a actor, types are incompatible
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\temp\PR01PathicusController7.psc(85,39): referencealias is not a known user-defined type
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\temp\PR01PathicusController7.psc(85,59): none is not a known user-defined type
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\temp\PR01PathicusController7.psc(85,68): cannot compare a none to a bool (cast missing or types unrelated)
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\temp\PR01PathicusController7.psc(89,38): message is not a known user-defined type
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\temp\PR01PathicusController7.psc(93,45): message is not a known user-defined type
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\temp\PR01PathicusController7.psc(97,48): message is not a known user-defined type
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\temp\PR01PathicusController7.psc(101,52): message is not a known user-defined type
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\temp\PR01PathicusController7.psc(105,54): message is not a known user-defined type
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\temp\PR01PathicusController7.psc(109,42): message is not a known user-defined type
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\temp\PR01PathicusController7.psc(113,37): message is not a known user-defined type
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\temp\PR01PathicusController7.psc(117,55): referencealias is not a known user-defined type
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\temp\PR01PathicusController7.psc(117,69): cannot cast a none to a actor, types are incompatible
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\temp\PR01PathicusController7.psc(129,28): globalvariable is not a known user-defined type
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\temp\PR01PathicusController7.psc(131,31): sethirelingrehire is not a known user-defined type
    C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source\temp\PR01PathicusController7.psc(143,27): referencealias is not a known user-defined type
    No output generated for PR01PathicusController7, compilation failed.

    Batch compile of 1 files finished. 0 succeeded, 1 failed.
    Failed on PR01PathicusController7
  2. williammack
    williammack
    • supporter
    • 0 kudos
    Thanks for the tutorial, I do have a question about adding random comments when the character is walking around the world. so like if the character is in a cave it will comment on it etc.
    1. P0ET
      P0ET
      • supporter
      • 0 kudos
      Don't know if you got an answer but its in the Misc tab. Make a new a new topic and choose idle. After that its just a matter of setting where you want the idle dialogue to be said and/or when and how often
    2. magestays1
      magestays1
      • member
      • 0 kudos
      Does anyone know if this works with vanilla characters? Like, could I make Maven a follower with this method?
  3. justnasty
    justnasty
    • member
    • 1 kudos
    im having trouble with something very specific, every time i end combat with my custom follower, Leon, he dismisses himself, and proceeds to walk home. i have followed Jesseph Russel's "How to create a follower like Lucien Flavius Part 0-3" exactly, with the only differences being that ive added custom dialogue to the misc. tab, and combat tab. ive done nothing to change the code or anything to mess with the Ai during combat. please help! 
    Thanks in advance.
    1. Larkisbored
      Larkisbored
      • supporter
      • 0 kudos
      Did you ever find a solution to this? I'm currently having the exact same problem and it's driving me crazy.

      Edit: Nvm, I found out what the problem was. I apparently forgot to fill in the properties after making the QuestAlias script. Whoops! c:
    2. squ3lch
      squ3lch
      • premium
      • 42 kudos
      @Larkisbored I love you.
    3. KhajiitChaos
      KhajiitChaos
      • member
      • 0 kudos
      Yea i literally have done EVERYTHING this man said and its still not working. including filling in the properties. any other ideas?
  4. BigTailWolfSuomi
    BigTailWolfSuomi
    • member
    • 0 kudos
    I created a script according to the method you provided and applied it to a new request
    But every time I click OK, the creation kit will pop up a warning box for false errors and it will be crash
    This is the error code:
    The creation kit encountered a fatal error and has crashed.
    Reason: Unspecified exception(0xC0000005).
    A minidump has been written to'D:\steam\steamapps\common\Skyrim Special Edition\Creationkit.exe_20230612_092501.dmp'
    Please note it may contain private information such as usernames.
    I don't know how this happened, but it always does this
    Sad:(
  5. PranDe
    PranDe
    • premium
    • 0 kudos
    Hallo to all,

    i  can't see any figure (graphic) in this tutorial.
    Is there somewhere an other source? A pdf for excample?   OR

    could the modceeper please update this tutorial with the figures, pleeeaaase?

    Best whishes
    Pran
  6. menace1by5
    menace1by5
    • premium
    • 4 kudos
    Hi, I’m trying to do the script but my ck keeps ctd. I am launching ck through mo2 as well.  Disregard, didn’t have flg and scripts not foldered correct
  7. Dahveed
    Dahveed
    • premium
    • 158 kudos
    This is great!

    I have a couple questions/issues about the follower I created.

    1 - I'm trying to get her to sandbox around the player using Serana's DLC1NPCSandboxAroundPlayer600 package, I just removed her specific conditions and left in the basic ones (notwaiting, etc), but I can't get this to work... Do you have any ideas?

    2 - Something that is driving me bonkers is that she won't use any of her "noticecorpse" dialogue while she is following me.  When I dismiss her she will comment on them all on her way back home, but never while following.  I've noticed other follower mods have been able to do this - for example, Anduniel from Anna NPCs will always comment on corpses, and even sometimes talk about animals and such "it was such a majestic beast", or "we can skin this for its hide and venison")

    These two issues are driving me nuts, any help would be appreciated!  I've asked everywhere but Skyrim modding has slowed down considerably in the last couple years, it seems :/

    Thanks in advance for your time!
  8. Amardon
    Amardon
    • premium
    • 8 kudos
    Wow. I always thought you mod authors were amazing, but after reading this, I'm deep bowing before all of you!