Quest Extension Plugin

might pick this up when my next paycheck lands.

Oh Nice to see you over here Luos!
Your effects are amazing!

Thanks for implementing Dump and Reload for the QuestManager … this seems to work good.

But I have a question: How do I get a list of currently running quests of a QuestManager? Something like an array of RuntimeQuest structs will be fine …
I need this for updating a quest journal I build, after reloading the QuestManager from a savegame object.

Maybe it’s provided somewhere in the plugin, but I was too blind to see it :wink:

And another problem …
I made a simple quest with complete condition “compare memory (latent)”. The quest class is a custom quest blueprint with some added variables.
Now everytime I save the quest and then close unreal editor and open it again, the “compare memory (latent)” is gone ^^ …

This does not happen when I make a quest based on the default quest class … odd …

Hi @Laurentius ,

Until now, the demos I worked on didn’t require a list of running quests, because they used events and comparing states.
Thats why I didn’t think about it at all until now.
Expect is soon! :slight_smile:

Will also check that conditions bug, thank you for reporting them!

Also, remember that is you want a variable in your quest to be saved while running, mark it as “SaveGame” (inside variable properties)

Greetings!

So, I found the error. Its something related to UE4 not suporting blueprint classes of type PrimaryDataAsset. And Quests are of this type.
Working on the fix :slight_smile:

Thank you for your fast answers! I’m looking forward to the new quest list feature.

In the current version I also have a hard time to get the name/title of a finished quest … the quest object is pending kill and the name can’t be read from it.
Version 1.2 had the quest asset in the RuntimeQuest struct … it’s gone in 1.3 …

I saw in the roadmap that a QuestDistributor is (or will be) in the works and think that it would also be useful to have a QuestListener component that can be added to
an Actor (e.g. Quest Target) in order to check relevant Quests or Memories if something has changed.

What do you think about the QuestListener?

That sounds very interesting, great idea!
Will think a little bit more about it and propose a design on our discord. Did you join?

I’m more active over there (just in case I’m don’t answer).

About the name/title of a finished quest,
I’m constantly trying to improve the API to make easier to use. To avoid confusions like in your case not differencing between the “Asset object” and the “Quest Script”.

I’m sorry if this update caused you any trouble, but I think you will find more clear and understandable what the new API offers.

In short terms, you now work with a “QuestScript” that has access to the asset and everything else.
(The RuntimeQuest struct too)

To access the info of a quest at any time you can do Get or Load directly over the quest asset. That will remain like that for ever :slight_smile:

Greetings,
muitxer

Maybe I don’t understand, but in the Event “OnQuestFinished (QuestManager)” you can’t use the QuestScript object to get the name (or whatever info) of the finished quest. It is pending kill …
Anyway - I found another way to delete quests from my quest journal.

The bug with the disappearing conpare memory (latent) in quest complete conditions is bugging me much more - I can’t use quest extension for now (but quests aren’t the last thing missing in my game :wink: )

And three more bugs:

  1. When a QuestManager is Saved (DumpRecord) and Reloaded (ReloadRecord) the values in the QuestManager Running Quests array have a None value (Memories work OK)
  2. If a quest that is part of a QuestGroup is finished the QuestGroup does not finish (I currently have just one (custom) Quest in the QuestGroup) … if all quest are finished inside a QuestGroup the QuestGroup should finish itself
  3. GetQuestManager does return None in my AI Character class … I can work around this by manually getting the QuestManager via GetGameMode->Cast->QuestManager, though.

And another bug …
StartRequirements in a Quest checking if a Quest is Succeeded do not work … the quest can be started or picked up via a QuestDistributor even if start condition should fail.

And a question:
How can I check if a quest can be started from a QuestDistributor by just giving me a Set of QuestBase soft object references?
In my current implementation I go through all quests available from a QuestDistributor and start them. But I need to check which ones are currently available and can be started …

  1. I’ve unfortunately not been able to reproduce that problem. It was already tested it before the release. Can you provide me with more details or a test project?

  2. Quest Groups don’t know what is happening inside, they only complete or fail when Complete/Fail nodes are called.
    I cant make it auto-complete when all quests copmplete because it would become inconsistent. Complete/Fail nodes may seem like an extra step but sometimes you want for example to complete when the quest fails, The system can’t assume what you need :slight_smile:

  3. If you have more than one Quest Manager don’t use GetQuestManager, it’s mainly used to simplify the usage to global QuestManagers. It’s my fault for not documenting it propertly.
    Next hotfix, (that includes things like GetRunningQuests/GetCompletedQuests), will have more documentation on every function.

I will also allow you to set the global questmanager manually instead of authomatically.

I’ve been able to reproduce that error and it’s now fixed. I also noticed that I forgot to implement Compare Quest (Latent) so that will go into the next release too.

About the Quest Distributors, they are in a very early state. Right now, as you know, they only contain a list of quests. And this quests work as a “filter” if you start a quest from this distributor.
I will improve them a little bit for you (Trello)

Since you were able to find a lot of things to improve I will push the hotfix soon. The only bug it won’t include is the conditions reseting, that one needs a little more time.

Thanks for your feedback!
muitxer

Maybe dump and restore doesn‘t work with custom quests?

One more question/feature request: is there a way to get the memories that conditions are currenty checked (and how many you need of each Memory!) of a running quest?
This is one reason why I need a custom quest…

I’ve known of this since conditions were created. How to extract their info to UI for example.
You could navigate trough the conditions of a quest script. But I know it is not the best way to do it and will have to improve it.

Annotated :slight_smile:

I saw that you updated Quest Extension for the Marketplace and gave it anouther try …
The project has just ->one<- QuestManager and it’s placed in my GameMode … here are my observations:

  1. Events (QuestStarted/Finished, MemoryRegistered … in my GameMode) never get fired, even for a simple (non custom) testquest. (Bug)
  2. GetQuestManager (I have one single QuestManager!) does always return None (Bug)
  3. a QuestManager has a single running (non custom) testquest and gets dumped to a SaveGame object and restored at the start of the game:
  • the running Quest is always “None” after restore. (Bug)
  • Memories or completed Quests are stored and reloaded OK!
  • this can be seen while running the game and watching the GameMode->QuestManager object …

I wanted to use the events to update my quest UI (Journal), but it’s not possible anymore.

The QuestManager was in my PlayerController while using an older version of Quest Extension (1.2?) - and the events worked ok - what’s wrong with putting the QuestManager inside the GameMode? (Just tested the QuestManager in the PlayerController … events do not work here, too …)

Do you have any idea what’s going wrong here?

I think my whole problem is that Dump/Restore QuestManager does not work correctly.
If I omit loading and saving the questmanager the events get fired again.

Can you please check if Dump/Restore works with a GameSave Blueprint?

Maybe the QuestManager gets into a state where it does not work anymore after loading a non valid QuestManagerRecord??

That is certainly a possibility, but I think I did check if it was valid or not before loading

I will work on it son anyway :slight_smile:

Hi @Laurentius ,

I was unable to reproduce this errors you wrote about:

  1. Events (QuestStarted/Finished, MemoryRegistered … in my GameMode) never get fired, even for a simple (non custom) testquest. (Bug)
    -> Working as expected, tested in many diferent environments.

  2. GetQuestManager (I have one single QuestManager!) does always return None (Bug)
    -> Working as expected, tested in many diferent environments. You can however try with the lastest version, Global Quest Manager has been improved.

  3. A QuestManager has a single running (non custom) testquest and gets dumped to a SaveGame object and restored at the start of the game:

  • the running Quest is always “None” after restore. (Bug)
    -> Working as expected, tested all variables and states. Everything seems to be normal.

To this state, I would love to ask you if a test project where this issues can be reproduced could be provided.

Greetings,
muit

Forgot to say that Custom Quests have received some important fixes, conditions will hopefully not reset again.

Fix coming very soon (1.3d)