From 9bff79e0192ecc7a534baa358a8a1a35b692f571 Mon Sep 17 00:00:00 2001 From: 2ndbeam <166764593+2ndbeam@users.noreply.github.com> Date: Sun, 2 Jun 2024 20:40:10 +0300 Subject: [PATCH] Quest restrictions (2/3) and current quest info --- scenes/Star System/star_system_debug.tscn | 2 ++ scripts/Base/Menu/dialogue.gd | 16 +++++++++++++++- scripts/Base/Menu/quest.gd | 20 +++++++++++++------- scripts/Base/base.gd | 3 +++ scripts/Ship/player_ship.gd | 7 +++++-- scripts/Ship/weapon.gd | 3 +-- scripts/Star System/star_system.gd | 10 ++++++++++ translations/base_dialogue.csv | 4 ++-- translations/base_dialogue.en.translation | Bin 2750 -> 2746 bytes translations/base_dialogue.ru.translation | Bin 4309 -> 4313 bytes translations/bases.csv | 4 ++-- translations/bases.en.translation | Bin 466 -> 474 bytes translations/bases.ru.translation | Bin 505 -> 521 bytes 13 files changed, 53 insertions(+), 16 deletions(-) diff --git a/scenes/Star System/star_system_debug.tscn b/scenes/Star System/star_system_debug.tscn index a667e61..762a78e 100644 --- a/scenes/Star System/star_system_debug.tscn +++ b/scenes/Star System/star_system_debug.tscn @@ -30,6 +30,7 @@ position = Vector2(19, 10) [node name="Base" parent="FactionPeaceful" index="0" instance=ExtResource("3_m5ica")] position = Vector2(719, -559) +base_name = "BASE_NAME_0" items_on_sell = Array[Resource("res://scripts/Classes/item.gd")]([ExtResource("4_xwim1"), ExtResource("5_oxe5h"), ExtResource("6_mrd6j")]) items_on_buy = Array[Resource("res://scripts/Classes/item.gd")]([ExtResource("7_x535v"), ExtResource("6_mrd6j")]) quest = ExtResource("8_i1pnu") @@ -37,6 +38,7 @@ quest = ExtResource("8_i1pnu") [node name="Base2" parent="FactionPeaceful" index="1" instance=ExtResource("3_m5ica")] position = Vector2(721, 785) rotation = 3.14159 +base_name = "BASE_NAME_1" quest = ExtResource("10_gy1bh") [node name="KamikazeShip" parent="FactionAggressive" index="0" instance=ExtResource("4_i6rbg")] diff --git a/scripts/Base/Menu/dialogue.gd b/scripts/Base/Menu/dialogue.gd index 2445aa0..ba85684 100644 --- a/scripts/Base/Menu/dialogue.gd +++ b/scripts/Base/Menu/dialogue.gd @@ -14,6 +14,11 @@ const TAKE_QUEST = "BASE_TAKE_QUEST" const ACCEPT_QUEST = "BASE_QUEST_ACCEPT" ## This message will trigger quest node to take quest from player const CANCEL_QUEST = "BASE_QUEST_CANCEL" +## This message will trigger quest node to get quest info +const QUEST_INFO = "BASE_QUEST_INFO" + +## Quest progress template +const QUEST_PROGRESS = "{cur} / {max}" @onready var dialogue = $DialogueView @onready var buy_sell = $"../../BuySell" @@ -48,13 +53,22 @@ func send_message(msg: Message): format["amount"] = actions_menu.buy_sell_amount format["item_name"] = item_name TAKE_QUEST: + quest.make_answer(quest.quest) format["answer"] = quest.answer if quest.answer == tr(quest.NO_QUEST): get_tree().create_timer(0.05).timeout.connect(actions_menu.transit_menu.bind(0)) ACCEPT_QUEST: - actions_menu.player_ship.quest = quest.assign_to_player() + var player_ship = actions_menu.player_ship + player_ship.quest = quest.assign_to_player() + player_ship.quest.quest_failed.connect(player_ship.on_quest_failed) CANCEL_QUEST: actions_menu.player_ship.quest = null + QUEST_INFO: + var cur_quest = actions_menu.player_ship.quest + quest.get_info(cur_quest) + format["answer"] = quest.info + format["given_by"] = tr(cur_quest.data["given_by"]) + format["progress"] = QUEST_PROGRESS.format({"cur": cur_quest.progress, "max": cur_quest.progress_max}) var new_msg = tr(msg.fact + "_RECEIVED").format(format) var old_len = len(dialogue.get_parsed_text()) diff --git a/scripts/Base/Menu/quest.gd b/scripts/Base/Menu/quest.gd index 45718e9..d99341d 100644 --- a/scripts/Base/Menu/quest.gd +++ b/scripts/Base/Menu/quest.gd @@ -3,10 +3,7 @@ extends Node var base: Base ## Quest this node holds -var quest: Quest: - set(value): - has_quest = value != null - quest = value +var quest: Quest ## Const of answer when quest is null const NO_QUEST = "BASE_TAKE_QUEST_FAILED" @@ -23,8 +20,11 @@ const RESTRICTIONS = { Quest.Restriction.NoWeapon: "BASE_QUEST_RESTRICTION_NO_WEAPON", Quest.Restriction.Timer: "BASE_QUEST_RESTRICTION_TIMER" } -var has_quest: bool = false + +## 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) @@ -34,11 +34,17 @@ func fetch_quest(): 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: @@ -52,11 +58,11 @@ func make_answer(quest: Quest): quest_format["restrictions"] = restrictions quest_format["reward"] = quest.reward_money var quest_info = tr(QUEST_TYPE[quest.type]).format(quest_format) - var final_format = {"quest_info": quest_info} - answer = tr(HAS_QUEST).format(final_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 diff --git a/scripts/Base/base.gd b/scripts/Base/base.gd index 8f7ebb3..f912ba2 100644 --- a/scripts/Base/base.gd +++ b/scripts/Base/base.gd @@ -19,6 +19,8 @@ signal dock_requested @export var menu: PackedScene ## Faction that this base represents @export var faction: Game.Faction +## Name of this base +@export var base_name: String ## List of items that this base sells @export var items_on_sell: Array[Item] @@ -42,6 +44,7 @@ var touching_dock = false var player_ship = null func _ready(): + get_tree().current_scene.bases.append(self) mouse_entered.connect(star_system.set_targeted_node.bind(self)) mouse_exited.connect(star_system.clear_targeted_node) gate_area.body_entered.connect(gate_area_body_entered) diff --git a/scripts/Ship/player_ship.gd b/scripts/Ship/player_ship.gd index 8f925f0..5104c92 100644 --- a/scripts/Ship/player_ship.gd +++ b/scripts/Ship/player_ship.gd @@ -26,5 +26,8 @@ func destroy(): docking_base = null selected_node = null if quest != null: - if Quest.Restriction.NoDeaths in quest.restrictions: - quest.fail() + quest.trigger_restriction(Quest.Restriction.NoDeaths) + +func on_quest_failed(_bool: bool): + quest.quest_failed.disconnect(on_quest_failed) + quest = null diff --git a/scripts/Ship/weapon.gd b/scripts/Ship/weapon.gd index 37f3083..fce628a 100644 --- a/scripts/Ship/weapon.gd +++ b/scripts/Ship/weapon.gd @@ -44,8 +44,7 @@ func _process(_delta) -> void: func shoot() -> void: if ship is PlayerShip: if ship.quest != null: - if Quest.Restriction.NoWeapon in ship.quest.restrictions: - ship.quest.fail() + ship.quest.trigger_restriction(Quest.Restriction.NoWeapon) for spawner in spawner_points: var projectile_instance = projectile.instantiate() ProjectileContainer.instance.add_child(projectile_instance) diff --git a/scripts/Star System/star_system.gd b/scripts/Star System/star_system.gd index 6df9e1f..206eede 100644 --- a/scripts/Star System/star_system.gd +++ b/scripts/Star System/star_system.gd @@ -22,6 +22,8 @@ var targeted_node: Node2D = null var player_ship: PlayerShip ## Pause controller reference var pause_controller: Control +## All bases in the system +var bases: Array[Base] func _ready(): player_ship = get_node_or_null("FactionPlayer/PlayerShip") @@ -61,3 +63,11 @@ func set_targeted_node(node): func clear_targeted_node(): targeted_node = null + +## Returns base with given name +func find_base_by_name(base_name: String) -> Base: + for base in bases: + if base.base_name == base_name: + return base + return null + diff --git a/translations/base_dialogue.csv b/translations/base_dialogue.csv index f4f1249..37a6625 100644 --- a/translations/base_dialogue.csv +++ b/translations/base_dialogue.csv @@ -22,7 +22,7 @@ BASE_TAKE_QUEST_RECEIVED,Do you have any work for me?\n{answer},Есть ли у BASE_TAKE_QUEST_FAILED,"No errands, I'm afraid.\nAnything else?\n> ","Боюсь, что нет.\nЧто-то ещё?\n> " BASE_TAKE_QUEST_SUCCEED,"Yes, we have one errand, that you can do\n{quest_info}\nDo you agree?\n> ","Да, у нас есть одно дельце, которое некому поручить.\n{quest_info}\nВы согласны?\n> " BASE_QUEST_INFO_LOCAL,Ask about current errand state,Узнать состояние текущего поручения -BASE_QUEST_INFO_RECEIVED,"Can I ask about my errand state?\nYou errand was given by: {given_by}\n{answer}\nCurrent progress:\n{progress}\n> ","Можно узнать состояние моего поручения?\nПоручение было выдано: {given_by}\n{answer}\nТекущий прогресс:\n{progress}\n> " +BASE_QUEST_INFO_RECEIVED,"Can I ask about my errand state?\nYou errand was given by: {given_by}\n{answer}\nCurrent progress: {progress}\n> ","Можно узнать состояние моего поручения?\nПоручение было выдано: {given_by}\n{answer}\nТекущий прогресс: {progress}\n> " BASE_QUEST_ACCEPT_LOCAL,Accept,Принять BASE_QUEST_ACCEPT_RECEIVED,"I agree\nGood, I'll assign that errand to you.\nAnything else?\n> ","Я согласен\nХорошо, назначаю Вам это поручение.\nЧто-то ещё?\n> " BASE_QUEST_DECLINE_LOCAL,Decline,Отказаться @@ -32,7 +32,7 @@ BASE_QUEST_CANCEL_RECEIVED,"I want to reject the errand\nIn that case, you won't BASE_QUEST_REWARD_LOCAL,Receive reward,Получить награду BASE_QUEST_REWARD_RECEIVED,"I've completed the assignment, what about reward?\nOne moment...\nThe work is done, I see. The reward will be transferred now.\n[RECEIVED SPINOTS: {reward}]\nAnything else?\n> ","Я выполнил ваше поручение, что насчёт награды?\nСекунду...\nДа, действительно, дело сделано, сейчас переведу вашу награду...\n[ПОЛУЧЕНЫ СПИНОТЫ: {reward}]\nЧто-то ещё?\n> " BASE_QUEST_ELIMINATION,"Eliminate {target_class} class ships: {amount}\n[ul]{restrictions}[/ul]\Reward: {reward}","Уничтожьте корабли класса {target_class}: {amount}\n[ul]{restrictions}[/ul]\nНаграда: {reward}" -BASE_QUEST_DELIVERY,"We'll entrust you with a valuable cargo. Deliver it to the base {base_name}\n[ul]{restrictions}[/ul]\nReward: {reward}","Мы поручим вам ценный груз. Доставьте его на базу {base_name}.\n[ul]{restrictions}[/ul]\nНаграда: {reward}" +BASE_QUEST_DELIVERY,"We'll entrust you with a valuable cargo. Deliver it to the {base_name}\n[ul]{restrictions}[/ul]\nReward: {reward}","Мы поручим вам ценный груз. Доставьте его по адресу: {base_name}.\n[ul]{restrictions}[/ul]\nНаграда: {reward}" BASE_QUEST_RESTRICTION_NO_DEATHS,"The reward is nullified if your ship is destroyed","При разрушении Вашего корабля награда аннулируется" BASE_QUEST_RESTRICTION_NO_WEAPON,"Usage of weaponry during errand is prohibited","Использовать вооружение корабля в процессе выполнения поручения запрещено" BASE_QUEST_RESTRICTION_TIMER,"You have {time} s. to complete the errand","У вас есть {time} сек. на выполнение поручения" diff --git a/translations/base_dialogue.en.translation b/translations/base_dialogue.en.translation index 1e0fc309f512db90d8cf15068fd41ac2d9abf2bb..de9c292a0f47b017bbe52dd2d42b1e806ca934bf 100644 GIT binary patch delta 90 zcmdldx=VC}G$X4?L3v);W(7tzMn;9n>P+VuZ6<$bYG;g@T+b}d7`}Nrb1)-o3hy>P+Vu?I(X{YG;g}T+b}d7`1sib1)-oJOcwm x>E!n;@{DYg`B|+Q6E}OaiZL@9ZcgIZ&d3y{H(7#f8ZQGoP!%H(2L%T?0|2Vi7JvW% diff --git a/translations/base_dialogue.ru.translation b/translations/base_dialogue.ru.translation index f9fccff0012b69d18dbbb47b81a01c8cfab92427..395bdaced5d493be3468f01b85b9cd339768c6c8 100644 GIT binary patch delta 109 zcmcbrcvEqMG$U(nV!ollW(7u3M#hfGW=!W9MJBT`w=?EV?qe2bOy0bVIhc`kE&~I@ z+{yn~sfA7cOj diff --git a/translations/bases.csv b/translations/bases.csv index 71a5534..9562d57 100644 --- a/translations/bases.csv +++ b/translations/bases.csv @@ -1,3 +1,3 @@ ,en,ru -BASE_NAME_0,Zakozlennaja,Закозлённая -BASE_NAME_1,Spinned,Покрученная \ No newline at end of file +BASE_NAME_0,Base Zakozlennaja,Закозлённая база +BASE_NAME_1,Base Spinned,Покрученная база \ No newline at end of file diff --git a/translations/bases.en.translation b/translations/bases.en.translation index 82b6b8fdad31bae7285831d531178db44cd3536f..17316fb2e5f6e81f4c8ec15460464be0fe62e937 100644 GIT binary patch delta 110 zcmcb_e2aO5G$X5-Nr6$pWCg~!7$F7*1|A^h1!6`hHnmo<12P#vav;nG#PUEa2gFW^ q#iVQAj}5D@<1#K#8HXa h`Bgcod3lLhi44I7nR$7sDL`Qcb|41n4GIo&1^@}24|D(k diff --git a/translations/bases.ru.translation b/translations/bases.ru.translation index 814d7434f2f9546d498593504b4c4f28685c8774..ca9854f7d50f1b93988dceba2405d6e82de48e6d 100644 GIT binary patch delta 142 zcmey#+{v;*nvu0QwmI delta 126 zcmeBV`N_ONnvvBwB_pkDvI1jnjyMAY0}L|)*&u9ctzrkH;NomRwmcB)0r7?D7dBkj xbz$Fy?H6`moOod`5N^2G&v0QrP-xf1hKtP?+b?W|3o|gV1NDH+3