Here is a breakdown of the main components found in the Blueprints/Components/ folder, inside these components you can find most of the processes and handlers for the quest system:
Just a heads up, I plan to expand on this section of the documentation in the near future to include an outline of the public functions for these key actor components.
AC_QuestSystem_PlayerController - This component handles player interactions, quest indicators and the UI (this is where you can get a reference to
questHUD, which is the hud for the quest system, the
UI_QuestSystem_HUD blueprint). We also use this component to attach the player state component (see next) as well as spawn the
World Quest Helper if it is not detected in our level on initialization. This player controller component is the one we added to the player controller during
installation.
AC_QuestSystem_PlayerState - This component is responsible for everything related to managing quest data specific to the player. This component is added to your player state automatically by the AC_QuestSystem_PlayerController during initialization and also attempted (if needed) when your possessed pawn changes (for server travel).
AC_QuestSystem_Actor - This component is responsible for managing objectives specific to the quest actor it is attached to. It will detect the player (from the server) and let them know they can interact with the actor, to either complete a
Quest Objective or show a quest window. This component also handles completing the Travel To objective, as well as keeping track of which players should receive credit for Destroy Target objectives. This is the component the
World Quest Helper adds to actors it detects in your world related to quests automatically during its actor scan and when manually checked in. This component will add a sphere collision to your actor to help assist in handling the overlap related tasks it is responsible for.
AC_ReplicateActorTags - While this is not used by the system, it is there to help you if you need it. By default actor tags that are added dynamically at runtime don't replicate. Unfortunately we need these tags on the client for our indicators. If you are dynamically adding tags at runtime instead of embedding them into your blueprints, and you are not manually replicating them yourself you can add this component to the actor after adding your tags and it will handle replicating them to the client for you. Keep in mind this will enable replication on your actor if needed.
The AC_QuestSystem_PlayerState component is where all the event dispatchers related to quest data and objectives can be found.
For each player state event there is a matching event with the prefix UI_. In multiplayer the events with the UI_ prefix will only run on the client, whereas the ones without this prefix will only run on the server.
In addition to the QuestRowName, each of these events will provide additional relevant data.
UI_QuestSystemLoaded - Called when the quest system is done loading. You can check the value of isQuestSystemLoaded? before using this event dispatcher to see if it is already loaded.
UI_NoQuestsInLevel - Called when the quest system is done loading and no levels were found in the current level.
UI_QuestAutoAccepted - Called when a quest is auto accepted, using the
Quest Options Auto Accept Quest? setting.
UI_QuestAutoCompleted - Called when a quest is auto completed, using the
Quest Options Auto Complete Quest? setting.
UI_QuestStateChanged - Called when a
quest state changes.
UI_QuestRepeatableReset - Called when a repeatable
quest type resets.
UI_QuestAbandoned - Called when a quest is abandoned (dropped by the player).
UI_QuestObjectiveComplete - Called when a
quest objective for the quest is completed.
UI_QuestObjectiveCountChange - Called when a quest objective's count progress changes.
UI_QuestActorIgnoreListUpdated - Called when a quest actor is added to the ignore list for the player.
UI_QuestTurninMissingItems - Called when the player attempts to turn in items, for the turn in objective, but does not have all the required items.
UI_QuestTrackingChanged - Called whenever the tracked quests change.
The AC_QuestSystem_PlayerController has a few more event dispatchers related to the UI side of quest interaction, and when a quest is shared. With the exception of InteractedWithSomething, these events are specific to the client only (only the UI_ version is available).
UI_InteractedWithSomething - Called when the player interacts with something. This event is the only one on the controller that runs on both server and client, all other events below are client only.
UI_TryingToInteract - Called (on the client only) when the player is trying to interact with something.
UI_NothingToInteract - Called (on the client only) when the player attempts to interact but has nothing to interact with.
UI_ShowInteractNotice - Called (on the client only) when the quest system detects a nearby interactable quest actor.
UI_HideInteractNotice - Called (on the client only) when the quest system clears the currently detected interactable quest actor.
UI_QuestShared - Called (on the client only) when a quest is shared. This is called on the client who is receiving the shared quest.
The function library is very simple in this version. It includes just 3 functions:
replicationError - A print string helper, used throughout the project to notify the developer if they are attempting to handle something from the client that should only be handled from the server in a
multiplayer game.
auditLoop - A function used to audit the speed of loops, this is only used when audit mode is enabled (see next function).
isAuditMode? - False by default, but when true will run the audit loops and print string the results. The loops that are audited are related to actor scanning (on server) and indicator scanning (on client).
There are a number of interfaces included with this system, most are used internally however BPI_Quest_Actor_Options and BPI_Quest_ConnectedSystems are intended for your use, and you can learn more about the actor one on the Quest Actors page, and the Connected Systems one on the Connected Systems page.
There is only one data table, DT_Quests, and it can be found in the Blueprints/Variables/DataTables folder. This data table is used to store all of our information about our quests. The structure for this data table F_Quest can be found in the Blueprints/Variables/Structures/ folder.
A break down of each variable found in this table can be found on the How to Make a Quest page.
Structures can be found in the Blueprints/Variables/Structures/ folder.
Enumerations can be found in the Blueprints/Variables/Enums/ folder.
WARNING: DO NOT DELETE OR MOVE ITEMS AROUND IN THE PROVIDED ENUMS!
THE UE5 EDITOR IS SENSITIVE AND WILL BREAK THINGS SAVED LIKE VALUES IN VARIABLES AND DATA IN THE DATA TABLE. IF THERE IS SOMETHING YOU DON'T PLAN ON USING IN ONE OF THESE ENUMS JUST IGNORE IT.
All UIs for this quest system can be found in the UIs/ folder. A break down of each UI can be found on the User Interfaces page.