Jump to content
⚠ Known Issue: Media on User Profiles ×

Quest alias conditional fills ignoring conditions


Recommended Posts

I have a problem with a quest alias conditional fill.

This is not a n00b thing, I have HUNDREDS of quest condition fills in published CK mods, its likely a corner/edge case defect.

A quest process picks actor ObjectReferences from a FormList (which makes them globally persistent), moves them to a hidden holding cell and marks them with an "ignore for future processing" keyword which works fine and reports in the Debug.Trace log:

SKK_476PrepareWorldQuestScript.PrepareCommonwealth [Actor < (001AC0CF)>] [ActorBase < (001AC0CD)>] [Cell <SKK476HoldingCell (080138BA)>] SKK_476NoDisableKeyword True

A following quest RefCollectionAlias conditional fill that looks for globally peristent actors to fill finds the expected ~600 actors, but also keeps including that specific INVULNERABLE actor EVEN THOUGH the conditional fill has specific exclusions (see picture) for GetInCell SKK476HoldingCell == 0 and HasKeyword SKK_476NoDisable == 0

Debug.Trace on the actor properties sitting happily in the RefCollectionAlias shows that the exclusion attributes are still attached: 

SKK_476ReplaceNPCQuestScript.PrepareNPC [Actor < (001AC0CF)>] [ActorBase < (001AC0CD)>] [Cell <SKK476HoldingCell (080138BA)>] SKK_476NoDisableKeyword True

How the hell is the quest conditional fill still picking the actor ? The ONLY unusual thing is that the Actorbase is INVULNERABLE which should not affect conditional  attribute evaluations. Unless it does.

Quest RefCollectionAlias fill conditions.jpg

Link to comment
Share on other sites

That's interesting.. well, I've never tried to exclude Invulnerable actors as far as I can remember but.. if I understand correctly, there are two quests, QuestA and QuestB. The RefColl fill of QuestA finds many actors, including the Invulnerable one, then it adds a Keyword call it "KeywordA" to the found actor refs and also keeps them in Self. Then the RefColl fill of QuestB, which has condition HasKeyword "KeywordA" == 0 Run on: Subject, still finds the Invulnerable actor.

  - What's the timeframe between the two RefColl fills? Is QuestB shortly follows QuestA?

  - How are the quests started? From a script, Start() or SendStoryEvent() or SendStoryEventAndWait()? If a script, one of multiple parallelly running scripts? ActiveMagicEffects maybe? Or editor defined Story Quest node?

  - How's the Keyword exactly applied onto the actors? "Alias Keywords"? AddKeyword() or maybe Alias >> "Apply To Ref"?

Will need to set up a test environment for this later..

Link to comment
Share on other sites

Timeframe is ~ 60 seconds between applying the exclusion keyword+moving the actor to holding cell and then finding it again.

The "finder" quests are not start game enabled and called from a controller quest script using Quest.Start() ... BUT that does not matter, they can be called [ StartQuest ] from the console with Debug.Trace in OnQuestInit() for the same repro.

The keyword is applied direct to the actor ObjectReference.AddKeyword() so it persists past transient alias membership.

Of all ~ 622 persistent ActorTypeNPC in base game and DLC the ONLY actor this affects is   [Actor < (001AC0CF)>] [ActorBase < (001AC0CD)>] 

To clear it from the debug log I am GetFormFromFile on that ObjectReference and removing it from any subsequent found RefCollections so my native scripts can silently remove all actors and quests from the world without hacking a single base game script or object and still generate ZERO debug log output. HA!

Link to comment
Share on other sites

  • Recently Browsing   0 members

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