enderalse/source/scripts/dialoguefollowerscript.psc

152 lines
4.7 KiB
Plaintext

ScriptName DialogueFollowerScript extends Quest Conditional
GlobalVariable Property pPlayerFollowerCount Auto
GlobalVariable Property pPlayerAnimalCount Auto
ReferenceAlias Property pFollowerAlias Auto
ReferenceAlias property pAnimalAlias Auto
Faction Property pDismissedFollower Auto
Faction Property pCurrentHireling Auto
Message Property FollowerDismissMessage Auto
Message Property AnimalDismissMessage 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
; PATCH 1.9: 77615: remove unplayable hunting bow when follower is dismissed
Weapon Property FollowerHuntingBow Auto
Ammo Property FollowerIronArrow Auto
Function SetFollower(ObjectReference FollowerRef)
actor FollowerActor = FollowerRef as Actor
FollowerActor.RemoveFromFaction(pDismissedFollower)
If FollowerActor.GetRelationshipRank(Game.GetPlayer()) < 3 && FollowerActor.GetRelationshipRank(Game.GetPlayer()) >= 0
FollowerActor.SetRelationshipRank(Game.GetPlayer(), 3)
EndIf
FollowerActor.SetPlayerTeammate()
;FollowerActor.SetActorValue("Morality", 0)
pFollowerAlias.ForceRefTo(FollowerActor)
pPlayerFollowerCount.SetValue(1)
EndFunction
Function SetAnimal(ObjectReference AnimalRef)
actor AnimalActor= AnimalRef as Actor
;don't allow lockpicking
AnimalActor.SetActorValue("Lockpicking", 0)
AnimalActor.SetRelationshipRank(Game.GetPlayer(), 3)
AnimalActor.SetPlayerTeammate(abCanDoFavor = false)
pAnimalAlias.ForceRefTo(AnimalActor)
;AnimalActor.AllowPCDialogue(True)
pPlayerAnimalCount.SetValue(1)
EndFunction
Function FollowerWait()
actor FollowerActor = pFollowerAlias.GetActorReference() as Actor
FollowerActor.SetActorValue("WaitingForPlayer", 1)
;SetObjectiveDisplayed(10, abforce = true)
;follower will wait 3 days
pFollowerAlias.RegisterForUpdateGameTime(72)
EndFunction
Function AnimalWait()
actor AnimalActor = pAnimalAlias.GetActorReference() as Actor
AnimalActor.SetActorValue("WaitingForPlayer", 1)
;SetObjectiveDisplayed(20, abforce = true)
;follower will wait 3 days
pAnimalAlias.RegisterForUpdateGameTime(72)
EndFunction
Function FollowerFollow()
actor FollowerActor = pFollowerAlias.GetActorReference() as Actor
FollowerActor.SetActorValue("WaitingForPlayer", 0)
SetObjectiveDisplayed(10, abdisplayed = false)
EndFunction
Function AnimalFollow()
actor AnimalActor = pAnimalAlias.GetActorReference() as Actor
AnimalActor.SetActorValue("WaitingForPlayer", 0)
SetObjectiveDisplayed(20, abdisplayed = false)
EndFunction
Function DismissFollower(Int iMessage = 0, Int iSayLine = 1)
If pFollowerAlias && pFollowerAlias.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 = pFollowerAlias.GetActorReference() as Actor
DismissedFollowerActor.StopCombatAlarm()
DismissedFollowerActor.AddToFaction(pDismissedFollower)
DismissedFollowerActor.SetPlayerTeammate(false)
DismissedFollowerActor.RemoveFromFaction(pCurrentHireling)
DismissedFollowerActor.SetActorValue("WaitingForPlayer", 0)
; PATCH 1.9: 77615: remove unplayable hunting bow when follower is dismissed
DismissedFollowerActor.RemoveItem(FollowerHuntingBow, 999, true)
DismissedFollowerActor.RemoveItem(FollowerIronArrow, 999, true)
; END Patch 1.9 fix
;hireling rehire function
HirelingRehireScript.DismissHireling(DismissedFollowerActor.GetActorBase())
If iSayLine == 1
iFollowerDismiss = 1
DismissedFollowerActor.EvaluatePackage()
;Wait for follower to say line
Utility.Wait(2)
EndIf
pFollowerAlias.Clear()
iFollowerDismiss = 0
;don't set count to 0 if Companions have replaced follower
If iMessage == 2
;do nothing
Else
pPlayerFollowerCount.SetValue(0)
EndIf
EndIf
EndFunction
Function DismissAnimal()
If pAnimalAlias && pAnimalAlias.GetActorReference().IsDead() == False
actor DismissedAnimalActor = pAnimalAlias.GetActorReference() as Actor
DismissedAnimalActor.SetActorValue("Variable04", 0)
;DismissedAnimalActor.AllowPCDialogue(False)
pPlayerAnimalCount.SetValue(0)
pAnimalAlias.Clear()
AnimalDismissMessage.Show()
EndIf
EndFunction