Jump to content

Recommended Posts

24 minutes ago, madeyoulook said:

Hi, I'm getting the "[061] no available actors in scan range" error whenever I open AAF and it stays like that no matter what I do. I've tried reinstalling, uninstalling and deleting everything AAF related to no avail. However, animations do work when I initiate them through SEU, the catch here is though that they get cut off short (last like 10 seconds) and I get error codes "[028] actor failed to lock in, cancelling animation" and [032] Actor: PCNAME :20] lock timed out. I don't really know what to do to fix this but any help will be appreciated!

 

Address that missing furniture definition error first. You clearly have some incompatible animation data (most commonly an animation pack and an animation patch altering it but built for a different version). For faster assistance, check into the help channels on the AAF Discord.

Link to comment
14 minutes ago, vaultbait said:

 

Address that missing furniture definition error first. You clearly have some incompatible animation data (most commonly an animation pack and an animation patch altering it but built for a different version). For faster assistance, check into the help channels on the AAF Discord.

Ok I'll check in with discord. Thank you!

Link to comment

How one would add custom race using existing skeletons to AAF ?

I've just found GO4 Dogmeat Changer XB by sp0ckrates that creates a bunch of custom races so that you can switch Dogmeat into different existing creatures, but they all default to "Human" in AAF.

I've tried to add one of the race to the "AAF_raceData_Fallout4.xml" so that it would use the animations made for that squeleton, but without any results so far (it looks like this, I've added a line before the </raceData> and put it there)

 

<race id="Deathclaw" source="GO4_Dogmeat_Changer_XB_sp0ckrates.esp" form="13006AE1" skeleton="Deathclaw" requiresAnimationReset="true"/>

 

I pulled the form ID with a console commands, I've checked other existing race and the numbers match with what is in the xml so I believe I put in the right numbers. Does the "id" needs to be something specific or is it only to help you know what it is supposed to be in the xml ?

Link to comment
11 hours ago, serhiodrubuzan said:

Tell me where to download AAF  XML  1. 0. 3.  ?

 

Are you talking about AJ's Various AAF XML Files from years ago? If so, I don't think 1.0.3 of that is compatible with anything these days. Where did you find "AAF XML 1.0.3" mentioned?

Link to comment
10 hours ago, vaultbait said:

 

Are you talking about AJ's Various AAF XML Files from years ago? If so, I don't think 1.0.3 of that is compatible with anything these days. Where did you find "AAF XML 1.0.3" mentioned?

It was on Loverslab and i accidentary deleted it . It worked great with Viodoe dick for femele servitron

Link to comment
On 8/3/2022 at 7:24 AM, TheZomby said:

How one would add custom race using existing skeletons to AAF ?

I've just found GO4 Dogmeat Changer XB by sp0ckrates that creates a bunch of custom races so that you can switch Dogmeat into different existing creatures, but they all default to "Human" in AAF.

I've tried to add one of the race to the "AAF_raceData_Fallout4.xml" so that it would use the animations made for that squeleton, but without any results so far (it looks like this, I've added a line before the </raceData> and put it there)

 

<race id="Deathclaw" source="GO4_Dogmeat_Changer_XB_sp0ckrates.esp" form="13006AE1" skeleton="Deathclaw" requiresAnimationReset="true"/>

 

I pulled the form ID with a console commands, I've checked other existing race and the numbers match with what is in the xml so I believe I put in the right numbers. Does the "id" needs to be something specific or is it only to help you know what it is supposed to be in the xml ?

Id is specific reference to race in .esp

Link to comment
9 hours ago, Indarello said:

Id is specific reference to race in .esp

Thanks, I went to check it in FO4Edit and it is working now, it recognise the race as Deathclaw. Next problem now is there is no penis on the deathclaw, need to find what file I need to add to it next.

image.png

Link to comment

Toying with doing a soft AAF integration in a Papyrus script, and am running up against a wall. I've had luck relying on ScriptObject.CallFunction elsewhere, including calling AAF's GetProtectedEquipmentKeywords() to optionally identify items AAF wouldn't strip from a character. Unfortunately, one thing I need in order to use it to call StartScene() is the ability to pass Actor[] in, but CallFunction needs the called function's parameters supplied in a variant array already, and arrays in arrays aren't a thing. I tried packing my actors array with VarArrayToVar() but continue to get a type mismatch logged, probably because CallFunction is extremely picky about matching object types exactly, and the packed array won't be type Actor[].

 

Has anyone had any luck writing something along these lines, or am I trying to do the impossible? Should I be creating a proxy script which calls the AAF API normally so I can implement serialization/deserialization which CallFunction won't choke on?

Link to comment
On 8/8/2022 at 4:13 PM, vaultbait said:

Toying with doing a soft AAF integration in a Papyrus script, and am running up against a wall. I've had luck relying on ScriptObject.CallFunction elsewhere, including calling AAF's GetProtectedEquipmentKeywords() to optionally identify items AAF wouldn't strip from a character. Unfortunately, one thing I need in order to use it to call StartScene() is the ability to pass Actor[] in, but CallFunction needs the called function's parameters supplied in a variant array already, and arrays in arrays aren't a thing. I tried packing my actors array with VarArrayToVar() but continue to get a type mismatch logged, probably because CallFunction is extremely picky about matching object types exactly, and the packed array won't be type Actor[].

 

Has anyone had any luck writing something along these lines, or am I trying to do the impossible? Should I be creating a proxy script which calls the AAF API normally so I can implement serialization/deserialization which CallFunction won't choke on?

 

I'm not sure myself. Not clear what you are trying to do. But, @EgoBallistic might have a better idea for Papyrus issues like this.

 

19 hours ago, Cannaisseur said:

I'm not quite sure what I'm doing with the keyword.  Do I just need to create a plugin to remove it? I thought there'd be more to it.

 

You put the keyword onto actors that you want AAF to ignore.

 

Yes. This would be done by creating a separate mod.

Link to comment
1 hour ago, dagobaking said:

I'm not sure myself. Not clear what you are trying to do. But, @EgoBallistic might have a better idea for Papyrus issues like this.

 

Thanks. To restate, I'm trying to conditionally call AAF's StartScene() function from a Papyrus script in my mod attached to an Actor reference as a makeshift activator, but only when AAF.esm is actually installed/enabled (as a so-called "soft dependency"). Creating a ScriptObject from the soft-depended plugin and then passing the name of the desired function and a variant array of its parameters to the CallFunction() method is how this is usually done, since the indirection makes it possible to still execute the script and optionally resolve that dependency at execution time. The closest I've gotten is this, which compiles but results in a type mismatch at runtime:

 

Spoiler
Scriptname ExampleScene extends Actor Const

Event OnActivate(ObjectReference akActionRef)
    If (akActionRef == Game.GetPlayer() as ObjectReference)
        If Game.IsPluginInstalled("AAF.esm") ; soft integration
            Quest AAF_MainQuest = Game.GetFormFromFile(0x00000F99, "AAF.esm") as Quest
            ScriptObject AAF_API = AAF_MainQuest.CastAs("AAF:AAF_API")
            var[] Parameters = new var[0] ; this will hold parameters passed to StartScene
            var[] Actors = new var[0] ; our actorlist will be the first parameter
            Actors.Add(Game.GetPlayer())
            Actors.Add(Self as Actor)
            Parameters.Add(Utility.VarArrayToVar(Actors)) ; pack the actors array
            Parameters.Add(None) ; pass an empty SceneSettings for now
            AAF_API.CallFunction("StartScene", Parameters)
        Else
            ; consolation prize
        EndIf
    EndIf
EndEvent

 

 

Link to comment
3 hours ago, dagobaking said:

 

I'm not sure myself. Not clear what you are trying to do. But, @EgoBallistic might have a better idea for Papyrus issues like this.

 

 

You put the keyword onto actors that you want AAF to ignore.

 

Yes. This would be done by creating a separate mod.

I want to create a plugin to make knocked out actors NOT ignore AAF.  I'm trying to stop them from being ignored.

Link to comment
On 7/31/2022 at 4:30 PM, madeyoulook said:

Hi, I'm getting the "[061] no available actors in scan range" error whenever I open AAF and it stays like that no matter what I do. I've tried reinstalling, uninstalling and deleting everything AAF related to no avail. However, animations do work when I initiate them through SEU, the catch here is though that they get cut off short (last like 10 seconds) and I get error codes "[028] actor failed to lock in, cancelling animation" and [032] Actor: PCNAME :20] lock timed out. I don't really know what to do to fix this but any help will be appreciated!

 

  Reveal hidden contents

1709918235_Screenshot2022-07-31152253.png.c6976d643fa275d0e5a493af471e7958.png

 

I'm having the same problem.  If you got a fix, I and anyone else with the issue would appreciate posting it here.

Link to comment
9 hours ago, vaultbait said:

Thanks. To restate, I'm trying to conditionally call AAF's StartScene() function from a Papyrus script in my mod attached to an Actor reference as a makeshift activator, but only when AAF.esm is actually installed/enabled (as a so-called "soft dependency"). Creating a ScriptObject from the soft-depended plugin and then passing the name of the desired function and a variant array of its parameters to the CallFunction() method is how this is usually done, since the indirection makes it possible to still execute the script and optionally resolve that dependency at execution time. The closest I've gotten is this, which compiles but results in a type mismatch at runtime:

 

The runtime type mismatch is because StartScene() expects the first parameter to be Actor[] and not a Var which it then expands with VarToVarArray().

 

It will be much less painful to write a proxy quest that makes the AAF calls for you.  How I do this:

 

Make a new standalone quest AAF_ProxyQuest, and give it a script AAF_ProxyScript. 

  • You can make AAF_ProxyScript assume that AAF is available, and make it fully dependent on AAF.  You can use the SceneSettings struct, use the AAF keywords as Properties, call functions without using CallFunction(), and listen for AAF events. 
  • AAF_ProxyScript can also depend on your mod's scripts, it doesn't need to use CallFunction to interact with your other scripts.
  • In AAF_ProxyQuest's settings, make sure "Run Once" and "Start Game Enabled" are turned OFF.

Now, in AAF_ProxyScript, you need to make a wrapper function for StartScene that can be called via CallFunction(). 

  • Make the first parameter a Var which will contain the Actors array packed by VarArrayToVar(). 
  • Make the other parameters whatever you need, e.g. includeTags, excludeTags, skipWalk, etc. 
  • Then the wrapper function unpacks the Actors and puts the various other parameters into SceneSettings, and calls AAF.

In your mod's main quest, you need to check whether AAF is loaded, and start the proxy quest if it is:
 

GlobalVariable Property AAF_Available Auto Const

Function LoadAAF
    Quest AAF_ProxyQuest = Game.GetFormFromFile(0x000123, "MyMod.esp") as Quest
    AAF_ProxyQuest.Stop()   
    If Game.IsPluginInstalled("AAF.esm")
        AAF_Available.SetValue(1)
        AAF_ProxyQuest.Start()
    Else
        AAF_Available.SetValue(0)
    EndIf
EndFunction

 

You can then use the GlobalVariable to let other scripts know whether they can use the proxy.

 

If AAF_Available.GetValue() == 1
    Quest AAF_ProxyQuest = Game.GetFormFromFile(0x000123, "MyMod.esp") as Quest
    ScriptObject AAFProxy = AAF_ProxyQuest.CastAs("AAF_ProxyScript")
    ; set up your AAF variables
    AAFProxy.CallFunction(...)
Else
    ; AAF not available
EndIf

 

Your other scripts must not have any script dependencies on AAF_ProxyScript, i.e. they can only access it via GetFormFromFile() and CallFunction().  This is so that if AAF is not installed, the AAF_ProxyScript will fail due to incomplete types, but the other scripts will be protected because they don't in turn depend on AAF_ProxyScript.

 

Edited by EgoBallistic
Link to comment
4 hours ago, EgoBallistic said:

Your other scripts must not have any script dependencies on AAF_ProxyScript, i.e. they can only access it via GetFormFromFile() and CallFunction().  This is so that if AAF is not installed, the AAF_ProxyScript will fail due to incomplete types, but the other scripts will be protected because they don't in turn depend on AAF_ProxyScript.

 

This was my fallback plan, so glad to know that it should work at least. I didn't know if there might be more direct serialization options for packing array type parameters into the CallFunction parameters array such that they'd come out usable at the other end, but it sounds like my suspicions were, unfortunately, correct. Thanks for confirming!

 

Edit: Yep, this approach worked perfectly. I'm able to walk up to an NPC who has the activator script bound to them, click on them as if to talk, and AAF fires up a scene as intended, all via a soft dependency on the proxy script so that AAF remains functionally optional.

Edited by vaultbait
Link to comment
21 hours ago, Cannaisseur said:

I want to create a plugin to make knocked out actors NOT ignore AAF.  I'm trying to stop them from being ignored.

I'm pretty sure they aren't ignored by AAF cause i remember starting a scene with a knocked out NPC but If you are making a patch, you need to wake them first otherwise they will stay laying on the ground like dead bodies during the scene.

Download ko Framework API files (very helpful) and start from there.

 

Edited by lee3310
Link to comment
5 hours ago, lee3310 said:

I'm pretty sure they aren't ignored by AAF cause i remember starting a scene with a knocked out NPC but If you are making a patch, you need to wake them first otherwise they will stay laying on the ground like dead bodies during the scene.

Download ko Framework API files (very helpful) and start from there.

 

Yes, this is what I'm trying to do.

Link to comment
12 hours ago, Cannaisseur said:

Yes, this is what I'm trying to do.

 

Let us know if you have questions about AAF functionality. But, it sounds like you may need to look more into how KO framework works (I have no idea) or even just general how-to-make-a-mod type tutorials.

Link to comment

Peeps keep telling me about this, and I'm finally checking it out. Worried me when it redirected me to some other site, but it literally only took like 30 seconds to create an account, so that's cool, and it downloaded instantly.

Thanks a million. I really don't have any clue what in the world to download with this though. Maybe you could tell me what you like to use with it?

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
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more information, see our Privacy Policy & Terms of Use