Files
ProjectEleri/Source/ProjectEleri/DialogueSystem/QuestDatabase.h
2026-07-11 10:43:52 +02:00

134 lines
3.3 KiB
C++

// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "Engine/DataAsset.h"
#include "QuestDatabase.generated.h"
class UItem;
USTRUCT(BlueprintType)
struct FItemQuantity {
GENERATED_USTRUCT_BODY()
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
FName ItemID;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
int32 Quantity = 1;
};
USTRUCT(BlueprintType)
struct FQuest {
GENERATED_USTRUCT_BODY()
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="Quest IDs")
FName QuestID;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="Quest")
FName NpcID;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="Quest")
FName NextQuestID;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="Quest")
FName PrerequisiteQuestID;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="Quest")
TArray<FText> Responses;
//IDs of quests that each response triggers
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="Quest")
TArray<FName> ResponsesQuestLinks;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, meta = (Multiline = true), Category="Quest")
FText QuestMessage;
//If this is an order then how many days for completion
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="Quest")
int32 DeliverInDays;
//If prerequisite quest exists, how many days upon completion does this one trigger
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="Quest")
int32 DaysFromLastQuest;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="Quest")
TArray<FItemQuantity> QuestItemRequest;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="Quest")
TArray<FItemQuantity> QuestItemReward;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="Quest")
int32 QuestCrystalReward;
};
USTRUCT(BlueprintType)
struct FQuestItem {
GENERATED_USTRUCT_BODY()
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="Quest")
FName QuestID;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="Quest")
int32 QuestAcceptDay;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="Quest")
int32 QuestCompleteDay;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="Quest")
bool IsCompleted;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="Quest")
TArray<FName> ItemIDsSubmitted;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="Quest")
int32 ResponseIndex = -1;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="Quest")
bool ReadQuest;
};
USTRUCT(BlueprintType)
struct FNpcQuest {
GENERATED_USTRUCT_BODY()
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="Quest")
FName NpcID;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="Quest")
TArray<FName> QuestIDList;
};
USTRUCT(BlueprintType)
struct FQuests {
GENERATED_USTRUCT_BODY()
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="Quest")
FName NpcID;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="Quest")
TArray<FQuest> QuestList;
};
/**
*
*/
UCLASS()
class PROJECTELERI_API UQuestDatabase : public UDataAsset
{
GENERATED_BODY()
public:
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category="Quest")
TArray<FQuests> AllQuestsByNpc;
bool GetQuestData(FName QuestID, FQuest& quest);
TArray<FNpcQuest> SortQuestListByNpc(TArray<FQuest> questArray);
};