From 8f52da0f5d912dec34a349513cba9c5783d1544d Mon Sep 17 00:00:00 2001 From: Dominic Masters Date: Sun, 8 Jun 2025 21:38:38 -0500 Subject: [PATCH] Quest events --- scenes/Maps/TestMap/TestMap.tscn | 7 +- .../Event/Condition/EventIfQuestObjective.gd | 70 +++++++++++++++++++ .../Condition/EventIfQuestObjective.gd.uid | 1 + scripts/Event/Item/EventGetItem.gd | 6 +- .../EventQuestAllObjectivesComplete.gd | 28 ++++++++ .../EventQuestAllObjectivesComplete.gd.uid | 1 + .../Trigger/EventQuestObjectiveComplete.gd | 9 +-- 7 files changed, 106 insertions(+), 16 deletions(-) create mode 100644 scripts/Event/Condition/EventIfQuestObjective.gd create mode 100644 scripts/Event/Condition/EventIfQuestObjective.gd.uid create mode 100644 scripts/Event/Trigger/EventQuestAllObjectivesComplete.gd create mode 100644 scripts/Event/Trigger/EventQuestAllObjectivesComplete.gd.uid diff --git a/scenes/Maps/TestMap/TestMap.tscn b/scenes/Maps/TestMap/TestMap.tscn index 5bd4fd3..2d603fd 100644 --- a/scenes/Maps/TestMap/TestMap.tscn +++ b/scenes/Maps/TestMap/TestMap.tscn @@ -13,7 +13,7 @@ [ext_resource type="Script" uid="uid://b41umpbgqfuc2" path="res://scripts/Event/Item/EventGetItem.gd" id="10_avybc"] [ext_resource type="Script" uid="uid://0ygswaohp7kj" path="res://scripts/Event/EventFlagModify.gd" id="12_ncdgy"] [ext_resource type="Script" uid="uid://ccujhcc446mvh" path="res://scripts/Event/Condition/EventIfFlag.gd" id="13_60ixl"] -[ext_resource type="Script" uid="uid://baywtxo4wy5i4" path="res://scripts/Event/Trigger/EventQuestObjectiveComplete.gd" id="14_i48p6"] +[ext_resource type="Script" uid="uid://cvrib7pjlip8g" path="res://scripts/Event/Condition/EventIfQuestObjective.gd" id="14_i48p6"] [sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_e1h75"] sky_horizon_color = Color(0.59625, 0.6135, 0.6375, 1) @@ -142,10 +142,11 @@ event = 1 eventFlag = 1 metadata/_custom_type_script = "uid://0ygswaohp7kj" -[node name="EventGroup" type="Node" parent="Events"] +[node name="EventQuestAllObjectivesComplete" type="Node" parent="Events"] script = ExtResource("14_i48p6") +metadata/_custom_type_script = "uid://cvrib7pjlip8g" -[node name="TextTest" type="Node" parent="Events/EventGroup"] +[node name="TextTest" type="Node" parent="Events/EventQuestAllObjectivesComplete"] script = ExtResource("6_gxq5o") text = "testestest " diff --git a/scripts/Event/Condition/EventIfQuestObjective.gd b/scripts/Event/Condition/EventIfQuestObjective.gd new file mode 100644 index 0000000..88c744d --- /dev/null +++ b/scripts/Event/Condition/EventIfQuestObjective.gd @@ -0,0 +1,70 @@ +class_name EventIfQuestObjective extends "res://scripts/Event/Condition/EventIf.gd" + +enum Type { + ANY_OF_OBJECTIVES_COMPLETED, + ALL_OF_OBJECTIVES_COMPLETED, + ANY_OF_OBJECTIVES_NOT_COMPLETED, + ALL_OF_OBJECTIVES_NOT_COMPLETED, + SPECIFIC_OBJECTIVE_COMPLETED, + SPECIFIC_OBJECTIVE_NOT_COMPLETED, +} + +@export var questKey:QuestSystem.QuestKey = QuestSystem.QuestKey.TEST_QUEST +@export var type:Type = Type.ALL_OF_OBJECTIVES_COMPLETED +@export var objective:int = 0 +@export var triggerMultipleTimes: bool = false + +func _enter_tree() -> void: + QUEST.questUpdated.connect(onQuestUpdated) + +func _exit_tree() -> void: + QUEST.questUpdated.disconnect(onQuestUpdated) + +func onQuestUpdated(quest:Quest) -> void: + if self.ended: + if !self.triggerMultipleTimes: + return + self.reset() + + if quest.questKey != self.questKey: + return + + if !quest.isStarted(): + return + + match type: + Type.ANY_OF_OBJECTIVES_COMPLETED: + for objective in quest.objecitves: + if !objective.isCompleted(): + continue + self.start() + return + + Type.ALL_OF_OBJECTIVES_COMPLETED: + for objective in quest.objectives: + if !objective.isCompleted(): + return + self.start() + + Type.ANY_OF_OBJECTIVES_NOT_COMPLETED: + for objective in quest.objectives: + if objective.isCompleted(): + continue + self.start() + return + + Type.ALL_OF_OBJECTIVES_NOT_COMPLETED: + for objective in quest.objectives: + if objective.isCompleted(): + return + self.start() + + Type.SPECIFIC_OBJECTIVE_COMPLETED: + if quest.objectives[objective].isCompleted(): + self.start() + return + + Type.SPECIFIC_OBJECTIVE_NOT_COMPLETED: + if quest.objectives[objective].isCompleted(): + return + self.start() diff --git a/scripts/Event/Condition/EventIfQuestObjective.gd.uid b/scripts/Event/Condition/EventIfQuestObjective.gd.uid new file mode 100644 index 0000000..df6600e --- /dev/null +++ b/scripts/Event/Condition/EventIfQuestObjective.gd.uid @@ -0,0 +1 @@ +uid://cvrib7pjlip8g diff --git a/scripts/Event/Item/EventGetItem.gd b/scripts/Event/Item/EventGetItem.gd index 3054404..d023fce 100644 --- a/scripts/Event/Item/EventGetItem.gd +++ b/scripts/Event/Item/EventGetItem.gd @@ -48,11 +48,6 @@ func start() -> void: textboxEvent.count = quantity conversationEvent.addChildEvent(textboxEvent) - conversationEvent.eventEnded.connect(func(): - # Reward the item - rewardItem() - ) - # Begin processing super.start() startChild(conversationEvent) @@ -69,6 +64,7 @@ func isDone() -> bool: return conversationEvent.isDone() func end() -> void: + rewardItem() if removeNode: var parent = removeNode.get_parent() if parent: diff --git a/scripts/Event/Trigger/EventQuestAllObjectivesComplete.gd b/scripts/Event/Trigger/EventQuestAllObjectivesComplete.gd new file mode 100644 index 0000000..271b2f2 --- /dev/null +++ b/scripts/Event/Trigger/EventQuestAllObjectivesComplete.gd @@ -0,0 +1,28 @@ +class_name EventQuestAllObjectivesComplete extends "res://scripts/Event/Flow/EventGroup.gd" + +@export var questKey:QuestSystem.QuestKey = QuestSystem.QuestKey.TEST_QUEST +@export var triggerMultipleTimes: bool = false + +func _enter_tree() -> void: + QUEST.questUpdated.connect(onQuestUpdated) + +func _exit_tree() -> void: + QUEST.questUpdated.disconnect(onQuestUpdated) + +func onQuestUpdated(quest:Quest) -> void: + if self.ended: + if !self.triggerMultipleTimes: + return + self.reset() + + if quest.questKey != self.questKey: + return + + if !quest.isStarted(): + return + + for objective in quest.objectives: + if !objective.isCompleted(): + return + + self.start() \ No newline at end of file diff --git a/scripts/Event/Trigger/EventQuestAllObjectivesComplete.gd.uid b/scripts/Event/Trigger/EventQuestAllObjectivesComplete.gd.uid new file mode 100644 index 0000000..66c8ec6 --- /dev/null +++ b/scripts/Event/Trigger/EventQuestAllObjectivesComplete.gd.uid @@ -0,0 +1 @@ +uid://ck0vs0awnc4n2 diff --git a/scripts/Event/Trigger/EventQuestObjectiveComplete.gd b/scripts/Event/Trigger/EventQuestObjectiveComplete.gd index 647215d..aa14c05 100644 --- a/scripts/Event/Trigger/EventQuestObjectiveComplete.gd +++ b/scripts/Event/Trigger/EventQuestObjectiveComplete.gd @@ -4,15 +4,11 @@ class_name EventQuestObjectiveComplete extends "res://scripts/Event/Flow/EventGr @export var quest:QuestSystem.QuestKey = QuestSystem.QuestKey.TEST_QUEST @export var objectiveIndex:int = 0 -var hasTriggered:bool = false - func _enter_tree() -> void: QUEST.questUpdated.connect(onQuestUpdated) - pass func _exit_tree() -> void: QUEST.questUpdated.disconnect(onQuestUpdated) - pass func onQuestUpdated(quest:Quest) -> void: if self.ended: @@ -25,7 +21,4 @@ func onQuestUpdated(quest:Quest) -> void: if !quest.objectives[objectiveIndex].isCompleted(): return - - print("onObjectiveCompleted: %s" % quest.questKey) - self.start() - pass \ No newline at end of file + self.start() \ No newline at end of file