Skip to content

UMIPQuestDataAsset

Overview

UMIPQuestDataAsset is the primary asset for a single quest: it holds FMIPQuestDefinition (quest tag, tasks, rewards, narrative hooks). GetPrimaryAssetId uses type Quest and the asset name. Editor-only target level fields support the Quest Flow Graph tool (SetComputedEXPReward, SetTargetLevels). Validation is strict on quest tag shape and per-task requirements so runtime line/parent resolution and task UIs do not silently break.

All paths below are relative to Plugins/ModularInventoryPlus/Source/ModularInventoryPlus/.


Key Classes & Files

Class File
UMIPQuestDataAsset Public/DataAsset/MIPQuestDataAsset.h
FMIPQuestDefinition Public/Quest/MIPQuestTypes.h
IsDataValid Private/DataAsset/MIPQuestDataAsset.cpp

Properties

Property Type Description
QuestDefinition FMIPQuestDefinition Tag, tasks, rewards, objectives.
TargetPlayerLevel, TargetPlayerExpPercent, … editor Quest graph “Set Target Level” helpers (WITH_EDITORONLY_DATA).

Editor validation

Quest tag depth

If QuestDefinition.QuestTag is valid, its string must contain exactly two dots (three segments: Root.Line.Quest). RequestDirectParent() at runtime assumes this shape.

Severity Condition Message
Error Dot count ≠ 2 QuestTag '%s' must be exactly 3 levels deep (Root.Line.Quest). Found %d dot(s).

Empty task list

If GetTaskDefs() is empty, validation returns early (no per-task errors). Result is Invalid only if errors were already added (e.g. quest tag error).

Per-task checks (all tasks)

For each task at Index:

Severity Condition Message
Error TaskObjective empty/whitespace Task objective is empty at index %d
Error ObjectiveCount <= 0 Task objective count is equals or below 0 at index %d

UMIPGoToLocationQuestTask

Severity Condition Message
Error Data table null Data Table is not selected in UMIPGoToLocationQuestTask
Error Row struct not FMIPMapData Data Table row struct must be a child of FMIPMapData in UMIPGoToLocationQuestTask
Error Row name none Row Name is not selected in UMIPGoToLocationQuestTask

UMIPEliminateMobQuestTask

Severity Condition Message
Error MobTag invalid MobTag is not set in UMIPEliminateMobQuestTask

UMIPChatWithNPCQuestTask

Severity Condition Message
Error ChatTexts empty ChatTexts is empty in UMIPChatWithNPCQuestTask
Error ChatWithNPCTag invalid ChatWithNPCTag is not set in UMIPChatWithNPCQuestTask

Final result: Invalid if Context.GetNumErrors() > 0.

Implementation: Private/DataAsset/MIPQuestDataAsset.cpp (#if WITH_EDITOR).


Integration

Topic Link
Quest component Quest
Quest simulation (editor state) UMIPQuestSimulationAsset
Data assets index Data assets index