Scriptname PetFramework_ParentQuestScript extends Quest
{Get/Set functions for pet count and limit checks. All other shared controls are in PetFramework_PetScript.}
;rvogel 9/2017

GlobalVariable Property PetFramework_MaxPets Auto ;Max number of pets who can follow at once, default is 2

;RefAliases to fill from DLC at runtime

ReferenceAlias Property DLC2SeverinManorEnableMarker Auto
ReferenceAlias Property HomeMarkerDLC2SeverinManor Auto

ReferenceAlias Property BYOH01DoorLakeviewManor Auto
ReferenceAlias Property BYOH02DoorWindstadManor Auto
ReferenceAlias Property BYOH03DoorHeljarchenHall Auto

ReferenceAlias Property HomeMarkerLakeviewManor Auto
ReferenceAlias Property HomeMarkerWindstadManor Auto
ReferenceAlias Property HomeMarkerHeljarchenHall Auto

Faction Property PetFramework_PetFaction Auto
Faction Property PlayerFaction Auto

Faction Property CWSonsFaction Auto
Faction Property CWImperialFaction Auto

; Setting start CurrentPetCount over the Max so the player cannot dismiss 2 pets and recruit new ones while online. Hypothetically.
Int Property CurrentPetCount = 4 Auto Hidden ;Current count of pets, this is manipulated by pet ESPs/ESLs using the functions below

Event OnInit()
	debug.trace("Setting pet and player relationship to ally")
	PetFramework_PetFaction.SetAlly(PlayerFaction)
	
	;Prevent CW actors from becoming hostile to pets
	PetFramework_PetFaction.SetAlly(CWSonsFaction)
	PetFramework_PetFaction.SetAlly(CWImperialFaction)
EndEvent

Int Function GetCurrentPetCount()
{Called by 'child' pet ESPs/ESLs to get current count and limit}
	Return CurrentPetCount
EndFunction

Int Function GetMaxPets()
{Called by 'child' pet ESPs/ESLs to get max pets}
	Return PetFramework_MaxPets.GetValue() as Int
EndFunction

Function IncrementPetCount()
{Called by 'child' pet ESPs/ESLs to update active pet count}
	CurrentPetCount += 1
EndFunction

Function DecrementPetCount()
{Called by 'child' pet ESPs/ESLs to update active pet count}
	If(CurrentPetCount > 0)
		CurrentPetCount -= 1
	EndIf
EndFunction

Bool Function HasMaxPets()
{Called to check if the player has the maximum pets allowed}

	If(GetCurrentPetCount() == GetMaxPets())
		Return True
	Else
		Return False
	EndIf

EndFunction


Function FillRefAliasesFromDLC()
{Called from first stage of quest to fill aliases from DLC that are unreachable by Update.esm}
	
	;Dragonborn Refs (Marker and Chest used to check ownership)
	ObjectReference DLC2SeverinManorEnableRef = (Game.GetFormFromFile(0x040396D0, "dragonborn.esm") as ObjectReference)
	ObjectReference DLC2SeverinManorMarkerRef = (Game.GetFormFromFile(0x0403BD35, "dragonborn.esm") as ObjectReference)
	
	;Hearthfire Refs (Doors)
	ObjectReference DoorLakeviewManorRef = (Game.GetFormFromFile(0x03003221, "hearthfires.esm") as ObjectReference)
	ObjectReference DoorWindstadManorRef = (Game.GetFormFromFile(0x0300B852, "hearthfires.esm") as ObjectReference)
	ObjectReference DoorHeljarchenHallRef = (Game.GetFormFromFile(0x03010DDF, "hearthfires.esm") as ObjectReference)
	
	;Hearthfire Refs (Markers)
	ObjectReference MarkerLakeviewManorRef = (Game.GetFormFromFile(0x0300309B, "hearthfires.esm") as ObjectReference)
	ObjectReference MarkerWindstadManorRef = (Game.GetFormFromFile(0x0301205C, "hearthfires.esm") as ObjectReference)
	ObjectReference MarkerHeljarchenHallRef = (Game.GetFormFromFile(0x03016E05, "hearthfires.esm") as ObjectReference)

	;Fill the refs
	DLC2SeverinManorEnableMarker.ForceRefTo(DLC2SeverinManorEnableRef)
	HomeMarkerDLC2SeverinManor.ForceRefTo(DLC2SeverinManorMarkerRef)
	
	BYOH01DoorLakeviewManor.ForceRefTo(DoorLakeviewManorRef)
	BYOH02DoorWindstadManor.ForceRefTo(DoorWindstadManorRef)
	BYOH03DoorHeljarchenHall.ForceRefTo(DoorHeljarchenHallRef)
	
	HomeMarkerLakeviewManor.ForceRefTo(MarkerLakeviewManorRef)
	HomeMarkerWindstadManor.ForceRefTo(MarkerWindstadManorRef)
	HomeMarkerHeljarchenHall.ForceRefTo(MarkerHeljarchenHallRef)
	
EndFunction
