78 lines
1.6 KiB
GDScript
78 lines
1.6 KiB
GDScript
class_name Quest extends Object
|
|
|
|
|
|
enum Status{
|
|
OPEN,
|
|
TAKEN,
|
|
IN_PROGRESS,
|
|
COMPLETED,
|
|
FAILED
|
|
}
|
|
|
|
|
|
var name : String = "A Basic Quest"
|
|
var desc : String = "The default quest, with no special anything."
|
|
var difficulty : int = 1
|
|
var location : String
|
|
var steps : int = 1
|
|
var rewards : Dictionary
|
|
var length : float = 10
|
|
var step_outcomes : Array = [
|
|
{"pass":"I succeeded!", "fail":"I failed!"}
|
|
]
|
|
|
|
|
|
|
|
var progress : float = 0
|
|
var current_step : int = 0
|
|
var taken : bool = false
|
|
var status : Status = Status.OPEN
|
|
|
|
var questor : AdventurerData = null
|
|
signal status_changed(status : Status)
|
|
|
|
func _init() -> void:
|
|
pass
|
|
|
|
func initiate(member : AdventurerData) -> void:
|
|
questor = member
|
|
status = Status.TAKEN
|
|
status_changed.emit(Status.TAKEN)
|
|
|
|
func fail() -> void:
|
|
status = Status.FAILED
|
|
status_changed.emit(Status.FAILED)
|
|
|
|
func complete() -> void:
|
|
status = Status.COMPLETED
|
|
status_changed.emit(Status.COMPLETED)
|
|
for reward in rewards.keys():
|
|
if reward == "gold":
|
|
questor.gain_gold(rewards[reward])
|
|
elif reward == "exp":
|
|
questor.gain_exp(rewards[reward])
|
|
#TODO: Implement other reward types
|
|
#elif rewards[reward] is Item:
|
|
# questor.gain_item()
|
|
#else it's a guild item they'll bring back for us
|
|
Game.notice("%s completed the quest '%s'!" % [questor.full_name(), name])
|
|
|
|
#TODO: Put in quest requirements
|
|
func is_eligible(member : AdventurerData) -> bool:
|
|
return !taken
|
|
|
|
func is_taken() -> bool:
|
|
return status == Status.TAKEN
|
|
|
|
|
|
|
|
func difficulty_name() -> String:
|
|
match(difficulty):
|
|
0: return "None"
|
|
1: return "Trivial"
|
|
2: return "Moderate"
|
|
3: return "Severe"
|
|
4: return "Extreme"
|
|
5: return "Legendary"
|
|
_: return "Unknown"
|