Jump to content
IGNORED

AAF Script Help


Recommended Posts

Hi,

 

This might be a a bit on an ask, but is anyone willing to take a look at my quest script and give me some suggestions as to why my AAF calls are not doing anything?

 

I had them working previously before the CK ate one of my scripts, but I've not been able to figure it out again since then, but it can be very different from what I have now...

 

I'll put the relevant AAF bits of the script in the following spoiler and put the whole script in another in case the context is important.

 

Thanks in advance for anyone who has the patience to have a look :) And apologies for what ever awful coding mistakes I've made.

 

I should add that AAF is working for me otherwise, outside of my own mod.

 

AAF code only :

Spoiler

	AAF:AAF_API AAF_API 

	Actor Property PlayerREF Auto
	Actor Property DomREF Auto

	Actor PlayerRefThatWorks 
	Actor DOMREFThatWorks 

;initialisation
    Function LoadAAF()
        AAF_API = Game.GetFormFromFile(0x00000F99, "AAF.esm") as AAF:AAF_API
	If !AAF_API
		Debug.Notification("Can't find AAF API.")
		utility.wait(0.1)
	Else
		RegisterForCustomEvent(AAF_API, "OnAnimationStart")
		RegisterForCustomEvent(AAF_API, "OnAnimationChange")
		RegisterForCustomEvent(AAF_API, "OnAnimationStop")
		RegisterForCustomEvent(AAF_API, "OnSceneInit")
		RegisterForCustomEvent(AAF_API, "OnSceneEnd")
        Endif
    EndFunction

    Event OnQuestInit()
        RegisterForRemoteEvent(PlayerRef, "OnPlayerLoadGame")
        LoadAAF()
		RegisterRemoteEvents()
       	 LoadAAF()
		ActorFormIDAsActor()
    EndEvent

    Event Actor.OnPlayerLoadGame(actor aSender)
		RegisterRemoteEvents()
       	 LoadAAF()
		ActorFormIDAsActor()
    EndEvent

	Function  ActorFormIDAsActor()
		Int iPlayerID = PlayerREF.GetFormID()
		PlayerREFThatWorks = Game.GetForm(iPlayerID) as Actor
		Int iDomID = DomREF.GetFormID()
		DomREFThatWorks = Game.GetForm(iDomID) as Actor
	EndFunction
	
	Function RegisterRemoteEvents()
		RegisterForRemoteEvent(PlayerRefThatWorks, "OnItemEquipped")
       	RegisterForRemoteEvent(PlayerRefThatWorks, "OnPlayerLoadGame")	
       	;RegisterForRemoteEvent(PlayerRef, "OnPlayerLoadGame")	
	EndFunction



	Event OnKeyDown(int keyCode)
		if (keyCode == 109 )
				MessageBoxMain()
			EndIf
		endif
	EndEvent

; Message Box Template
	Function MessageBoxMain()
		Int iButton = MessageBoxMain.Show()
		If iButton == 0
			ConsentManager()
			return
		elseif iButton == 1
			ConsentManager()
			return
		elseif iButton == 2
			PlayerKneel()
		elseif iButton == 3
			PlayerKneel()
			return
		elseif iButton == 4
			AAFStartCouple(PlayerREF, DomREF, 10, true, true, "","","Aggressive","Kissing")
			return
		elseif iButton == 5
			AAFStartSolo(PlayerREF, 20, true, true,"", "F", "Aggressive", "Masturbation,F")
			return
		elseif iButton == 6
			AAFStartSolo(PlayerRefThatWorks, 20, true, true,"", "F", "Aggressive","SexyDance")
			return
		elseif iButton == 7
			DDLibrary.EquipDevice(PlayerRefThatWorks, DDLibrary.DD_Collar_Leather_Black_Inventory)
			return
		elseif iButton == 8
			DDLibrary.RemoveDevice(PlayerRefThatWorks, DDLibrary.DD_Collar_Leather_Black_Inventory)
			return
		endif
	EndFunction

;---------------------AAF MANAGEMENT--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

;AAF Couple Template
	Function AAFStartCouple(actor aSexActor0, actor aSexActor1, float fDuration, Bool bPreventFurniture, Bool bUsePackages, String sPosition, String sIncludeTags, String sExcludeTags, String sCombinedTags)
		Debug.Notification("started aaf Couple function")
		Actor[] Actors = new Actor[2]
		actors[0] = aSexActor0
		actors[1] = aSexActor1
		AAF:AAF_API:SceneSettings settings = AAF_API.GetSceneSettings()
		settings.duration = fDuration
		settings.preventFurniture = bPreventFurniture
		settings.usePackages = bUsePackages
		settings.Position = sPosition
		settings.includeTags = sIncludeTags
		settings.excludeTags = sExcludeTags
		settings.combinedTags = sCombinedTags
  		  AAF_API.StartScene(actors, settings)
	EndFunction

;AAF SoloTemplate
	Function AAFStartSolo(actor aSexActor0, float fDuration, Bool bPreventFurniture, Bool bUsePackages, String sPosition, String sIncludeTags, String sExcludeTags, String sCombinedTags)
		Debug.Notification("started aaf Solo function")
		Actor[] Actors = new Actor[1]
		actors[0] = aSexActor0
		AAF:AAF_API:SceneSettings settings = AAF_API.GetSceneSettings()
		settings.duration = fDuration
		settings.preventFurniture = bPreventFurniture
		settings.usePackages = bUsePackages
		settings.Position = sPosition
		settings.includeTags = sIncludeTags
		settings.excludeTags = sExcludeTags
		settings.combinedTags = sCombinedTags
	EndFunction

 

 

The Whole script:

Spoiler

Scriptname GDX_MainQuestScript2 extends Quest Conditional

; API
	AAF:AAF_API AAF_API 
	DD:DD_Library Property DDLibrary Auto Const	

; Quest Properties
	Bool Property ConsentToggle = false Auto Conditional
	Int Property iPlayerObedience = 0 Auto Conditional
	Int Property iDomMood = 0 Auto Conditional
	Bool Property bDDTalk = false Auto Conditional
	Int Property iQuestStage = 0 Auto Conditional	; 20 = is dom, 30, is busy domming
	Bool Property bApproachPlayer = false Auto Conditional

;Actor Properties
	Actor Property PlayerREF Auto
	Actor Property DomREF Auto
	ReferenceAlias Property GDX_Player Auto 

;Keyword Properties
	Keyword Property ObjectTypeFood Auto Const
	;Keyword Property _ClothingClassDress Auto Const

;Message Box Properties
	Message Property MessageBoxMain Auto

;Idle Properties
	Idle Property SubmissionIdle Auto Const
	Idle Property StopIdle Auto Const

;Player Status Properties
	Bool Property bPlayerKneeling = false Auto Conditional
	Bool Property bPlayerBound = false Auto Conditional
	Bool Property bPlayerGagged = false Auto Conditional
	Bool Property bPlayerChaste = false Auto Conditional
	Bool Property bPlayerChasteBra = false Auto Conditional
	Bool Property bPlayerCollared = false Auto Conditional

; Quest Management
	Bool Property EventInProgress = false Auto Conditional
	Int Property iLastEventTypeID = 0 Auto
	String Property sNextEventTag = "none" Auto
	Int Property iEventTypeCount = 5 auto			; number of distinct event types that can be selected 1 = MESSAGEBOX 2 = DIALOGUE 3 = AAF 4 = DEVIOUS DEVICES 5 = PLAYER ACTION OR RESTRICTION
	Int Property iEvent1Count = 5 auto				; number of events of type 1
	Int Property iEvent2Count = 5 auto	
	Int Property iEvent3Count = 5 auto	
	Int Property iEvent4Count = 1 auto	
	Int Property iEvent5Count = 5 auto	
	Float Property fMainTimerDuration = 0.1 Auto

; Player Restrictions
	Bool Property bNoClothes = false Auto Conditional
	Bool Property bNoFood = false Auto Conditional

; Local Variables
	Actor PlayerRefThatWorks 
	Actor DOMREFThatWorks 

;--------------------INITIALISATION---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

;initialisation
    Function LoadAAF()
        AAF_API = Game.GetFormFromFile(0x00000F99, "AAF.esm") as AAF:AAF_API
	If !AAF_API
		Debug.Notification("Can't find AAF API.")
		utility.wait(0.1)
	Else
		RegisterForCustomEvent(AAF_API, "OnAnimationStart")
		RegisterForCustomEvent(AAF_API, "OnAnimationChange")
		RegisterForCustomEvent(AAF_API, "OnAnimationStop")
		RegisterForCustomEvent(AAF_API, "OnSceneInit")
		RegisterForCustomEvent(AAF_API, "OnSceneEnd")
        Endif
    EndFunction

    Event OnQuestInit()
        RegisterForRemoteEvent(PlayerRef, "OnPlayerLoadGame")
        LoadAAF()
		 RegisterForKey(109)  
		RegisterRemoteEvents()
       	 LoadAAF()
		ActorFormIDAsActor()
		iQuestStage = 10
    EndEvent

    Event Actor.OnPlayerLoadGame(actor aSender)
		 RegisterForKey(109)  
		RegisterRemoteEvents()
       	 LoadAAF()
		ActorFormIDAsActor()
    EndEvent

	Function  ActorFormIDAsActor()
		Int iPlayerID = PlayerREF.GetFormID()
		PlayerREFThatWorks = Game.GetForm(iPlayerID) as Actor
		Int iDomID = DomREF.GetFormID()
		DomREFThatWorks = Game.GetForm(iDomID) as Actor
	EndFunction
	
	Function RegisterRemoteEvents()
		RegisterForRemoteEvent(PlayerRefThatWorks, "OnItemEquipped")
       	RegisterForRemoteEvent(PlayerRefThatWorks, "OnPlayerLoadGame")	
       	;RegisterForRemoteEvent(PlayerRef, "OnPlayerLoadGame")	
	EndFunction

;---------------------MOD ENGINE--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;DETERMINES IF THERE SHOULD BE AN EVENT


; Timer Template
	Function Timer(float fTimer, int iTimerID)
		StartTimerGameTime(fTimer, iTimerID) ; in game hours
	EndFunction

;RandomNumber - FOR GENERATING RANDOM NUMBERS
	int Function RandomNumber( int iMin, int iMax)
		int iRand = Utility.RandomInt(iMin, iMax)
		return iRand
	EndFunction

; Event Manager
	Function EventManager()
		EventInProgress = !EventInProgress
	EndFunction

	Event OnKeyDown(int keyCode)
		if (keyCode == 109 )
			If EventInProgress == true
				if bPlayerKneeling == false
					Debug.Notification("Please wait for the current GDX event to end")
				elseif bPlayerKneeling == true
					PlayerKneel()
				EndIf
			ElseIf EventInProgress == false
				MessageBoxMain()
			EndIf
		endif
	EndEvent

	Event OnTimerGameTime(int aiTimerID)				; TIMER 10 IS THE MAINQUEST TIMER, 11 RESTRICTION TIMER, 12 IS DEVIOUS DEVICES
  		If aiTimerID == 10
			If EventInProgress == true
				Timer(fMainTimerDuration, 10)
			ElseIf EventInProgress == false
				If (playerRef.HasKeyword(AAF_API.AAF_ActorBusy)) ||  PlayerRef.IsTalking() == true
				Timer(fMainTimerDuration, 10)
				Else
   				Debug.Notification("GDX Event!")
				EventChecker()
				EndIf
			EndIf
  		elseIf aiTimerID == 11
			;
  		elseIf aiTimerID == 12
			;debug.messagebox("DD event timer expired")
			Type4Event2()
 		 EndIf
	EndEvent

;---------------------EVENT SELECTOR--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;DETERMINES WHAT EVENT SHOULD HAPPEN

;Dom Mood - converts mood into String for use in tags
	String Function DomMood(int x) global
		String sDomMood 
		If x >= -5 && x <= 5
			sDomMood = "Neutral"
		ElseIf x < -5
			sDomMood = "Aggressive"
		ElseIf x > 5
			sDomMood = "Loving"
		EndIf 
		Return sDomMood
	EndFunction

;CHECKS THAT WE ARE NOT WAITING TO FOLLOWUP WITH A SPECIFIC JEVENT
	Function EventChecker()
		If sNextEventTag == "none"
			EventInProgress = true
			EventTypeSelector()
		ElseIf sNextEventTag == "ExampleFollowUpEvent"
			ExampleFollowUpEvent()
		EndIf	
	EndFunction

; SELECTS A RANDOM EVENT TYPE, ENSURING IT IS NOT THE SAME AS THE LAST ONE
	Function EventTypeSelector()
		int iTypeID = RandomNumber(1,iEventTypeCount)
		if iTypeID == iLastEventTypeID
			EventChecker()
		ElseIf iTypeID == 1
			iLastEventTypeID = 1
			 EventSelector(iTypeID)
		ElseIf iTypeID == 2
			iLastEventTypeID = 2
			 EventSelector(iTypeID)
		ElseIf iTypeID == 3
			iLastEventTypeID = 3
			 EventSelector(iTypeID)
		ElseIf iTypeID == 4
			iLastEventTypeID = 4
			 EventSelector(iTypeID)
		ElseIf iTypeID == 5
			iLastEventTypeID = 5
			 EventSelector(iTypeID)
		EndIF
	EndFunction

;SELECTS A RANDOM EVENT OF THE GIVEN TYPE
	Function EventSelector(int type)
		If type == 1
			int iEventID = RandomNumber(1,iEvent1Count)
			if iEventID == 1
				Type1Event1()
			ElseiF iEventID == 2
				Type1Event2()
			ElseiF iEventID == 3
				Type1Event3()
			ElseiF iEventID == 4
				Type1Event4()
			ElseiF iEventID == 5
				Type1Event5()
			EndIf
		ElseIf type == 2
			int iEventID = RandomNumber(1,iEvent2Count)
			if iEventID == 1
				Type2Event1()
			ElseiF iEventID == 2
				Type2Event2()
			ElseiF iEventID == 3
				Type2Event3()
			ElseiF iEventID == 4
				Type2Event4()
			ElseiF iEventID == 5
				Type2Event5()
			EndIf
		ElseIf type == 3
			int iEventID = RandomNumber(1,iEvent3Count)
			if iEventID == 1
				Type3Event1()
			ElseiF iEventID == 2
				Type3Event2()
			ElseiF iEventID == 3
				Type3Event3()
			ElseiF iEventID == 4
				Type3Event4()
			ElseiF iEventID == 5
				Type3Event5()
			EndIf
		ElseIf type == 4
			int iEventID = RandomNumber(1,iEvent4Count)
			if iEventID == 1
				Type4Event1()
			ElseiF iEventID == 2
				Type4Event2()
			ElseiF iEventID == 3
				Type4Event3()
			ElseiF iEventID == 4
				Type4Event4()
			ElseiF iEventID == 5
				Type4Event5()
			EndIf
		ElseIf type == 5
			int iEventID = RandomNumber(1,iEvent5Count)
			if iEventID == 1
				Type5Event1()
			ElseiF iEventID == 2
				Type5Event2()
			ElseiF iEventID == 3
				Type5Event3()
			ElseiF iEventID == 4
				Type5Event4()
			ElseiF iEventID == 5
				Type5Event5()
			EndIf
		EndIf
	EndFunction


;Event Complete
	Function EventComplete()
		;do stuff
		EventInProgress = false
		Timer(fMainTimerDuration, 10)		; start the event timer again
	EndFunction

;---------------------GENERIC EVENTS--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

;--------------TYPE 1 EVENTS - MESSAGE BOX-------------

	Function Type1Event1()
		sNextEventTag = "ExampleFollowUpEvent"
		;do event stuff
			Debug.MessageBox("Type1Event1")
		EventComplete()
	EndFunction

	Function Type1Event2()
		sNextEventTag = "none"
		;do event stuff
			Debug.MessageBox("Type1Event2")
		EventComplete()
	EndFunction

	Function Type1Event3()
		sNextEventTag = "none"
		;do event stuff
			Debug.MessageBox("Type1Event3")
		EventComplete()
	EndFunction

	Function Type1Event4()
		sNextEventTag = "none"
		;do event stuff
			Debug.MessageBox("Type1Event4")
		EventComplete()
	EndFunction

	Function Type1Event5()
		sNextEventTag = "none"
		;do event stuff
			Debug.MessageBox("Type1Event5")
		EventComplete()
	EndFunction

;--------------TYPE 2 EVENTS - DIALOGUE-------------

	Function Type2Event1()
		sNextEventTag = "none"
		;do event stuff
			Debug.MessageBox("Type2Event1")
		EventComplete()
	EndFunction

	Function Type2Event2()
		sNextEventTag = "none"
		;do event stuff
			Debug.MessageBox("Type2Event2")
		EventComplete()
	EndFunction

	Function Type2Event3()
		sNextEventTag = "none"
		;do event stuff
			Debug.MessageBox("Type2Event3")
		EventComplete()
	EndFunction

	Function Type2Event4()
		sNextEventTag = "none"
		;do event stuff
			Debug.MessageBox("Type2Event4")
		EventComplete()
	EndFunction

	Function Type2Event5()
		sNextEventTag = "none"
		;do event stuff
			Debug.MessageBox("Type2Event5")
		EventComplete()
	EndFunction

;--------------TYPE 3 EVENTS - AAF-------------

	Function Type3Event1()
		sNextEventTag = "none"
		;do event stuff
			Debug.MessageBox("Type3Event1")
		EventComplete()
	EndFunction

	Function Type3Event2()
		sNextEventTag = "none"
		;do event stuff
			Debug.MessageBox("Type3Event2")
		EventComplete()
	EndFunction

	Function Type3Event3()
		sNextEventTag = "none"
		;do event stuff
			Debug.MessageBox("Type3Event3")
		EventComplete()
	EndFunction

	Function Type3Event4()
		sNextEventTag = "none"
		;do event stuff
			Debug.MessageBox("Type3Event4")
		EventComplete()
	EndFunction

	Function Type3Event5()
		sNextEventTag = "none"
		;do event stuff
			Debug.MessageBox("Type3Event5")
		EventComplete()
	EndFunction

;--------------TYPE 4 EVENTS - DEVIOUS DEVICES-------------
; EQUIPING/REMOVING/USING DEVIOUS DEVICES

	Function Type4Event1()	;TALK ABOUT DEVICES
		sNextEventTag = "none"
		;do event stuff
			Debug.MessageBox("Talk about devices")
			bDDTalk = true
			bApproachPlayer = true
			iQuestStage = 30
		EventComplete()
	EndFunction

	Function Type4Event2() ; DEVICE REACTIONS
		sNextEventTag = "none"
		;do event stuff
			If bPlayerCollared == true
			Debug.Notification("You are suddenly very aware of the collar around your neck")
			Timer(0.2, 12)
			EndIf
		EventComplete()
	EndFunction

	Function Type4Event3()
		sNextEventTag = "none"
		;do event stuff
			Debug.MessageBox("Type4Event3")
		EventComplete()
	EndFunction

	Function Type4Event4()
		sNextEventTag = "none"
		;do event stuff
			Debug.MessageBox("Type4Event4")
		EventComplete()
	EndFunction

	Function Type4Event5()
		sNextEventTag = "none"
		;do event stuff
			Debug.MessageBox("Type4Event5")
		EventComplete()
	EndFunction

;--------------TYPE 5 EVENTS - PLAYER ACTION OR RESTRICTION-------------
; 
	Function Type5Event1()
		sNextEventTag = "none"
		;do event stuff
			Debug.MessageBox("Type5Event1")
		EventComplete()
	EndFunction

	Function Type5Event2()
		sNextEventTag = "none"
		;do event stuff
			Debug.MessageBox("Type5Event2")
		EventComplete()
	EndFunction

	Function Type5Event3()
		sNextEventTag = "none"
		;do event stuff
			Debug.MessageBox("Type5Event3")
		EventComplete()
	EndFunction

	Function Type5Event4()
		sNextEventTag = "none"
		;do event stuff
			Debug.MessageBox("Type5Event4")
		EventComplete()
	EndFunction

	Function Type5Event5()
		sNextEventTag = "none"
		;do event stuff
			Debug.MessageBox("Type5Event5")
		EventComplete()
	EndFunction

;---------------------FOLLOWUP EVENTS--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;THESE EVENTS BYPASS THE RANDOM SYSTEM WHEN THE PARENT EVENT IS THE LAST ONE RUN

	Function ExampleFollowUpEvent()
		iLastEventTypeID = 0
		sNextEventTag = "none"
		;do event stuff
			Debug.MessageBox("example followup event selected")
		EventComplete()
	EndFunction

;---------------------STANDALONE EVENTS--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;THE CAN BE USED BY SCRIPT FRAGMENTS ETC WHEN A SPECIFIC EVENT IS REQUIRED

	Function ExampleStandAloneEvent()
		iLastEventTypeID = 0
		sNextEventTag = "none"
		;do event stuff
			Debug.MessageBox("example followup event selected")
		EventComplete()
	EndFunction

	Function DDEquip(string device, bool equip)
		iLastEventTypeID = 0
		sNextEventTag = "none"
		;do event stuf
		If device == "collar"
			if equip == true
				debug.notification("collar equipped")
				DDLibrary.EquipDevice(PlayerRefThatWorks, DDLibrary.DD_Collar_Leather_Black_Inventory)
				bPlayerCollared = true
				Timer(0.2, 12)
			else 
				debug.notification("collar removed")
				DDLibrary.RemoveDevice(PlayerRefThatWorks, DDLibrary.DD_Collar_Leather_Black_Inventory)
				bPlayerCollared = false
			EndIf
		ElseIf device == "gag"
			if equip == true
				debug.notification("gag equipped")
				DDLibrary.EquipDevice(PlayerRefThatWorks, DDLibrary.DD_Gag_Ball_Harness_Inventory)
				bPlayerGagged = true
				Timer(0.2, 12)
			else 
				debug.notification("collar removed")
				DDLibrary.RemoveDevice(PlayerRefThatWorks, DDLibrary.DD_Gag_Ball_Harness_Inventory)
				bPlayerGagged = false
			endif
		EndIF
		DeviousAssessment()
		EventComplete()
	EndFunction

;stop giving device comments if none are equipped
	Function DeviousAssessment()
		If  bPlayerBound == false && bPlayerGagged == false && bPlayerChaste == false && bPlayerChasteBra == false && bPlayerCollared == false
						CancelTimerGameTime(12)
		EndIf
	EndFunction

;---------------------MENU & ACTIONS--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;CONTROLS THE MAIN MOD INTERACTION MENU, ACTIONS PLAYER CAN TAKE AUTONOMOUSLY

; Message Box Template
	Function MessageBoxMain()
		Int iButton = MessageBoxMain.Show()
		If iButton == 0
			ConsentManager()
			return
		elseif iButton == 1
			ConsentManager()
			return
		elseif iButton == 2
			PlayerKneel()
		elseif iButton == 3
			PlayerKneel()
			return
		elseif iButton == 4
			AAFStartCouple(PlayerREF, DomREF, 10, true, true, "","DomMood(iDomMood)","Aggressive","Kissing")
			return
		elseif iButton == 5
			AAFStartSolo(PlayerREF, 20, true, true,"", "F", "Aggressive", "Masturbation,F")
			return
		elseif iButton == 6
			AAFStartSolo(PlayerRefThatWorks, 20, true, true,"", "F", "Aggressive","SexyDance")
			return
		elseif iButton == 7
			DDLibrary.EquipDevice(PlayerRefThatWorks, DDLibrary.DD_Collar_Leather_Black_Inventory)
			return
		elseif iButton == 8
			DDLibrary.RemoveDevice(PlayerRefThatWorks, DDLibrary.DD_Collar_Leather_Black_Inventory)
			return
		endif
	EndFunction

;CONSENT MODE
	Function ConsentManager()
		ConsentToggle = !ConsentToggle
		If ConsentToggle == true
			Debug.Notification("Consent Given")
			Timer(0.1, 10)
		Elseif ConsentToggle == false
			Debug.Notification("Consent Revoked")
			CancelTimerGameTime(10)
		EndIf
	EndFunction

;PLAYER KNEEL
	Function PlayerKneel()
		EventManager()
		if bPlayerKneeling == false
   			 Debug.Notification("You sink to your knees in submission.")
			Game.ForceThirdPerson()
			utility.wait(0.2)
			PlayerRefThatWorks.PlayIdle(SubmissionIdle)
		bPlayerKneeling = true
		elseif bPlayerKneeling == true
   			 Debug.Notification("You spring to your feet, eager to please.")
			PlayerRefThatWorks.PlayIdle(StopIdle)
			bPlayerKneeling = false
		EndIf
	EndFunction

;---------------------REACTION EVENTS--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;RESPONDING TO PLAYER ACTIVITY

; Player eats food event example

	Event Actor.OnItemEquipped(Actor akSource, Form akBaseObject, ObjectReference akReference)
		if akBaseObject.HasKeyword(ObjectTypeFood)
			 Debug.notification("Player Ate Food")
		endIf
	EndEvent

;---------------------AAF MANAGEMENT--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

;AAF Couple Template
	Function AAFStartCouple(actor aSexActor0, actor aSexActor1, float fDuration, Bool bPreventFurniture, Bool bUsePackages, String sPosition, String sIncludeTags, String sExcludeTags, String sCombinedTags)
		Debug.Notification("started aaf Couple function")
		Actor[] Actors = new Actor[2]
		actors[0] = aSexActor0
		actors[1] = aSexActor1
		AAF:AAF_API:SceneSettings settings = AAF_API.GetSceneSettings()
		settings.duration = fDuration
		settings.preventFurniture = bPreventFurniture
		settings.usePackages = bUsePackages
		settings.Position = sPosition
		settings.includeTags = sIncludeTags
		settings.excludeTags = sExcludeTags
		settings.combinedTags = sCombinedTags
  		  AAF_API.StartScene(actors, settings)
	EndFunction

;AAF SoloTemplate
	Function AAFStartSolo(actor aSexActor0, float fDuration, Bool bPreventFurniture, Bool bUsePackages, String sPosition, String sIncludeTags, String sExcludeTags, String sCombinedTags)
		Debug.Notification("started aaf Solo function")
		Actor[] Actors = new Actor[1]
		actors[0] = aSexActor0
		AAF:AAF_API:SceneSettings settings = AAF_API.GetSceneSettings()
		settings.duration = fDuration
		settings.preventFurniture = bPreventFurniture
		settings.usePackages = bUsePackages
		settings.Position = sPosition
		settings.includeTags = sIncludeTags
		settings.excludeTags = sExcludeTags
		settings.combinedTags = sCombinedTags
	EndFunction




 

 

 

Link to comment

Thanks for the assistance - it is working now!

 

One function was not working because I was calling a position it could not find.  This is becuase I used "" is it possible to specifict a empty position? or make arguments on a function optional?

 

The second one was not wokring becuase I apparently deleted the line that actually started AAF... because i'm an idiot.

 

Thanks again.

 

Link to comment
2 hours ago, gammons123 said:

Thanks for the assistance - it is working now!

Good to hear!

2 hours ago, gammons123 said:

One function was not working because I was calling a position it could not find.  This is becuase I used "" is it possible to specifict a empty position? or make arguments on a function optional?

I think it would work to use None instead of ""

 

You don't have to enter any of the SceneSettings values. They all are set to defaults initially. So, you just enter the ones that you need to affect in the situation.

 

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...