42 lines
1.3 KiB
GDScript
42 lines
1.3 KiB
GDScript
extends Resource
|
|
class_name QuestData
|
|
|
|
enum QuestState { LOCKED, AVAILABLE, ACTIVE, COMPLETED, FAILED }
|
|
enum Category { MAIN, SIDE, HIDDEN }
|
|
|
|
@export var quest_id: StringName = &""
|
|
@export var title: String = ""
|
|
@export_multiline var description: String = ""
|
|
@export var category: Category = Category.SIDE
|
|
@export var objectives: Array[QuestObjective] = []
|
|
@export var rewards: Array[QuestReward] = []
|
|
@export var prerequisites: Array[StringName] = []
|
|
@export var requires_manual_unlock: bool = false
|
|
@export var chapter_index: int = 0
|
|
|
|
## NOUVEAU : conditions sur les flags pour que la quête soit disponible.
|
|
## Exemple :
|
|
## { &"prof_rencontre": true, &"badges_gagnes": 3 }
|
|
@export var required_flags: Dictionary = {}
|
|
|
|
## NOUVEAU : si l'un de ces flags est vrai, la quête ne se débloque PAS.
|
|
## Utile pour les choix exclusifs (ex: avoir choisi la Team Rocket).
|
|
@export var blocking_flags: Dictionary = {}
|
|
|
|
var state: QuestState = QuestState.LOCKED
|
|
|
|
func get_required_objectives() -> Array[QuestObjective]:
|
|
return objectives.filter(func(o): return not o.is_optional)
|
|
|
|
func are_all_objectives_complete() -> bool:
|
|
for obj in get_required_objectives():
|
|
if not obj.is_complete():
|
|
return false
|
|
return true
|
|
|
|
func get_state_name() -> String:
|
|
return QuestState.keys()[state]
|
|
|
|
func get_category_name() -> String:
|
|
return Category.keys()[category]
|