70 lines
1.9 KiB
GDScript
70 lines
1.9 KiB
GDScript
extends Node
|
|
|
|
var base: Base
|
|
|
|
## Quest this node holds
|
|
var quest: Quest
|
|
|
|
## Const of answer when quest is null
|
|
const NO_QUEST = "BASE_TAKE_QUEST_FAILED"
|
|
## Const of answer when quest is not null
|
|
const HAS_QUEST = "BASE_TAKE_QUEST_SUCCEED"
|
|
## Const of quest types
|
|
const QUEST_TYPE = {
|
|
Quest.Type.Elimination: "BASE_QUEST_ELIMINATION",
|
|
Quest.Type.Delivery: "BASE_QUEST_DELIVERY"
|
|
}
|
|
## Const of restrictions
|
|
const RESTRICTIONS = {
|
|
Quest.Restriction.NoDeaths: "BASE_QUEST_RESTRICTION_NO_DEATHS",
|
|
Quest.Restriction.NoWeapon: "BASE_QUEST_RESTRICTION_NO_WEAPON",
|
|
Quest.Restriction.Timer: "BASE_QUEST_RESTRICTION_TIMER"
|
|
}
|
|
|
|
## Answer about fetching quest
|
|
var answer: String = ""
|
|
## Last quest info
|
|
var info: String = ""
|
|
|
|
func _ready():
|
|
get_tree().create_timer(0.05).timeout.connect(fetch_quest)
|
|
|
|
func fetch_quest():
|
|
base = get_parent().base
|
|
quest = base.quest
|
|
make_answer(quest)
|
|
|
|
## Makes quest fetch answer
|
|
func make_answer(quest: Quest):
|
|
var has_quest = quest != null
|
|
if !has_quest:
|
|
answer = tr(NO_QUEST)
|
|
return
|
|
get_info(quest)
|
|
answer = tr(HAS_QUEST).format({"quest_info": info})
|
|
|
|
## Gets quest info
|
|
func get_info(quest: Quest):
|
|
var quest_format = {}
|
|
match quest.type:
|
|
Quest.Type.Elimination:
|
|
quest_format["amount"] = quest.progress_max
|
|
quest_format["target_class"] = tr(quest.data["target_class"])
|
|
Quest.Type.Delivery:
|
|
quest_format["base_name"] = tr(quest.data["base_name"])
|
|
var restrictions = ""
|
|
for restriction in quest.restrictions:
|
|
restrictions += tr(RESTRICTIONS[restriction]) + "\n"
|
|
quest_format["restrictions"] = restrictions
|
|
quest_format["reward"] = quest.reward_money
|
|
var quest_info = tr(QUEST_TYPE[quest.type]).format(quest_format)
|
|
info = quest_info
|
|
|
|
## Assigns quest to player by returning it and nullifying self quest
|
|
func assign_to_player() -> Quest:
|
|
quest.data["given_by"] = base.base_name
|
|
quest.status = Quest.Status.Taken
|
|
var temp_quest = quest
|
|
quest = null
|
|
make_answer(quest)
|
|
return temp_quest
|