From 8a40de576e7fab93c15617ac84f6293e99321720 Mon Sep 17 00:00:00 2001 From: 2ndbeam <166764593+2ndbeam@users.noreply.github.com> Date: Sat, 25 May 2024 22:32:48 +0300 Subject: [PATCH] Quest system base --- menus/Base Menu/Quest/menu_quest_current.tres | 20 ++++++++++ menus/Base Menu/Quest/menu_quest_new.tres | 15 ++++++++ menus/Base Menu/root_menu.tres | 18 +++++++-- project.godot | 2 +- quests/test1.tres | 13 +++++++ scenes/Star System/star_system_debug.tscn | 4 +- scripts/Base/Menu/dialogue.gd | 5 +++ scripts/Base/Menu/quest.gd | 35 ++++++++++++++++++ scripts/Classes/quest.gd | 15 ++++++-- translations/base_dialogue.csv | 20 ++++++++++ translations/base_dialogue.en.translation | Bin 1438 -> 2694 bytes translations/base_dialogue.ru.translation | Bin 1897 -> 4257 bytes translations/bases.csv | 3 ++ translations/bases.csv.import | 17 +++++++++ translations/bases.en.translation | Bin 0 -> 466 bytes translations/bases.ru.translation | Bin 0 -> 505 bytes translations/ships.csv | 3 ++ translations/ships.csv.import | 17 +++++++++ translations/ships.en.translation | Bin 0 -> 458 bytes translations/ships.ru.translation | Bin 0 -> 493 bytes 20 files changed, 178 insertions(+), 9 deletions(-) create mode 100644 menus/Base Menu/Quest/menu_quest_current.tres create mode 100644 menus/Base Menu/Quest/menu_quest_new.tres create mode 100644 quests/test1.tres create mode 100644 translations/bases.csv create mode 100644 translations/bases.csv.import create mode 100644 translations/bases.en.translation create mode 100644 translations/bases.ru.translation create mode 100644 translations/ships.csv create mode 100644 translations/ships.csv.import create mode 100644 translations/ships.en.translation create mode 100644 translations/ships.ru.translation diff --git a/menus/Base Menu/Quest/menu_quest_current.tres b/menus/Base Menu/Quest/menu_quest_current.tres new file mode 100644 index 0000000..32e202d --- /dev/null +++ b/menus/Base Menu/Quest/menu_quest_current.tres @@ -0,0 +1,20 @@ +[gd_resource type="Resource" script_class="Menu" load_steps=6 format=3 uid="uid://b53q1848yjrr2"] + +[ext_resource type="Script" path="res://scripts/Classes/Menu/menu.gd" id="1_miou6"] +[ext_resource type="Script" path="res://scripts/Classes/Menu/combo_menu_resource.gd" id="1_n1rfm"] +[ext_resource type="Script" path="res://scripts/Classes/Menu/menu_menu_resource.gd" id="2_38cjf"] + +[sub_resource type="Resource" id="Resource_ygiya"] +script = ExtResource("1_n1rfm") +item_script = &"res://scripts/Base/Menu/send_message.gd" +item_menu = &"res://menus/Base Menu/root_menu.tres" + +[sub_resource type="Resource" id="Resource_xno7g"] +script = ExtResource("2_38cjf") +item = &"res://menus/Base Menu/root_menu.tres" + +[resource] +script = ExtResource("1_miou6") +item_ids = Array[String](["BASE_QUEST_CANCEL", "BASE_QUEST_REWARD", "BASE_RETURN", "NULL", "NULL", "NULL", "NULL", "NULL"]) +item_actions = Array[int]([3, 3, 1, 0, 0, 0, 0, 0]) +item_data = Array[Resource("res://scripts/Classes/Menu/menu_resource.gd")]([SubResource("Resource_ygiya"), SubResource("Resource_ygiya"), SubResource("Resource_xno7g"), null, null, null, null, null]) diff --git a/menus/Base Menu/Quest/menu_quest_new.tres b/menus/Base Menu/Quest/menu_quest_new.tres new file mode 100644 index 0000000..10c864e --- /dev/null +++ b/menus/Base Menu/Quest/menu_quest_new.tres @@ -0,0 +1,15 @@ +[gd_resource type="Resource" script_class="Menu" load_steps=4 format=3 uid="uid://cech3n8fidoek"] + +[ext_resource type="Script" path="res://scripts/Classes/Menu/combo_menu_resource.gd" id="1_7q3gu"] +[ext_resource type="Script" path="res://scripts/Classes/Menu/menu.gd" id="1_fwjxd"] + +[sub_resource type="Resource" id="Resource_slbna"] +script = ExtResource("1_7q3gu") +item_script = &"res://scripts/Base/Menu/send_message.gd" +item_menu = &"res://menus/Base Menu/root_menu.tres" + +[resource] +script = ExtResource("1_fwjxd") +item_ids = Array[String](["BASE_QUEST_ACCEPT", "BASE_QUEST_DECLINE", "NULL", "NULL", "NULL", "NULL", "NULL", "NULL"]) +item_actions = Array[int]([3, 3, 0, 0, 0, 0, 0, 0]) +item_data = Array[Resource("res://scripts/Classes/Menu/menu_resource.gd")]([SubResource("Resource_slbna"), SubResource("Resource_slbna"), null, null, null, null, null, null]) diff --git a/menus/Base Menu/root_menu.tres b/menus/Base Menu/root_menu.tres index cb42b86..926300d 100644 --- a/menus/Base Menu/root_menu.tres +++ b/menus/Base Menu/root_menu.tres @@ -1,4 +1,4 @@ -[gd_resource type="Resource" script_class="Menu" load_steps=5 format=3 uid="uid://2ohcxoor22hr"] +[gd_resource type="Resource" script_class="Menu" load_steps=7 format=3 uid="uid://2ohcxoor22hr"] [ext_resource type="Script" path="res://scripts/Classes/Menu/combo_menu_resource.gd" id="1_d2x8v"] [ext_resource type="Script" path="res://scripts/Classes/Menu/menu.gd" id="1_h4chp"] @@ -13,8 +13,18 @@ script = ExtResource("1_d2x8v") item_script = &"res://scripts/Base/Menu/send_message.gd" item_menu = &"res://menus/Base Menu/BuySell/menu_sell.tres" +[sub_resource type="Resource" id="Resource_huqnt"] +script = ExtResource("1_d2x8v") +item_script = &"res://scripts/Base/Menu/send_message.gd" +item_menu = &"res://menus/Base Menu/Quest/menu_quest_new.tres" + +[sub_resource type="Resource" id="Resource_vkoj2"] +script = ExtResource("1_d2x8v") +item_script = &"res://scripts/Base/Menu/send_message.gd" +item_menu = &"res://menus/Base Menu/Quest/menu_quest_current.tres" + [resource] script = ExtResource("1_h4chp") -item_ids = Array[String](["BASE_FETCH_BUY", "BASE_FETCH_SELL", "NULL", "NULL", "NULL", "NULL", "NULL", "NULL"]) -item_actions = Array[int]([3, 3, 0, 0, 0, 0, 0, 0]) -item_data = Array[Resource("res://scripts/Classes/Menu/menu_resource.gd")]([SubResource("Resource_iiy7m"), SubResource("Resource_pbhiw"), null, null, null, null, null, null]) +item_ids = Array[String](["BASE_FETCH_BUY", "BASE_FETCH_SELL", "BASE_TAKE_QUEST", "BASE_QUEST_INFO", "NULL", "NULL", "NULL", "NULL"]) +item_actions = Array[int]([3, 3, 3, 3, 0, 0, 0, 0]) +item_data = Array[Resource("res://scripts/Classes/Menu/menu_resource.gd")]([SubResource("Resource_iiy7m"), SubResource("Resource_pbhiw"), SubResource("Resource_huqnt"), SubResource("Resource_vkoj2"), null, null, null, null]) diff --git a/project.godot b/project.godot index a99fa60..e0e5868 100644 --- a/project.godot +++ b/project.godot @@ -94,7 +94,7 @@ dock={ [internationalization] -locale/translations=PackedStringArray("res://translations/gui.en.translation", "res://translations/gui.ru.translation", "res://translations/base_dialogue.en.translation", "res://translations/base_dialogue.ru.translation", "res://translations/items.en.translation", "res://translations/items.ru.translation") +locale/translations=PackedStringArray("res://translations/gui.en.translation", "res://translations/gui.ru.translation", "res://translations/base_dialogue.en.translation", "res://translations/base_dialogue.ru.translation", "res://translations/items.en.translation", "res://translations/items.ru.translation", "res://translations/bases.en.translation", "res://translations/bases.ru.translation", "res://translations/ships.en.translation", "res://translations/ships.ru.translation") [layer_names] diff --git a/quests/test1.tres b/quests/test1.tres new file mode 100644 index 0000000..bda02d6 --- /dev/null +++ b/quests/test1.tres @@ -0,0 +1,13 @@ +[gd_resource type="Resource" script_class="Quest" load_steps=2 format=3 uid="uid://6s288ijcp7f"] + +[ext_resource type="Script" path="res://scripts/Classes/quest.gd" id="1_8c3mr"] + +[resource] +script = ExtResource("1_8c3mr") +type = 0 +progress_max = 3 +reward_money = 150.0 +restrictions = Array[int]([0]) +data = { +"target_class": "SHIP_KAMIKAZE" +} diff --git a/scenes/Star System/star_system_debug.tscn b/scenes/Star System/star_system_debug.tscn index c88f793..8a681c9 100644 --- a/scenes/Star System/star_system_debug.tscn +++ b/scenes/Star System/star_system_debug.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=10 format=3 uid="uid://crneq2enhxsw5"] +[gd_scene load_steps=11 format=3 uid="uid://crneq2enhxsw5"] [ext_resource type="PackedScene" uid="uid://bsnrcw64qr2hr" path="res://scenes/Star System/star_system_template.tscn" id="1_2ai1l"] [ext_resource type="PackedScene" uid="uid://dk3nvl8f0v24e" path="res://scenes/Base/base_template.tscn" id="3_m5ica"] @@ -9,6 +9,7 @@ [ext_resource type="Resource" uid="uid://dlnl6w416qylo" path="res://items/Valuables/raw_materials.tres" id="6_mrd6j"] [ext_resource type="PackedScene" uid="uid://dok3i8u5t1ka4" path="res://scenes/Ships/player_ship.tscn" id="7_jyplv"] [ext_resource type="Resource" uid="uid://16xqvcrmuga6" path="res://items/Valuables/energy_cell.tres" id="7_x535v"] +[ext_resource type="Resource" uid="uid://6s288ijcp7f" path="res://quests/test1.tres" id="8_6tapm"] [node name="StarSystem" instance=ExtResource("1_2ai1l")] width = 16384 @@ -30,6 +31,7 @@ position = Vector2(19, 10) position = Vector2(719, -559) 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_6tapm") [node name="KamikazeShip" parent="FactionAggressive" index="0" instance=ExtResource("4_i6rbg")] position = Vector2(-1712, -608) diff --git a/scripts/Base/Menu/dialogue.gd b/scripts/Base/Menu/dialogue.gd index 58801b3..df35ccd 100644 --- a/scripts/Base/Menu/dialogue.gd +++ b/scripts/Base/Menu/dialogue.gd @@ -8,10 +8,13 @@ const SELL_FETCH = "BASE_FETCH_SELL" const BUY_ITEM = "BASE_BUY_ITEM" ## This message will trigger dialogue to get selected item data const SELL_ITEM = "BASE_SELL_ITEM" +## This message will trigger quest node to make answer format +const TAKE_QUEST = "BASE_TAKE_QUEST" @onready var dialogue = $DialogueView @onready var buy_sell = $"../../BuySell" @onready var actions_menu = $"../Actions/ActionsMenu" +@onready var quest = $"../../Quest" func _ready(): var tween = create_tween() \ @@ -40,6 +43,8 @@ func send_message(msg: Message): var item_name = list[id].name format["amount"] = actions_menu.buy_sell_amount format["item_name"] = item_name + TAKE_QUEST: + format["answer"] = quest.answer var new_msg = tr(msg.fact + "_RECEIVED").format(format) var old_len = len(dialogue.get_parsed_text()) dialogue.append_text(new_msg) diff --git a/scripts/Base/Menu/quest.gd b/scripts/Base/Menu/quest.gd index 8458cc9..30dc907 100644 --- a/scripts/Base/Menu/quest.gd +++ b/scripts/Base/Menu/quest.gd @@ -4,9 +4,44 @@ var base: Base var quest: Quest +const NO_QUEST = "BASE_TAKE_QUEST_FAILED" +const HAS_QUEST = "BASE_TAKE_QUEST_SUCCEED" +const QUEST_TYPE = { + Quest.Type.Elimination: "BASE_QUEST_ELIMINATION", + Quest.Type.Delivery: "BASE_QUEST_DELIVERY" +} +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" +} +var has_quest: bool = false +var answer: 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) + +func make_answer(quest: Quest): + has_quest = quest != null + if !has_quest: + answer = tr(NO_QUEST) + return + 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 + 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) diff --git a/scripts/Classes/quest.gd b/scripts/Classes/quest.gd index ca7e353..896a29c 100644 --- a/scripts/Classes/quest.gd +++ b/scripts/Classes/quest.gd @@ -41,11 +41,11 @@ enum Status{ var progress : int = 0: set(value): if value >= progress_max: - quest_ended.emit(true) + end() @export var reward_money : float @export var restrictions : Array[Restriction] = [] @export var data : Dictionary = {} -@export var status: Status +var status: Status = Status.Idle ## Emits when quest was given to player signal quest_added @@ -55,7 +55,7 @@ signal quest_ended signal quest_failed ## Creates quest with given parameters -static func create(type : Type, progress_max : int, reward_money : float, restrictions : Array[Restriction] = [], data : Dictionary = {}) -> void: +static func create(type : Type, progress_max : int, reward_money : float, restrictions : Array[Restriction] = [], data : Dictionary = {}) -> Quest: var quest = Quest.new() quest.type = type quest.progress_max = progress_max @@ -64,6 +64,7 @@ static func create(type : Type, progress_max : int, reward_money : float, restri quest.data = data quest.status = Status.Taken quest.quest_added.emit(quest) + return quest ## Progress by quest func do_progress() -> void: @@ -74,6 +75,14 @@ func fail() -> void: quest_failed.emit(false) status = Status.Idle +func end() -> void: + quest_ended.emit(true) + status = Status.Reward + +func reward() -> float: + status = Status.Idle + return reward_money + ## Trigger restriction func trigger_restriction(restriction: Restriction) -> void: if restrictions.has(restriction): diff --git a/translations/base_dialogue.csv b/translations/base_dialogue.csv index 8aa799b..b0902d0 100644 --- a/translations/base_dialogue.csv +++ b/translations/base_dialogue.csv @@ -17,4 +17,24 @@ BASE_BUY_ITEM_RECEIVED,"[BOUGHT {amount}x{item_name}]\nThanks, anything else?\n> BASE_SELL_ITEM_LOCAL,Sell {amount}x{item_name} ({total_cost}),Продать {amount}x{item_name} ({total_cost}) BASE_SELL_ITEM_RECEIVED,"[SOLD {amount}x{item_name}]\nThanks, anything else?\n> ","[ПРОДАНО {amount}x{item_name}]\nСпасибо, что-то ещё?\n> " BUY_SELL_ITEM,{item_id}. {item_name},{item_id}. {item_name} +BASE_TAKE_QUEST_LOCAL,Ask about assignments,Спросить насчёт поручений +BASE_TAKE_QUEST_RECEIVED,Do you have any work for me?\n{answer},Есть ли у вас работа для меня?\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:\n{answer}\nCurrent progress:\n{progress}\n> ","Можно узнать состояние моего поручения?\nВаше поручение звучало так:\n{answer}\nТекущий прогресс:\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,Отказаться +BASE_QUEST_DECLINE_RECEIVED,"Maybe another time\nAs you wish.\nAnything else?\n> ","Может быть, в другой раз\nКак Вам угодно.\nЧто-то ещё?\n> " +BASE_QUEST_CANCEL_LOCAL,Reject the errand,Отказаться от поручения +BASE_QUEST_CANCEL_RECEIVED,"I want to reject the errand\nIn that case, you won't get any reward.\nAnything else?\n> ","Я хочу отказаться от поручения\nВ таком случае, никакой награды Вам не положено.\nЧто-то ещё?\n> " +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 {reward} SPINOTS]\nAnything else?\n> ","Я выполнил ваше поручение, что насчёт награды?\nСекунду...\nДа, действительно, дело сделано, сейчас переведу вашу награду...\n[ПОЛУЧЕНО {reward} СПИНОТОВ]\nЧто-то ещё?\n> " +BASE_QUEST_ELIMINATION,"Eliminate {target_class} class ships: {amount}\n[ul]{restrictions}[/ul]","Уничтожьте корабли класса {target_class}: {amount}\n[ul]{restrictions}[/ul]" +BASE_QUEST_DELIVERY,"We'll entrust you with a valuable cargo. Deliver it to the base {base_name}\n[ul]{restrictions}[/ul]","Мы поручим вам ценный груз. Доставьте его на базу {base_name}.\n[ul]{restrictions}[/ul]" +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} сек. на выполнение поручения" +BASE_RETURN,Back,Назад NULL, , \ No newline at end of file diff --git a/translations/base_dialogue.en.translation b/translations/base_dialogue.en.translation index de1158c95e05d374cca2b695619600bbae1e4926..fdb9fdf7018d3a01de146ce8d6403c761008bea9 100644 GIT binary patch literal 2694 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 delta 524 zcmZ3e_>ymf3?oZ^WqR>s1xDL?aRvxr15yG&EC$3XK>QyHw18{_DBlc9I{;}nAohXs zK}v&=*dTrkl+OyJ6@WMmh#8^ym9;F#L?#9XB?g9i5WxUsgC%E5JYSXvWGh0kn}N4^ z08p19kPpHz10)pkJ3N4z+<{^s%nX(LI%CdRAd>-P1_)QnDNNx2O8NrXAnc?T`Q#0d z53&zpXFbHwLxyrQRe>VPKnW0rS;U#mu_zR%!5An8!Z2~kE86A#P%)4=#4w6ysO#j}#thaB0919tspaqh|y~FZ`{Xh*M1DPhTW0nTF3al-9 z@wO+|fgD&^thmeUb`|I}Py~uk{>LmWC6d_{)(A8-2Pgu_7~1L{M;$GXRpiXfgl* diff --git a/translations/bases.csv b/translations/bases.csv new file mode 100644 index 0000000..71a5534 --- /dev/null +++ b/translations/bases.csv @@ -0,0 +1,3 @@ +,en,ru +BASE_NAME_0,Zakozlennaja,Закозлённая +BASE_NAME_1,Spinned,Покрученная \ No newline at end of file diff --git a/translations/bases.csv.import b/translations/bases.csv.import new file mode 100644 index 0000000..22c940c --- /dev/null +++ b/translations/bases.csv.import @@ -0,0 +1,17 @@ +[remap] + +importer="csv_translation" +type="Translation" +uid="uid://neu2fqwajpmd" + +[deps] + +files=["res://translations/bases.en.translation", "res://translations/bases.ru.translation"] + +source_file="res://translations/bases.csv" +dest_files=["res://translations/bases.en.translation", "res://translations/bases.ru.translation"] + +[params] + +compress=true +delimiter=0 diff --git a/translations/bases.en.translation b/translations/bases.en.translation new file mode 100644 index 0000000000000000000000000000000000000000..82b6b8fdad31bae7285831d531178db44cd3536f GIT binary patch literal 466 zcma)(%SuBr5QfLQ;ssm??kwoWRS_?ULO1GKICbSFOw*x_JtsLNDM}y62XN`DxzK-3 zTj)Z;fse`j$xJ4bqFdb2%vRx-!5TOKk9BsHn@ImDvQH&v7d+&tt-yV~etf>)??247 z|M*QDIs{Qt7)L9n43dQ!&RA`?QrnTv3iHw<+VPe)=_E^&*7R3ps zI&K5017Tz*Vp_$rllfO{O5xt5jS7?A_?Y%p*f)?wGhiDOosL?q-@a7rcY}*-+I4$T ze-6Y=%MGJSm601{vs4IL0N+#Pwl={EaP1uj$2%t*$coAz!b4BI>$L^;fF0PO9oY~2 hYTxol`;KdvKahQf8s)e7U4Cz0CYp-jxxOBL`VVp+co_fy literal 0 HcmV?d00001 diff --git a/translations/ships.csv b/translations/ships.csv new file mode 100644 index 0000000..864f4a7 --- /dev/null +++ b/translations/ships.csv @@ -0,0 +1,3 @@ +,en,ru +SHIP_KAMIKAZE,Kamikaze,Камикадзе +SHIP_SHOOTER,Shooter,Стрелок \ No newline at end of file diff --git a/translations/ships.csv.import b/translations/ships.csv.import new file mode 100644 index 0000000..9fa59e9 --- /dev/null +++ b/translations/ships.csv.import @@ -0,0 +1,17 @@ +[remap] + +importer="csv_translation" +type="Translation" +uid="uid://dliy5u8hemcej" + +[deps] + +files=["res://translations/ships.en.translation", "res://translations/ships.ru.translation"] + +source_file="res://translations/ships.csv" +dest_files=["res://translations/ships.en.translation", "res://translations/ships.ru.translation"] + +[params] + +compress=true +delimiter=0 diff --git a/translations/ships.en.translation b/translations/ships.en.translation new file mode 100644 index 0000000000000000000000000000000000000000..f2ad8683d367f5020ac1bd63868b5f312e86cded GIT binary patch literal 458 zcmWFv4svFI0u~_61jMXBEDFT_1tpoenN_JNAw`LK#W{&3nfZA@VF+LbQU_*zjuDA= z1gRw&Z~#?G0C7=jaeir0a%y}|esW??d`W(MadK*2Dgz&~TwY>sDg!4_BsaCVI59o7 zn1LP00qaO*;07`?5{on9OA?cEQWvd0LZ4|lA_GKbcnX%Tn zK-kXCZzafUARmF83KOs1xK;$n1$!GL4>Cg@hy{SyJ25viJFzO2;a~9X`_liwdO`Yv HfUyVwq7`1O literal 0 HcmV?d00001 diff --git a/translations/ships.ru.translation b/translations/ships.ru.translation new file mode 100644 index 0000000000000000000000000000000000000000..3c207cf4ab05a6f4b79ef55f9c75c1aa8053b916 GIT binary patch literal 493 zcma)(J4*vW6os#E#aE$%olz^RSXo%4u~%5_m&rP0m+Xs~*+v_+v9`5KX(1>Wlom7RsRMsSP987^VaFn|!iO%%tiBYMIm5Z_z_NXQx zAJ>=fH~r7e%KMMbqG=r%ZL`7z+K;n9#lFjY8|YNi($BM0C7R~oB-&cl(w1hh8Q#z| zk7cNA=sVSnH7#P>EP}Rnr6Dg_XQH$!KV*_jfzU2q* f^9%Q&PyEbX;?Ce|aKT-Es9)9#UOUiOS literal 0 HcmV?d00001